From 7fd53765c829e164f394bac1245e961830166126 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 24 Apr 2022 16:02:49 +0200 Subject: [PATCH] bump version to 0.6.5 --- CHANGELOG.md | 17 + VERSION | 2 +- docs/.buildinfo | 2 +- docs/_images/fittrackee_screenshot-01.png | Bin 552072 -> 552264 bytes docs/_images/fittrackee_screenshot-02.png | Bin 377332 -> 377515 bytes docs/_images/fittrackee_screenshot-03.png | Bin 207051 -> 207246 bytes docs/_images/fittrackee_screenshot-04.png | Bin 71148 -> 71338 bytes docs/_images/fittrackee_screenshot-05.png | Bin 72399 -> 72591 bytes docs/_images/fittrackee_screenshot-06.png | Bin 105295 -> 105486 bytes docs/_sources/changelog.md.txt | 17 + docs/_sources/features.rst.txt | 2 +- docs/_sources/installation.rst.txt | 16 +- docs/_static/documentation_options.js | 2 +- docs/api/auth.html | 4 +- docs/api/configuration.html | 8 +- docs/api/index.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/changelog.html | 509 +++++++++--------- docs/cli.html | 4 +- docs/features.html | 6 +- docs/genindex.html | 4 +- docs/http-routingtable.html | 4 +- docs/index.html | 4 +- docs/installation.html | 20 +- docs/objects.inv | Bin 1340 -> 1340 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 552072 -> 552264 bytes .../_images/fittrackee_screenshot-02.png | Bin 377332 -> 377515 bytes .../_images/fittrackee_screenshot-03.png | Bin 207051 -> 207246 bytes .../_images/fittrackee_screenshot-04.png | Bin 71148 -> 71338 bytes .../_images/fittrackee_screenshot-05.png | Bin 72399 -> 72591 bytes .../_images/fittrackee_screenshot-06.png | Bin 105295 -> 105486 bytes docsrc/source/features.rst | 2 +- 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 +- .../js/{app.fa6f4b25.js => app.2222dbc7.js} | 4 +- ...pp.fa6f4b25.js.map => app.2222dbc7.js.map} | 2 +- ...kouts.9770e7ed.js => workouts.4c428272.js} | 2 +- ...70e7ed.js.map => workouts.4c428272.js.map} | 2 +- fittrackee_client/package.json | 2 +- pyproject.toml | 2 +- 53 files changed, 382 insertions(+), 325 deletions(-) rename fittrackee/dist/static/js/{app.fa6f4b25.js => app.2222dbc7.js} (99%) rename fittrackee/dist/static/js/{app.fa6f4b25.js.map => app.2222dbc7.js.map} (99%) rename fittrackee/dist/static/js/{workouts.9770e7ed.js => workouts.4c428272.js} (99%) rename fittrackee/dist/static/js/{workouts.9770e7ed.js.map => workouts.4c428272.js.map} (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6678ce48..a91a00da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Change log +## Version 0.6.5 (2022/04/24) + +It is now possible to start FitTrackee without a configured SMTP provider (see [documentation](https://samr1.github.io/FitTrackee/installation.html#emails)). +It reduces pre-requisites for single-user instances. + +To manage users, a new [CLI](https://samr1.github.io/FitTrackee/cli.html) is available. + + +### Issues Closed + +#### Features + +* [#180](https://github.com/SamR1/FitTrackee/issues/180) - allow using FitTrackee without SMTP server + +In this release 1 issue was closed. + + ## Version 0.6.4 (2022/04/23) ### Issues Closed diff --git a/VERSION b/VERSION index d2b13eb6..ef5e4454 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.6.4 +0.6.5 diff --git a/docs/.buildinfo b/docs/.buildinfo index df128a0c..f1ae242a 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: 5c4236cdf8857210c21f0a7da25523a7 +config: 1ea083693023f346a774e8d4c5d799a3 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_images/fittrackee_screenshot-01.png b/docs/_images/fittrackee_screenshot-01.png index d991b0a6ac14dcb24d16d445c42d239f62396269..4b6b8658b48ac2cf18827c52620ef8bea095e3b7 100644 GIT binary patch delta 21892 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 delta 21861 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 OJk*u7l&Tagg8v8ANxb<0 diff --git a/docs/_images/fittrackee_screenshot-02.png b/docs/_images/fittrackee_screenshot-02.png index e0fc23384779033fb1a3468cbe4ba17b7600b01c..be83f0c0c7cc84ab7d654c3160cf594b1d275e15 100644 GIT binary patch delta 18601 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 delta 18594 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 KF-peb)qeoQ^{So# delta 25213 zcmV)&K#aeR(+tbe46p$KfAaIQb0R14x}?U>l)`%^1mw3keg5mr=xVC@*OR_w<@42# zY>jtl+|O*~_&z252y*@W{p)cT%I{fuLjT8|v%O!%@5f_!Mbh~n(bxCA+wQYwRxxrV z)b+ink0m~@IB#+b-P#;etG@AF7@|F2oiC%R7x&tJ`N`J`Jw!5be?tyCjBvwwey^~Y zVvfhf#)}wNOwU0}E%vyQ@|X1$ZfvQios1-}C+#`K&$)!>w%srH+|9W24xGx07dMXo z{LB5*3+`3ELr^S9eR$G|kROv7yLxW`HT&SOxjT#yym0U`xr4=i^jGAh$rPkW2 zKykFxvTLQ))|$26h9%2ZtXea(ZllMZ0L{{CZ{2$DV{p&Gf5?NY2Pcd%<4iNp;%1#~ z+U#>I%4g+OR$Xn`>TB${(*{3w-EG_Mdz^46rISxN^|WKBpK&R*o7~N}+a(ef@*1g?HBClPR6pKC{Nr);@*^f|H`0k+A4;AmdFbprE62<}KtLl{w|i_efWi z$Rvw$wu3T8e+KgjvE1;HI~QLWRp$Ord2=m)%Uk?UGv}1Lf0((y^Y&ZTwrFTQ8GCi1 zg6b39$2lV!|KYlP+iX4L2>`XxdJj(c#zgX}Al170q7>@iShL*(A(WZ#w36n89(@bD^)t`DgJ^wBq@^>`mFlp%9rGW}Z|+}g zhP!XDwNpF0Ud1Jy9a(Cr>95I9J$ckzp0IRhXRSD5p1sv%b=F?m@F%yO?z$)ZHbhi{ z8z>mhe@v~caA*-GeOJ1LdWc}S&1oZn_ds}~djDQV8LF(mrst}S{BNKAuTHLcxWj_V z$$k_YqXR9itwzm$ocA%D_oS>@PAA5)ul2U_XnA*(3dLNU8P$C9+M$6yo6+G?=Ik^Cy~(J%W|pc@4Z$F-{W!f5-2xqkI)u$i%wGb~i$EC4N#YHFn+U z(B>p6QEjW%kF~l#7ds~H4KAeKt*kN;Yn;DJ>dQb2s+v6i9=hmkNGGa^sH;)y1#$M` z7L~G0D7^`)g=Reg3VF}fLrs^U`)L<`1{Tg}S3;{PkaOHbWp%riqcx_wZaec1-sJKT ze{W&=(e|eQMx$T6aZwdROiw@wrCUoBk)s>jeH$+%LTsom)*Jz(~H4w37z$$BqY z1EQ!n+Wb1E{Ph=qAP6t$(aQ!M!j8Si1E2y-^#6?6(m4YRuHeL|ZPJd3G-T%!Km^h) zS~lFZHo5AcZ0>i_ejq9xduWS6SM57Hf5lKN6K@j8s1-&|+nURR`4y%BhX@`|aCct1z?*c7BnXyN9}f@8&ytIal?6uf4a(O z1~Ty!pmi4P3h#-S`t46&43J(C|2hu|a&LP|erBp6*3bFa*TAkoSUUs5YxP(_^fIRi zrxFPe8bUw<8IcEdirK6;b%MWge_DfbrTZDr{XJ7~V9sTS91(3%<4Tb_Cm{5^5cwSH zyPr!_eum3^n_rAI6IkFG+CFOLe_w-A26RXFpn%g7DFz`VusE{NS_MoWeMRIe7L=J! zg;i}ZrpfU-ksqF7$_Rm{pbxD*2p;py{ks^Mh!4ELVC28+Tx;C9g=Vh^0jPR`?R0aVvjV&oVd4N}Gzi)u zsQ`4yt79f4~ot!cfU8x2V{D>i8BA zPQ*`sV-Tr(3G-p_HnIRKVhDDa?pYPQTUL6MBa>YbY}niGr1|8eBo`Utj3p^=q#g*J zD>P!KB{+D!J)&lv-!NT!KAtkHX)!~}9&mftRAAu3z~dR%!G}}>(qG~V_`(nV#vf?% zJ!v<}0hJu7e;9uth}9xe108Ukj5A^WgMP}tL^|5)QLY`thE{PJ@#!S=mpPJ~R^Jo- zz7YXn)omBv`0LKY-kc;xBD^!aKO20FMi$>2T}A>v1Uq9}k#Jd5yt zs+i%RD~YF-e!S8i3*_NtUZ8BB=$$97i6w#qD5qR$f6cVXdZMhi_&tW|7t%#KgU$AlS!xNXSfo=we!5WSl`rd)UfV zC%cbfdZfJ)rm>-`HrO^0cPJKQyWSG`Agf=pjQJ3?80lbp26fB)%NhGX$z8d)BqAqnT00NdoBYkaf ztx^dR#{r#P^h*#ywgU6XMWl-LVR>fnouI|18h`3rXd%oDAE47whT zPDm$Oy@TL}M!G&slXK1X>@{XWCt*_@#ysYG2Gc!o1*R67~zKQr-|{WRb!wYQJzS?WN5NxtLxPb0-kaFL~W95@i7iJx4pjBKUvuf5_aB z(+0`nNb80F`+9UdEH%wkzUUDoX>v&}XAtRv6$Xd0iV$cUZLDe}({H3A3GT?3B{ZST zVWB|T8cS&yfoX9&d)$(C_Oe?$D(y=0d*5Fk_8|pefr+d*+6#yM$n`ipjw&_9lNz4;zqxS7d^2H zxF>2|TM6iW4TGV=K#&xCxq~bd4sEA0;wH>MH}zkRx|HqTNCqZ=#=oZCWQ`z~2}U+MIOQc_j2|(fz5hCeOpB@jH#rTx4WA{}IfY?3aKI(dH+5YXyVQD&yRVDA2Iu z%GAgYf<>ykR)hoK)PoV!;;2z7Xi+T4JQ-Qq?9cbX)-h3Q4tZ0sf0YGMmm0-Z;b7_o z%2}#B1r?1K2HgYFMU)k>&nQit#?XyfP(hkF!{2l(n3}_!xPP$9`&bnE1FGB*K?Vop z3Nh@@!$qL0FGNep+G9viRI3hhB2^L6S|ef3DVB*SI|N(WPfvLAp^kwU47j6!sbnV4La6-J{m2BA zMMXR|b10a5?A`1Pw0eSg40i!$P-{4A7zUKWL}HP=Hmp3sZg{$W3My10zO<4^O|vce z-M2YB``CJ-e}($tb}V}&{2U(8nj`=s3Cq4#z{q=zd>~EiM@hnC)GJ+$|ELbS$SqU5Lzc6w|fY(Oh+fp0C(Q)iVlU5jV)z&3&_GmxNNB(_^nxl$K}_LRUu zrqB^m2>=*!n%Yb0ToKo!cc!)m-}1(N=$p5^(T<~Hf4GMHjUK(ihhE#45@C!>;ZtFS zs;DYKJsbgSsO+GpH~}G$09xG2(Q^lSM3P<`6K7}x<5+)f*I?&aJun4UP2TiUQi`|( z()9$QgGgXi(lZ=N9WgzaJ#;Lkg#-@TPQ|XrD5t_<1c5{+sG~cC?0`$Aa_MJ!HcO{n z?VSSYe>8cRp4f2r3AJ_-Aj&zoPykQUfD3r-h30tLRX&kSI5tqd;GA6Ak*SMyzmoab z;(^`Rh`j=M;tD2ZOs~-xjy?~&;A2<|hq30+J3xb9)OHA&iG>zsGD*%v+eHW-3V}R= z@6WUO1O|Xd8%!hMkUn+qQF9g{ElEZ_Z>vx{e=}uL0~I2^yy6Ec3gKLUS!@qdrAV=b zeN6<)UG~tUB;YVWW8h@Yw+YZ`DfhW2K zX5oo$-H^!?G~lROobX)mr$%IM(ftrK7l6Qm@=CscMeLIvUPych?!nkoxMifqo_bf$ zf0)&>F)Uh~UKdcg9DV9!K^G`CJ)Z(9ALXB0g&B)BL%`9yV4foOlxdImVE=Aq2T#`wf9(|Q5tG2zJN`e__qI z(y{T}Z}-PQ-TC}QQR*WH^yfNPyJVNDCQ5qhbZ>PH#Cks9gU;xXEYc77Ml$Z_^F35n zFWAH&ZosqP`!p;Jb0p~w4q^iBW4KDIRZJPGrEKj^_c2wnh?A(62`CpjD<~{R2M$Qo ztRE?egWj+zH(&9z)B#9R1RC6te*(EnT{=@^RWyy)2ArYwQrwU#^NbPtmIf{W9f-Ia za>YH?8Tk_hd}GQy!X7{}J`++Uz%YX!$h&kWUA#^mLqH`Wsk8z0%THtyL9TH?_Z8Q6hdBtC#Cy7JDH!@@C1I+n%i z5-;?^9AoQP4mFr1hX=79e@YF4vkZx%NBz&C?bRP!ci(@zuLDHCqv3C$j7S`#63Vvp zX@=+F2KXepdSo%)hhYABmizZkd!JQFNCa5%J${vR-j+qrncb*LZQiFMiZ&$Pq-4l54qqjDISsR)H2T7c{2#BV<8rpWje`XhHs%~vk15hgV z1c7>KOF~Hxyica_0|GS%bfatf=mDT}GsuWzZFE`DXS9~2F5pFwGeT)w)$=$0EL-GT z8+cpjLXuuVby#HR<9RFyNv%t_L=pF*%BUtf60 z$?{zw{inbGKMfRXe}z|^hb^rUCOUQq?Tt{`MmbD9F?gP;Li(INe5MCzrD|Yaz+Yr? zIB_upIqF`3pgkg$BGmjyTBOI0*d5BwFezQwM+SUk7C2JGI$#RVTycl?Q=)q=6vO5| zW#=i$q3zllu))ku68}7=^w|!SnB^Nm%w?B3V7{uJTezu>HazVKU{Yyx$dB5C9<*_Z z)5gzMeK?INv7jcjyQ%1H|J~HPp9emF>+!!n!uh}bb!2>;ZM|lb4Hh7OKcrPE4t6Nw zkfAzR5G&%SRVYG*P%E_RU~=gfG%+M8E{=k0!NHHks)LKOt`4q(Aou~|=;Wm6A|?JW zDYS_3;J6>}?mh0_0sdx1fGE_t>fQl0@I(QH#%DU2pHG~F0MP8ya!zF0I?@sG9*U|(Dau| z!220}Qvn#f1^QOq-rD;(eE@RQRptgbI0Qz^l)dKh?r?W+|DI|0_XA$(a-Yhr$&LU3 z8fR%#SaeuTOgdw;suzI*Br`Q-Gh#P3G%YqcFg7hTHDP8gVK!l8Ei+tv7h{t^D;6B2?#kK3EpaggDo?M zEi(bPEi(d&tAFn}x$67g|L=3Amz~+!zFL)4TS<#R4TPuyfvCn1*%+{K+)aF)#7>;# z=9k1yVkb9FaS}VR9sgW#fot69HXu4eAV3Jzg|w=xE!w_2y`1~U*{+qel2$rGdOaVH zee7y<=FFMzoO9;Pdp_Uq_qkTJ+*~=K`28MU<^IIefrwB?$sB+@EP5D!_|YgFIjNpaPYCGUeLFH^fPsIc5C|78vV_m-lKW5 z?ZNI}er)p9~pMU=LU%n|x`sg41jY?xt{rr1h(}zCuzqRV-YY(gL{Fnd!fu4H)WvyAaUf;j} zSNiyeR_TsgZ_wuLJN4CXd|$iv>{l!r(Puw#mu|Y|3Q2Z1_6zFk^iIQG{pzvR`pie~ z&hZA3tr|J}_S7@Y$rtcSk926yyq;QtwG_M72hQl&RNqGJ~#nO=aPP zY8p94<-5s1b#AQ04lIX1r-^tj!zb2x-@=#l^S74EFzoRw^GWGorb4E1o-AW1VQWix zg8DUemS8kWj%qee~avOHFVLqEys(ZVn?aF0SN=iz3 zE9B~ZNtsly0={YT7HwB5G+C{UEed4pAT8;gt3YO(;^`jcdK3E9fe#Ms(UQ9K;cMOY zWqsNusar0?rB2s;#WP8jWux+2UiEYjRDWd`%OAc}sbosU<=1FW$2%%y_RFl8FSE!e zpVz0F*(*l0PfpUnQ#Y)zLOO}6=ixJgTStCDGX4K)CA~5t*0=-C;Q~3kassXd6Pt|w-{qJ@04R`4$-~2zCR8?`* zZTX8o{J7rQyj{26utFcW^?FHCS0PWY?)kI7*Pq<;`&xDLwc508r#|+_f32C*rf5$8 zh4MF-Q{n<4e`%8^v2y^YS$Ev-5LjMZuJpmYd{Ni9@7tU0QSYH1?K5}DZP@oa*>2Ux z8!nYh3rJ^BAm}^aZ3kV$W}7}|0?TTtq&o1fehR~f6R^@!=L80?0~71aC~wg8;04-~ ziOEV@G7ZV}nR;{Ybk$GkQ$ezWw4AA@UhmL9ZJ4Qif5DWIvt*c(5pn4}Ynv|j{6bsy zmCKMNLsBX?O@4Q~+>yzWCnC9|o?KKaNU=$mDq~sdkrW67l}sk&n>t@z$x9WBmB?2} z$uQre@W962w|>O7yNc&aUc1V)Vb?x2w(imNnX@&yqFMoeMCnXge!m@-rcx=jcDE?g z)v2ake>>%gMkN)g$m&qExLC31vG{zy>%t-VUkE1Ix<*JXO->$6nx>|Pa(3MpH5?UVbO zCA{GQ03d=&U`!od-Kr=rk!g;vYuRreds;VLe|x3s=ggEOeQ?#y`p^IWCwg<^HeI~< z{1IbG)>Kz&_Kayd(9}E_RHic-ef5ifBCp4DN}kWNFRfFoI67E;dH%fFTC(6gJ@vxc z!Jx8kX07h|$Oi`RGkH>_9{A1Udiupzwc_%N2dhH?oL(8fJz+&r$%%hpwhDP=l|Q}P zf4#*{5hkLGuDfU`NzC=8PikF<1zl(P4B-Q_XHV2?aV9Z*QpvJmp;}Y_?~{Bjz40Pl zGyiSf|K^oSnv#__lub%cZ7b0;@5BbjsWg;VrZ7#0A-S!Ba;7Om1>GE6r|at73YC0R ziDW{C?C{Y@CM3<2%V(;m+di&yR$4xve@`xdK;6wv%16@*Wc?~6r9erQVt)JixlF&B zo13(M|6U#1(|*{K{M9255B`0@%vvqKY^8Q?ds9F9?XyZIMoxNj-oiSCd=X8lnW|pb zP|0#{ceD04?$b+adeqU;sj$~j-FXW%dGZuh#ERt)4s}s(O?GHr@$eU8V22z1eR$G zqsF_dG?TYG008W3f0_U|Tr3*Vq4rK$mL9%@%p%OPF=flm+KmQ1HLYx>l| zf7gzhnCGTzu27^XtRFt`p#JIW-_?gd@LqlF&fCV-9snjzX~LfMyRq?rJR$R4v)!JV zhTZKu9XP3qMR$=;d807m-zOVZ4j8ET9GIx(Yzy)vdrZo{o|GNNo&!#{e`~uvv5uj6 zm3_LYwoAX+8#ARzd&Yd2i~%`blbPwkO^hzH}fE zRA*<0yuP4fu@XsAXJ^OY@8+Ujsn927q~csup=3gDy}DLgckflYkWxN1l+O91BcI@k zYnDq{DQ8*gI=D}(S3jlVf8vNjq0nJLWld?B_8e$aL&J+o=HjZUm~0=j0V(8*sCL>k zU4Gf+@&^Li`ub~nY42WjbaZOjl}j~y>KyGcw#qV+^7;HjD?L(hXlZ<588*%y4MY??HBJJ9< zU!VQUe^hC4RJY!^e}WwZI7JFMOGdk2(NO7Nm+$)XmPwNKHSLw@d-nushEK;oHl;=f z6@@WxGfdaSbz$!x_b|ONr_2`D8534o>EoaH#!3&h{qW}(Z1kKP2T=cOIXKinla%SS z2FD{EPd9%n>6K{|)S5V?8)tRv@m*1+T!sdB#eyZNAh&7Qf0OCRkP$RA&$CH)EiiRy z{S>wLW@H*;zqiL?C2DSNlFw&vNZ!gwS;^%c3b3pLX{~$vb%l$4QkO@GL~`)|`~jDW zief5@wQ5pHOs=Asii(Pq%UE)I4fzb8DyPrZw0VAc4O5F3FH|O7P+xD4+#atYfuJ&0 zL9^x#g>QvIe_EMzL8(+q=~PN-BdtxF-&RAzUKJO4HDgx2ZocU~+VJvA`pFCHbpBO! z@+l~-g54Nn}+Xwu8!ESGW8c-=sB(IYFg%r0nabbv*F|U3Cd1-alQY006*ne*~4l7)oMMed2?w^mqUIE%n9| zx_s#(MI&J~wY16a_i0jP`H1CjyK#lS@VEb}t1i1pOD;H1`FvhmcI?sx^>u1%?^HM# z)ZE$ACE3B{I}LkJ?e-T(wROj?{tqCQR$R7J|M{IC>!-hdT<^POrQ9yJ_8vH>Xi-=t zvFMoVf7rHjw<^m@6)TQta&@ID%3?~S((D|-1WI@3=TLnvs_jD;x?3X#sqrl#v@`coh$0#o@R!=fHqN*|$E79I~ zn|3_@j>5%0z3+Xus`F5no_XPUO|Pp_{etsVSyU~rVaVkVsJtY6%(iIl=v7x|r~H1u zf66L`l0^Tg>$f%XzR|j(@vm!)|M&PkipS&f9ml!ThPsWDWqp7ziqXBlzP_eMpn4 z%JuUHf2V)>uOBF%&#S7UOkeuK9~>4`UUK0Aed!B-ps#-8``X{wEU(wC^XAObxBul! zy7H0>b;(5wbkkj*QB_5m>g#6c=9O2T(ry3Lhu^O+e)Yd}`7IyTr$2nVe*XjSf7SQ? zT^d7D!1?4qd)$ue^M%)me1?e@=Gq%`$x?%4&cOv zo5H%~>i5X)@hh9kDwEGB6bdOGk8AJVJ*ujzQlu!Pw>NIqp48hiir#%8rO{z`#XZ@| z%F*&hVZy^o$sWTov&D5{GnF5Qf5WOJ`)A`0NBr_u+pqIsV=oR5*Q!TOG%`>r7+W;5 z@+;M7&+=>rUG`(0YX{k=K++pClxoZ=u{S&BxTL;BSSceTe z;YLmNl*v;*va5G|Qjz*DxlDg%Ws8)L^F{~&z*wIlEX%TJhBM2WS2pOfWeZRE{y(_y zL4Ex0+h|DO4D^Hh9@HgE<|r5ps-&bu!C+7>m+Q2hA8=|E3I!Dk1wFjwC*%A4-Qv?N zm%m>gzel|ty@M0wG&Ua4t9zf4QDn&KwUj9oj%$|hGf`%XHLmW|qsM=u91oXePS|*r zBMb`$Gh2>bg?G%?yFZwe?Dbk{DZMc#e~o)w>&A%ue=xA@?6gD8wQF9GB;9b+E&AQ#kEkeGtcxyM zHtwgBPbHPK_=>e|$0q&3AN-Nl z?piIg@)#c}jy1;QsQ)jt*!%OC>m5h26)UM$zOzU2xYYK{i!%1LsrOKq zS}QZkEng%_>MCkc-WvHO%bdhwnWibP*DJr@KltPIdS#lXOp{LH0DyA?6_o%0oJLlQ zPw%!0sui?|+dNKajH&zl*c9%8S zUEZ3W8SM70{#`K>>{B|~r^=Fg6(9JKf>UoCT*c(cOSFGIYzIeMk|9+_eX1&RtGh3) zOeQ<#!|pF6G$&fB?!L5IT3VD&r}fn8r!=*^Obaf)MEBi)pH^PGasw#{Fa6$aw`os&>)~PG z@Idi6LP~#0%I&q+AHY7JUq(JB>G;NKJ$Q44%6{1=elHt6K%vQ#b?x_ms4ZXq zZ#7vFNls;?QVTD+SYBUHTefW0ZsYBt zipgkNXH)0g)a&D~7?kYbalB!r%QBUZ=T7-^Fnl9}Rx8~<=AnkVTYF=M9US&|+3tA7 zp7>-Sn2gN~46f^BcxD>P?sBPPuf6^f4eRDz%`tYOuWc-C2bM-4qqH)IFK0;G(_2(G z|BrvQ;pKnUf=gG)kQ6Ph(3Fi2=|KIbBuTHd<+P~GrD)ivuAZE-IZGb5p*cmRnxj%3 zObqR>(XdZarS7}`J{@XpQ%6s`Iu50D%X@B-*D#bXqzD49s;HxE9jn{K#4P1-#&th9fIoz_N&i`EhT?q5D|k)dpBVd%E;bR!>Q z8L!K$blTGKwx|*DXzMM0&3iJV$-c6|8Nhq;T?$l3bn6qVl`1l{_j~ti_b+~>*?;vAAi3rGA4NBkUE6Zo1AfBiaMNgg%{ks&E<<`lW)%i8m*(7zvi>=!!J+9pX_ICG9Za?c&A zh!x8pwksl&$;6mHot+)(?Cco)_rOFwo>O!#Nn1(nOYc!jwn?c%YD9PC;wfRxzpc*R z-b6x=|L%91+&fc+_^2e&(#XomW1TbmEEW1J<<0z1x9=lWW$MW5_4y3N<8gm^{3kx^ zeXcy9*5ZUbKCfo}qRVcRLRv30J)vjf&nTHms%iaJl`L7JKvRoc;gDS6kaqm^7ph#g zOoePh{^GDA*-~X&>}tyR7-Lh0TpTXn* zzfoq<**~7(cqedi7x|R8#$SI;dCIzcPk>WBTR7uTvsmsA001BWNklIag+P$Mu zk~DA5Ox?2TR!NdS=#^hyNyiSYGP#@znZn@xBq^21s5h0Fu(l`^(%OISwuh!j7t(SW zF1ZZXm|^8WW#uD}J+AlOdXx5R*Vto1j$>TOjcJVIzGL+cce#~LrxXf> z`X|;ovF`BgS5<22Z__HBQl;QajY?czqnwq~6_MpS_|S98we45kUAHT~X1!V-{+-tR z!;X%jX$5s;+QvL72F)-B9{>RTsHg-0;1sc1e7bDu3Q5v) zFFd5}`PbAFK6qAFQVusbfy@Ls(?iPBvQMSQ9y=2gWLULqW{aiF7HhD*o72s5Rh+Np zrfv5A=<&&$+^Cx1P{m$jBC8!eS$W-VdEJNC18m*8Q|s2fAxVFlRa2=uKJfk%+Dxz8 zZ3mmdp^0ux@5Ei!r>&$mxz~@lEpO$eg5)w>k|DV)mt2-hrIVvtbi;X)?8?fAA9`H1 zsd*zSE01)_GwfNi-2+92;erCiJ_XJnRs}h{B6C~^Nq>8U3^g}5OOi^>suOODTu5qc zKPX8$uenU;-`{_$n@VoczMuX|yMOUht@yt`Q_I7@Q(t?l!gK4iYTY_T7ha-m-~X|q zW{I+UO?fH}b>!NVHx91^54l1rbh9QDV2sT(vwy;({`NkU->a-q zkbI@eXYHLlT2!i7`$h%aLqSt>BCp=u;mKMim(wGUKQ2iM1_QeL;~$;S?H#DFJYH!l zsU~Z$x&lq=$h2yYZ>zSuHjI4?8hJagwEF+<58jHaqndwPodUt2?z;0%{pP_3M~0P0 z3K}ix(E5KqB{th1Nz9NTbFOvN8Md9d=h+r?$L6!8>ms;^eo#Zw1w zpZcet&})D974_`gqw9bDYnjQU%C5LnWh<`Gp-FkQC0Z4V42>b{iWutgv>!Ihw`7Nu z!Aw+zq{RUT0KmZK1DXH;fQgsx&Z}~U{o#1=;w68&AbXykfBgmZgb$vw$E+`}S7m=V zS)qs&wr5#sP4sBXp)IHFxo3A-3c5Yx?)p9M;2`8yu9w+zC%RoRw$bBPX0}+`7JE(g z<;&IAyS_Q)8>df}2D!O00+b2mH8n1F$*~qHO-~9SPB@*^zNT2@HCnkJ*+l@x` zW%GXux+C%#fpOoj$-hTE*)Az9$uB8;oX2IsElYMc@R`?5)=O(%(nmh>LH+1Q|5tb2 zd8f9;-y94c3oVA!DJ8qogI&9$bwyG*ukr5HV+DRk(&4fzDyL1W)%J$hWJC@huhM0> zRN^jEv^OS~$3L>|`X4G>BxTdv6}#$Ut^a?||IpTZzpF{hm+OgDs}!A4r)B^4RsDMD zQbiYDB1!7ruvQoS^=iG^uu*1pUg_+}Z*K+y%G@DKIoV@Zs+(gD004=g@~kvva+S93 zXwba688ilP2HCo!L6d9j;L0$F8P0Z|kg0?F_Gf= z`wl75_=v2fH%gNH!I*LfTV#0rs*RRtPq#hMQ8Jg;jviC0_5 zy(*4O{NyP$f$4fSwR-TF3b{gx#jAhhmmSWflvUbe2c-#b_t2y+*^_(Rbkfj32lV18 zVYQ{Y^y1nVbl07C>Sw=sK<{0Ct9EUEN7+J3nQTTOUqpf8p)n)v33E>HoOrBRz{3S~ zbhN9aq*PYYD}S+9m7Zz^62NK9 zJlCt+);y=S&ASu|h7_v%y0$iKR^FdcU%qR^x4W<1Fb!NL%q8biN z002Z#c~)9*UY#C&;sr?}tOU*wTX!^Q?Yg(MY)QQgqaedD27hpNGTnwYcD|~8YY(V9 z-mV3;3pI1rJT0hLrVYKXOz3|&mF2+-)s#(AKJQa9l~g1cQr<{8^1Q7QDOM6V<&(+) zC&LwTj~SA?i|ieDcwp&Crd84Sy2{*M#pc#1SA2)^mb86MUd89<-zysxm@;4I zm*1|99rk@26IprPhUy|7J^awGb@lZ(>5)et(P!`Z#Ho8;E|2mB`|*F{`M9ded$d2^ zqjX_Z06V-W@mOKsXrq?*r@hLR#O1PF${Tr=%`R4(y7cD8b$ajeTlL7pkLrqxE>XML zq2K~TMq~oMoEX@KV{G@pIF%(OrJ8I_S6Qx7%Jtv>I8MPGYc{ELN|lu%jav6Uvg(~{LEIPPVW=lYxX@$e8DT8KM*&a)UX-ReDdX>-S70xq8 zB>(_}*JCun*{7_uST|mKnKo|SskQ6gra^!+z~q`rEn8AASvk2qUU@toxm^VGVwQwROqCnT&4dx|u_e7f3OrOtou7KOrYH6QHJ%-Jz# zp7S^ZN~$T3UuKIXZ_JRYX^WG(_&v(LH*otvVCibztJwz|R6FZZxjX|qcTUZ5Ly4-8 z5{E(xwqLC&3#CBMZnZW1t!iiAr9GN1N!s0$(ar-0)t$}j*+-w%qJ@i2>2veD0?G^v zC0*GPNj)cdP-}l=AZU%%Zh3p`$o~H;n_aA?@&<{>gPRy~=+Zc@^coD#|i#0001k*J?Du zS@^-&FjQ7rtfh43`bjaZS=XnwSVY<- z)lQkE*>h`kaM!QYQg)S+;R_{6yI)+byFYZd?z{g!U3&3iNm4Fh$sL^d^S{R$`2|?Y zN-Jj_V-l)kT^^3(^3i3vl-J0yBdaecSCg7#r3!yqan*AD!`Hs7zyIs6sHVp5;@q&i zLHpbH96PkMPJFv0sV{AJarXy~f7pc76Hlrv8Xj?5Piu#~(XbR8dwo9Br$U?LE-}=T zOAS_T`b?jEsi1PQl<;;-IcZYL&p`?Rz$jepo|R#UA(zXgK>r1q+wE31o0Vl*gq47U z$EAN^81i^L^85V?1OjroTm+Tpn4a=pZP~s<^>gYJ^%k9Mos%xExk$}>Qi?{xs+sLm zp?|t<`?oXumX($|_a;?R%~*;P&41yUd)a10JaWekW%HRcW}618BJ)OJ#NXo)-ui|v z@c2|V^HNE6K)G|*%W4UiD^)T_fwHK|`&xe$nbD^9&6||)l&Ji?^CSf|Y38L$ZhKO1 z*PO4e=B-+^aFN!mc~P?$U#Ol;UcsEHR63(@aN@^D2#hLe-k07pfiJSg39)_bfk;@LEr-S(SY}thrfA$Nk8f!3%J%)u@+@B<|JMC-@9R}=-r?f{ z`&TrRoYZbHg)RB@_C^^1S%>;R#2kBrI_TTgkgLNj916!rv^PIs%kGBy}e zo(W=$jvWN#deg_<{o6?JK6b{O&qhr~lUG4j(2x;#$tpNIGy7Pfd}9#ajm%h z4&D3H?`y%WpVZpclrE|8D=6=TR#omuzN4-}r;5!99P(jwSa^iPFXKwfmySr`l=4}4s!K0kB1wAk$)}V|B=oc2JfL~k&roTuTGPv?X&UD5j>={xN@p%Hn8LKA&CP*prH@_sQoKOJ^0n>S9?%0U5nXH9h>S zO7FT}*{5HV$LCelHBEJe=}KEkZFg-LT$e8uRL)~5Ul^LD$Yr=x=yb^yk&H}=uHFCu z9PL_;COCTok%6CqaqtK#0q2j);m0S=E$QyOuDtMSNzzkKJt?E=#Dagtso|-rjaABJ z+8=a1-ZN`oI-W^%^6}geCp8((Wtqz6)93CE)Ffp(EqUwDjMsat*DY@p`ny>>6I2d_ zrzbP^Y4xV(RbMt&p{PA3VZ6IpTMuqkHYFHJ)wr8C5je` zwQc7*U3tardS>F=|hyBT3zDS#`JfDwBLczTS`~FPNLC@gK-|2tU;ggI_sh*@8zFz6{EOmc%b!t!QZ5c)5J5Se_*Q+u(tgB(+46Mp&>i<2CF)FP>UPi(th1fTa zCDYkIkJd;NJ;Wv6LQ-F#J-R%qq28+5R(S#RxlUCH9E6ACQNkfEZWJ&}&fHFVDOd56O0 zwjCR_?9YEbr}%*;z4Yl%=+i_pWTJy1cwEKlcDw;h>eVg{kS~yeb zWKxnn_GO8;Lg{=`X@5fb9=m(@tkn7PdF|@WLZ7K3(~#83$qWF1V<4ym0N^z6MO|9^ z`Wjtw;bp3+nLK#Ae~Vw+^RJC-9V0?YNiqw{X3l?{YWczODW{Epe9CM-Beykn7jTzl zhYI<4PPt*-D9=TGJt@Uz2J~+E>d`Qd-38n*T~gST`U-=~j_y(}X*>y4q^^c%^;+Ky-E`GTJ^SdhTK>LOY8+L_HxN)tQZkoUTRNjj z!IOW#EH|ydVKaZ94tXOlcRD16ho0#0P%&Ld>#g`(y7b~D%650_*;m&o-kH!lzum9d zH%=KkAC`O7r6#RyIjEv{%Cw~JB26l*(xkHYs9|@5wl;52wkmnV?I^@8WfEC=3qJWQ zzr0pZGb`%`za(0;;6m+h+OLS;Cx6f$dvbqc*E*HleT{mOmLdb+uw?TJ1w-=Bnju%% z{wAfUv{*(wBkPXkGEJZSlG<8ZBuQSMDFyO!9Sq2f7^+Us7@9=K>(joyO`1BbR;|e{ z-V6Z%I0k}B002&tX5Tw{;H7Qyrh=+2o~lbOyi9(7K#Gqu3@8)^yL_Li!V$l$lH-4y z%4e+cDqWU&+N<);RMxw!8OGBEd@!Vx?B6~4!Q1j0xgQ+!V)i)4IvrSV$QzN8DV4wZ zpytk5A(zLlup101Yc3e`z8=FP>Bx__eOI6MS_O6Y?v%@u)cmrTN)kEk?8zya8`&n) zBVO(9$*3=Pa$h*4@^*OVb-U$Bxg39c?Om2j+3j}Qm~%%yr;c2k_NDe}`E@JQn(or( z4Lg+YmYUu^r0NUGM=WcG48=q3dcN@ymF=FU#dDVqb_pMtcqfrb$Zfh6@)Ri&_ABU( zskkbtl9JLRZlA~RQ6kf+ijt{=w{;b|)Ya3a6_ak(6Zfpr{6G0~r5pCkKc|0Iul?Ou z)ZMT{Q?9#Cl^0*6wJ)!cS~}$O`{nohHF@TA`Av_yy1SL#Ybsn4R4`wpuFg&s$71q% zed_M+QhBUI=}cOFvr5@KVI=?nN4>VA2><{%eSA@u6iv&QwI^<9>1dKpX7XRpnNv|| z_;kjMp?EeiI)>W!Ofe!{9%Fwt=%aN3A8Ue?qfMIPF7hdF7DhbA@Bs68LQ1dcQ;`|g z4F5E_4;@g?wue+ZETlZR>t${7)F@dq_SglHkYA?v$d5N^PO;uPFkdsKUZ8jOY|*OA zV%oiZpJvq8sv}iUNyM#<9d?@}b9u#lXH-*Nw{C1;p{OVd1W;)b5MFu*1q4BY6sZb9 zsiF58*oq1wO-e+hgVaz2M2Zw?LAvxBT7W=8uR;Rcjo-b0zHxt?bH4YCca4mUy;rjG z%)Rz3&zgI#yumppA!c+{^PF{xROM694?Po31JF@zS1yrnMU+{8VVagGO@J`QqR&Y0>67iLknmkN-pH-1%H|=vR;-fd=fwc4} zS|h6;=MWrN+~x|ppa;>T(p7p-#J(=&m5a!@8crHN~vsez) zJxZtrQhdKJ#WxC8Zj}hJJKcaT6PIEsIxhA$IvFd40`Me#j5~J$Wor031Tyt@C_ogf zsmM0CX`Nfro4oP8ClFdNup=%^F^Y^b5>}LO$JqPrer$jaO-qDsZ(am(}vd=0(E-W&=dFOol zqj+<8Vho!6W(M91#If#RpXy1!m-8O=dQ}}2H-^`CcX?oCvy^lzInoYcTa*RtXD=$T z@A>-^zAN-n%defl`K{I%Z-i8;J}oyw=4#W9mLU`J#Nc!F>U*b7T-8Btb21R`xbsD+ z-CkVL#%i>)Yz>=qQ)BCvV_-Y|#9pqr;|Q?*%>$Fe4{Kz7Tws@{53JF_>kb44a30@{ zQ;aftBM+0oG%`%E_QA9vkeggV)?5@kQed)@L+LszrVLv)(~!V`!o8d2YVSUlK~q9()#&W<2#*d9hGpn9qPe11jH@O?yz3e z_S|-`2U*k8>T39DJxQf~Dlm!FW?$_6l4m$xI4a^Pfy}GYzdRmfA=^?~NoiLN_{6=6)6;I1$x>v{ z0wy^@Eh)Mr5xf4XXBnn@hD$*sJ!&oPj{MmEyrF3D;Kq`p-!Ps;tS?xIaq)VL0(21VW&y3OEJ%tDapP zply7Q{N!4>nkJ6E45^`t6zXRm?fOOU@#u#2iv$2yiDFxq|M zKEVZ<`nbvgUhc9dJEP%cHKj0*sTVGe8)`4!u$=WBeEqvZL>g}yJ~nYKRyXSoHv4kqfdjM zGVD8x^M8RJN`NAr|1&=?*#&}+;9BP(k|Vp9A&{=zT}2oSbUw#TGCX(oUq=whh*a>? z;I3&|EI%2{Qsh)|0&Y{9|-to;UU03di4-V;6KovzvGSo|8v#- zJK$4+|FPx#E%29*?GJ4KeZvI@{T-_FFZ_QD9`XnOpM(E{{|~|+DP|Ns7@FZyn=MUu89CbZJDQiYCjq1a>L&BiKRGLpSF zS{oe^&h=-ED_t`K_J5or5{bPgUK6=9Gc%1J$n`b5c^Mh_wEz&(L$lkE78Z7jBCpIFX5Bv`x6 z#GHYUP8y(A*flxWlasI+NoNv03xP1a;Cl{%sH}U-o)2z(r2rOAf}4wSv$IuOEp!&$ zjia|ZO1p`{3Y6)o1I7BODSw*AFHRTU(0yOVITE^(e0`RUao&xz`)fEazL?g9^~uAX zx9zLA?*@+wObf;wYxGtt_vS%X-b(jc;jlPz5zkKk=vcL`f{u+{D0wJo87zBlSK;@& zWR!~tt;?07+L2VJ$z5Rlbw0`I2!C@~?w4jp?L+7)NzB(LvZa9U!(eWethzbKJ?|Zt zW0=M6`)q!7ooj1!JZfrDD10g)as8{qgsd>63Lhaub#$1ricPc@H{5hW zl-Bo>yq}(N0+r5*x;3yzN)#)kLn{ zn@<3I_v5YIacyYd^~|`(+S+M+g%yf|HCxeitkPgrX@QMs-duZ}9oAjO(AE*z)AvZB zU~o_$%;4WKuF#4@1nj-tW|MTjOHWy{&MVC84VK@!>EY!?inmS~sDDMxrB-U)Jt)Sf z53U4w6FP}+t|9shO}@u!aO>&nW}x{DU;uMSm>~h2sqK9hrv=><%BK` zua$*!=d-x=^z?YI(p zq1euOkAscPtz4O+Smda~(L$dSsdh47Pu1Y5NH&@zsNfcp1s6bb`X9E_+sw^vSNSxb ziT+IcWQWv_0F>(vyN-HSj}~{!j?98h{p`wX_wd$R)+x0C&Xpm9Jw0j3$!zdsSs%q9 z3CZZ-l+jc&yRTjn&P6XybvqO2#-+#i!M-B>GHTZwv&*c(gqV86eh1EA@m=PQ{BGpY z!AGL?QQgjpEUazQbn3U)N2VYqv+K&9mqs2d!<6C5E=<}bxgqt2V@)5weaZ=U__SqJ z$t}_8(6{qdh^I!)UPH|GtD5LJM{OFcO_(9A`Yo4xp6~D9^~63)h$puIQ)kZx>f5^Q zlM@@I5`89jeGtiKK2B1S3G0Mk#r7NB2xW}+W@t)>+05`?rcV;u3cDYjG<&*cZPgU{ ze2!taB!Kjc4l1WQ*G%PZOv}fX6d~lu30YodobX+Rko&rN9g8nBE_Ghuvnrkn5rgpi zIC4M|5D1Ob6vB&sB_kt%NjxF^$B!Q;Fm?%@*r3SX;WC97Ze5XNHj@@r4+jR!;RkhW z?k!Pfv0WbQ#zM8)Q%z`h2W&c=mdp#w#VQq9wnk>Xmy{xY@@F)wXRtHe|0ODpipDm7 z;>Idd6+5q-J{I~-9+hGs)n;#u+jWaCf?~zwPz`Y>8Fdd61|aR;M83D^%be*G5hWk) zBx3g?dvgjMZv7gHxu)NtnC-!hTqI&fAFgICyW}%(Rk3x`Z*9)j&jFTm45e?GuJ#kW zYxEIU6wls#opc)Z=Az*0t@U1j`Q!{lyk z4bJsCp1g7wpFdMG3w&{Ge`dN@#P@R9e3Ef3n?TThs^7ReISx-PdTDgd{Ab%8!jU+t ztBC!33~(tefOEBTYH`wG`jrHmYJtA#X01~-#oRQ&pGQbrDPHV=x`If>Eh8o<7`ZIt zX;wP2wz)l*7R<){-jc3sHg~eMTZkY@D1x*&U3>Od)42>(MSfBRIS^?8%SwY&Djl5o7Q&MZxmIWXBYI6_wkdu zpr1b-+089v|I>_S|K&LpyR`e;qQ1Tp*JV8UvB*BES$UZq|MtRzc-hh|fxuHW!@C1W zz;jt)QSy)==2vX!K-osWc|0Jx5j@}r%Chmpq+Durwu@K0daGTkU*b~_GKuVg2pwqS z@q6@TzntFO(b2M}Z`D=c=p+UpUo=g2ls#zE|CSxl_=wOFgMQLA1}Oa8Y+vQ#{23a# zn>a;}+5NJ&-5gOO&c$vya6zF-w+Ih3>x~(fZ}S}zu9f=P3np|9;tdaQMXRd@?>j21z1*gZ%xrVzyZew|Qi-MeAiCOCxza zGryrh5!^TZHY|+u#*G)%6cmw#`E7W(<<8PbM~VVFTK)br?Mqgr@%j1uD1ZOGY06$l zyhw0r>J4y^%_<|r!^P$1ty_V*th!^JRwB*K&C2)hKUrT+Xd^OUp%|Iy0G@*r+)SJ zDtf9;?OExY?@p5w%gAZg${(T7O z0YhRk&eCnoT#Mv3D;|~HhnuGCZaWX9>+tqeN{alPBA#u)*-s`(zv%?5PAwVzK%>#8 zTvOzzYt49e0%a%P zyRKacorgcScmL}|Efsep5P3IEOH!D!}x7^y5Mc=a_i>3SC#%6XD<-2#pDa*QdZ6Gd!(6;jW;Smzx^(Y z$-a1>T7OWx8#q#)(I<_cTU4>AP&gNJYn>@yHP?OSTTgwWAjTyu5&-?dM@exoqjoBi z6aIM%%(;eJsTzew&#Vz`A{QArTKV#bWi`Gmm;;B&!?2-={d7%{S=AooGq*_~R_6|f@_A!jepHn+AORz4?8nfdw2 zq-17+zAZlLJpj3DQsAFd6Bb4zEG!Hqz|iVM={8JG&eV1trP)OToSe4RCF-6YPNy*| z`YB6m5sRM}$8osIe%>!bKDyA*=3aa(0(6KyHk|w&@@4B?P0AA}(j6Ed-}>(EYVpc| zt(b33@}dfdpN`H)A#=0A7o^(UM@|V8N~yg#ISUX^VV76ZgL4!VEWf7m^O9<5ceZTV z`juLr*jfAtCs?D^!kXmCpbtwr%SwbJ@8jw^y?945i(L92T56drj>(AMVXbA%PGv5q282r-x_~y@J{`H z#PL!cbRp>p6XJc9BRaaeQvUNacq|ZZ?yY>9nvU&rbu|>NKKE1WyZ(*(k&$>J(N;52 zvc4&Vfpus+fV`~yIvC;8w>mTP6G}rz#~ski*&_5NMmO?hTbfev43Vhr=_zhxWYpBu zRsD+*dn{mEw(~pe zC_jorH998Yp|K4+8XjM{y0Xq*%TM3Z zgTK{5Av$LCh2!cB+#0DRdGD&Kq_L4KUIU-9B|^)}*}v-gOPUhXCaQ+4oy_^`D&84P zjCX?3g*yNx3D07T{!pk=0O&j~HNi_A-oJeL@&jBs{g3sV&7D@ohDf{eRQ>IZo8il& zf<^^{rtP&8@?*OBrEX()_Ij=aNZO%}+7w^Xj=@U;k8nsvTcacU+jX|_-vXQM84UJ|Cr2zu& z_FW?`VueJ@T3;o{%Zu7tZ+UEBaB2tHKRrEdBgzbe!3;OMWGD{H#yg)sKlSi; zcNcYVaG>B9v>O^4oIO0|#w*>bkLs!I$7++xNP|&valx9|9AGdE3ZfFXAOG2vBx6+W z$cj{r*xE;BWTbbs5=o@i&d#~1ID~L-u&6dBm@Gj{UKgY(Z^D*)lcNX!)~s{m14-aIpsufgk_BDnoJvv=uH6p$)A!K zo-gYzg3fD?NP>>u(H9sLEw(i9jk6c8`Tn7A#1iyP+K+V(Y6@GJ)}v79gbSJ00c6a*3n#V=qaSX061k&8&;UiKE)y`DkVE1WQSSict1Np3^Fl$kZd&VUvCnxoX4|{AxIW5&?izWOst5ic4JmHHWe*`~vg)rDZSmHD(Kj<|4W4bXo9?Jfx zKSz6#9I!D}gI^b}C;^v%l)dFE0cGA<=B4znOjRks@3W>pcwI)hvIrc)Vj}^8Qw2E| z1Z3y3g;OhnK4Xpltaq9LFqyh>4XR<-g*FIw#^GnK9diNj4PeXeMsEy*BD4(f z_Dh%&4N_{@GH#vpJ|ygxZ1=eb>~v6pOY0Zr_FJmEJ5_^*%a6!AVy4F|y+`5=obmpp zV^4ETk-)d{=h51{|L+9sshH!``nPkBfA9F4&kxz-35zDA%Y=^OB&OPZP31yGv%voY DU3j}4 diff --git a/docs/_images/fittrackee_screenshot-04.png b/docs/_images/fittrackee_screenshot-04.png index e13cefa0d4d46136f8ca1fad853aadad7041d1c4..069ad32744622b4d90a33a7d289234343b703e38 100644 GIT binary patch delta 17330 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 delta 17315 zcmb4qhdZ197d9PyY0*KcS*<;5Z;IL@_8wJR?7g41iq`-+$oca(R+x=5y|I&V8SA0)^efl;2BW0(JuRjJ$QM{9d?wy4g88+rID)aJPM7 z>+fiXhvz@jnhy4~Zi@SS<3&+(?+MeX5oyk2Kf;>Jvo|Wf#fSO4@O#KdVVK=*37d|{!Z$dB>qIKe}*|)=l3Z~!o?4($ohQH=ZUO&oydel=N z>{@r(9R7o$a`=M5>R-=vrP0nDLsH9)1Vw&BatLQ2Gx3do1Cn-jyWbG( zTb%7Y3~_;c2&OEFuk4PB;}!~$*m%IfunWwOYz>bz`qd^%M*ePiu^vC=R*A@6DDafO z=}*!PX-jHAcjfd%&F8zxtXBl?WKS!A(zMpsi!DrBcBw?Z_tBfvsr9$*6{u_P_$?z6 zkxwU5azgi{P?D|BrDG^(+`xpY#Q4zWL%`TmAi!EZ&6N zL_!$vOXhobjPXlryuYdt{C7{^m`g_|<~iUD{aesf^jShruMyKon)dN?H|>MJwSVzB znVA7q=!#a!Q6kii+oaBMn6IQlY&|iSJm@QPQ$BO5j+0~2l#wnn9b8sdKa)}WpQBSh ztaio(on`N9w=;)&K5~)pSc!T|k=}MNC z-HiB!#lt&KOdbkY%B#Nr^W3iOD_>@nve1CR>)&r)Z@&oq^+1A^>@7(X5T3!g`M~vH z;pO_nW|_A;esgW|E@=-3qyH8VbC*i%03k7(I%i}sQ{6On_Gno04yJREZYXnnm%8_h zv0!#_*=sBIJig9^R;5yj4%^sB&F5u%EU$S6#?fh6O?2{q_>T!=3Thv{FisJCFKyi| zEY#h4@KLJ4JO<%-ZI`{_G~CpsOiPIk-758B7M?YwEidtDcAB*Da5P`}n_vDG^iItuRZwesi07r$EK=95 zWqPK5lW|*ZtC@Vo^_uQ+(1*-jJwMS0E}h){!+M_{I;Jf}>DeCruEjiQgLhY+ryunv zql&%Txfd(DZ@S){pfESy2iZWp7KB0(>-tkX>HKhILGtI!uTKe|COfYah@Po!W zdK15AYIU?V~cYep#w3%rt+=Jifm%v#_MEe(T>XoDjPTXFb8|ZA3l(D4GjZP zod=3e92hcQKm2sz$9PSPnYW9K{A-A2S5|F(mDpDNI?uXv=OKn^->Dt2)9&-r-B~x+ zewf4edb#Cwh{04&!RlzER^<{K8f&1gqv_BcHq(1X1tNB23SOqQ>-tyjYD;~8Ij}K^ znSSFuUkhJ6*Z1x}yb0R0g;2|`9dXC#XT)(YIf)hRe&6>i|C%YX?dp&31KwH6E6qgw zmV+F9P8Z2;cS0-I<}Y*r_trf`1_^(QKloigs`C4_M)hZk=@#kH3H}QG^N2x{``H7E zJ1+Kkr8|Y^Em;*b6gXtZ?a)be`W{@Vaco;nlXr1h1>`hU_~3txSOff6&BIL!7}{@#$GX#JAO?9!_%P6h5iq$yKr zDiSH{=fcD=C18s3FN{q5H7ijkxhGjaRhbaL6>e&Bbd{GXTy>|AYLm{ZYyC!!W4H2i zvX&0*-)8?~2N64zhMb)n@U=+c;IWby=C#hRhrUv&_%G`Z{t0>i3s!3>A|TQK;?gtr z`?J{De&X>L(t+c z(Lo;X_KMDZ(+{9v_RrvG((I=F5zLo)>$E1Z{?aB)>6g8xh-_&q$_GANO8Gl@PWN58 zL|KEMMl_8BEgv2*Jr%+sG6Wp{whqC(1DPlR-C5u>l+g}lB16_9V9gN zpx^IY2iQlems-;Z9$`H7jMM`K46lwnzZXC|LYVIgM*#!aGPyst{j7y)CIy&9f_J9f zdSA~=09oBT7T@2AyCuFDp&0Rz;0`YBxIlM5pSSk?O5EYTwracglg$zX- za1sQvQ#oY`3jc9HJR$5LFM@wyz)+JiARvlTE)xVjFzfWHc}}_Al-pb=IzO;01ZO%zeh7oWJi+6 zFLnOnMI{00;oa_M740BG2PZ=F)8&VwAc-kCwoP{OoH_Xy5?%~n7{5N~75<#aBz?3c z^;cX2T}G@Fl&CpR9)Y1&Wj$LY6lfjP2-SUZgSdLIoV z5z@OWO1Zna*cQJre}CtNio~CS(>+lN3nr%|;giR}UY`kBV^ZzJ(xztFh@>!yiwjft zBLVhTMUO{`$H`LS$Md5?WXB|&)Ge&r$3K6RN%|eqn-U7w__qoAwIxb?U`=7u662AE zzO-<_OmxV5bvmqoa!T@vdPrAEe=ffV=?TAB-+j<4#aY%Nc=||3phfk+tLwqeRY9hg z`D{WhfQpp=*zcDSUmK5HL(Klk(tP>z{9nUi%#&?U({<9AhYWHkCnfGeM`CYh1jT?4 zls}#sM>*(0Ebt|AZ3)EeSglSurnv*9K8fa##kB2BEAre{)?WpuN^v$X>?$+Ru zllb+NS|H|4wD2W1K~C+gprz09LtDdYG(;3u3Med2dH3G+Q{ud5UqZOtw$~=>&pPx9 z%@TXT2M&zTRXlcZ3jE87^?iM8S7lNlyU--A+pF=!3O?L#{McRU69Yb}7sv12hdDp8 z%}VGVQxk!#GtaZtndC%KvJ8d=`ke_b&eM=y?XL{?6!@`FZK*6qX%*ey>vnb@Qbx)H zm4UXHwRf=0=aE0J71!MQb@OWPu_b^cYL_0or+y-Me~g%LpQ?|lTnRic;Wcih+hx_X z%qUO$Eap)H+bfwzifb6A7)|m!5XbF7YP(1m%PN85_>JkW3kPUr6MC`4yLnMAv1{t% zX^%E+G^r>TW;f>c9>(*qelIuW%Nu>Ng((Dn{(3XwC3{`l?f9;U)kT#N@p^Ft;*55C zc9}KmaxwBVPQ;yoH7dd4g9Py<{ihxcrp>sch;|lrWjJH{*KGA?FNf(Vj}ZJ|W>T%E zQq^>bn#u|G*!Of|@7|M*#qrdu-yJW5HVz1D_uj9ll6)Jw_F9X$bBFmnl;wn7qRutp(^;dXb95mmBe`frgJI$K(ghT*f?72xC-e7sAeo#A(r8PW4q-iq{eE z)Yo1IpQ1OP$*#@s`i+x@;n~xi13_B`Zv2+JSF>f}?3oO2b7aV--w)O%)mrzlBm@l9gAJJ+ znm|z}O!?35y*i z$gkb(-?k^q#G#FgCHpw_aJo#9_T^XNCQzuPcMbRRx@qaXxXEBk+QwU(&L=FgW$4Y6 zqC8L8e^w>?aIqp-w{b!xQgeDFj0n|Sm*~4iLrXcOm{joGPl7DEO|jfv;x6a3^l;v~ zamt~#2kB8jPc`#g!Rw3v@c4A(x%K0XKZG+A3x+(Jy0S zow>^+U5SZU^=z}XC8sFZA3_SF14vqF?Tt-iMWV%`RGfei!+I zjg*+SVH{1tx8(Z?U!-{Nu(#8V_3`OP+Z^l-17AU%CZ~bqc@h=b3qYn&pM%twZ7Cs7 z-1rgaQmH9>ahl5HW!&v>z=%NT|0<>M@wQq|!cRAOsC@F^0P32(v{Q0Ya$%I6Gn6?`e)`YXOW zpM5_Xbk?`WyC8h-+{^yR30q!pxHFzpC?alh`5)C^0v@TL__dAC-m0{L`Cl@_9wTl?eDnzx!q(to}ApZ*!0ZlgZ0MY z;ZfT=;_3!Q8tUTKHFb|Z-eD5v6BHH`<+J4$cyGtgEhx+<#4YxkPng?Az)DceR+LYK zPt-2SjMKp(mBIon_^2lJMfDg z#IO&%^`MWFn2f9>KWH%>i40P9%Qh6f0>B3L>l86fc0SnY80+ww`||A{z5a|9sR?#ImXsD8*0qK{%0?b9{PB0)B4ilV#V0lSd;e9*6ujES=)eeCTzPrP(uYD4o1bt`_aYM*9$YVvX;Z)nit30NhsH;gVlZ^yMgaK{rqX_ zCUs7bw(E0nU41>YrNwNv!ENfx<5#5)VQ}LD#n`bFZc{yN?YxwfXE2jGRZ25=dLW4?!v`E7AU!C)L59AgVN*C)RHC7M}K z8n+g0GMUS&wc#9~G9rS2G`$qIM;X?35MC%$juhn@41w*76MR_9vG&p*7Q->YSwJW9%#Z#8^^bMBdnuvlb%) z0;AEpI?o+Sn(E)&mykB_a>0k--<~41B1`eFq_ATqzhM&gjcG9JwMwYPydJTpslHu( zbqYK=GTu1M-V$D6%bC?*Q>_n4gZ;z*s`rFRMFG*KXKhm~S@Nkdzetofz(%gcltD@yL!+ zswT=MvFJX(y~c?AJ;;WB1}8E0f^MO_stj(5?m4};LDtEOEFJl70q~GarT`g%4HC4T zeqI+1!94cOgF^cH?9T4hOFi)h4hL`2!otM%n-ovF+>G5IHVk;46WbQ247@{3^8Pq@->*EBt=*8A`1rHlyW{WIMjD#b-L=l;z>AC&mZ${oPO@y9URQXA`s)W|EI@k4*ORl$J6*@K zyV`Zs%vB=er&4$H6=%lnZKXsER@q){J5HNyX*yn9ZZohgBT8!R_bcm8W*0buuF9P% z`ZjAXaXX;i3nFwW`q@o##$e0h{o9pX#|zZUH>40kp7>{Eer{>SsP751oFBfU|r%I`ntpAVrO`5n!c@Dz->LJZb(+-9Mn z9gNlALyqEO(RGXxYGfcy{nDHq4r*$>>Axc-J(uy03meDU))Wl1`BtNRfz~Jv*znNA z>2G|QUSYq_uqI=D<7r|B;o2#{G6_(x#njik!f5y%J`8j`lo4re71X2E1M5PV*sUg{ zoS@uVVC$lCR$GN*4t*P#fhjoY@)rTe%QOBovXf>^RHv2U{=9-JmDI^8pF z?s#IqtHa;xqtkW6voF;q?t7lR&KbL|AfX`M5iyY6FF@MCbf-Hg`T*2vabn4(CJS#n zJ;bg4cb`?m=qb+cK6v3AWvCI4jJH)Pw4Q0R7-^a5DFzt-(BnL|uQgp;--g*<96MS2 zrabBV<&FNsXP&a(u|{&cCK&yxKb@%Q4pBbAiYbe7L`DXEy0>EvvS@I=xC=3k1q>~D zRnGZt65uqU-vCACqf{p5@bHtf{khDHf(#yNW)=P>1UmhJ;zmD1L(Y%f1NHi*Wm_Ke zynlsn15UpOVb3C1$n+cze!9YD-NyWRIP7JE#Ktnlc)dTQgCDG}(!6ZfTIZAGXS)2- zykzdgCR5s>o0Ebli8smMSlxU&wlDO1g&8d0MBR7N&kJy!ZCn%A_YJNDbZ`Bh)F~&8e)84t^+IwIQ1IUkUKfE_(1h`Tv?}kPse!|x-Myx{ zlSLVCbSa-nqjd%c4ULc>hpJ4wP1L90U}lw|=;)*F8T~$3g&q#`JI`fCDMX96QLwwV zMI04nlki`6t~R&C&IeP69<7h^N`GT&4d~CpJ)Bl0?Ak)1PAIDW-Zj&Vnf=y-Xh;*_ z9ZoQujVxb%<~##ka*^=f4?D@;GXl#OOv>C;M_7oMK4$N%MKANN&^*g8+|*@K0pFZ{ zO03K*8>pplDuY4X97>1UR|C%?B!(l;m!51}9>qev$a+yWiEc)v1eRXmcP_fTJj7#< z$IQ^Q^$S|x$}kKT5GIoEmyH7{M*4saOxh|00W;P=%UGcl*P2FK>MxxtiDRrB-D>)t z__RfxaE*OXiC1%V_5AC?fx3ZxTJC|q41$2oO}${mexbz?2X{RM0@w?0?kO-?vh-?@ zP!Q@@UCA?pg1YNMhsY}Xo(RY>5-saP8e|9S!mAsM^)1sGBMUSbuUK(D4Dch#T@A16 z&k_q!H|Ir?gCAA1k7JyO{Yqb=gN)H?s|oVBlPScGI8+kr^2`Vgt}7$V&+?hpN1PY_ z-9tVrDsO@-@38PHg9$PzIHiZ0qAuqFeGP^%~!4@AplrVOUGPPokfL=FkTq;$F_m4K?` zl6dsp+ka%z;;{aP!8%SgQ=5!AUe8GnKu%XQ`(5Shax4$lmCuGJhgw*iqe&Xr_ypCz z=2Xtwkh#`0wszp+X_drDQv_)Xg+s|i@Bb4KTx#bTx`U0q#G zPM3XM271Syj`L1gx-}|HS%}JIv*u{Tu9 z0T$<3b|h+}=!QACB?zHDOSW3}BZ=njHV4;8z^Ibjfk)4Gj~QP!5GbUz%ABt0(?f)L zKmYN@@DwW74{&W)!zDutPEeA{jTcfV@Mb88!tuwS;eItDM#erip7Y+?rnq~|*i^tfnG|*< z+aG#Zi*`FHxxtK2)$Epc5o^#Feo2nIOCO1XV{8`ybbgZ`I?+Cq(@pII|9Fa;=g_yN zWz^XL$phry9{R~HG8Ct&ZVk0+f0JmIUC^e;7JWGDu=`b0(0BcBbtcD?EYmK7bgtuO zx}{?w3%#yjgX42UbF20JPfxqc2WN7j!Rusv5HYmPaeN|3>jG>hdtT!CcQ#pYUxq?t zNmw6Pg&Qgy&$zZn^kvo^5N(xojNhmc73}IxUklbvr2csV$^Sg+wYp<9`ETur|CzfJ<0yepve2gmU`)?|T6cW~Gf^}!J@fnidR{)fm^^i7%e753dhS7N3}?O#LF(PjRczJ5)r z9n`zJty^3ftNDV>a^uM7O4vvsTqDfJ;BWRfb;8Wn$^=zec+pF_=&W6+qd z&;Pj?R8>}%Q`+B*yk6BaxV#OZ!JoneF~w-|kbU?2%veJ$9Uv|24u!{c04vIOS*_CX zENQs*!t3ugD+=xmihx#o37)2NHk6%J`|^h>!KNA1 z72F(9n6{j9X&l{a=@(pP&zZa6HyLvP;$&74hb$;H&G4D9-`j!G$IyX31E0xJejL0g z9zBIwi42O(D2^Na=?p$NFP7Rp5UuYa0ZHk*6iQ1*( z@yf{5(UGpw^mCHqw3LWnXu%fjSjVtMH^6j_?hshNOj20};87JwsCX@)GTI5(?ugIH ztgRRd)KeXLSNSri?!YgYseR8Tjhhe3Tkaz@KV!t`mz3HP9AD3w^HUTe>?@P$cjCO@ zE7fvov-|!u2nS8olaPYqEqN!fOJe6dOOwxh&D=^rt$BLOC6icWy&sG7Kf(K57EBp+ zvO@P~lk1LoRnt#%_)P)vYy6TQ9EQj=NL#uluzwH9PYvz$L4%!c5uw-E zUQz@1Oq;X}+O0*O{y|uhC$kuBAL=yX(~=_l@h`yC=HOtwWA}zh#80=OGDxX!^GJMY zm6f;MJ>V?7U!<`;9eSvz+t@muJ2r@tr(b)czY0%vbHB-M9q6napSOd|i7MgDgIBQU zNE@>DXQcNP{?C-Cmr||Pw()&`jg4~KE6kt^gDqo1WUI+5jJNLQ@@Gg##T>?2`0#`b z7|B2zpkY4c*!G&N&g<*IPVRHm04FvTqE=T^^{_z|6=Wp)J7~HT%Wg2xV8Jv^>%f_hKQ89I^n$tQk*3+8F5)!_XKWP7*ap&R;DXW2_oO0IrPxtmjwlH`ni3lb&N_5$Zo|>X+1Q50otUfRb0O7-B;!NB?iBt0 zEk3o-vj6$OjYi18hkNjR_0w=IAFCQJM$RN>z_ud~m{cgcSW8Epki~P(v6>sZGdp9l zVYtg`;BEu^mF^URuupY97H&cy`a4mDF^TVS&Ubu@jZ@tKDv^XI;1GjiVlWhY+$>}c zXLw3g`YF9YwwKjZ1RUa9T;127Y>`kY!)=}~`}iAtzBIA6y!1_1ozP4|RuQP)dCaGi zH<2k;Lp`x>u-Grus5~E6%bd%}ixo3Ym##&NQF71Q6;ZBm;+QHVc8K=~=bcexq++bI zX7+LSAiyXkS!(38DK@-o=Ac``Ua;bbh-CDqu|TccV!MsYMu7hlVgH2mawwz~6C|Xs z$6>$fg!|_id#h-SciUdcS8-MwZvKO=>$hB}L3VC5Nhs1vu)$Zq2z(mn#%bAZzT|PJ z-9;^YGV);xVUy|T)RfGNc4i{TDV zi7d&P)5wOh&v^KU4!YTZ%eMKIG3=&lStc}`NHg8seDeo3FkXGF%MG4}{R0yHl@U(8 z+QXb`V{}jpX!nD1z*$78|5U0|8Lzf^FFlgnd42F!L5RvzoySV++t+M$BQ1fZNBZZaxAiFtlP100 zIp2nEW|k(oLF@3dGxQnQZRApe=IEer)yc7jo&RV4tddy!90Jkgc<|F^o0~_cG^ZVm zm{p9`4pED?Fv@00LSzg9@n4arh4{Aw@36%x&=%<#yOUGOT5LIAFeSkp@Z}a3II-(g zUw6yhYI)G_O3-9D2@rpFmdJ$Y%xmc*4ylna7t+umKH4AMYYc4;!kqffR?M}7ZsyuF zp4AvP#8AT~Rv3qPH|XgDcc5VGL7%Nj3#U0_=yjltC$OcmzLe<`8YMl~B6~9ffh+N5 zLEl-*;KIY^4&U-{ukch_wbW2H;)*5Kuw7-j4vY2Evoxw`5kf-*t^1w_h3qf)lzQWQ z*7TIOXf9MYz8;GM&{@NL?!ayeXHXZ1LMD*S<-uoGpjpuRmIR?FCX*@J?tmk1`s;4e z1wbXU>u(p1(|uiA*j4nLx&?6*P1(QCL_^@TNMmhWYF>;3F^Py6=kw}$_htG@y+$mp z(m+4_IZQ?@?j9UOYyJ98Nbc34!7+abQ9b6;(Yka9XVUbHfVA!}{+lxE7_8}){5eR^MY}o5_gZ%!pj<$9N+HS?N-y*huFI+?TiD!gl#TOs`~?Vc zSQ&aG5?Nr#IxEj>(qI+I5~V$EoxmIOkjt72^Hzm;eKXSnCFu+0-35>MOL6~8f4||J zk{+EBM}M>69I174h5I=0sJ4b4Zm-*9pq1y-u`@T=CjsAEeKr}g6IWV1G$*Ses_7|P z#2hta25kOs@;?zWWeWi7m~)x-ijS$F-APm*KzyG6zv7?5f2b9FOL+yr4iTdtn+X*?vW;lgoGw{pCc)*_JL)G;5 zxj&l4HZ`>uHE4df^VLztrT}8jZs$}5IKO$uJ%J+z#IG|*q^@zbEj=ysqMni=QTtgl z#PaAw1uBO-0avhHTqn_PS79Z!7m2)=rMvF1f9y@+ief|zvMh`|$^!ba{Dk*$QCZ=( z>0sW=vshAqW0lN7?FKl;iIcYBM>)AasY0#(2kLtfp*dX}p}`Y|n}9@Z&4?JKwW@k1 zyzQNTB^-eF!`Wmu%@Xb9YGC^Mv9VG0mx7-vL!#S8^Xg>&bYfs%+pi#!!Epo~rWSw_ z(paqd^ka~jeCu#m-h$|$m)li&iPYSM(Zef(TmRvzPOW($#o?jZc>ZZoikK#-`MPPx z`9F5%Ud-ZI5)r#1Gy4k`ReC!&^UHs&+j6QZ#44(KUbc|nIJ9=aW#Fk}&D)#>uRz7tuv%)SjEyja`gQ^=-AOX99 zgq$49612UIjl*WOt*W|uGJte~Ogl?kWyNL)I}WA`ZKs%fk1C`mrk^Ldc-`;PZ@&7` zP>1R4vE|>F;2*Lu^;_El0XK>{?Z=NG9!6?v<*p$|+*jux)2Jn0ekI1o`zN@kLWTE1 z(?2kMp8hYFb`g%u-idtDI<1VODlBA2eK-l~Y*>253Y?MArFb+MlLm zp-Jf_OR+MSx&8J-6Lbv=JmpBJTME~v_to5-8Mk@8`jlBn9lT{Jid0^;_xXPdhc!8y z**RD0H9YNRjEs!wuR|qC4g`ZwR|$$>(;5oiR?Ej+S65-XK}8kz*9Q>KL(b9(ueYH1 zseN=%V4%a;hK)ibK&X?3vl2_7-W|M=uZIz&$fM11kWuKa)X5*anx;?nD8ww`8xfRu z5_+MseLrFgjrKV)_v`KHS!dOknXPvj-xw``BqY30NtX_3p3f2i2?+@iKXkqcN4YkD zaf_VJXC1M$yo}(Qau)7)7A`L;QUFiE#s|^_R=2k`!T?DUnVrF@jR#N5zVO(rLCSI) zp@x0uR;I-}jlQ&yz_^Xgeeuu`KR*#E-(f+HCwLz$-e?iwy&(&^?xN&iV;i}9vQT-l zKJ16B2)+)dOioTNM8jL_$6XrS7T~L#1`gdvnDde&A+jn(seI1V!vdR)+MV&y9eV%9u59 z`gWW(yM(jY?1jqAkM)G>y@M%}z3$HD!_?gkEvq8oo9{5g1FVmj_8k#q8P|G8N?$q^K%J<`>F7%rWC9@sOm7{g+U{IoTUYzU^x##G04eW_qIAKT z>9y=2+aE(TB*QZAO?3R)JioC33kkYr zFMXY*0(t$cv;;#Eo2}T85ULp96tsXJ@^gHag{lzH$LL&-9AmDl2mW zgU9W2LW*aa#hIB|pm}++o12>lhgjriqNhjZCh7eA{N!|Wu&NO)TU&c@Zz6N^+4t<+ zMDO{4bw}hDvai423!6Td@hva;aM;jVH_2Hz$QSrlp)YCa`4SH5V1MXt0n{oVTD41Ukq9*T?GucczrWwqqr#u{WVXtp~)M z*!D^;1818AcxGT8Kk2j0%3bd9${nCxJuE4|_TQ{a;3Xi9>;Zz_WM>!ioLn^AwCUem zjlCpcm;@PWHoXaL3mKOX5)ja}48=ldNh9-LzVexMX~6ah5(bfyZ$W^H5$hApsV`Rh zeZ7@hHb%MWrY6{l!v{VAPEpy{U67f2PD8-|4BUF%?&t7E?laToHfVC=3|K&w=G`s8 z_U3B@UJvfp{)>&o{&Pv?c>Po9qDJ-Tw|r{c)!i%KkOraOq~m~U01nYchQ`WKlPfB;Zc`OX(MVgth9h> zWQeFG^0b}4FR}=9%)zV!$7cx)?>`JlT-Z`yk`N~ zR`DM9(uJ7hcxrh#q?mWS9-U3Y%CY?Jo5jsu(ADuGXEGH76yR-}hRU=Z$KHCYq46Q5 z^T-1bs_y%H*e7Jq@6Pj0ob^Wssy!k*i0GEKr$91QM)5f=($RkN;iX~jz&7ZPr>b-sYnLcn& z7Ukbb(i{p5(RTIpl>aDGAt52@8yL_F329wgS~~i9bpqa*Yf6`N)In5xdU_`3zFQs3})CM-EJGSbu23x~|Yn3#tOii%ssG;R}^=^6?KhRVy! z;OV#rZwBpZ2uP?4%_Af0MQ~YymlxC-L83bgEc$2^A2X(X!|SVyTYpf&CA87&&JHg( zfwVaxP9X)NA9+#4WD|{#RXEryT^fdXcQf)n|JBl<7E%^qAsau3r6m@2agIa80oN~f z>eR)!eOEmwU7W!kI*$jEc0_Raqo-#%OK&BAva(LR7&tp*j#zOQWfBX*PfbZV?hS1- zZqiMSqp2`1V~>jaZ>%wz;LpOaDY~9Ed3sj&WWn?6lC_*SHs&$4-zZ*4jb{mXHZ3)? z5(jl=m2p-wU44x(j&hn6G_cIfP?IVtr9n(|;1%AK8uPrOLq$94Ka!CmYr^ujJOz?i z1C_DFUB68@nss9-`Civs0>`mZSx+x7FYI2;=>;3ppJC*ydR{mP-n`IMGdvU@zTi4; z?$zyx`NE{2bkE7?V01oX6@r~|;!O035i%6dSY(CKEjC?WeyxzOm9SUfypw%aZQ8ACk#awLa9L&f+qa=K{- zwLF`3SXWd3AKp)(UE+V#iwFc7_Vs!d_+7o#!1wLx=wchr>bJ9nq_mQy&CTMtkw8^X z(xwV1JcWrwSv3*&eXx@*>rUB>!D1Xqw)tTs=(44!qT>Vc%5J@79XMtN_t9WUf|8{g z>geRBT7*txzh`7*lwVq#CnV@B0-&TU`S1Zxi2f;tE=V`CzP_F`@=_QF zP$41xy9A<#Tw`gv43&xWgvTz zGcj}0$irgc{>dF}W816>gN(!{zh+@islAWlHdXemW`cf-dAH{_npnp*WmNU9zzahc z0S>k@Y48x`p~vBu^a}^g$zO@bJ|1snRqAkd@^)q&lKuK^CZv&+xeh%@N%b!{bdVdC zwFAa>U!5OWX84qr>Tq)_{R$8fqa}qTBOQKv^z5onoqTg-J%*<*ktQ3~U#Va`0 z4a{dp#fgd|J9Doeb4bqdJWvBClQZ}NeNy1Td8Huji|?%~fV$f|H(s(jBNzDLE2&qO zH)hpHY$GD*0-RnsJnC|nTiVIhRSM=+$B7cN44Qd{k9X=Pd&@>y#Sv+mZfa_3<2zD8 zf;jJGCZjHdEC7}H`7Z(9P^|%N*$+$z0P%y9{|ebc+O2Y)1taRlu`rm+c7!9s#~l-Y?~SWx1g9dkgl~mv zf8VY2(tf3s{d(Qe?T6p7TznbXR6gm}_USnWL)+iSIqp@-HTjgx9R9U{0E%;5FZy7O zY@~EW*Ua<=|*zMG2r*nu^Bw29?;J)DHS4`_Knr zZdsOyxfnFawpW8xEO6Uw8ye!{-F962Kg#p@f0PF|Y06TL4#g6Vhj}{85x-|%pf2@ENB@g$+l*2v!sZ_HOIpgZffb^#!q2D zmdH+NS(yjcz}eL`rJ zj=i9H=IiR}pfH%eI-wL(*r!i=T1KU~aE!rd6ueP3lW>;_Ou4XR~!F1Z;~Lm7Y?q(`NtBmYvBlUkV&>^<%5dm7B5sYGiPNVa86ne*xa@cuBI8+pxHAiw!RX3Ynx%f8Gtb zQ0V9^d=XtqtO^yZYWK<>?zWyWR<}vOu^5P@UQy%5zfK>E9q8d7t>`w3?JmVonv^2)%L zkdeizoeXBRqccj&(tIFaF42n$`}5;n9P@@HCO&E1U&{zYZ#Q5E6Pa0^a}pEtakIHs zRaRjH52;?r$jEHZHh>sHE`K}=Ju8|IU8l3Pv+J9hG7KXi(Q$Es&0qA$)H;m5Y&{&3 zFlh)4DH-0qwCYSwO)bG`s_lp@OaI02nR=HDegOe}oQkO}0@Q@u|Ghc8xG2Yw+y~FN z+)0EOaKNZ{p3cXma(z96Ekv#0)L?L&Wdm;Bds<8kT2?mN5k`o;g6dN*3^vIO+l?-M zyd`(Yx>)f9T`1_8i+G-raiC&blq&d^SDG}O<*u29{$O%6*t&1h>d~GO+^!qWj0`+{ zwVs&;SSyJ}j*+RxOr&cN+JI}yTdFN`LR*{6-GtRX#QW~@>S;UH;gtK(W?-hUN9m;V zeB~`;x?JLbp@QEu;pCC1XKn?|CD7$sm4e)m-DMCr%;%|9qodob4`=?VG#%NeuVq#g z6Q+R6(t574MWk!VP@LSUytEFViz5mKN^ml3H>6Dy$07AXJs`KnbrxRFEPnle>|&p1mr^ch>K^BL7TK?$3wT8u zcUGi4j$Q}}8e@OWI`;MQPVHRX$E9C{sY^YpT~VP4d)MK%z%pIXlJ3qlTNT zNKDAn+G_p1fx7s{#&4i2O?S-^ehr(i><4bj7di(^+}h)DMWLSMZ(Z-TeGO8W${HFB z?P`p}@87RBfgPL$e^gxEuw-qtD=g`^;qTq{?MGudaHHaUe0*CwI|hb^sqd|=g`kyI zvpCf21h=$UR9g7@a!9_E^9X^>w?Cz)=fNfIm6es8HdZDkz(Fyvd1tPbv!tI{P5H~3 z7;Pd`&TvVCl+^jyNkld`kEU^2nv)ASX?!zzVV6vk@A&2fb#a2rLz8I{1h|5dgMng1 z;*+O@S7Ph~8v1%R-wj-)i#l1|$}9fTb6tF)eGHA6_zIQwRRh;gm2GC5Ui2LZy8fR4 zSpla0Oq3*P@`TZGLiX?Wot8ORd^b>E3gin-(b6 z`B8YXws59qPmfpi@g|j4x%B91r@Ws7MLT(pDXPERs@*kL_1ZJIgW*l9GZk$esa0jC zwZ6PTi*r&GIy@v8+*NH}q_9wnN~)aNd*qttq)pONM__U=B5b&7Dht%{!lR89jXHGV zwmy9PG@vv4KN2%1#;9^rt}fkrto7v$s%^Xi_@% diff --git a/docs/_images/fittrackee_screenshot-05.png b/docs/_images/fittrackee_screenshot-05.png index 0278e0f6ff9f772bfbd6e1a1fb2447c8bf6921e2..992818ec7940bbc0cf81a4c783edca8ad3bd127b 100644 GIT binary patch delta 14249 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 delta 14270 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 diff --git a/docs/_images/fittrackee_screenshot-06.png b/docs/_images/fittrackee_screenshot-06.png index 8f1292e399f2877dd5dd15076eac03410919cfb8..8e6828252d478dbaa02d810380912a7808eaf11c 100644 GIT binary patch delta 17597 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 delta 17567 zcmagE1yodD^gjwBpdern(jrJoNY@b3-Q5z>9g>$uiJ?KdVPFX9P6ebT2BeXOp*sZL z#qaO;e{a3@)_T{wX5q{^_nx!QK6`&YpM9VW7$bEUF*mrM{4_DxKW{Ls9*4JkypMl^ zYJ*A}{|S`}cr(Ek6tn6yMiB(;b!V8v$=6G1O9jcrT20xD+z#s(*Bw}Y>*;m!MVYrh z?`Uh8GOorMO20LG$>(^DYt4`9=L7gz8KM!(lbGAZ${JsDNhs}wJp4n$&&GE6sWyV? zIMe@WrRxU{mKfBk_4m%x)62e2P!X)h*0%Fun*zj+z|y2yyijONU(_dqRJm{gG2f#W z+fU?d)Gua?LgprZNoz)axnfX(Gltiy1sXVAB*jP5k z-J|D-0dsYZbD%$s;ZSbj?;W>`q}q9M%5`Ra7Er~V7~0eK8xcaHPP!@7!^!$L2)Qmj zi2oujk$cB-K635s<#(3H>Obfic2Yl>bg7cPZD}@w3+Oz13s2Mt+pj$M@$OgDyje8u z zxx)b)0Rd-wzjJ(~eoJ-HUCWWD2{bc}!%1V>X0|)2A*(THhvLIW<2VhAw-ExZMgBe? zj%owV)Md%ueC+>LFe;!h>!J`60Dqq45J79Vi*6D*wnF2=EivlT%S-q(&nL6XF*KKX zvEJ7E&}Oi@(Za<_1KAYn@XlRFcOojSLO==FrIZ423GsSkrgXx#P(!z%W6&1KjgSqD zUEg9i_GDy&nUc#@C+k?}gs5CcNQTKnz47Mp?V8CauyBZtsn{3dHwuX~lY|pGJLecS zBX&GYRnFwUOtcyN$-hZEI8vax)Fc#ytYG0(Q6EQpd(S1VCRi5F6j)53#Pdrn66fi%$|7=ea#a z`DQgii26c;4a<*!iHe6}*(!O406J8juJO8}uX&2^4x18fpp}SwC9K82>FR*5 z;jlMYW|>RQ*jP!Y6`5C?vLshO)tb_y?Z^(uGuGrCC}8CLvTsw#_j-OnvtTVeK=53s zIpUJfsto1R&TtU7L5G&W)2E5SRoq=D{hdQRxrh>Fy3h|bw#5aQj8#IVDUd(fIRKLnR`QJqu540 zkbae>JfmpWwqaazRb3r}m`C)rk(GcbWR(Rrg2>jDsVTEoEm{)~eQ||;76iQ04<=Zz zdbbgaRvMbcG2NURpcdwVQs6{n93-+0OAg?BgiVuf{1ip?O&-HjqH;8*fCDoL@|wlK zDuP;d`CUct<@s2uU0k;S^y1D(quX_B)P`?*nLNfdCVr-i{y8>PzTlV2;7X76V%D;@ zXos>*v9}z4{k|Y)fNg-}z3KwWX|m1U>zd?Mh4?b$p8oc4^zd&{Iv_P!#*I~Z7$(^<&8orlZ$b#aRtSqCyFpmX56f=@$io*HE(@LlKE!TZ&;fEpmQ*UL6tTw z6;52XUJ{`B#iHhCepyN+z%%~aC%A7o?Mlds6w$3)Kn_Zv`&&KKalb3(c3-!^txaiLWM)w zNIHXN7i$0h{gYp^4!qky|08d12^{nvtRIBaYEZfOtQBl6f3iGJ%$w)Mnn6|kU@{wX z5-8}DBldiO8`Zo~cI~=Wc$_38A?FHl6<&#v#`Herlj)FSLC2%R-ZZL|Us_^ooJ61Z zaA4(r`js472NU$4x-?zQ5H*WH#BD!JbcCbQjo4Ccsy78Itq(ZdGgBEa*QubFDZJRX z4tV;NSZhP&`^4`V#3z8Z+i-&(w|Gb$AL4zE+iZNg>=H?0A{0PHV;ubKsH*y0L4q=Y zZQbyL?tDTNHQpb8%uE)facR760ku+kFz?&Pt35;)?%mr2n7$U}MIR4b@B?nh&d0y8 z1`S@*E4?~|>s97j)uwk&K;@MlX_6EtKcF)|5-TXwob23dEg1#MN$7tz4*YzSE>aib z`e&9P9!*{PXkEJpTj!}LX21rDlGM7iFSJ||byS$P^r;lD&NA*Y!?jQ?pktBt5g7;;8NC3g2Y zgPEbtKa$ppPjv+Nb!Kvj_UnwIZ*IvtX-cmhm%TmGIfdqt{+udxlHr%52D^&+<^A4I zD$lTRHT0e}Lq-S;L?o?|LaDgu#-t59mi^^pRdB}Q&A}L~vUHcO5-C-DNggkf(Dnn) zS9+t>`9(|t*D5dF6&{}dLNf~s$1T%HZ7D;w=ZZt2;joheC`{?%#5>;Rs%mOq9?(HX z(Zze76V$wTZXT#SK^pv=T7aOa4YE0$_$~6-5KsQpKe$I_l(Feh{J0ZB9{b?tjkwr1 zf5{+M$H>>MIeMcEFox8&Eh=oDRfOQwyYSpO|8NuOfV4totT*F--M5_dJg1*L)T z^Lt=PSLaowUSnyaw{USEFebLF4J9{57|q+1;Z78mflJ6 zj18yDs`RmThY9CP`Kva*)Z=Hl$yA(M(SawB28ZMf3-%cW+f&*q%3+J`pn?P;RiSl9 z;o4V>lHZBoIg+_OhM%g4uEhJl&@&>;k;(HYQ8fv>_mS3l~=4f{mfuV#3Vsf<2ukH zEt;cl1H(ilv2ucg!2fN~gU#h&&RHD^_d;m77;EOd(y-no*OJmAk1#HMKOdc&$PFLW z_;>Y(rAn?e=V5q?C4<&#D$|H?U3r36ZLV>eIeYA%onHm>~VD($6W4Cdd+)-4(Jjjmre`2}1UrbIYWju6`Lq>3N0 zy>EnKWhuQ9H@>^Fy1Vf`9znZJM;oLHcs%@vgBt}E!({WZj!LO-hT5hmy_uAib&5(7 zX+STaDpV`EX1n?5lm4%t#*FD#udW=aNAdrXl_V}_d{Qfn-Jy37e*L;^o9==62kvJM zX!2~sv9eUq2uvQrLh4_pFQ+0kU-}9Bh)ILS*r4ZPih75?d`9`Mr$fm5yLrql?5s#v zw}WXVIh#fK=2L^d9YRf2t~Hs$^ligdtl*OPGr)YnzAy8)x$%>l2oJ_*F3dJbrd&Bs z(kuLE`EeJ6Pz*+91K7`kQfW2igm->=O>U#!<-*!?Nkmdn6wpK%5)mR--^HCKFJfxBp)?#HJ+~>|SBrn(YhBkKZc=t?buJ&VWGr#(f&7Sgoul}k+BqyrvsEPUZ z#CY3&DWTaq*<~jb_51saO-N4Y1%5R18W!P0KoHFyy<3~qHx#3z?KLl(%@y(dk&|_g zKWUK{6(>i4y({Jz`j=M>TfHCTs4gEj#+Zf6q8wyrPAZoDP35Vg(A_iDPAs_+o##`@ zy*fj4H=e@A`dycKyqoW*M}DqZ{uK?STQ5-fb1bPHPLx*#naauWrXTa;%d0ev;`2&* zUtmu7u%n{(+(?6_P-{YX>XXqQQ@>+(%5D4yAD;BJJ=6GVFN=dmzI^LdS-PMx6jn08 z=kBS*5{jm!Y#|DaOo3LA9{DiAJUttpQpYMJ_>$c zXMhl|;3T(TDb74luf~#LuOTCgQA0%W@{3qv@)91;qHsV&IC-%yf;IC(ll^F(U~2&Q zc~dXUf0C|ZS^A~E7Ja*Y?zCN;*Ig9&s=tV~0G}g}-|xyzp-Vb9)DKobNrz>o^=ijY zQxF^X0u%EGPStbgua8H2AC`&-t<+nIhn-JFC;#@SW(;&hg;|y=D7*4+=q332y}C%b zd_|~wmo6scze7=iQY3|W9CEck6;tF0bYxk-^x9qwLZ)`u`rpJ>3^WF*YM4=;@BCX}9n+a5xxuT#3uq3egCM+BGIMit57y@xJWTV z*^7VkR2~(33wz@AM|}tUsDuanA>Qbh$Wwf6N{v! zI&+hvyO-J9CPHxua*dnWK*P~vfo#SHDt&d?HV;u-aC~33_>sBs5XT6+jE(^6_D-f@ zNgwU!!_H2BpAY0+{=w0oEnNptko>;=0O5QMMqGFL<(M3Pou^F8Fb(?m zA<9fO+s4jYM4azv7+9czHl3Z(-6cU0)#bS5fv+x5mp51QH($TGWo4-Oe7Mv=xxWY5 zTR^?Fh$^;lBva-Z_*tm-zU|xVV8dtPtX>YGZM*z0@Z{Y4L;%3e`7II3^pb5E1|1_A5{ao1D!2L4HW!gk|B$A|Yhs-HKo8F^x zuDkRD>__|$CkX`oVwQ)_pO$W&GK9``=HHOm+`5(@ZmHj;O;IDBQi({CYfKnZiNYnr zzr5Wo68tL$HKIwDFK2wow_b@#5VwMP7qmE^S^%sDr{T+>LRjl=-aQC*577Kx*B))x z?DpVcW&l&!%A)0i@vM9ve%-&1UjD{lDHlj>!PMVFsiZStr;)`>jX8&fsTr>sC$kwlHybl29|tcpFBcm-GrNg}$p>CeUUO3}?)XEZLR?Nh z@E;d9JJ&m&cWj*11uuJWsuk&sA3bc|ow|sxVr75y_z~{|m+w3zK|8GVJFKWCe87GK zBl0$SW&b-LCa!n?)29;XQlW)$-un|(CgW9OvIE=pbBOspt@C+<=?13#P^M}V_p}cM zCc2I19r7JtaszE2>V&!Y0oinq^$RFsr;ZPo4iEG9{8tXy~XYOAm4--hjQ7@qW}oM@wpDW-^=7 zKBWHu+w0bH%RI{oV1M}p(T0N3aVZrc3pUKAc!YH_zT{_6>vjz&mg%O6i&{T>Mv<$y zt0&_Qm$%SL8L}XblEgwo=|F$4{21&pfrb$zDjMJy?l7fVmMT?JQ=_g4*KlvnSXPI} zE6`TM-x5ZEw><3&W=2$$29ZbLCyKvUhcVkvOV0lJ`PS_q|Gxb2aIEQF_pbgI)@E!k z&A8LdE45d(_V!rvMy0{G{GWHd=oRB7A|h&RY%H#-ii@dAA^``JB2W7s96JkJ;J+DU z@;W(xT`^^Su0B~h`la>(3JMXf=szQjJnce7@sCKJ@J1D<@zbgF;*j{yq95~Zit6xD ziJpkQSv3CdE6~bFp5(F+R0DuRVnob zu&7SSevaag9o*;Y&(FxhQZA`YOi8I^f`TGac2@N9scL3G(z{Vv;h5sw+}DW-39u@l zN)=p9aH@`|zjDEOf{RHj|24ZnE}2nS*r>9yGCU$8j}5fMhKQ9_u{>@3+}s?QK?f@6 zQxeLLCsg$6Y*kcM($L2>ngudrI1sZ4i>u&{9W z|NcTG>yKTWU!(5QcCF%lPM-bpqw!EG7vjCF5nyC=x;dIR>Gt^Eb3r>9NGgB9wlE!Y zAaOqC^}SnBB}h(Cj^Qw_)Gld-Mn@;7rOnDrjSLP>%+%W4d&C=BTEi;0#_K;DC))t6 zmR^z{n_Au;P%=|>6pmH9&!gH-yDzwQTL|!Jc?g|EuDH3|x6Pc8Mz@k&ogAP86TJ~mka1_4xqj+t;VK{%c%G7kXr^k6&mOQ~3l1DhRm!~m(rC@^qR(ii zHx@mj_HOc8@v80AvCh34FJ@Qz89FA)(sMCzl*`>bv|HtRlABjKHw-;GBtkx)YQG(+ zzt~Qv7ZSRSE0alv+SR&@2$^rJ3nblCIk$euCAHbw#(|n6>utw@M6H_Gh=@Pw6nFc0 za|IXfb`5-}OJp+BjasI+XX(yIN2de*r(V1B#rSKl)#@M`&C8g)ZD(ighGDdV1$j(U z8hRrie~WnH>?m}CfiA1djGuR(+kU?M`*b6T?+O?GiV`@Y1{wwihOK<$#nlxfBctrS zTSrB;<|9XQ0nZng*O!(}F_OS5iB>Js-{CQub+m-nmzX1fcjW%{Q)NU3HRP>ELxc8GG>FhT=SL*5vrGKH_O=RcEfCZ z^b~Gx8%$`(hiXd zKl$6fIIe~lrIL5>Ex!D`Cx7eeVu%QluhIYrWnR{1`koq`?#-x3=BeEId4zL2$c-XL zgbPD+a8Bl<<+w~W15X~FbNOGHtW55DU2JJ_*&4G#{O&TKYqcQ>(a>fwo+p&jqbwFI zEbL)nefyJ0^Ct&dlS~eM-qOO27oV7rYdq!$j#|H{SIn3gH7DB_H2Vt6s*)22=GXxB zPF4uj6s-z>lSPm-okBbphg{q$1Qz{(vhDml>(rv!`S!RH>XSy_*zgk$D4{F9qz;1H zM2%N!X)^BT5i_RW1?`xx9es8v%BG`?8=VTXK?j4#HCNE{B_FwkN+~^HHmB3K3Ayrx zwFHPB_PUq`m^?Qq!d;S}VTp8%0234Z-Ik)SGMA#chUGQr>)WHnt>6|-3~QFS-yoB# zptz;BSOv<{55uEp*fw_p18e(z(fBC15L%u9>{In z5f&EL3jE;>GNYvLmm;AmwCxMUOSdoQ9Sd>ug>g|_-oE&QnRMP(DY@%FA#KEM5ypt% zYZo)bh^&kDXA;319xlU!g07;ryspMYty!t9idl19JdKr*YW%}3nnYV^)djk0Ye-m2 zaTanD^uxb9Xk3QCMIud5)$JuW5hjX1|7XHP-hJm|Y)+Fw=B5$=Pex-2e~CF#U0Qx^>fg?IYz@t^ zvwv9_IQ^LM)-y!V+dX#naXdpRsYLoWLzsRVckF2g)mC_kQ)850+fk!C%#7{l#4BY# zo@nLUqH2JE&0Rfeg-k{p*74ZX{Ny~I=5oQg40quewnLyvJm@orijvLphmL1hfJaNK z@ir$-(d_%vwRHmJbQcX%o_eoy02dcaeY__&6(X!6WSAKq4%<$e&vWr^8dO7PZMBuT!Z!LkG)b6mR_$!;5BBlI`Mg*02u5_0e|F=-u-=`u|Xi;e!5OIj7?m=d3Fv~-B@|1d!L@DS`FrfH&r0#I1nd;@WFYXH~ z18;~)ANHrl>mm8HtE&=k&M^Bu0a?U@GzAQg2wRD6_N!~>SP(9WJz{iP;DSDxDlD5N ze~~UdHVnB&w14~v?jyy?+#~sq585YO!Du-!Wvd=NOinhy?_ml5czasTSgL6--BzN} zlVr!R?Y>3;B~0p;k}GLL&7_63*joaCr?=;J!IwLYIrB>Emt#w%BkwqQrQ;Hsm=uz0 zVb(HnX~`o)PqGakeaoQqns0$E+U+7_YT}^1V!&AkTSoPY96|RLJ~$M=<1VFb1xaUCQwEH8DJ>tM z;h+2nI@;;nPXZyO8|PuCr^oo`&eVFxFKrhV0b^&B6F||(Sb5D2iQjw2FC6jd>H5ec z5auwxc~h`}$OE(eOh!^UMaJyiZNSg@TyEyHf$#IL?@WU>rKBV*!Kiuf{6WNFr!(H; zG&0=Y8Ur{H-3pi-RS7`dUG~utHk^E=4jESB7GZJK%e4Q~qB`r8FElI!=INSX2so6e zy6ITT-Qj#o6MpiT(nbc&{)WhE0#vrSY+##Gr?X=!Uzf)An{Q9qldWIX8fUR_=> zFm0`xFo3fBSr5%&=YEt>mam@3=jnWS5;I$Aq9O|@XkM0Y1E$GZg!m;(aL+0&&HmKH zyg=6VpVdaux+A^bzeUy*Zq*5{@zig8ScOWeR>}40QBbyD>8dZc*o;>-E`0j)u2uL{ zP9dFBL4icVvR{w2STtK0Ok|grm;62#-&Wl6B%^8^7KM6|AYfGZ%9dlOP&!UkUi;VA zcjESF5|MNc?2M_T=uAVWc#H(ZL8vxyFiS_z%O>)oXD+uT@PYZpYO#ssH!s({Y^C

ZNui`&!?_3)M8-EqH~*PqjKuI<~R)eU4> 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 diff --git a/docs/_sources/changelog.md.txt b/docs/_sources/changelog.md.txt index 6678ce48..a91a00da 100644 --- a/docs/_sources/changelog.md.txt +++ b/docs/_sources/changelog.md.txt @@ -1,5 +1,22 @@ # Change log +## Version 0.6.5 (2022/04/24) + +It is now possible to start FitTrackee without a configured SMTP provider (see [documentation](https://samr1.github.io/FitTrackee/installation.html#emails)). +It reduces pre-requisites for single-user instances. + +To manage users, a new [CLI](https://samr1.github.io/FitTrackee/cli.html) is available. + + +### Issues Closed + +#### Features + +* [#180](https://github.com/SamR1/FitTrackee/issues/180) - allow using FitTrackee without SMTP server + +In this release 1 issue was closed. + + ## Version 0.6.4 (2022/04/23) ### Issues Closed diff --git a/docs/_sources/features.rst.txt b/docs/_sources/features.rst.txt index 3d052839..a484d67e 100644 --- a/docs/_sources/features.rst.txt +++ b/docs/_sources/features.rst.txt @@ -109,7 +109,7 @@ Administration - add/remove administration rights - activate his account (*new in 0.6.0*) - update his email (in case his account is locked) (*new in 0.6.0*) - - reset his password (in case his account is locked) (*new in 0.6.0*) + - reset his password (in case his account is locked) (*new in 0.6.0*). If email sending is disabled, it is only possible via CLI. - delete a user - **Sports** diff --git a/docs/_sources/installation.rst.txt b/docs/_sources/installation.rst.txt index e42c11f1..1e9752cf 100644 --- a/docs/_sources/installation.rst.txt +++ b/docs/_sources/installation.rst.txt @@ -395,13 +395,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.6.4): +- Download the last release (for now, it is the release v0.6.5): .. code:: bash - $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.4.tar.gz - $ tar -xzf v0.6.4.tar.gz - $ mv FitTrackee-0.6.4 FitTrackee + $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.5.tar.gz + $ tar -xzf v0.6.5.tar.gz + $ mv FitTrackee-0.6.5 FitTrackee $ cd FitTrackee - Create **.env** from example and update it @@ -521,13 +521,13 @@ Prod environment - Change to the directory where FitTrackee directory is located -- Download the last release (for now, it is the release v0.6.4) and overwrite existing files: +- Download the last release (for now, it is the release v0.6.5) and overwrite existing files: .. code:: bash - $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.4.tar.gz - $ tar -xzf v0.6.4.tar.gz - $ cp -R FitTrackee-0.6.4/* FitTrackee/ + $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.5.tar.gz + $ tar -xzf v0.6.5.tar.gz + $ cp -R FitTrackee-0.6.5/* FitTrackee/ $ cd FitTrackee - Update **.env** if needed (see `Environment variables `__). diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index f1eaa27f..b02c9952 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.6.4', + VERSION: '0.6.5', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/api/auth.html b/docs/api/auth.html index 0643be5f..48c7468c 100644 --- a/docs/api/auth.html +++ b/docs/api/auth.html @@ -5,7 +5,7 @@ - Authentication — FitTrackee 0.6.4 + <title>Authentication — FitTrackee 0.6.5 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.6.4 + 0.6.5 diff --git a/docs/api/configuration.html b/docs/api/configuration.html index 16106211..d21ebd5a 100644 --- a/docs/api/configuration.html +++ b/docs/api/configuration.html @@ -5,7 +5,7 @@ - Configuration — FitTrackee 0.6.4 + <title>Configuration — FitTrackee 0.6.5 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.6.4 + 0.6.5 @@ -151,7 +151,7 @@ "max_users": 0, "max_zip_file_size": 10485760, "map_attribution": "&copy; <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors" - "version": "0.6.4" + "version": "0.6.5" }, "status": "success" } @@ -191,7 +191,7 @@ "max_users": 10, "max_zip_file_size": 10485760, "map_attribution": "&copy; <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors" - "version": "0.6.4" + "version": "0.6.5" }, "status": "success" } diff --git a/docs/api/index.html b/docs/api/index.html index 2493b0ac..f619b1ff 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -5,7 +5,7 @@ - API documentation — FitTrackee 0.6.4 + <title>API documentation — FitTrackee 0.6.5 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.6.4 + 0.6.5 diff --git a/docs/api/records.html b/docs/api/records.html index 91109897..9b4cf90a 100644 --- a/docs/api/records.html +++ b/docs/api/records.html @@ -5,7 +5,7 @@ - Records — FitTrackee 0.6.4 + <title>Records — FitTrackee 0.6.5 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.6.4 + 0.6.5 diff --git a/docs/api/sports.html b/docs/api/sports.html index 19b5df5f..1bb4cbe5 100644 --- a/docs/api/sports.html +++ b/docs/api/sports.html @@ -5,7 +5,7 @@ - Sports — FitTrackee 0.6.4 + <title>Sports — FitTrackee 0.6.5 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.6.4 + 0.6.5 diff --git a/docs/api/stats.html b/docs/api/stats.html index 029f6554..8d45eb65 100644 --- a/docs/api/stats.html +++ b/docs/api/stats.html @@ -5,7 +5,7 @@ - Statistics — FitTrackee 0.6.4 + <title>Statistics — FitTrackee 0.6.5 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.6.4 + 0.6.5 diff --git a/docs/api/users.html b/docs/api/users.html index ddae6607..6c1e7a48 100644 --- a/docs/api/users.html +++ b/docs/api/users.html @@ -5,7 +5,7 @@ - Users — FitTrackee 0.6.4 + <title>Users — FitTrackee 0.6.5 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.6.4 + 0.6.5 diff --git a/docs/api/workouts.html b/docs/api/workouts.html index 2dc29f05..e692016f 100644 --- a/docs/api/workouts.html +++ b/docs/api/workouts.html @@ -5,7 +5,7 @@ - Workouts — FitTrackee 0.6.4 + <title>Workouts — FitTrackee 0.6.5 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.6.4 + 0.6.5 diff --git a/docs/changelog.html b/docs/changelog.html index d3b9508a..8b9869b1 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -5,7 +5,7 @@ - Change log — FitTrackee 0.6.4 + <title>Change log — FitTrackee 0.6.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.6.4 + 0.6.5 @@ -78,8 +78,15 @@ role="menu" aria-labelledby="dLabelLocalToc">

  • Change log
      -
    • Version 0.6.4 (2022/04/23)
        +
      • Version 0.6.5 (2022/04/24) +
      • +
      • Version 0.6.4 (2022/04/23)
          +
        • Issues Closed
        • @@ -87,235 +94,235 @@
        • Version 0.6.3 (2022/04/09)
        • Version 0.6.2 (2022/04/03)
            -
          • Issues Closed
          • Version 0.6.1 (2022/03/27)
              -
            • Issues Closed
            • Version 0.6.0 (2022/03/27)
                -
              • Issues Closed
                  -
                • Features
                • -
                • Bugs Fixed
                • +
                • Issues Closed
                • -
                • Pull Requests
                • Version 0.5.7 (2022/02/13)
                    -
                  • Issues Closed
                      +
                    • 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 @@ -367,10 +374,26 @@

                                                      Change log

                                                      -
                                                      -

                                                      Version 0.6.4 (2022/04/23)

                                                      +
                                                      +

                                                      Version 0.6.5 (2022/04/24)

                                                      +

                                                      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

                                                      +
                                                        +
                                                      • #180 - allow using FitTrackee without SMTP server

                                                      • +
                                                      +

                                                      In this release 1 issue was closed.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      Version 0.6.4 (2022/04/23)

                                                      +
                                                      +

                                                      Issues Closed

                                                      Bugs Fixed

                                                        @@ -384,8 +407,8 @@

                                                        Version 0.6.3 (2022/04/09)

                                                        Pull Requests

                                                        -
                                                        -

                                                        Bugs Fixed

                                                        +
                                                        +

                                                        Bugs Fixed

                                                        • #177 - Minor fixes

                                                            @@ -399,10 +422,10 @@

                                                        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

                                                        • @@ -413,10 +436,10 @@

                                                        Version 0.6.1 (2022/03/27)

                                                        -
                                                        -

                                                        Issues Closed

                                                        -

                                                        Bugs Fixed

                                                        +

                                                        Issues Closed

                                                        +
                                                        +

                                                        Bugs Fixed

                                                        • #171 - Stats chart is not updated correctly

                                                        @@ -427,26 +450,26 @@

                                                        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

                                                        • @@ -461,8 +484,8 @@

                                                          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

                                                          +
                                                          +

                                                          Issues Closed

                                                          Misc

                                                            @@ -470,8 +493,8 @@
                                                          -
                                                          -

                                                          Pull Requests

                                                          +
                                                          +

                                                          Pull Requests

                                                          Security

                                                            @@ -489,8 +512,8 @@
                                                          -
                                                          -

                                                          Misc

                                                          +
                                                          +

                                                          Misc

                                                          • #152 - Fixes and improvements:

                                                              @@ -506,17 +529,17 @@

                                                          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

                                                          @@ -525,8 +548,8 @@

                                                          Version 0.5.5 (2022/01/19)

                                                          -
                                                          -

                                                          Issues Closed

                                                          +
                                                          +

                                                          Issues Closed

                                                          New Features

                                                            @@ -536,8 +559,8 @@
                                                          • #134 - Wind direction

                                                          -
                                                          -

                                                          Bugs Fixed

                                                          +
                                                          +

                                                          Bugs Fixed

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

                                                          @@ -547,10 +570,10 @@

                                                          Version 0.5.4 (2022/01/01)

                                                          -
                                                          -

                                                          Issues Closed

                                                          -
                                                          -

                                                          Bugs Fixed

                                                          +
                                                          +

                                                          Issues Closed

                                                          +
                                                          +

                                                          Bugs Fixed

                                                          • #131 - No workouts displayed on calendar

                                                          @@ -560,10 +583,10 @@

                                                          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”

                                                          • @@ -574,10 +597,10 @@

                                                          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

                                                          • @@ -588,10 +611,10 @@

                                                          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

                                                          • @@ -603,10 +626,10 @@

                                                          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

                                                          • @@ -614,21 +637,21 @@
                                                          • #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

                                                          • @@ -645,17 +668,17 @@

                                                          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

                                                          • @@ -666,10 +689,10 @@

                                                          Version 0.4.8 (2021/07/03)

                                                          -
                                                          -

                                                          Issues Closed

                                                          -
                                                          -

                                                          Bugs Fixed

                                                          +
                                                          +

                                                          Issues Closed

                                                          +
                                                          +

                                                          Bugs Fixed

                                                          • #79 - Fails to start after make rebuild

                                                          @@ -679,17 +702,17 @@

                                                          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://.

                                                          @@ -698,10 +721,10 @@

                                                          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

                                                          • @@ -713,10 +736,10 @@

                                                          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

                                                          • @@ -727,17 +750,17 @@

                                                          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.

                                                          • @@ -747,16 +770,16 @@

                                                          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

                                                          @@ -766,18 +789,18 @@

                                                          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

                                                          @@ -793,10 +816,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

                                                        • @@ -812,10 +835,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

                                                        • @@ -827,8 +850,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

                                                          • @@ -841,10 +864,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

                                                          • @@ -855,17 +878,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

                                                          @@ -875,10 +898,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

                                                          @@ -888,10 +911,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

                                                          • @@ -902,15 +925,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

                                                          @@ -919,17 +942,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

                                                          @@ -938,17 +961,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

                                                          • @@ -997,10 +1020,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 7119c82a..c1fa69d7 100644 --- a/docs/cli.html +++ b/docs/cli.html @@ -5,7 +5,7 @@ - Command line interface — FitTrackee 0.6.4 + <title>Command line interface — FitTrackee 0.6.5 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.6.4 + 0.6.5 diff --git a/docs/features.html b/docs/features.html index 20687e7d..2f3e730f 100644 --- a/docs/features.html +++ b/docs/features.html @@ -5,7 +5,7 @@ - Features — FitTrackee 0.6.4 + <title>Features — FitTrackee 0.6.5 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.6.4 + 0.6.5 @@ -295,7 +295,7 @@ A user with an inactive account cannot log in. (new in 0.6.0)

                                                          • add/remove administration rights

                                                          • activate his account (new in 0.6.0)

                                                          • update his email (in case his account is locked) (new in 0.6.0)

                                                          • -
                                                          • reset his password (in case his account is locked) (new in 0.6.0)

                                                          • +
                                                          • reset his password (in case his account is locked) (new in 0.6.0). If email sending is disabled, it is only possible via CLI.

                                                          diff --git a/docs/genindex.html b/docs/genindex.html index 5e573465..a83f8c92 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -4,7 +4,7 @@ - Index — FitTrackee 0.6.4 + <title>Index — FitTrackee 0.6.5 documentation @@ -37,7 +37,7 @@ FitTrackee - 0.6.4 + 0.6.5 diff --git a/docs/http-routingtable.html b/docs/http-routingtable.html index 355e0c8c..53f8ddc5 100644 --- a/docs/http-routingtable.html +++ b/docs/http-routingtable.html @@ -4,7 +4,7 @@ - HTTP Routing Table — FitTrackee 0.6.4 + <title>HTTP Routing Table — FitTrackee 0.6.5 documentation @@ -44,7 +44,7 @@ FitTrackee - 0.6.4 + 0.6.5 diff --git a/docs/index.html b/docs/index.html index 6ae6a046..593a78a3 100644 --- a/docs/index.html +++ b/docs/index.html @@ -5,7 +5,7 @@ - FitTrackee — FitTrackee 0.6.4 + <title>FitTrackee — FitTrackee 0.6.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.6.4 + 0.6.5 diff --git a/docs/installation.html b/docs/installation.html index 216719a0..19af9601 100644 --- a/docs/installation.html +++ b/docs/installation.html @@ -5,7 +5,7 @@ - Installation — FitTrackee 0.6.4 + <title>Installation — FitTrackee 0.6.5 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.6.4 + 0.6.5 @@ -674,11 +674,11 @@ $ make install-db
                                                            -
                                                          • Download the last release (for now, it is the release v0.6.4):

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

                                                          -
                                                          $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.4.tar.gz
                                                          -$ tar -xzf v0.6.4.tar.gz
                                                          -$ mv FitTrackee-0.6.4 FitTrackee
                                                          +
                                                          $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.5.tar.gz
                                                          +$ tar -xzf v0.6.5.tar.gz
                                                          +$ mv FitTrackee-0.6.5 FitTrackee
                                                           $ cd FitTrackee
                                                           
                                                          @@ -798,11 +798,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.6.4) and overwrite existing files:

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

                                                          -
                                                          $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.4.tar.gz
                                                          -$ tar -xzf v0.6.4.tar.gz
                                                          -$ cp -R FitTrackee-0.6.4/* FitTrackee/
                                                          +
                                                          $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.5.tar.gz
                                                          +$ tar -xzf v0.6.5.tar.gz
                                                          +$ cp -R FitTrackee-0.6.5/* FitTrackee/
                                                           $ cd FitTrackee
                                                           
                                                          diff --git a/docs/objects.inv b/docs/objects.inv index 09bd68a09220c72c000e17292eed3af60ffbdcfc..eddc5991ec26ac7958909f4a7975a4cfa27d1c78 100644 GIT binary patch delta 12 TcmdnPwTEkh6Qk)y=btP99oz(l delta 12 TcmdnPwTEkh6QjvS=btP99oGbf diff --git a/docs/search.html b/docs/search.html index cbf51412..d5e3486d 100644 --- a/docs/search.html +++ b/docs/search.html @@ -4,7 +4,7 @@ - Search — FitTrackee 0.6.4 + <title>Search — FitTrackee 0.6.5 documentation @@ -44,7 +44,7 @@ FitTrackee - 0.6.4 + 0.6.5
                                                          diff --git a/docs/searchindex.js b/docs/searchindex.js index 9f27138b..5aa8f359 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["api/auth","api/configuration","api/index","api/records","api/sports","api/stats","api/users","api/workouts","changelog","cli","features","index","installation","troubleshooting/administrator","troubleshooting/index","troubleshooting/user"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"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:56},filenames:["api/auth.rst","api/configuration.rst","api/index.rst","api/records.rst","api/sports.rst","api/stats.rst","api/users.rst","api/workouts.rst","changelog.md","cli.rst","features.rst","index.rst","installation.rst","troubleshooting/administrator.rst","troubleshooting/index.rst","troubleshooting/user.rst"],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-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"],[1,2,1,"get--api-ping","/api/ping"],[3,2,1,"get--api-records","/api/records"],[4,2,1,"get--api-sports","/api/sports"],[4,2,1,"get--api-sports-(int-sport_id)","/api/sports/(int:sport_id)"],[4,3,1,"patch--api-sports-(int-sport_id)","/api/sports/(int:sport_id)"],[5,2,1,"get--api-stats-(user_name)-by_sport","/api/stats/(user_name)/by_sport"],[5,2,1,"get--api-stats-(user_name)-by_time","/api/stats/(user_name)/by_time"],[5,2,1,"get--api-stats-all","/api/stats/all"],[6,2,1,"get--api-users","/api/users"],[6,1,1,"delete--api-users-(user_name)","/api/users/(user_name)"],[6,2,1,"get--api-users-(user_name)","/api/users/(user_name)"],[6,3,1,"patch--api-users-(user_name)","/api/users/(user_name)"],[6,2,1,"get--api-users-(user_name)-picture","/api/users/(user_name)/picture"],[7,2,1,"get--api-workouts","/api/workouts"],[7,0,1,"post--api-workouts","/api/workouts"],[7,1,1,"delete--api-workouts-(string-workout_short_id)","/api/workouts/(string:workout_short_id)"],[7,2,1,"get--api-workouts-(string-workout_short_id)","/api/workouts/(string:workout_short_id)"],[7,3,1,"patch--api-workouts-(string-workout_short_id)","/api/workouts/(string:workout_short_id)"],[7,2,1,"get--api-workouts-(string-workout_short_id)-chart_data","/api/workouts/(string:workout_short_id)/chart_data"],[7,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)"],[7,2,1,"get--api-workouts-(string-workout_short_id)-gpx","/api/workouts/(string:workout_short_id)/gpx"],[7,2,1,"get--api-workouts-(string-workout_short_id)-gpx-download","/api/workouts/(string:workout_short_id)/gpx/download"],[7,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)"],[7,2,1,"get--api-workouts-map-(map_id)","/api/workouts/map/(map_id)"],[7,0,1,"post--api-workouts-no_gpx","/api/workouts/no_gpx"],[12,4,1,"-","APP_LOG"],[12,4,1,"-","APP_SECRET_KEY"],[12,4,1,"-","APP_SETTINGS"],[12,4,1,"-","APP_WORKERS"],[12,4,1,"-","DATABASE_DISABLE_POOLING"],[12,4,1,"-","DATABASE_URL"],[12,4,1,"envvar-DEFAULT_STATICMAP","DEFAULT_STATICMAP \ud83c\udd95"],[12,4,1,"-","EMAIL_URL"],[12,4,1,"-","FLASK_APP"],[12,4,1,"-","HOST"],[12,4,1,"-","MAP_ATTRIBUTION"],[12,4,1,"-","PORT"],[12,4,1,"-","REDIS_URL"],[12,4,1,"-","SENDER_EMAIL"],[12,4,1,"-","TILE_SERVER_URL"],[12,4,1,"-","UI_URL"],[12,4,1,"-","UPLOAD_FOLDER"],[12,4,1,"-","VUE_APP_API_URL"],[12,4,1,"-","WEATHER_API_KEY"],[12,4,1,"-","WORKERS_PROCESSES"]],"/api/workouts/map_tile/(s)/(z)/(x)/(y)":[[7,2,1,"get--api-workouts-map_tile-(s)-(z)-(x)-(y).png","png"]]},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"]},objtypes:{"0":"http:post","1":"http:delete","2":"http:get","3":"http:patch","4":"std:envvar"},terms:{"0":[0,1,3,4,5,6,7,9,10,12],"00":[0,3,6,7],"000000":0,"01":[0,3,5,6,7],"02":7,"03":[6,7],"04":7,"06":5,"07":[0,3,6,7],"08":[0,3,6],"09":[0,6],"0mb":[0,7],"1":[0,1,3,4,5,6,7,10,12],"10":[0,1,3,6,7,12],"100":[7,8,10],"1000":5,"101":8,"104":8,"1048576":1,"10485760":1,"106":8,"109":8,"11":[0,3,6,10],"115":8,"116":8,"12":[0,3,6,7],"121":8,"123":8,"1232004":7,"12341":5,"1234538":7,"1267":5,"127":[8,12],"129":8,"13":7,"131":8,"134":8,"135":8,"138":8,"14":[0,6,7],"140":8,"145":8,"146":8,"149":8,"15":[5,7],"150":5,"151":8,"152":8,"155":8,"156":5,"1563529507772":7,"16":[5,7],"160":8,"161":8,"169":8,"17":[7,12],"171":8,"173":8,"175":8,"177":8,"178":[5,8],"18":[0,3,6,7,8],"2":[0,1,3,4,5,6,7,10,12],"20":6,"200":[0,1,3,4,5,6,7],"201":7,"2017":[5,7],"2018":[5,7],"2019":[0,3,5,6,7],"203":5,"204":[0,6,7],"22":[7,8],"24":8,"25":[8,12],"26":8,"27":[0,6],"279":7,"28":8,"280":7,"282":5,"2930":7,"2e1ee2c":8,"3":[0,4,5,6,7,10,12],"30":[0,5],"3000":12,"301":12,"31":7,"33":8,"34":8,"34614d5":8,"36":8,"37":8,"39":7,"4":[0,1,4,5,6,7,12],"40":8,"400":[0,1,4,6,7],"401":[0,1,3,4,5,6,7],"403":[0,1,4,5,6,7],"404":[0,4,5,6,7],"41":8,"4109":7,"413":[0,7],"43":8,"44":[7,8],"443":12,"45":7,"46":[5,8],"465":12,"47":[5,7,8],"48":5,"4c3fc34":8,"5":[4,5,6,7,9,10,12],"50":[0,6,8],"500":[0,1,4,6,7],"5000":12,"5078118":7,"5079733":7,"51":7,"53":8,"54":8,"5432":12,"57":[7,8],"58":[0,6,8],"587":12,"59":8,"6":[0,1,4,6,7,9,10,12],"613":5,"62":8,"63":7,"64":8,"66":8,"67":[0,6],"7":[7,12],"70":8,"71":8,"72":8,"7380":7,"75":8,"78":5,"79":8,"8":[0,7],"80":[8,12],"8025":12,"81":8,"82":8,"83":8,"84":8,"877fa0f":8,"895":[0,6],"9":[0,3,6,12],"90":8,"91":8,"93":8,"95":[5,8],"98":8,"99":[5,8],"9960":5,"boolean":[0,1,6,9],"case":[10,12],"default":[5,6,7,8,10,12],"do":[1,4,5,6,7],"export":11,"float":[0,7],"import":[8,12],"int":[4,7],"new":[0,6,9,10,12],"null":[0,4,6,7],"return":[3,6,7,12],"short":7,"static":[8,12],"switch":8,"true":[0,1,4,6,8,12],"try":[0,6,7],A:[6,8,9,10,12,13],AS:[0,3,6,7],And:8,For:[10,12],If:[0,10,12],In:[8,10],It:[0,6,8,10,11,13],NO:[0,6,7],NOT:[4,7],No:[0,6,7,8,11],Not:[0,4,5,6,7],OF:12,ON:12,On:12,One:12,TO:12,The:[0,8,9,10,12],There:12,To:12,WITH:12,With:12,_:[0,8],__main__:12,_blank:12,access:12,account:[0,6,8,9,12],acit:7,activ:[0,4,6,8,9,10,11,12],ad:[0,8,9,10],adapt:12,add:[6,8,9,10,11],addit:12,address:[0,10,12],admin:[0,1,3,4,5,6,7,8,9,10,12],admin_contact:1,administr:[0,1,6,7,14],adress:12,after:[0,8,10,12],again:[0,1,3,4,5,6,7],agplv3:8,all:[3,4,5,6,12],allow:[0,1,7,8,10,11],along:7,alphanumer:[0,8],alpin:10,alreadi:0,also:[8,9,11,12],altitud:8,alwai:12,an:[0,1,4,6,7,8,10,12],android:11,anoth:[0,6,12],anymor:8,apach:11,api:[0,1,3,4,5,6,7,8,10,11,12],apikei:12,app:[8,11],app_log:12,app_secret_kei:12,app_set:12,app_work:12,appear:10,appli:9,applic:[0,1,3,4,5,6,7,8,10,11,12],ar:[3,7,8,9,10,11,12,13],arch:12,archiv:[1,8,10,12],archlinux:12,arg:9,arrow:10,asc:6,ascent:[7,10],attribut:12,auth:[0,1,3,4,5,6,7,12],auth_token:0,authent:[1,2,3,4,6,7],author:[0,1,3,4,5,6,7],autoescap:8,avail:[0,3,9,10,12],ave_spe:7,ave_speed_from:7,ave_speed_to:7,averag:[3,7,8,10],average_spe:5,avoid:8,awesom:12,axi:7,b862a77:8,b:12,background:8,backup:12,bad:[0,1,4,6,7],bearer:[0,1,3,4,5,6,7],becom:8,been:8,befor:[8,12],begin:12,better:8,between:10,bike:[4,7,8,10],bin:12,bio:[0,6],biographi:0,birth:[0,8],birth_dat:[0,6],bound:7,build:12,button:8,by_sport:5,by_tim:5,c:7,calcul:8,calendar:[8,10],can:[0,6,8,10,11,12,13],cannot:[8,10],card:8,cd:12,chang:[0,10,11,12],changelog:12,charact:[0,8],chart:[7,8,10,12],chart_data:7,check:[1,8,12,13],choos:[8,10],cli:[9,12],client:[8,12],client_max_body_s:12,clone:12,code:[0,1,3,4,5,6,7],color:[0,4,8,10],com:[0,1,6,12],come:10,command:[8,10,11,12],complet:8,compos:12,config:[1,8,12],configur:[2,8,10,12],confirm:[0,8,10,12],contact:[0,1,6,7,10],contain:[8,10,12],content:[0,1,3,4,5,6,7],contributor:[1,8,12],control:[8,10],coordin:12,copi:[1,12],copyright:[1,12],correctli:8,countri:10,cp:12,creat:[0,7,8,10,12],create_app:12,created_at:[0,6],creation:[8,10],creation_d:7,credenti:[0,12],criteria:6,cross:10,curent:6,current:[0,8],custom:12,cycl:[4,8,10],d:[0,5,7],dai:[8,10],danielsiersleben:8,dark:12,darkski:[8,10],dashboard:8,data:[0,1,3,4,5,6,7,8,10,11,12],databas:[8,10,12,13],database_disable_pool:12,database_url:[8,12],date:[0,5,7,8,10],db:12,debian:12,default_staticmap:[8,12],defin:10,definit:8,delet:[0,6,7,8,9,10],depend:[8,12],deprec:9,desc:7,descent:[7,10],describ:12,descript:[9,12],detail:[6,8],develop:[8,9,11],dialect:13,differ:[6,8,10],direct:[8,10],directli:12,directori:[8,12],disabl:[0,8,10,12],displai:[0,7,8,9,10,11,12,13],distanc:[0,3,7,8,10],distance_from:7,distance_to:7,distribut:12,docker:8,document:[8,11,12],doe:[0,5,6,7,8],don:0,dotenv:8,down:8,download:[7,8,10,12],dramatiq:[8,12],drop:8,dropdown:10,due:8,durat:[3,7,8,10],duration_from:7,duration_to:7,dure:[0,7],easi:8,edit:[0,8,10],electr:10,elev:[7,8,10,12],els:12,email:[0,1,6,8,9,10,13],email_url:[12,13],empti:[8,9,12],en:[0,6],enabl:[0,1,6,10,12],encount:12,end:[5,7],endpoint:[0,1,8],engin:[8,12,13],english:10,enter:[8,10],entiti:[0,7],entri:12,entrypoint:8,env:12,environ:[8,9,13],error:[0,1,4,6,7,8,10,12,13],europ:[0,6],evalu:[8,12],even:[8,10],exampl:[0,1,3,4,5,6,7,11,12],exc:13,exce:[0,7],exceed:8,except:[6,13],execstart:12,exhaust:11,exist:[0,5,6,7,10,11,12],exit:9,expir:[0,1,3,4,5,6,7],extens:[0,7],fa33f4d996844a5c73ecd1ae24456ab8:7,fail:[8,14],fals:[0,1,4,6,7,12],farest:[3,8],farthest:[8,10],fd:[0,3,6,7],featur:[11,12],fetch:12,file:[0,1,7,8,9,10,11,12],filter:[8,10],finish:8,first:[0,10],first_nam:[0,6],fitotrack:11,fittracke:[9,10,12,14],fittrackee_cli:12,fittrackee_set_admin:9,fittrackee_upgrade_db:9,fittrackee_work:12,flask:12,flask_app:12,flaticon:12,fmstrat:8,follow:[3,9,10,12,13],forbidden:[0,1,4,5,6,7],forecast:12,fork:12,form:[0,7],format:[0,5,7],former:12,forrunn:11,forward:12,found:[0,4,5,6,7],fr:6,frame:5,freepik:12,french:10,fri:7,from:[5,7,8,10,11],ftcli:12,full:[8,10],fullchain:12,fullscreen:8,gener:[8,10,12],get:[0,1,3,4,5,6,7],gif:0,git:12,github:12,given:[0,12],gmt:[0,3,6,7],gpl:11,gpx:[7,8,10,11,12],gpx_limit_import:1,gpxpy:[0,10,12],grant:12,graph:8,greater:8,gunicorn:[12,13],gz:12,h:[7,10],ha:[6,10],handl:[0,10,12],has_workout:4,have:[1,4,5,6,7,8],he:6,header:[0,1,3,4,5,6,7],health:1,heavi:[11,12],help:9,hexadecim:0,hi:[0,6,8,10],hike:[4,8,10],home:12,host:12,href:[1,12],http2:12,http:[0,1,3,4,5,6,7,12],hvybqybra7wwxpastwr4v2:[0,3,6],i18n:8,icon:[8,12],id:[0,3,4,5,6,7],imag:[0,6,7,8,10,12],imperi:[0,8,10],imperial_unit:[0,6],inact:[0,6,10,12],includ:8,incorrect:8,index:7,indic:10,info:0,inform:[0,8,11,12],init:12,initi:[8,12],initialis:[8,12],input:8,insid:12,instal:[8,11],instanc:[1,10,12],instead:10,instruct:[0,8,10,12],integ:[1,4,5,6,7],interceptor:8,interfac:[11,12],intern:[0,1,4,6,7],introduc:8,invalid:[0,1,3,4,5,6,7,8,12],invalidemailurlschem:13,io:12,ip:12,is_act:[0,4,6],is_active_for_us:4,is_admin:6,is_email_sending_en:1,is_registration_en:1,issu:[11,12],jan:7,javascript:8,jinja:8,john_do:6,jpeg:6,jpg:0,js:12,json:[0,1,3,4,5,6,7],jul:[0,3,6,7],keep:[8,11,12],kei:[8,10,12],kjxavsturjvoah2wvcegef:7,km:[7,10],label:[4,8],languag:[0,6,10],larg:[0,7,10],larger:12,last:[0,12],last_nam:[0,6],latitud:7,launch:8,layer:[8,12],ld:[0,3,6,7],leaflet:[7,12],least:7,legitim:8,less:8,librari:12,licens:[8,11],like:[10,12],limit:[8,10],line:[10,11,12],link:[8,12],linux:12,list:[8,11,12],listen:12,load:[8,13],local:[8,11,12],localhost:[8,12],locat:[0,6,12],lock:10,log:[0,1,3,4,5,6,7,10,11,12,13],logfil:12,login:0,logo:12,logout:8,longer:[8,13],longest:[3,8,10],longitud:7,m:[0,5,7],made:12,mai:[10,11,12],mailhog:12,major:8,make:[8,12],makefil:12,manag:[8,9],mandatori:[7,8,12],map:[7,8,10,11],map_attribut:[1,12],map_id:7,map_til:7,marker:8,match:0,max:[1,6,7,8],max_alt:7,max_single_file_s:1,max_spe:7,max_speed_from:7,max_speed_to:7,max_us:1,max_zip_file_s:1,maxim:7,maximum:[3,8,10],messag:[0,1,7,8,9],method:12,metric:10,migrat:[8,9,12],min:8,min_alt:7,minim:7,miss:[0,8],mobil:11,model:8,modifi:[6,8,9,12],modification_d:7,modul:12,mon:7,mondai:[0,5,10],montain:8,month:[5,8,10],more:[8,10,11,12],morn:7,mountain:[4,10],mous:8,move:[7,8],movement:8,ms:[0,3,6,7],multi:12,multipart:[0,7],must:[0,1,4,6,8,10,12,13],mv:12,n:0,name:[0,5,6,12],nano:12,nb_sport:[0,6],nb_workout:[0,5,6],necessari:[10,12],need:[8,12],network:12,new_email:6,new_password:0,newli:[0,12],next:[9,10],next_workout:7,nginx:[10,12],no_gpx:7,non:[4,11],noopen:12,noreferr:12,nosuchmoduleerror:13,note:[7,8,10,12],now:[8,9,10,12],number:[1,6,7,8,10,12],oauth:[0,1,3,4,5,6,7],object:[0,1,4,6,7],office365:12,ok:[0,1,3,4,5,6,7],old:12,omit:12,one:[0,6,7,10],onli:[0,6,7,8,9,10,12],open:[11,12],openstreetmap:[1,8,12],opentrack:11,option:[8,9,12],order:[6,7,8],order_bi:6,org:[1,12],origin:10,os:12,other:[6,12],outdoor:[8,11,12],over:8,overrid:10,overridden:10,overwrit:12,own:[6,11],owner:[8,10],packag:[8,12],paf38:8,page:[6,7],pagin:[6,7],par_pag:6,paramet:[0,4,5,6,7,8,10],pari:[0,6],pars:[8,12],part:[0,7],pass:12,password:[0,6,8,9,10,12],patch:[0,1,4,6,7],path:12,paus:[7,8],payload:[0,1,4,6,7],pem:12,per:[6,7,8],per_pag:[6,7],period:10,permiss:[1,4,5,6,7],pg_dump:12,pictur:[0,6,7,8],ping:1,pip:12,pipenv:8,pleas:[0,1,3,4,5,6,7,8],plugin:13,png:[0,7,12],poetri:[8,12],point:[8,12],pong:1,pool:12,port:12,posit:[8,10],possibl:[8,11,12],post:[0,7],postgr:[8,13],postgresql:[8,12,13],prefer:[0,6,8],previous_workout:7,privileg:12,privkei:12,process:[0,10,12],product:8,productionconfig:12,profil:[0,8],project:12,provid:[0,1,3,4,5,6,7,8,10,12,13],proxi:12,proxy_add_x_forwarded_for:12,proxy_pass:12,proxy_redirect:12,proxy_set_head:12,pull:12,purpos:[8,12],pwd:12,py:12,python:[8,12],q:6,queri:[5,6,7],queue:12,r:12,rais:10,read:8,real:12,rebuild:8,rechart:7,recommend:12,record:[0,2,6,7,8,10],record_typ:[0,3,6,7],redi:[8,12],redis_url:12,refactor:8,refresh:8,regardless:6,regist:[0,1,12],registr:[0,1,8,10,12],rel:12,relat:[10,12],releas:12,remain:8,remote_addr:12,remov:[6,8,9,10],renam:8,replac:[8,12],repo:12,report:8,repositori:12,request:[0,1,3,4,5,6,7,12],request_uri:12,requir:0,resend:0,resent:0,reset:[0,6,8,9,10,12],reset_password:6,resolut:8,respons:[0,1,3,4,5,6,7],restart:12,restartsec:12,right:[6,8,9,10,12],rout:8,row:10,run:[4,8,10,12],runner:11,s:[6,7,8,12],sam:[0,6],same:8,samr1:12,sanit:8,sat:6,save:[8,10],schema:12,screen:[8,10],script:8,search:8,second:7,secret:12,see:[8,10,11,12,13],seem:8,segment:[7,8,10],segment_id:7,select:[0,7],send:[0,6,8,10,12],sender:12,sender_email:12,sent:[8,10,12],serv:[8,12],server:[0,1,4,6,7,8,10,11],server_nam:12,servic:12,set:[8,9,10,12],sever:[8,11,12],shell:12,should:12,show:[8,9],shown:8,side:8,signatur:[0,1,3,4,5,6,7],simpl:12,simplifi:8,sinc:12,singl:[1,6,12],size:[0,1,7,8,10],ski:10,sky:12,slow:8,small:8,smtp:[8,12],snowsho:[8,10],some:[6,7,8,11,12],sorri:0,sort:[6,7],spawn:12,speed:[0,3,7,8,10,12],spinner:8,sport:[0,2,5,7,8,10,12],sport_id:[0,3,4,5,6,7],sports_list:[0,6],sql:12,sqlalchemi:[8,12,13],ssl:12,ssl_certif:12,ssl_certificate_kei:12,standard:[8,12],standarderror:12,standardoutput:12,start:[0,5,7,8,10,12,14],startlimitintervalsec:12,starttl:12,stat:[5,8],staticmap:12,statist:2,statu:[0,1,3,4,5,6,7,9],step:12,still:[10,11],stop:[0,8,10,12],stopped_speed_threshold:[0,4],store:[10,11],street:11,string:[0,1,4,5,6,7,12],subdomain:7,success:[0,1,3,4,5,6,7],successfulli:0,sun:[0,3,6,7],sundai:[5,7,10],support:[8,10,13],syslog:12,syslogidentifi:12,system:[10,12],systemd:12,t:[0,8,13],taken:0,tar:12,target:12,task:12,templat:8,term:[8,12],test:12,textarea:8,than:[6,8],thank:8,thei:12,them:11,thi:[0,7,8,9,10,11,12],threshold:[0,8,10],thunderforest:[8,12],tile:[7,8],tile_server_url:12,time:[0,5,7,8,10],timezon:[0,6,8,10],titl:7,tl:[8,12],todo:15,token:[0,1,3,4,5,6,7],too:[0,7],tool:12,tooltip:[8,10],total:[8,10],total_asc:5,total_dist:[0,5,6],total_dur:[0,5,6],track:11,trail:10,translat:8,transport:[4,8,10],troubleshoot:11,type:[0,1,3,4,5,6,7,12],typescript:12,u:12,ui:8,ui_url:12,unauthor:[0,1,3,4,5,6,7],under:[11,12],underscor:0,unencrypt:12,unit:[0,8,12],unstabl:[11,12],up:[10,11],updat:[0,1,4,6,7,8,10,12],upgrad:8,upload:[8,9,10,12],upload_fold:12,uploads_dir_s:5,uri:8,url:[0,8,12,13],us:[0,6,7,8,10,11,12],usag:9,user:[0,1,2,3,4,5,7,8,10,12,14],user_id:0,user_nam:[5,6],usernam:[0,6,8,12],uuid:[7,8],v0:12,v3:11,valid:[0,1,3,4,5,6,7,8,12,13],valu:[0,3,6,7],variabl:[8,13],venv:12,version:[1,9,12],view:[8,10],virtualenv:12,vue3:12,vue:12,vue_app_api_url:12,vuex:12,w:8,wa:[0,8],wai:12,walk:[4,8,10],wantedbi:12,warn:[8,10],weather:[8,10,12],weather_api:12,weather_api_kei:12,weather_end:7,weather_start:7,web:[0,11,12],week:[0,5,8,10],weekend:8,weekm:[0,5,6],were:8,wget:12,when:[0,1,8,9,10,12],where:12,which:10,wind:[8,10],with_gpx:7,without:[5,6,7,8,10,11],work:12,worker:[8,12],workers_process:12,workingdirectori:12,workout:[0,2,5,8,11],workout_d:[0,3,6,7],workout_id:[0,3,6,7],workout_short_id:7,workouts_count:6,written:12,www:[1,12],x:[7,12],xml:7,xxxx:12,xzf:12,y:[0,5,7,12],yai:12,yarn:12,year:[5,10],yet:11,you:[1,4,5,6,7,11],your:[6,11,12],z:[7,12],zip:[1,7,8,10],zone:0,zoom:7},titles:["Authentication","Configuration","API documentation","Records","Sports","Statistics","Users","Workouts","Change log","Command line interface","Features","FitTrackee","Installation","Administrator","Troubleshooting","User"],titleterms:{"0":8,"01":8,"02":8,"03":8,"04":8,"05":8,"07":8,"09":8,"1":8,"10":8,"11":8,"12":8,"13":8,"14":8,"15":8,"16":8,"17":8,"19":8,"2":8,"2018":8,"2019":8,"2020":8,"2021":8,"2022":8,"21":8,"23":8,"27":8,"29":8,"3":8,"30":8,"31":8,"4":8,"5":8,"6":8,"7":8,"8":8,"9":8,"new":8,account:10,administr:[8,10,13],api:2,authent:0,avail:8,bug:8,chang:8,close:8,command:9,configur:1,content:11,dashboard:10,databas:9,db:9,deploy:12,detail:10,dev:12,develop:12,docker:12,document:2,drop:9,email:12,endpoint:2,environ:12,fail:13,featur:[8,10],first:8,fittracke:[8,11,13],fix:8,french:8,from:12,ftcli:9,improv:8,instal:12,interfac:9,issu:8,line:9,list:10,log:8,map:12,minor:8,misc:8,prefer:10,prerequisit:12,prod:12,product:12,pull:8,pypi:[8,12],record:3,releas:8,request:8,screenshot:10,secur:8,server:12,sourc:12,sport:4,start:13,statist:[5,8,10],tabl:11,tile:12,translat:10,troubleshoot:14,updat:9,upgrad:[9,12],user:[6,9,15],variabl:12,version:8,workout:[7,10]}}) \ No newline at end of file +Search.setIndex({docnames:["api/auth","api/configuration","api/index","api/records","api/sports","api/stats","api/users","api/workouts","changelog","cli","features","index","installation","troubleshooting/administrator","troubleshooting/index","troubleshooting/user"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"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:56},filenames:["api/auth.rst","api/configuration.rst","api/index.rst","api/records.rst","api/sports.rst","api/stats.rst","api/users.rst","api/workouts.rst","changelog.md","cli.rst","features.rst","index.rst","installation.rst","troubleshooting/administrator.rst","troubleshooting/index.rst","troubleshooting/user.rst"],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-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"],[1,2,1,"get--api-ping","/api/ping"],[3,2,1,"get--api-records","/api/records"],[4,2,1,"get--api-sports","/api/sports"],[4,2,1,"get--api-sports-(int-sport_id)","/api/sports/(int:sport_id)"],[4,3,1,"patch--api-sports-(int-sport_id)","/api/sports/(int:sport_id)"],[5,2,1,"get--api-stats-(user_name)-by_sport","/api/stats/(user_name)/by_sport"],[5,2,1,"get--api-stats-(user_name)-by_time","/api/stats/(user_name)/by_time"],[5,2,1,"get--api-stats-all","/api/stats/all"],[6,2,1,"get--api-users","/api/users"],[6,1,1,"delete--api-users-(user_name)","/api/users/(user_name)"],[6,2,1,"get--api-users-(user_name)","/api/users/(user_name)"],[6,3,1,"patch--api-users-(user_name)","/api/users/(user_name)"],[6,2,1,"get--api-users-(user_name)-picture","/api/users/(user_name)/picture"],[7,2,1,"get--api-workouts","/api/workouts"],[7,0,1,"post--api-workouts","/api/workouts"],[7,1,1,"delete--api-workouts-(string-workout_short_id)","/api/workouts/(string:workout_short_id)"],[7,2,1,"get--api-workouts-(string-workout_short_id)","/api/workouts/(string:workout_short_id)"],[7,3,1,"patch--api-workouts-(string-workout_short_id)","/api/workouts/(string:workout_short_id)"],[7,2,1,"get--api-workouts-(string-workout_short_id)-chart_data","/api/workouts/(string:workout_short_id)/chart_data"],[7,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)"],[7,2,1,"get--api-workouts-(string-workout_short_id)-gpx","/api/workouts/(string:workout_short_id)/gpx"],[7,2,1,"get--api-workouts-(string-workout_short_id)-gpx-download","/api/workouts/(string:workout_short_id)/gpx/download"],[7,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)"],[7,2,1,"get--api-workouts-map-(map_id)","/api/workouts/map/(map_id)"],[7,0,1,"post--api-workouts-no_gpx","/api/workouts/no_gpx"],[12,4,1,"-","APP_LOG"],[12,4,1,"-","APP_SECRET_KEY"],[12,4,1,"-","APP_SETTINGS"],[12,4,1,"-","APP_WORKERS"],[12,4,1,"-","DATABASE_DISABLE_POOLING"],[12,4,1,"-","DATABASE_URL"],[12,4,1,"envvar-DEFAULT_STATICMAP","DEFAULT_STATICMAP \ud83c\udd95"],[12,4,1,"-","EMAIL_URL"],[12,4,1,"-","FLASK_APP"],[12,4,1,"-","HOST"],[12,4,1,"-","MAP_ATTRIBUTION"],[12,4,1,"-","PORT"],[12,4,1,"-","REDIS_URL"],[12,4,1,"-","SENDER_EMAIL"],[12,4,1,"-","TILE_SERVER_URL"],[12,4,1,"-","UI_URL"],[12,4,1,"-","UPLOAD_FOLDER"],[12,4,1,"-","VUE_APP_API_URL"],[12,4,1,"-","WEATHER_API_KEY"],[12,4,1,"-","WORKERS_PROCESSES"]],"/api/workouts/map_tile/(s)/(z)/(x)/(y)":[[7,2,1,"get--api-workouts-map_tile-(s)-(z)-(x)-(y).png","png"]]},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"]},objtypes:{"0":"http:post","1":"http:delete","2":"http:get","3":"http:patch","4":"std:envvar"},terms:{"0":[0,1,3,4,5,6,7,9,10,12],"00":[0,3,6,7],"000000":0,"01":[0,3,5,6,7],"02":7,"03":[6,7],"04":7,"06":5,"07":[0,3,6,7],"08":[0,3,6],"09":[0,6],"0mb":[0,7],"1":[0,1,3,4,5,6,7,10,12],"10":[0,1,3,6,7,12],"100":[7,8,10],"1000":5,"101":8,"104":8,"1048576":1,"10485760":1,"106":8,"109":8,"11":[0,3,6,10],"115":8,"116":8,"12":[0,3,6,7],"121":8,"123":8,"1232004":7,"12341":5,"1234538":7,"1267":5,"127":[8,12],"129":8,"13":7,"131":8,"134":8,"135":8,"138":8,"14":[0,6,7],"140":8,"145":8,"146":8,"149":8,"15":[5,7],"150":5,"151":8,"152":8,"155":8,"156":5,"1563529507772":7,"16":[5,7],"160":8,"161":8,"169":8,"17":[7,12],"171":8,"173":8,"175":8,"177":8,"178":[5,8],"18":[0,3,6,7,8],"180":8,"2":[0,1,3,4,5,6,7,10,12],"20":6,"200":[0,1,3,4,5,6,7],"201":7,"2017":[5,7],"2018":[5,7],"2019":[0,3,5,6,7],"203":5,"204":[0,6,7],"22":[7,8],"25":[8,12],"26":8,"27":[0,6],"279":7,"28":8,"280":7,"282":5,"2930":7,"2e1ee2c":8,"3":[0,4,5,6,7,10,12],"30":[0,5],"3000":12,"301":12,"31":7,"33":8,"34":8,"34614d5":8,"36":8,"37":8,"39":7,"4":[0,4,5,6,7,12],"40":8,"400":[0,1,4,6,7],"401":[0,1,3,4,5,6,7],"403":[0,1,4,5,6,7],"404":[0,4,5,6,7],"41":8,"4109":7,"413":[0,7],"43":8,"44":[7,8],"443":12,"45":7,"46":[5,8],"465":12,"47":[5,7,8],"48":5,"4c3fc34":8,"5":[1,4,5,6,7,9,10,12],"50":[0,6,8],"500":[0,1,4,6,7],"5000":12,"5078118":7,"5079733":7,"51":7,"53":8,"54":8,"5432":12,"57":[7,8],"58":[0,6,8],"587":12,"59":8,"6":[0,1,4,6,7,9,10,12],"613":5,"62":8,"63":7,"64":8,"66":8,"67":[0,6],"7":[7,12],"70":8,"71":8,"72":8,"7380":7,"75":8,"78":5,"79":8,"8":[0,7],"80":[8,12],"8025":12,"81":8,"82":8,"83":8,"84":8,"877fa0f":8,"895":[0,6],"9":[0,3,6,12],"90":8,"91":8,"93":8,"95":[5,8],"98":8,"99":[5,8],"9960":5,"boolean":[0,1,6,9],"case":[10,12],"default":[5,6,7,8,10,12],"do":[1,4,5,6,7],"export":11,"float":[0,7],"import":[8,12],"int":[4,7],"new":[0,6,9,10,12],"null":[0,4,6,7],"return":[3,6,7,12],"short":7,"static":[8,12],"switch":8,"true":[0,1,4,6,8,12],"try":[0,6,7],A:[6,8,9,10,12,13],AS:[0,3,6,7],And:8,For:[10,12],If:[0,10,12],In:[8,10],It:[0,6,8,10,11,13],NO:[0,6,7],NOT:[4,7],No:[0,6,7,8,11],Not:[0,4,5,6,7],OF:12,ON:12,On:12,One:12,TO:12,The:[0,8,9,10,12],There:12,To:[8,12],WITH:12,With:12,_:[0,8],__main__:12,_blank:12,access:12,account:[0,6,8,9,12],acit:7,activ:[0,4,6,8,9,10,11,12],ad:[0,8,9,10],adapt:12,add:[6,8,9,10,11],addit:12,address:[0,10,12],admin:[0,1,3,4,5,6,7,8,9,10,12],admin_contact:1,administr:[0,1,6,7,14],adress:12,after:[0,8,10,12],again:[0,1,3,4,5,6,7],agplv3:8,all:[3,4,5,6,12],allow:[0,1,7,8,10,11],along:7,alphanumer:[0,8],alpin:10,alreadi:0,also:[8,9,11,12],altitud:8,alwai:12,an:[0,1,4,6,7,8,10,12],android:11,anoth:[0,6,12],anymor:8,apach:11,api:[0,1,3,4,5,6,7,8,10,11,12],apikei:12,app:[8,11],app_log:12,app_secret_kei:12,app_set:12,app_work:12,appear:10,appli:9,applic:[0,1,3,4,5,6,7,8,10,11,12],ar:[3,7,8,9,10,11,12,13],arch:12,archiv:[1,8,10,12],archlinux:12,arg:9,arrow:10,asc:6,ascent:[7,10],attribut:12,auth:[0,1,3,4,5,6,7,12],auth_token:0,authent:[1,2,3,4,6,7],author:[0,1,3,4,5,6,7],autoescap:8,avail:[0,3,9,10,12],ave_spe:7,ave_speed_from:7,ave_speed_to:7,averag:[3,7,8,10],average_spe:5,avoid:8,awesom:12,axi:7,b862a77:8,b:12,background:8,backup:12,bad:[0,1,4,6,7],bearer:[0,1,3,4,5,6,7],becom:8,been:8,befor:[8,12],begin:12,better:8,between:10,bike:[4,7,8,10],bin:12,bio:[0,6],biographi:0,birth:[0,8],birth_dat:[0,6],bound:7,build:12,button:8,by_sport:5,by_tim:5,c:7,calcul:8,calendar:[8,10],can:[0,6,8,10,11,12,13],cannot:[8,10],card:8,cd:12,chang:[0,10,11,12],changelog:12,charact:[0,8],chart:[7,8,10,12],chart_data:7,check:[1,8,12,13],choos:[8,10],cli:[8,9,10,12],client:[8,12],client_max_body_s:12,clone:12,code:[0,1,3,4,5,6,7],color:[0,4,8,10],com:[0,1,6,12],come:10,command:[8,10,11,12],complet:8,compos:12,config:[1,8,12],configur:[2,8,10,12],confirm:[0,8,10,12],contact:[0,1,6,7,10],contain:[8,10,12],content:[0,1,3,4,5,6,7],contributor:[1,8,12],control:[8,10],coordin:12,copi:[1,12],copyright:[1,12],correctli:8,countri:10,cp:12,creat:[0,7,8,10,12],create_app:12,created_at:[0,6],creation:[8,10],creation_d:7,credenti:[0,12],criteria:6,cross:10,curent:6,current:[0,8],custom:12,cycl:[4,8,10],d:[0,5,7],dai:[8,10],danielsiersleben:8,dark:12,darkski:[8,10],dashboard:8,data:[0,1,3,4,5,6,7,8,10,11,12],databas:[8,10,12,13],database_disable_pool:12,database_url:[8,12],date:[0,5,7,8,10],db:12,debian:12,default_staticmap:[8,12],defin:10,definit:8,delet:[0,6,7,8,9,10],depend:[8,12],deprec:9,desc:7,descent:[7,10],describ:12,descript:[9,12],detail:[6,8],develop:[8,9,11],dialect:13,differ:[6,8,10],direct:[8,10],directli:12,directori:[8,12],disabl:[0,8,10,12],displai:[0,7,8,9,10,11,12,13],distanc:[0,3,7,8,10],distance_from:7,distance_to:7,distribut:12,docker:8,document:[8,11,12],doe:[0,5,6,7,8],don:0,dotenv:8,down:8,download:[7,8,10,12],dramatiq:[8,12],drop:8,dropdown:10,due:8,durat:[3,7,8,10],duration_from:7,duration_to:7,dure:[0,7],easi:8,edit:[0,8,10],electr:10,elev:[7,8,10,12],els:12,email:[0,1,6,8,9,10,13],email_url:[12,13],empti:[8,9,12],en:[0,6],enabl:[0,1,6,10,12],encount:12,end:[5,7],endpoint:[0,1,8],engin:[8,12,13],english:10,enter:[8,10],entiti:[0,7],entri:12,entrypoint:8,env:12,environ:[8,9,13],error:[0,1,4,6,7,8,10,12,13],europ:[0,6],evalu:[8,12],even:[8,10],exampl:[0,1,3,4,5,6,7,11,12],exc:13,exce:[0,7],exceed:8,except:[6,13],execstart:12,exhaust:11,exist:[0,5,6,7,10,11,12],exit:9,expir:[0,1,3,4,5,6,7],extens:[0,7],fa33f4d996844a5c73ecd1ae24456ab8:7,fail:[8,14],fals:[0,1,4,6,7,12],farest:[3,8],farthest:[8,10],fd:[0,3,6,7],featur:[11,12],fetch:12,file:[0,1,7,8,9,10,11,12],filter:[8,10],finish:8,first:[0,10],first_nam:[0,6],fitotrack:11,fittracke:[9,10,12,14],fittrackee_cli:12,fittrackee_set_admin:9,fittrackee_upgrade_db:9,fittrackee_work:12,flask:12,flask_app:12,flaticon:12,fmstrat:8,follow:[3,9,10,12,13],forbidden:[0,1,4,5,6,7],forecast:12,fork:12,form:[0,7],format:[0,5,7],former:12,forrunn:11,forward:12,found:[0,4,5,6,7],fr:6,frame:5,freepik:12,french:10,fri:7,from:[5,7,8,10,11],ftcli:12,full:[8,10],fullchain:12,fullscreen:8,gener:[8,10,12],get:[0,1,3,4,5,6,7],gif:0,git:12,github:12,given:[0,12],gmt:[0,3,6,7],gpl:11,gpx:[7,8,10,11,12],gpx_limit_import:1,gpxpy:[0,10,12],grant:12,graph:8,greater:8,gunicorn:[12,13],gz:12,h:[7,10],ha:[6,10],handl:[0,10,12],has_workout:4,have:[1,4,5,6,7,8],he:6,header:[0,1,3,4,5,6,7],health:1,heavi:[11,12],help:9,hexadecim:0,hi:[0,6,8,10],hike:[4,8,10],home:12,host:12,href:[1,12],http2:12,http:[0,1,3,4,5,6,7,12],hvybqybra7wwxpastwr4v2:[0,3,6],i18n:8,icon:[8,12],id:[0,3,4,5,6,7],imag:[0,6,7,8,10,12],imperi:[0,8,10],imperial_unit:[0,6],inact:[0,6,10,12],includ:8,incorrect:8,index:7,indic:10,info:0,inform:[0,8,11,12],init:12,initi:[8,12],initialis:[8,12],input:8,insid:12,instal:[8,11],instanc:[1,8,10,12],instead:10,instruct:[0,8,10,12],integ:[1,4,5,6,7],interceptor:8,interfac:[11,12],intern:[0,1,4,6,7],introduc:8,invalid:[0,1,3,4,5,6,7,8,12],invalidemailurlschem:13,io:12,ip:12,is_act:[0,4,6],is_active_for_us:4,is_admin:6,is_email_sending_en:1,is_registration_en:1,issu:[11,12],jan:7,javascript:8,jinja:8,john_do:6,jpeg:6,jpg:0,js:12,json:[0,1,3,4,5,6,7],jul:[0,3,6,7],keep:[8,11,12],kei:[8,10,12],kjxavsturjvoah2wvcegef:7,km:[7,10],label:[4,8],languag:[0,6,10],larg:[0,7,10],larger:12,last:[0,12],last_nam:[0,6],latitud:7,launch:8,layer:[8,12],ld:[0,3,6,7],leaflet:[7,12],least:7,legitim:8,less:8,librari:12,licens:[8,11],like:[10,12],limit:[8,10],line:[10,11,12],link:[8,12],linux:12,list:[8,11,12],listen:12,load:[8,13],local:[8,11,12],localhost:[8,12],locat:[0,6,12],lock:10,log:[0,1,3,4,5,6,7,10,11,12,13],logfil:12,login:0,logo:12,logout:8,longer:[8,13],longest:[3,8,10],longitud:7,m:[0,5,7],made:12,mai:[10,11,12],mailhog:12,major:8,make:[8,12],makefil:12,manag:[8,9],mandatori:[7,8,12],map:[7,8,10,11],map_attribut:[1,12],map_id:7,map_til:7,marker:8,match:0,max:[1,6,7,8],max_alt:7,max_single_file_s:1,max_spe:7,max_speed_from:7,max_speed_to:7,max_us:1,max_zip_file_s:1,maxim:7,maximum:[3,8,10],messag:[0,1,7,8,9],method:12,metric:10,migrat:[8,9,12],min:8,min_alt:7,minim:7,miss:[0,8],mobil:11,model:8,modifi:[6,8,9,12],modification_d:7,modul:12,mon:7,mondai:[0,5,10],montain:8,month:[5,8,10],more:[8,10,11,12],morn:7,mountain:[4,10],mous:8,move:[7,8],movement:8,ms:[0,3,6,7],multi:12,multipart:[0,7],must:[0,1,4,6,8,10,12,13],mv:12,n:0,name:[0,5,6,12],nano:12,nb_sport:[0,6],nb_workout:[0,5,6],necessari:[10,12],need:[8,12],network:12,new_email:6,new_password:0,newli:[0,12],next:[9,10],next_workout:7,nginx:[10,12],no_gpx:7,non:[4,11],noopen:12,noreferr:12,nosuchmoduleerror:13,note:[7,8,10,12],now:[8,9,10,12],number:[1,6,7,8,10,12],oauth:[0,1,3,4,5,6,7],object:[0,1,4,6,7],office365:12,ok:[0,1,3,4,5,6,7],old:12,omit:12,one:[0,6,7,10],onli:[0,6,7,8,9,10,12],open:[11,12],openstreetmap:[1,8,12],opentrack:11,option:[8,9,12],order:[6,7,8],order_bi:6,org:[1,12],origin:10,os:12,other:[6,12],outdoor:[8,11,12],over:8,overrid:10,overridden:10,overwrit:12,own:[6,11],owner:[8,10],packag:[8,12],paf38:8,page:[6,7],pagin:[6,7],par_pag:6,paramet:[0,4,5,6,7,8,10],pari:[0,6],pars:[8,12],part:[0,7],pass:12,password:[0,6,8,9,10,12],patch:[0,1,4,6,7],path:12,paus:[7,8],payload:[0,1,4,6,7],pem:12,per:[6,7,8],per_pag:[6,7],period:10,permiss:[1,4,5,6,7],pg_dump:12,pictur:[0,6,7,8],ping:1,pip:12,pipenv:8,pleas:[0,1,3,4,5,6,7,8],plugin:13,png:[0,7,12],poetri:[8,12],point:[8,12],pong:1,pool:12,port:12,posit:[8,10],possibl:[8,10,11,12],post:[0,7],postgr:[8,13],postgresql:[8,12,13],pre:8,prefer:[0,6,8],previous_workout:7,privileg:12,privkei:12,process:[0,10,12],product:8,productionconfig:12,profil:[0,8],project:12,provid:[0,1,3,4,5,6,7,8,10,12,13],proxi:12,proxy_add_x_forwarded_for:12,proxy_pass:12,proxy_redirect:12,proxy_set_head:12,pull:12,purpos:[8,12],pwd:12,py:12,python:[8,12],q:6,queri:[5,6,7],queue:12,r:12,rais:10,read:8,real:12,rebuild:8,rechart:7,recommend:12,record:[0,2,6,7,8,10],record_typ:[0,3,6,7],redi:[8,12],redis_url:12,reduc:8,refactor:8,refresh:8,regardless:6,regist:[0,1,12],registr:[0,1,8,10,12],rel:12,relat:[10,12],releas:12,remain:8,remote_addr:12,remov:[6,8,9,10],renam:8,replac:[8,12],repo:12,report:8,repositori:12,request:[0,1,3,4,5,6,7,12],request_uri:12,requir:0,requisit:8,resend:0,resent:0,reset:[0,6,8,9,10,12],reset_password:6,resolut:8,respons:[0,1,3,4,5,6,7],restart:12,restartsec:12,right:[6,8,9,10,12],rout:8,row:10,run:[4,8,10,12],runner:11,s:[6,7,8,12],sam:[0,6],same:8,samr1:12,sanit:8,sat:6,save:[8,10],schema:12,screen:[8,10],script:8,search:8,second:7,secret:12,see:[8,10,11,12,13],seem:8,segment:[7,8,10],segment_id:7,select:[0,7],send:[0,6,8,10,12],sender:12,sender_email:12,sent:[8,10,12],serv:[8,12],server:[0,1,4,6,7,8,10,11],server_nam:12,servic:12,set:[8,9,10,12],sever:[8,11,12],shell:12,should:12,show:[8,9],shown:8,side:8,signatur:[0,1,3,4,5,6,7],simpl:12,simplifi:8,sinc:12,singl:[1,6,8,12],size:[0,1,7,8,10],ski:10,sky:12,slow:8,small:8,smtp:[8,12],snowsho:[8,10],some:[6,7,8,11,12],sorri:0,sort:[6,7],spawn:12,speed:[0,3,7,8,10,12],spinner:8,sport:[0,2,5,7,8,10,12],sport_id:[0,3,4,5,6,7],sports_list:[0,6],sql:12,sqlalchemi:[8,12,13],ssl:12,ssl_certif:12,ssl_certificate_kei:12,standard:[8,12],standarderror:12,standardoutput:12,start:[0,5,7,8,10,12,14],startlimitintervalsec:12,starttl:12,stat:[5,8],staticmap:12,statist:2,statu:[0,1,3,4,5,6,7,9],step:12,still:[10,11],stop:[0,8,10,12],stopped_speed_threshold:[0,4],store:[10,11],street:11,string:[0,1,4,5,6,7,12],subdomain:7,success:[0,1,3,4,5,6,7],successfulli:0,sun:[0,3,6,7],sundai:[5,7,10],support:[8,10,13],syslog:12,syslogidentifi:12,system:[10,12],systemd:12,t:[0,8,13],taken:0,tar:12,target:12,task:12,templat:8,term:[8,12],test:12,textarea:8,than:[6,8],thank:8,thei:12,them:11,thi:[0,7,8,9,10,11,12],threshold:[0,8,10],thunderforest:[8,12],tile:[7,8],tile_server_url:12,time:[0,5,7,8,10],timezon:[0,6,8,10],titl:7,tl:[8,12],todo:15,token:[0,1,3,4,5,6,7],too:[0,7],tool:12,tooltip:[8,10],total:[8,10],total_asc:5,total_dist:[0,5,6],total_dur:[0,5,6],track:11,trail:10,translat:8,transport:[4,8,10],troubleshoot:11,type:[0,1,3,4,5,6,7,12],typescript:12,u:12,ui:8,ui_url:12,unauthor:[0,1,3,4,5,6,7],under:[11,12],underscor:0,unencrypt:12,unit:[0,8,12],unstabl:[11,12],up:[10,11],updat:[0,1,4,6,7,8,10,12],upgrad:8,upload:[8,9,10,12],upload_fold:12,uploads_dir_s:5,uri:8,url:[0,8,12,13],us:[0,6,7,8,10,11,12],usag:9,user:[0,1,2,3,4,5,7,8,10,12,14],user_id:0,user_nam:[5,6],usernam:[0,6,8,12],uuid:[7,8],v0:12,v3:11,valid:[0,1,3,4,5,6,7,8,12,13],valu:[0,3,6,7],variabl:[8,13],venv:12,version:[1,9,12],via:10,view:[8,10],virtualenv:12,vue3:12,vue:12,vue_app_api_url:12,vuex:12,w:8,wa:[0,8],wai:12,walk:[4,8,10],wantedbi:12,warn:[8,10],weather:[8,10,12],weather_api:12,weather_api_kei:12,weather_end:7,weather_start:7,web:[0,11,12],week:[0,5,8,10],weekend:8,weekm:[0,5,6],were:8,wget:12,when:[0,1,8,9,10,12],where:12,which:10,wind:[8,10],with_gpx:7,without:[5,6,7,8,10,11],work:12,worker:[8,12],workers_process:12,workingdirectori:12,workout:[0,2,5,8,11],workout_d:[0,3,6,7],workout_id:[0,3,6,7],workout_short_id:7,workouts_count:6,written:12,www:[1,12],x:[7,12],xml:7,xxxx:12,xzf:12,y:[0,5,7,12],yai:12,yarn:12,year:[5,10],yet:11,you:[1,4,5,6,7,11],your:[6,11,12],z:[7,12],zip:[1,7,8,10],zone:0,zoom:7},titles:["Authentication","Configuration","API documentation","Records","Sports","Statistics","Users","Workouts","Change log","Command line interface","Features","FitTrackee","Installation","Administrator","Troubleshooting","User"],titleterms:{"0":8,"01":8,"02":8,"03":8,"04":8,"05":8,"07":8,"09":8,"1":8,"10":8,"11":8,"12":8,"13":8,"14":8,"15":8,"16":8,"17":8,"19":8,"2":8,"2018":8,"2019":8,"2020":8,"2021":8,"2022":8,"21":8,"23":8,"24":8,"27":8,"29":8,"3":8,"30":8,"31":8,"4":8,"5":8,"6":8,"7":8,"8":8,"9":8,"new":8,account:10,administr:[8,10,13],api:2,authent:0,avail:8,bug:8,chang:8,close:8,command:9,configur:1,content:11,dashboard:10,databas:9,db:9,deploy:12,detail:10,dev:12,develop:12,docker:12,document:2,drop:9,email:12,endpoint:2,environ:12,fail:13,featur:[8,10],first:8,fittracke:[8,11,13],fix:8,french:8,from:12,ftcli:9,improv:8,instal:12,interfac:9,issu:8,line:9,list:10,log:8,map:12,minor:8,misc:8,prefer:10,prerequisit:12,prod:12,product:12,pull:8,pypi:[8,12],record:3,releas:8,request:8,screenshot:10,secur:8,server:12,sourc:12,sport:4,start:13,statist:[5,8,10],tabl:11,tile:12,translat:10,troubleshoot:14,updat:9,upgrad:[9,12],user:[6,9,15],variabl:12,version:8,workout:[7,10]}}) \ No newline at end of file diff --git a/docs/troubleshooting/administrator.html b/docs/troubleshooting/administrator.html index 9d52d42f..13dc36b3 100644 --- a/docs/troubleshooting/administrator.html +++ b/docs/troubleshooting/administrator.html @@ -5,7 +5,7 @@ - Administrator — FitTrackee 0.6.4 + <title>Administrator — FitTrackee 0.6.5 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.6.4 + 0.6.5
                                                          diff --git a/docs/troubleshooting/index.html b/docs/troubleshooting/index.html index e04ee8e8..55e03fc4 100644 --- a/docs/troubleshooting/index.html +++ b/docs/troubleshooting/index.html @@ -5,7 +5,7 @@ - Troubleshooting — FitTrackee 0.6.4 + <title>Troubleshooting — FitTrackee 0.6.5 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.6.4 + 0.6.5
                                                          diff --git a/docs/troubleshooting/user.html b/docs/troubleshooting/user.html index 43eb57ac..7c188ded 100644 --- a/docs/troubleshooting/user.html +++ b/docs/troubleshooting/user.html @@ -5,7 +5,7 @@ - User — FitTrackee 0.6.4 + <title>User — FitTrackee 0.6.5 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.6.4 + 0.6.5
                                                          diff --git a/docsrc/source/_images/fittrackee_screenshot-01.png b/docsrc/source/_images/fittrackee_screenshot-01.png index d991b0a6ac14dcb24d16d445c42d239f62396269..4b6b8658b48ac2cf18827c52620ef8bea095e3b7 100644 GIT binary patch delta 21892 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 delta 21861 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 OJk*u7l&Tagg8v8ANxb<0 diff --git a/docsrc/source/_images/fittrackee_screenshot-02.png b/docsrc/source/_images/fittrackee_screenshot-02.png index e0fc23384779033fb1a3468cbe4ba17b7600b01c..be83f0c0c7cc84ab7d654c3160cf594b1d275e15 100644 GIT binary patch delta 18601 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 delta 18594 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 KF-peb)qeoQ^{So# delta 25213 zcmV)&K#aeR(+tbe46p$KfAaIQb0R14x}?U>l)`%^1mw3keg5mr=xVC@*OR_w<@42# zY>jtl+|O*~_&z252y*@W{p)cT%I{fuLjT8|v%O!%@5f_!Mbh~n(bxCA+wQYwRxxrV z)b+ink0m~@IB#+b-P#;etG@AF7@|F2oiC%R7x&tJ`N`J`Jw!5be?tyCjBvwwey^~Y zVvfhf#)}wNOwU0}E%vyQ@|X1$ZfvQios1-}C+#`K&$)!>w%srH+|9W24xGx07dMXo z{LB5*3+`3ELr^S9eR$G|kROv7yLxW`HT&SOxjT#yym0U`xr4=i^jGAh$rPkW2 zKykFxvTLQ))|$26h9%2ZtXea(ZllMZ0L{{CZ{2$DV{p&Gf5?NY2Pcd%<4iNp;%1#~ z+U#>I%4g+OR$Xn`>TB${(*{3w-EG_Mdz^46rISxN^|WKBpK&R*o7~N}+a(ef@*1g?HBClPR6pKC{Nr);@*^f|H`0k+A4;AmdFbprE62<}KtLl{w|i_efWi z$Rvw$wu3T8e+KgjvE1;HI~QLWRp$Ord2=m)%Uk?UGv}1Lf0((y^Y&ZTwrFTQ8GCi1 zg6b39$2lV!|KYlP+iX4L2>`XxdJj(c#zgX}Al170q7>@iShL*(A(WZ#w36n89(@bD^)t`DgJ^wBq@^>`mFlp%9rGW}Z|+}g zhP!XDwNpF0Ud1Jy9a(Cr>95I9J$ckzp0IRhXRSD5p1sv%b=F?m@F%yO?z$)ZHbhi{ z8z>mhe@v~caA*-GeOJ1LdWc}S&1oZn_ds}~djDQV8LF(mrst}S{BNKAuTHLcxWj_V z$$k_YqXR9itwzm$ocA%D_oS>@PAA5)ul2U_XnA*(3dLNU8P$C9+M$6yo6+G?=Ik^Cy~(J%W|pc@4Z$F-{W!f5-2xqkI)u$i%wGb~i$EC4N#YHFn+U z(B>p6QEjW%kF~l#7ds~H4KAeKt*kN;Yn;DJ>dQb2s+v6i9=hmkNGGa^sH;)y1#$M` z7L~G0D7^`)g=Reg3VF}fLrs^U`)L<`1{Tg}S3;{PkaOHbWp%riqcx_wZaec1-sJKT ze{W&=(e|eQMx$T6aZwdROiw@wrCUoBk)s>jeH$+%LTsom)*Jz(~H4w37z$$BqY z1EQ!n+Wb1E{Ph=qAP6t$(aQ!M!j8Si1E2y-^#6?6(m4YRuHeL|ZPJd3G-T%!Km^h) zS~lFZHo5AcZ0>i_ejq9xduWS6SM57Hf5lKN6K@j8s1-&|+nURR`4y%BhX@`|aCct1z?*c7BnXyN9}f@8&ytIal?6uf4a(O z1~Ty!pmi4P3h#-S`t46&43J(C|2hu|a&LP|erBp6*3bFa*TAkoSUUs5YxP(_^fIRi zrxFPe8bUw<8IcEdirK6;b%MWge_DfbrTZDr{XJ7~V9sTS91(3%<4Tb_Cm{5^5cwSH zyPr!_eum3^n_rAI6IkFG+CFOLe_w-A26RXFpn%g7DFz`VusE{NS_MoWeMRIe7L=J! zg;i}ZrpfU-ksqF7$_Rm{pbxD*2p;py{ks^Mh!4ELVC28+Tx;C9g=Vh^0jPR`?R0aVvjV&oVd4N}Gzi)u zsQ`4yt79f4~ot!cfU8x2V{D>i8BA zPQ*`sV-Tr(3G-p_HnIRKVhDDa?pYPQTUL6MBa>YbY}niGr1|8eBo`Utj3p^=q#g*J zD>P!KB{+D!J)&lv-!NT!KAtkHX)!~}9&mftRAAu3z~dR%!G}}>(qG~V_`(nV#vf?% zJ!v<}0hJu7e;9uth}9xe108Ukj5A^WgMP}tL^|5)QLY`thE{PJ@#!S=mpPJ~R^Jo- zz7YXn)omBv`0LKY-kc;xBD^!aKO20FMi$>2T}A>v1Uq9}k#Jd5yt zs+i%RD~YF-e!S8i3*_NtUZ8BB=$$97i6w#qD5qR$f6cVXdZMhi_&tW|7t%#KgU$AlS!xNXSfo=we!5WSl`rd)UfV zC%cbfdZfJ)rm>-`HrO^0cPJKQyWSG`Agf=pjQJ3?80lbp26fB)%NhGX$z8d)BqAqnT00NdoBYkaf ztx^dR#{r#P^h*#ywgU6XMWl-LVR>fnouI|18h`3rXd%oDAE47whT zPDm$Oy@TL}M!G&slXK1X>@{XWCt*_@#ysYG2Gc!o1*R67~zKQr-|{WRb!wYQJzS?WN5NxtLxPb0-kaFL~W95@i7iJx4pjBKUvuf5_aB z(+0`nNb80F`+9UdEH%wkzUUDoX>v&}XAtRv6$Xd0iV$cUZLDe}({H3A3GT?3B{ZST zVWB|T8cS&yfoX9&d)$(C_Oe?$D(y=0d*5Fk_8|pefr+d*+6#yM$n`ipjw&_9lNz4;zqxS7d^2H zxF>2|TM6iW4TGV=K#&xCxq~bd4sEA0;wH>MH}zkRx|HqTNCqZ=#=oZCWQ`z~2}U+MIOQc_j2|(fz5hCeOpB@jH#rTx4WA{}IfY?3aKI(dH+5YXyVQD&yRVDA2Iu z%GAgYf<>ykR)hoK)PoV!;;2z7Xi+T4JQ-Qq?9cbX)-h3Q4tZ0sf0YGMmm0-Z;b7_o z%2}#B1r?1K2HgYFMU)k>&nQit#?XyfP(hkF!{2l(n3}_!xPP$9`&bnE1FGB*K?Vop z3Nh@@!$qL0FGNep+G9viRI3hhB2^L6S|ef3DVB*SI|N(WPfvLAp^kwU47j6!sbnV4La6-J{m2BA zMMXR|b10a5?A`1Pw0eSg40i!$P-{4A7zUKWL}HP=Hmp3sZg{$W3My10zO<4^O|vce z-M2YB``CJ-e}($tb}V}&{2U(8nj`=s3Cq4#z{q=zd>~EiM@hnC)GJ+$|ELbS$SqU5Lzc6w|fY(Oh+fp0C(Q)iVlU5jV)z&3&_GmxNNB(_^nxl$K}_LRUu zrqB^m2>=*!n%Yb0ToKo!cc!)m-}1(N=$p5^(T<~Hf4GMHjUK(ihhE#45@C!>;ZtFS zs;DYKJsbgSsO+GpH~}G$09xG2(Q^lSM3P<`6K7}x<5+)f*I?&aJun4UP2TiUQi`|( z()9$QgGgXi(lZ=N9WgzaJ#;Lkg#-@TPQ|XrD5t_<1c5{+sG~cC?0`$Aa_MJ!HcO{n z?VSSYe>8cRp4f2r3AJ_-Aj&zoPykQUfD3r-h30tLRX&kSI5tqd;GA6Ak*SMyzmoab z;(^`Rh`j=M;tD2ZOs~-xjy?~&;A2<|hq30+J3xb9)OHA&iG>zsGD*%v+eHW-3V}R= z@6WUO1O|Xd8%!hMkUn+qQF9g{ElEZ_Z>vx{e=}uL0~I2^yy6Ec3gKLUS!@qdrAV=b zeN6<)UG~tUB;YVWW8h@Yw+YZ`DfhW2K zX5oo$-H^!?G~lROobX)mr$%IM(ftrK7l6Qm@=CscMeLIvUPych?!nkoxMifqo_bf$ zf0)&>F)Uh~UKdcg9DV9!K^G`CJ)Z(9ALXB0g&B)BL%`9yV4foOlxdImVE=Aq2T#`wf9(|Q5tG2zJN`e__qI z(y{T}Z}-PQ-TC}QQR*WH^yfNPyJVNDCQ5qhbZ>PH#Cks9gU;xXEYc77Ml$Z_^F35n zFWAH&ZosqP`!p;Jb0p~w4q^iBW4KDIRZJPGrEKj^_c2wnh?A(62`CpjD<~{R2M$Qo ztRE?egWj+zH(&9z)B#9R1RC6te*(EnT{=@^RWyy)2ArYwQrwU#^NbPtmIf{W9f-Ia za>YH?8Tk_hd}GQy!X7{}J`++Uz%YX!$h&kWUA#^mLqH`Wsk8z0%THtyL9TH?_Z8Q6hdBtC#Cy7JDH!@@C1I+n%i z5-;?^9AoQP4mFr1hX=79e@YF4vkZx%NBz&C?bRP!ci(@zuLDHCqv3C$j7S`#63Vvp zX@=+F2KXepdSo%)hhYABmizZkd!JQFNCa5%J${vR-j+qrncb*LZQiFMiZ&$Pq-4l54qqjDISsR)H2T7c{2#BV<8rpWje`XhHs%~vk15hgV z1c7>KOF~Hxyica_0|GS%bfatf=mDT}GsuWzZFE`DXS9~2F5pFwGeT)w)$=$0EL-GT z8+cpjLXuuVby#HR<9RFyNv%t_L=pF*%BUtf60 z$?{zw{inbGKMfRXe}z|^hb^rUCOUQq?Tt{`MmbD9F?gP;Li(INe5MCzrD|Yaz+Yr? zIB_upIqF`3pgkg$BGmjyTBOI0*d5BwFezQwM+SUk7C2JGI$#RVTycl?Q=)q=6vO5| zW#=i$q3zllu))ku68}7=^w|!SnB^Nm%w?B3V7{uJTezu>HazVKU{Yyx$dB5C9<*_Z z)5gzMeK?INv7jcjyQ%1H|J~HPp9emF>+!!n!uh}bb!2>;ZM|lb4Hh7OKcrPE4t6Nw zkfAzR5G&%SRVYG*P%E_RU~=gfG%+M8E{=k0!NHHks)LKOt`4q(Aou~|=;Wm6A|?JW zDYS_3;J6>}?mh0_0sdx1fGE_t>fQl0@I(QH#%DU2pHG~F0MP8ya!zF0I?@sG9*U|(Dau| z!220}Qvn#f1^QOq-rD;(eE@RQRptgbI0Qz^l)dKh?r?W+|DI|0_XA$(a-Yhr$&LU3 z8fR%#SaeuTOgdw;suzI*Br`Q-Gh#P3G%YqcFg7hTHDP8gVK!l8Ei+tv7h{t^D;6B2?#kK3EpaggDo?M zEi(bPEi(d&tAFn}x$67g|L=3Amz~+!zFL)4TS<#R4TPuyfvCn1*%+{K+)aF)#7>;# z=9k1yVkb9FaS}VR9sgW#fot69HXu4eAV3Jzg|w=xE!w_2y`1~U*{+qel2$rGdOaVH zee7y<=FFMzoO9;Pdp_Uq_qkTJ+*~=K`28MU<^IIefrwB?$sB+@EP5D!_|YgFIjNpaPYCGUeLFH^fPsIc5C|78vV_m-lKW5 z?ZNI}er)p9~pMU=LU%n|x`sg41jY?xt{rr1h(}zCuzqRV-YY(gL{Fnd!fu4H)WvyAaUf;j} zSNiyeR_TsgZ_wuLJN4CXd|$iv>{l!r(Puw#mu|Y|3Q2Z1_6zFk^iIQG{pzvR`pie~ z&hZA3tr|J}_S7@Y$rtcSk926yyq;QtwG_M72hQl&RNqGJ~#nO=aPP zY8p94<-5s1b#AQ04lIX1r-^tj!zb2x-@=#l^S74EFzoRw^GWGorb4E1o-AW1VQWix zg8DUemS8kWj%qee~avOHFVLqEys(ZVn?aF0SN=iz3 zE9B~ZNtsly0={YT7HwB5G+C{UEed4pAT8;gt3YO(;^`jcdK3E9fe#Ms(UQ9K;cMOY zWqsNusar0?rB2s;#WP8jWux+2UiEYjRDWd`%OAc}sbosU<=1FW$2%%y_RFl8FSE!e zpVz0F*(*l0PfpUnQ#Y)zLOO}6=ixJgTStCDGX4K)CA~5t*0=-C;Q~3kassXd6Pt|w-{qJ@04R`4$-~2zCR8?`* zZTX8o{J7rQyj{26utFcW^?FHCS0PWY?)kI7*Pq<;`&xDLwc508r#|+_f32C*rf5$8 zh4MF-Q{n<4e`%8^v2y^YS$Ev-5LjMZuJpmYd{Ni9@7tU0QSYH1?K5}DZP@oa*>2Ux z8!nYh3rJ^BAm}^aZ3kV$W}7}|0?TTtq&o1fehR~f6R^@!=L80?0~71aC~wg8;04-~ ziOEV@G7ZV}nR;{Ybk$GkQ$ezWw4AA@UhmL9ZJ4Qif5DWIvt*c(5pn4}Ynv|j{6bsy zmCKMNLsBX?O@4Q~+>yzWCnC9|o?KKaNU=$mDq~sdkrW67l}sk&n>t@z$x9WBmB?2} z$uQre@W962w|>O7yNc&aUc1V)Vb?x2w(imNnX@&yqFMoeMCnXge!m@-rcx=jcDE?g z)v2ake>>%gMkN)g$m&qExLC31vG{zy>%t-VUkE1Ix<*JXO->$6nx>|Pa(3MpH5?UVbO zCA{GQ03d=&U`!od-Kr=rk!g;vYuRreds;VLe|x3s=ggEOeQ?#y`p^IWCwg<^HeI~< z{1IbG)>Kz&_Kayd(9}E_RHic-ef5ifBCp4DN}kWNFRfFoI67E;dH%fFTC(6gJ@vxc z!Jx8kX07h|$Oi`RGkH>_9{A1Udiupzwc_%N2dhH?oL(8fJz+&r$%%hpwhDP=l|Q}P zf4#*{5hkLGuDfU`NzC=8PikF<1zl(P4B-Q_XHV2?aV9Z*QpvJmp;}Y_?~{Bjz40Pl zGyiSf|K^oSnv#__lub%cZ7b0;@5BbjsWg;VrZ7#0A-S!Ba;7Om1>GE6r|at73YC0R ziDW{C?C{Y@CM3<2%V(;m+di&yR$4xve@`xdK;6wv%16@*Wc?~6r9erQVt)JixlF&B zo13(M|6U#1(|*{K{M9255B`0@%vvqKY^8Q?ds9F9?XyZIMoxNj-oiSCd=X8lnW|pb zP|0#{ceD04?$b+adeqU;sj$~j-FXW%dGZuh#ERt)4s}s(O?GHr@$eU8V22z1eR$G zqsF_dG?TYG008W3f0_U|Tr3*Vq4rK$mL9%@%p%OPF=flm+KmQ1HLYx>l| zf7gzhnCGTzu27^XtRFt`p#JIW-_?gd@LqlF&fCV-9snjzX~LfMyRq?rJR$R4v)!JV zhTZKu9XP3qMR$=;d807m-zOVZ4j8ET9GIx(Yzy)vdrZo{o|GNNo&!#{e`~uvv5uj6 zm3_LYwoAX+8#ARzd&Yd2i~%`blbPwkO^hzH}fE zRA*<0yuP4fu@XsAXJ^OY@8+Ujsn927q~csup=3gDy}DLgckflYkWxN1l+O91BcI@k zYnDq{DQ8*gI=D}(S3jlVf8vNjq0nJLWld?B_8e$aL&J+o=HjZUm~0=j0V(8*sCL>k zU4Gf+@&^Li`ub~nY42WjbaZOjl}j~y>KyGcw#qV+^7;HjD?L(hXlZ<588*%y4MY??HBJJ9< zU!VQUe^hC4RJY!^e}WwZI7JFMOGdk2(NO7Nm+$)XmPwNKHSLw@d-nushEK;oHl;=f z6@@WxGfdaSbz$!x_b|ONr_2`D8534o>EoaH#!3&h{qW}(Z1kKP2T=cOIXKinla%SS z2FD{EPd9%n>6K{|)S5V?8)tRv@m*1+T!sdB#eyZNAh&7Qf0OCRkP$RA&$CH)EiiRy z{S>wLW@H*;zqiL?C2DSNlFw&vNZ!gwS;^%c3b3pLX{~$vb%l$4QkO@GL~`)|`~jDW zief5@wQ5pHOs=Asii(Pq%UE)I4fzb8DyPrZw0VAc4O5F3FH|O7P+xD4+#atYfuJ&0 zL9^x#g>QvIe_EMzL8(+q=~PN-BdtxF-&RAzUKJO4HDgx2ZocU~+VJvA`pFCHbpBO! z@+l~-g54Nn}+Xwu8!ESGW8c-=sB(IYFg%r0nabbv*F|U3Cd1-alQY006*ne*~4l7)oMMed2?w^mqUIE%n9| zx_s#(MI&J~wY16a_i0jP`H1CjyK#lS@VEb}t1i1pOD;H1`FvhmcI?sx^>u1%?^HM# z)ZE$ACE3B{I}LkJ?e-T(wROj?{tqCQR$R7J|M{IC>!-hdT<^POrQ9yJ_8vH>Xi-=t zvFMoVf7rHjw<^m@6)TQta&@ID%3?~S((D|-1WI@3=TLnvs_jD;x?3X#sqrl#v@`coh$0#o@R!=fHqN*|$E79I~ zn|3_@j>5%0z3+Xus`F5no_XPUO|Pp_{etsVSyU~rVaVkVsJtY6%(iIl=v7x|r~H1u zf66L`l0^Tg>$f%XzR|j(@vm!)|M&PkipS&f9ml!ThPsWDWqp7ziqXBlzP_eMpn4 z%JuUHf2V)>uOBF%&#S7UOkeuK9~>4`UUK0Aed!B-ps#-8``X{wEU(wC^XAObxBul! zy7H0>b;(5wbkkj*QB_5m>g#6c=9O2T(ry3Lhu^O+e)Yd}`7IyTr$2nVe*XjSf7SQ? zT^d7D!1?4qd)$ue^M%)me1?e@=Gq%`$x?%4&cOv zo5H%~>i5X)@hh9kDwEGB6bdOGk8AJVJ*ujzQlu!Pw>NIqp48hiir#%8rO{z`#XZ@| z%F*&hVZy^o$sWTov&D5{GnF5Qf5WOJ`)A`0NBr_u+pqIsV=oR5*Q!TOG%`>r7+W;5 z@+;M7&+=>rUG`(0YX{k=K++pClxoZ=u{S&BxTL;BSSceTe z;YLmNl*v;*va5G|Qjz*DxlDg%Ws8)L^F{~&z*wIlEX%TJhBM2WS2pOfWeZRE{y(_y zL4Ex0+h|DO4D^Hh9@HgE<|r5ps-&bu!C+7>m+Q2hA8=|E3I!Dk1wFjwC*%A4-Qv?N zm%m>gzel|ty@M0wG&Ua4t9zf4QDn&KwUj9oj%$|hGf`%XHLmW|qsM=u91oXePS|*r zBMb`$Gh2>bg?G%?yFZwe?Dbk{DZMc#e~o)w>&A%ue=xA@?6gD8wQF9GB;9b+E&AQ#kEkeGtcxyM zHtwgBPbHPK_=>e|$0q&3AN-Nl z?piIg@)#c}jy1;QsQ)jt*!%OC>m5h26)UM$zOzU2xYYK{i!%1LsrOKq zS}QZkEng%_>MCkc-WvHO%bdhwnWibP*DJr@KltPIdS#lXOp{LH0DyA?6_o%0oJLlQ zPw%!0sui?|+dNKajH&zl*c9%8S zUEZ3W8SM70{#`K>>{B|~r^=Fg6(9JKf>UoCT*c(cOSFGIYzIeMk|9+_eX1&RtGh3) zOeQ<#!|pF6G$&fB?!L5IT3VD&r}fn8r!=*^Obaf)MEBi)pH^PGasw#{Fa6$aw`os&>)~PG z@Idi6LP~#0%I&q+AHY7JUq(JB>G;NKJ$Q44%6{1=elHt6K%vQ#b?x_ms4ZXq zZ#7vFNls;?QVTD+SYBUHTefW0ZsYBt zipgkNXH)0g)a&D~7?kYbalB!r%QBUZ=T7-^Fnl9}Rx8~<=AnkVTYF=M9US&|+3tA7 zp7>-Sn2gN~46f^BcxD>P?sBPPuf6^f4eRDz%`tYOuWc-C2bM-4qqH)IFK0;G(_2(G z|BrvQ;pKnUf=gG)kQ6Ph(3Fi2=|KIbBuTHd<+P~GrD)ivuAZE-IZGb5p*cmRnxj%3 zObqR>(XdZarS7}`J{@XpQ%6s`Iu50D%X@B-*D#bXqzD49s;HxE9jn{K#4P1-#&th9fIoz_N&i`EhT?q5D|k)dpBVd%E;bR!>Q z8L!K$blTGKwx|*DXzMM0&3iJV$-c6|8Nhq;T?$l3bn6qVl`1l{_j~ti_b+~>*?;vAAi3rGA4NBkUE6Zo1AfBiaMNgg%{ks&E<<`lW)%i8m*(7zvi>=!!J+9pX_ICG9Za?c&A zh!x8pwksl&$;6mHot+)(?Cco)_rOFwo>O!#Nn1(nOYc!jwn?c%YD9PC;wfRxzpc*R z-b6x=|L%91+&fc+_^2e&(#XomW1TbmEEW1J<<0z1x9=lWW$MW5_4y3N<8gm^{3kx^ zeXcy9*5ZUbKCfo}qRVcRLRv30J)vjf&nTHms%iaJl`L7JKvRoc;gDS6kaqm^7ph#g zOoePh{^GDA*-~X&>}tyR7-Lh0TpTXn* zzfoq<**~7(cqedi7x|R8#$SI;dCIzcPk>WBTR7uTvsmsA001BWNklIag+P$Mu zk~DA5Ox?2TR!NdS=#^hyNyiSYGP#@znZn@xBq^21s5h0Fu(l`^(%OISwuh!j7t(SW zF1ZZXm|^8WW#uD}J+AlOdXx5R*Vto1j$>TOjcJVIzGL+cce#~LrxXf> z`X|;ovF`BgS5<22Z__HBQl;QajY?czqnwq~6_MpS_|S98we45kUAHT~X1!V-{+-tR z!;X%jX$5s;+QvL72F)-B9{>RTsHg-0;1sc1e7bDu3Q5v) zFFd5}`PbAFK6qAFQVusbfy@Ls(?iPBvQMSQ9y=2gWLULqW{aiF7HhD*o72s5Rh+Np zrfv5A=<&&$+^Cx1P{m$jBC8!eS$W-VdEJNC18m*8Q|s2fAxVFlRa2=uKJfk%+Dxz8 zZ3mmdp^0ux@5Ei!r>&$mxz~@lEpO$eg5)w>k|DV)mt2-hrIVvtbi;X)?8?fAA9`H1 zsd*zSE01)_GwfNi-2+92;erCiJ_XJnRs}h{B6C~^Nq>8U3^g}5OOi^>suOODTu5qc zKPX8$uenU;-`{_$n@VoczMuX|yMOUht@yt`Q_I7@Q(t?l!gK4iYTY_T7ha-m-~X|q zW{I+UO?fH}b>!NVHx91^54l1rbh9QDV2sT(vwy;({`NkU->a-q zkbI@eXYHLlT2!i7`$h%aLqSt>BCp=u;mKMim(wGUKQ2iM1_QeL;~$;S?H#DFJYH!l zsU~Z$x&lq=$h2yYZ>zSuHjI4?8hJagwEF+<58jHaqndwPodUt2?z;0%{pP_3M~0P0 z3K}ix(E5KqB{th1Nz9NTbFOvN8Md9d=h+r?$L6!8>ms;^eo#Zw1w zpZcet&})D974_`gqw9bDYnjQU%C5LnWh<`Gp-FkQC0Z4V42>b{iWutgv>!Ihw`7Nu z!Aw+zq{RUT0KmZK1DXH;fQgsx&Z}~U{o#1=;w68&AbXykfBgmZgb$vw$E+`}S7m=V zS)qs&wr5#sP4sBXp)IHFxo3A-3c5Yx?)p9M;2`8yu9w+zC%RoRw$bBPX0}+`7JE(g z<;&IAyS_Q)8>df}2D!O00+b2mH8n1F$*~qHO-~9SPB@*^zNT2@HCnkJ*+l@x` zW%GXux+C%#fpOoj$-hTE*)Az9$uB8;oX2IsElYMc@R`?5)=O(%(nmh>LH+1Q|5tb2 zd8f9;-y94c3oVA!DJ8qogI&9$bwyG*ukr5HV+DRk(&4fzDyL1W)%J$hWJC@huhM0> zRN^jEv^OS~$3L>|`X4G>BxTdv6}#$Ut^a?||IpTZzpF{hm+OgDs}!A4r)B^4RsDMD zQbiYDB1!7ruvQoS^=iG^uu*1pUg_+}Z*K+y%G@DKIoV@Zs+(gD004=g@~kvva+S93 zXwba688ilP2HCo!L6d9j;L0$F8P0Z|kg0?F_Gf= z`wl75_=v2fH%gNH!I*LfTV#0rs*RRtPq#hMQ8Jg;jviC0_5 zy(*4O{NyP$f$4fSwR-TF3b{gx#jAhhmmSWflvUbe2c-#b_t2y+*^_(Rbkfj32lV18 zVYQ{Y^y1nVbl07C>Sw=sK<{0Ct9EUEN7+J3nQTTOUqpf8p)n)v33E>HoOrBRz{3S~ zbhN9aq*PYYD}S+9m7Zz^62NK9 zJlCt+);y=S&ASu|h7_v%y0$iKR^FdcU%qR^x4W<1Fb!NL%q8biN z002Z#c~)9*UY#C&;sr?}tOU*wTX!^Q?Yg(MY)QQgqaedD27hpNGTnwYcD|~8YY(V9 z-mV3;3pI1rJT0hLrVYKXOz3|&mF2+-)s#(AKJQa9l~g1cQr<{8^1Q7QDOM6V<&(+) zC&LwTj~SA?i|ieDcwp&Crd84Sy2{*M#pc#1SA2)^mb86MUd89<-zysxm@;4I zm*1|99rk@26IprPhUy|7J^awGb@lZ(>5)et(P!`Z#Ho8;E|2mB`|*F{`M9ded$d2^ zqjX_Z06V-W@mOKsXrq?*r@hLR#O1PF${Tr=%`R4(y7cD8b$ajeTlL7pkLrqxE>XML zq2K~TMq~oMoEX@KV{G@pIF%(OrJ8I_S6Qx7%Jtv>I8MPGYc{ELN|lu%jav6Uvg(~{LEIPPVW=lYxX@$e8DT8KM*&a)UX-ReDdX>-S70xq8 zB>(_}*JCun*{7_uST|mKnKo|SskQ6gra^!+z~q`rEn8AASvk2qUU@toxm^VGVwQwROqCnT&4dx|u_e7f3OrOtou7KOrYH6QHJ%-Jz# zp7S^ZN~$T3UuKIXZ_JRYX^WG(_&v(LH*otvVCibztJwz|R6FZZxjX|qcTUZ5Ly4-8 z5{E(xwqLC&3#CBMZnZW1t!iiAr9GN1N!s0$(ar-0)t$}j*+-w%qJ@i2>2veD0?G^v zC0*GPNj)cdP-}l=AZU%%Zh3p`$o~H;n_aA?@&<{>gPRy~=+Zc@^coD#|i#0001k*J?Du zS@^-&FjQ7rtfh43`bjaZS=XnwSVY<- z)lQkE*>h`kaM!QYQg)S+;R_{6yI)+byFYZd?z{g!U3&3iNm4Fh$sL^d^S{R$`2|?Y zN-Jj_V-l)kT^^3(^3i3vl-J0yBdaecSCg7#r3!yqan*AD!`Hs7zyIs6sHVp5;@q&i zLHpbH96PkMPJFv0sV{AJarXy~f7pc76Hlrv8Xj?5Piu#~(XbR8dwo9Br$U?LE-}=T zOAS_T`b?jEsi1PQl<;;-IcZYL&p`?Rz$jepo|R#UA(zXgK>r1q+wE31o0Vl*gq47U z$EAN^81i^L^85V?1OjroTm+Tpn4a=pZP~s<^>gYJ^%k9Mos%xExk$}>Qi?{xs+sLm zp?|t<`?oXumX($|_a;?R%~*;P&41yUd)a10JaWekW%HRcW}618BJ)OJ#NXo)-ui|v z@c2|V^HNE6K)G|*%W4UiD^)T_fwHK|`&xe$nbD^9&6||)l&Ji?^CSf|Y38L$ZhKO1 z*PO4e=B-+^aFN!mc~P?$U#Ol;UcsEHR63(@aN@^D2#hLe-k07pfiJSg39)_bfk;@LEr-S(SY}thrfA$Nk8f!3%J%)u@+@B<|JMC-@9R}=-r?f{ z`&TrRoYZbHg)RB@_C^^1S%>;R#2kBrI_TTgkgLNj916!rv^PIs%kGBy}e zo(W=$jvWN#deg_<{o6?JK6b{O&qhr~lUG4j(2x;#$tpNIGy7Pfd}9#ajm%h z4&D3H?`y%WpVZpclrE|8D=6=TR#omuzN4-}r;5!99P(jwSa^iPFXKwfmySr`l=4}4s!K0kB1wAk$)}V|B=oc2JfL~k&roTuTGPv?X&UD5j>={xN@p%Hn8LKA&CP*prH@_sQoKOJ^0n>S9?%0U5nXH9h>S zO7FT}*{5HV$LCelHBEJe=}KEkZFg-LT$e8uRL)~5Ul^LD$Yr=x=yb^yk&H}=uHFCu z9PL_;COCTok%6CqaqtK#0q2j);m0S=E$QyOuDtMSNzzkKJt?E=#Dagtso|-rjaABJ z+8=a1-ZN`oI-W^%^6}geCp8((Wtqz6)93CE)Ffp(EqUwDjMsat*DY@p`ny>>6I2d_ zrzbP^Y4xV(RbMt&p{PA3VZ6IpTMuqkHYFHJ)wr8C5je` zwQc7*U3tardS>F=|hyBT3zDS#`JfDwBLczTS`~FPNLC@gK-|2tU;ggI_sh*@8zFz6{EOmc%b!t!QZ5c)5J5Se_*Q+u(tgB(+46Mp&>i<2CF)FP>UPi(th1fTa zCDYkIkJd;NJ;Wv6LQ-F#J-R%qq28+5R(S#RxlUCH9E6ACQNkfEZWJ&}&fHFVDOd56O0 zwjCR_?9YEbr}%*;z4Yl%=+i_pWTJy1cwEKlcDw;h>eVg{kS~yeb zWKxnn_GO8;Lg{=`X@5fb9=m(@tkn7PdF|@WLZ7K3(~#83$qWF1V<4ym0N^z6MO|9^ z`Wjtw;bp3+nLK#Ae~Vw+^RJC-9V0?YNiqw{X3l?{YWczODW{Epe9CM-Beykn7jTzl zhYI<4PPt*-D9=TGJt@Uz2J~+E>d`Qd-38n*T~gST`U-=~j_y(}X*>y4q^^c%^;+Ky-E`GTJ^SdhTK>LOY8+L_HxN)tQZkoUTRNjj z!IOW#EH|ydVKaZ94tXOlcRD16ho0#0P%&Ld>#g`(y7b~D%650_*;m&o-kH!lzum9d zH%=KkAC`O7r6#RyIjEv{%Cw~JB26l*(xkHYs9|@5wl;52wkmnV?I^@8WfEC=3qJWQ zzr0pZGb`%`za(0;;6m+h+OLS;Cx6f$dvbqc*E*HleT{mOmLdb+uw?TJ1w-=Bnju%% z{wAfUv{*(wBkPXkGEJZSlG<8ZBuQSMDFyO!9Sq2f7^+Us7@9=K>(joyO`1BbR;|e{ z-V6Z%I0k}B002&tX5Tw{;H7Qyrh=+2o~lbOyi9(7K#Gqu3@8)^yL_Li!V$l$lH-4y z%4e+cDqWU&+N<);RMxw!8OGBEd@!Vx?B6~4!Q1j0xgQ+!V)i)4IvrSV$QzN8DV4wZ zpytk5A(zLlup101Yc3e`z8=FP>Bx__eOI6MS_O6Y?v%@u)cmrTN)kEk?8zya8`&n) zBVO(9$*3=Pa$h*4@^*OVb-U$Bxg39c?Om2j+3j}Qm~%%yr;c2k_NDe}`E@JQn(or( z4Lg+YmYUu^r0NUGM=WcG48=q3dcN@ymF=FU#dDVqb_pMtcqfrb$Zfh6@)Ri&_ABU( zskkbtl9JLRZlA~RQ6kf+ijt{=w{;b|)Ya3a6_ak(6Zfpr{6G0~r5pCkKc|0Iul?Ou z)ZMT{Q?9#Cl^0*6wJ)!cS~}$O`{nohHF@TA`Av_yy1SL#Ybsn4R4`wpuFg&s$71q% zed_M+QhBUI=}cOFvr5@KVI=?nN4>VA2><{%eSA@u6iv&QwI^<9>1dKpX7XRpnNv|| z_;kjMp?EeiI)>W!Ofe!{9%Fwt=%aN3A8Ue?qfMIPF7hdF7DhbA@Bs68LQ1dcQ;`|g z4F5E_4;@g?wue+ZETlZR>t${7)F@dq_SglHkYA?v$d5N^PO;uPFkdsKUZ8jOY|*OA zV%oiZpJvq8sv}iUNyM#<9d?@}b9u#lXH-*Nw{C1;p{OVd1W;)b5MFu*1q4BY6sZb9 zsiF58*oq1wO-e+hgVaz2M2Zw?LAvxBT7W=8uR;Rcjo-b0zHxt?bH4YCca4mUy;rjG z%)Rz3&zgI#yumppA!c+{^PF{xROM694?Po31JF@zS1yrnMU+{8VVagGO@J`QqR&Y0>67iLknmkN-pH-1%H|=vR;-fd=fwc4} zS|h6;=MWrN+~x|ppa;>T(p7p-#J(=&m5a!@8crHN~vsez) zJxZtrQhdKJ#WxC8Zj}hJJKcaT6PIEsIxhA$IvFd40`Me#j5~J$Wor031Tyt@C_ogf zsmM0CX`Nfro4oP8ClFdNup=%^F^Y^b5>}LO$JqPrer$jaO-qDsZ(am(}vd=0(E-W&=dFOol zqj+<8Vho!6W(M91#If#RpXy1!m-8O=dQ}}2H-^`CcX?oCvy^lzInoYcTa*RtXD=$T z@A>-^zAN-n%defl`K{I%Z-i8;J}oyw=4#W9mLU`J#Nc!F>U*b7T-8Btb21R`xbsD+ z-CkVL#%i>)Yz>=qQ)BCvV_-Y|#9pqr;|Q?*%>$Fe4{Kz7Tws@{53JF_>kb44a30@{ zQ;aftBM+0oG%`%E_QA9vkeggV)?5@kQed)@L+LszrVLv)(~!V`!o8d2YVSUlK~q9()#&W<2#*d9hGpn9qPe11jH@O?yz3e z_S|-`2U*k8>T39DJxQf~Dlm!FW?$_6l4m$xI4a^Pfy}GYzdRmfA=^?~NoiLN_{6=6)6;I1$x>v{ z0wy^@Eh)Mr5xf4XXBnn@hD$*sJ!&oPj{MmEyrF3D;Kq`p-!Ps;tS?xIaq)VL0(21VW&y3OEJ%tDapP zply7Q{N!4>nkJ6E45^`t6zXRm?fOOU@#u#2iv$2yiDFxq|M zKEVZ<`nbvgUhc9dJEP%cHKj0*sTVGe8)`4!u$=WBeEqvZL>g}yJ~nYKRyXSoHv4kqfdjM zGVD8x^M8RJN`NAr|1&=?*#&}+;9BP(k|Vp9A&{=zT}2oSbUw#TGCX(oUq=whh*a>? z;I3&|EI%2{Qsh)|0&Y{9|-to;UU03di4-V;6KovzvGSo|8v#- zJK$4+|FPx#E%29*?GJ4KeZvI@{T-_FFZ_QD9`XnOpM(E{{|~|+DP|Ns7@FZyn=MUu89CbZJDQiYCjq1a>L&BiKRGLpSF zS{oe^&h=-ED_t`K_J5or5{bPgUK6=9Gc%1J$n`b5c^Mh_wEz&(L$lkE78Z7jBCpIFX5Bv`x6 z#GHYUP8y(A*flxWlasI+NoNv03xP1a;Cl{%sH}U-o)2z(r2rOAf}4wSv$IuOEp!&$ zjia|ZO1p`{3Y6)o1I7BODSw*AFHRTU(0yOVITE^(e0`RUao&xz`)fEazL?g9^~uAX zx9zLA?*@+wObf;wYxGtt_vS%X-b(jc;jlPz5zkKk=vcL`f{u+{D0wJo87zBlSK;@& zWR!~tt;?07+L2VJ$z5Rlbw0`I2!C@~?w4jp?L+7)NzB(LvZa9U!(eWethzbKJ?|Zt zW0=M6`)q!7ooj1!JZfrDD10g)as8{qgsd>63Lhaub#$1ricPc@H{5hW zl-Bo>yq}(N0+r5*x;3yzN)#)kLn{ zn@<3I_v5YIacyYd^~|`(+S+M+g%yf|HCxeitkPgrX@QMs-duZ}9oAjO(AE*z)AvZB zU~o_$%;4WKuF#4@1nj-tW|MTjOHWy{&MVC84VK@!>EY!?inmS~sDDMxrB-U)Jt)Sf z53U4w6FP}+t|9shO}@u!aO>&nW}x{DU;uMSm>~h2sqK9hrv=><%BK` zua$*!=d-x=^z?YI(p zq1euOkAscPtz4O+Smda~(L$dSsdh47Pu1Y5NH&@zsNfcp1s6bb`X9E_+sw^vSNSxb ziT+IcWQWv_0F>(vyN-HSj}~{!j?98h{p`wX_wd$R)+x0C&Xpm9Jw0j3$!zdsSs%q9 z3CZZ-l+jc&yRTjn&P6XybvqO2#-+#i!M-B>GHTZwv&*c(gqV86eh1EA@m=PQ{BGpY z!AGL?QQgjpEUazQbn3U)N2VYqv+K&9mqs2d!<6C5E=<}bxgqt2V@)5weaZ=U__SqJ z$t}_8(6{qdh^I!)UPH|GtD5LJM{OFcO_(9A`Yo4xp6~D9^~63)h$puIQ)kZx>f5^Q zlM@@I5`89jeGtiKK2B1S3G0Mk#r7NB2xW}+W@t)>+05`?rcV;u3cDYjG<&*cZPgU{ ze2!taB!Kjc4l1WQ*G%PZOv}fX6d~lu30YodobX+Rko&rN9g8nBE_Ghuvnrkn5rgpi zIC4M|5D1Ob6vB&sB_kt%NjxF^$B!Q;Fm?%@*r3SX;WC97Ze5XNHj@@r4+jR!;RkhW z?k!Pfv0WbQ#zM8)Q%z`h2W&c=mdp#w#VQq9wnk>Xmy{xY@@F)wXRtHe|0ODpipDm7 z;>Idd6+5q-J{I~-9+hGs)n;#u+jWaCf?~zwPz`Y>8Fdd61|aR;M83D^%be*G5hWk) zBx3g?dvgjMZv7gHxu)NtnC-!hTqI&fAFgICyW}%(Rk3x`Z*9)j&jFTm45e?GuJ#kW zYxEIU6wls#opc)Z=Az*0t@U1j`Q!{lyk z4bJsCp1g7wpFdMG3w&{Ge`dN@#P@R9e3Ef3n?TThs^7ReISx-PdTDgd{Ab%8!jU+t ztBC!33~(tefOEBTYH`wG`jrHmYJtA#X01~-#oRQ&pGQbrDPHV=x`If>Eh8o<7`ZIt zX;wP2wz)l*7R<){-jc3sHg~eMTZkY@D1x*&U3>Od)42>(MSfBRIS^?8%SwY&Djl5o7Q&MZxmIWXBYI6_wkdu zpr1b-+089v|I>_S|K&LpyR`e;qQ1Tp*JV8UvB*BES$UZq|MtRzc-hh|fxuHW!@C1W zz;jt)QSy)==2vX!K-osWc|0Jx5j@}r%Chmpq+Durwu@K0daGTkU*b~_GKuVg2pwqS z@q6@TzntFO(b2M}Z`D=c=p+UpUo=g2ls#zE|CSxl_=wOFgMQLA1}Oa8Y+vQ#{23a# zn>a;}+5NJ&-5gOO&c$vya6zF-w+Ih3>x~(fZ}S}zu9f=P3np|9;tdaQMXRd@?>j21z1*gZ%xrVzyZew|Qi-MeAiCOCxza zGryrh5!^TZHY|+u#*G)%6cmw#`E7W(<<8PbM~VVFTK)br?Mqgr@%j1uD1ZOGY06$l zyhw0r>J4y^%_<|r!^P$1ty_V*th!^JRwB*K&C2)hKUrT+Xd^OUp%|Iy0G@*r+)SJ zDtf9;?OExY?@p5w%gAZg${(T7O z0YhRk&eCnoT#Mv3D;|~HhnuGCZaWX9>+tqeN{alPBA#u)*-s`(zv%?5PAwVzK%>#8 zTvOzzYt49e0%a%P zyRKacorgcScmL}|Efsep5P3IEOH!D!}x7^y5Mc=a_i>3SC#%6XD<-2#pDa*QdZ6Gd!(6;jW;Smzx^(Y z$-a1>T7OWx8#q#)(I<_cTU4>AP&gNJYn>@yHP?OSTTgwWAjTyu5&-?dM@exoqjoBi z6aIM%%(;eJsTzew&#Vz`A{QArTKV#bWi`Gmm;;B&!?2-={d7%{S=AooGq*_~R_6|f@_A!jepHn+AORz4?8nfdw2 zq-17+zAZlLJpj3DQsAFd6Bb4zEG!Hqz|iVM={8JG&eV1trP)OToSe4RCF-6YPNy*| z`YB6m5sRM}$8osIe%>!bKDyA*=3aa(0(6KyHk|w&@@4B?P0AA}(j6Ed-}>(EYVpc| zt(b33@}dfdpN`H)A#=0A7o^(UM@|V8N~yg#ISUX^VV76ZgL4!VEWf7m^O9<5ceZTV z`juLr*jfAtCs?D^!kXmCpbtwr%SwbJ@8jw^y?945i(L92T56drj>(AMVXbA%PGv5q282r-x_~y@J{`H z#PL!cbRp>p6XJc9BRaaeQvUNacq|ZZ?yY>9nvU&rbu|>NKKE1WyZ(*(k&$>J(N;52 zvc4&Vfpus+fV`~yIvC;8w>mTP6G}rz#~ski*&_5NMmO?hTbfev43Vhr=_zhxWYpBu zRsD+*dn{mEw(~pe zC_jorH998Yp|K4+8XjM{y0Xq*%TM3Z zgTK{5Av$LCh2!cB+#0DRdGD&Kq_L4KUIU-9B|^)}*}v-gOPUhXCaQ+4oy_^`D&84P zjCX?3g*yNx3D07T{!pk=0O&j~HNi_A-oJeL@&jBs{g3sV&7D@ohDf{eRQ>IZo8il& zf<^^{rtP&8@?*OBrEX()_Ij=aNZO%}+7w^Xj=@U;k8nsvTcacU+jX|_-vXQM84UJ|Cr2zu& z_FW?`VueJ@T3;o{%Zu7tZ+UEBaB2tHKRrEdBgzbe!3;OMWGD{H#yg)sKlSi; zcNcYVaG>B9v>O^4oIO0|#w*>bkLs!I$7++xNP|&valx9|9AGdE3ZfFXAOG2vBx6+W z$cj{r*xE;BWTbbs5=o@i&d#~1ID~L-u&6dBm@Gj{UKgY(Z^D*)lcNX!)~s{m14-aIpsufgk_BDnoJvv=uH6p$)A!K zo-gYzg3fD?NP>>u(H9sLEw(i9jk6c8`Tn7A#1iyP+K+V(Y6@GJ)}v79gbSJ00c6a*3n#V=qaSX061k&8&;UiKE)y`DkVE1WQSSict1Np3^Fl$kZd&VUvCnxoX4|{AxIW5&?izWOst5ic4JmHHWe*`~vg)rDZSmHD(Kj<|4W4bXo9?Jfx zKSz6#9I!D}gI^b}C;^v%l)dFE0cGA<=B4znOjRks@3W>pcwI)hvIrc)Vj}^8Qw2E| z1Z3y3g;OhnK4Xpltaq9LFqyh>4XR<-g*FIw#^GnK9diNj4PeXeMsEy*BD4(f z_Dh%&4N_{@GH#vpJ|ygxZ1=eb>~v6pOY0Zr_FJmEJ5_^*%a6!AVy4F|y+`5=obmpp zV^4ETk-)d{=h51{|L+9sshH!``nPkBfA9F4&kxz-35zDA%Y=^OB&OPZP31yGv%voY DU3j}4 diff --git a/docsrc/source/_images/fittrackee_screenshot-04.png b/docsrc/source/_images/fittrackee_screenshot-04.png index e13cefa0d4d46136f8ca1fad853aadad7041d1c4..069ad32744622b4d90a33a7d289234343b703e38 100644 GIT binary patch delta 17330 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 delta 17315 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 diff --git a/docsrc/source/_images/fittrackee_screenshot-05.png b/docsrc/source/_images/fittrackee_screenshot-05.png index 0278e0f6ff9f772bfbd6e1a1fb2447c8bf6921e2..992818ec7940bbc0cf81a4c783edca8ad3bd127b 100644 GIT binary patch delta 14249 zcmbulXIN8Rv@MJk8)A6@k)}vd>77umC?Lf`Zz{cnNC^-i*(xe3O={>!?=|$QB7_n^ zX#qkJDFG5d2oOji-{#!!{Jg*Jex4+|uC?}>V~#oITp6f28dZ1ni^!q8Xi+?{sGf)W z_T?QVZUWw-mGI}wI%8{NsA4IxaF1|1!+1|M=x(ugnb*3@!tNPen4z=~7FOPLWhUFZ zVLw0K2igCZNE-BPQ)ewA>6*?XKC4MKTh_1O2<7dGzwplb?-y!);fbcrn-Y&Q@%bBt z_qLDLEaVFXJGopvj6Vq}`PF{)BwejvR!$DPn&o|AE_}JsJhqeDS)Nga{PF432MLo` zX|XAX>;Z@S*T1`mUp^dJ!Zs{7=nC_4r#v=ymbt3ZD&~;V<+D z^^m@dS789~IaOf^b+Mtm9vM1OC9f#+b4^k)pLTCYE)UzI?KYMCGEQ^jA^ z$FR*^SU68l&7ev?)6E4Z`*-@VfE#NL5~VW#4PAWgqkTqc*aNofS2K%g7odTn+@ zkDP}EtkO)5KRWdxv^2N>Ye3^oh_Z|$@^T<{tV&2$n zA~ZKFQ+HD|yr9*thkg$s@k5IuS1$((+&!O_uKMXT(pS*kPT9E7Td?^3v4rB7yaty` z5moXZ^8p#sUiACTiYbC*&NmqyfHyUy*4I>G29lsfJ*uzh&AIPM=@UGAKYM2tXXbqiqc7BrG%<#M)6)is9V+p| zOF*x}J>YlE)CxJJd~&TxKiz%^S3trcjTpak=OE5q-E-t_-iD8alh2_H^(Nms;^Zm* zCMiHvaW-suU|Os)$x5|Fxqd~}-Ny4KKeyfjTtrpJ*uQhN?*fN<%ip}{8TPzLS=pR+ z&j-xjPba;S?v&lH=lL#l29~OVl+?T^fC>4+_BUtoEF-paAdHz|K&*QIJgYq?P z?!yMilD@F^*Z9oP->jEIkrW6p9kl%- z(;+pego01rw%}{tg8ngT+V#7*Mv*>sFw+b^eIdu+sy97AqDysq|MwWbna zGewA6kL#7=qMT2zJlVX!`?rw&{ECR&$)6q;BR?c}u^qE@xXW&-r!qcWEzp0?tFPa3 zi7iA28qN<9QI5D8ZmH7la6C(czu7QQ$LPE`5aYg%*g92t;X~e=8`(Ieuc_IwMb@;3 z&bH5%Zm7n!OaGG%J{q6-s50v2J8!Wk6IrzaZr28GM0=NE3xd>#Mep|9>OJ?$At>5% zvb6U}yhi|>S z!+1fwRh#)j&8CZdIPB>BlxtF}Fk4&n=I8&aZi{^>a@Biv<9*-d4i!tzWmUJ`w`SMf z;x71pY6<(8)E~E}D>69yZ0ZULedU~#7muJ<%G)RUca$Evv3VNbLE05mu#9h9jWZFo z$>gr+ZwGGHc^x~9xYN5U4-Haz%PngD@q>u`%k0QJ_&>LMzBJeF3bDqh&+jhh@`qcQ z2d9eAvMXz?M4psC)bi2Nl@T9N=UFT|S#wGJsvwhJ_rT+f= z(VQ>(&fu?l+a)xQ6ot)^(+6{V9{R*ve8e#d-FihBxUc@5j}oXfrzL#qas63IGog49 zoiCgGgrsAS1=QtEskWYTLkKoblpI;*?ufRO%(Cy+*!sIG%&A&zB62Z__m}#mUzmg# zDeR8yynkH0>z%9O$(K%D6Ub2_rE6q7Ykypv{QS=Hwqi`7K#Abkp%-t~ySNH*+$9|| zv6sZ6Wjq06yaBg~o+f7-6Eu0D)tgrA1R-Y+q!KZnRViHmRW?UlgF?RZyf*Ig5+N~XepP#67iRNQs=Ap zQ$|7BX0u{B+^60?3w95j8LAM;MOyJdHn1m6FBs%n;a6~mYWMT1o-tQGDVeG% z%x?L^TK@qJGFpp1TKF`w$};D9t})`{p)5AtI<;46Ka6RQJt)+hpUYZ3LPs!i-Hy{b zBWM3&dt8Al=G|N8#*aOYpr8voA8tKHevZc)zu(Gy`K#o34A-r|N40j1SNv6UJzxcI z-@U)_VZxisa%>A<&=dJ5C)OPe`?!(qIL7@j?Bm@Nx4jCUYxmhO4UPg3W%nOlr1dM7bUj+wmW-X5%XKklTa3i;tdt3gD7Bedjhd`#k3< ztnHCoVj52Tdhm|4r_A!;lhmHquoLVA~%-s-aNx$oZ=l{t}-esj=DBsPJpektwR zVcV=v8eY5rsu~^HVDvG4v2C#W*(ss;2=0@s27O;mjRi+#H9chvM4p^*{TD~Gd3`oz z@(`Ea#z`@$W&DpA9nULwog59jT;|e6rfGvp#)EXXn3L@WM<9nabvf_V!b9tKlk?5d zKjq&Ywz<0_^~DNhC3k0OCt!@T1F#seiZ7};u9#j}2slEjYz|vxn^EpHbv)oR4;ZeE z!`>oQSj4*C^UJ-OMd1^^e)vtQuw3+w!S>wDibH|2d~(hcXDfGupOyoF?>f(fjqcyT z%%GaFjN^}AZd3|m%#}Q|Ki{_@?Iip@C$znW40q~9QYn3QlT|F9y>|8)Sfe)b9}_~& z=WLzv23W%?RD=Kc9?2C(FQ8L*wE3sB)Bdn7GMDd_Vm+)s@LQyN&!FM|p2-dkJiKaS z9HvD2&*p^qgcaAd%tsP>kIC-&#)SeWl)AJ(nY>Ai9&EslJ{3iMKyT{lzO+4l|*!VYksC?u`&`aRTYt1nmsm z@4@ZzYuC6-wvxwO`<6HeG8U0ErzSTT_bK6wCpr>OrE9m&!Bju0)SDN%>wF?^n=9s@ z(G!vfhQ_iA&Q0bSv&ys@qE3H|cVr#gwUd)h%PhQJzZ3iG%oSiL;d8a>*zKQJ?~)vD zKl}N(*!bP4OjDPU@AHE)E`u>S^{S`Jj z3Y4FZUsevc>v3YLGS3^G$38R2557vQ>Oq8IOraJ1ntP|)k0BkCNQw`>{18sKa{Jxe z<2MU_+<9x7_TNR`38TQ>P=U64((kRgWW6Q79_Of!-6vIUq#k`MQ_DQh zey8bHlPh5cTRWw7h%xXjetH{k`3)z&+*ih}e)xFpn=n#Y9{CVj{oAjnHp&hUHi!QE zeE$zKy!8g>nd!q!cTZRvGF6MsV&x|C2tWVfY|$QDYJk5T48}@d-l87S`s*Fj7il)d z#>V^3^_jV^xxphfdkpmKo5LciFXfb-6lGiu*4)GHe z!op#g2jcZD=2b;%3@wJ^lEA$i!e5_bFE^Q2JpUy1xsqB|+37NzciCul}?l~OhS zzB|gs_9y5;!Ft+UxhsbN%9MY_C}#jJv7R zX`C9#9HSQ3s9Kx5F9D04RqA&CsWf%RZ4*=3e_`J%L&<4rwafdZ<#m8p_J_UI8`xkH zb~VC(x)v>hBmwbtAhuyKPhCD>sY20h>`KiOi4<6~XCKqV#AF%1+Sfpw#Zs0N zy)24MdLJb!F1r(ofTE%vZCIOje#R^Fm~k17bd6m3yIQ=_L_36LK7;&)+(O#nRrdDn zZ`(?49$W8wW@hHxS0=H5#tI}$_xe2qTOOV9Tel9_kr^ZjsW>nFi*_BY)3@~+ypYUEDDxC%0zJ>!+rs5v}0)pvehH|9vBrl$6EAVy;Y zr@zel9ttGM`8d^%IWQTE^Vv_zJ*OJh=!dZB>Ci_1UK`GxKK78~#C~^~?#*5}ZY5PqwuSUZ zsT!g-W|mrQ^o4=JN@No`@YhM+f3sgiy1@p4A^fK zETDTK`2uyu7zodzwe_%ll88*pj;VCRO6L~qPrIUrxwe%r;Yypv+7}J_pgUx*mG~=G41!83r|cB73}@l9Xs@5xfZhVk%<8o^7wH6 zLMe)#&wRAfP=99|HXE(vk+g6P#QL@!AvCjHXR#bV8Hb-<$uPo(>&J>kcn=>6a#){2 zSz~alsf}Bn&CJ$tex`+`qI)vZk8m|~74OqZHAvCA#$)G&6htwWAEhcnY}DXgu2`XD z_$WD9q+xDf3&f+;au60kW3I9&wQaUOPxGD`_QmxSA{IN$6cBojrZ$!OC}5(}q7h0$ zq#J?!z|zNou3JiN%P(aD{KMMr5$adff|G(Ifp7rEO4aV3|!+Ny%B0Z7MvqgoN?sZ47VW9}| zq2?lhL>)(MdF?akc8i%Q<+zg%05TfTrhAJS6_!{m*3?b+@~t;#6wA<{WevOJGeQtG z^!{p|NOui5;tY>A6J=}XJ`EJUreSa8bgYO9X#V3!MMV{x4eaDTRoi(cT|H;yf)w{k zuQl|3DT#TT?)kh;obpwYhX=m6!LL5ugqMriJw{3>^Sl$~Y573f1Jda+@XdM z8zYP-`8VCx&@ZT41HfY zCq6&uz6fX?Vq;^-$YsZ@*Qg5xD5`IbX>f6Ijk^-o_Qqv^jOc7_{ghm%0S29J;O_vw zQTNrLbxTTO4)*+!hYN=U1lq4D}LS(M|^Z;t; znTWsR=&EfezC5C#rZ=G_YW^QHFfS`h*k9w9IH|P8GQqBF?l5(^7{lIHF|I?xZ7`3M zN}@r3c^-}Rc$`jbCO0w@#sgYvVnl2bR=>dUz*SK0ko-1 zcNfEU20~bk!U74NDIyjak{)1ZRo3^U)cd=Icz)K)of%(0!VA*mjPnlrX0^+xA_w2F zeoG*{YToS5{QQl0*RhJ*6Ezk$Blwga$PltXz;$IFvV1f^iIU0(_1pA0P+2v${F^Wjw>Tm0G6V4_BFq#ipa= zrc`WYs9KDBDCA~zShbPe$ad9dr{1wAD3h@{whuB|ED7TA+ZSJF6t9^ zpF*zp3InJB$2CJ|=MYRz=u7E4U$mHKlOpOa>=+|CQsj7(r(zWu1gw2=whdMytRfuz zrai;>E3o}av%x5CC+oKEN`4LB9r6Ucb~<~pcIBCKJeL|!43a|x-b%vC*Gjud&^Net z!nd8jo+xbrU0C3872@%=cE%+pNtCyVA~OQ7W@`z=E)V4opeBiQjomq;s;Pvj#f?-V zYNlc~Ti(7CR{}IXK|?(4KqM;RXMVU%IP`yOy4QOwqxXN}%{#r;y0yRxSW$5?h8mqe zI;o6tb2>N?IR;QcFO_(DGk+9!A|*ve_&Xy(H-_ZdsvfjXn;R}S^Kb3#D=IS#TQs1| zYvKpC_lt_&vnn!HR#uYX(hpN|EgeaH$~Y;&UpsYzi>uJA+_QG6cK^=m5O8_3`yap8 zCJeLgsXkAB3M80HS4_;nXhM$wt6s!Nlcnbg`UDx(rQ5KvNvZO{?wp>?KNdmC66_U8QYu!ng4Mo|2Gr}9jlBD4Gkd=0lv=~CfBs?`_4r~!kYGOwo0_1#Ps{OWx?cyYj`HzY6E!1_ zqwNL|ZE9EDOB$aX#6pf*f;ybkzi(tSQexqQ`7=o0(@=*0v8KNK>4PyxkIRCc!8J6P6jlb?obHF@tmsEHne9yyM!uY@XixWBrqa}X zkmTky_nBJw%4lgUD9W_4tLrG)>%FM`L%Ns@dK@H+KABEe`9Bn622zZS=5}yfc!sPT zeQWY+FWke9QnL~0?pQivTDE7L1_hd6sZD~x)r(B74AjO*GlNDbOjZJebeNL?=6jUs z02h8L^>;=@Ux@|Adpn}e8O%(SdaeC?HOCQzHP`Xxad7HeYRm?}^k#v_+2#umttII| zG;ZYE;XP z(2_dkN8X5_7WP*4I*gXAX#87>ElgEY;@n26aca<>IZ6FUMB<^mNy5g zpka0T!RAiTkr*5b;+>{eLz(O?ckU8zSNPL@b!JJ!)_#O*a6Q6b!Q*Gafr7O2*Nm&1 z;Y%zUaBgcI0d5Jd(0z|{3Z$z{BeY@7bQI86FXC|5 z_lr08Y#S-xAAq{V(=LehLuA|sy}G#+JK)TCrwj3DOCLw(LpLcij2nE+fEfm0=+DlM*`wb#eZA?n z0OMgP3ry7YZ8)a_DH(!06vmvLf9`E2ZDzM&v`8r^O<(%A@Il_TqqZ6M%rGt47SO;r zCCu^c5ReCoBG2`A$+F6HK39`u%F`%K5wtb@ZX;{{&($a^w=l6|&hd?tB`2efNFzwOaBlILpNW(x!g20oD{!)*@iEQHjMbhi5?p}t1N zq#|dz#_iFoZqxLCnXN_(Z+px8!g&>ljjbSs{^0LzK~;gt4SAXDk8|A%82eZaCe>wa zV?98x;N9D6XzKN|nvcs6h)G#TU2hWberc#pj0wNAy?l6GeIYRf zL-CuU6jP-84CyRM0GS>v4eYhMTC7pf6n{|biVGo)QNTw0xCi>Vfu|2@i$@vS+z?~Zo8)1I5(f%|)FvXqb-L7Rws9g({x`@rNPD zw>h-Hz=V5me3EkY$^NU=A)in(_+gb3{<{H6{pZuciDxn2X+?*CnHT!i9tpG8w3Pm* zU^P<(?)F`fO5y#uelBxUy`)_ps<4!u`BD^Y?^~VA?nk48!{v%cRv{Y#Pl_8G8z*Fg z{S81)7vdC%ma`YXbOyZhHS9asMlSg9P>$C%@J``phr!cq9f)O>gJ0uRW3c?g#`Yhk zpZ4@*>=)WQ@e#SBY>e__Y1XA}WR^7`gbpp4RqJgPkpUwzAbPIJt zLdvpwcfy-hzcT^C-YK1=z47kill*>wmGP%HXuIbi9!yqZx%rAwOxi*R+O}u7@aa&Y zJ=O!$r|ddezoCI%pJ@YV8UW2D!OFAYQHGW#$7RJtk~fd7?{EGY*kGxZ^5m;_Au@#8 z{jqX<{iplpl7V=>9~5}7*hGp~VJ9*q1aZ)oNaafzDauft9mp&Uve30!H9L{Uae|G( z!^n_j!`+=~gb(HD#wM2^=eV5H*a((U9zAq)bj&kINf1GhH?Tgy6dXUIQRbDcqZ9>3 z?ol$~vdaDhbjJV4@iSeR0ZsI39YLDDUT2qQl#$LZ6zG!P%PFX#iWEdDYL7dj$@T4L zDdBN;WBwUP@2>Cc#4jP7{mJfS%kLO6lfG2SGIN-4{H2y{0Nl82mw0ier?H<#(d5U`J;M2@{R0PJJU3Ks*H+TDPg@43Iwt2ql;9q=2Jgh! z-Ef@_?zbCr?n{o>iqcAk){ct_sQH=~Y}dK`{tK|HIOR6)ul*`%Tl5A;di*SJnvqU8 z({yy(y6w$4fR8w{Lj9Q~SkAI;&B`)0)NpV=a*}Q4aOMRz?%&Y5nRFwqJ&^~3UiUof zH#(D(;z9F0R`Xv2 zQXIh-JFuXF$5@3(_bG{zFQv7U@-^=Geh`qG^G}T&|9pE>SW@zczOy=%{UAyaHtG=x z-yz{;WZE|M&SE~#BiPt3>;MOqMs0FMvc=c+R=Q_8YB7l)HTHs6IXFO>;DJeAK%2k( zr06;*(*7WP*Rp_L(Zv|dvNPgMtvA#WkMf_HI{o}N>q@AFURH9eHm{ZQ8XUIvYqv+N zrbQ|EP0m-t2=Z-OD6H>V{j)xKsus=CvvoZem-sjyssw*H$T(o{hx!;R4!_)daWnnbeA> zjlOPab<=ba0Bws`5kfLt6RfjzBd5!QKqT%!sG+@rT}2Yry|FUQ8MlRitR!AKEukj~yPDV%*>Y3Y8`yQli|g(qx?i}?)GoZ_4Smu6As2Mi zRYIMehrNxBO&ZBFNQ}CTycR2FWYD|lV=I&qkro%WKdR20zMM(}$0bfENel5?PmmFd zZ2Jwk><8M+oDrm1B&)b5wo|7i2_6&hR-#7?8BR8VxXr9JtVKF+E+^_*_{5(b2LL>W z&xTTq!pp69lK2&9u}q z7p%5~uygjeb85zAM`@{HocemE{AbcY_s{j3>nwcQO7}5AFfX?10V}e)VQNXt!jF{a%$u5 zf_=2K%3oB}HMN0{FzDUl3JzUgKpDQivz{?xW+nCXri6meB2E!H;TwqszZGM}4QLY- zfvwq4*YPSx&xVBrFc3eotn*Bhsv8s5m#qA$fn6#pE(ep{K1#L_^SXOUW#>!v4;RG^ zaU3eZbYf3W&v3b&HoM@fTgl7^)l6kYH**>Hvcao#a@Fk>d~qz_8Yn{A7M2;aaWd^Y zr^}Iv+G(vpAI|WB)&HO?tAy&VNUPGM{UaZUgCxN|naD9^3Aks9y3iUrcA!C&MI%KQ zTGj0Y*U|A9YWFyLGNq=`4;N`w7Tp=K0>~tI@vFXizSc@i2NiifG(~ybe+J3ZOW<#& ze6O(fW7s-r zrLiLTNyam2#)zPW`2sne{p2@W4fOaB@bNp`Wn5r@SBj2Y5~SsVUrC* zPsRhL7KW-2bIt!&zFG$xtozQq$~`C{)J?LUq$3?~^{aUitKFwGj)aCAl1vSJu<=-j z^0~5}y*6@^BiceANCqLbeG?%}%zjT6MDV89k})%=p;@ zS_GC^Yju#72kgdg(U>SO>(XRTXGArtxZDe5qGqby#zn+gv!jz!^b!6ltk|;l^MJDE zeuKXy`}@sZ%{;;J))(QUcI-c>&Ke72h^Pdxr9182V`1 zj*N`>w3rU;br^B4>`LRd)yjR&v+d&%QF?5Nq4=4AYX>o=4<9Oo+^TW(oAAO8ms+WS zMZCT>&7eF&C!fr4W0T)%GLuS>N%5%CJwRf1l-kW8##a7#i}Qf*(yyxrAVzG?pW#;p zWMjn)dgOa0W3NT23Wo}zK-%{mf{bnt_R2Utu=jhozd9i9|!reJP z&96r=h#aj3UzyMT9`e+}B59vV&o=;};}fM>Md?@1zZ-g%SIyVOY5xHm^w-zhrsgl+ zH*fFh6C@-g4*bb?bwbG`L&mCU2S|-Bv26*ovoeYa7t~a159R1>B$cJ4H?1asl4ZWX zX-&_>WW*Z#Kf+=x%qCh0 zgr-^zEWTD>X+X!_zrV{!99M}O;3SBF2c5YK}y+;PWqNeyOsf)`MTNlP1Q))23qZ;SG zV`oYbWWSX11i&N#h89__w7?%kC;LtV!|V^+VA;9_G^)COwTtydAC;Nsxh2C5P|G^E z|4^bP$w*JuO0)zuoek)otoe2H$mKfx6*Z)0Yy)(bcH&a7*}8P+axB`xLK4QmY{9xNZY` z8)M#cCi1WTEg=NU5jMrAgMxV$1Jm#gC)ijdT*1-ThytrR&lNn&d&eSeqNc3|UT3?~ zi>8~Jm@JGtXY{cjIqvZH=cgn&dmV6vwt-*W(>f+cpV(hmkjSKVly`nlQgB|3H?uvE zNX81JSCeDo>li#J6}L$Ea;NbF@^_vjlK3Fr4$^zQc5Z9MCdHJbH&sFsF9rj&KIkqc_TihC$;=crXs1Tq_WbE}VglU`G!E8b zqFUxJ5L|k&Xg$BQvAijSU1w1PfQ{OVVe6@-{r?`%VO|nzeYCl=JHhfpqbr`)TNh~l zVtkZ$XAc4K7~b_=tC&|ww;+HJPX<&#kQlVe^VOqT)RL5uPJP=OI;_lwxlA*+weo^Q zinC?*2Rp4=1m;7M8oU#Lm-Y|*ur3F}0;LasW1Rx^^x_L!p*#wdG}YukjUuL%G_5sS zc)jP^+`VYzu={Ve5G?rhovGP-{|*#A&fi`i;+1!J2r3A3O5!%&PFq5 z@TmZAJs_@Rx|_)}oYFHt@|au%pGrS{y)6SYgmY=lD2;(8e*l{V48ot(erq|g- zu{x(O-v2c5Rip86)3;N-Ka#nuUkvfM?_b+xOH@;TgvvlSu~=)snx?FFu z{Y%mTNbvf~>%zjDj#>9|KYr}uaga|sarE%k&d#*yk?77mF*a^oM%0L#(#@NFPMBzN zVNsdbwQC_=T@MexVawKeU*wgQmDSbLlT}}z$jK?>#B7BB?EG-q-xm(&9r>)OscA0B zoqcDRv@MTf1mK($zCZu9+s_Ab!r2ieCEtJ+AjdX#H}y+m7bLWO>F+9K@84dq$kf+6 zgPwJBZk}Qg$asKY+suG@6Y|%FtGj!<);p3Xdfa32O}xZlxLS# z9;VZr_()cIv~#?XJ8$ai#H&BfQzv7^jTU*Lv;v)3*Y71)V$Ho8T5`lf`}dlC4N^r# z$Cev{k2!~-%MCxas4cE`CW`;;Fy5NJ0nlh~@g211a_aoLC;i;|Yo>RYM~LnfHELsw zv$eMO@7LVTOG=8qtHroM25hIqLQz>+9=bA&BJ>Xp4S{QuUt3$# zBO}l1O(W66!_PdF`A}^cKYrY?FW#GM@PVKh2lO1Erl$Jr$xB5FZvfQHj7Kmkw7=gF zbn@FKaHZ3W140{K@>fxkTtJ56ujQtDt9z%L{r-%>xg7J0Q>(3)vi_x=((5IeBWE<& zOdWub_6P3Q_o;xZpMMpU8pi&8?()rw4Td64~*14{D*0;6b?EY8Z~OXYj~{8 zRE8@<@e!ND4DZe1CE45gv`{d8QhQgUVERXQd&kH$lpNVz_XZiRy>&k9CG$-E%Wr=c^p|$jQl(4cZ~2 z%8fF#(t^09{u=9^+-vfC!K?H+2ra{Y<=lx^nWYiw#m-B)BH|cT^_0OX`ArICnM6`3 zy2Ng4WoI`4ti3(F>9>}XSDT3S795r?wq{RmmH}YpnW)RP##|Tz&SLTZ6(5Qt2JVI$2Dp^>s+kvOrf?ZA?V~?zw ztwWHffw=T^G4j-fP%&LiwYgT@nXmr?eV}R>JkVO=RVghIzbi`b#x8QVh2-*+zyd)y? zlB!*uW%1plneU^;A3uJaOkGwG_yF2l7&!P67JiZUS?~P+ZYR}6Z-T`0e>M?vT)}_; xdnLN!Y1Whfy>jn|;iv!Shh+cnUD1V%-kc>BxN8!?qA;88eZzZYcb>of{{V)+t6%^C delta 14270 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 diff --git a/docsrc/source/_images/fittrackee_screenshot-06.png b/docsrc/source/_images/fittrackee_screenshot-06.png index 8f1292e399f2877dd5dd15076eac03410919cfb8..8e6828252d478dbaa02d810380912a7808eaf11c 100644 GIT binary patch delta 17597 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 delta 17567 zcmagE1yodD^gjwBpdern(jrJoNY@b3-Q5z>9g>$uiJ?KdVPFX9P6ebT2BeXOp*sZL z#qaO;e{a3@)_T{wX5q{^_nx!QK6`&YpM9VW7$bEUF*mrM{4_DxKW{Ls9*4JkypMl^ zYJ*A}{|S`}cr(Ek6tn6yMiB(;b!V8v$=6G1O9jcrT20xD+z#s(*Bw}Y>*;m!MVYrh z?`Uh8GOorMO20LG$>(^DYt4`9=L7gz8KM!(lbGAZ${JsDNhs}wJp4n$&&GE6sWyV? zIMe@WrRxU{mKfBk_4m%x)62e2P!X)h*0%Fun*zj+z|y2yyijONU(_dqRJm{gG2f#W z+fU?d)Gua?LgprZNoz)axnfX(Gltiy1sXVAB*jP5k z-J|D-0dsYZbD%$s;ZSbj?;W>`q}q9M%5`Ra7Er~V7~0eK8xcaHPP!@7!^!$L2)Qmj zi2oujk$cB-K635s<#(3H>Obfic2Yl>bg7cPZD}@w3+Oz13s2Mt+pj$M@$OgDyje8u z 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

                                                          ZNui`&!?_3)M8-EqH~*PqjKuI<~R)eU4> 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 diff --git a/docsrc/source/features.rst b/docsrc/source/features.rst index 3d052839..a484d67e 100644 --- a/docsrc/source/features.rst +++ b/docsrc/source/features.rst @@ -109,7 +109,7 @@ Administration - add/remove administration rights - activate his account (*new in 0.6.0*) - update his email (in case his account is locked) (*new in 0.6.0*) - - reset his password (in case his account is locked) (*new in 0.6.0*) + - reset his password (in case his account is locked) (*new in 0.6.0*). If email sending is disabled, it is only possible via CLI. - delete a user - **Sports** diff --git a/docsrc/source/installation.rst b/docsrc/source/installation.rst index e42c11f1..1e9752cf 100644 --- a/docsrc/source/installation.rst +++ b/docsrc/source/installation.rst @@ -395,13 +395,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.6.4): +- Download the last release (for now, it is the release v0.6.5): .. code:: bash - $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.4.tar.gz - $ tar -xzf v0.6.4.tar.gz - $ mv FitTrackee-0.6.4 FitTrackee + $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.5.tar.gz + $ tar -xzf v0.6.5.tar.gz + $ mv FitTrackee-0.6.5 FitTrackee $ cd FitTrackee - Create **.env** from example and update it @@ -521,13 +521,13 @@ Prod environment - Change to the directory where FitTrackee directory is located -- Download the last release (for now, it is the release v0.6.4) and overwrite existing files: +- Download the last release (for now, it is the release v0.6.5) and overwrite existing files: .. code:: bash - $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.4.tar.gz - $ tar -xzf v0.6.4.tar.gz - $ cp -R FitTrackee-0.6.4/* FitTrackee/ + $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.5.tar.gz + $ tar -xzf v0.6.5.tar.gz + $ cp -R FitTrackee-0.6.5/* FitTrackee/ $ cd FitTrackee - Update **.env** if needed (see `Environment variables `__). diff --git a/fittrackee/__init__.py b/fittrackee/__init__.py index 318f0503..3d425904 100644 --- a/fittrackee/__init__.py +++ b/fittrackee/__init__.py @@ -20,7 +20,7 @@ from sqlalchemy.exc import ProgrammingError from fittrackee.emails.email import EmailService from fittrackee.request import CustomRequest -VERSION = __version__ = '0.6.4' +VERSION = __version__ = '0.6.5' db = SQLAlchemy() bcrypt = Bcrypt() migrate = Migrate() diff --git a/fittrackee/application/app_config.py b/fittrackee/application/app_config.py index 768caffa..94b72358 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.6.4" + "version": "0.6.5" }, "status": "success" } @@ -98,7 +98,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.6.4" + "version": "0.6.5" }, "status": "success" } diff --git a/fittrackee/dist/index.html b/fittrackee/dist/index.html index 68460dad..eecbf357 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 746b698c..1e31b602 100644 --- a/fittrackee/dist/service-worker.js +++ b/fittrackee/dist/service-worker.js @@ -1,2 +1,2 @@ -if(!self.define){let s,e={};const i=(i,t)=>(i=new URL(i+".js",t).href,e[i]||new Promise((e=>{if("document"in self){const s=document.createElement("script");s.src=i,s.onload=e,document.head.appendChild(s)}else s=i,importScripts(i),e()})).then((()=>{let s=e[i];if(!s)throw new Error(`Module ${i} didn’t register its module`);return s})));self.define=(t,r)=>{const a=s||("document"in self?document.currentScript.src:"")||location.href;if(e[a])return;let n={};const l=s=>i(s,a),c={module:{uri:a},exports:n,require:l};e[a]=Promise.all(t.map((s=>c[s]||l(s)))).then((s=>(r(...s),n)))}}define(["./workbox-4f586afe"],(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:"0c28edc1168c83c4612e1285d21f7c33"},{url:"/manifest.json",revision:"c61028ca6e9f81bf958e6b66238e2d7c"},{url:"/robots.txt",revision:"b6216d61c03e6ce0c9aea6ca7808f7ca"},{url:"/static/css/admin.73df498d.css",revision:null},{url:"/static/css/app.e8b7692c.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.91fe968e.css",revision:null},{url:"/static/css/workouts.1f6e4a1d.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.d80d691c.js",revision:null},{url:"/static/js/431.0a529e40.js",revision:null},{url:"/static/js/633.031db9b5.js",revision:null},{url:"/static/js/858.62431e1e.js",revision:null},{url:"/static/js/93.35a58b95.js",revision:null},{url:"/static/js/admin.c095abe4.js",revision:null},{url:"/static/js/app.fa6f4b25.js",revision:null},{url:"/static/js/chunk-vendors.6b8389c5.js",revision:null},{url:"/static/js/password.23cdd304.js",revision:null},{url:"/static/js/profile.52d627f4.js",revision:null},{url:"/static/js/reset.b7d4ded2.js",revision:null},{url:"/static/js/statistics.284e20be.js",revision:null},{url:"/static/js/workouts.9770e7ed.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-4f586afe"],(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:"55b386c1b7a53b573c7d9c78cf702391"},{url:"/manifest.json",revision:"c61028ca6e9f81bf958e6b66238e2d7c"},{url:"/robots.txt",revision:"b6216d61c03e6ce0c9aea6ca7808f7ca"},{url:"/static/css/admin.73df498d.css",revision:null},{url:"/static/css/app.e8b7692c.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.91fe968e.css",revision:null},{url:"/static/css/workouts.1f6e4a1d.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.d80d691c.js",revision:null},{url:"/static/js/431.0a529e40.js",revision:null},{url:"/static/js/633.031db9b5.js",revision:null},{url:"/static/js/858.62431e1e.js",revision:null},{url:"/static/js/93.35a58b95.js",revision:null},{url:"/static/js/admin.c095abe4.js",revision:null},{url:"/static/js/app.2222dbc7.js",revision:null},{url:"/static/js/chunk-vendors.6b8389c5.js",revision:null},{url:"/static/js/password.23cdd304.js",revision:null},{url:"/static/js/profile.52d627f4.js",revision:null},{url:"/static/js/reset.b7d4ded2.js",revision:null},{url:"/static/js/statistics.284e20be.js",revision:null},{url:"/static/js/workouts.4c428272.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 4f12194b..377f357f 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/c099adc31f60f87175d5835be73db65e/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\": \"0c28edc1168c83c4612e1285d21f7c33\"\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.e8b7692c.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.91fe968e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/workouts.1f6e4a1d.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.d80d691c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/431.0a529e40.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/633.031db9b5.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/858.62431e1e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/93.35a58b95.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/admin.c095abe4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/app.fa6f4b25.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/chunk-vendors.6b8389c5.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/password.23cdd304.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/profile.52d627f4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/reset.b7d4ded2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/statistics.284e20be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/workouts.9770e7ed.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,iBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,gBACKC,SAAA,oCAEd,CACED,IAAO,0BACKC,SAAA,oCAEd,CACED,IAAO,6BACKC,SAAA,oCAEd,CACED,IAAO,+BACKC,SAAA,oCAEd,CACED,IAAO,0BACKC,SAAA,oCAEd,CACED,IAAO,uBACKC,SAAA,oCAEd,CACED,IAAO,qCACKC,SAAA,oCAEd,CACED,IAAO,uCACKC,SAAA,oCAEd,CACED,IAAO,6BACKC,SAAA,oCAEd,CACED,IAAO,wBACKC,SAAA,oCAEd,CACED,IAAO,yBACKC,SAAA,oCAEd,CACED,IAAO,wBACKC,SAAA,oCAEd,CACED,IAAO,+BACKC,SAAA,oCAEd,CACED,IAAO,wBACKC,SAAA,oCAEd,CACED,IAAO,2BACKC,SAAA,oCAEd,CACED,IAAO,8BACKC,SAAA,oCAEd,CACED,IAAO,0BACKC,SAAA,oCAEd,CACED,IAAO,cACKC,SAAA,oCAEd,CACED,IAAO,iBACKC,SAAA,oCAEd,CACED,IAAO,cACKC,SAAA,oCAEd,CACED,IAAO,iCACKC,SAAA,MAEd,CACED,IAAO,+BACKC,SAAA,MAEd,CACED,IAAO,mCACKC,SAAA,oCAEd,CACED,IAAO,0BACKC,SAAA,oCAEd,CACED,IAAO,mCACKC,SAAA,MAEd,CACED,IAAO,iCACKC,SAAA,MAEd,CACED,IAAO,sCACKC,SAAA,MAEd,CACED,IAAO,oCACKC,SAAA,MAEd,CACED,IAAO,wCACKC,SAAA,oCAEd,CACED,IAAO,wCACKC,SAAA,oCAEd,CACED,IAAO,wCACKC,SAAA,oCAEd,CACED,IAAO,yCACKC,SAAA,oCAEd,CACED,IAAO,0CACKC,SAAA,oCAEd,CACED,IAAO,kDACKC,SAAA,MAEd,CACED,IAAO,oDACKC,SAAA,MAEd,CACED,IAAO,mDACKC,SAAA,MAEd,CACED,IAAO,kDACKC,SAAA,MAEd,CACED,IAAO,uDACKC,SAAA,MAEd,CACED,IAAO,qDACKC,SAAA,MAEd,CACED,IAAO,qDACKC,SAAA,MAEd,CACED,IAAO,sDACKC,SAAA,MAEd,CACED,IAAO,uDACKC,SAAA,MAEd,CACED,IAAO,sDACKC,SAAA,MAEd,CACED,IAAO,sDACKC,SAAA,MAEd,CACED,IAAO,wDACKC,SAAA,MAEd,CACED,IAAO,+BACKC,SAAA,MAEd,CACED,IAAO,gDACKC,SAAA,MAEd,CACED,IAAO,mDACKC,SAAA,MAEd,CACED,IAAO,oDACKC,SAAA,MAEd,CACED,IAAO,6BACKC,SAAA,MAEd,CACED,IAAO,6BACKC,SAAA,MAEd,CACED,IAAO,6BACKC,SAAA,MAEd,CACED,IAAO,6BACKC,SAAA,MAEd,CACED,IAAO,4BACKC,SAAA,MAEd,CACED,IAAO,+BACKC,SAAA,MAEd,CACED,IAAO,6BACKC,SAAA,MAEd,CACED,IAAO,uCACKC,SAAA,MAEd,CACED,IAAO,kCACKC,SAAA,MAEd,CACED,IAAO,iCACKC,SAAA,MAEd,CACED,IAAO,+BACKC,SAAA,MAEd,CACED,IAAO,oCACKC,SAAA,MAEd,CACED,IAAO,kCACKC,SAAA,OAEb"} \ No newline at end of file +{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/df95bc8a1ddc98426e41550aa571fa49/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\": \"55b386c1b7a53b573c7d9c78cf702391\"\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.e8b7692c.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.91fe968e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/workouts.1f6e4a1d.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.d80d691c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/431.0a529e40.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/633.031db9b5.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/858.62431e1e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/93.35a58b95.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/admin.c095abe4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/app.2222dbc7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/chunk-vendors.6b8389c5.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/password.23cdd304.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/profile.52d627f4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/reset.b7d4ded2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/statistics.284e20be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/workouts.4c428272.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,iBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,gBACKC,SAAA,oCAEd,CACED,IAAO,0BACKC,SAAA,oCAEd,CACED,IAAO,6BACKC,SAAA,oCAEd,CACED,IAAO,+BACKC,SAAA,oCAEd,CACED,IAAO,0BACKC,SAAA,oCAEd,CACED,IAAO,uBACKC,SAAA,oCAEd,CACED,IAAO,qCACKC,SAAA,oCAEd,CACED,IAAO,uCACKC,SAAA,oCAEd,CACED,IAAO,6BACKC,SAAA,oCAEd,CACED,IAAO,wBACKC,SAAA,oCAEd,CACED,IAAO,yBACKC,SAAA,oCAEd,CACED,IAAO,wBACKC,SAAA,oCAEd,CACED,IAAO,+BACKC,SAAA,oCAEd,CACED,IAAO,wBACKC,SAAA,oCAEd,CACED,IAAO,2BACKC,SAAA,oCAEd,CACED,IAAO,8BACKC,SAAA,oCAEd,CACED,IAAO,0BACKC,SAAA,oCAEd,CACED,IAAO,cACKC,SAAA,oCAEd,CACED,IAAO,iBACKC,SAAA,oCAEd,CACED,IAAO,cACKC,SAAA,oCAEd,CACED,IAAO,iCACKC,SAAA,MAEd,CACED,IAAO,+BACKC,SAAA,MAEd,CACED,IAAO,mCACKC,SAAA,oCAEd,CACED,IAAO,0BACKC,SAAA,oCAEd,CACED,IAAO,mCACKC,SAAA,MAEd,CACED,IAAO,iCACKC,SAAA,MAEd,CACED,IAAO,sCACKC,SAAA,MAEd,CACED,IAAO,oCACKC,SAAA,MAEd,CACED,IAAO,wCACKC,SAAA,oCAEd,CACED,IAAO,wCACKC,SAAA,oCAEd,CACED,IAAO,wCACKC,SAAA,oCAEd,CACED,IAAO,yCACKC,SAAA,oCAEd,CACED,IAAO,0CACKC,SAAA,oCAEd,CACED,IAAO,kDACKC,SAAA,MAEd,CACED,IAAO,oDACKC,SAAA,MAEd,CACED,IAAO,mDACKC,SAAA,MAEd,CACED,IAAO,kDACKC,SAAA,MAEd,CACED,IAAO,uDACKC,SAAA,MAEd,CACED,IAAO,qDACKC,SAAA,MAEd,CACED,IAAO,qDACKC,SAAA,MAEd,CACED,IAAO,sDACKC,SAAA,MAEd,CACED,IAAO,uDACKC,SAAA,MAEd,CACED,IAAO,sDACKC,SAAA,MAEd,CACED,IAAO,sDACKC,SAAA,MAEd,CACED,IAAO,wDACKC,SAAA,MAEd,CACED,IAAO,+BACKC,SAAA,MAEd,CACED,IAAO,gDACKC,SAAA,MAEd,CACED,IAAO,mDACKC,SAAA,MAEd,CACED,IAAO,oDACKC,SAAA,MAEd,CACED,IAAO,6BACKC,SAAA,MAEd,CACED,IAAO,6BACKC,SAAA,MAEd,CACED,IAAO,6BACKC,SAAA,MAEd,CACED,IAAO,6BACKC,SAAA,MAEd,CACED,IAAO,4BACKC,SAAA,MAEd,CACED,IAAO,+BACKC,SAAA,MAEd,CACED,IAAO,6BACKC,SAAA,MAEd,CACED,IAAO,uCACKC,SAAA,MAEd,CACED,IAAO,kCACKC,SAAA,MAEd,CACED,IAAO,iCACKC,SAAA,MAEd,CACED,IAAO,+BACKC,SAAA,MAEd,CACED,IAAO,oCACKC,SAAA,MAEd,CACED,IAAO,kCACKC,SAAA,OAEb"} \ No newline at end of file diff --git a/fittrackee/dist/static/js/app.fa6f4b25.js b/fittrackee/dist/static/js/app.2222dbc7.js similarity index 99% rename from fittrackee/dist/static/js/app.fa6f4b25.js rename to fittrackee/dist/static/js/app.2222dbc7.js index 7a61a89c..a2354d7e 100644 --- a/fittrackee/dist/static/js/app.fa6f4b25.js +++ b/fittrackee/dist/static/js/app.2222dbc7.js @@ -1,2 +1,2 @@ -(function(){var e={5167:function(e,t,n){"use strict";var a=n(9669),r=n.n(a),s=n(12),o=n(8602),i=n(2024);const l=r().create({baseURL:(0,i.k)()});l.interceptors.request.use((e=>{const t=s.Z.getters[o.YN.GETTERS.AUTH_TOKEN];if(t){const n=`Bearer ${t}`;e.headers&&e.headers.Authorization!==n&&(e.headers.Authorization=`Bearer ${t}`)}return e}),(e=>Promise.reject(e))),t["Z"]=l},2540:function(e,t,n){"use strict";var a=n(3324);function r(){const e=n(4612),t={};return e.keys().forEach((n=>{const a=n.match(/([A-Za-z0-9-_]+)\./i);if(a&&a.length>1){const r=a[1];t[r]=e(n).default}})),t}t["Z"]=(0,a.o)({legacy:!1,locale:"en",fallbackLocale:"en",globalInjection:!0,messages:r()})},9350:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return _}});var a={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:a}=e;return t(["under ",n(a(0))," license "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Source code"])}},r={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:a}=e;return t(["Are you sure you want to delete ",n(a(0))," account? All data will be deleted, this cannot be undone."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:a}=e;return t(["Are you sure you want to reset ",n(a(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"])}}}}},s={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 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"])}}},o={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Resend confirmation email"])},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"])])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation"])},HOME:e=>{const{normalize:t}=e;return t(["Home"])},HERE:e=>{const{normalize:t}=e;return t(["here"])},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={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Transport)"])}},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"])}}},d={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"])}}},m={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:a}=e;return t(["Your password have been updated. Click ",n(a(0))," to log in."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Account edition"])},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"])},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:a}=e;return t(["Please ",n(a(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"])},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.'])}},S={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_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"])}},_={about:a,admin:r,api:s,buttons:o,common:i,dashboard:l,error:c,sports:u,statistics:d,user:m,workouts:S}},1079:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return _}});var a={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:a}=e;return t(["sous license ",n(a(0))," (en)"])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Code source (en)"])}},r={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:a}=e;return t(["Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur ",n(a(0))," ? Toutes les données seront définitivement."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:a}=e;return t(["Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur ",n(a(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"])}}}}},s={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(["Email : une adresse email valide doit être fournie."])},"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 email 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 email 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"])}}},o={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Envoyer à nouveau l'email de confirmation"])},BACK:e=>{const{normalize:t}=e;return t(["Précédent"])},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"])])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation (en)"])},HOME:e=>{const{normalize:t}=e;return t(["Accueil"])},HERE:e=>{const{normalize:t}=e;return t(["ici"])},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"])}},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={"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)"])}},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 (Electrique)"])}},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"])}}},d={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"])}}},m={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 votre boite mail. Un nouvel email de confirmation a été envoyé à l'adresse email 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 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(["Email"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Saisir une adresse email valide."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Saisir 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 votre boite mail. Si vote adresse est dans notre base de données, vous recevrez un email 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:a}=e;return t(["Votre mot de passe a été mis à jour. Cliquez ",n(a(0))," pour vous connecter."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour du compte"])},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"])},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:a}=e;return t(["Veuillez vous ",n(a(0))," pour changer de nouveau votre adresse email 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"])},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 boite email pour valider votre nouvelle adresse email."])},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 email 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 l'email 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.'])}},S={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_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"])}},_={about:a,admin:r,api:s,buttons:o,common:i,dashboard:l,error:c,sports:u,statistics:d,user:m,workouts:S}},811:function(e,t,n){"use strict";var a=n(3328),r=n(8278),s=n(9963),o=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(5793),c=n(2715),u=n(3577);const d=e=>((0,l.dD)("data-v-2c73279e"),e=e(),(0,l.Cn)(),e),m={id:"footer"},S={class:"footer-items"},_={class:"footer-item"},E=d((()=>(0,l._)("strong",null,"FitTrackee",-1))),p=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),T={class:"footer-item"},A={key:0,class:"footer-item bullet"},U={key:1,class:"footer-item"},O=["href"],R=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),I={class:"footer-item"},g={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"};var w=(0,l.aZ)({props:{version:null,adminContact:null},setup(e){const t=e,{adminContact:n,version:a}=(0,c.BK)(t);return(e,t)=>{const r=(0,l.up)("router-link");return(0,l.wg)(),(0,l.iD)("div",m,[(0,l._)("div",S,[(0,l._)("div",_,[E,(0,l.Uk)(" v"+(0,u.zw)((0,c.SU)(a)),1)]),p,(0,l._)("div",T,[(0,l.Wm)(r,{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",U,[(0,l._)("a",{href:`mailto:${(0,c.SU)(n)}`},(0,u.zw)(e.$t("common.CONTACT")),9,O)])):(0,l.kq)("",!0),R,(0,l._)("div",I,[(0,l._)("a",g,(0,u.zw)(e.$t("common.DOCUMENTATION")),1)])])])}}}),v=n(3744);const f=(0,v.Z)(w,[["__scopeId","data-v-2c73279e"]]);var N=f,h=n(3324),C=n(6595),D=n(8602),k=n(9917),z=n(6287);const P=e=>((0,l.dD)("data-v-0d4f0b8f"),e=e(),(0,l.Cn)(),e),M={id:"nav"},y={class:"nav-container"},b={class:"nav-app-name"},L={class:"nav-items-close"},G=P((()=>(0,l._)("div",{class:"app-name"},"FitTrackee",-1))),F={key:0,class:"nav-items-group"},W=P((()=>(0,l._)("div",{class:"nav-item nav-separator"},null,-1))),Y={class:"nav-items-user-menu"},x={key:0,class:"nav-items-group"},$={class:"nav-item nav-profile-img"},Z={key:1,class:"nav-items-group"},K=P((()=>(0,l._)("i",{class:"fa fa-language"},null,-1)));var B=(0,l.aZ)({emits:["menuInteraction"],setup(e,{emit:t}){const{locale:n}=(0,h.QT)(),a=(0,k.o)(),r=(0,l.Fl)((()=>a.getters[D.YN.GETTERS.AUTH_USER_PROFILE])),s=(0,l.Fl)((()=>a.getters[D.YN.GETTERS.IS_AUTHENTICATED])),o=(0,l.Fl)((()=>a.getters[D.SY.GETTERS.LANGUAGE]));let i=(0,c.iH)(!1);function d(){i.value=!0,t("menuInteraction",!0)}function m(){i.value=!1,t("menuInteraction",!1)}function S(e){n.value=e.value.toString(),a.commit(D.SY.MUTATIONS.UPDATE_LANG,e.value)}function _(){a.dispatch(D.YN.ACTIONS.LOGOUT)}return(e,t)=>{const n=(0,l.up)("router-link"),a=(0,l.up)("Dropdown");return(0,l.wg)(),(0,l.iD)("div",M,[(0,l._)("div",y,[(0,l._)("div",b,[(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":(0,c.SU)(i)}])},[(0,l._)("i",{class:"fa fa-bars hamburger-icon",onClick:t[1]||(t[1]=e=>d())})],2),(0,l._)("div",{class:(0,u.C_)(["nav-items",{"menu-open":(0,c.SU)(i)}])},[(0,l._)("div",L,[G,(0,l._)("i",{class:(0,u.C_)(["fa fa-close close-icon nav-item",{"menu-closed":!(0,c.SU)(i)}]),onClick:t[2]||(t[2]=e=>m())},null,2)]),(0,l._)("div",{class:"nav-items-app-menu",onClick:t[3]||(t[3]=e=>m())},[(0,c.SU)(s)?((0,l.wg)(),(0,l.iD)("div",F,[(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)(s)&&(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),W])):(0,l.kq)("",!0)]),(0,l._)("div",Y,[(0,c.SU)(s)?((0,l.wg)(),(0,l.iD)("div",x,[(0,l._)("div",$,[(0,l.Wm)(C.Z,{user:(0,c.SU)(r)},null,8,["user"])]),(0,l.Wm)(n,{class:"nav-item",to:"/profile",onClick:m},{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",Z,[(0,l.Wm)(n,{class:"nav-item",to:"/login",onClick:m},{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:m},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("user.REGISTER")),1)])),_:1})])),(0,c.SU)(z.mT)&&(0,c.SU)(o)?((0,l.wg)(),(0,l.j4)(a,{key:2,class:"nav-item",options:(0,c.SU)(z.mT),selected:(0,c.SU)(o),onSelected:S},{default:(0,l.w5)((()=>[K])),_:1},8,["options","selected"])):(0,l.kq)("",!0)])],2)])])}}});const H=(0,v.Z)(B,[["__scopeId","data-v-0d4f0b8f"]]);var q=H,j=n(7167);const V={id:"no-config"},X={class:"error-page"},J={class:"error-img"},Q=["innerHTML"];var ee=(0,l.aZ)({setup(e){return(e,t)=>((0,l.wg)(),(0,l.iD)("div",V,[(0,l._)("div",X,[(0,l._)("div",J,[(0,l.Wm)(j.Z)]),(0,l._)("p",{class:"error-message",innerHTML:e.$t("error.APP_ERROR")},null,8,Q)])]))}});const te=(0,v.Z)(ee,[["__scopeId","data-v-47759238"]]);var ne=te;const ae=(0,l._)("div",{id:"top"},null,-1),re={key:0,class:"app-container"},se={class:"app-loading"},oe={class:"container scroll"},ie=(0,l._)("i",{class:"fa fa-chevron-up","aria-hidden":"true"},null,-1),le=[ie];var ce=(0,l.aZ)({setup(e){const t=(0,k.o)(),n=(0,l.Fl)((()=>t.getters[D.SY.GETTERS.APP_CONFIG])),a=(0,l.Fl)((()=>t.getters[D.SY.GETTERS.APP_LOADING])),r=(0,c.iH)(!1),s=(0,c.iH)(!1);function o(e){r.value=e}function i(e){return e.getBoundingClientRect().top=0}function d(){window.onscroll=()=>{let e=document.querySelector("#bottom");s.value=null!==e&&i(e)}}function m(){window.scrollTo({top:0,behavior:"smooth"}),setTimeout((()=>{s.value=!1}),300)}return(0,l.wF)((()=>t.dispatch(D.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,[ae,(0,l.Wm)(q,{onMenuInteraction:o}),(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("div",re,[(0,l._)("div",se,[(0,l.Wm)(i)])])):((0,l.wg)(),(0,l.iD)("div",{key:1,class:(0,u.C_)(["app-container",{"hide-scroll":r.value}])},[(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(d,{key:0})):((0,l.wg)(),(0,l.j4)(ne,{key:1}))],2)),(0,l._)("div",oe,[(0,l._)("div",{class:(0,u.C_)(["scroll-button",{"display-button":s.value}]),onClick:m},le,2)]),(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(N,{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 ue=ce;var de=ue,me=n(2540),Se=n(8733),_e=n(12);const Ee={class:"alert-message"},pe=["innerHTML"];var Te=(0,l.aZ)({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,pe)]))}});const Ae=(0,v.Z)(Te,[["__scopeId","data-v-69d7e4ff"]]);var Ue=Ae,Oe=n(2531);const Re={class:"custom-textarea"},Ie=["id","name","maxLenght","disabled"],ge={class:"remaining-chars"};var we=(0,l.aZ)({props:{name:null,charLimit:{default:500},disabled:{type:Boolean,default:!1},input:{default:""}},emits:["updateValue"],setup(e,{emit:t}){const n=e;let a=(0,c.iH)("");function r(e){t("updateValue",e.target.value)}return(0,l.YP)((()=>n.input),(e=>{a.value=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=>(0,c.dq)(a)?a.value=e:a=e),onInput:r},null,40,Ie),[[s.nr,(0,c.SU)(a)]]),(0,l._)("div",ge,(0,u.zw)(t.$t("workouts.REMAINING_CHARS"))+": "+(0,u.zw)((0,c.SU)(a).length)+"/"+(0,u.zw)(e.charLimit),1)]))}});const ve=(0,v.Z)(we,[["__scopeId","data-v-3ec2aca2"]]);var fe=ve,Ne=n(3649);const he=(0,l.Uk)(" "+(0,u.zw)(" ")+" ");var Ce=(0,l.aZ)({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:a,distance:r,speed:s,strong:o,unitFrom:i,useImperialUnits:d}=(0,c.BK)(t),m=(0,l.Fl)((()=>d.value?Ne.Dl[i.value].defaultTarget:i.value)),S=(0,l.Fl)((()=>d.value?(0,Ne.sC)(r.value,i.value,m.value,n.value):parseFloat(r.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)(o)}])},(0,u.zw)((0,c.SU)(S)),3),he,(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("span",{key:0,class:(0,u.C_)(["unit",{strong:(0,c.SU)(o)}])},(0,u.zw)((0,c.SU)(m))+(0,u.zw)((0,c.SU)(s)?"/h":""),3)):(0,l.kq)("",!0)],64))}});const De=(0,v.Z)(Ce,[["__scopeId","data-v-f46ff1d6"]]);var ke=De,ze=n(2119);const Pe={class:"dropdown-wrapper"},Me={key:0,class:"dropdown-list"},ye=["onClick"];var be=(0,l.aZ)({props:{options:null,selected:null},emits:{selected:e=>e},setup(e,{emit:t}){const n=e,a=(0,ze.yj)();let r=(0,c.iH)(!1),s=n.options.map((e=>e));function o(){r.value=!r.value}function i(e){t("selected",e),r.value=!1}return(0,l.YP)((()=>a.path),(()=>r.value=!1)),(t,n)=>((0,l.wg)(),(0,l.iD)("div",Pe,[(0,l._)("div",{class:"dropdown-selected",onClick:o},[(0,l.WI)(t.$slots,"default")]),(0,c.SU)(r)?((0,l.wg)(),(0,l.iD)("ul",Me,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)((0,c.SU)(s),((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,ye)))),128))])):(0,l.kq)("",!0)]))}});const Le=(0,v.Z)(be,[["__scopeId","data-v-ca61364c"]]);var Ge=Le;const Fe={class:"error-message"},We={key:0},Ye={key:1};var xe=(0,l.aZ)({props:{message:null},setup(e){const t=e,{message:n}=(0,c.BK)(t);return(e,t)=>((0,l.wg)(),(0,l.iD)("div",Fe,[Array.isArray((0,c.SU)(n))?((0,l.wg)(),(0,l.iD)("ul",We,[((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",Ye,(0,u.zw)(e.$t((0,c.SU)(n))),1))]))}});const $e=(0,v.Z)(xe,[["__scopeId","data-v-2659a79a"]]);var Ze=$e;const Ke={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"},Be=(0,l._)("desc",{id:"cyclingSportDescription"}," silhouette of a person riding a bicycle ",-1),He=(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),qe=[Be,He];function je(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",Ke,qe)}var Ve={name:"CyclingSport"};const Xe=(0,v.Z)(Ve,[["render",je]]);var Je=Xe;const Qe={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"},et=(0,l._)("desc",{id:"cyclingTransportDescription"}," silhouette of a person riding a bicycle (for transportation) ",-1),tt=(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),nt=[et,tt];function at(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",Qe,nt)}var rt={name:"CyclingTransport"};const st=(0,v.Z)(rt,[["render",at]]);var ot=st;const it={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"},lt=(0,l._)("desc",{id:"hikingDescription"},"silhouette of a person hiking",-1),ct=(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),ut=[lt,ct];function dt(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",it,ut)}var mt={name:"Hiking"};const St=(0,v.Z)(mt,[["render",dt]]);var _t=St;const Et={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"},pt=(0,l._)("desc",{id:"mountainBikingDescription"}," silhouette of a person riding a mountain bike ",-1),Tt=(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),At=[pt,Tt];function Ut(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",Et,At)}var Ot={name:"MountainBiking"};const Rt=(0,v.Z)(Ot,[["render",Ut]]);var It=Rt;const gt={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"},wt=(0,l.uE)(' silhouette of a person riding an electric mountain bike ',18),vt=[wt];function ft(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",gt,vt)}var Nt={name:"MountainBikingElectric"};const ht=(0,v.Z)(Nt,[["render",ft]]);var Ct=ht;const Dt={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"},kt=(0,l._)("desc",{id:"rowingDescription"},"silhouette of a person rowing",-1),zt=(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),Pt=[kt,zt];function Mt(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",Dt,Pt)}var yt={name:"Rowing"};const bt=(0,v.Z)(yt,[["render",Mt]]);var Lt=bt;const Gt={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"},Ft=(0,l._)("desc",{id:"runningDescription"},"silhouette of a running person",-1),Wt=(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),Yt=[Ft,Wt];function xt(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",Gt,Yt)}var $t={name:"Running"};const Zt=(0,v.Z)($t,[["render",xt]]);var Kt=Zt;const Bt={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"},Ht=(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),jt=[Ht,qt];function Vt(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",Bt,jt)}var Xt={name:"SkiingAlpine"};const Jt=(0,v.Z)(Xt,[["render",Vt]]);var Qt=Jt;const en={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"},tn=(0,l._)("desc",{id:"crossCountrySkiingDescription"}," silhouette of a person skiing (cross country) ",-1),nn=(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),an=[tn,nn];function rn(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",en,an)}var sn={name:"SkiingCrossCountry"};const on=(0,v.Z)(sn,[["render",rn]]);var ln=on;const cn={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"},un=(0,l.uE)('silhouette of a person with snowshoes',6),dn=[un];function mn(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",cn,dn)}var Sn={name:"Snowshoes"};const _n=(0,v.Z)(Sn,[["render",mn]]);var En=_n;const pn={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"},Tn=(0,l._)("desc",{id:"trailDescription"},"silhouette of a person running (trail)",-1),An=(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),Un=[Tn,An];function On(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",pn,Un)}var Rn={name:"Trail"};const In=(0,v.Z)(Rn,[["render",On]]);var gn=In;const wn={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"},vn=(0,l.uE)('silhouette of a walking person',3),fn=[vn];function Nn(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",wn,fn)}var hn={name:"Walking"};const Cn=(0,v.Z)(hn,[["render",Nn]]);var Dn=Cn;const kn=["title"];var zn=(0,l.aZ)({props:{sportLabel:null,color:null,title:{default:""}},setup(e){const t=e,{color:n,sportLabel:a,title:r}=(0,c.BK)(t),s=(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)(s)[(0,c.SU)(a)]}),title:(0,c.SU)(r)?(0,c.SU)(r):e.$t(`sports.${(0,c.SU)(a)}.LABEL`)},["Cycling (Sport)"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(Je,{key:0})):(0,l.kq)("",!0),"Cycling (Transport)"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(ot,{key:1})):(0,l.kq)("",!0),"Hiking"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(_t,{key:2})):(0,l.kq)("",!0),"Mountain Biking"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(It,{key:3})):(0,l.kq)("",!0),"Mountain Biking (Electric)"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(Ct,{key:4})):(0,l.kq)("",!0),"Rowing"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(Lt,{key:5})):(0,l.kq)("",!0),"Running"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(Kt,{key:6})):(0,l.kq)("",!0),"Skiing (Alpine)"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(Qt,{key:7})):(0,l.kq)("",!0),"Skiing (Cross Country)"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(ln,{key:8})):(0,l.kq)("",!0),"Snowshoes"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(En,{key:9})):(0,l.kq)("",!0),"Trail"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(gn,{key:10})):(0,l.kq)("",!0),"Walking"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(Dn,{key:11})):(0,l.kq)("",!0)],12,kn))}});const Pn=zn;var Mn=Pn;const yn={class:"loader"};function bn(e,t){return(0,l.wg)(),(0,l.iD)("div",yn)}const Ln={},Gn=(0,v.Z)(Ln,[["render",bn],["__scopeId","data-v-4c9921ee"]]);var Fn=Gn;const Wn={id:"modal"},Yn={class:"custom-modal"},xn={key:0,class:"modal-message"},$n={key:1,class:"modal-message"},Zn={class:"modal-buttons"};var Kn=(0,l.aZ)({props:{title:null,message:null,strongMessage:{default:()=>null}},emits:["cancelAction","confirmAction"],setup(e,{emit:t}){const n=e,a=(0,k.o)(),{title:r,message:s,strongMessage:o}=(0,c.BK)(n),i=(0,l.Fl)((()=>a.getters[D.SY.GETTERS.ERROR_MESSAGES]));return(0,l.Ah)((()=>a.commit(D.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(e,n)=>{const a=(0,l.up)("i18n-t"),d=(0,l.up)("ErrorMessage"),m=(0,l.up)("Card");return(0,l.wg)(),(0,l.iD)("div",Wn,[(0,l._)("div",Yn,[(0,l.Wm)(m,null,{title:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,c.SU)(r)),1)])),content:(0,l.w5)((()=>[(0,c.SU)(o)?((0,l.wg)(),(0,l.iD)("div",xn,[(0,l.Wm)(a,{keypath:(0,c.SU)(s)},{default:(0,l.w5)((()=>[(0,l._)("span",null,(0,u.zw)((0,c.SU)(o)),1)])),_:1},8,["keypath"])])):((0,l.wg)(),(0,l.iD)("div",$n,(0,u.zw)((0,c.SU)(s)),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",Zn,[(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 Bn=(0,v.Z)(Kn,[["__scopeId","data-v-e8fcfaba"]]);var Hn=Bn;const qn=[{target:Ue,name:"AlertMessage"},{target:Oe.Z,name:"Card"},{target:fe,name:"CustomTextArea"},{target:ke,name:"Distance"},{target:Ge,name:"Dropdown"},{target:Ze,name:"ErrorMessage"},{target:Fn,name:"Loader"},{target:Hn,name:"Modal"},{target:Mn,name:"SportImage"}],jn={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 Vn=n(631);a.kL.register(a.ZL,a.jn,a.od,a.De,a.Dx,a.u,a.Gu,a.vn,a.uw,a.ST,a.f$,r.Z);const Xn=(0,s.ri)(de).provide("sportColors",Vn.Zo).use(me.Z).use(_e.Z).use(Se.Z).use(o.ZP,{name:"VFullscreen"}).directive("click-outside",jn);qn.forEach((e=>{Xn.component(e.name,e.target)})),Xn.mount("#app")},8733:function(e,t,n){"use strict";n.d(t,{Z:function(){return si}});var a=n(2119),r=n(5793),s=n(3577),o=n(9963),i=n(2715),l=n(8602),c=n(9917),u=n(8966);const d=e=>((0,r.dD)("data-v-24ec93e2"),e=e(),(0,r.Cn)(),e),m={id:"admin-app",class:"admin-card"},S=["onSubmit"],_={for:"admin_contact"},E=["value"],p=["disabled"],T={for:"max_users"},A=["disabled"],U={class:"user-limit-help"},O={class:"info-box"},R=d((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),I={for:"max_single_file_size"},g=["disabled"],w={for:"max_zip_file_size"},v=["disabled"],f={for:"gpx_limit_import"},N=["disabled"],h={key:1,class:"form-buttons"},C={class:"confirm",type:"submit"},D=["onClick"],k={key:2,class:"form-buttons"};var z=(0,r.aZ)({props:{appConfig:null,edition:{type:Boolean,default:!1}},setup(e){const t=e,{edition:n}=(0,i.BK)(t),d=(0,c.o)(),z=(0,a.tv)(),P=(0,i.qj)({admin_contact:"",max_users:0,max_single_file_size:0,max_zip_file_size:0,gpx_limit_import:0}),M=(0,r.Fl)((()=>d.getters[l.SY.GETTERS.ERROR_MESSAGES]));function y(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(){y(t.appConfig),d.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),z.push("/admin/application")}function L(){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,r.wF)((()=>{t.appConfig&&y(t.appConfig)})),(e,t)=>{const a=(0,r.up)("ErrorMessage"),l=(0,r.up)("Card");return(0,r.wg)(),(0,r.iD)("div",m,[(0,r.Wm)(l,null,{title:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(e.$t("admin.APP_CONFIG.TITLE")),1)])),content:(0,r.w5)((()=>[(0,r._)("form",{class:"admin-form",onSubmit:(0,o.iM)(L,["prevent"])},[(0,r._)("label",_,[(0,r.Uk)((0,s.zw)(e.$t("admin.APP_CONFIG.ADMIN_CONTACT"))+": ",1),(0,i.SU)(n)||(0,i.SU)(P).admin_contact?(0,r.wy)(((0,r.wg)(),(0,r.iD)("input",{key:1,id:"admin_contact",name:"admin_contact",type:"email","onUpdate:modelValue":t[0]||(t[0]=e=>(0,i.SU)(P).admin_contact=e),disabled:!(0,i.SU)(n)},null,8,p)),[[o.nr,(0,i.SU)(P).admin_contact]]):((0,r.wg)(),(0,r.iD)("input",{key:0,class:"no-contact",value:e.$t("admin.APP_CONFIG.NO_CONTACT_EMAIL"),disabled:""},null,8,E))]),(0,r._)("label",T,[(0,r.Uk)((0,s.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_LABEL"))+": ",1),(0,r.wy)((0,r._)("input",{id:"max_users",name:"max_users",type:"number",min:"0","onUpdate:modelValue":t[1]||(t[1]=e=>(0,i.SU)(P).max_users=e),disabled:!(0,i.SU)(n)},null,8,A),[[o.nr,(0,i.SU)(P).max_users]])]),(0,r._)("div",U,[(0,r._)("span",O,[R,(0,r.Uk)(" "+(0,s.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_HELP")),1)])]),(0,r._)("label",I,[(0,r.Uk)((0,s.zw)(e.$t("admin.APP_CONFIG.SINGLE_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,r.wy)((0,r._)("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=>(0,i.SU)(P).max_single_file_size=e),disabled:!(0,i.SU)(n)},null,8,g),[[o.nr,(0,i.SU)(P).max_single_file_size]])]),(0,r._)("label",w,[(0,r.Uk)((0,s.zw)(e.$t("admin.APP_CONFIG.ZIP_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,r.wy)((0,r._)("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=>(0,i.SU)(P).max_zip_file_size=e),disabled:!(0,i.SU)(n)},null,8,v),[[o.nr,(0,i.SU)(P).max_zip_file_size]])]),(0,r._)("label",f,[(0,r.Uk)((0,s.zw)(e.$t("admin.APP_CONFIG.MAX_FILES_IN_ZIP_LABEL"))+": ",1),(0,r.wy)((0,r._)("input",{id:"gpx_limit_import",name:"gpx_limit_import",type:"number",min:"0","onUpdate:modelValue":t[4]||(t[4]=e=>(0,i.SU)(P).gpx_limit_import=e),disabled:!(0,i.SU)(n)},null,8,N),[[o.nr,(0,i.SU)(P).gpx_limit_import]])]),(0,i.SU)(M)?((0,r.wg)(),(0,r.j4)(a,{key:0,message:(0,i.SU)(M)},null,8,["message"])):(0,r.kq)("",!0),(0,i.SU)(n)?((0,r.wg)(),(0,r.iD)("div",h,[(0,r._)("button",C,(0,s.zw)(e.$t("buttons.SUBMIT")),1),(0,r._)("button",{class:"cancel",onClick:(0,o.iM)(b,["prevent"])},(0,s.zw)(e.$t("buttons.CANCEL")),9,D)])):((0,r.wg)(),(0,r.iD)("div",k,[(0,r._)("button",{class:"confirm",onClick:t[5]||(t[5]=(0,o.iM)((t=>e.$router.push("/admin/application/edit")),["prevent"]))},(0,s.zw)(e.$t("buttons.EDIT")),1),(0,r._)("button",{class:"cancel",onClick:t[6]||(t[6]=(0,o.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,s.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))],40,S)])),_:1})])}}}),P=n(3744);const M=(0,P.Z)(z,[["__scopeId","data-v-24ec93e2"]]);var y=M;const b={class:"stat-card"},L={class:"stat-content box"},G={class:"stat-icon"},F={class:"stat-details"},W={class:"stat-huge"},Y={class:"stat"};var x=(0,r.aZ)({props:{icon:null,text:null,value:null},setup(e){const t=e,{icon:n,text:a,value:o}=(0,i.BK)(t);return(e,t)=>((0,r.wg)(),(0,r.iD)("div",b,[(0,r._)("div",L,[(0,r._)("div",G,[(0,r._)("i",{class:(0,s.C_)(["fa",`fa-${(0,i.SU)(n)}`])},null,2)]),(0,r._)("div",F,[(0,r._)("div",W,(0,s.zw)((0,i.SU)(o)),1),(0,r._)("div",Y,(0,s.zw)((0,i.SU)(a)),1)])])]))}});const $=x;var Z=$;const K={id:"user-stats"};var B=(0,r.aZ)({props:{appStatistics:null},setup(e){const t=e,{appStatistics:n}=(0,i.BK)(t),a=(0,r.Fl)((()=>(0,u.Z)(n.value.uploads_dir_size,!1)));return(e,t)=>((0,r.wg)(),(0,r.iD)("div",K,[(0,r.Wm)(Z,{icon:"users",value:(0,i.SU)(n).users,text:e.$t("admin.USER",(0,i.SU)(n).users)},null,8,["value","text"]),(0,r.Wm)(Z,{icon:"tags",value:(0,i.SU)(n).sports,text:e.$t("workouts.SPORT",(0,i.SU)(n).sports)},null,8,["value","text"]),(0,r.Wm)(Z,{icon:"calendar",value:(0,i.SU)(n).workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(n).workouts)},null,8,["value","text"]),(0,r.Wm)(Z,{icon:"folder-open",value:(0,i.SU)(a).size,text:(0,i.SU)(a).suffix},null,8,["value","text"])]))}});const H=B;var q=H,j=n(2531);const V=e=>((0,r.dD)("data-v-0dd66f89"),e=e(),(0,r.Cn)(),e),X={id:"admin-menu",class:"center-card"},J={class:"admin-menu description-list"},Q={class:"application-config-details"},ee=V((()=>(0,r._)("br",null,null,-1))),te={class:"registration-status"},ne={key:0,class:"email-sending-status"},ae=V((()=>(0,r._)("i",{class:"fa fa-exclamation-triangle","aria-hidden":"true"},null,-1)));var re=(0,r.aZ)({props:{appConfig:null,appStatistics:{default:()=>({})}},setup(e){const t=e,{appConfig:n,appStatistics:a}=(0,i.BK)(t);return(e,t)=>{const o=(0,r.up)("router-link");return(0,r.wg)(),(0,r.iD)("div",X,[(0,r.Wm)(j.Z,null,{title:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(e.$t("admin.ADMINISTRATION")),1)])),content:(0,r.w5)((()=>[(0,r.Wm)(q,{appStatistics:(0,i.SU)(a)},null,8,["appStatistics"]),(0,r._)("div",J,[(0,r._)("dl",null,[(0,r._)("dt",null,[(0,r.Wm)(o,{to:"/admin/application"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(e.$t("admin.APPLICATION")),1)])),_:1})]),(0,r._)("dd",Q,[(0,r.Uk)((0,s.zw)(e.$t("admin.UPDATE_APPLICATION_DESCRIPTION")),1),ee,(0,r._)("span",te,(0,s.zw)(e.$t("admin.REGISTRATION_"+((0,i.SU)(n).is_registration_enabled?"ENABLED":"DISABLED"))),1),(0,i.SU)(n).is_email_sending_enabled?(0,r.kq)("",!0):((0,r.wg)(),(0,r.iD)("span",ne,[ae,(0,r.Uk)(" "+(0,s.zw)(e.$t("admin.EMAIL_SENDING_DISABLED")),1)]))]),(0,r._)("dt",null,[(0,r.Wm)(o,{to:"/admin/sports"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)((0,s.kC)(e.$t("workouts.SPORT",0))),1)])),_:1})]),(0,r._)("dd",null,(0,s.zw)(e.$t("admin.ENABLE_DISABLE_SPORTS")),1),(0,r._)("dt",null,[(0,r.Wm)(o,{to:"/admin/users"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)((0,s.kC)(e.$t("admin.USER",0))),1)])),_:1})]),(0,r._)("dd",null,(0,s.zw)(e.$t("admin.ADMIN_RIGHTS_DELETE_USER_ACCOUNT")),1)])])])),_:1})])}}});const se=(0,P.Z)(re,[["__scopeId","data-v-0dd66f89"]]);var oe=se,ie=n(3324),le=n(631);const ce=e=>((0,r.dD)("data-v-6d62af67"),e=e(),(0,r.Cn)(),e),ue={id:"admin-sports",class:"admin-card"},de={class:"responsive-table"},me=ce((()=>(0,r._)("th",null,"#",-1))),Se={class:"text-left"},_e={class:"text-left sport-action"},Ee=ce((()=>(0,r._)("th",null,null,-1))),pe={class:"text-center"},Te=ce((()=>(0,r._)("span",{class:"cell-heading"},"id",-1))),Ae={class:"cell-heading"},Ue={class:"sport-label"},Oe={class:"cell-heading"},Re={class:"text-center"},Ie={class:"cell-heading"},ge={class:"sport-action"},we={class:"cell-heading"},ve={class:"action-button"},fe=["onClick"],Ne={key:0,class:"has-workouts"},he=ce((()=>(0,r._)("i",{class:"fa fa-warning","aria-hidden":"true"},null,-1)));var Ce=(0,r.aZ)({setup(e){const{t:t}=(0,ie.QT)(),n=(0,c.o)(),a=(0,r.Fl)((()=>(0,le.xH)(n.getters[l.O8.GETTERS.SPORTS],t))),u=(0,r.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,r.up)("SportImage"),l=(0,r.up)("ErrorMessage"),c=(0,r.up)("Card");return(0,r.wg)(),(0,r.iD)("div",ue,[(0,r.Wm)(c,null,{title:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(e.$t("admin.SPORTS.TITLE")),1)])),content:(0,r.w5)((()=>[(0,r._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,o.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,s.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,r._)("div",de,[(0,r._)("table",null,[(0,r._)("thead",null,[(0,r._)("tr",null,[me,(0,r._)("th",null,(0,s.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,r._)("th",Se,(0,s.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,r._)("th",null,(0,s.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,r._)("th",_e,(0,s.zw)(e.$t("admin.ACTION")),1),Ee])]),(0,r._)("tbody",null,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(a),(t=>((0,r.wg)(),(0,r.iD)("tr",{key:t.id},[(0,r._)("td",pe,[Te,(0,r.Uk)(" "+(0,s.zw)(t.id),1)]),(0,r._)("td",null,[(0,r._)("span",Ae,(0,s.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,r.Wm)(n,{title:t.translatedLabel,"sport-label":t.label,color:t.color},null,8,["title","sport-label","color"])]),(0,r._)("td",Ue,[(0,r._)("span",Oe,(0,s.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,r.Uk)(" "+(0,s.zw)(t.translatedLabel),1)]),(0,r._)("td",Re,[(0,r._)("span",Ie,(0,s.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,r._)("i",{class:(0,s.C_)("fa fa"+(t.is_active?"-check":"")),"aria-hidden":"true"},null,2)]),(0,r._)("td",ge,[(0,r._)("span",we,(0,s.zw)(e.$t("admin.ACTION")),1),(0,r._)("div",ve,[(0,r._)("button",{class:(0,s.C_)({danger:t.is_active}),onClick:e=>d(t.id,!t.is_active)},(0,s.zw)(e.$t(`buttons.${t.is_active?"DIS":"EN"}ABLE`)),11,fe),t.has_workouts?((0,r.wg)(),(0,r.iD)("span",Ne,[he,(0,r.Uk)(" "+(0,s.zw)(e.$t("admin.SPORTS.TABLE.HAS_WORKOUTS")),1)])):(0,r.kq)("",!0)])])])))),128))])]),(0,i.SU)(u)?((0,r.wg)(),(0,r.j4)(l,{key:0,message:(0,i.SU)(u)},null,8,["message"])):(0,r.kq)("",!0),(0,r._)("button",{onClick:t[1]||(t[1]=(0,o.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,s.zw)(e.$t("admin.BACK_TO_ADMIN")),1)])])),_:1})])}}});const De=(0,P.Z)(Ce,[["__scopeId","data-v-6d62af67"]]);var ke=De,ze=n(4850),Pe=n(8626),Me=n(6514),ye=n(6595);const be={class:"users-filters"},Le={class:"search-username"},Ge=["onKeyup","placeholder"];var Fe=(0,r.aZ)({emits:["filterOnUsername"],setup(e,{emit:t}){const n=(0,a.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,r.wg)(),(0,r.iD)("div",be,[(0,r._)("div",Le,[(0,r.wy)((0,r._)("input",{id:"username",name:"username","onUpdate:modelValue":t[0]||(t[0]=e=>l.value=e),onKeyup:(0,o.D2)(c,["enter"]),placeholder:e.$t("user.FILTER_ON_USERNAME")},null,40,Ge),[[o.nr,l.value,void 0,{trim:!0}]]),""!==l.value?((0,r.wg)(),(0,r.iD)("i",{key:0,class:"fa fa-times","aria-hidden":"true",onClick:u})):(0,r.kq)("",!0)]),(0,r._)("i",{class:(0,s.C_)(["fa fa-search",{"fa-disabled":""===l.value}]),"aria-hidden":"true",onClick:c},null,2)]))}});const We=(0,P.Z)(Fe,[["__scopeId","data-v-627a8e91"]]);var Ye=We,xe=n(2766),$e=n(6558);const Ze=e=>((0,r.dD)("data-v-4735c10f"),e=e(),(0,r.Cn)(),e),Ke={id:"admin-users",class:"admin-card"},Be={key:0,class:"no-users"},He={key:1,class:"responsive-table"},qe=Ze((()=>(0,r._)("th",null,"#",-1))),je={class:"left-text"},Ve={class:"left-text"},Xe={class:"left-text"},Je={class:"cell-heading"},Qe={class:"cell-heading"},et={class:"cell-heading"},tt={class:"cell-heading"},nt={class:"text-center"},at={class:"cell-heading"},rt={class:"text-center"},st={class:"cell-heading"},ot={class:"text-center"},it={class:"cell-heading"},lt={class:"text-center"},ct={class:"cell-heading"},ut=["disabled","onClick"];var dt=(0,r.aZ)({setup(e){const t=(0,c.o)(),n=(0,a.yj)(),u=(0,a.tv)(),d=["is_active","admin","created_at","username","workouts_count"],m="created_at";let S=(0,i.qj)((0,xe.pm)(n.query,d,m));const _=(0,r.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),E=(0,r.Fl)((()=>t.getters[l.RT.GETTERS.USERS])),p=(0,r.Fl)((()=>t.getters[l.RT.GETTERS.USERS_PAGINATION])),T=(0,r.Fl)((()=>t.getters[l.SY.GETTERS.ERROR_MESSAGES]));function A(e){t.dispatch(l.RT.ACTIONS.GET_USERS,e)}function U(e){R("q",e.value)}function O(e,n){t.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,admin:n})}function R(e,t){S[e]=t,"per_page"===e&&(S.page=1),u.push({path:"/admin/users",query:S})}return(0,r.wF)((()=>A(S))),(0,r.Ah)((()=>{t.dispatch(l.RT.ACTIONS.EMPTY_USERS)})),(0,r.YP)((()=>n.query),(e=>{S=(0,xe.pm)(e,d,m,{query:S}),A(S)})),(e,t)=>{const n=(0,r.up)("router-link"),a=(0,r.up)("ErrorMessage"),l=(0,r.up)("Card");return(0,r.wg)(),(0,r.iD)("div",Ke,[(0,r.Wm)(l,null,{title:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)((0,s.kC)(e.$t("admin.USER",0))),1)])),content:(0,r.w5)((()=>[(0,r._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,o.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,s.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,r.Wm)(Ye,{onFilterOnUsername:U}),(0,r.Wm)(Pe.Z,{sort:(0,i.SU)(xe.fS),order_by:d,query:(0,i.SU)(S),message:"admin.USERS.SELECTS.ORDER_BY",onUpdateSelect:R},null,8,["sort","query"]),0===(0,i.SU)(E).length?((0,r.wg)(),(0,r.iD)("div",Be,(0,s.zw)(e.$t("user.NO_USERS_FOUND")),1)):((0,r.wg)(),(0,r.iD)("div",He,[(0,r._)("table",null,[(0,r._)("thead",null,[(0,r._)("tr",null,[qe,(0,r._)("th",je,(0,s.zw)(e.$t("user.USERNAME")),1),(0,r._)("th",Ve,(0,s.zw)(e.$t("user.EMAIL")),1),(0,r._)("th",Xe,(0,s.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,r._)("th",null,(0,s.zw)((0,s.kC)(e.$t("workouts.WORKOUT",0))),1),(0,r._)("th",null,(0,s.zw)(e.$t("admin.ACTIVE")),1),(0,r._)("th",null,(0,s.zw)(e.$t("user.ADMIN")),1),(0,r._)("th",null,(0,s.zw)(e.$t("admin.ACTION")),1)])]),(0,r._)("tbody",null,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(E),(t=>((0,r.wg)(),(0,r.iD)("tr",{key:t.username},[(0,r._)("td",null,[(0,r._)("span",Je,(0,s.zw)(e.$t("user.PROFILE.PICTURE")),1),(0,r.Wm)(ye.Z,{user:t},null,8,["user"])]),(0,r._)("td",null,[(0,r._)("span",Qe,(0,s.zw)(e.$t("user.USERNAME")),1),(0,r.Wm)(n,{to:`/admin/users/${t.username}`},{default:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(t.username),1)])),_:2},1032,["to"])]),(0,r._)("td",null,[(0,r._)("span",et,(0,s.zw)(e.$t("user.EMAIL")),1),(0,r.Uk)(" "+(0,s.zw)(t.email),1)]),(0,r._)("td",null,[(0,r._)("span",tt,(0,s.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,r.Uk)(" "+(0,s.zw)((0,i.SU)(ze.Z)((0,i.SU)($e.eB)(t.created_at,(0,i.SU)(_).timezone),"dd/MM/yyyy HH:mm")),1)]),(0,r._)("td",nt,[(0,r._)("span",at,(0,s.zw)((0,s.kC)(e.$t("workouts.WORKOUT",0))),1),(0,r.Uk)(" "+(0,s.zw)(t.nb_workouts),1)]),(0,r._)("td",rt,[(0,r._)("span",st,(0,s.zw)(e.$t("admin.ACTIVE")),1),(0,r._)("i",{class:(0,s.C_)(`fa fa${t.is_active?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,r._)("td",ot,[(0,r._)("span",it,(0,s.zw)(e.$t("user.ADMIN")),1),(0,r._)("i",{class:(0,s.C_)(`fa fa${t.admin?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,r._)("td",lt,[(0,r._)("span",ct,(0,s.zw)(e.$t("admin.ACTION")),1),(0,r._)("button",{class:(0,s.C_)({danger:t.admin}),disabled:t.username===(0,i.SU)(_).username,onClick:e=>O(t.username,!t.admin)},(0,s.zw)(e.$t(`admin.USERS.TABLE.${t.admin?"REMOVE":"ADD"}_ADMIN_RIGHTS`)),11,ut)])])))),128))])]),(0,i.SU)(p).page?((0,r.wg)(),(0,r.j4)(Me.Z,{key:0,path:"/admin/users",pagination:(0,i.SU)(p),query:(0,i.SU)(S)},null,8,["pagination","query"])):(0,r.kq)("",!0),(0,i.SU)(T)?((0,r.wg)(),(0,r.j4)(a,{key:1,message:(0,i.SU)(T)},null,8,["message"])):(0,r.kq)("",!0),(0,r._)("button",{onClick:t[1]||(t[1]=(0,o.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,s.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))])),_:1})])}}});const mt=(0,P.Z)(dt,[["__scopeId","data-v-4735c10f"]]);var St=mt,_t=n(2179);const Et={class:"profile-tabs custom-checkboxes-group"},pt={class:"profile-tabs-checkboxes custom-checkboxes"},Tt=["id","name","checked","disabled","onInput"];var At=(0,r.aZ)({props:{tabs:null,selectedTab:null,edition:{type:Boolean},disabled:{type:Boolean,default:!1}},setup(e){const t=e,{tabs:n,selectedTab:a,disabled:o}=(0,i.BK)(t);function l(e){switch(e){case"ACCOUNT":case"PICTURE":return`/profile/edit/${e.toLocaleLowerCase()}`;case"PREFERENCES":case"SPORTS":return`/profile${t.edition?"/edit":""}/${e.toLocaleLowerCase()}`;default:case"PROFILE":return"/profile"+(t.edition?"/edit":"")}}return(e,t)=>((0,r.wg)(),(0,r.iD)("div",Et,[(0,r._)("div",pt,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(n),(t=>((0,r.wg)(),(0,r.iD)("div",{class:"profile-tab custom-checkbox",key:t},[(0,r._)("label",null,[(0,r._)("input",{type:"radio",id:t,name:t,checked:(0,i.SU)(a)===t,disabled:(0,i.SU)(o),onInput:n=>e.$router.push(l(t))},null,40,Tt),(0,r._)("span",null,(0,s.zw)(e.$t(`user.PROFILE.TABS.${t}`)),1)])])))),128))])]))}});const Ut=At;var Ot=Ut;const Rt={id:"user-profile"},It={class:"box"};var gt=(0,r.aZ)({props:{user:null,tab:null},setup(e){const t=e,{user:n,tab:a}=(0,i.BK)(t),s=["PROFILE","PREFERENCES","SPORTS"];return(e,t)=>{const o=(0,r.up)("router-view");return(0,r.wg)(),(0,r.iD)("div",Rt,[(0,r.Wm)(_t.Z,{user:(0,i.SU)(n)},null,8,["user"]),(0,r._)("div",It,[(0,r.Wm)(Ot,{tabs:s,selectedTab:(0,i.SU)(a),edition:!1},null,8,["selectedTab"]),(0,r.Wm)(o,{user:(0,i.SU)(n)},null,8,["user"])])])}}});const wt=(0,P.Z)(gt,[["__scopeId","data-v-e26535e0"]]);var vt=wt,ft=n(4980),Nt=n(6287);const ht={id:"user-preferences",class:"description-list"},Ct={class:"profile-buttons"};var Dt=(0,r.aZ)({props:{user:null},setup(e){const t=e,n=(0,r.Fl)((()=>t.user.language?Nt.zK[t.user.language]:Nt.zK.en)),a=(0,r.Fl)((()=>t.user.weekm?"MONDAY":"SUNDAY")),o=(0,r.Fl)((()=>t.user.timezone?t.user.timezone:"Europe/Paris"));return(t,l)=>((0,r.wg)(),(0,r.iD)("div",ht,[(0,r._)("dl",null,[(0,r._)("dt",null,(0,s.zw)(t.$t("user.PROFILE.LANGUAGE"))+":",1),(0,r._)("dd",null,(0,s.zw)((0,i.SU)(n)),1),(0,r._)("dt",null,(0,s.zw)(t.$t("user.PROFILE.TIMEZONE"))+":",1),(0,r._)("dd",null,(0,s.zw)((0,i.SU)(o)),1),(0,r._)("dt",null,(0,s.zw)(t.$t("user.PROFILE.FIRST_DAY_OF_WEEK"))+":",1),(0,r._)("dd",null,(0,s.zw)(t.$t(`user.PROFILE.${(0,i.SU)(a)}`)),1),(0,r._)("dt",null,(0,s.zw)(t.$t("user.PROFILE.UNITS.LABEL"))+":",1),(0,r._)("dd",null,(0,s.zw)(t.$t("user.PROFILE.UNITS."+(e.user.imperial_units?"IMPERIAL":"METRIC"))),1)]),(0,r._)("div",Ct,[(0,r._)("button",{onClick:l[0]||(l[0]=e=>t.$router.push("/profile/edit/preferences"))},(0,s.zw)(t.$t("user.PROFILE.EDIT_PREFERENCES")),1),(0,r._)("button",{onClick:l[1]||(l[1]=e=>t.$router.push("/"))},(0,s.zw)(t.$t("common.HOME")),1)])]))}});const kt=Dt;var zt=kt;const Pt={id:"user-profile-edition",class:"center-card"};var Mt=(0,r.aZ)({props:{user:null,tab:null},setup(e){const t=e,n=(0,c.o)(),{user:a,tab:o}=(0,i.BK)(t),u=["PROFILE","ACCOUNT","PICTURE","PREFERENCES","SPORTS"],d=(0,r.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING]));return(e,t)=>{const n=(0,r.up)("router-view"),l=(0,r.up)("Card");return(0,r.wg)(),(0,r.iD)("div",Pt,[(0,r.Wm)(l,null,{title:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(e.$t(`user.PROFILE.${(0,i.SU)(o)}_EDITION`)),1)])),content:(0,r.w5)((()=>[(0,r.Wm)(Ot,{tabs:u,selectedTab:(0,i.SU)(o),edition:!0,disabled:(0,i.SU)(d)},null,8,["selectedTab","disabled"]),(0,r.Wm)(n,{user:(0,i.SU)(a)},null,8,["user"])])),_:1})])}}});const yt=Mt;var bt=yt,Lt=n(2047);const Gt={id:"user-infos-edition"},Ft={class:"profile-form form-box"},Wt={key:1,class:"info-box success-message"},Yt=["onSubmit"],xt={class:"form-items",for:"email"},$t=["disabled"],Zt={class:"form-items",for:"password-field"},Kt={class:"form-items",for:"new-password-field"},Bt={class:"form-buttons"},Ht={class:"confirm",type:"submit"};var qt=(0,r.aZ)({props:{user:null},setup(e){const t=e,{user:n}=(0,i.BK)(t),a=(0,c.o)(),u=(0,i.qj)({email:"",password:"",new_password:""}),d=(0,r.Fl)((()=>a.getters[l.YN.GETTERS.USER_LOADING])),m=(0,r.Fl)((()=>a.getters[l.SY.GETTERS.APP_CONFIG])),S=(0,r.Fl)((()=>a.getters[l.YN.GETTERS.IS_SUCCESS])),_=(0,i.iH)(!1),E=(0,r.Fl)((()=>a.getters[l.SY.GETTERS.ERROR_MESSAGES])),p=(0,i.iH)(!1),T=(0,i.iH)(!1);function A(){p.value=!0}function U(e){u.email=e.email}function O(e){u.password=e}function R(e){u.new_password=e}function I(){const e={email:u.email,password:u.password};u.new_password&&(e.new_password=u.new_password),_.value=u.email!==n.value.email,a.dispatch(l.YN.ACTIONS.UPDATE_USER_ACCOUNT,e)}function g(e){T.value=e}function w(e){a.dispatch(l.YN.ACTIONS.DELETE_ACCOUNT,{username:e})}return(0,r.bv)((()=>{t.user&&U(t.user)})),(0,r.Ah)((()=>{a.commit(l.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),a.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(0,r.YP)((()=>S.value),(async e=>{e&&(O(""),R(""),U(n.value),p.value=!1)})),(0,r.YP)((()=>n.value.email),(async()=>{U(n.value)})),(e,t)=>{const a=(0,r.up)("Modal"),l=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",Gt,[T.value?((0,r.wg)(),(0,r.j4)(a,{key:0,title:e.$t("common.CONFIRMATION"),message:e.$t("user.CONFIRM_ACCOUNT_DELETION"),onConfirmAction:t[0]||(t[0]=e=>w((0,i.SU)(n).username)),onCancelAction:t[1]||(t[1]=e=>g(!1))},null,8,["title","message"])):(0,r.kq)("",!0),(0,r._)("div",Ft,[(0,i.SU)(E)?((0,r.wg)(),(0,r.j4)(l,{key:0,message:(0,i.SU)(E)},null,8,["message"])):(0,r.kq)("",!0),(0,i.SU)(S)?((0,r.wg)(),(0,r.iD)("div",Wt,(0,s.zw)(e.$t(`user.PROFILE.SUCCESSFUL_${_.value&&(0,i.SU)(m).is_email_sending_enabled?"EMAIL_":""}UPDATE`)),1)):(0,r.kq)("",!0),(0,r._)("form",{class:(0,s.C_)({errors:p.value}),onSubmit:(0,o.iM)(I,["prevent"])},[(0,r._)("label",xt,[(0,r.Uk)((0,s.zw)(e.$t("user.EMAIL"))+"* ",1),(0,r.wy)((0,r._)("input",{id:"email","onUpdate:modelValue":t[2]||(t[2]=e=>(0,i.SU)(u).email=e),disabled:(0,i.SU)(d),required:!0,onInvalid:A},null,40,$t),[[o.nr,(0,i.SU)(u).email]])]),(0,r._)("label",Zt,[(0,r.Uk)((0,s.zw)(e.$t("user.CURRENT_PASSWORD"))+"* ",1),(0,r.Wm)(Lt.Z,{id:"password-field",disabled:(0,i.SU)(d),password:(0,i.SU)(u).password,required:!0,onUpdatePassword:O,onPasswordError:A},null,8,["disabled","password"])]),(0,r._)("label",Kt,[(0,r.Uk)((0,s.zw)(e.$t("user.NEW_PASSWORD"))+" ",1),(0,r.Wm)(Lt.Z,{id:"new-password-field",disabled:(0,i.SU)(d),checkStrength:!0,password:(0,i.SU)(u).new_password,isSuccess:!1,onUpdatePassword:R,onPasswordError:A},null,8,["disabled","password"])]),(0,r._)("div",Bt,[(0,r._)("button",Ht,(0,s.zw)(e.$t("buttons.SUBMIT")),1),(0,r._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,o.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,s.zw)(e.$t("buttons.CANCEL")),1),(0,r._)("button",{class:"danger",onClick:t[4]||(t[4]=(0,o.iM)((e=>g(!0)),["prevent"]))},(0,s.zw)(e.$t("buttons.DELETE_MY_ACCOUNT")),1)])],42,Yt)])])}}});const jt=(0,P.Z)(qt,[["__scopeId","data-v-37b8c4c8"]]);var Vt=jt;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"},an=["disabled"],rn={class:"form-items",for:"last_name"},sn={class:"form-items",for:"birth_date"},on=["disabled"],ln={class:"form-items",for:"location"},cn=["disabled"],un={class:"form-items"},dn={class:"form-buttons"},mn={class:"confirm",type:"submit"};var Sn=(0,r.aZ)({props:{user:null},setup(e){const t=e,n=(0,c.o)(),a=(0,i.qj)({first_name:"",last_name:"",birth_date:"",location:"",bio:""}),u=(0,r.Fl)((()=>t.user.created_at?(0,ze.Z)(new Date(t.user.created_at),"dd/MM/yyyy HH:mm"):"")),d=(0,r.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),m=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function S(e){a.first_name=e.first_name?e.first_name:"",a.last_name=e.last_name?e.last_name:"",a.birth_date=e.birth_date?(0,ze.Z)(new Date(e.birth_date),"yyyy-MM-dd"):"",a.location=e.location?e.location:"",a.bio=e.bio?e.bio:""}function _(e){a.bio=e}function E(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PROFILE,a)}return(0,r.bv)((()=>{t.user&&S(t.user)})),(0,r.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,r.up)("ErrorMessage"),l=(0,r.up)("CustomTextArea");return(0,r.wg)(),(0,r.iD)("div",Xt,[(0,r._)("div",Jt,[(0,i.SU)(m)?((0,r.wg)(),(0,r.j4)(n,{key:0,message:(0,i.SU)(m)},null,8,["message"])):(0,r.kq)("",!0),(0,r._)("form",{onSubmit:(0,o.iM)(E,["prevent"])},[(0,r._)("label",en,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+" ",1),(0,r._)("input",{id:"registrationDate",value:(0,i.SU)(u),disabled:""},null,8,tn)]),(0,r._)("label",nn,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.FIRST_NAME"))+" ",1),(0,r.wy)((0,r._)("input",{id:"first_name","onUpdate:modelValue":t[0]||(t[0]=e=>(0,i.SU)(a).first_name=e),disabled:(0,i.SU)(d)},null,8,an),[[o.nr,(0,i.SU)(a).first_name]])]),(0,r._)("label",rn,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.LAST_NAME"))+" ",1),(0,r.wy)((0,r._)("input",{id:"last_name","onUpdate:modelValue":t[1]||(t[1]=e=>(0,i.SU)(a).last_name=e)},null,512),[[o.nr,(0,i.SU)(a).last_name]])]),(0,r._)("label",sn,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+" ",1),(0,r.wy)((0,r._)("input",{id:"birth_date",type:"date",class:"birth-date","onUpdate:modelValue":t[2]||(t[2]=e=>(0,i.SU)(a).birth_date=e),disabled:(0,i.SU)(d)},null,8,on),[[o.nr,(0,i.SU)(a).birth_date]])]),(0,r._)("label",ln,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.LOCATION"))+" ",1),(0,r.wy)((0,r._)("input",{id:"location","onUpdate:modelValue":t[3]||(t[3]=e=>(0,i.SU)(a).location=e),disabled:(0,i.SU)(d)},null,8,cn),[[o.nr,(0,i.SU)(a).location]])]),(0,r._)("label",un,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.BIO"))+" ",1),(0,r.Wm)(l,{name:"bio",charLimit:200,input:(0,i.SU)(a).bio,disabled:(0,i.SU)(d),onUpdateValue:_},null,8,["input","disabled"])]),(0,r._)("div",dn,[(0,r._)("button",mn,(0,s.zw)(e.$t("buttons.SUBMIT")),1),(0,r._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,o.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,s.zw)(e.$t("buttons.CANCEL")),1)])],40,Qt)])])}}});const _n=(0,P.Z)(Sn,[["__scopeId","data-v-b6bacea0"]]);var En=_n;const pn=e=>((0,r.dD)("data-v-3a97bb3c"),e=e(),(0,r.Cn)(),e),Tn={id:"user-picture-edition"},An={class:"user-picture-form"},Un=["onSubmit"],On={class:"picture-help"},Rn={class:"info-box"},In=pn((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),gn={class:"picture-buttons"},wn=["disabled"];var vn=(0,r.aZ)({props:{user:null},setup(e){const t=e,n=(0,c.o)(),{user:a}=(0,i.BK)(t),d=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),m=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG])),S=m.value.max_single_file_size?(0,u.Z)(m.value.max_single_file_size):"";let _=(0,i.iH)(null);function E(){n.dispatch(l.YN.ACTIONS.DELETE_PICTURE)}function p(e){e.target.files&&(_.value=e.target.files[0])}function T(){_.value&&n.dispatch(l.YN.ACTIONS.UPDATE_USER_PICTURE,{picture:_.value})}return(0,r.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",Tn,[(0,r._)("div",An,[(0,i.SU)(d)?((0,r.wg)(),(0,r.j4)(n,{key:0,message:(0,i.SU)(d)},null,8,["message"])):(0,r.kq)("",!0),(0,r.Wm)(ye.Z,{user:(0,i.SU)(a)},null,8,["user"]),(0,r._)("form",{onSubmit:(0,o.iM)(T,["prevent"])},[(0,r._)("input",{type:"file",name:"picture",accept:".png,.jpg,.gif",onInput:p},null,32),(0,r._)("div",On,[(0,r._)("span",Rn,[In,(0,r.Uk)(" "+(0,s.zw)(e.$t("workouts.MAX_SIZE"))+": "+(0,s.zw)((0,i.SU)(S)),1)])]),(0,r._)("div",gn,[(0,r._)("button",{type:"submit",disabled:!(0,i.SU)(_)},(0,s.zw)(e.$t("user.PROFILE.PICTURE_UPDATE")),9,wn),(0,i.SU)(a).picture?((0,r.wg)(),(0,r.iD)("button",{key:0,class:"danger",onClick:E},(0,s.zw)(e.$t("user.PROFILE.PICTURE_REMOVE")),1)):(0,r.kq)("",!0),(0,r._)("button",{class:"cancel",onClick:t[0]||(t[0]=t=>e.$router.push("/profile"))},(0,s.zw)(e.$t("user.PROFILE.BACK_TO_PROFILE")),1)])],40,Un)])])}}});const fn=(0,P.Z)(vn,[["__scopeId","data-v-3a97bb3c"]]);var Nn=fn;const hn=["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"],Cn={id:"tz-dropdown"},Dn=["value","disabled","onKeydown"],kn=["onClick","onMouseover","autofocus"];var zn=(0,r.aZ)({props:{input:null,disabled:{type:Boolean,default:!1}},emits:["updateTimezone"],setup(e,{emit:t}){const n=e,{input:a,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 S(e){return e.toLowerCase().match(c.value.toLowerCase())}function _(e){m.value=e}function E(e){c.value=e,u.value=!1,t("updateTimezone",e)}function p(e){e.preventDefault(),d.value?.firstElementChild?.innerHTML&&E(d.value?.firstElementChild?.innerHTML)}function T(e){e.preventDefault(),u.value=!0,c.value=e.target.value.trim()}return(0,r.YP)((()=>n.input),(e=>{c.value=e})),(e,t)=>((0,r.wg)(),(0,r.iD)("div",Cn,[(0,r._)("input",{class:"tz-dropdown-input",id:"timezone",name:"timezone",value:c.value,disabled:(0,i.SU)(l),required:"",onKeydown:[t[0]||(t[0]=(0,o.D2)((e=>E((0,i.SU)(a))),["esc"])),(0,o.D2)(p,["enter"])],onInput:T},null,40,Dn),u.value?((0,r.wg)(),(0,r.iD)("ul",{key:0,class:"tz-dropdown-list",ref_key:"tzList",ref:d},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(hn).filter((e=>S(e))),((e,t)=>((0,r.wg)(),(0,r.iD)("li",{key:e,class:(0,s.C_)(["tz-dropdown-item",{focus:t===m.value}]),onClick:t=>E(e),onMouseover:e=>_(t),autofocus:t===m.value},(0,s.zw)(e),43,kn)))),128))],512)):(0,r.kq)("",!0)]))}});const Pn=(0,P.Z)(zn,[["__scopeId","data-v-47ea2903"]]);var Mn=Pn;const yn={id:"user-preferences-edition"},bn={class:"profile-form form-box"},Ln=["onSubmit"],Gn={class:"form-items"},Fn=["disabled"],Wn=["value"],Yn={class:"form-items"},xn={class:"form-items"},$n=["disabled"],Zn=["value"],Kn={class:"form-items"},Bn=["disabled"],Hn=["value"],qn={class:"form-buttons"},jn={class:"confirm",type:"submit"};var Vn=(0,r.aZ)({props:{user:null},setup(e){const t=e,n=(0,c.o)(),a=(0,i.qj)({imperial_units:!1,language:"",timezone:"Europe/Paris",weekm:!1}),u=[{label:"MONDAY",value:!0},{label:"SUNDAY",value:!1}],d=[{label:"IMPERIAL",value:!0},{label:"METRIC",value:!1}],m=(0,r.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),S=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function _(e){a.imperial_units=!!e.imperial_units&&e.imperial_units,a.language=e.language?e.language:"en",a.timezone=e.timezone?e.timezone:"Europe/Paris",a.weekm=!!e.weekm&&e.weekm}function E(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PREFERENCES,a)}function p(e){a.timezone=e}return(0,r.bv)((()=>{t.user&&_(t.user)})),(0,r.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",yn,[(0,r._)("div",bn,[(0,i.SU)(S)?((0,r.wg)(),(0,r.j4)(n,{key:0,message:(0,i.SU)(S)},null,8,["message"])):(0,r.kq)("",!0),(0,r._)("form",{onSubmit:(0,o.iM)(E,["prevent"])},[(0,r._)("label",Gn,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.LANGUAGE"))+" ",1),(0,r.wy)((0,r._)("select",{id:"language","onUpdate:modelValue":t[0]||(t[0]=e=>(0,i.SU)(a).language=e),disabled:(0,i.SU)(m)},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(Nt.mT),(e=>((0,r.wg)(),(0,r.iD)("option",{value:e.value,key:e.value},(0,s.zw)(e.label),9,Wn)))),128))],8,Fn),[[o.bM,(0,i.SU)(a).language]])]),(0,r._)("label",Yn,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.TIMEZONE"))+" ",1),(0,r.Wm)(Mn,{input:(0,i.SU)(a).timezone,disabled:(0,i.SU)(m),onUpdateTimezone:p},null,8,["input","disabled"])]),(0,r._)("label",xn,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.FIRST_DAY_OF_WEEK"))+" ",1),(0,r.wy)((0,r._)("select",{id:"weekm","onUpdate:modelValue":t[1]||(t[1]=e=>(0,i.SU)(a).weekm=e),disabled:(0,i.SU)(m)},[((0,r.wg)(),(0,r.iD)(r.HY,null,(0,r.Ko)(u,(t=>(0,r._)("option",{value:t.value,key:t.value},(0,s.zw)(e.$t(`user.PROFILE.${t.label}`)),9,Zn))),64))],8,$n),[[o.bM,(0,i.SU)(a).weekm]])]),(0,r._)("label",Kn,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.UNITS.LABEL"))+" ",1),(0,r.wy)((0,r._)("select",{id:"imperial_units","onUpdate:modelValue":t[2]||(t[2]=e=>(0,i.SU)(a).imperial_units=e),disabled:(0,i.SU)(m)},[((0,r.wg)(),(0,r.iD)(r.HY,null,(0,r.Ko)(d,(t=>(0,r._)("option",{value:t.value,key:t.value},(0,s.zw)(e.$t(`user.PROFILE.UNITS.${t.label}`)),9,Hn))),64))],8,Bn),[[o.bM,(0,i.SU)(a).imperial_units]])]),(0,r._)("div",qn,[(0,r._)("button",jn,(0,s.zw)(e.$t("buttons.SUBMIT")),1),(0,r._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,o.iM)((t=>e.$router.push("/profile/preferences")),["prevent"]))},(0,s.zw)(e.$t("buttons.CANCEL")),1)])],40,Ln)])])}}});const Xn=Vn;var Jn=Xn;const Qn={id:"user-sport-preferences"},ea={key:0,class:"responsive-table"},ta={class:"mobile-display"},na={key:0,class:"profile-buttons mobile-display"},aa={key:1,class:"profile-buttons"},ra={class:"text-left"},sa={key:0},oa={class:"cell-heading"},ia=["value"],la={class:"cell-heading"},ca={key:0,class:"disabled-message"},ua={key:1,class:"fa fa-refresh fa-spin fa-fw"},da={class:"cell-heading"},ma={class:"cell-heading"},Sa=["checked"],_a={class:"cell-heading"},Ea=["value"],pa={key:1},Ta={key:0,class:"action-buttons"},Aa={class:"cell-heading"},Ua=["onClick"],Oa={key:1,class:"edition-buttons"},Ra=["disabled"],Ia=["disabled","onClick"],ga=["disabled"],wa={key:0,class:"profile-buttons"},va={key:1,class:"profile-buttons"};var fa=(0,r.aZ)({props:{user:null,isEdition:{type:Boolean}},setup(e){const t=e,n=(0,c.o)(),{t:a}=(0,ie.QT)(),{isEdition:u,user:d}=(0,i.BK)(t),m=(0,r.f3)("sportColors"),S=(0,r.Fl)((()=>n.getters[l.O8.GETTERS.SPORTS])),_=(0,r.Fl)((()=>(0,le.xH)(S.value,a,"is_active",d.value.sports_list))),E=(0,r.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),p=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),T=(0,i.qj)({sport_id:0,color:null,is_active:!0,stopped_speed_threshold:1});function A(e){null!==e?(T.sport_id=e.id,T.color=e.color?e.color:m[e.label],T.is_active=e.is_active_for_user,T.stopped_speed_threshold=e.stopped_speed_threshold):g()}function U(e){return T.sport_id===e}function O(e){T.color=e.target.value}function R(e){T.stopped_speed_threshold=parseFloat(e.target.value)}function I(e){T.is_active=e.target.checked}function g(){T.sport_id=0,T.color=null,T.is_active=!0,T.stopped_speed_threshold=1,n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)}function w(e){e.preventDefault(),n.dispatch(l.YN.ACTIONS.UPDATE_USER_SPORT_PREFERENCES,T)}function v(e,t){e.preventDefault(),n.dispatch(l.YN.ACTIONS.RESET_USER_SPORT_PREFERENCES,t)}return(0,r.YP)((()=>E.value),(e=>{e||p.value||g()})),(e,t)=>{const n=(0,r.up)("SportImage"),a=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",Qn,[(0,i.SU)(S).length>0?((0,r.wg)(),(0,r.iD)("div",ea,[(0,r._)("div",ta,[(0,i.SU)(u)?((0,r.wg)(),(0,r.iD)("div",na,[(0,r._)("button",{class:"cancel",onClick:t[0]||(t[0]=(0,o.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,s.zw)(e.$t("buttons.BACK")),1)])):((0,r.wg)(),(0,r.iD)("div",aa,[(0,r._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/profile/edit/sports"))},(0,s.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,r._)("button",{onClick:t[2]||(t[2]=t=>e.$router.push("/"))},(0,s.zw)(e.$t("common.HOME")),1)]))]),(0,r._)("table",null,[(0,r._)("thead",null,[(0,r._)("tr",null,[(0,r._)("th",null,(0,s.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),(0,r._)("th",ra,(0,s.zw)(e.$t("workouts.SPORT",0)),1),(0,r._)("th",null,(0,s.zw)(e.$t("workouts.WORKOUT",0)),1),(0,r._)("th",null,(0,s.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),(0,r._)("th",null,(0,s.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),(0,i.SU)(u)?((0,r.wg)(),(0,r.iD)("th",sa,(0,s.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1)):(0,r.kq)("",!0)])]),(0,r._)("tbody",null,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(_),(o=>((0,r.wg)(),(0,r.iD)("tr",{key:o.id},[(0,r._)("td",null,[(0,r._)("span",oa,(0,s.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),U(o.id)?((0,r.wg)(),(0,r.iD)("input",{key:0,class:"sport-color",type:"color",value:(0,i.SU)(T).color,onInput:O},null,40,ia)):((0,r.wg)(),(0,r.j4)(n,{key:1,title:o.translatedLabel,"sport-label":o.label,color:o.color?o.color:(0,i.SU)(m)[o.label]},null,8,["title","sport-label","color"]))]),(0,r._)("td",{class:(0,s.C_)(["sport-label",{"disabled-sport":!o.is_active}])},[(0,r._)("span",la,(0,s.zw)(e.$t("user.PROFILE.SPORT.LABEL")),1),(0,r.Uk)(" "+(0,s.zw)(o.translatedLabel)+" ",1),o.is_active?(0,r.kq)("",!0):((0,r.wg)(),(0,r.iD)("span",ca," ("+(0,s.zw)(e.$t("user.PROFILE.SPORT.DISABLED_BY_ADMIN"))+") ",1)),(0,i.SU)(E)&&U(o.id)?((0,r.wg)(),(0,r.iD)("i",ua)):(0,r.kq)("",!0),(0,i.SU)(p)&&(0,i.SU)(T).sport_id===o.id?((0,r.wg)(),(0,r.j4)(a,{key:2,message:(0,i.SU)(p)},null,8,["message"])):(0,r.kq)("",!0)],2),(0,r._)("td",{class:(0,s.C_)(["text-center",{"disabled-sport":!o.is_active}])},[(0,r._)("span",da,(0,s.zw)(e.$t("workouts.WORKOUT",0)),1),(0,r._)("i",{class:(0,s.C_)("fa fa"+((0,i.SU)(d).sports_list.includes(o.id)?"-check":"")),"aria-hidden":"true"},null,2)],2),(0,r._)("td",{class:(0,s.C_)(["text-center",{"disabled-sport":!o.is_active}])},[(0,r._)("span",ma,(0,s.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),U(o.id)&&o.is_active?((0,r.wg)(),(0,r.iD)("input",{key:0,type:"checkbox",checked:o.is_active_for_user,onChange:I},null,40,Sa)):((0,r.wg)(),(0,r.iD)("i",{key:1,class:(0,s.C_)("fa fa"+(o.is_active_for_user?"-check":"")),"aria-hidden":"true"},null,2))],2),(0,r._)("td",{class:(0,s.C_)(["text-center",{"disabled-sport":!o.is_active}])},[(0,r._)("span",_a,(0,s.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),U(o.id)&&o.is_active?((0,r.wg)(),(0,r.iD)("input",{key:0,class:"threshold-input",type:"number",min:"0",step:"0.1",value:(0,i.SU)(T).stopped_speed_threshold,onInput:R},null,40,Ea)):((0,r.wg)(),(0,r.iD)("span",pa,(0,s.zw)(o.stopped_speed_threshold),1))],2),(0,i.SU)(u)?((0,r.wg)(),(0,r.iD)("td",Ta,[(0,r._)("span",Aa,(0,s.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1),0===(0,i.SU)(T).sport_id?((0,r.wg)(),(0,r.iD)("button",{key:0,onClick:e=>A(o)},(0,s.zw)(e.$t("buttons.EDIT")),9,Ua)):(0,r.kq)("",!0),U(o.id)?((0,r.wg)(),(0,r.iD)("div",Oa,[(0,r._)("button",{disabled:(0,i.SU)(E),onClick:w},(0,s.zw)(e.$t("buttons.SUBMIT")),9,Ra),(0,r._)("button",{disabled:(0,i.SU)(E),onClick:e=>v(e,o.id)},(0,s.zw)(e.$t("buttons.RESET")),9,Ia),(0,r._)("button",{disabled:(0,i.SU)(E),onClick:t[3]||(t[3]=e=>A(null))},(0,s.zw)(e.$t("buttons.CANCEL")),9,ga)])):(0,r.kq)("",!0)])):(0,r.kq)("",!0)])))),128))])]),(0,i.SU)(u)?((0,r.wg)(),(0,r.iD)("div",wa,[(0,r._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,o.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,s.zw)(e.$t("buttons.BACK")),1)])):((0,r.wg)(),(0,r.iD)("div",va,[(0,r._)("button",{onClick:t[5]||(t[5]=t=>e.$router.push("/profile/edit/sports"))},(0,s.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,r._)("button",{onClick:t[6]||(t[6]=t=>e.$router.push("/"))},(0,s.zw)(e.$t("common.HOME")),1)]))])):(0,r.kq)("",!0)])}}});const Na=(0,P.Z)(fa,[["__scopeId","data-v-4775544a"]]);var ha=Na,Ca=n(12);const Da=e=>((0,r.dD)("data-v-74257266"),e=e(),(0,r.Cn)(),e),ka={class:"about-text"},za=["innerHTML"],Pa=Da((()=>(0,r._)("i",{class:"fa fa-book fa-padding","aria-hidden":"true"},null,-1))),Ma={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"},ya=Da((()=>(0,r._)("i",{class:"fa fa-github fa-padding","aria-hidden":"true"},null,-1))),ba={href:"https://github.com/SamR1/FitTrackee",target:"_blank",rel:"noopener noreferrer"},La=Da((()=>(0,r._)("i",{class:"fa fa-balance-scale fa-padding","aria-hidden":"true"},null,-1))),Ga=Da((()=>(0,r._)("a",{href:"https://choosealicense.com/licenses/agpl-3.0/",target:"_blank",rel:"noopener noreferrer"}," AGPLv3 ",-1))),Fa={key:0},Wa=Da((()=>(0,r._)("i",{class:"fa fa-envelope-o fa-padding","aria-hidden":"true"},null,-1))),Ya=["href"];var xa=(0,r.aZ)({setup(e){const t=(0,c.o)(),n=(0,r.Fl)((()=>t.getters[l.SY.GETTERS.APP_CONFIG]));return(e,t)=>{const a=(0,r.up)("i18n-t");return(0,r.wg)(),(0,r.iD)("div",ka,[(0,r._)("div",null,[(0,r._)("p",{class:"error-message",innerHTML:e.$t("about.FITTRACKEE_DESCRIPTION")},null,8,za),(0,r._)("p",null,[Pa,(0,r._)("a",Ma,(0,s.zw)((0,s.kC)(e.$t("common.DOCUMENTATION"))),1)]),(0,r._)("p",null,[ya,(0,r._)("a",ba,(0,s.zw)(e.$t("about.SOURCE_CODE")),1)]),(0,r._)("p",null,[La,(0,r.Wm)(a,{keypath:"about.FITTRACKEE_LICENSE"},{default:(0,r.w5)((()=>[Ga])),_:1})]),(0,i.SU)(n).admin_contact?((0,r.wg)(),(0,r.iD)("div",Fa,[Wa,(0,r._)("a",{href:`mailto:${(0,i.SU)(n).admin_contact}`},(0,s.zw)(e.$t("about.CONTACT_ADMIN")),9,Ya)])):(0,r.kq)("",!0)])])}}});const $a=(0,P.Z)(xa,[["__scopeId","data-v-74257266"]]);var Za=$a;const Ka={id:"bike"},Ba=["src"];function Ha(e,t){return(0,r.wg)(),(0,r.iD)("div",Ka,[(0,r._)("img",{class:"bike-img",src:"/img/bike.svg",alt:"mountain bike"},null,8,Ba)])}const qa={},ja=(0,P.Z)(qa,[["render",Ha],["__scopeId","data-v-795f7f5f"]]);var Va=ja;const Xa={id:"about",class:"view"},Ja={class:"container"},Qa={class:"container-sub"},er={class:"container-sub about-details"};var tr=(0,r.aZ)({setup(e){return(e,t)=>((0,r.wg)(),(0,r.iD)("div",Xa,[(0,r._)("div",Ja,[(0,r._)("div",Qa,[(0,r.Wm)(Va)]),(0,r._)("div",er,[(0,r.Wm)(Za)])])]))}});const nr=(0,P.Z)(tr,[["__scopeId","data-v-bffb50d0"]]);var ar=nr,rr=n(1818),sr=n(2056);const or=e=>((0,r.dD)("data-v-c9d1f10c"),e=e(),(0,r.Cn)(),e),ir={class:"timeline-workout"},lr={class:"box"},cr={class:"workout-user-date"},ur={class:"workout-user"},dr=["title"],mr={key:0},Sr={key:1,class:"no-map"},_r={class:"img"},Er={class:"data"},pr=or((()=>(0,r._)("i",{class:"fa fa-clock-o","aria-hidden":"true"},null,-1))),Tr={key:0},Ar={class:"data"},Ur=or((()=>(0,r._)("i",{class:"fa fa-road","aria-hidden":"true"},null,-1))),Or={key:0,class:"data elevation"},Rr=["alt"],Ir={class:"data-values"},gr=(0,r.Uk)("/ "),wr={key:1,class:"data altitude"},vr=or((()=>(0,r._)("i",{class:"fa fa-location-arrow","aria-hidden":"true"},null,-1))),fr={class:"data-values"},Nr=(0,r.Uk)(" +"),hr=(0,r.Uk)("/- ");var Cr=(0,r.aZ)({props:{user:null,useImperialUnits:{type:Boolean},workout:{default:()=>({})},sport:{default:()=>({})}},setup(e){const t=e,n=(0,c.o)(),{user:a,workout:o,sport:u,useImperialUnits:d}=(0,i.BK)(t),m=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));return(e,t)=>{const n=(0,r.up)("router-link"),l=(0,r.up)("SportImage"),c=(0,r.up)("Distance");return(0,r.wg)(),(0,r.iD)("div",ir,[(0,r._)("div",lr,[(0,r._)("div",cr,[(0,r._)("div",ur,[(0,r.Wm)(ye.Z,{user:(0,i.SU)(a)},null,8,["user"]),(0,i.SU)(a).username?((0,r.wg)(),(0,r.j4)(n,{key:0,class:"workout-user-name",to:{name:"User",params:{username:(0,i.SU)(a).username}}},{default:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)((0,i.SU)(a).username),1)])),_:1},8,["to"])):(0,r.kq)("",!0)]),(0,i.SU)(o).id?((0,r.wg)(),(0,r.j4)(n,{key:0,class:"workout-title",to:{name:"Workout",params:{workoutId:(0,i.SU)(o).id}}},{default:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)((0,i.SU)(o).title),1)])),_:1},8,["to"])):(0,r.kq)("",!0),(0,i.SU)(o).workout_date&&(0,i.SU)(a)?((0,r.wg)(),(0,r.iD)("div",{key:1,class:"workout-date",title:(0,i.SU)(ze.Z)((0,i.SU)($e.eB)((0,i.SU)(o).workout_date,(0,i.SU)(a).timezone),"dd/MM/yyyy HH:mm")},(0,s.zw)((0,i.SU)(rr.Z)(new Date((0,i.SU)(o).workout_date),new Date,{addSuffix:!0,locale:(0,i.SU)(m)})),9,dr)):(0,r.kq)("",!0)]),(0,r._)("div",{class:(0,s.C_)(["workout-map",{"no-cursor":!(0,i.SU)(o)}]),onClick:t[0]||(t[0]=t=>(0,i.SU)(o).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(o).id}}):null)},[(0,i.SU)(o)?((0,r.wg)(),(0,r.iD)("div",mr,[(0,i.SU)(o).with_gpx?((0,r.wg)(),(0,r.j4)(sr.Z,{key:0,workout:(0,i.SU)(o)},null,8,["workout"])):((0,r.wg)(),(0,r.iD)("div",Sr,(0,s.zw)(e.$t("workouts.NO_MAP")),1))])):(0,r.kq)("",!0)],2),(0,r._)("div",{class:(0,s.C_)(["workout-data",{"without-gpx":(0,i.SU)(o)&&!(0,i.SU)(o).with_gpx}]),onClick:t[1]||(t[1]=t=>(0,i.SU)(o).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(o).id}}):null)},[(0,r._)("div",_r,[(0,i.SU)(u).label?((0,r.wg)(),(0,r.j4)(l,{key:0,"sport-label":(0,i.SU)(u).label,color:(0,i.SU)(u).color},null,8,["sport-label","color"])):(0,r.kq)("",!0)]),(0,r._)("div",Er,[pr,(0,i.SU)(o)?((0,r.wg)(),(0,r.iD)("span",Tr,(0,s.zw)((0,i.SU)(o).moving),1)):(0,r.kq)("",!0)]),(0,r._)("div",Ar,[Ur,(0,i.SU)(o).id?((0,r.wg)(),(0,r.j4)(c,{key:0,distance:(0,i.SU)(o).distance,digits:3,unitFrom:"km",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,r.kq)("",!0)]),(0,i.SU)(o)&&(0,i.SU)(o).with_gpx?((0,r.wg)(),(0,r.iD)("div",Or,[(0,r._)("img",{class:"mountains",src:"/img/workouts/mountains.svg",alt:e.$t("workouts.ELEVATION")},null,8,Rr),(0,r._)("div",Ir,[(0,i.SU)(o).id?((0,r.wg)(),(0,r.j4)(c,{key:0,distance:(0,i.SU)(o).min_alt,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,r.kq)("",!0),gr,(0,i.SU)(o).id?((0,r.wg)(),(0,r.j4)(c,{key:1,distance:(0,i.SU)(o).max_alt,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,r.kq)("",!0)])])):(0,r.kq)("",!0),(0,i.SU)(o)&&(0,i.SU)(o).with_gpx?((0,r.wg)(),(0,r.iD)("div",wr,[vr,(0,r._)("div",fr,[Nr,(0,i.SU)(o).id?((0,r.wg)(),(0,r.j4)(c,{key:0,distance:(0,i.SU)(o).ascent,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,r.kq)("",!0),hr,(0,i.SU)(o).id?((0,r.wg)(),(0,r.j4)(c,{key:1,distance:(0,i.SU)(o).descent,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,r.kq)("",!0)])])):(0,r.kq)("",!0)],2)])])}}});const Dr=(0,P.Z)(Cr,[["__scopeId","data-v-c9d1f10c"]]);var kr=Dr,zr=n(5630),Pr=n(3768);const Mr={id:"timeline"},yr={class:"section-title"},br={key:0},Lr={key:1},Gr={key:1,class:"more-workouts"};var Fr=(0,r.aZ)({props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:a,user:o}=(0,i.BK)(t);let u=(0,i.iH)(1);const d=5,m=t.user.nb_workouts>=d?d:t.user.nb_workouts;(0,r.wF)((()=>E()));const S=(0,r.Fl)((()=>n.getters[l.aX.GETTERS.TIMELINE_WORKOUTS])),_=(0,r.Fl)((()=>S.value.length>0&&null!==S.value[S.value.length-1].previous_workout));function E(){n.dispatch(l.aX.ACTIONS.GET_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Pr.eR})}function p(){u.value+=1,n.dispatch(l.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Pr.eR})}return(e,t)=>((0,r.wg)(),(0,r.iD)("div",Mr,[(0,r._)("div",yr,(0,s.zw)(e.$t("workouts.LATEST_WORKOUTS")),1),(0,i.SU)(o).nb_workouts>0&&0===(0,i.SU)(S).length?((0,r.wg)(),(0,r.iD)("div",br,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)([...Array((0,i.SU)(m)).keys()],(e=>((0,r.wg)(),(0,r.j4)(kr,{user:(0,i.SU)(o),useImperialUnits:(0,i.SU)(o).imperial_units,key:e},null,8,["user","useImperialUnits"])))),128))])):((0,r.wg)(),(0,r.iD)("div",Lr,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(S),(e=>((0,r.wg)(),(0,r.j4)(kr,{workout:e,sport:(0,i.SU)(S).length>0?(0,i.SU)(a).filter((t=>t.id===e.sport_id))[0]:null,user:(0,i.SU)(o),useImperialUnits:(0,i.SU)(o).imperial_units,key:e.id},null,8,["workout","sport","user","useImperialUnits"])))),128)),0===(0,i.SU)(S).length?((0,r.wg)(),(0,r.j4)(zr.Z,{key:0})):(0,r.kq)("",!0),(0,i.SU)(_)?((0,r.wg)(),(0,r.iD)("div",Gr,[(0,r._)("button",{onClick:p},(0,s.zw)(e.$t("workouts.LOAD_MORE_WORKOUT")),1)])):(0,r.kq)("",!0)]))]))}});const Wr=(0,P.Z)(Fr,[["__scopeId","data-v-9ef2a9ac"]]);var Yr=Wr,xr=n(1640),$r=n(4559),Zr=n(7349),Kr=n(1743),Br=n(9160),Hr=n(1085);const qr=["title"];var jr=(0,r.aZ)({props:{workout:null,sportLabel:null,sportColor:null},setup(e){const t=e,{workout:n,sportLabel:a,sportColor:s}=(0,i.BK)(t);return(e,t)=>{const o=(0,r.up)("SportImage");return(0,r.wg)(),(0,r.iD)("div",{class:"calendar-workout",onClick:t[0]||(t[0]=t=>e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(n).id}}))},[(0,r.Wm)(o,{"sport-label":(0,i.SU)(a),title:(0,i.SU)(n).title,color:(0,i.SU)(s)},null,8,["sport-label","title","color"]),(0,r._)("sup",null,[(0,i.SU)(n).records.length>0?((0,r.wg)(),(0,r.iD)("i",{key:0,class:"fa fa-trophy custom-fa-small","aria-hidden":"true",title:(0,i.SU)(n).records.map((t=>` ${e.$t(`workouts.RECORD_${t.record_type}`)}`))},null,8,qr)):(0,r.kq)("",!0)])])}}});const Vr=jr;var Xr=Vr;const Jr={class:"donut-chart"},Qr={height:"34",width:"34",viewBox:"0 0 34 34"},es=["stroke","stroke-dashoffset","transform"];var ts=(0,r.aZ)({props:{colors:null,datasets:null},setup(e){const t=e,{colors:n,datasets:a}=(0,i.BK)(t);let s=-90;const o=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(${s}, ${o}, ${l})`;return s=360*t+s,n}return(e,t)=>((0,r.wg)(),(0,r.iD)("div",Jr,[((0,r.wg)(),(0,r.iD)("svg",Qr,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)(Object.entries((0,i.SU)(a)),((e,t)=>((0,r.wg)(),(0,r.iD)("g",{key:t},[(0,r._)("circle",{cx:o,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,es)])))),128))]))]))}});const ns=ts;var as=ns;const rs={class:"calendar-workouts-chart"},ss={class:"workouts-count"},os={key:0,class:"workouts-pane"},is={class:"more-workouts"};var ls=(0,r.aZ)({props:{colors:null,datasets:null,sports:null,workouts:null},setup(e){const t=e,{colors:n,datasets:a,sports:o,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,r.Q2)("click-outside");return(0,r.wg)(),(0,r.iD)("div",rs,[(0,r._)("div",{class:"workouts-chart",onClick:u},[(0,r._)("div",ss,(0,s.zw)((0,i.SU)(l).length),1),(0,r.Wm)(as,{datasets:(0,i.SU)(a),colors:(0,i.SU)(n)},null,8,["datasets","colors"])]),c.value?(0,r.kq)("",!0):((0,r.wg)(),(0,r.iD)("div",os,[(0,r.wy)(((0,r.wg)(),(0,r.iD)("div",is,[(0,r._)("i",{class:"fa fa-times calendar-more","aria-hidden":"true",onClick:u}),((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(l),((e,t)=>((0,r.wg)(),(0,r.j4)(Xr,{key:t,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,["workout","sportLabel","sportColor"])))),128))])),[[d,u]])]))])}}});const cs=(0,P.Z)(ls,[["__scopeId","data-v-52d4310a"]]);var us=cs;const ds={class:"calendar-workouts"},ms={class:"desktop-display"},Ss={key:0,class:"workouts-display"},_s={key:1,class:"donut-display"},Es={class:"mobile-display"},ps={key:0,class:"donut-display"};var Ts=(0,r.aZ)({props:{workouts:null,sports:null},setup(e){const t=e,{workouts:n,sports:a}=(0,i.BK)(t),s=(0,r.Fl)((()=>(0,Pr.BN)(t.workouts))),o=(0,r.Fl)((()=>(0,le.Yx)(t.sports))),l=6;return(e,t)=>((0,r.wg)(),(0,r.iD)("div",ds,[(0,r._)("div",ms,[(0,i.SU)(n).length<=l?((0,r.wg)(),(0,r.iD)("div",Ss,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(n).slice(0,l),((e,t)=>((0,r.wg)(),(0,r.j4)(Xr,{key:t,workout:e,sportLabel:(0,i.SU)(le.PA)(e,(0,i.SU)(a)),sportColor:(0,i.SU)(le.CM)(e,(0,i.SU)(a))},null,8,["workout","sportLabel","sportColor"])))),128))])):((0,r.wg)(),(0,r.iD)("div",_s,[(0,r.Wm)(us,{workouts:(0,i.SU)(n),sports:(0,i.SU)(a),datasets:(0,i.SU)(s),colors:(0,i.SU)(o)},null,8,["workouts","sports","datasets","colors"])]))]),(0,r._)("div",Es,[(0,i.SU)(n).length>0?((0,r.wg)(),(0,r.iD)("div",ps,[(0,r.Wm)(us,{workouts:(0,i.SU)(n),sports:(0,i.SU)(a),datasets:(0,i.SU)(s),colors:(0,i.SU)(o)},null,8,["workouts","sports","datasets","colors"])])):(0,r.kq)("",!0)])]))}});const As=Ts;var Us=As;const Os={class:"calendar-cells"},Rs={class:"calendar-cell-day"};var Is=(0,r.aZ)({props:{currentDay:null,endDate:null,sports:null,startDate:null,timezone:null,weekStartingMonday:{type:Boolean},workouts:null},setup(e){const t=e,{currentDay:n,endDate:a,sports:o,startDate:l,timezone:c,weekStartingMonday:u,workouts:d}=(0,i.BK)(t),m=(0,i.iH)([]);function S(){m.value=[];let e=l.value;while(e<=a.value){const t=[];for(let n=0;n<7;n++)t.push(e),e=(0,Zr.Z)(e,1);m.value.push(t)}}function _(e){return u.value?[5,6].includes(e):[0,6].includes(e)}function E(e,t){return t?t.filter((t=>(0,Kr.Z)((0,$e.eB)(t.workout_date,c.value),e))).reverse():[]}return(0,r.bv)((()=>S())),(0,r.YP)((()=>t.currentDay),(()=>S())),(e,t)=>((0,r.wg)(),(0,r.iD)("div",Os,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)(m.value,((e,t)=>((0,r.wg)(),(0,r.iD)("div",{class:"calendar-row",key:t},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)(e,((e,t)=>((0,r.wg)(),(0,r.iD)("div",{class:(0,s.C_)(["calendar-cell",{"disabled-cell":!(0,i.SU)(Br.Z)(e,(0,i.SU)(n)),"week-end":_(t),today:(0,i.SU)(Hr.Z)(e)}]),key:t},[(0,r.Wm)(Us,{workouts:E(e,(0,i.SU)(d)),sports:(0,i.SU)(o)},null,8,["workouts","sports"]),(0,r._)("div",Rs,(0,s.zw)((0,i.SU)(ze.Z)(e,"d")),1)],2)))),128))])))),128))]))}});const gs=Is;var ws=gs;const vs={class:"calendar-days"};var fs=(0,r.aZ)({props:{startDate:null,localeOptions:null},setup(e){const t=e,n=[];for(let a=0;a<7;a++)n.push((0,Zr.Z)(t.startDate,a));return(t,a)=>((0,r.wg)(),(0,r.iD)("div",vs,[((0,r.wg)(),(0,r.iD)(r.HY,null,(0,r.Ko)(n,((t,n)=>(0,r._)("div",{class:"calendar-day",key:n},(0,s.zw)((0,i.SU)(ze.Z)(t,"EEE",{locale:e.localeOptions})),1))),64))]))}});const Ns=fs;var hs=Ns;const Cs={class:"calendar-header"},Ds=(0,r._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1),ks=[Ds],zs={class:"calendar-month"},Ps=(0,r._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1),Ms=[Ps];var ys=(0,r.aZ)({props:{day:null,localeOptions:null},emits:["displayNextMonth","displayPreviousMonth"],setup(e,{emit:t}){const n=e,{day:a,localeOptions:o}=(0,i.BK)(n);return(e,n)=>((0,r.wg)(),(0,r.iD)("div",Cs,[(0,r._)("div",{class:"calendar-arrow calendar-arrow-left",onClick:n[0]||(n[0]=e=>t("displayPreviousMonth"))},ks),(0,r._)("div",zs,[(0,r._)("span",null,(0,s.zw)((0,i.SU)(ze.Z)((0,i.SU)(a),"MMM yyyy",{locale:(0,i.SU)(o)})),1)]),(0,r._)("div",{class:"calendar-arrow calendar-arrow-right",onClick:n[1]||(n[1]=e=>t("displayNextMonth"))},Ms)]))}});const bs=ys;var Ls=bs;const Gs={id:"user-calendar"},Fs={class:"calendar-card box"};var Ws=(0,r.aZ)({props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:a,user:s}=(0,i.BK)(t),o="yyyy-MM-dd";let u=(0,i.iH)(new Date),d=(0,i.iH)((0,$e.yx)(u.value,t.user.weekm));const m=(0,r.Fl)((()=>n.getters[l.aX.GETTERS.CALENDAR_WORKOUTS])),S=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));function _(){d.value=(0,$e.yx)(u.value,t.user.weekm);const e={from:(0,ze.Z)(d.value.start,o),to:(0,ze.Z)(d.value.end,o),page:1,per_page:100,...Pr.eR};n.dispatch(l.aX.ACTIONS.GET_CALENDAR_WORKOUTS,e)}function E(){u.value=(0,xr.Z)(u.value,1),_()}function p(){u.value=(0,$r.Z)(u.value,1),_()}return(0,r.wF)((()=>_())),(e,t)=>((0,r.wg)(),(0,r.iD)("div",Gs,[(0,r._)("div",Fs,[(0,r.Wm)(Ls,{day:(0,i.SU)(u),"locale-options":(0,i.SU)(S),onDisplayNextMonth:E,onDisplayPreviousMonth:p},null,8,["day","locale-options"]),(0,r.Wm)(hs,{"start-date":(0,i.SU)(d).start,"locale-options":(0,i.SU)(S)},null,8,["start-date","locale-options"]),(0,r.Wm)(ws,{currentDay:(0,i.SU)(u),"end-date":(0,i.SU)(d).end,sports:(0,i.SU)(a),"start-date":(0,i.SU)(d).start,timezone:(0,i.SU)(s).timezone,workouts:(0,i.SU)(m),weekStartingMonday:(0,i.SU)(s).weekm},null,8,["currentDay","end-date","sports","start-date","timezone","workouts","weekStartingMonday"])])]))}});const Ys=Ws;var xs=Ys,$s=n(3703),Zs=n(4135),Ks=n(7402);const Bs={class:"user-month-stats"};var Hs=(0,r.aZ)({props:{sports:null,user:null},setup(e){const t=e,{sports:n,user:a}=(0,i.BK)(t),o=new Date,l={duration:"week",start:(0,$s.Z)(o),end:(0,Zs.Z)(o)},c=t.sports.map((e=>e.id));return(e,t)=>{const o=(0,r.up)("Card");return(0,r.wg)(),(0,r.iD)("div",Bs,[(0,r.Wm)(o,null,{title:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(e.$t("dashboard.THIS_MONTH")),1)])),content:(0,r.w5)((()=>[(0,r.Wm)(Ks.Z,{sports:(0,i.SU)(n),user:(0,i.SU)(a),"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 qs=(0,P.Z)(Hs,[["__scopeId","data-v-1bcddc12"]]);var js=qs;const Vs={class:"records-card"},Xs={class:"record-type"},Js={class:"record-value"},Qs={class:"record-date"};var eo=(0,r.aZ)({props:{records:null,sportTranslatedLabel:null},setup(e){const t=e,{records:n,sportTranslatedLabel:a}=(0,i.BK)(t);return(e,t)=>{const o=(0,r.up)("SportImage"),l=(0,r.up)("router-link"),c=(0,r.up)("Card");return(0,r.wg)(),(0,r.iD)("div",Vs,[(0,r.Wm)(c,null,{title:(0,r.w5)((()=>[(0,r.Wm)(o,{"sport-label":(0,i.SU)(n).label,color:(0,i.SU)(n).color},null,8,["sport-label","color"]),(0,r.Uk)(" "+(0,s.zw)((0,i.SU)(a)),1)])),content:(0,r.w5)((()=>[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(n).records,(t=>((0,r.wg)(),(0,r.iD)("div",{class:"record",key:t.id},[(0,r._)("span",Xs,(0,s.zw)(e.$t(`workouts.RECORD_${t.record_type}`)),1),(0,r._)("span",Js,(0,s.zw)(t.value),1),(0,r._)("span",Qs,[(0,r.Wm)(l,{to:{name:"Workout",params:{workoutId:t.workout_id}}},{default:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(t.workout_date),1)])),_:2},1032,["to"])])])))),128))])),_:1})])}}});const to=(0,P.Z)(eo,[["__scopeId","data-v-aee1f956"]]);var no=to,ao=(n(1703),n(3649));const ro=(e,t,n)=>{const a="km",r=n?ao.Dl[a].defaultTarget:a;let s;switch(e.record_type){case"AS":case"MS":s=`${(0,ao.sC)(+e.value,a,r,2)} ${r}/h`;break;case"FD":s=`${(0,ao.sC)(+e.value,a,r,3)} ${r}`;break;case"LD":s=e.value;break;default:throw new Error(`Invalid record type, expected: "AS", "FD", "LD", "MD", got: "${e.record_type}"`)}return{workout_date:(0,$e.Jo)((0,$e.eB)(e.workout_date,t)).workout_date,workout_id:e.workout_id,id:e.id,record_type:e.record_type,value:s}},so=(e,t,n,a)=>e.reduce(((e,r)=>{const s=t.find((e=>e.id===r.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(ro(r,n,a))),e}),{}),oo=e=>((0,r.dD)("data-v-ae25a82a"),e=e(),(0,r.Cn)(),e),io={class:"user-records-section"},lo={class:"section-title"},co=oo((()=>(0,r._)("i",{class:"fa fa-trophy custom-fa-small","aria-hidden":"true"},null,-1))),uo={class:"user-records"},mo={key:0,class:"no-records"};var So=(0,r.aZ)({props:{sports:null,user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),a=(0,r.Fl)((()=>so(t.user.records,(0,le.xH)(t.sports,n),t.user.timezone,t.user.imperial_units)));return(t,n)=>((0,r.wg)(),(0,r.iD)("div",io,[(0,r._)("div",lo,[co,(0,r.Uk)(" "+(0,s.zw)(t.$t("workouts.RECORD",2)),1)]),(0,r._)("div",uo,[0===Object.keys((0,i.SU)(a)).length?((0,r.wg)(),(0,r.iD)("div",mo,(0,s.zw)(t.$t("workouts.NO_RECORDS")),1)):(0,r.kq)("",!0),((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)(Object.keys((0,i.SU)(a)).sort(),(t=>((0,r.wg)(),(0,r.j4)(no,{sportTranslatedLabel:t,records:(0,i.SU)(a)[t],key:t,useImperialUnits:e.user.imperial_units},null,8,["sportTranslatedLabel","records","useImperialUnits"])))),128))])]))}});const _o=(0,P.Z)(So,[["__scopeId","data-v-ae25a82a"]]);var Eo=_o;const po={id:"user-stats"};var To=(0,r.aZ)({props:{user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),{user:a}=(0,i.BK)(t),s=(0,r.Fl)((()=>t.user.total_duration)),o=(0,r.Fl)((()=>d(s))),l="km",c=a.value.imperial_units?ao.Dl[l].defaultTarget:l,u=(0,r.Fl)((()=>a.value.imperial_units?(0,ao.sC)(a.value.total_distance,l,c,2):parseFloat(a.value.total_distance.toFixed(2))));function d(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,r.wg)(),(0,r.iD)("div",po,[(0,r.Wm)(Z,{icon:"calendar",value:(0,i.SU)(a).nb_workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(a).nb_workouts)},null,8,["value","text"]),(0,r.Wm)(Z,{icon:"road",value:(0,i.SU)(u),text:"mi"===(0,i.SU)(c)?"miles":(0,i.SU)(c)},null,8,["value","text"]),(0,r.Wm)(Z,{icon:"clock-o",value:(0,i.SU)(o).days,text:(0,i.SU)(o).duration},null,8,["value","text"]),(0,r.Wm)(Z,{icon:"tags",value:(0,i.SU)(a).nb_sports,text:e.$t("workouts.SPORT",(0,i.SU)(a).nb_sports)},null,8,["value","text"])]))}});const Ao=To;var Uo=Ao;const Oo=e=>((0,r.dD)("data-v-20e19721"),e=e(),(0,r.Cn)(),e),Ro={key:0,id:"dashboard",class:"view"},Io={class:"container mobile-menu"},go={class:"box"},wo=Oo((()=>(0,r._)("i",{class:"fa fa-calendar","aria-hidden":"true"},null,-1))),vo=[wo],fo=Oo((()=>(0,r._)("i",{class:"fa fa-bar-chart","aria-hidden":"true"},null,-1))),No=[fo],ho=Oo((()=>(0,r._)("i",{class:"fa fa-map-o","aria-hidden":"true"},null,-1))),Co=[ho],Do=Oo((()=>(0,r._)("i",{class:"fa fa-trophy","aria-hidden":"true"},null,-1))),ko=[Do],zo={class:"container"},Po={class:"container dashboard-container"},Mo={class:"left-container dashboard-sub-container"},yo={class:"right-container dashboard-sub-container"},bo=Oo((()=>(0,r._)("div",{id:"bottom"},null,-1))),Lo={key:1,class:"app-loading"};var Go=(0,r.aZ)({setup(e){const t=(0,c.o)(),n=(0,r.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),a=(0,r.Fl)((()=>t.getters[l.O8.GETTERS.SPORTS])),o=(0,i.iH)("calendar");function u(e){o.value=e}return(e,t)=>{const l=(0,r.up)("Loader");return(0,i.SU)(n).username&&(0,i.SU)(a).length>0?((0,r.wg)(),(0,r.iD)("div",Ro,[(0,r._)("div",Io,[(0,r._)("div",go,[(0,r._)("div",{class:(0,s.C_)(["mobile-menu-item",{"is-selected":"calendar"===o.value}]),onClick:t[0]||(t[0]=e=>u("calendar"))},vo,2),(0,r._)("div",{class:(0,s.C_)(["mobile-menu-item",{"is-selected":"chart"===o.value}]),onClick:t[1]||(t[1]=e=>u("chart"))},No,2),(0,r._)("div",{class:(0,s.C_)(["mobile-menu-item",{"is-selected":"timeline"===o.value}]),onClick:t[2]||(t[2]=e=>u("timeline"))},Co,2),(0,r._)("div",{class:(0,s.C_)(["mobile-menu-item",{"is-selected":"records"===o.value}]),onClick:t[3]||(t[3]=e=>u("records"))},ko,2)])]),(0,r._)("div",zo,[(0,r.Wm)(Uo,{user:(0,i.SU)(n)},null,8,["user"])]),(0,r._)("div",Po,[(0,r._)("div",Mo,[(0,r.Wm)(js,{sports:(0,i.SU)(a),user:(0,i.SU)(n),class:(0,s.C_)({"is-hidden":!("chart"===o.value)})},null,8,["sports","user","class"]),(0,r.Wm)(Eo,{sports:(0,i.SU)(a),user:(0,i.SU)(n),class:(0,s.C_)({"is-hidden":!("records"===o.value)})},null,8,["sports","user","class"])]),(0,r._)("div",yo,[(0,r.Wm)(xs,{sports:(0,i.SU)(a),user:(0,i.SU)(n),class:(0,s.C_)({"is-hidden":!("calendar"===o.value)})},null,8,["sports","user","class"]),(0,r.Wm)(Yr,{sports:(0,i.SU)(a),user:(0,i.SU)(n),class:(0,s.C_)({"is-hidden":!("timeline"===o.value)})},null,8,["sports","user","class"])])]),bo])):((0,r.wg)(),(0,r.iD)("div",Lo,[(0,r.Wm)(l)]))}}});const Fo=(0,P.Z)(Go,[["__scopeId","data-v-20e19721"]]);var Wo=Fo,Yo=n(8273);const xo={class:"not-found view"};var $o=(0,r.aZ)({setup(e){return(e,t)=>((0,r.wg)(),(0,r.iD)("div",xo,[(0,r.Wm)(Yo.Z)]))}});const Zo=$o;var Ko=Zo,Bo=n(2422);const Ho={id:"loginOrRegister",class:"view"},qo={class:"container"},jo={class:"container-sub"},Vo={class:"container-sub"};var Xo=(0,r.aZ)({props:{action:null},setup(e){const t=e,{action:n}=(0,i.BK)(t);return(e,t)=>((0,r.wg)(),(0,r.iD)("div",Ho,[(0,r._)("div",qo,[(0,r._)("div",jo,[(0,r.Wm)(Va)]),(0,r._)("div",Vo,[(0,r.Wm)(Bo.Z,{action:(0,i.SU)(n)},null,8,["action"])])])]))}});const Jo=(0,P.Z)(Xo,[["__scopeId","data-v-6a38125b"]]);var Qo=Jo;const ei=e=>{const t=/(\/profile)(\/edit)*(\/*)/,n=e.replace(t,"").toUpperCase();return""===n?"PROFILE":n.toUpperCase()},ti=[{path:"/",name:"Dashboard",component:Wo},{path:"/login",name:"Login",component:Qo,props:{action:"login"}},{path:"/register",name:"Register",component:Qo,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:vt,props:e=>({tab:ei(e.path)}),children:[{path:"",name:"UserInfos",component:ft.Z},{path:"preferences",name:"UserPreferences",component:zt},{path:"sports",name:"UserSportPreferences",component:ha,props:{isEdition:!1}}]},{path:"edit",name:"UserProfileEdition",component:bt,props:e=>({tab:ei(e.path)}),children:[{path:"",name:"UserInfosEdition",component:En},{path:"account",name:"UserAccountEdition",component:Vt},{path:"picture",name:"UserPictureEdition",component:Nn},{path:"preferences",name:"UserPreferencesEdition",component:Jn},{path:"sports",name:"UserSportPreferencesEdition",component:ha,props:{isEdition:!0}}]}]},{path:"/statistics",name:"Statistics",component:()=>n.e(193).then(n.bind(n,7749))},{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,5298))},{path:"/workouts/:workoutId",name:"Workout",component:()=>n.e(401).then(n.bind(n,7365)),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,7365)),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:oe},{path:"application",name:"ApplicationAdministration",component:y},{path:"application/edit",name:"ApplicationAdministrationEdition",component:y,props:{edition:!0}},{path:"sports",name:"SportsAdministration",component:ke},{path:"users/:username",name:"UserFromAdmin",component:()=>n.e(845).then(n.bind(n,9453)),props:{fromAdmin:!0}},{path:"users",name:"UsersAdministration",component:St}]},{path:"/about",name:"About",component:ar},{path:"/:pathMatch(.*)*",name:"not-found",component:Ko}],ni=(0,a.p7)({history:(0,a.PO)("/"),routes:ti}),ai=["/login","/password-reset","/password-reset/password-updated","/password-reset/request","/password-reset/sent","/register","/account-confirmation","/account-confirmation/resend","/account-confirmation/email-sent"],ri=["/email-update","/about"];ni.beforeEach(((e,t,n)=>{Ca.Z.dispatch(l.YN.ACTIONS.CHECK_AUTH_USER).then((()=>{if(ri.includes(e.path))return n();if(Ca.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]&&ai.includes(e.path))return n("/");if(Ca.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]||ai.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 si=ni},8602:function(e,t,n){"use strict";var a,r,s,o,i,l,c,u,d,m,S,_,E,p,T;n.d(t,{YN:function(){return I},SY:function(){return U},O8:function(){return O},gu:function(){return R},RT:function(){return g},aX:function(){return w}}),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"}(a||(a={})),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"}(r||(r={})),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"}(s||(s={})),function(e){e["GET_APPLICATION_CONFIG"]="GET_APPLICATION_CONFIG",e["GET_APPLICATION_STATS"]="GET_APPLICATION_STATS",e["UPDATE_APPLICATION_CONFIG"]="UPDATE_APPLICATION_CONFIG"}(o||(o={})),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"}(i||(i={})),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"}(l||(l={})),function(e){e["GET_SPORTS"]="GET_SPORTS",e["UPDATE_SPORTS"]="UPDATE_SPORTS"}(c||(c={})),function(e){e["SPORTS"]="SPORTS"}(u||(u={})),function(e){e["SET_SPORTS"]="SET_SPORTS"}(d||(d={})),function(e){e["GET_USER_STATS"]="GET_USER_STATS"}(m||(m={})),function(e){e["USER_STATS"]="USER_STATS"}(S||(S={})),function(e){e["EMPTY_USER_STATS"]="EMPTY_USER_STATS",e["UPDATE_USER_STATS"]="UPDATE_USER_STATS"}(_||(_={})),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"}(E||(E={})),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"}(p||(p={})),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"}(T||(T={}));var A=n(52);const U={ACTIONS:o,GETTERS:i,MUTATIONS:l},O={ACTIONS:c,GETTERS:u,MUTATIONS:d},R={ACTIONS:m,GETTERS:S,MUTATIONS:_},I={ACTIONS:a,GETTERS:r,MUTATIONS:s},g={ACTIONS:E,GETTERS:p,MUTATIONS:T},w={ACTIONS:A.tW,GETTERS:A.JP,MUTATIONS:A.CW}},12:function(e,t,n){"use strict";n.d(t,{Z:function(){return re}});var a=n(3907),r=(n(1703),n(5167)),s=n(9669),o=n.n(s),i=n(2024);const l=o().create({baseURL:(0,i.k)()});var c=l,u=n(2540),d=n(8733),m=n(8602);const S=(e,t)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),r.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,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))},_={[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),r.Z.get(`users/${t}`).then((t=>{"success"===t.data.status?e.commit(m.RT.MUTATIONS.UPDATE_USER,t.data.data.users[0]):(0,i.S)(e,null)})).catch((t=>(0,i.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),r.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,i.S)(e,null)})).catch((t=>(0,i.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),r.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,i.S)(e,null)})).catch((t=>(0,i.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.DELETE_USER_ACCOUNT](e,t){S(e,{username:t.username,fromAdmin:!0})}},{locale:E}=u.Z.global,p=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))},[m.YN.ACTIONS.CONFIRM_ACCOUNT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),c.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,i.S)(e,null)})).catch((t=>{(0,i.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),c.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,i.S)(e,null)})).catch((t=>{(0,i.S)(e,t)}))},[m.YN.ACTIONS.GET_USER_PROFILE](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),r.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.commit(m.SY.MUTATIONS.UPDATE_LANG,t.data.data.language),E.value=t.data.data.language),e.dispatch(m.O8.ACTIONS.GET_SPORTS)):((0,i.S)(e,null),p(e))})).catch((t=>{(0,i.S)(e,t),p(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),c.post(`/auth/${t.actionType}`,t.formData).then((n=>{if("success"===n.data.status)if("login"===t.actionType){const a=n.data.auth_token;window.localStorage.setItem("authToken",a),e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,a),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,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))},[m.YN.ACTIONS.LOGOUT](e){p(e)},[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),r.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,i.S)(e,null)})).catch((t=>(0,i.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),r.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,i.S)(e,null)})).catch((t=>(0,i.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),r.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.commit(m.SY.MUTATIONS.UPDATE_LANG,t.data.data.language),E.value=t.data.data.language,d.Z.push("/profile/preferences")):(0,i.S)(e,null)})).catch((t=>(0,i.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),r.Z["delete"](`auth/profile/reset/sports/${t}`).then((t=>{204===t.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,i.S)(e,null)})).catch((t=>{(0,i.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),r.Z.post("auth/profile/edit/sports",t).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,i.S)(e,null)})).catch((t=>{(0,i.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),r.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,i.S)(e,null)})).catch((t=>(0,i.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.DELETE_ACCOUNT](e,t){S(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),r.Z["delete"]("auth/picture").then((t=>{204===t.status?e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile"))):(0,i.S)(e,null)})).catch((t=>(0,i.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),c.post("auth/password/reset-request",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/sent"):(0,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))},[m.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),c.post("auth/account/resend-confirmation",t).then((t=>{"success"===t.data.status?d.Z.push("/account-confirmation/email-sent"):(0,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))},[m.YN.ACTIONS.RESET_USER_PASSWORD](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),c.post("auth/password/update",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/password-updated"):(0,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))}},A={[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},U={[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:A,mutations:U};var I=R;const g={[m.SY.ACTIONS.GET_APPLICATION_CONFIG](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING,!0),r.Z.get("config").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG,t.data.data):(0,i.S)(e,null)})).catch((t=>(0,i.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),r.Z.get("stats/all").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_STATS,t.data.data):(0,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))},[m.SY.ACTIONS.UPDATE_APPLICATION_CONFIG](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),r.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,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))}},w={[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 v=n(6287);const f={[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=v.v1[t]}};var N=n(5826);const h={root:!0,language:"en",locale:N.Z,errorMessages:null,application:{statistics:{sports:0,uploads_dir_size:0,users:0,workouts:0}},appLoading:!1},C={[m.O8.ACTIONS.GET_SPORTS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),r.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,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))},[m.O8.ACTIONS.UPDATE_SPORTS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),r.Z.patch(`sports/${t.id}`,{is_active:t.isActive}).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))}},D={[m.O8.GETTERS.SPORTS]:e=>e.sports},k={[m.O8.MUTATIONS.SET_SPORTS](e,t){e.sports=t}},z={sports:[]},P={state:z,actions:C,getters:D,mutations:k};var M=P;const y={[m.gu.ACTIONS.GET_USER_STATS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),r.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,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))}},b={[m.gu.GETTERS.USER_STATS]:e=>e.statistics},L={[m.gu.MUTATIONS.UPDATE_USER_STATS](e,t){e.statistics=t},[m.gu.MUTATIONS.EMPTY_USER_STATS](e){e.statistics={}}},G={statistics:{}},F={state:G,actions:y,getters:b,mutations:L};var W=F;const Y={[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},x={[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}},$={user:{},users:[],loading:!1,isSuccess:!1,pagination:{}},Z={state:$,actions:_,getters:Y,mutations:x};var K=Z,B=n(52);const H=(e,t,n)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),r.Z.get("workouts",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.aX.MUTATIONS[n],t.data.data.workouts),n===B.CW.SET_USER_WORKOUTS&&e.commit(m.aX.MUTATIONS.SET_WORKOUTS_PAGINATION,t.data.pagination)):(0,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))},q={[m.aX.ACTIONS.GET_CALENDAR_WORKOUTS](e,t){e.commit(m.aX.MUTATIONS.EMPTY_CALENDAR_WORKOUTS),H(e,t,B.CW.SET_CALENDAR_WORKOUTS)},[m.aX.ACTIONS.GET_USER_WORKOUTS](e,t){H(e,t,B.CW.SET_USER_WORKOUTS)},[m.aX.ACTIONS.GET_TIMELINE_WORKOUTS](e,t){H(e,t,B.CW.SET_TIMELINE_WORKOUTS)},[m.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS](e,t){H(e,t,B.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}`:"";r.Z.get(`workouts/${t.workoutId}`).then((a=>{const s=a.data.data.workouts[0];if("success"===a.data.status){if(t.segmentId&&(0===s.segments.length||!s.segments[+t.segmentId-1]))throw new Error("WORKOUT_NOT_FOUND");e.commit(m.aX.MUTATIONS.SET_WORKOUT,a.data.data.workouts[0]),a.data.data.workouts[0].with_gpx&&(r.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)})),r.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,i.S)(e,null)})).catch((t=>{e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),(0,i.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),r.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,i.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),r.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,i.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}"}`),r.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,i.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),r.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,i.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))}},j={[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},V={[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:[]}}},X={calendar_workouts:[],timeline_workouts:[],pagination:{},user_workouts:[],workoutData:{gpx:"",loading:!1,workout:{},chartData:[]}},J={state:X,actions:q,getters:j,mutations:V};var Q=J;const ee={authUserModule:I,sportsModule:M,statsModule:W,usersModule:K,workoutsModule:Q},te={state:h,actions:g,getters:w,mutations:f,modules:ee};var ne=te;const ae=(0,a.MT)(ne);var re=ae},52:function(e,t,n){"use strict";var a,r,s;n.d(t,{CW:function(){return s},JP:function(){return r},tW:function(){return a}}),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"}(a||(a={})),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"}(r||(r={})),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"}(s||(s={}))},9917:function(e,t,n){"use strict";n.d(t,{o:function(){return r}});var a=n(3907);function r(){return(0,a.oR)()}},2766:function(e,t,n){"use strict";n.d(t,{Ne:function(){return c},fS:function(){return a},lM:function(){return d},pm:function(){return l}});const a=["asc","desc"],r=1,s=10,o=(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=o(e.page,r),d.per_page=o(e.per_page,s),d.order=i(e.order,a,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,a.Z)(t,{weekStartsOn:n?1:0});case"year":return(0,r.Z)(t);case"month":return(0,s.Z)(t);default:throw new Error(`Invalid duration, expected: "week", "month", "year", got: "${e}"`)}},_=(e,t)=>{switch(e){case"week":return(0,o.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}"`)}},E=(e,t)=>(0,m.utcToZonedTime)(new Date(e),t),p=(e,t)=>{const n=(0,s.Z)(e),r=(0,c.Z)(e),o=t?1:0;return{start:(0,a.Z)(n,{weekStartsOn:o}),end:(0,u.Z)(r,{weekStartsOn:o})}},T=(e,t=null,n=null)=>(t||(t="yyyy/MM/dd"),n||(n="HH:mm"),{workout_date:(0,d.Z)(e,t),workout_time:(0,d.Z)(e,n)})},8966:function(e,t,n){"use strict";n.d(t,{Z:function(){return r},j:function(){return s}});const a=["bytes","KB","MB","GB","TB"],r=(e,t=!0)=>{const n=Math.floor(Math.log(e)/Math.log(1024));if(!e)return t?"0 bytes":{size:"0",suffix:"bytes"};const r=(e/Math.pow(1024,n)).toFixed(1),s=a[n];return t?`${r}${s}`:{size:r,suffix:s}},s=e=>{const t=e/1048576;return+t.toFixed(2)}},2024:function(e,t,n){"use strict";n.d(t,{S:function(){return s},k:function(){return r}});var a=n(8602);const r=()=>"/api/",s=(e,t,n="UNKNOWN")=>{const r=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(a.SY.MUTATIONS.SET_ERROR_MESSAGES,r.includes("\n")?r.split("\n").filter((e=>""!==e)).map((e=>`api.ERROR.${e}`)):`api.ERROR.${r}`)}},6287:function(e,t,n){"use strict";n.d(t,{mT:function(){return c},v1:function(){return o},zK:function(){return i}});var a=n(5826),r=n(5830),s=n(2540);const o={en:a.Z,fr:r.Z},i={en:"English",fr:"Français"},{availableLocales:l}=s.Z.global,c=l.map((e=>({label:i[e],value:e})))},631:function(e,t,n){"use strict";n.d(t,{CM:function(){return l},PA:function(){return i},Yx:function(){return r},Zo:function(){return a},xH:function(){return o}});const a={"Cycling (Sport)":"#4c9792","Cycling (Transport)":"#88af98",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"},r=e=>{const t={};return e.map((e=>t[e.id]=e.color?e.color:a[e.label])),t},s=(e,t)=>{const n=e.translatedLabel.toLowerCase(),a=t.translatedLabel.toLowerCase();return n>a?1:ne.filter((e=>"all"===n||(a.includes(e.id)||e[n]))).map((e=>({...e,translatedLabel:t(`sports.${e.label}.LABEL`)}))).sort(s),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 N},aZ:function(){return f},v1:function(){return v}});var a=n(4850),r=n(8148),s=n(9319),o=n(584),i=n(4559),l=n(3703),c=n(876),u=n(7090),d=n(4135),m=n(1593),S=n(7982),_=n(3500),E=n(1640),p=n(6558),T=n(631),A=n(3649);const U={week:{api:"yyyy-MM-dd",chart:"dd/MM/yyyy"},month:{api:"yyyy-MM",chart:"MM/yyyy"},year:{api:"yyyy",chart:"yyyy"}},O=["average_speed","nb_workouts","total_duration","total_distance","total_ascent","total_descent"],R=(e,t)=>{const n=[];for(let a=(0,p.Nh)(e.duration,e.start,t);a<=e.end;a=(0,p.xA)(e.duration,a))n.push(a);return n},I=(e,t,n=!1)=>{const a={label:e,backgroundColor:[t],data:[]};return n&&(a.type="line",a.borderColor=[t],a.spanGaps=!0),a},g=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:T.Zo[e.label];t.average_speed.push(I(e.label,n,!0)),t.nb_workouts.push(I(e.label,n)),t.total_distance.push(I(e.label,n)),t.total_duration.push(I(e.label,n)),t.total_ascent.push(I(e.label,n)),t.total_descent.push(I(e.label,n))})),t},w=(e,t,n)=>{switch(e){case"average_speed":case"total_distance":case"total_ascent":case"total_descent":return(0,A.f3)(["average_speed","total_distance"].includes(e)?"km":"m",t,n);default:case"nb_workouts":case"total_duration":return t}},v=(e,t,n,r,s,o)=>{const i=R(e,t),l=U[e.duration],c=n.filter((e=>r.includes(e.id))),u=[],d=g(c),m={};return c.map((e=>m[e.label]=e.id)),i.map((e=>{const t=(0,a.Z)(e,l.api),n=(0,a.Z)(e,l.chart);u.push(n),O.map((e=>{d[e].map((n=>{n.data.push(s!=={}&&t in s&&m[n.label]in s[t]?w(e,s[t][m[n.label]][e],o):"average_speed"===e?null:0)}))}))})),{labels:u,datasets:d}},f=(e,t,n)=>{const a=n?1:0,m="year"===t?(0,r.Z)((0,s.Z)(e,9)):"week"===t?(0,o.Z)((0,i.Z)(e,2),{weekStartsOn:a}):(0,l.Z)((0,i.Z)(e,11)),S="year"===t?(0,c.Z)(e):"week"===t?(0,u.Z)(e,{weekStartsOn:a}):(0,d.Z)(e);return{duration:t,end:S,start:m}},N=(e,t,n)=>{const{duration:a,start:p,end:T}=e,A=n?1:0;return{duration:a,end:"year"===a?(0,c.Z)(t?(0,s.Z)(T,1):(0,m.Z)(T,1)):"week"===a?(0,u.Z)(t?(0,S.Z)(T,1):(0,_.Z)(T,1),{weekStartsOn:A}):(0,d.Z)(t?(0,i.Z)(T,1):(0,E.Z)(T,1)),start:"year"===a?(0,r.Z)(t?(0,s.Z)(p,1):(0,m.Z)(p,1)):"week"===a?(0,o.Z)(t?(0,S.Z)(p,1):(0,_.Z)(p,1),{weekStartsOn:A}):(0,l.Z)(t?(0,i.Z)(p,1):(0,E.Z)(p,1))}}},3649:function(e,t,n){"use strict";n.d(t,{Dl:function(){return a},f3:function(){return o},sC:function(){return s}});const a={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"}},r={metric:{imperial:3.280839895,metric:1},imperial:{metric:1/3.280839895,imperial:1}},s=(e,t,n,s=3)=>{const o=a[t],i=a[n],l=e*o.multiplier*r[o.system][i.system]/i.multiplier;return null!==s?parseFloat(l.toFixed(s)):l},o=(e,t,n)=>{const r=n?a[e].defaultTarget:e;return n?s(t,e,r,2):t}},3768:function(e,t,n){"use strict";n.d(t,{BN:function(){return s},EX:function(){return r},eR:function(){return o}});var a=n(3649);const r=(e,t,n)=>{const r={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"}},s=[],o=[],i=[];return e.map((e=>{s.push(e.distance),o.push(e.duration),r.speed.data.push((0,a.f3)("km",e.speed,n)),r.elevation.data.push((0,a.f3)("m",e.elevation,n)),i.push({latitude:e.latitude,longitude:e.longitude})})),{distance_labels:s,duration_labels:o,datasets:r,coordinates:i}},s=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},o={order:"desc",order_by:"workout_date"}},2531:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var a=n(5793);const r={class:"card"},s={class:"card-title"},o={class:"card-content"};function i(e,t){return(0,a.wg)(),(0,a.iD)("div",r,[(0,a._)("div",s,[(0,a.WI)(e.$slots,"title")]),(0,a._)("div",o,[(0,a.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 p}});var a=n(5793),r=n(3577),s=n(2715);const o={class:"table-selects"},i=["value"],l=["value"],c=["value"],u=["value"],d=["value"],m=["value"];var S=(0,a.aZ)({props:{order_by:null,query:null,sort:null,message:null},emits:["updateSelect"],setup(e,{emit:t}){const n=e,{order_by:S,query:_,sort:E,message:p}=(0,s.BK)(n),T=[10,25,50,100];function A(e){t("updateSelect",e.target.id,e.target.value)}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",o,[(0,a._)("label",null,[(0,a.Uk)((0,r.zw)(e.$t("common.SELECTS.ORDER_BY.LABEL"))+": ",1),(0,a._)("select",{name:"order_by",id:"order_by",value:(0,s.SU)(_).order_by,onChange:A},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,s.SU)(S),(t=>((0,a.wg)(),(0,a.iD)("option",{value:t,key:t},(0,r.zw)(e.$t(`${(0,s.SU)(p)}.${t.toUpperCase()}`)),9,l)))),128))],40,i)]),(0,a._)("label",null,[(0,a.Uk)((0,r.zw)(e.$t("common.SELECTS.ORDER.LABEL"))+": ",1),(0,a._)("select",{name:"order",id:"order",value:(0,s.SU)(_).order,onChange:A},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,s.SU)(E),(t=>((0,a.wg)(),(0,a.iD)("option",{value:t,key:t},(0,r.zw)(e.$t(`common.SELECTS.ORDER.${t.toUpperCase()}`)),9,u)))),128))],40,c)]),(0,a._)("label",null,[(0,a.Uk)((0,r.zw)(e.$t("common.SELECTS.PER_PAGE.LABEL"))+": ",1),(0,a._)("select",{name:"per_page",id:"per_page",value:(0,s.SU)(_).per_page,onChange:A},[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(T,(e=>(0,a._)("option",{value:e,key:e},(0,r.zw)(e),9,m))),64))],40,d)])]))}}),_=n(3744);const E=(0,_.Z)(S,[["__scopeId","data-v-72463173"]]);var p=E},7167:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var a=n(5793);const r={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -51 512 512"},s=(0,a.uE)('',1),o=[s];function i(e,t,n,s,i,l){return(0,a.wg)(),(0,a.iD)("svg",r,o)}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 _}});var a=n(5793),r=n(2715),s=n(3577);const o={id:"error"},i={class:"error-content"};var l=(0,a.aZ)({props:{title:null,message:null,buttonText:null,path:{default:"/"}},setup(e){const t=e,{buttonText:n,title:l,message:c,path:u}=(0,r.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.iD)("div",o,[(0,a._)("div",i,[(0,a._)("h1",null,(0,s.zw)((0,r.SU)(l)),1),(0,a._)("p",null,(0,s.zw)((0,r.SU)(c)),1),(0,r.SU)(n)?((0,a.wg)(),(0,a.iD)("button",{key:0,onClick:t[0]||(t[0]=t=>e.$router.push((0,r.SU)(u))),class:"upper"},(0,s.zw)((0,r.SU)(n)),1)):(0,a.kq)("",!0)])]))}}),c=n(3744);const u=(0,c.Z)(l,[["__scopeId","data-v-b60bfa80"]]);var d=u,m=(0,a.aZ)({props:{target:{default:"PAGE"}},setup(e){const t=e,{target:n}=(0,r.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.j4)(d,{title:"404",message:e.$t(`error.NOT_FOUND.${(0,r.SU)(n)}`),"button-text":e.$t("common.HOME")},null,8,["message","button-text"]))}});const S=m;var _=S},6514:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var a=n(5793),r=n(3577),s=n(2715),o=n(2766);const i=e=>((0,a.dD)("data-v-f38ea1b8"),e=e(),(0,a.Cn)(),e),l={class:"pagination-center","aria-label":"navigation"},c={class:"pagination"},u=i((()=>(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1))),d={key:0},m=i((()=>(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1)));var S=(0,a.aZ)({props:{pagination:null,path:null,query:null},setup(e){const t=e,{pagination:n,path:i,query:S}=(0,s.BK)(t);function _(e,t){const n=Object.assign({},S.value);return n.page=t?e+t:e,n}return(e,t)=>{const S=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("nav",l,[(0,a._)("ul",c,[(0,a._)("li",{class:(0,r.C_)(["page-prev",{disabled:!(0,s.SU)(n).has_prev}])},[(0,a.Wm)(S,{class:"page-link",to:{path:(0,s.SU)(i),query:_((0,s.SU)(n).page,-1)},disabled:!(0,s.SU)(n).has_prev},{default:(0,a.w5)((({navigate:t})=>[(0,a.WI)(e.$slots,"default",{onClick:e=>(0,s.SU)(n).has_next?t:null},(()=>[(0,a.Uk)((0,r.zw)(e.$t("api.PAGINATION.PREVIOUS"))+" ",1),u]))])),_:3},8,["to","disabled"])],2),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,s.SU)(o.lM)((0,s.SU)(n).pages,(0,s.SU)(n).page),(e=>((0,a.wg)(),(0,a.iD)("li",{key:e,class:(0,r.C_)(["page",{active:e===(0,s.SU)(n).page}])},["..."===e?((0,a.wg)(),(0,a.iD)("span",d," ... ")):((0,a.wg)(),(0,a.j4)(S,{key:1,class:"page-link",to:{path:(0,s.SU)(i),query:_(+e)}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,r.zw)(e),1)])),_:2},1032,["to"]))],2)))),128)),(0,a._)("li",{class:(0,r.C_)(["page-next",{disabled:!(0,s.SU)(n).has_next}])},[(0,a.Wm)(S,{class:"page-link",to:{path:(0,s.SU)(i),query:_((0,s.SU)(n).page,1)},disabled:!(0,s.SU)(n).has_next},{default:(0,a.w5)((({navigate:t})=>[(0,a.WI)(e.$slots,"default",{onClick:e=>(0,s.SU)(n).has_next?t:null},(()=>[(0,a.Uk)((0,r.zw)(e.$t("api.PAGINATION.NEXT"))+" ",1),m]))])),_:3},8,["to","disabled"])],2)])])}}}),_=n(3744);const E=(0,_.Z)(S,[["__scopeId","data-v-f38ea1b8"]]);var p=E},2047:function(e,t,n){"use strict";n.d(t,{Z:function(){return C}});var a=n(5793),r=n(2715),s=n(9963),o=n(3577),i=n(3257),l=n(8602),c=n(9917);const u=async e=>{const t=await n.e(881).then(n.bind(n,410)),a=await n.e(881).then(n.bind(n,8288)),r=await n.e(881).then(n.bind(n,6947)),s={en:a,fr:r},o=s[e],l={graphs:t.default.adjacencyGraphs,dictionary:{...t.default.dictionary,...o.default.dictionary}};i.Mu.setOptions(l)},d=e=>{switch(e){case 2:return"AVERAGE";case 3:return"GOOD";case 4:return"STRONG";default:return"WEAK"}},m={class:"password-strength"},S=["value"],_={key:0,class:"password-strength-details"},E={class:"password-strength-value"},p={key:0,class:"info-box"},T={class:"password-feedback"};var A=(0,a.aZ)({props:{password:null},setup(e){const t=e,{password:n}=(0,r.BK)(t),s=(0,c.o)(),A=(0,a.Fl)((()=>s.getters[l.SY.GETTERS.LANGUAGE])),U=(0,a.Fl)((()=>s.getters[l.YN.GETTERS.IS_SUCCESS])),O=(0,r.iH)(0),R=(0,r.iH)(""),I=(0,r.iH)([]),g=(0,r.iH)("0% 100%");function w(e){let t=(0,i.tu)(e);O.value=t.score,R.value=d(O.value),I.value=t.feedback.suggestions,g.value=100*O.value/4+"% 100%"}return(0,a.wF)((async()=>await u(A.value))),(0,a.YP)((()=>A.value),(async e=>{await u(e)})),(0,a.YP)((()=>n.value),(async e=>{U.value?R.value="":w(e)})),(e,t)=>((0,a.wg)(),(0,a.iD)("div",m,[(0,a._)("input",{class:(0,o.C_)(["password-slider",`strength-${O.value}`]),style:(0,o.j5)({backgroundSize:g.value}),type:"range",value:O.value,min:"0",max:"4",step:"1"},null,14,S),R.value?((0,a.wg)(),(0,a.iD)("div",_,[(0,a._)("span",E,(0,o.zw)(e.$t("user.PASSWORD_STRENGTH.LABEL"))+": "+(0,o.zw)(e.$t(`user.PASSWORD_STRENGTH.${R.value}`)),1),I.value.length>0?((0,a.wg)(),(0,a.iD)("div",p,[(0,a._)("ul",T,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(I.value,(t=>((0,a.wg)(),(0,a.iD)("li",{key:t},(0,o.zw)(e.$t(`user.PASSWORD_STRENGTH.SUGGESTIONS.${t}`)),1)))),128))])])):(0,a.kq)("",!0)])):(0,a.kq)("",!0)]))}}),U=n(3744);const O=(0,U.Z)(A,[["__scopeId","data-v-79c9693d"]]);var R=O;const I=e=>((0,a.dD)("data-v-5a126514"),e=e(),(0,a.Cn)(),e),g={class:"password-input"},w=["id","disabled","placeholder","required","type"],v={key:0,class:"form-info"},f=I((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1)));var N=(0,a.aZ)({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,r.BK)(n),S=(0,r.iH)(!1),_=(0,r.iH)("");function E(){S.value=!S.value}function p(e){t("updatePassword",e.target.value)}function T(){t("passwordError")}return(0,a.YP)((()=>u.value),(e=>{""===e&&(_.value="")})),(e,t)=>((0,a.wg)(),(0,a.iD)("div",g,[(0,a.wy)((0,a._)("input",{id:(0,r.SU)(c),disabled:(0,r.SU)(l),placeholder:(0,r.SU)(d),required:(0,r.SU)(m),type:S.value?"text":"password","onUpdate:modelValue":t[0]||(t[0]=e=>_.value=e),minlength:"8",onInput:p,onInvalid:T},null,40,w),[[s.YZ,_.value]]),(0,a._)("div",{class:"show-password",onClick:E},[(0,a.Uk)((0,o.zw)(e.$t(`user.${S.value?"HIDE":"SHOW"}_PASSWORD`))+" ",1),(0,a._)("i",{class:(0,o.C_)(["fa","fa-eye"+(S.value?"-slash":"")]),"aria-hidden":"true"},null,2)]),(0,r.SU)(i)?((0,a.wg)(),(0,a.iD)("div",v,[f,(0,a.Uk)(" "+(0,o.zw)(e.$t("user.PASSWORD_INFO")),1)])):(0,a.kq)("",!0),(0,r.SU)(i)?((0,a.wg)(),(0,a.j4)(R,{key:1,password:_.value},null,8,["password"])):(0,a.kq)("",!0)]))}});const h=(0,U.Z)(N,[["__scopeId","data-v-5a126514"]]);var C=h},2056:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var a=n(5793),r=n(3577),s=n(2715),o=n(2024);const i=(0,a._)("div",{class:"map-attribution"},[(0,a._)("span",{class:"map-attribution-text"},"©"),(0,a._)("a",{class:"map-attribution-text",href:"https://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer"}," OpenStreetMap ")],-1);var l=(0,a.aZ)({props:{workout:null,displayHover:{type:Boolean,default:!1}},setup(e){const t=e,{displayHover:n}=(0,s.BK)(t),l=`${(0,o.k)()}workouts/map/${t.workout.map}`;return(e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:(0,r.C_)(["static-map",{"display-hover":(0,s.SU)(n)}])},[(0,s.SU)(n)?((0,a.wg)(),(0,a.iD)("img",{key:0,src:l,alt:""})):((0,a.wg)(),(0,a.iD)("div",{key:1,class:"bg-map-image",style:(0,r.j5)({backgroundImage:`url(${l})`})},null,4)),i],2))}});const c=l;var u=c},7402:function(e,t,n){"use strict";n.d(t,{Z:function(){return L}});var a=n(5793),r=n(3577);const s={class:"start-chart"},o={key:0},i={key:1},l={class:"chart-radio"},c=["checked"],u=["checked"],d=["checked"],m={key:0},S=["checked"],_={key:1},E=["checked"],p={key:2},T=["checked"];function A(e,t,n,A,U,O){const R=(0,a.up)("Chart");return(0,a.wg)(),(0,a.iD)("div",s,[e.hideChartIfNoData&&e.emptyStats?((0,a.wg)(),(0,a.iD)("div",o,(0,r.zw)(e.$t("workouts.NO_WORKOUTS")),1)):((0,a.wg)(),(0,a.iD)("div",i,[(0,a._)("div",l,[(0,a._)("label",null,[(0,a._)("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,a.Uk)(" "+(0,r.zw)(e.$t("workouts.DISTANCE")),1)]),(0,a._)("label",null,[(0,a._)("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,a.Uk)(" "+(0,r.zw)(e.$t("workouts.DURATION")),1)]),(0,a._)("label",null,[(0,a._)("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,a.Uk)(" "+(0,r.zw)(e.$t("workouts.WORKOUT",2)),1)]),e.fullStats?((0,a.wg)(),(0,a.iD)("label",m,[(0,a._)("input",{type:"radio",name:"average_speed",checked:"average_speed"===e.displayedData,onClick:t[3]||(t[3]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,S),(0,a.Uk)(" "+(0,r.zw)(e.$t("workouts.AVERAGE_SPEED")),1)])):(0,a.kq)("",!0),e.fullStats?((0,a.wg)(),(0,a.iD)("label",_,[(0,a._)("input",{type:"radio",name:"total_ascent",checked:"total_ascent"===e.displayedData,onClick:t[4]||(t[4]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,E),(0,a.Uk)(" "+(0,r.zw)(e.$t("workouts.ASCENT")),1)])):(0,a.kq)("",!0),e.fullStats?((0,a.wg)(),(0,a.iD)("label",p,[(0,a._)("input",{type:"radio",name:"total_descent",checked:"total_descent"===e.displayedData,onClick:t[5]||(t[5]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,T),(0,a.Uk)(" "+(0,r.zw)(e.$t("workouts.DESCENT")),1)])):(0,a.kq)("",!0)]),e.labels.length>0?((0,a.wg)(),(0,a.j4)(R,{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,a.kq)("",!0)]))])}var U=n(4850),O=n(2715);const R={class:"chart"};function I(e,t,n,r,s,o){const i=(0,a.up)("BarChart");return(0,a.wg)(),(0,a.iD)("div",R,[(0,a.Wm)(i,(0,a.dG)(e.barChartProps,{class:"bar-chart"}),null,16)])}var g=n(6518),w=n(3324);const v=(e,t=!1)=>{let n="0";t&&(n=String(Math.floor(e/86400)),e%=86400);const a=String(Math.floor(e/3600)).padStart(2,"0");e%=3600;const r=String(Math.floor(e/60)).padStart(2,"0"),s=String(e%60).padStart(2,"0");return t?`${"0"===n?"":`${n}d `}${"00"===a?"":`${a}h `}${r}m ${s}s`:`${"00"===a?"":`${a}:`}${r}:${s}`};var f=n(3649);const N=(e,t,n,a=!0)=>{const r="km",s=n?f.Dl[r].defaultTarget:r;switch(e){case"average_speed":return`${t.toFixed(2)} ${s}/h`;case"total_duration":return v(t,a);case"total_distance":return`${t.toFixed(2)} ${s}`;case"total_ascent":case"total_descent":return`${(t/1e3).toFixed(2)} ${s}`;default:return t.toString()}};var h=(0,a.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,w.QT)();function n(e){return isNaN(e)?0:+e}function r(e,t){return n(e)+n(t)}let s=(0,a.Fl)((()=>({labels:e.labels,datasets:JSON.parse(JSON.stringify(e.datasets))})));const o=(0,a.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 N(e.displayedData,+t,e.useImperialUnits,!1)}},afterFit:function(t){t.width=e.fullStats?75: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 N(e.displayedData,t,e.useImperialUnits,!1);{const t=n.chart.data.datasets.map((e=>e.data[n.dataIndex])).reduce(((e,t)=>r(e,t)),0);return n.datasetIndex===e.displayedSportIds.length-1&&t>0?N(e.displayedData,t,e.useImperialUnits,!1):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 a=t(`sports.${n.dataset.label}.LABEL`)||"";return a&&(a+=": "),null!==n.parsed.y&&(a+=N(e.displayedData,n.parsed.y,e.useImperialUnits)),a},footer:function(n){if("average_speed"===e.displayedData)return"";let a=0;return n.map((e=>{a+=e.parsed.y})),`${t("common.TOTAL")}: `+N(e.displayedData,a,e.useImperialUnits)}}}}}))),{barChartProps:i}=(0,g.xZ)({chartData:s,options:o});return{barChartProps:i}}}),C=n(3744);const D=(0,C.Z)(h,[["render",I]]);var k=D,z=n(8602),P=n(9917),M=n(9318),y=(0,a.aZ)({name:"UserMonthStats",components:{Chart:k},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)();let n=(0,O.iH)("total_distance");const r=(0,a.Fl)((()=>t.getters[z.gu.GETTERS.USER_STATS])),s=(0,a.Fl)((()=>(0,M.v1)(e.chartParams,e.user.weekm,e.sports,e.displayedSportIds,r.value,e.user.imperial_units)));function o(n){t.dispatch(z.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,U.Z)(e.start,"yyyy-MM-dd"),to:(0,U.Z)(e.end,"yyyy-MM-dd"),time:"week"===e.duration?"week"+(t.weekm?"m":""):e.duration}}return(0,a.wF)((()=>o(l(e.chartParams,e.user)))),(0,a.YP)((()=>e.chartParams),(async t=>{o(l(t,e.user))})),{datasets:(0,a.Fl)((()=>s.value.datasets[n.value])),labels:(0,a.Fl)((()=>s.value.labels)),emptyStats:(0,a.Fl)((()=>0===Object.keys(r.value).length)),displayedData:n,updateDisplayData:i}}});const b=(0,C.Z)(y,[["render",A],["__scopeId","data-v-68a6a495"]]);var L=b},2179:function(e,t,n){"use strict";n.d(t,{Z:function(){return w}});var a=n(5793),r=n(2715),s=n(3577),o=n(6595),i=n(8602),l=n(9917);const c={class:"box user-header"},u={class:"user-details"},d={class:"user-name"},m={class:"user-stats"},S={class:"user-stat"},_={class:"stat-number"},E={class:"stat-label"},p={class:"user-stat"},T={class:"stat-label"},A={class:"user-stat hide-small"},U={class:"stat-number"},O={class:"stat-label"};var R=(0,a.aZ)({props:{user:null},setup(e){const t=e,{user:n}=(0,r.BK)(t),R=(0,l.o)(),I=(0,a.Fl)((()=>R.getters[i.YN.GETTERS.AUTH_USER_PROFILE]));return(e,t)=>{const i=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",c,[(0,a.Wm)(o.Z,{user:(0,r.SU)(n)},null,8,["user"]),(0,a._)("div",u,[(0,a._)("div",d,(0,s.zw)((0,r.SU)(n).username),1),(0,a._)("div",m,[(0,a._)("div",S,[(0,a._)("span",_,(0,s.zw)((0,r.SU)(n).nb_workouts),1),(0,a._)("span",E,(0,s.zw)(e.$t("workouts.WORKOUT",(0,r.SU)(n).nb_workouts)),1)]),(0,a._)("div",p,[(0,a.Wm)(i,{distance:(0,r.SU)(n).total_distance,unitFrom:"km",digits:0,displayUnit:!1,useImperialUnits:(0,r.SU)(I).imperial_units},null,8,["distance","useImperialUnits"]),(0,a._)("span",T,(0,s.zw)((0,r.SU)(I).imperial_units?"miles":"km"),1)]),(0,a._)("div",A,[(0,a._)("span",U,(0,s.zw)((0,r.SU)(n).nb_sports),1),(0,a._)("span",O,(0,s.zw)(e.$t("workouts.SPORT",(0,r.SU)(n).nb_sports)),1)])])])])}}}),I=n(3744);const g=(0,I.Z)(R,[["__scopeId","data-v-20291951"]]);var w=g},4980:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});var a=n(5793),r=n(2715),s=n(3577),o=n(9963),i=n(4850),l=n(8602),c=n(9917);const u={id:"user-infos",class:"description-list"},d={key:1,class:"info-box success-message"},m={key:4,class:"email-form form-box"},S={class:"form-items",for:"email"},_={class:"form-items",for:"email"},E={class:"form-buttons"},p={class:"confirm",type:"submit"},T=["onClick"],A={key:5},U={class:"user-bio"},O={key:0,class:"profile-buttons"},R=["onClick"],I={key:1,class:"profile-buttons"};var g=(0,a.aZ)({props:{user:null,fromAdmin:{type:Boolean,default:!1}},setup(e){const t=e,n=(0,c.o)(),{user:g,fromAdmin:w}=(0,r.BK)(t),v=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),f=(0,a.Fl)((()=>t.user.created_at?(0,i.Z)(new Date(t.user.created_at),"dd/MM/yyyy HH:mm"):"")),N=(0,a.Fl)((()=>t.user.birth_date?(0,i.Z)(new Date(t.user.birth_date),"dd/MM/yyyy"):"")),h=(0,a.Fl)((()=>n.getters[l.RT.GETTERS.USERS_IS_SUCCESS])),C=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),D=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG]));let k=(0,r.iH)("");const z=(0,r.iH)(!1),P=(0,r.iH)(!1),M=(0,r.iH)(""),y=(0,r.iH)("");function b(e){k.value=e,""!==e&&n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1)}function L(e){n.dispatch(l.RT.ACTIONS.DELETE_USER_ACCOUNT,{username:e})}function G(e){y.value="password-reset",n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,resetPassword:!0})}function F(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,activate:!0})}function W(){$(),M.value=g.value.email_to_confirm?g.value.email_to_confirm:"",P.value=!0,y.value="email-update"}function Y(){M.value="",P.value=!1}function x(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,new_email:M.value})}function $(){n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1),y.value=""}return(0,a.Ah)((()=>$())),(0,a.YP)((()=>h.value),(e=>{e&&(b(""),Y())})),(e,t)=>{const n=(0,a.up)("Modal"),i=(0,a.up)("AlertMessage"),l=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",u,[(0,r.SU)(k)?((0,a.wg)(),(0,a.j4)(n,{key:0,title:e.$t("common.CONFIRMATION"),message:"delete"===(0,r.SU)(k)?"admin.CONFIRM_USER_ACCOUNT_DELETION":"admin.CONFIRM_USER_PASSWORD_RESET",strongMessage:(0,r.SU)(g).username,onConfirmAction:t[0]||(t[0]=e=>"delete"===(0,r.SU)(k)?L((0,r.SU)(g).username):G((0,r.SU)(g).username)),onCancelAction:t[1]||(t[1]=e=>b(""))},null,8,["title","message","strongMessage"])):(0,a.kq)("",!0),(0,r.SU)(h)?((0,a.wg)(),(0,a.iD)("div",d,(0,s.zw)(e.$t(`admin.${"password-reset"===y.value?"PASSWORD_RESET":"USER_EMAIL_UPDATE"}_SUCCESSFUL`)),1)):(0,a.kq)("",!0),(0,r.SU)(g).is_active?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)(i,{key:2,message:"user.THIS_USER_ACCOUNT_IS_INACTIVE"})),(0,r.SU)(C)?((0,a.wg)(),(0,a.j4)(l,{key:3,message:(0,r.SU)(C)},null,8,["message"])):(0,a.kq)("",!0),P.value?((0,a.wg)(),(0,a.iD)("div",m,[(0,a._)("form",{class:(0,s.C_)({errors:z.value}),onSubmit:t[4]||(t[4]=(0,o.iM)((e=>x((0,r.SU)(g).username)),["prevent"]))},[(0,a._)("label",S,[(0,a.Uk)((0,s.zw)(e.$t("admin.CURRENT_EMAIL"))+" ",1),(0,a.wy)((0,a._)("input",{id:"email",type:"email","onUpdate:modelValue":t[2]||(t[2]=e=>(0,r.SU)(g).email=e),disabled:""},null,512),[[o.nr,(0,r.SU)(g).email]])]),(0,a._)("label",_,[(0,a.Uk)((0,s.zw)(e.$t("admin.NEW_EMAIL"))+"* ",1),(0,a.wy)((0,a._)("input",{id:"new-email",type:"email",required:"","onUpdate:modelValue":t[3]||(t[3]=e=>M.value=e)},null,512),[[o.nr,M.value]])]),(0,a._)("div",E,[(0,a._)("button",p,(0,s.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:(0,o.iM)(Y,["prevent"])},(0,s.zw)(e.$t("buttons.CANCEL")),9,T)])],34)])):((0,a.wg)(),(0,a.iD)("div",A,[(0,a._)("dl",null,[(0,a._)("dt",null,(0,s.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+":",1),(0,a._)("dd",null,(0,s.zw)((0,r.SU)(f)),1),(0,a._)("dt",null,(0,s.zw)(e.$t("user.PROFILE.FIRST_NAME"))+":",1),(0,a._)("dd",null,(0,s.zw)((0,r.SU)(g).first_name),1),(0,a._)("dt",null,(0,s.zw)(e.$t("user.PROFILE.LAST_NAME"))+":",1),(0,a._)("dd",null,(0,s.zw)((0,r.SU)(g).last_name),1),(0,a._)("dt",null,(0,s.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+":",1),(0,a._)("dd",null,(0,s.zw)((0,r.SU)(N)),1),(0,a._)("dt",null,(0,s.zw)(e.$t("user.PROFILE.LOCATION"))+":",1),(0,a._)("dd",null,(0,s.zw)((0,r.SU)(g).location),1),(0,a._)("dt",null,(0,s.zw)(e.$t("user.PROFILE.BIO"))+":",1),(0,a._)("dd",U,(0,s.zw)((0,r.SU)(g).bio),1)]),(0,r.SU)(w)?((0,a.wg)(),(0,a.iD)("div",O,[(0,r.SU)(v).username!==(0,r.SU)(g).username?((0,a.wg)(),(0,a.iD)("button",{key:0,class:"danger",onClick:t[5]||(t[5]=(0,o.iM)((e=>b("delete")),["prevent"]))},(0,s.zw)(e.$t("admin.DELETE_USER")),1)):(0,a.kq)("",!0),(0,r.SU)(g).is_active?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("button",{key:1,onClick:t[6]||(t[6]=(0,o.iM)((e=>F((0,r.SU)(g).username)),["prevent"]))},(0,s.zw)(e.$t("admin.ACTIVATE_USER_ACCOUNT")),1)),(0,r.SU)(v).username!==(0,r.SU)(g).username?((0,a.wg)(),(0,a.iD)("button",{key:2,onClick:(0,o.iM)(W,["prevent"])},(0,s.zw)(e.$t("admin.UPDATE_USER_EMAIL")),9,R)):(0,a.kq)("",!0),(0,r.SU)(v).username!==(0,r.SU)(g).username&&(0,r.SU)(D).is_email_sending_enabled?((0,a.wg)(),(0,a.iD)("button",{key:3,onClick:t[7]||(t[7]=(0,o.iM)((e=>b("reset")),["prevent"]))},(0,s.zw)(e.$t("admin.RESET_USER_PASSWORD")),1)):(0,a.kq)("",!0),(0,a._)("button",{onClick:t[8]||(t[8]=t=>e.$router.go(-1))},(0,s.zw)(e.$t("buttons.BACK")),1)])):((0,a.wg)(),(0,a.iD)("div",I,[(0,a._)("button",{onClick:t[9]||(t[9]=t=>e.$router.push("/profile/edit"))},(0,s.zw)(e.$t("user.PROFILE.EDIT")),1),(0,a._)("button",{onClick:t[10]||(t[10]=t=>e.$router.push("/"))},(0,s.zw)(e.$t("common.HOME")),1)]))]))])}}}),w=n(3744);const v=(0,w.Z)(g,[["__scopeId","data-v-1b6fd7df"]]);var f=v},2422:function(e,t,n){"use strict";n.d(t,{Z:function(){return D}});var a=n(5793),r=n(3577),s=n(2715),o=n(9963),i=n(2119),l=n(2047),c=n(8602),u=n(9917);const d=e=>((0,a.dD)("data-v-26d3a7be"),e=e(),(0,a.Cn)(),e),m={id:"user-form"},S={key:2,class:"info-box success-message"},_={class:"form-items"},E=["disabled","placeholder"],p={key:1,class:"form-info"},T=d((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),A=["disabled","placeholder"],U={key:3,class:"form-info"},O=d((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),R=["disabled"],I={key:3},g={key:0},w={key:4},v={class:"account"},f={key:5};var N=(0,a.aZ)({props:{action:null,token:{default:""}},setup(e){const t=e,n=(0,i.yj)(),d=(0,u.o)(),{action:N}=(0,s.BK)(t),h=(0,s.qj)({username:"",email:"",password:""}),C=(0,a.Fl)((()=>L(t.action))),D=(0,a.Fl)((()=>d.getters[c.SY.GETTERS.ERROR_MESSAGES])),k=(0,a.Fl)((()=>d.getters[c.YN.GETTERS.IS_REGISTRATION_SUCCESS])),z=(0,a.Fl)((()=>d.getters[c.YN.GETTERS.IS_SUCCESS])),P=(0,a.Fl)((()=>d.getters[c.SY.GETTERS.APP_CONFIG])),M=(0,a.Fl)((()=>"register"===t.action&&!P.value.is_registration_enabled)),y=(0,a.Fl)((()=>["reset-request","account-confirmation-resend"].includes(t.action)&&!P.value.is_email_sending_enabled)),b=(0,s.iH)(!1);function L(e){switch(e){case"reset-request":case"reset":return"buttons.SUBMIT";default:return`buttons.${t.action.toUpperCase()}`}}function G(){b.value=!0}function F(e){h.password=e}function W(e){switch(e){case"reset":return t.token?d.dispatch(c.YN.ACTIONS.RESET_USER_PASSWORD,{password:h.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:h.email});case"account-confirmation-resend":return d.dispatch(c.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL,{email:h.email});default:d.dispatch(c.YN.ACTIONS.LOGIN_OR_REGISTER,{actionType:e,formData:h,redirectUrl:n.query.from})}}function Y(){h.username="",h.email="",h.password=""}return(0,a.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),b.value=!1,Y()})),(e,t)=>{const n=(0,a.up)("AlertMessage"),i=(0,a.up)("router-link"),c=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",{id:"user-auth-form",class:(0,r.C_)(`${["reset","reset-request"].includes((0,s.SU)(N))?(0,s.SU)(N):"user-form"}`)},[(0,a._)("div",m,[(0,a._)("div",{class:(0,r.C_)(["form-box",{disabled:(0,s.SU)(M)}])},[(0,s.SU)(M)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:"user.REGISTER_DISABLED"})):(0,a.kq)("",!0),(0,s.SU)(y)?((0,a.wg)(),(0,a.j4)(n,{key:1,message:"admin.EMAIL_SENDING_DISABLED"})):(0,a.kq)("",!0),(0,s.SU)(z)||(0,s.SU)(k)?((0,a.wg)(),(0,a.iD)("div",S,(0,r.zw)(e.$t("user.PROFILE.SUCCESSFUL_"+((0,s.SU)(k)?"REGISTRATION"+((0,s.SU)(P).is_email_sending_enabled?"_WITH_EMAIL":""):"UPDATE"))),1)):(0,a.kq)("",!0),(0,a._)("form",{class:(0,r.C_)({errors:b.value}),onSubmit:t[2]||(t[2]=(0,o.iM)((e=>W((0,s.SU)(N))),["prevent"]))},[(0,a._)("div",_,["register"===(0,s.SU)(N)?(0,a.wy)(((0,a.wg)(),(0,a.iD)("input",{key:0,id:"username",disabled:(0,s.SU)(M),required:"",pattern:"[a-zA-Z0-9_]+",minlength:"3",maxlength:"30",onInvalid:G,"onUpdate:modelValue":t[0]||(t[0]=e=>(0,s.SU)(h).username=e),placeholder:e.$t("user.USERNAME")},null,40,E)),[[o.nr,(0,s.SU)(h).username]]):(0,a.kq)("",!0),"register"===(0,s.SU)(N)?((0,a.wg)(),(0,a.iD)("div",p,[T,(0,a.Uk)(" "+(0,r.zw)(e.$t("user.USERNAME_INFO")),1)])):(0,a.kq)("",!0),"reset"!==(0,s.SU)(N)?(0,a.wy)(((0,a.wg)(),(0,a.iD)("input",{key:2,id:"email",disabled:(0,s.SU)(M)||(0,s.SU)(y),required:"",onInvalid:G,type:"email","onUpdate:modelValue":t[1]||(t[1]=e=>(0,s.SU)(h).email=e),placeholder:e.$t("user.EMAIL")},null,40,A)),[[o.nr,(0,s.SU)(h).email]]):(0,a.kq)("",!0),["reset-request","register","account-confirmation-resend"].includes((0,s.SU)(N))?((0,a.wg)(),(0,a.iD)("div",U,[O,(0,a.Uk)(" "+(0,r.zw)(e.$t("user.EMAIL_INFO")),1)])):(0,a.kq)("",!0),["account-confirmation-resend","reset-request"].includes((0,s.SU)(N))?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)(l.Z,{key:4,disabled:(0,s.SU)(M),required:!0,placeholder:"reset"===(0,s.SU)(N)?e.$t("user.ENTER_PASSWORD"):e.$t("user.PASSWORD"),password:(0,s.SU)(h).password,checkStrength:["reset","register"].includes((0,s.SU)(N)),onUpdatePassword:F,onPasswordError:G},null,8,["disabled","placeholder","password","checkStrength"]))]),(0,a._)("button",{type:"submit",disabled:(0,s.SU)(M)||(0,s.SU)(y)},(0,r.zw)(e.$t((0,s.SU)(C))),9,R)],34),"login"===(0,s.SU)(N)?((0,a.wg)(),(0,a.iD)("div",I,[(0,a.Wm)(i,{class:"links",to:"/register"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,r.zw)(e.$t("user.REGISTER")),1)])),_:1}),(0,s.SU)(P).is_email_sending_enabled?((0,a.wg)(),(0,a.iD)("span",g,"-")):(0,a.kq)("",!0),(0,s.SU)(P).is_email_sending_enabled?((0,a.wg)(),(0,a.j4)(i,{key:1,class:"links",to:"/password-reset/request"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,r.zw)(e.$t("user.PASSWORD_FORGOTTEN")),1)])),_:1})):(0,a.kq)("",!0)])):(0,a.kq)("",!0),"register"===(0,s.SU)(N)?((0,a.wg)(),(0,a.iD)("div",w,[(0,a._)("span",v,(0,r.zw)(e.$t("user.ALREADY_HAVE_ACCOUNT")),1),(0,a.Wm)(i,{class:"links",to:"/login"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,r.zw)(e.$t("user.LOGIN")),1)])),_:1})])):(0,a.kq)("",!0),["login","register"].includes((0,s.SU)(N))&&(0,s.SU)(P).is_email_sending_enabled?((0,a.wg)(),(0,a.iD)("div",f,[(0,a.Wm)(i,{class:"links",to:"/account-confirmation/resend"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,r.zw)(e.$t("user.ACCOUNT_CONFIRMATION_NOT_RECEIVED")),1)])),_:1})])):(0,a.kq)("",!0),(0,s.SU)(D)?((0,a.wg)(),(0,a.j4)(c,{key:6,message:(0,s.SU)(D)},null,8,["message"])):(0,a.kq)("",!0)],2)])],2)}}}),h=n(3744);const C=(0,h.Z)(N,[["__scopeId","data-v-26d3a7be"]]);var D=C},6595:function(e,t,n){"use strict";n.d(t,{Z:function(){return S}});var a=n(5793),r=n(2715),s=n(2024);const o={class:"user-picture"},i=["alt","src"],l={key:1,class:"no-picture"},c=(0,a._)("i",{class:"fa fa-user-circle-o","aria-hidden":"true"},null,-1),u=[c];var d=(0,a.aZ)({props:{user:null},setup(e){const t=e,n=(0,a.Fl)((()=>t.user.picture?`${(0,s.k)()}users/${t.user.username}/picture?${Date.now()}`:""));return(e,t)=>((0,a.wg)(),(0,a.iD)("div",o,[""!==(0,r.SU)(n)?((0,a.wg)(),(0,a.iD)("img",{key:0,class:"profile-user-img",alt:e.$t("user.USER_PICTURE"),src:(0,r.SU)(n)},null,8,i)):((0,a.wg)(),(0,a.iD)("div",l,u))]))}});const m=d;var S=m},5630:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var a=n(5793),r=n(3577);const s={class:"no-workouts box"};function o(e,t){const n=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",s,[(0,a._)("div",null,[(0,a.Uk)((0,r.zw)(e.$t("workouts.NO_WORKOUTS"))+" ",1),(0,a.Wm)(n,{to:"/workouts/add"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,r.zw)(e.$t("workouts.UPLOAD_FIRST_WORKOUT")),1)])),_:1})])])}var i=n(3744);const l={},c=(0,i.Z)(l,[["render",o],["__scopeId","data-v-4b4d15fb"]]);var u=c},4612:function(e,t,n){var a={"./en/en.ts":9350,"./fr/fr.ts":1079};function r(e){var t=s(e);return n(t)}function s(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}r.keys=function(){return Object.keys(a)},r.resolve=s,e.exports=r,r.id=4612}},t={};function n(a){var r=t[a];if(void 0!==r)return r.exports;var s=t[a]={exports:{}};return e[a].call(s.exports,s,s.exports,n),s.exports}n.m=e,function(){var e=[];n.O=function(t,a,r,s){if(!a){var o=1/0;for(u=0;u=s)&&Object.keys(n.O).every((function(e){return n.O[e](a[l])}))?a.splice(l--,1):(i=!1,s0&&e[u-1][2]>s;u--)e[u]=e[u-1];e[u]=[a,r,s]}}(),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(a,r){if(1&r&&(a=this(a)),8&r)return a;if("object"===typeof a&&a){if(4&r&&a.__esModule)return a;if(16&r&&"function"===typeof a.then)return a}var s=Object.create(null);n.r(s);var o={};e=e||[null,t({}),t([]),t(t)];for(var i=2&r&&a;"object"==typeof i&&!~e.indexOf(i);i=t(i))Object.getOwnPropertyNames(i).forEach((function(e){o[e]=function(){return a[e]}}));return o["default"]=function(){return a},n.d(s,o),s}}(),function(){n.d=function(e,t){for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})}}(),function(){n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce((function(t,a){return n.f[a](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:"b7d4ded2",93:"35a58b95",193:"284e20be",243:"d80d691c",328:"c095abe4",401:"9770e7ed",431:"0a529e40",633:"031db9b5",845:"52d627f4",858:"62431e1e",881:"23cdd304"}[e]+".js"}}(),function(){n.miniCssF=function(e){return"static/css/"+{24:"reset",193:"statistics",328:"admin",401:"workouts",845:"profile"}[e]+"."+{24:"e2527ec6",193:"91fe968e",328:"73df498d",401:"1f6e4a1d",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(a,r,s,o){if(e[a])e[a].push(r);else{var i,l;if(void 0!==s)for(var c=document.getElementsByTagName("script"),u=0;u{const t=s.Z.getters[o.YN.GETTERS.AUTH_TOKEN];if(t){const n=`Bearer ${t}`;e.headers&&e.headers.Authorization!==n&&(e.headers.Authorization=`Bearer ${t}`)}return e}),(e=>Promise.reject(e))),t["Z"]=l},2540:function(e,t,n){"use strict";var a=n(3324);function r(){const e=n(4612),t={};return e.keys().forEach((n=>{const a=n.match(/([A-Za-z0-9-_]+)\./i);if(a&&a.length>1){const r=a[1];t[r]=e(n).default}})),t}t["Z"]=(0,a.o)({legacy:!1,locale:"en",fallbackLocale:"en",globalInjection:!0,messages:r()})},9350:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return _}});var a={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:a}=e;return t(["under ",n(a(0))," license "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Source code"])}},r={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:a}=e;return t(["Are you sure you want to delete ",n(a(0))," account? All data will be deleted, this cannot be undone."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:a}=e;return t(["Are you sure you want to reset ",n(a(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"])}}}}},s={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 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"])}}},o={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Resend confirmation email"])},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"])])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation"])},HOME:e=>{const{normalize:t}=e;return t(["Home"])},HERE:e=>{const{normalize:t}=e;return t(["here"])},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={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Transport)"])}},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"])}}},d={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"])}}},m={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:a}=e;return t(["Your password have been updated. Click ",n(a(0))," to log in."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Account edition"])},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"])},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:a}=e;return t(["Please ",n(a(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"])},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.'])}},S={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_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"])}},_={about:a,admin:r,api:s,buttons:o,common:i,dashboard:l,error:c,sports:u,statistics:d,user:m,workouts:S}},1079:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return _}});var a={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:a}=e;return t(["sous license ",n(a(0))," (en)"])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Code source (en)"])}},r={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:a}=e;return t(["Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur ",n(a(0))," ? Toutes les données seront définitivement."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:a}=e;return t(["Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur ",n(a(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"])}}}}},s={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(["Email : une adresse email valide doit être fournie."])},"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 email 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 email 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"])}}},o={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Envoyer à nouveau l'email de confirmation"])},BACK:e=>{const{normalize:t}=e;return t(["Précédent"])},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"])])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation (en)"])},HOME:e=>{const{normalize:t}=e;return t(["Accueil"])},HERE:e=>{const{normalize:t}=e;return t(["ici"])},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"])}},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={"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)"])}},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 (Electrique)"])}},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"])}}},d={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"])}}},m={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 votre boite mail. Un nouvel email de confirmation a été envoyé à l'adresse email 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 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(["Email"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Saisir une adresse email valide."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Saisir 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 votre boite mail. Si vote adresse est dans notre base de données, vous recevrez un email 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:a}=e;return t(["Votre mot de passe a été mis à jour. Cliquez ",n(a(0))," pour vous connecter."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour du compte"])},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"])},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:a}=e;return t(["Veuillez vous ",n(a(0))," pour changer de nouveau votre adresse email 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"])},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 boite email pour valider votre nouvelle adresse email."])},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 email 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 l'email 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.'])}},S={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_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"])}},_={about:a,admin:r,api:s,buttons:o,common:i,dashboard:l,error:c,sports:u,statistics:d,user:m,workouts:S}},811:function(e,t,n){"use strict";var a=n(3328),r=n(8278),s=n(9963),o=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(5793),c=n(2715),u=n(3577);const d=e=>((0,l.dD)("data-v-2c73279e"),e=e(),(0,l.Cn)(),e),m={id:"footer"},S={class:"footer-items"},_={class:"footer-item"},E=d((()=>(0,l._)("strong",null,"FitTrackee",-1))),p=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),T={class:"footer-item"},A={key:0,class:"footer-item bullet"},U={key:1,class:"footer-item"},O=["href"],R=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),I={class:"footer-item"},g={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"};var w=(0,l.aZ)({props:{version:null,adminContact:null},setup(e){const t=e,{adminContact:n,version:a}=(0,c.BK)(t);return(e,t)=>{const r=(0,l.up)("router-link");return(0,l.wg)(),(0,l.iD)("div",m,[(0,l._)("div",S,[(0,l._)("div",_,[E,(0,l.Uk)(" v"+(0,u.zw)((0,c.SU)(a)),1)]),p,(0,l._)("div",T,[(0,l.Wm)(r,{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",U,[(0,l._)("a",{href:`mailto:${(0,c.SU)(n)}`},(0,u.zw)(e.$t("common.CONTACT")),9,O)])):(0,l.kq)("",!0),R,(0,l._)("div",I,[(0,l._)("a",g,(0,u.zw)(e.$t("common.DOCUMENTATION")),1)])])])}}}),v=n(3744);const f=(0,v.Z)(w,[["__scopeId","data-v-2c73279e"]]);var N=f,h=n(3324),C=n(6595),D=n(8602),k=n(9917),z=n(6287);const P=e=>((0,l.dD)("data-v-0d4f0b8f"),e=e(),(0,l.Cn)(),e),M={id:"nav"},y={class:"nav-container"},b={class:"nav-app-name"},L={class:"nav-items-close"},G=P((()=>(0,l._)("div",{class:"app-name"},"FitTrackee",-1))),F={key:0,class:"nav-items-group"},W=P((()=>(0,l._)("div",{class:"nav-item nav-separator"},null,-1))),Y={class:"nav-items-user-menu"},x={key:0,class:"nav-items-group"},$={class:"nav-item nav-profile-img"},Z={key:1,class:"nav-items-group"},K=P((()=>(0,l._)("i",{class:"fa fa-language"},null,-1)));var B=(0,l.aZ)({emits:["menuInteraction"],setup(e,{emit:t}){const{locale:n}=(0,h.QT)(),a=(0,k.o)(),r=(0,l.Fl)((()=>a.getters[D.YN.GETTERS.AUTH_USER_PROFILE])),s=(0,l.Fl)((()=>a.getters[D.YN.GETTERS.IS_AUTHENTICATED])),o=(0,l.Fl)((()=>a.getters[D.SY.GETTERS.LANGUAGE]));let i=(0,c.iH)(!1);function d(){i.value=!0,t("menuInteraction",!0)}function m(){i.value=!1,t("menuInteraction",!1)}function S(e){n.value=e.value.toString(),a.commit(D.SY.MUTATIONS.UPDATE_LANG,e.value)}function _(){a.dispatch(D.YN.ACTIONS.LOGOUT)}return(e,t)=>{const n=(0,l.up)("router-link"),a=(0,l.up)("Dropdown");return(0,l.wg)(),(0,l.iD)("div",M,[(0,l._)("div",y,[(0,l._)("div",b,[(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":(0,c.SU)(i)}])},[(0,l._)("i",{class:"fa fa-bars hamburger-icon",onClick:t[1]||(t[1]=e=>d())})],2),(0,l._)("div",{class:(0,u.C_)(["nav-items",{"menu-open":(0,c.SU)(i)}])},[(0,l._)("div",L,[G,(0,l._)("i",{class:(0,u.C_)(["fa fa-close close-icon nav-item",{"menu-closed":!(0,c.SU)(i)}]),onClick:t[2]||(t[2]=e=>m())},null,2)]),(0,l._)("div",{class:"nav-items-app-menu",onClick:t[3]||(t[3]=e=>m())},[(0,c.SU)(s)?((0,l.wg)(),(0,l.iD)("div",F,[(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)(s)&&(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),W])):(0,l.kq)("",!0)]),(0,l._)("div",Y,[(0,c.SU)(s)?((0,l.wg)(),(0,l.iD)("div",x,[(0,l._)("div",$,[(0,l.Wm)(C.Z,{user:(0,c.SU)(r)},null,8,["user"])]),(0,l.Wm)(n,{class:"nav-item",to:"/profile",onClick:m},{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",Z,[(0,l.Wm)(n,{class:"nav-item",to:"/login",onClick:m},{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:m},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("user.REGISTER")),1)])),_:1})])),(0,c.SU)(z.mT)&&(0,c.SU)(o)?((0,l.wg)(),(0,l.j4)(a,{key:2,class:"nav-item",options:(0,c.SU)(z.mT),selected:(0,c.SU)(o),onSelected:S},{default:(0,l.w5)((()=>[K])),_:1},8,["options","selected"])):(0,l.kq)("",!0)])],2)])])}}});const H=(0,v.Z)(B,[["__scopeId","data-v-0d4f0b8f"]]);var q=H,j=n(7167);const V={id:"no-config"},X={class:"error-page"},J={class:"error-img"},Q=["innerHTML"];var ee=(0,l.aZ)({setup(e){return(e,t)=>((0,l.wg)(),(0,l.iD)("div",V,[(0,l._)("div",X,[(0,l._)("div",J,[(0,l.Wm)(j.Z)]),(0,l._)("p",{class:"error-message",innerHTML:e.$t("error.APP_ERROR")},null,8,Q)])]))}});const te=(0,v.Z)(ee,[["__scopeId","data-v-47759238"]]);var ne=te;const ae=(0,l._)("div",{id:"top"},null,-1),re={key:0,class:"app-container"},se={class:"app-loading"},oe={class:"container scroll"},ie=(0,l._)("i",{class:"fa fa-chevron-up","aria-hidden":"true"},null,-1),le=[ie];var ce=(0,l.aZ)({setup(e){const t=(0,k.o)(),n=(0,l.Fl)((()=>t.getters[D.SY.GETTERS.APP_CONFIG])),a=(0,l.Fl)((()=>t.getters[D.SY.GETTERS.APP_LOADING])),r=(0,c.iH)(!1),s=(0,c.iH)(!1);function o(e){r.value=e}function i(e){return e.getBoundingClientRect().top=0}function d(){window.onscroll=()=>{let e=document.querySelector("#bottom");s.value=null!==e&&i(e)}}function m(){window.scrollTo({top:0,behavior:"smooth"}),setTimeout((()=>{s.value=!1}),300)}return(0,l.wF)((()=>t.dispatch(D.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,[ae,(0,l.Wm)(q,{onMenuInteraction:o}),(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("div",re,[(0,l._)("div",se,[(0,l.Wm)(i)])])):((0,l.wg)(),(0,l.iD)("div",{key:1,class:(0,u.C_)(["app-container",{"hide-scroll":r.value}])},[(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(d,{key:0})):((0,l.wg)(),(0,l.j4)(ne,{key:1}))],2)),(0,l._)("div",oe,[(0,l._)("div",{class:(0,u.C_)(["scroll-button",{"display-button":s.value}]),onClick:m},le,2)]),(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(N,{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 ue=ce;var de=ue,me=n(2540),Se=n(8733),_e=n(12);const Ee={class:"alert-message"},pe=["innerHTML"];var Te=(0,l.aZ)({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,pe)]))}});const Ae=(0,v.Z)(Te,[["__scopeId","data-v-69d7e4ff"]]);var Ue=Ae,Oe=n(2531);const Re={class:"custom-textarea"},Ie=["id","name","maxLenght","disabled"],ge={class:"remaining-chars"};var we=(0,l.aZ)({props:{name:null,charLimit:{default:500},disabled:{type:Boolean,default:!1},input:{default:""}},emits:["updateValue"],setup(e,{emit:t}){const n=e;let a=(0,c.iH)("");function r(e){t("updateValue",e.target.value)}return(0,l.YP)((()=>n.input),(e=>{a.value=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=>(0,c.dq)(a)?a.value=e:a=e),onInput:r},null,40,Ie),[[s.nr,(0,c.SU)(a)]]),(0,l._)("div",ge,(0,u.zw)(t.$t("workouts.REMAINING_CHARS"))+": "+(0,u.zw)((0,c.SU)(a).length)+"/"+(0,u.zw)(e.charLimit),1)]))}});const ve=(0,v.Z)(we,[["__scopeId","data-v-3ec2aca2"]]);var fe=ve,Ne=n(3649);const he=(0,l.Uk)(" "+(0,u.zw)(" ")+" ");var Ce=(0,l.aZ)({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:a,distance:r,speed:s,strong:o,unitFrom:i,useImperialUnits:d}=(0,c.BK)(t),m=(0,l.Fl)((()=>d.value?Ne.Dl[i.value].defaultTarget:i.value)),S=(0,l.Fl)((()=>d.value?(0,Ne.sC)(r.value,i.value,m.value,n.value):parseFloat(r.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)(o)}])},(0,u.zw)((0,c.SU)(S)),3),he,(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("span",{key:0,class:(0,u.C_)(["unit",{strong:(0,c.SU)(o)}])},(0,u.zw)((0,c.SU)(m))+(0,u.zw)((0,c.SU)(s)?"/h":""),3)):(0,l.kq)("",!0)],64))}});const De=(0,v.Z)(Ce,[["__scopeId","data-v-f46ff1d6"]]);var ke=De,ze=n(2119);const Pe={class:"dropdown-wrapper"},Me={key:0,class:"dropdown-list"},ye=["onClick"];var be=(0,l.aZ)({props:{options:null,selected:null},emits:{selected:e=>e},setup(e,{emit:t}){const n=e,a=(0,ze.yj)();let r=(0,c.iH)(!1),s=n.options.map((e=>e));function o(){r.value=!r.value}function i(e){t("selected",e),r.value=!1}return(0,l.YP)((()=>a.path),(()=>r.value=!1)),(t,n)=>((0,l.wg)(),(0,l.iD)("div",Pe,[(0,l._)("div",{class:"dropdown-selected",onClick:o},[(0,l.WI)(t.$slots,"default")]),(0,c.SU)(r)?((0,l.wg)(),(0,l.iD)("ul",Me,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)((0,c.SU)(s),((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,ye)))),128))])):(0,l.kq)("",!0)]))}});const Le=(0,v.Z)(be,[["__scopeId","data-v-ca61364c"]]);var Ge=Le;const Fe={class:"error-message"},We={key:0},Ye={key:1};var xe=(0,l.aZ)({props:{message:null},setup(e){const t=e,{message:n}=(0,c.BK)(t);return(e,t)=>((0,l.wg)(),(0,l.iD)("div",Fe,[Array.isArray((0,c.SU)(n))?((0,l.wg)(),(0,l.iD)("ul",We,[((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",Ye,(0,u.zw)(e.$t((0,c.SU)(n))),1))]))}});const $e=(0,v.Z)(xe,[["__scopeId","data-v-2659a79a"]]);var Ze=$e;const Ke={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"},Be=(0,l._)("desc",{id:"cyclingSportDescription"}," silhouette of a person riding a bicycle ",-1),He=(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),qe=[Be,He];function je(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",Ke,qe)}var Ve={name:"CyclingSport"};const Xe=(0,v.Z)(Ve,[["render",je]]);var Je=Xe;const Qe={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"},et=(0,l._)("desc",{id:"cyclingTransportDescription"}," silhouette of a person riding a bicycle (for transportation) ",-1),tt=(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),nt=[et,tt];function at(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",Qe,nt)}var rt={name:"CyclingTransport"};const st=(0,v.Z)(rt,[["render",at]]);var ot=st;const it={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"},lt=(0,l._)("desc",{id:"hikingDescription"},"silhouette of a person hiking",-1),ct=(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),ut=[lt,ct];function dt(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",it,ut)}var mt={name:"Hiking"};const St=(0,v.Z)(mt,[["render",dt]]);var _t=St;const Et={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"},pt=(0,l._)("desc",{id:"mountainBikingDescription"}," silhouette of a person riding a mountain bike ",-1),Tt=(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),At=[pt,Tt];function Ut(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",Et,At)}var Ot={name:"MountainBiking"};const Rt=(0,v.Z)(Ot,[["render",Ut]]);var It=Rt;const gt={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"},wt=(0,l.uE)(' silhouette of a person riding an electric mountain bike ',18),vt=[wt];function ft(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",gt,vt)}var Nt={name:"MountainBikingElectric"};const ht=(0,v.Z)(Nt,[["render",ft]]);var Ct=ht;const Dt={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"},kt=(0,l._)("desc",{id:"rowingDescription"},"silhouette of a person rowing",-1),zt=(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),Pt=[kt,zt];function Mt(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",Dt,Pt)}var yt={name:"Rowing"};const bt=(0,v.Z)(yt,[["render",Mt]]);var Lt=bt;const Gt={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"},Ft=(0,l._)("desc",{id:"runningDescription"},"silhouette of a running person",-1),Wt=(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),Yt=[Ft,Wt];function xt(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",Gt,Yt)}var $t={name:"Running"};const Zt=(0,v.Z)($t,[["render",xt]]);var Kt=Zt;const Bt={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"},Ht=(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),jt=[Ht,qt];function Vt(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",Bt,jt)}var Xt={name:"SkiingAlpine"};const Jt=(0,v.Z)(Xt,[["render",Vt]]);var Qt=Jt;const en={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"},tn=(0,l._)("desc",{id:"crossCountrySkiingDescription"}," silhouette of a person skiing (cross country) ",-1),nn=(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),an=[tn,nn];function rn(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",en,an)}var sn={name:"SkiingCrossCountry"};const on=(0,v.Z)(sn,[["render",rn]]);var ln=on;const cn={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"},un=(0,l.uE)('silhouette of a person with snowshoes',6),dn=[un];function mn(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",cn,dn)}var Sn={name:"Snowshoes"};const _n=(0,v.Z)(Sn,[["render",mn]]);var En=_n;const pn={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"},Tn=(0,l._)("desc",{id:"trailDescription"},"silhouette of a person running (trail)",-1),An=(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),Un=[Tn,An];function On(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",pn,Un)}var Rn={name:"Trail"};const In=(0,v.Z)(Rn,[["render",On]]);var gn=In;const wn={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"},vn=(0,l.uE)('silhouette of a walking person',3),fn=[vn];function Nn(e,t,n,a,r,s){return(0,l.wg)(),(0,l.iD)("svg",wn,fn)}var hn={name:"Walking"};const Cn=(0,v.Z)(hn,[["render",Nn]]);var Dn=Cn;const kn=["title"];var zn=(0,l.aZ)({props:{sportLabel:null,color:null,title:{default:""}},setup(e){const t=e,{color:n,sportLabel:a,title:r}=(0,c.BK)(t),s=(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)(s)[(0,c.SU)(a)]}),title:(0,c.SU)(r)?(0,c.SU)(r):e.$t(`sports.${(0,c.SU)(a)}.LABEL`)},["Cycling (Sport)"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(Je,{key:0})):(0,l.kq)("",!0),"Cycling (Transport)"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(ot,{key:1})):(0,l.kq)("",!0),"Hiking"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(_t,{key:2})):(0,l.kq)("",!0),"Mountain Biking"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(It,{key:3})):(0,l.kq)("",!0),"Mountain Biking (Electric)"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(Ct,{key:4})):(0,l.kq)("",!0),"Rowing"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(Lt,{key:5})):(0,l.kq)("",!0),"Running"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(Kt,{key:6})):(0,l.kq)("",!0),"Skiing (Alpine)"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(Qt,{key:7})):(0,l.kq)("",!0),"Skiing (Cross Country)"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(ln,{key:8})):(0,l.kq)("",!0),"Snowshoes"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(En,{key:9})):(0,l.kq)("",!0),"Trail"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(gn,{key:10})):(0,l.kq)("",!0),"Walking"===(0,c.SU)(a)?((0,l.wg)(),(0,l.j4)(Dn,{key:11})):(0,l.kq)("",!0)],12,kn))}});const Pn=zn;var Mn=Pn;const yn={class:"loader"};function bn(e,t){return(0,l.wg)(),(0,l.iD)("div",yn)}const Ln={},Gn=(0,v.Z)(Ln,[["render",bn],["__scopeId","data-v-4c9921ee"]]);var Fn=Gn;const Wn={id:"modal"},Yn={class:"custom-modal"},xn={key:0,class:"modal-message"},$n={key:1,class:"modal-message"},Zn={class:"modal-buttons"};var Kn=(0,l.aZ)({props:{title:null,message:null,strongMessage:{default:()=>null}},emits:["cancelAction","confirmAction"],setup(e,{emit:t}){const n=e,a=(0,k.o)(),{title:r,message:s,strongMessage:o}=(0,c.BK)(n),i=(0,l.Fl)((()=>a.getters[D.SY.GETTERS.ERROR_MESSAGES]));return(0,l.Ah)((()=>a.commit(D.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(e,n)=>{const a=(0,l.up)("i18n-t"),d=(0,l.up)("ErrorMessage"),m=(0,l.up)("Card");return(0,l.wg)(),(0,l.iD)("div",Wn,[(0,l._)("div",Yn,[(0,l.Wm)(m,null,{title:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,c.SU)(r)),1)])),content:(0,l.w5)((()=>[(0,c.SU)(o)?((0,l.wg)(),(0,l.iD)("div",xn,[(0,l.Wm)(a,{keypath:(0,c.SU)(s)},{default:(0,l.w5)((()=>[(0,l._)("span",null,(0,u.zw)((0,c.SU)(o)),1)])),_:1},8,["keypath"])])):((0,l.wg)(),(0,l.iD)("div",$n,(0,u.zw)((0,c.SU)(s)),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",Zn,[(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 Bn=(0,v.Z)(Kn,[["__scopeId","data-v-e8fcfaba"]]);var Hn=Bn;const qn=[{target:Ue,name:"AlertMessage"},{target:Oe.Z,name:"Card"},{target:fe,name:"CustomTextArea"},{target:ke,name:"Distance"},{target:Ge,name:"Dropdown"},{target:Ze,name:"ErrorMessage"},{target:Fn,name:"Loader"},{target:Hn,name:"Modal"},{target:Mn,name:"SportImage"}],jn={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 Vn=n(631);a.kL.register(a.ZL,a.jn,a.od,a.De,a.Dx,a.u,a.Gu,a.vn,a.uw,a.ST,a.f$,r.Z);const Xn=(0,s.ri)(de).provide("sportColors",Vn.Zo).use(me.Z).use(_e.Z).use(Se.Z).use(o.ZP,{name:"VFullscreen"}).directive("click-outside",jn);qn.forEach((e=>{Xn.component(e.name,e.target)})),Xn.mount("#app")},8733:function(e,t,n){"use strict";n.d(t,{Z:function(){return si}});var a=n(2119),r=n(5793),s=n(3577),o=n(9963),i=n(2715),l=n(8602),c=n(9917),u=n(8966);const d=e=>((0,r.dD)("data-v-24ec93e2"),e=e(),(0,r.Cn)(),e),m={id:"admin-app",class:"admin-card"},S=["onSubmit"],_={for:"admin_contact"},E=["value"],p=["disabled"],T={for:"max_users"},A=["disabled"],U={class:"user-limit-help"},O={class:"info-box"},R=d((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),I={for:"max_single_file_size"},g=["disabled"],w={for:"max_zip_file_size"},v=["disabled"],f={for:"gpx_limit_import"},N=["disabled"],h={key:1,class:"form-buttons"},C={class:"confirm",type:"submit"},D=["onClick"],k={key:2,class:"form-buttons"};var z=(0,r.aZ)({props:{appConfig:null,edition:{type:Boolean,default:!1}},setup(e){const t=e,{edition:n}=(0,i.BK)(t),d=(0,c.o)(),z=(0,a.tv)(),P=(0,i.qj)({admin_contact:"",max_users:0,max_single_file_size:0,max_zip_file_size:0,gpx_limit_import:0}),M=(0,r.Fl)((()=>d.getters[l.SY.GETTERS.ERROR_MESSAGES]));function y(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(){y(t.appConfig),d.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),z.push("/admin/application")}function L(){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,r.wF)((()=>{t.appConfig&&y(t.appConfig)})),(e,t)=>{const a=(0,r.up)("ErrorMessage"),l=(0,r.up)("Card");return(0,r.wg)(),(0,r.iD)("div",m,[(0,r.Wm)(l,null,{title:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(e.$t("admin.APP_CONFIG.TITLE")),1)])),content:(0,r.w5)((()=>[(0,r._)("form",{class:"admin-form",onSubmit:(0,o.iM)(L,["prevent"])},[(0,r._)("label",_,[(0,r.Uk)((0,s.zw)(e.$t("admin.APP_CONFIG.ADMIN_CONTACT"))+": ",1),(0,i.SU)(n)||(0,i.SU)(P).admin_contact?(0,r.wy)(((0,r.wg)(),(0,r.iD)("input",{key:1,id:"admin_contact",name:"admin_contact",type:"email","onUpdate:modelValue":t[0]||(t[0]=e=>(0,i.SU)(P).admin_contact=e),disabled:!(0,i.SU)(n)},null,8,p)),[[o.nr,(0,i.SU)(P).admin_contact]]):((0,r.wg)(),(0,r.iD)("input",{key:0,class:"no-contact",value:e.$t("admin.APP_CONFIG.NO_CONTACT_EMAIL"),disabled:""},null,8,E))]),(0,r._)("label",T,[(0,r.Uk)((0,s.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_LABEL"))+": ",1),(0,r.wy)((0,r._)("input",{id:"max_users",name:"max_users",type:"number",min:"0","onUpdate:modelValue":t[1]||(t[1]=e=>(0,i.SU)(P).max_users=e),disabled:!(0,i.SU)(n)},null,8,A),[[o.nr,(0,i.SU)(P).max_users]])]),(0,r._)("div",U,[(0,r._)("span",O,[R,(0,r.Uk)(" "+(0,s.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_HELP")),1)])]),(0,r._)("label",I,[(0,r.Uk)((0,s.zw)(e.$t("admin.APP_CONFIG.SINGLE_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,r.wy)((0,r._)("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=>(0,i.SU)(P).max_single_file_size=e),disabled:!(0,i.SU)(n)},null,8,g),[[o.nr,(0,i.SU)(P).max_single_file_size]])]),(0,r._)("label",w,[(0,r.Uk)((0,s.zw)(e.$t("admin.APP_CONFIG.ZIP_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,r.wy)((0,r._)("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=>(0,i.SU)(P).max_zip_file_size=e),disabled:!(0,i.SU)(n)},null,8,v),[[o.nr,(0,i.SU)(P).max_zip_file_size]])]),(0,r._)("label",f,[(0,r.Uk)((0,s.zw)(e.$t("admin.APP_CONFIG.MAX_FILES_IN_ZIP_LABEL"))+": ",1),(0,r.wy)((0,r._)("input",{id:"gpx_limit_import",name:"gpx_limit_import",type:"number",min:"0","onUpdate:modelValue":t[4]||(t[4]=e=>(0,i.SU)(P).gpx_limit_import=e),disabled:!(0,i.SU)(n)},null,8,N),[[o.nr,(0,i.SU)(P).gpx_limit_import]])]),(0,i.SU)(M)?((0,r.wg)(),(0,r.j4)(a,{key:0,message:(0,i.SU)(M)},null,8,["message"])):(0,r.kq)("",!0),(0,i.SU)(n)?((0,r.wg)(),(0,r.iD)("div",h,[(0,r._)("button",C,(0,s.zw)(e.$t("buttons.SUBMIT")),1),(0,r._)("button",{class:"cancel",onClick:(0,o.iM)(b,["prevent"])},(0,s.zw)(e.$t("buttons.CANCEL")),9,D)])):((0,r.wg)(),(0,r.iD)("div",k,[(0,r._)("button",{class:"confirm",onClick:t[5]||(t[5]=(0,o.iM)((t=>e.$router.push("/admin/application/edit")),["prevent"]))},(0,s.zw)(e.$t("buttons.EDIT")),1),(0,r._)("button",{class:"cancel",onClick:t[6]||(t[6]=(0,o.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,s.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))],40,S)])),_:1})])}}}),P=n(3744);const M=(0,P.Z)(z,[["__scopeId","data-v-24ec93e2"]]);var y=M;const b={class:"stat-card"},L={class:"stat-content box"},G={class:"stat-icon"},F={class:"stat-details"},W={class:"stat-huge"},Y={class:"stat"};var x=(0,r.aZ)({props:{icon:null,text:null,value:null},setup(e){const t=e,{icon:n,text:a,value:o}=(0,i.BK)(t);return(e,t)=>((0,r.wg)(),(0,r.iD)("div",b,[(0,r._)("div",L,[(0,r._)("div",G,[(0,r._)("i",{class:(0,s.C_)(["fa",`fa-${(0,i.SU)(n)}`])},null,2)]),(0,r._)("div",F,[(0,r._)("div",W,(0,s.zw)((0,i.SU)(o)),1),(0,r._)("div",Y,(0,s.zw)((0,i.SU)(a)),1)])])]))}});const $=x;var Z=$;const K={id:"user-stats"};var B=(0,r.aZ)({props:{appStatistics:null},setup(e){const t=e,{appStatistics:n}=(0,i.BK)(t),a=(0,r.Fl)((()=>(0,u.Z)(n.value.uploads_dir_size,!1)));return(e,t)=>((0,r.wg)(),(0,r.iD)("div",K,[(0,r.Wm)(Z,{icon:"users",value:(0,i.SU)(n).users,text:e.$t("admin.USER",(0,i.SU)(n).users)},null,8,["value","text"]),(0,r.Wm)(Z,{icon:"tags",value:(0,i.SU)(n).sports,text:e.$t("workouts.SPORT",(0,i.SU)(n).sports)},null,8,["value","text"]),(0,r.Wm)(Z,{icon:"calendar",value:(0,i.SU)(n).workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(n).workouts)},null,8,["value","text"]),(0,r.Wm)(Z,{icon:"folder-open",value:(0,i.SU)(a).size,text:(0,i.SU)(a).suffix},null,8,["value","text"])]))}});const H=B;var q=H,j=n(2531);const V=e=>((0,r.dD)("data-v-0dd66f89"),e=e(),(0,r.Cn)(),e),X={id:"admin-menu",class:"center-card"},J={class:"admin-menu description-list"},Q={class:"application-config-details"},ee=V((()=>(0,r._)("br",null,null,-1))),te={class:"registration-status"},ne={key:0,class:"email-sending-status"},ae=V((()=>(0,r._)("i",{class:"fa fa-exclamation-triangle","aria-hidden":"true"},null,-1)));var re=(0,r.aZ)({props:{appConfig:null,appStatistics:{default:()=>({})}},setup(e){const t=e,{appConfig:n,appStatistics:a}=(0,i.BK)(t);return(e,t)=>{const o=(0,r.up)("router-link");return(0,r.wg)(),(0,r.iD)("div",X,[(0,r.Wm)(j.Z,null,{title:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(e.$t("admin.ADMINISTRATION")),1)])),content:(0,r.w5)((()=>[(0,r.Wm)(q,{appStatistics:(0,i.SU)(a)},null,8,["appStatistics"]),(0,r._)("div",J,[(0,r._)("dl",null,[(0,r._)("dt",null,[(0,r.Wm)(o,{to:"/admin/application"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(e.$t("admin.APPLICATION")),1)])),_:1})]),(0,r._)("dd",Q,[(0,r.Uk)((0,s.zw)(e.$t("admin.UPDATE_APPLICATION_DESCRIPTION")),1),ee,(0,r._)("span",te,(0,s.zw)(e.$t("admin.REGISTRATION_"+((0,i.SU)(n).is_registration_enabled?"ENABLED":"DISABLED"))),1),(0,i.SU)(n).is_email_sending_enabled?(0,r.kq)("",!0):((0,r.wg)(),(0,r.iD)("span",ne,[ae,(0,r.Uk)(" "+(0,s.zw)(e.$t("admin.EMAIL_SENDING_DISABLED")),1)]))]),(0,r._)("dt",null,[(0,r.Wm)(o,{to:"/admin/sports"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)((0,s.kC)(e.$t("workouts.SPORT",0))),1)])),_:1})]),(0,r._)("dd",null,(0,s.zw)(e.$t("admin.ENABLE_DISABLE_SPORTS")),1),(0,r._)("dt",null,[(0,r.Wm)(o,{to:"/admin/users"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)((0,s.kC)(e.$t("admin.USER",0))),1)])),_:1})]),(0,r._)("dd",null,(0,s.zw)(e.$t("admin.ADMIN_RIGHTS_DELETE_USER_ACCOUNT")),1)])])])),_:1})])}}});const se=(0,P.Z)(re,[["__scopeId","data-v-0dd66f89"]]);var oe=se,ie=n(3324),le=n(631);const ce=e=>((0,r.dD)("data-v-6d62af67"),e=e(),(0,r.Cn)(),e),ue={id:"admin-sports",class:"admin-card"},de={class:"responsive-table"},me=ce((()=>(0,r._)("th",null,"#",-1))),Se={class:"text-left"},_e={class:"text-left sport-action"},Ee=ce((()=>(0,r._)("th",null,null,-1))),pe={class:"text-center"},Te=ce((()=>(0,r._)("span",{class:"cell-heading"},"id",-1))),Ae={class:"cell-heading"},Ue={class:"sport-label"},Oe={class:"cell-heading"},Re={class:"text-center"},Ie={class:"cell-heading"},ge={class:"sport-action"},we={class:"cell-heading"},ve={class:"action-button"},fe=["onClick"],Ne={key:0,class:"has-workouts"},he=ce((()=>(0,r._)("i",{class:"fa fa-warning","aria-hidden":"true"},null,-1)));var Ce=(0,r.aZ)({setup(e){const{t:t}=(0,ie.QT)(),n=(0,c.o)(),a=(0,r.Fl)((()=>(0,le.xH)(n.getters[l.O8.GETTERS.SPORTS],t))),u=(0,r.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,r.up)("SportImage"),l=(0,r.up)("ErrorMessage"),c=(0,r.up)("Card");return(0,r.wg)(),(0,r.iD)("div",ue,[(0,r.Wm)(c,null,{title:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(e.$t("admin.SPORTS.TITLE")),1)])),content:(0,r.w5)((()=>[(0,r._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,o.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,s.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,r._)("div",de,[(0,r._)("table",null,[(0,r._)("thead",null,[(0,r._)("tr",null,[me,(0,r._)("th",null,(0,s.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,r._)("th",Se,(0,s.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,r._)("th",null,(0,s.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,r._)("th",_e,(0,s.zw)(e.$t("admin.ACTION")),1),Ee])]),(0,r._)("tbody",null,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(a),(t=>((0,r.wg)(),(0,r.iD)("tr",{key:t.id},[(0,r._)("td",pe,[Te,(0,r.Uk)(" "+(0,s.zw)(t.id),1)]),(0,r._)("td",null,[(0,r._)("span",Ae,(0,s.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,r.Wm)(n,{title:t.translatedLabel,"sport-label":t.label,color:t.color},null,8,["title","sport-label","color"])]),(0,r._)("td",Ue,[(0,r._)("span",Oe,(0,s.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,r.Uk)(" "+(0,s.zw)(t.translatedLabel),1)]),(0,r._)("td",Re,[(0,r._)("span",Ie,(0,s.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,r._)("i",{class:(0,s.C_)("fa fa"+(t.is_active?"-check":"")),"aria-hidden":"true"},null,2)]),(0,r._)("td",ge,[(0,r._)("span",we,(0,s.zw)(e.$t("admin.ACTION")),1),(0,r._)("div",ve,[(0,r._)("button",{class:(0,s.C_)({danger:t.is_active}),onClick:e=>d(t.id,!t.is_active)},(0,s.zw)(e.$t(`buttons.${t.is_active?"DIS":"EN"}ABLE`)),11,fe),t.has_workouts?((0,r.wg)(),(0,r.iD)("span",Ne,[he,(0,r.Uk)(" "+(0,s.zw)(e.$t("admin.SPORTS.TABLE.HAS_WORKOUTS")),1)])):(0,r.kq)("",!0)])])])))),128))])]),(0,i.SU)(u)?((0,r.wg)(),(0,r.j4)(l,{key:0,message:(0,i.SU)(u)},null,8,["message"])):(0,r.kq)("",!0),(0,r._)("button",{onClick:t[1]||(t[1]=(0,o.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,s.zw)(e.$t("admin.BACK_TO_ADMIN")),1)])])),_:1})])}}});const De=(0,P.Z)(Ce,[["__scopeId","data-v-6d62af67"]]);var ke=De,ze=n(4850),Pe=n(8626),Me=n(6514),ye=n(6595);const be={class:"users-filters"},Le={class:"search-username"},Ge=["onKeyup","placeholder"];var Fe=(0,r.aZ)({emits:["filterOnUsername"],setup(e,{emit:t}){const n=(0,a.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,r.wg)(),(0,r.iD)("div",be,[(0,r._)("div",Le,[(0,r.wy)((0,r._)("input",{id:"username",name:"username","onUpdate:modelValue":t[0]||(t[0]=e=>l.value=e),onKeyup:(0,o.D2)(c,["enter"]),placeholder:e.$t("user.FILTER_ON_USERNAME")},null,40,Ge),[[o.nr,l.value,void 0,{trim:!0}]]),""!==l.value?((0,r.wg)(),(0,r.iD)("i",{key:0,class:"fa fa-times","aria-hidden":"true",onClick:u})):(0,r.kq)("",!0)]),(0,r._)("i",{class:(0,s.C_)(["fa fa-search",{"fa-disabled":""===l.value}]),"aria-hidden":"true",onClick:c},null,2)]))}});const We=(0,P.Z)(Fe,[["__scopeId","data-v-627a8e91"]]);var Ye=We,xe=n(2766),$e=n(6558);const Ze=e=>((0,r.dD)("data-v-4735c10f"),e=e(),(0,r.Cn)(),e),Ke={id:"admin-users",class:"admin-card"},Be={key:0,class:"no-users"},He={key:1,class:"responsive-table"},qe=Ze((()=>(0,r._)("th",null,"#",-1))),je={class:"left-text"},Ve={class:"left-text"},Xe={class:"left-text"},Je={class:"cell-heading"},Qe={class:"cell-heading"},et={class:"cell-heading"},tt={class:"cell-heading"},nt={class:"text-center"},at={class:"cell-heading"},rt={class:"text-center"},st={class:"cell-heading"},ot={class:"text-center"},it={class:"cell-heading"},lt={class:"text-center"},ct={class:"cell-heading"},ut=["disabled","onClick"];var dt=(0,r.aZ)({setup(e){const t=(0,c.o)(),n=(0,a.yj)(),u=(0,a.tv)(),d=["is_active","admin","created_at","username","workouts_count"],m="created_at";let S=(0,i.qj)((0,xe.pm)(n.query,d,m));const _=(0,r.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),E=(0,r.Fl)((()=>t.getters[l.RT.GETTERS.USERS])),p=(0,r.Fl)((()=>t.getters[l.RT.GETTERS.USERS_PAGINATION])),T=(0,r.Fl)((()=>t.getters[l.SY.GETTERS.ERROR_MESSAGES]));function A(e){t.dispatch(l.RT.ACTIONS.GET_USERS,e)}function U(e){R("q",e.value)}function O(e,n){t.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,admin:n})}function R(e,t){S[e]=t,"per_page"===e&&(S.page=1),u.push({path:"/admin/users",query:S})}return(0,r.wF)((()=>A(S))),(0,r.Ah)((()=>{t.dispatch(l.RT.ACTIONS.EMPTY_USERS)})),(0,r.YP)((()=>n.query),(e=>{S=(0,xe.pm)(e,d,m,{query:S}),A(S)})),(e,t)=>{const n=(0,r.up)("router-link"),a=(0,r.up)("ErrorMessage"),l=(0,r.up)("Card");return(0,r.wg)(),(0,r.iD)("div",Ke,[(0,r.Wm)(l,null,{title:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)((0,s.kC)(e.$t("admin.USER",0))),1)])),content:(0,r.w5)((()=>[(0,r._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,o.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,s.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,r.Wm)(Ye,{onFilterOnUsername:U}),(0,r.Wm)(Pe.Z,{sort:(0,i.SU)(xe.fS),order_by:d,query:(0,i.SU)(S),message:"admin.USERS.SELECTS.ORDER_BY",onUpdateSelect:R},null,8,["sort","query"]),0===(0,i.SU)(E).length?((0,r.wg)(),(0,r.iD)("div",Be,(0,s.zw)(e.$t("user.NO_USERS_FOUND")),1)):((0,r.wg)(),(0,r.iD)("div",He,[(0,r._)("table",null,[(0,r._)("thead",null,[(0,r._)("tr",null,[qe,(0,r._)("th",je,(0,s.zw)(e.$t("user.USERNAME")),1),(0,r._)("th",Ve,(0,s.zw)(e.$t("user.EMAIL")),1),(0,r._)("th",Xe,(0,s.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,r._)("th",null,(0,s.zw)((0,s.kC)(e.$t("workouts.WORKOUT",0))),1),(0,r._)("th",null,(0,s.zw)(e.$t("admin.ACTIVE")),1),(0,r._)("th",null,(0,s.zw)(e.$t("user.ADMIN")),1),(0,r._)("th",null,(0,s.zw)(e.$t("admin.ACTION")),1)])]),(0,r._)("tbody",null,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(E),(t=>((0,r.wg)(),(0,r.iD)("tr",{key:t.username},[(0,r._)("td",null,[(0,r._)("span",Je,(0,s.zw)(e.$t("user.PROFILE.PICTURE")),1),(0,r.Wm)(ye.Z,{user:t},null,8,["user"])]),(0,r._)("td",null,[(0,r._)("span",Qe,(0,s.zw)(e.$t("user.USERNAME")),1),(0,r.Wm)(n,{to:`/admin/users/${t.username}`},{default:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(t.username),1)])),_:2},1032,["to"])]),(0,r._)("td",null,[(0,r._)("span",et,(0,s.zw)(e.$t("user.EMAIL")),1),(0,r.Uk)(" "+(0,s.zw)(t.email),1)]),(0,r._)("td",null,[(0,r._)("span",tt,(0,s.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,r.Uk)(" "+(0,s.zw)((0,i.SU)(ze.Z)((0,i.SU)($e.eB)(t.created_at,(0,i.SU)(_).timezone),"dd/MM/yyyy HH:mm")),1)]),(0,r._)("td",nt,[(0,r._)("span",at,(0,s.zw)((0,s.kC)(e.$t("workouts.WORKOUT",0))),1),(0,r.Uk)(" "+(0,s.zw)(t.nb_workouts),1)]),(0,r._)("td",rt,[(0,r._)("span",st,(0,s.zw)(e.$t("admin.ACTIVE")),1),(0,r._)("i",{class:(0,s.C_)(`fa fa${t.is_active?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,r._)("td",ot,[(0,r._)("span",it,(0,s.zw)(e.$t("user.ADMIN")),1),(0,r._)("i",{class:(0,s.C_)(`fa fa${t.admin?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,r._)("td",lt,[(0,r._)("span",ct,(0,s.zw)(e.$t("admin.ACTION")),1),(0,r._)("button",{class:(0,s.C_)({danger:t.admin}),disabled:t.username===(0,i.SU)(_).username,onClick:e=>O(t.username,!t.admin)},(0,s.zw)(e.$t(`admin.USERS.TABLE.${t.admin?"REMOVE":"ADD"}_ADMIN_RIGHTS`)),11,ut)])])))),128))])]),(0,i.SU)(p).page?((0,r.wg)(),(0,r.j4)(Me.Z,{key:0,path:"/admin/users",pagination:(0,i.SU)(p),query:(0,i.SU)(S)},null,8,["pagination","query"])):(0,r.kq)("",!0),(0,i.SU)(T)?((0,r.wg)(),(0,r.j4)(a,{key:1,message:(0,i.SU)(T)},null,8,["message"])):(0,r.kq)("",!0),(0,r._)("button",{onClick:t[1]||(t[1]=(0,o.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,s.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))])),_:1})])}}});const mt=(0,P.Z)(dt,[["__scopeId","data-v-4735c10f"]]);var St=mt,_t=n(2179);const Et={class:"profile-tabs custom-checkboxes-group"},pt={class:"profile-tabs-checkboxes custom-checkboxes"},Tt=["id","name","checked","disabled","onInput"];var At=(0,r.aZ)({props:{tabs:null,selectedTab:null,edition:{type:Boolean},disabled:{type:Boolean,default:!1}},setup(e){const t=e,{tabs:n,selectedTab:a,disabled:o}=(0,i.BK)(t);function l(e){switch(e){case"ACCOUNT":case"PICTURE":return`/profile/edit/${e.toLocaleLowerCase()}`;case"PREFERENCES":case"SPORTS":return`/profile${t.edition?"/edit":""}/${e.toLocaleLowerCase()}`;default:case"PROFILE":return"/profile"+(t.edition?"/edit":"")}}return(e,t)=>((0,r.wg)(),(0,r.iD)("div",Et,[(0,r._)("div",pt,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(n),(t=>((0,r.wg)(),(0,r.iD)("div",{class:"profile-tab custom-checkbox",key:t},[(0,r._)("label",null,[(0,r._)("input",{type:"radio",id:t,name:t,checked:(0,i.SU)(a)===t,disabled:(0,i.SU)(o),onInput:n=>e.$router.push(l(t))},null,40,Tt),(0,r._)("span",null,(0,s.zw)(e.$t(`user.PROFILE.TABS.${t}`)),1)])])))),128))])]))}});const Ut=At;var Ot=Ut;const Rt={id:"user-profile"},It={class:"box"};var gt=(0,r.aZ)({props:{user:null,tab:null},setup(e){const t=e,{user:n,tab:a}=(0,i.BK)(t),s=["PROFILE","PREFERENCES","SPORTS"];return(e,t)=>{const o=(0,r.up)("router-view");return(0,r.wg)(),(0,r.iD)("div",Rt,[(0,r.Wm)(_t.Z,{user:(0,i.SU)(n)},null,8,["user"]),(0,r._)("div",It,[(0,r.Wm)(Ot,{tabs:s,selectedTab:(0,i.SU)(a),edition:!1},null,8,["selectedTab"]),(0,r.Wm)(o,{user:(0,i.SU)(n)},null,8,["user"])])])}}});const wt=(0,P.Z)(gt,[["__scopeId","data-v-e26535e0"]]);var vt=wt,ft=n(4980),Nt=n(6287);const ht={id:"user-preferences",class:"description-list"},Ct={class:"profile-buttons"};var Dt=(0,r.aZ)({props:{user:null},setup(e){const t=e,n=(0,r.Fl)((()=>t.user.language?Nt.zK[t.user.language]:Nt.zK.en)),a=(0,r.Fl)((()=>t.user.weekm?"MONDAY":"SUNDAY")),o=(0,r.Fl)((()=>t.user.timezone?t.user.timezone:"Europe/Paris"));return(t,l)=>((0,r.wg)(),(0,r.iD)("div",ht,[(0,r._)("dl",null,[(0,r._)("dt",null,(0,s.zw)(t.$t("user.PROFILE.LANGUAGE"))+":",1),(0,r._)("dd",null,(0,s.zw)((0,i.SU)(n)),1),(0,r._)("dt",null,(0,s.zw)(t.$t("user.PROFILE.TIMEZONE"))+":",1),(0,r._)("dd",null,(0,s.zw)((0,i.SU)(o)),1),(0,r._)("dt",null,(0,s.zw)(t.$t("user.PROFILE.FIRST_DAY_OF_WEEK"))+":",1),(0,r._)("dd",null,(0,s.zw)(t.$t(`user.PROFILE.${(0,i.SU)(a)}`)),1),(0,r._)("dt",null,(0,s.zw)(t.$t("user.PROFILE.UNITS.LABEL"))+":",1),(0,r._)("dd",null,(0,s.zw)(t.$t("user.PROFILE.UNITS."+(e.user.imperial_units?"IMPERIAL":"METRIC"))),1)]),(0,r._)("div",Ct,[(0,r._)("button",{onClick:l[0]||(l[0]=e=>t.$router.push("/profile/edit/preferences"))},(0,s.zw)(t.$t("user.PROFILE.EDIT_PREFERENCES")),1),(0,r._)("button",{onClick:l[1]||(l[1]=e=>t.$router.push("/"))},(0,s.zw)(t.$t("common.HOME")),1)])]))}});const kt=Dt;var zt=kt;const Pt={id:"user-profile-edition",class:"center-card"};var Mt=(0,r.aZ)({props:{user:null,tab:null},setup(e){const t=e,n=(0,c.o)(),{user:a,tab:o}=(0,i.BK)(t),u=["PROFILE","ACCOUNT","PICTURE","PREFERENCES","SPORTS"],d=(0,r.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING]));return(e,t)=>{const n=(0,r.up)("router-view"),l=(0,r.up)("Card");return(0,r.wg)(),(0,r.iD)("div",Pt,[(0,r.Wm)(l,null,{title:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(e.$t(`user.PROFILE.${(0,i.SU)(o)}_EDITION`)),1)])),content:(0,r.w5)((()=>[(0,r.Wm)(Ot,{tabs:u,selectedTab:(0,i.SU)(o),edition:!0,disabled:(0,i.SU)(d)},null,8,["selectedTab","disabled"]),(0,r.Wm)(n,{user:(0,i.SU)(a)},null,8,["user"])])),_:1})])}}});const yt=Mt;var bt=yt,Lt=n(2047);const Gt={id:"user-infos-edition"},Ft={class:"profile-form form-box"},Wt={key:1,class:"info-box success-message"},Yt=["onSubmit"],xt={class:"form-items",for:"email"},$t=["disabled"],Zt={class:"form-items",for:"password-field"},Kt={class:"form-items",for:"new-password-field"},Bt={class:"form-buttons"},Ht={class:"confirm",type:"submit"};var qt=(0,r.aZ)({props:{user:null},setup(e){const t=e,{user:n}=(0,i.BK)(t),a=(0,c.o)(),u=(0,i.qj)({email:"",password:"",new_password:""}),d=(0,r.Fl)((()=>a.getters[l.YN.GETTERS.USER_LOADING])),m=(0,r.Fl)((()=>a.getters[l.SY.GETTERS.APP_CONFIG])),S=(0,r.Fl)((()=>a.getters[l.YN.GETTERS.IS_SUCCESS])),_=(0,i.iH)(!1),E=(0,r.Fl)((()=>a.getters[l.SY.GETTERS.ERROR_MESSAGES])),p=(0,i.iH)(!1),T=(0,i.iH)(!1);function A(){p.value=!0}function U(e){u.email=e.email}function O(e){u.password=e}function R(e){u.new_password=e}function I(){const e={email:u.email,password:u.password};u.new_password&&(e.new_password=u.new_password),_.value=u.email!==n.value.email,a.dispatch(l.YN.ACTIONS.UPDATE_USER_ACCOUNT,e)}function g(e){T.value=e}function w(e){a.dispatch(l.YN.ACTIONS.DELETE_ACCOUNT,{username:e})}return(0,r.bv)((()=>{t.user&&U(t.user)})),(0,r.Ah)((()=>{a.commit(l.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),a.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(0,r.YP)((()=>S.value),(async e=>{e&&(O(""),R(""),U(n.value),p.value=!1)})),(0,r.YP)((()=>n.value.email),(async()=>{U(n.value)})),(e,t)=>{const a=(0,r.up)("Modal"),l=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",Gt,[T.value?((0,r.wg)(),(0,r.j4)(a,{key:0,title:e.$t("common.CONFIRMATION"),message:e.$t("user.CONFIRM_ACCOUNT_DELETION"),onConfirmAction:t[0]||(t[0]=e=>w((0,i.SU)(n).username)),onCancelAction:t[1]||(t[1]=e=>g(!1))},null,8,["title","message"])):(0,r.kq)("",!0),(0,r._)("div",Ft,[(0,i.SU)(E)?((0,r.wg)(),(0,r.j4)(l,{key:0,message:(0,i.SU)(E)},null,8,["message"])):(0,r.kq)("",!0),(0,i.SU)(S)?((0,r.wg)(),(0,r.iD)("div",Wt,(0,s.zw)(e.$t(`user.PROFILE.SUCCESSFUL_${_.value&&(0,i.SU)(m).is_email_sending_enabled?"EMAIL_":""}UPDATE`)),1)):(0,r.kq)("",!0),(0,r._)("form",{class:(0,s.C_)({errors:p.value}),onSubmit:(0,o.iM)(I,["prevent"])},[(0,r._)("label",xt,[(0,r.Uk)((0,s.zw)(e.$t("user.EMAIL"))+"* ",1),(0,r.wy)((0,r._)("input",{id:"email","onUpdate:modelValue":t[2]||(t[2]=e=>(0,i.SU)(u).email=e),disabled:(0,i.SU)(d),required:!0,onInvalid:A},null,40,$t),[[o.nr,(0,i.SU)(u).email]])]),(0,r._)("label",Zt,[(0,r.Uk)((0,s.zw)(e.$t("user.CURRENT_PASSWORD"))+"* ",1),(0,r.Wm)(Lt.Z,{id:"password-field",disabled:(0,i.SU)(d),password:(0,i.SU)(u).password,required:!0,onUpdatePassword:O,onPasswordError:A},null,8,["disabled","password"])]),(0,r._)("label",Kt,[(0,r.Uk)((0,s.zw)(e.$t("user.NEW_PASSWORD"))+" ",1),(0,r.Wm)(Lt.Z,{id:"new-password-field",disabled:(0,i.SU)(d),checkStrength:!0,password:(0,i.SU)(u).new_password,isSuccess:!1,onUpdatePassword:R,onPasswordError:A},null,8,["disabled","password"])]),(0,r._)("div",Bt,[(0,r._)("button",Ht,(0,s.zw)(e.$t("buttons.SUBMIT")),1),(0,r._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,o.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,s.zw)(e.$t("buttons.CANCEL")),1),(0,r._)("button",{class:"danger",onClick:t[4]||(t[4]=(0,o.iM)((e=>g(!0)),["prevent"]))},(0,s.zw)(e.$t("buttons.DELETE_MY_ACCOUNT")),1)])],42,Yt)])])}}});const jt=(0,P.Z)(qt,[["__scopeId","data-v-37b8c4c8"]]);var Vt=jt;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"},an=["disabled"],rn={class:"form-items",for:"last_name"},sn={class:"form-items",for:"birth_date"},on=["disabled"],ln={class:"form-items",for:"location"},cn=["disabled"],un={class:"form-items"},dn={class:"form-buttons"},mn={class:"confirm",type:"submit"};var Sn=(0,r.aZ)({props:{user:null},setup(e){const t=e,n=(0,c.o)(),a=(0,i.qj)({first_name:"",last_name:"",birth_date:"",location:"",bio:""}),u=(0,r.Fl)((()=>t.user.created_at?(0,ze.Z)(new Date(t.user.created_at),"dd/MM/yyyy HH:mm"):"")),d=(0,r.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),m=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function S(e){a.first_name=e.first_name?e.first_name:"",a.last_name=e.last_name?e.last_name:"",a.birth_date=e.birth_date?(0,ze.Z)(new Date(e.birth_date),"yyyy-MM-dd"):"",a.location=e.location?e.location:"",a.bio=e.bio?e.bio:""}function _(e){a.bio=e}function E(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PROFILE,a)}return(0,r.bv)((()=>{t.user&&S(t.user)})),(0,r.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,r.up)("ErrorMessage"),l=(0,r.up)("CustomTextArea");return(0,r.wg)(),(0,r.iD)("div",Xt,[(0,r._)("div",Jt,[(0,i.SU)(m)?((0,r.wg)(),(0,r.j4)(n,{key:0,message:(0,i.SU)(m)},null,8,["message"])):(0,r.kq)("",!0),(0,r._)("form",{onSubmit:(0,o.iM)(E,["prevent"])},[(0,r._)("label",en,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+" ",1),(0,r._)("input",{id:"registrationDate",value:(0,i.SU)(u),disabled:""},null,8,tn)]),(0,r._)("label",nn,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.FIRST_NAME"))+" ",1),(0,r.wy)((0,r._)("input",{id:"first_name","onUpdate:modelValue":t[0]||(t[0]=e=>(0,i.SU)(a).first_name=e),disabled:(0,i.SU)(d)},null,8,an),[[o.nr,(0,i.SU)(a).first_name]])]),(0,r._)("label",rn,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.LAST_NAME"))+" ",1),(0,r.wy)((0,r._)("input",{id:"last_name","onUpdate:modelValue":t[1]||(t[1]=e=>(0,i.SU)(a).last_name=e)},null,512),[[o.nr,(0,i.SU)(a).last_name]])]),(0,r._)("label",sn,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+" ",1),(0,r.wy)((0,r._)("input",{id:"birth_date",type:"date",class:"birth-date","onUpdate:modelValue":t[2]||(t[2]=e=>(0,i.SU)(a).birth_date=e),disabled:(0,i.SU)(d)},null,8,on),[[o.nr,(0,i.SU)(a).birth_date]])]),(0,r._)("label",ln,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.LOCATION"))+" ",1),(0,r.wy)((0,r._)("input",{id:"location","onUpdate:modelValue":t[3]||(t[3]=e=>(0,i.SU)(a).location=e),disabled:(0,i.SU)(d)},null,8,cn),[[o.nr,(0,i.SU)(a).location]])]),(0,r._)("label",un,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.BIO"))+" ",1),(0,r.Wm)(l,{name:"bio",charLimit:200,input:(0,i.SU)(a).bio,disabled:(0,i.SU)(d),onUpdateValue:_},null,8,["input","disabled"])]),(0,r._)("div",dn,[(0,r._)("button",mn,(0,s.zw)(e.$t("buttons.SUBMIT")),1),(0,r._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,o.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,s.zw)(e.$t("buttons.CANCEL")),1)])],40,Qt)])])}}});const _n=(0,P.Z)(Sn,[["__scopeId","data-v-b6bacea0"]]);var En=_n;const pn=e=>((0,r.dD)("data-v-3a97bb3c"),e=e(),(0,r.Cn)(),e),Tn={id:"user-picture-edition"},An={class:"user-picture-form"},Un=["onSubmit"],On={class:"picture-help"},Rn={class:"info-box"},In=pn((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),gn={class:"picture-buttons"},wn=["disabled"];var vn=(0,r.aZ)({props:{user:null},setup(e){const t=e,n=(0,c.o)(),{user:a}=(0,i.BK)(t),d=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),m=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG])),S=m.value.max_single_file_size?(0,u.Z)(m.value.max_single_file_size):"";let _=(0,i.iH)(null);function E(){n.dispatch(l.YN.ACTIONS.DELETE_PICTURE)}function p(e){e.target.files&&(_.value=e.target.files[0])}function T(){_.value&&n.dispatch(l.YN.ACTIONS.UPDATE_USER_PICTURE,{picture:_.value})}return(0,r.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",Tn,[(0,r._)("div",An,[(0,i.SU)(d)?((0,r.wg)(),(0,r.j4)(n,{key:0,message:(0,i.SU)(d)},null,8,["message"])):(0,r.kq)("",!0),(0,r.Wm)(ye.Z,{user:(0,i.SU)(a)},null,8,["user"]),(0,r._)("form",{onSubmit:(0,o.iM)(T,["prevent"])},[(0,r._)("input",{type:"file",name:"picture",accept:".png,.jpg,.gif",onInput:p},null,32),(0,r._)("div",On,[(0,r._)("span",Rn,[In,(0,r.Uk)(" "+(0,s.zw)(e.$t("workouts.MAX_SIZE"))+": "+(0,s.zw)((0,i.SU)(S)),1)])]),(0,r._)("div",gn,[(0,r._)("button",{type:"submit",disabled:!(0,i.SU)(_)},(0,s.zw)(e.$t("user.PROFILE.PICTURE_UPDATE")),9,wn),(0,i.SU)(a).picture?((0,r.wg)(),(0,r.iD)("button",{key:0,class:"danger",onClick:E},(0,s.zw)(e.$t("user.PROFILE.PICTURE_REMOVE")),1)):(0,r.kq)("",!0),(0,r._)("button",{class:"cancel",onClick:t[0]||(t[0]=t=>e.$router.push("/profile"))},(0,s.zw)(e.$t("user.PROFILE.BACK_TO_PROFILE")),1)])],40,Un)])])}}});const fn=(0,P.Z)(vn,[["__scopeId","data-v-3a97bb3c"]]);var Nn=fn;const hn=["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"],Cn={id:"tz-dropdown"},Dn=["value","disabled","onKeydown"],kn=["onClick","onMouseover","autofocus"];var zn=(0,r.aZ)({props:{input:null,disabled:{type:Boolean,default:!1}},emits:["updateTimezone"],setup(e,{emit:t}){const n=e,{input:a,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 S(e){return e.toLowerCase().match(c.value.toLowerCase())}function _(e){m.value=e}function E(e){c.value=e,u.value=!1,t("updateTimezone",e)}function p(e){e.preventDefault(),d.value?.firstElementChild?.innerHTML&&E(d.value?.firstElementChild?.innerHTML)}function T(e){e.preventDefault(),u.value=!0,c.value=e.target.value.trim()}return(0,r.YP)((()=>n.input),(e=>{c.value=e})),(e,t)=>((0,r.wg)(),(0,r.iD)("div",Cn,[(0,r._)("input",{class:"tz-dropdown-input",id:"timezone",name:"timezone",value:c.value,disabled:(0,i.SU)(l),required:"",onKeydown:[t[0]||(t[0]=(0,o.D2)((e=>E((0,i.SU)(a))),["esc"])),(0,o.D2)(p,["enter"])],onInput:T},null,40,Dn),u.value?((0,r.wg)(),(0,r.iD)("ul",{key:0,class:"tz-dropdown-list",ref_key:"tzList",ref:d},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(hn).filter((e=>S(e))),((e,t)=>((0,r.wg)(),(0,r.iD)("li",{key:e,class:(0,s.C_)(["tz-dropdown-item",{focus:t===m.value}]),onClick:t=>E(e),onMouseover:e=>_(t),autofocus:t===m.value},(0,s.zw)(e),43,kn)))),128))],512)):(0,r.kq)("",!0)]))}});const Pn=(0,P.Z)(zn,[["__scopeId","data-v-47ea2903"]]);var Mn=Pn;const yn={id:"user-preferences-edition"},bn={class:"profile-form form-box"},Ln=["onSubmit"],Gn={class:"form-items"},Fn=["disabled"],Wn=["value"],Yn={class:"form-items"},xn={class:"form-items"},$n=["disabled"],Zn=["value"],Kn={class:"form-items"},Bn=["disabled"],Hn=["value"],qn={class:"form-buttons"},jn={class:"confirm",type:"submit"};var Vn=(0,r.aZ)({props:{user:null},setup(e){const t=e,n=(0,c.o)(),a=(0,i.qj)({imperial_units:!1,language:"",timezone:"Europe/Paris",weekm:!1}),u=[{label:"MONDAY",value:!0},{label:"SUNDAY",value:!1}],d=[{label:"IMPERIAL",value:!0},{label:"METRIC",value:!1}],m=(0,r.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),S=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function _(e){a.imperial_units=!!e.imperial_units&&e.imperial_units,a.language=e.language?e.language:"en",a.timezone=e.timezone?e.timezone:"Europe/Paris",a.weekm=!!e.weekm&&e.weekm}function E(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PREFERENCES,a)}function p(e){a.timezone=e}return(0,r.bv)((()=>{t.user&&_(t.user)})),(0,r.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",yn,[(0,r._)("div",bn,[(0,i.SU)(S)?((0,r.wg)(),(0,r.j4)(n,{key:0,message:(0,i.SU)(S)},null,8,["message"])):(0,r.kq)("",!0),(0,r._)("form",{onSubmit:(0,o.iM)(E,["prevent"])},[(0,r._)("label",Gn,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.LANGUAGE"))+" ",1),(0,r.wy)((0,r._)("select",{id:"language","onUpdate:modelValue":t[0]||(t[0]=e=>(0,i.SU)(a).language=e),disabled:(0,i.SU)(m)},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(Nt.mT),(e=>((0,r.wg)(),(0,r.iD)("option",{value:e.value,key:e.value},(0,s.zw)(e.label),9,Wn)))),128))],8,Fn),[[o.bM,(0,i.SU)(a).language]])]),(0,r._)("label",Yn,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.TIMEZONE"))+" ",1),(0,r.Wm)(Mn,{input:(0,i.SU)(a).timezone,disabled:(0,i.SU)(m),onUpdateTimezone:p},null,8,["input","disabled"])]),(0,r._)("label",xn,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.FIRST_DAY_OF_WEEK"))+" ",1),(0,r.wy)((0,r._)("select",{id:"weekm","onUpdate:modelValue":t[1]||(t[1]=e=>(0,i.SU)(a).weekm=e),disabled:(0,i.SU)(m)},[((0,r.wg)(),(0,r.iD)(r.HY,null,(0,r.Ko)(u,(t=>(0,r._)("option",{value:t.value,key:t.value},(0,s.zw)(e.$t(`user.PROFILE.${t.label}`)),9,Zn))),64))],8,$n),[[o.bM,(0,i.SU)(a).weekm]])]),(0,r._)("label",Kn,[(0,r.Uk)((0,s.zw)(e.$t("user.PROFILE.UNITS.LABEL"))+" ",1),(0,r.wy)((0,r._)("select",{id:"imperial_units","onUpdate:modelValue":t[2]||(t[2]=e=>(0,i.SU)(a).imperial_units=e),disabled:(0,i.SU)(m)},[((0,r.wg)(),(0,r.iD)(r.HY,null,(0,r.Ko)(d,(t=>(0,r._)("option",{value:t.value,key:t.value},(0,s.zw)(e.$t(`user.PROFILE.UNITS.${t.label}`)),9,Hn))),64))],8,Bn),[[o.bM,(0,i.SU)(a).imperial_units]])]),(0,r._)("div",qn,[(0,r._)("button",jn,(0,s.zw)(e.$t("buttons.SUBMIT")),1),(0,r._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,o.iM)((t=>e.$router.push("/profile/preferences")),["prevent"]))},(0,s.zw)(e.$t("buttons.CANCEL")),1)])],40,Ln)])])}}});const Xn=Vn;var Jn=Xn;const Qn={id:"user-sport-preferences"},ea={key:0,class:"responsive-table"},ta={class:"mobile-display"},na={key:0,class:"profile-buttons mobile-display"},aa={key:1,class:"profile-buttons"},ra={class:"text-left"},sa={key:0},oa={class:"cell-heading"},ia=["value"],la={class:"cell-heading"},ca={key:0,class:"disabled-message"},ua={key:1,class:"fa fa-refresh fa-spin fa-fw"},da={class:"cell-heading"},ma={class:"cell-heading"},Sa=["checked"],_a={class:"cell-heading"},Ea=["value"],pa={key:1},Ta={key:0,class:"action-buttons"},Aa={class:"cell-heading"},Ua=["onClick"],Oa={key:1,class:"edition-buttons"},Ra=["disabled"],Ia=["disabled","onClick"],ga=["disabled"],wa={key:0,class:"profile-buttons"},va={key:1,class:"profile-buttons"};var fa=(0,r.aZ)({props:{user:null,isEdition:{type:Boolean}},setup(e){const t=e,n=(0,c.o)(),{t:a}=(0,ie.QT)(),{isEdition:u,user:d}=(0,i.BK)(t),m=(0,r.f3)("sportColors"),S=(0,r.Fl)((()=>n.getters[l.O8.GETTERS.SPORTS])),_=(0,r.Fl)((()=>(0,le.xH)(S.value,a,"is_active",d.value.sports_list))),E=(0,r.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),p=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),T=(0,i.qj)({sport_id:0,color:null,is_active:!0,stopped_speed_threshold:1});function A(e){null!==e?(T.sport_id=e.id,T.color=e.color?e.color:m[e.label],T.is_active=e.is_active_for_user,T.stopped_speed_threshold=e.stopped_speed_threshold):g()}function U(e){return T.sport_id===e}function O(e){T.color=e.target.value}function R(e){T.stopped_speed_threshold=parseFloat(e.target.value)}function I(e){T.is_active=e.target.checked}function g(){T.sport_id=0,T.color=null,T.is_active=!0,T.stopped_speed_threshold=1,n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)}function w(e){e.preventDefault(),n.dispatch(l.YN.ACTIONS.UPDATE_USER_SPORT_PREFERENCES,T)}function v(e,t){e.preventDefault(),n.dispatch(l.YN.ACTIONS.RESET_USER_SPORT_PREFERENCES,t)}return(0,r.YP)((()=>E.value),(e=>{e||p.value||g()})),(e,t)=>{const n=(0,r.up)("SportImage"),a=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",Qn,[(0,i.SU)(S).length>0?((0,r.wg)(),(0,r.iD)("div",ea,[(0,r._)("div",ta,[(0,i.SU)(u)?((0,r.wg)(),(0,r.iD)("div",na,[(0,r._)("button",{class:"cancel",onClick:t[0]||(t[0]=(0,o.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,s.zw)(e.$t("buttons.BACK")),1)])):((0,r.wg)(),(0,r.iD)("div",aa,[(0,r._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/profile/edit/sports"))},(0,s.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,r._)("button",{onClick:t[2]||(t[2]=t=>e.$router.push("/"))},(0,s.zw)(e.$t("common.HOME")),1)]))]),(0,r._)("table",null,[(0,r._)("thead",null,[(0,r._)("tr",null,[(0,r._)("th",null,(0,s.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),(0,r._)("th",ra,(0,s.zw)(e.$t("workouts.SPORT",0)),1),(0,r._)("th",null,(0,s.zw)(e.$t("workouts.WORKOUT",0)),1),(0,r._)("th",null,(0,s.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),(0,r._)("th",null,(0,s.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),(0,i.SU)(u)?((0,r.wg)(),(0,r.iD)("th",sa,(0,s.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1)):(0,r.kq)("",!0)])]),(0,r._)("tbody",null,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(_),(o=>((0,r.wg)(),(0,r.iD)("tr",{key:o.id},[(0,r._)("td",null,[(0,r._)("span",oa,(0,s.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),U(o.id)?((0,r.wg)(),(0,r.iD)("input",{key:0,class:"sport-color",type:"color",value:(0,i.SU)(T).color,onInput:O},null,40,ia)):((0,r.wg)(),(0,r.j4)(n,{key:1,title:o.translatedLabel,"sport-label":o.label,color:o.color?o.color:(0,i.SU)(m)[o.label]},null,8,["title","sport-label","color"]))]),(0,r._)("td",{class:(0,s.C_)(["sport-label",{"disabled-sport":!o.is_active}])},[(0,r._)("span",la,(0,s.zw)(e.$t("user.PROFILE.SPORT.LABEL")),1),(0,r.Uk)(" "+(0,s.zw)(o.translatedLabel)+" ",1),o.is_active?(0,r.kq)("",!0):((0,r.wg)(),(0,r.iD)("span",ca," ("+(0,s.zw)(e.$t("user.PROFILE.SPORT.DISABLED_BY_ADMIN"))+") ",1)),(0,i.SU)(E)&&U(o.id)?((0,r.wg)(),(0,r.iD)("i",ua)):(0,r.kq)("",!0),(0,i.SU)(p)&&(0,i.SU)(T).sport_id===o.id?((0,r.wg)(),(0,r.j4)(a,{key:2,message:(0,i.SU)(p)},null,8,["message"])):(0,r.kq)("",!0)],2),(0,r._)("td",{class:(0,s.C_)(["text-center",{"disabled-sport":!o.is_active}])},[(0,r._)("span",da,(0,s.zw)(e.$t("workouts.WORKOUT",0)),1),(0,r._)("i",{class:(0,s.C_)("fa fa"+((0,i.SU)(d).sports_list.includes(o.id)?"-check":"")),"aria-hidden":"true"},null,2)],2),(0,r._)("td",{class:(0,s.C_)(["text-center",{"disabled-sport":!o.is_active}])},[(0,r._)("span",ma,(0,s.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),U(o.id)&&o.is_active?((0,r.wg)(),(0,r.iD)("input",{key:0,type:"checkbox",checked:o.is_active_for_user,onChange:I},null,40,Sa)):((0,r.wg)(),(0,r.iD)("i",{key:1,class:(0,s.C_)("fa fa"+(o.is_active_for_user?"-check":"")),"aria-hidden":"true"},null,2))],2),(0,r._)("td",{class:(0,s.C_)(["text-center",{"disabled-sport":!o.is_active}])},[(0,r._)("span",_a,(0,s.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),U(o.id)&&o.is_active?((0,r.wg)(),(0,r.iD)("input",{key:0,class:"threshold-input",type:"number",min:"0",step:"0.1",value:(0,i.SU)(T).stopped_speed_threshold,onInput:R},null,40,Ea)):((0,r.wg)(),(0,r.iD)("span",pa,(0,s.zw)(o.stopped_speed_threshold),1))],2),(0,i.SU)(u)?((0,r.wg)(),(0,r.iD)("td",Ta,[(0,r._)("span",Aa,(0,s.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1),0===(0,i.SU)(T).sport_id?((0,r.wg)(),(0,r.iD)("button",{key:0,onClick:e=>A(o)},(0,s.zw)(e.$t("buttons.EDIT")),9,Ua)):(0,r.kq)("",!0),U(o.id)?((0,r.wg)(),(0,r.iD)("div",Oa,[(0,r._)("button",{disabled:(0,i.SU)(E),onClick:w},(0,s.zw)(e.$t("buttons.SUBMIT")),9,Ra),(0,r._)("button",{disabled:(0,i.SU)(E),onClick:e=>v(e,o.id)},(0,s.zw)(e.$t("buttons.RESET")),9,Ia),(0,r._)("button",{disabled:(0,i.SU)(E),onClick:t[3]||(t[3]=e=>A(null))},(0,s.zw)(e.$t("buttons.CANCEL")),9,ga)])):(0,r.kq)("",!0)])):(0,r.kq)("",!0)])))),128))])]),(0,i.SU)(u)?((0,r.wg)(),(0,r.iD)("div",wa,[(0,r._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,o.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,s.zw)(e.$t("buttons.BACK")),1)])):((0,r.wg)(),(0,r.iD)("div",va,[(0,r._)("button",{onClick:t[5]||(t[5]=t=>e.$router.push("/profile/edit/sports"))},(0,s.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,r._)("button",{onClick:t[6]||(t[6]=t=>e.$router.push("/"))},(0,s.zw)(e.$t("common.HOME")),1)]))])):(0,r.kq)("",!0)])}}});const Na=(0,P.Z)(fa,[["__scopeId","data-v-4775544a"]]);var ha=Na,Ca=n(12);const Da=e=>((0,r.dD)("data-v-74257266"),e=e(),(0,r.Cn)(),e),ka={class:"about-text"},za=["innerHTML"],Pa=Da((()=>(0,r._)("i",{class:"fa fa-book fa-padding","aria-hidden":"true"},null,-1))),Ma={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"},ya=Da((()=>(0,r._)("i",{class:"fa fa-github fa-padding","aria-hidden":"true"},null,-1))),ba={href:"https://github.com/SamR1/FitTrackee",target:"_blank",rel:"noopener noreferrer"},La=Da((()=>(0,r._)("i",{class:"fa fa-balance-scale fa-padding","aria-hidden":"true"},null,-1))),Ga=Da((()=>(0,r._)("a",{href:"https://choosealicense.com/licenses/agpl-3.0/",target:"_blank",rel:"noopener noreferrer"}," AGPLv3 ",-1))),Fa={key:0},Wa=Da((()=>(0,r._)("i",{class:"fa fa-envelope-o fa-padding","aria-hidden":"true"},null,-1))),Ya=["href"];var xa=(0,r.aZ)({setup(e){const t=(0,c.o)(),n=(0,r.Fl)((()=>t.getters[l.SY.GETTERS.APP_CONFIG]));return(e,t)=>{const a=(0,r.up)("i18n-t");return(0,r.wg)(),(0,r.iD)("div",ka,[(0,r._)("div",null,[(0,r._)("p",{class:"error-message",innerHTML:e.$t("about.FITTRACKEE_DESCRIPTION")},null,8,za),(0,r._)("p",null,[Pa,(0,r._)("a",Ma,(0,s.zw)((0,s.kC)(e.$t("common.DOCUMENTATION"))),1)]),(0,r._)("p",null,[ya,(0,r._)("a",ba,(0,s.zw)(e.$t("about.SOURCE_CODE")),1)]),(0,r._)("p",null,[La,(0,r.Wm)(a,{keypath:"about.FITTRACKEE_LICENSE"},{default:(0,r.w5)((()=>[Ga])),_:1})]),(0,i.SU)(n).admin_contact?((0,r.wg)(),(0,r.iD)("div",Fa,[Wa,(0,r._)("a",{href:`mailto:${(0,i.SU)(n).admin_contact}`},(0,s.zw)(e.$t("about.CONTACT_ADMIN")),9,Ya)])):(0,r.kq)("",!0)])])}}});const $a=(0,P.Z)(xa,[["__scopeId","data-v-74257266"]]);var Za=$a;const Ka={id:"bike"},Ba=["src"];function Ha(e,t){return(0,r.wg)(),(0,r.iD)("div",Ka,[(0,r._)("img",{class:"bike-img",src:"/img/bike.svg",alt:"mountain bike"},null,8,Ba)])}const qa={},ja=(0,P.Z)(qa,[["render",Ha],["__scopeId","data-v-795f7f5f"]]);var Va=ja;const Xa={id:"about",class:"view"},Ja={class:"container"},Qa={class:"container-sub"},er={class:"container-sub about-details"};var tr=(0,r.aZ)({setup(e){return(e,t)=>((0,r.wg)(),(0,r.iD)("div",Xa,[(0,r._)("div",Ja,[(0,r._)("div",Qa,[(0,r.Wm)(Va)]),(0,r._)("div",er,[(0,r.Wm)(Za)])])]))}});const nr=(0,P.Z)(tr,[["__scopeId","data-v-bffb50d0"]]);var ar=nr,rr=n(1818),sr=n(2056);const or=e=>((0,r.dD)("data-v-c9d1f10c"),e=e(),(0,r.Cn)(),e),ir={class:"timeline-workout"},lr={class:"box"},cr={class:"workout-user-date"},ur={class:"workout-user"},dr=["title"],mr={key:0},Sr={key:1,class:"no-map"},_r={class:"img"},Er={class:"data"},pr=or((()=>(0,r._)("i",{class:"fa fa-clock-o","aria-hidden":"true"},null,-1))),Tr={key:0},Ar={class:"data"},Ur=or((()=>(0,r._)("i",{class:"fa fa-road","aria-hidden":"true"},null,-1))),Or={key:0,class:"data elevation"},Rr=["alt"],Ir={class:"data-values"},gr=(0,r.Uk)("/ "),wr={key:1,class:"data altitude"},vr=or((()=>(0,r._)("i",{class:"fa fa-location-arrow","aria-hidden":"true"},null,-1))),fr={class:"data-values"},Nr=(0,r.Uk)(" +"),hr=(0,r.Uk)("/- ");var Cr=(0,r.aZ)({props:{user:null,useImperialUnits:{type:Boolean},workout:{default:()=>({})},sport:{default:()=>({})}},setup(e){const t=e,n=(0,c.o)(),{user:a,workout:o,sport:u,useImperialUnits:d}=(0,i.BK)(t),m=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));return(e,t)=>{const n=(0,r.up)("router-link"),l=(0,r.up)("SportImage"),c=(0,r.up)("Distance");return(0,r.wg)(),(0,r.iD)("div",ir,[(0,r._)("div",lr,[(0,r._)("div",cr,[(0,r._)("div",ur,[(0,r.Wm)(ye.Z,{user:(0,i.SU)(a)},null,8,["user"]),(0,i.SU)(a).username?((0,r.wg)(),(0,r.j4)(n,{key:0,class:"workout-user-name",to:{name:"User",params:{username:(0,i.SU)(a).username}}},{default:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)((0,i.SU)(a).username),1)])),_:1},8,["to"])):(0,r.kq)("",!0)]),(0,i.SU)(o).id?((0,r.wg)(),(0,r.j4)(n,{key:0,class:"workout-title",to:{name:"Workout",params:{workoutId:(0,i.SU)(o).id}}},{default:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)((0,i.SU)(o).title),1)])),_:1},8,["to"])):(0,r.kq)("",!0),(0,i.SU)(o).workout_date&&(0,i.SU)(a)?((0,r.wg)(),(0,r.iD)("div",{key:1,class:"workout-date",title:(0,i.SU)(ze.Z)((0,i.SU)($e.eB)((0,i.SU)(o).workout_date,(0,i.SU)(a).timezone),"dd/MM/yyyy HH:mm")},(0,s.zw)((0,i.SU)(rr.Z)(new Date((0,i.SU)(o).workout_date),new Date,{addSuffix:!0,locale:(0,i.SU)(m)})),9,dr)):(0,r.kq)("",!0)]),(0,r._)("div",{class:(0,s.C_)(["workout-map",{"no-cursor":!(0,i.SU)(o)}]),onClick:t[0]||(t[0]=t=>(0,i.SU)(o).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(o).id}}):null)},[(0,i.SU)(o)?((0,r.wg)(),(0,r.iD)("div",mr,[(0,i.SU)(o).with_gpx?((0,r.wg)(),(0,r.j4)(sr.Z,{key:0,workout:(0,i.SU)(o)},null,8,["workout"])):((0,r.wg)(),(0,r.iD)("div",Sr,(0,s.zw)(e.$t("workouts.NO_MAP")),1))])):(0,r.kq)("",!0)],2),(0,r._)("div",{class:(0,s.C_)(["workout-data",{"without-gpx":(0,i.SU)(o)&&!(0,i.SU)(o).with_gpx}]),onClick:t[1]||(t[1]=t=>(0,i.SU)(o).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(o).id}}):null)},[(0,r._)("div",_r,[(0,i.SU)(u).label?((0,r.wg)(),(0,r.j4)(l,{key:0,"sport-label":(0,i.SU)(u).label,color:(0,i.SU)(u).color},null,8,["sport-label","color"])):(0,r.kq)("",!0)]),(0,r._)("div",Er,[pr,(0,i.SU)(o)?((0,r.wg)(),(0,r.iD)("span",Tr,(0,s.zw)((0,i.SU)(o).moving),1)):(0,r.kq)("",!0)]),(0,r._)("div",Ar,[Ur,(0,i.SU)(o).id?((0,r.wg)(),(0,r.j4)(c,{key:0,distance:(0,i.SU)(o).distance,digits:3,unitFrom:"km",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,r.kq)("",!0)]),(0,i.SU)(o)&&(0,i.SU)(o).with_gpx?((0,r.wg)(),(0,r.iD)("div",Or,[(0,r._)("img",{class:"mountains",src:"/img/workouts/mountains.svg",alt:e.$t("workouts.ELEVATION")},null,8,Rr),(0,r._)("div",Ir,[(0,i.SU)(o).id?((0,r.wg)(),(0,r.j4)(c,{key:0,distance:(0,i.SU)(o).min_alt,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,r.kq)("",!0),gr,(0,i.SU)(o).id?((0,r.wg)(),(0,r.j4)(c,{key:1,distance:(0,i.SU)(o).max_alt,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,r.kq)("",!0)])])):(0,r.kq)("",!0),(0,i.SU)(o)&&(0,i.SU)(o).with_gpx?((0,r.wg)(),(0,r.iD)("div",wr,[vr,(0,r._)("div",fr,[Nr,(0,i.SU)(o).id?((0,r.wg)(),(0,r.j4)(c,{key:0,distance:(0,i.SU)(o).ascent,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,r.kq)("",!0),hr,(0,i.SU)(o).id?((0,r.wg)(),(0,r.j4)(c,{key:1,distance:(0,i.SU)(o).descent,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,r.kq)("",!0)])])):(0,r.kq)("",!0)],2)])])}}});const Dr=(0,P.Z)(Cr,[["__scopeId","data-v-c9d1f10c"]]);var kr=Dr,zr=n(5630),Pr=n(3768);const Mr={id:"timeline"},yr={class:"section-title"},br={key:0},Lr={key:1},Gr={key:1,class:"more-workouts"};var Fr=(0,r.aZ)({props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:a,user:o}=(0,i.BK)(t);let u=(0,i.iH)(1);const d=5,m=t.user.nb_workouts>=d?d:t.user.nb_workouts;(0,r.wF)((()=>E()));const S=(0,r.Fl)((()=>n.getters[l.aX.GETTERS.TIMELINE_WORKOUTS])),_=(0,r.Fl)((()=>S.value.length>0&&null!==S.value[S.value.length-1].previous_workout));function E(){n.dispatch(l.aX.ACTIONS.GET_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Pr.eR})}function p(){u.value+=1,n.dispatch(l.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Pr.eR})}return(e,t)=>((0,r.wg)(),(0,r.iD)("div",Mr,[(0,r._)("div",yr,(0,s.zw)(e.$t("workouts.LATEST_WORKOUTS")),1),(0,i.SU)(o).nb_workouts>0&&0===(0,i.SU)(S).length?((0,r.wg)(),(0,r.iD)("div",br,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)([...Array((0,i.SU)(m)).keys()],(e=>((0,r.wg)(),(0,r.j4)(kr,{user:(0,i.SU)(o),useImperialUnits:(0,i.SU)(o).imperial_units,key:e},null,8,["user","useImperialUnits"])))),128))])):((0,r.wg)(),(0,r.iD)("div",Lr,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(S),(e=>((0,r.wg)(),(0,r.j4)(kr,{workout:e,sport:(0,i.SU)(S).length>0?(0,i.SU)(a).filter((t=>t.id===e.sport_id))[0]:null,user:(0,i.SU)(o),useImperialUnits:(0,i.SU)(o).imperial_units,key:e.id},null,8,["workout","sport","user","useImperialUnits"])))),128)),0===(0,i.SU)(S).length?((0,r.wg)(),(0,r.j4)(zr.Z,{key:0})):(0,r.kq)("",!0),(0,i.SU)(_)?((0,r.wg)(),(0,r.iD)("div",Gr,[(0,r._)("button",{onClick:p},(0,s.zw)(e.$t("workouts.LOAD_MORE_WORKOUT")),1)])):(0,r.kq)("",!0)]))]))}});const Wr=(0,P.Z)(Fr,[["__scopeId","data-v-9ef2a9ac"]]);var Yr=Wr,xr=n(1640),$r=n(4559),Zr=n(7349),Kr=n(1743),Br=n(9160),Hr=n(1085);const qr=["title"];var jr=(0,r.aZ)({props:{workout:null,sportLabel:null,sportColor:null},setup(e){const t=e,{workout:n,sportLabel:a,sportColor:s}=(0,i.BK)(t);return(e,t)=>{const o=(0,r.up)("SportImage");return(0,r.wg)(),(0,r.iD)("div",{class:"calendar-workout",onClick:t[0]||(t[0]=t=>e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(n).id}}))},[(0,r.Wm)(o,{"sport-label":(0,i.SU)(a),title:(0,i.SU)(n).title,color:(0,i.SU)(s)},null,8,["sport-label","title","color"]),(0,r._)("sup",null,[(0,i.SU)(n).records.length>0?((0,r.wg)(),(0,r.iD)("i",{key:0,class:"fa fa-trophy custom-fa-small","aria-hidden":"true",title:(0,i.SU)(n).records.map((t=>` ${e.$t(`workouts.RECORD_${t.record_type}`)}`))},null,8,qr)):(0,r.kq)("",!0)])])}}});const Vr=jr;var Xr=Vr;const Jr={class:"donut-chart"},Qr={height:"34",width:"34",viewBox:"0 0 34 34"},es=["stroke","stroke-dashoffset","transform"];var ts=(0,r.aZ)({props:{colors:null,datasets:null},setup(e){const t=e,{colors:n,datasets:a}=(0,i.BK)(t);let s=-90;const o=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(${s}, ${o}, ${l})`;return s=360*t+s,n}return(e,t)=>((0,r.wg)(),(0,r.iD)("div",Jr,[((0,r.wg)(),(0,r.iD)("svg",Qr,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)(Object.entries((0,i.SU)(a)),((e,t)=>((0,r.wg)(),(0,r.iD)("g",{key:t},[(0,r._)("circle",{cx:o,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,es)])))),128))]))]))}});const ns=ts;var as=ns;const rs={class:"calendar-workouts-chart"},ss={class:"workouts-count"},os={key:0,class:"workouts-pane"},is={class:"more-workouts"};var ls=(0,r.aZ)({props:{colors:null,datasets:null,sports:null,workouts:null},setup(e){const t=e,{colors:n,datasets:a,sports:o,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,r.Q2)("click-outside");return(0,r.wg)(),(0,r.iD)("div",rs,[(0,r._)("div",{class:"workouts-chart",onClick:u},[(0,r._)("div",ss,(0,s.zw)((0,i.SU)(l).length),1),(0,r.Wm)(as,{datasets:(0,i.SU)(a),colors:(0,i.SU)(n)},null,8,["datasets","colors"])]),c.value?(0,r.kq)("",!0):((0,r.wg)(),(0,r.iD)("div",os,[(0,r.wy)(((0,r.wg)(),(0,r.iD)("div",is,[(0,r._)("i",{class:"fa fa-times calendar-more","aria-hidden":"true",onClick:u}),((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(l),((e,t)=>((0,r.wg)(),(0,r.j4)(Xr,{key:t,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,["workout","sportLabel","sportColor"])))),128))])),[[d,u]])]))])}}});const cs=(0,P.Z)(ls,[["__scopeId","data-v-52d4310a"]]);var us=cs;const ds={class:"calendar-workouts"},ms={class:"desktop-display"},Ss={key:0,class:"workouts-display"},_s={key:1,class:"donut-display"},Es={class:"mobile-display"},ps={key:0,class:"donut-display"};var Ts=(0,r.aZ)({props:{workouts:null,sports:null},setup(e){const t=e,{workouts:n,sports:a}=(0,i.BK)(t),s=(0,r.Fl)((()=>(0,Pr.BN)(t.workouts))),o=(0,r.Fl)((()=>(0,le.Yx)(t.sports))),l=6;return(e,t)=>((0,r.wg)(),(0,r.iD)("div",ds,[(0,r._)("div",ms,[(0,i.SU)(n).length<=l?((0,r.wg)(),(0,r.iD)("div",Ss,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(n).slice(0,l),((e,t)=>((0,r.wg)(),(0,r.j4)(Xr,{key:t,workout:e,sportLabel:(0,i.SU)(le.PA)(e,(0,i.SU)(a)),sportColor:(0,i.SU)(le.CM)(e,(0,i.SU)(a))},null,8,["workout","sportLabel","sportColor"])))),128))])):((0,r.wg)(),(0,r.iD)("div",_s,[(0,r.Wm)(us,{workouts:(0,i.SU)(n),sports:(0,i.SU)(a),datasets:(0,i.SU)(s),colors:(0,i.SU)(o)},null,8,["workouts","sports","datasets","colors"])]))]),(0,r._)("div",Es,[(0,i.SU)(n).length>0?((0,r.wg)(),(0,r.iD)("div",ps,[(0,r.Wm)(us,{workouts:(0,i.SU)(n),sports:(0,i.SU)(a),datasets:(0,i.SU)(s),colors:(0,i.SU)(o)},null,8,["workouts","sports","datasets","colors"])])):(0,r.kq)("",!0)])]))}});const As=Ts;var Us=As;const Os={class:"calendar-cells"},Rs={class:"calendar-cell-day"};var Is=(0,r.aZ)({props:{currentDay:null,endDate:null,sports:null,startDate:null,timezone:null,weekStartingMonday:{type:Boolean},workouts:null},setup(e){const t=e,{currentDay:n,endDate:a,sports:o,startDate:l,timezone:c,weekStartingMonday:u,workouts:d}=(0,i.BK)(t),m=(0,i.iH)([]);function S(){m.value=[];let e=l.value;while(e<=a.value){const t=[];for(let n=0;n<7;n++)t.push(e),e=(0,Zr.Z)(e,1);m.value.push(t)}}function _(e){return u.value?[5,6].includes(e):[0,6].includes(e)}function E(e,t){return t?t.filter((t=>(0,Kr.Z)((0,$e.eB)(t.workout_date,c.value),e))).reverse():[]}return(0,r.bv)((()=>S())),(0,r.YP)((()=>t.currentDay),(()=>S())),(e,t)=>((0,r.wg)(),(0,r.iD)("div",Os,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)(m.value,((e,t)=>((0,r.wg)(),(0,r.iD)("div",{class:"calendar-row",key:t},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)(e,((e,t)=>((0,r.wg)(),(0,r.iD)("div",{class:(0,s.C_)(["calendar-cell",{"disabled-cell":!(0,i.SU)(Br.Z)(e,(0,i.SU)(n)),"week-end":_(t),today:(0,i.SU)(Hr.Z)(e)}]),key:t},[(0,r.Wm)(Us,{workouts:E(e,(0,i.SU)(d)),sports:(0,i.SU)(o)},null,8,["workouts","sports"]),(0,r._)("div",Rs,(0,s.zw)((0,i.SU)(ze.Z)(e,"d")),1)],2)))),128))])))),128))]))}});const gs=Is;var ws=gs;const vs={class:"calendar-days"};var fs=(0,r.aZ)({props:{startDate:null,localeOptions:null},setup(e){const t=e,n=[];for(let a=0;a<7;a++)n.push((0,Zr.Z)(t.startDate,a));return(t,a)=>((0,r.wg)(),(0,r.iD)("div",vs,[((0,r.wg)(),(0,r.iD)(r.HY,null,(0,r.Ko)(n,((t,n)=>(0,r._)("div",{class:"calendar-day",key:n},(0,s.zw)((0,i.SU)(ze.Z)(t,"EEE",{locale:e.localeOptions})),1))),64))]))}});const Ns=fs;var hs=Ns;const Cs={class:"calendar-header"},Ds=(0,r._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1),ks=[Ds],zs={class:"calendar-month"},Ps=(0,r._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1),Ms=[Ps];var ys=(0,r.aZ)({props:{day:null,localeOptions:null},emits:["displayNextMonth","displayPreviousMonth"],setup(e,{emit:t}){const n=e,{day:a,localeOptions:o}=(0,i.BK)(n);return(e,n)=>((0,r.wg)(),(0,r.iD)("div",Cs,[(0,r._)("div",{class:"calendar-arrow calendar-arrow-left",onClick:n[0]||(n[0]=e=>t("displayPreviousMonth"))},ks),(0,r._)("div",zs,[(0,r._)("span",null,(0,s.zw)((0,i.SU)(ze.Z)((0,i.SU)(a),"MMM yyyy",{locale:(0,i.SU)(o)})),1)]),(0,r._)("div",{class:"calendar-arrow calendar-arrow-right",onClick:n[1]||(n[1]=e=>t("displayNextMonth"))},Ms)]))}});const bs=ys;var Ls=bs;const Gs={id:"user-calendar"},Fs={class:"calendar-card box"};var Ws=(0,r.aZ)({props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:a,user:s}=(0,i.BK)(t),o="yyyy-MM-dd";let u=(0,i.iH)(new Date),d=(0,i.iH)((0,$e.yx)(u.value,t.user.weekm));const m=(0,r.Fl)((()=>n.getters[l.aX.GETTERS.CALENDAR_WORKOUTS])),S=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));function _(){d.value=(0,$e.yx)(u.value,t.user.weekm);const e={from:(0,ze.Z)(d.value.start,o),to:(0,ze.Z)(d.value.end,o),page:1,per_page:100,...Pr.eR};n.dispatch(l.aX.ACTIONS.GET_CALENDAR_WORKOUTS,e)}function E(){u.value=(0,xr.Z)(u.value,1),_()}function p(){u.value=(0,$r.Z)(u.value,1),_()}return(0,r.wF)((()=>_())),(e,t)=>((0,r.wg)(),(0,r.iD)("div",Gs,[(0,r._)("div",Fs,[(0,r.Wm)(Ls,{day:(0,i.SU)(u),"locale-options":(0,i.SU)(S),onDisplayNextMonth:E,onDisplayPreviousMonth:p},null,8,["day","locale-options"]),(0,r.Wm)(hs,{"start-date":(0,i.SU)(d).start,"locale-options":(0,i.SU)(S)},null,8,["start-date","locale-options"]),(0,r.Wm)(ws,{currentDay:(0,i.SU)(u),"end-date":(0,i.SU)(d).end,sports:(0,i.SU)(a),"start-date":(0,i.SU)(d).start,timezone:(0,i.SU)(s).timezone,workouts:(0,i.SU)(m),weekStartingMonday:(0,i.SU)(s).weekm},null,8,["currentDay","end-date","sports","start-date","timezone","workouts","weekStartingMonday"])])]))}});const Ys=Ws;var xs=Ys,$s=n(3703),Zs=n(4135),Ks=n(7402);const Bs={class:"user-month-stats"};var Hs=(0,r.aZ)({props:{sports:null,user:null},setup(e){const t=e,{sports:n,user:a}=(0,i.BK)(t),o=new Date,l={duration:"week",start:(0,$s.Z)(o),end:(0,Zs.Z)(o)},c=t.sports.map((e=>e.id));return(e,t)=>{const o=(0,r.up)("Card");return(0,r.wg)(),(0,r.iD)("div",Bs,[(0,r.Wm)(o,null,{title:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(e.$t("dashboard.THIS_MONTH")),1)])),content:(0,r.w5)((()=>[(0,r.Wm)(Ks.Z,{sports:(0,i.SU)(n),user:(0,i.SU)(a),"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 qs=(0,P.Z)(Hs,[["__scopeId","data-v-1bcddc12"]]);var js=qs;const Vs={class:"records-card"},Xs={class:"record-type"},Js={class:"record-value"},Qs={class:"record-date"};var eo=(0,r.aZ)({props:{records:null,sportTranslatedLabel:null},setup(e){const t=e,{records:n,sportTranslatedLabel:a}=(0,i.BK)(t);return(e,t)=>{const o=(0,r.up)("SportImage"),l=(0,r.up)("router-link"),c=(0,r.up)("Card");return(0,r.wg)(),(0,r.iD)("div",Vs,[(0,r.Wm)(c,null,{title:(0,r.w5)((()=>[(0,r.Wm)(o,{"sport-label":(0,i.SU)(n).label,color:(0,i.SU)(n).color},null,8,["sport-label","color"]),(0,r.Uk)(" "+(0,s.zw)((0,i.SU)(a)),1)])),content:(0,r.w5)((()=>[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,i.SU)(n).records,(t=>((0,r.wg)(),(0,r.iD)("div",{class:"record",key:t.id},[(0,r._)("span",Xs,(0,s.zw)(e.$t(`workouts.RECORD_${t.record_type}`)),1),(0,r._)("span",Js,(0,s.zw)(t.value),1),(0,r._)("span",Qs,[(0,r.Wm)(l,{to:{name:"Workout",params:{workoutId:t.workout_id}}},{default:(0,r.w5)((()=>[(0,r.Uk)((0,s.zw)(t.workout_date),1)])),_:2},1032,["to"])])])))),128))])),_:1})])}}});const to=(0,P.Z)(eo,[["__scopeId","data-v-aee1f956"]]);var no=to,ao=(n(1703),n(3649));const ro=(e,t,n)=>{const a="km",r=n?ao.Dl[a].defaultTarget:a;let s;switch(e.record_type){case"AS":case"MS":s=`${(0,ao.sC)(+e.value,a,r,2)} ${r}/h`;break;case"FD":s=`${(0,ao.sC)(+e.value,a,r,3)} ${r}`;break;case"LD":s=e.value;break;default:throw new Error(`Invalid record type, expected: "AS", "FD", "LD", "MD", got: "${e.record_type}"`)}return{workout_date:(0,$e.Jo)((0,$e.eB)(e.workout_date,t)).workout_date,workout_id:e.workout_id,id:e.id,record_type:e.record_type,value:s}},so=(e,t,n,a)=>e.reduce(((e,r)=>{const s=t.find((e=>e.id===r.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(ro(r,n,a))),e}),{}),oo=e=>((0,r.dD)("data-v-ae25a82a"),e=e(),(0,r.Cn)(),e),io={class:"user-records-section"},lo={class:"section-title"},co=oo((()=>(0,r._)("i",{class:"fa fa-trophy custom-fa-small","aria-hidden":"true"},null,-1))),uo={class:"user-records"},mo={key:0,class:"no-records"};var So=(0,r.aZ)({props:{sports:null,user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),a=(0,r.Fl)((()=>so(t.user.records,(0,le.xH)(t.sports,n),t.user.timezone,t.user.imperial_units)));return(t,n)=>((0,r.wg)(),(0,r.iD)("div",io,[(0,r._)("div",lo,[co,(0,r.Uk)(" "+(0,s.zw)(t.$t("workouts.RECORD",2)),1)]),(0,r._)("div",uo,[0===Object.keys((0,i.SU)(a)).length?((0,r.wg)(),(0,r.iD)("div",mo,(0,s.zw)(t.$t("workouts.NO_RECORDS")),1)):(0,r.kq)("",!0),((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)(Object.keys((0,i.SU)(a)).sort(),(t=>((0,r.wg)(),(0,r.j4)(no,{sportTranslatedLabel:t,records:(0,i.SU)(a)[t],key:t,useImperialUnits:e.user.imperial_units},null,8,["sportTranslatedLabel","records","useImperialUnits"])))),128))])]))}});const _o=(0,P.Z)(So,[["__scopeId","data-v-ae25a82a"]]);var Eo=_o;const po={id:"user-stats"};var To=(0,r.aZ)({props:{user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),{user:a}=(0,i.BK)(t),s=(0,r.Fl)((()=>t.user.total_duration)),o=(0,r.Fl)((()=>d(s))),l="km",c=a.value.imperial_units?ao.Dl[l].defaultTarget:l,u=(0,r.Fl)((()=>a.value.imperial_units?(0,ao.sC)(a.value.total_distance,l,c,2):parseFloat(a.value.total_distance.toFixed(2))));function d(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,r.wg)(),(0,r.iD)("div",po,[(0,r.Wm)(Z,{icon:"calendar",value:(0,i.SU)(a).nb_workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(a).nb_workouts)},null,8,["value","text"]),(0,r.Wm)(Z,{icon:"road",value:(0,i.SU)(u),text:"mi"===(0,i.SU)(c)?"miles":(0,i.SU)(c)},null,8,["value","text"]),(0,r.Wm)(Z,{icon:"clock-o",value:(0,i.SU)(o).days,text:(0,i.SU)(o).duration},null,8,["value","text"]),(0,r.Wm)(Z,{icon:"tags",value:(0,i.SU)(a).nb_sports,text:e.$t("workouts.SPORT",(0,i.SU)(a).nb_sports)},null,8,["value","text"])]))}});const Ao=To;var Uo=Ao;const Oo=e=>((0,r.dD)("data-v-20e19721"),e=e(),(0,r.Cn)(),e),Ro={key:0,id:"dashboard",class:"view"},Io={class:"container mobile-menu"},go={class:"box"},wo=Oo((()=>(0,r._)("i",{class:"fa fa-calendar","aria-hidden":"true"},null,-1))),vo=[wo],fo=Oo((()=>(0,r._)("i",{class:"fa fa-bar-chart","aria-hidden":"true"},null,-1))),No=[fo],ho=Oo((()=>(0,r._)("i",{class:"fa fa-map-o","aria-hidden":"true"},null,-1))),Co=[ho],Do=Oo((()=>(0,r._)("i",{class:"fa fa-trophy","aria-hidden":"true"},null,-1))),ko=[Do],zo={class:"container"},Po={class:"container dashboard-container"},Mo={class:"left-container dashboard-sub-container"},yo={class:"right-container dashboard-sub-container"},bo=Oo((()=>(0,r._)("div",{id:"bottom"},null,-1))),Lo={key:1,class:"app-loading"};var Go=(0,r.aZ)({setup(e){const t=(0,c.o)(),n=(0,r.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),a=(0,r.Fl)((()=>t.getters[l.O8.GETTERS.SPORTS])),o=(0,i.iH)("calendar");function u(e){o.value=e}return(e,t)=>{const l=(0,r.up)("Loader");return(0,i.SU)(n).username&&(0,i.SU)(a).length>0?((0,r.wg)(),(0,r.iD)("div",Ro,[(0,r._)("div",Io,[(0,r._)("div",go,[(0,r._)("div",{class:(0,s.C_)(["mobile-menu-item",{"is-selected":"calendar"===o.value}]),onClick:t[0]||(t[0]=e=>u("calendar"))},vo,2),(0,r._)("div",{class:(0,s.C_)(["mobile-menu-item",{"is-selected":"chart"===o.value}]),onClick:t[1]||(t[1]=e=>u("chart"))},No,2),(0,r._)("div",{class:(0,s.C_)(["mobile-menu-item",{"is-selected":"timeline"===o.value}]),onClick:t[2]||(t[2]=e=>u("timeline"))},Co,2),(0,r._)("div",{class:(0,s.C_)(["mobile-menu-item",{"is-selected":"records"===o.value}]),onClick:t[3]||(t[3]=e=>u("records"))},ko,2)])]),(0,r._)("div",zo,[(0,r.Wm)(Uo,{user:(0,i.SU)(n)},null,8,["user"])]),(0,r._)("div",Po,[(0,r._)("div",Mo,[(0,r.Wm)(js,{sports:(0,i.SU)(a),user:(0,i.SU)(n),class:(0,s.C_)({"is-hidden":!("chart"===o.value)})},null,8,["sports","user","class"]),(0,r.Wm)(Eo,{sports:(0,i.SU)(a),user:(0,i.SU)(n),class:(0,s.C_)({"is-hidden":!("records"===o.value)})},null,8,["sports","user","class"])]),(0,r._)("div",yo,[(0,r.Wm)(xs,{sports:(0,i.SU)(a),user:(0,i.SU)(n),class:(0,s.C_)({"is-hidden":!("calendar"===o.value)})},null,8,["sports","user","class"]),(0,r.Wm)(Yr,{sports:(0,i.SU)(a),user:(0,i.SU)(n),class:(0,s.C_)({"is-hidden":!("timeline"===o.value)})},null,8,["sports","user","class"])])]),bo])):((0,r.wg)(),(0,r.iD)("div",Lo,[(0,r.Wm)(l)]))}}});const Fo=(0,P.Z)(Go,[["__scopeId","data-v-20e19721"]]);var Wo=Fo,Yo=n(8273);const xo={class:"not-found view"};var $o=(0,r.aZ)({setup(e){return(e,t)=>((0,r.wg)(),(0,r.iD)("div",xo,[(0,r.Wm)(Yo.Z)]))}});const Zo=$o;var Ko=Zo,Bo=n(2422);const Ho={id:"loginOrRegister",class:"view"},qo={class:"container"},jo={class:"container-sub"},Vo={class:"container-sub"};var Xo=(0,r.aZ)({props:{action:null},setup(e){const t=e,{action:n}=(0,i.BK)(t);return(e,t)=>((0,r.wg)(),(0,r.iD)("div",Ho,[(0,r._)("div",qo,[(0,r._)("div",jo,[(0,r.Wm)(Va)]),(0,r._)("div",Vo,[(0,r.Wm)(Bo.Z,{action:(0,i.SU)(n)},null,8,["action"])])])]))}});const Jo=(0,P.Z)(Xo,[["__scopeId","data-v-6a38125b"]]);var Qo=Jo;const ei=e=>{const t=/(\/profile)(\/edit)*(\/*)/,n=e.replace(t,"").toUpperCase();return""===n?"PROFILE":n.toUpperCase()},ti=[{path:"/",name:"Dashboard",component:Wo},{path:"/login",name:"Login",component:Qo,props:{action:"login"}},{path:"/register",name:"Register",component:Qo,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:vt,props:e=>({tab:ei(e.path)}),children:[{path:"",name:"UserInfos",component:ft.Z},{path:"preferences",name:"UserPreferences",component:zt},{path:"sports",name:"UserSportPreferences",component:ha,props:{isEdition:!1}}]},{path:"edit",name:"UserProfileEdition",component:bt,props:e=>({tab:ei(e.path)}),children:[{path:"",name:"UserInfosEdition",component:En},{path:"account",name:"UserAccountEdition",component:Vt},{path:"picture",name:"UserPictureEdition",component:Nn},{path:"preferences",name:"UserPreferencesEdition",component:Jn},{path:"sports",name:"UserSportPreferencesEdition",component:ha,props:{isEdition:!0}}]}]},{path:"/statistics",name:"Statistics",component:()=>n.e(193).then(n.bind(n,7749))},{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,5298))},{path:"/workouts/:workoutId",name:"Workout",component:()=>n.e(401).then(n.bind(n,7365)),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,7365)),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:oe},{path:"application",name:"ApplicationAdministration",component:y},{path:"application/edit",name:"ApplicationAdministrationEdition",component:y,props:{edition:!0}},{path:"sports",name:"SportsAdministration",component:ke},{path:"users/:username",name:"UserFromAdmin",component:()=>n.e(845).then(n.bind(n,9453)),props:{fromAdmin:!0}},{path:"users",name:"UsersAdministration",component:St}]},{path:"/about",name:"About",component:ar},{path:"/:pathMatch(.*)*",name:"not-found",component:Ko}],ni=(0,a.p7)({history:(0,a.PO)("/"),routes:ti}),ai=["/login","/password-reset","/password-reset/password-updated","/password-reset/request","/password-reset/sent","/register","/account-confirmation","/account-confirmation/resend","/account-confirmation/email-sent"],ri=["/email-update","/about"];ni.beforeEach(((e,t,n)=>{Ca.Z.dispatch(l.YN.ACTIONS.CHECK_AUTH_USER).then((()=>{if(ri.includes(e.path))return n();if(Ca.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]&&ai.includes(e.path))return n("/");if(Ca.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]||ai.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 si=ni},8602:function(e,t,n){"use strict";var a,r,s,o,i,l,c,u,d,m,S,_,E,p,T;n.d(t,{YN:function(){return I},SY:function(){return U},O8:function(){return O},gu:function(){return R},RT:function(){return g},aX:function(){return w}}),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"}(a||(a={})),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"}(r||(r={})),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"}(s||(s={})),function(e){e["GET_APPLICATION_CONFIG"]="GET_APPLICATION_CONFIG",e["GET_APPLICATION_STATS"]="GET_APPLICATION_STATS",e["UPDATE_APPLICATION_CONFIG"]="UPDATE_APPLICATION_CONFIG"}(o||(o={})),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"}(i||(i={})),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"}(l||(l={})),function(e){e["GET_SPORTS"]="GET_SPORTS",e["UPDATE_SPORTS"]="UPDATE_SPORTS"}(c||(c={})),function(e){e["SPORTS"]="SPORTS"}(u||(u={})),function(e){e["SET_SPORTS"]="SET_SPORTS"}(d||(d={})),function(e){e["GET_USER_STATS"]="GET_USER_STATS"}(m||(m={})),function(e){e["USER_STATS"]="USER_STATS"}(S||(S={})),function(e){e["EMPTY_USER_STATS"]="EMPTY_USER_STATS",e["UPDATE_USER_STATS"]="UPDATE_USER_STATS"}(_||(_={})),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"}(E||(E={})),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"}(p||(p={})),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"}(T||(T={}));var A=n(52);const U={ACTIONS:o,GETTERS:i,MUTATIONS:l},O={ACTIONS:c,GETTERS:u,MUTATIONS:d},R={ACTIONS:m,GETTERS:S,MUTATIONS:_},I={ACTIONS:a,GETTERS:r,MUTATIONS:s},g={ACTIONS:E,GETTERS:p,MUTATIONS:T},w={ACTIONS:A.tW,GETTERS:A.JP,MUTATIONS:A.CW}},12:function(e,t,n){"use strict";n.d(t,{Z:function(){return re}});var a=n(3907),r=(n(1703),n(5167)),s=n(9669),o=n.n(s),i=n(2024);const l=o().create({baseURL:(0,i.k)()});var c=l,u=n(2540),d=n(8733),m=n(8602);const S=(e,t)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),r.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,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))},_={[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),r.Z.get(`users/${t}`).then((t=>{"success"===t.data.status?e.commit(m.RT.MUTATIONS.UPDATE_USER,t.data.data.users[0]):(0,i.S)(e,null)})).catch((t=>(0,i.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),r.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,i.S)(e,null)})).catch((t=>(0,i.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),r.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,i.S)(e,null)})).catch((t=>(0,i.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.DELETE_USER_ACCOUNT](e,t){S(e,{username:t.username,fromAdmin:!0})}},{locale:E}=u.Z.global,p=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))},[m.YN.ACTIONS.CONFIRM_ACCOUNT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),c.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,i.S)(e,null)})).catch((t=>{(0,i.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),c.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,i.S)(e,null)})).catch((t=>{(0,i.S)(e,t)}))},[m.YN.ACTIONS.GET_USER_PROFILE](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),r.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.commit(m.SY.MUTATIONS.UPDATE_LANG,t.data.data.language),E.value=t.data.data.language),e.dispatch(m.O8.ACTIONS.GET_SPORTS)):((0,i.S)(e,null),p(e))})).catch((t=>{(0,i.S)(e,t),p(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),c.post(`/auth/${t.actionType}`,t.formData).then((n=>{if("success"===n.data.status)if("login"===t.actionType){const a=n.data.auth_token;window.localStorage.setItem("authToken",a),e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,a),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,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))},[m.YN.ACTIONS.LOGOUT](e){p(e)},[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),r.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,i.S)(e,null)})).catch((t=>(0,i.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),r.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,i.S)(e,null)})).catch((t=>(0,i.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),r.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.commit(m.SY.MUTATIONS.UPDATE_LANG,t.data.data.language),E.value=t.data.data.language,d.Z.push("/profile/preferences")):(0,i.S)(e,null)})).catch((t=>(0,i.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),r.Z["delete"](`auth/profile/reset/sports/${t}`).then((t=>{204===t.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,i.S)(e,null)})).catch((t=>{(0,i.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),r.Z.post("auth/profile/edit/sports",t).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,i.S)(e,null)})).catch((t=>{(0,i.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),r.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,i.S)(e,null)})).catch((t=>(0,i.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.DELETE_ACCOUNT](e,t){S(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),r.Z["delete"]("auth/picture").then((t=>{204===t.status?e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile"))):(0,i.S)(e,null)})).catch((t=>(0,i.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),c.post("auth/password/reset-request",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/sent"):(0,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))},[m.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),c.post("auth/account/resend-confirmation",t).then((t=>{"success"===t.data.status?d.Z.push("/account-confirmation/email-sent"):(0,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))},[m.YN.ACTIONS.RESET_USER_PASSWORD](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),c.post("auth/password/update",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/password-updated"):(0,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))}},A={[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},U={[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:A,mutations:U};var I=R;const g={[m.SY.ACTIONS.GET_APPLICATION_CONFIG](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING,!0),r.Z.get("config").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG,t.data.data):(0,i.S)(e,null)})).catch((t=>(0,i.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),r.Z.get("stats/all").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_STATS,t.data.data):(0,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))},[m.SY.ACTIONS.UPDATE_APPLICATION_CONFIG](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),r.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,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))}},w={[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 v=n(6287);const f={[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=v.v1[t]}};var N=n(5826);const h={root:!0,language:"en",locale:N.Z,errorMessages:null,application:{statistics:{sports:0,uploads_dir_size:0,users:0,workouts:0}},appLoading:!1},C={[m.O8.ACTIONS.GET_SPORTS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),r.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,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))},[m.O8.ACTIONS.UPDATE_SPORTS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),r.Z.patch(`sports/${t.id}`,{is_active:t.isActive}).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))}},D={[m.O8.GETTERS.SPORTS]:e=>e.sports},k={[m.O8.MUTATIONS.SET_SPORTS](e,t){e.sports=t}},z={sports:[]},P={state:z,actions:C,getters:D,mutations:k};var M=P;const y={[m.gu.ACTIONS.GET_USER_STATS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),r.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,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))}},b={[m.gu.GETTERS.USER_STATS]:e=>e.statistics},L={[m.gu.MUTATIONS.UPDATE_USER_STATS](e,t){e.statistics=t},[m.gu.MUTATIONS.EMPTY_USER_STATS](e){e.statistics={}}},G={statistics:{}},F={state:G,actions:y,getters:b,mutations:L};var W=F;const Y={[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},x={[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}},$={user:{},users:[],loading:!1,isSuccess:!1,pagination:{}},Z={state:$,actions:_,getters:Y,mutations:x};var K=Z,B=n(52);const H=(e,t,n)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),r.Z.get("workouts",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.aX.MUTATIONS[n],t.data.data.workouts),n===B.CW.SET_USER_WORKOUTS&&e.commit(m.aX.MUTATIONS.SET_WORKOUTS_PAGINATION,t.data.pagination)):(0,i.S)(e,null)})).catch((t=>(0,i.S)(e,t)))},q={[m.aX.ACTIONS.GET_CALENDAR_WORKOUTS](e,t){e.commit(m.aX.MUTATIONS.EMPTY_CALENDAR_WORKOUTS),H(e,t,B.CW.SET_CALENDAR_WORKOUTS)},[m.aX.ACTIONS.GET_USER_WORKOUTS](e,t){H(e,t,B.CW.SET_USER_WORKOUTS)},[m.aX.ACTIONS.GET_TIMELINE_WORKOUTS](e,t){H(e,t,B.CW.SET_TIMELINE_WORKOUTS)},[m.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS](e,t){H(e,t,B.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}`:"";r.Z.get(`workouts/${t.workoutId}`).then((a=>{const s=a.data.data.workouts[0];if("success"===a.data.status){if(t.segmentId&&(0===s.segments.length||!s.segments[+t.segmentId-1]))throw new Error("WORKOUT_NOT_FOUND");e.commit(m.aX.MUTATIONS.SET_WORKOUT,a.data.data.workouts[0]),a.data.data.workouts[0].with_gpx&&(r.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)})),r.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,i.S)(e,null)})).catch((t=>{e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),(0,i.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),r.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,i.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),r.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,i.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}"}`),r.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,i.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),r.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,i.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))}},j={[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},V={[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:[]}}},X={calendar_workouts:[],timeline_workouts:[],pagination:{},user_workouts:[],workoutData:{gpx:"",loading:!1,workout:{},chartData:[]}},J={state:X,actions:q,getters:j,mutations:V};var Q=J;const ee={authUserModule:I,sportsModule:M,statsModule:W,usersModule:K,workoutsModule:Q},te={state:h,actions:g,getters:w,mutations:f,modules:ee};var ne=te;const ae=(0,a.MT)(ne);var re=ae},52:function(e,t,n){"use strict";var a,r,s;n.d(t,{CW:function(){return s},JP:function(){return r},tW:function(){return a}}),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"}(a||(a={})),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"}(r||(r={})),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"}(s||(s={}))},9917:function(e,t,n){"use strict";n.d(t,{o:function(){return r}});var a=n(3907);function r(){return(0,a.oR)()}},2766:function(e,t,n){"use strict";n.d(t,{Ne:function(){return c},fS:function(){return a},lM:function(){return d},pm:function(){return l}});const a=["asc","desc"],r=1,s=10,o=(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=o(e.page,r),d.per_page=o(e.per_page,s),d.order=i(e.order,a,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,a.Z)(t,{weekStartsOn:n?1:0});case"year":return(0,r.Z)(t);case"month":return(0,s.Z)(t);default:throw new Error(`Invalid duration, expected: "week", "month", "year", got: "${e}"`)}},_=(e,t)=>{switch(e){case"week":return(0,o.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}"`)}},E=(e,t)=>(0,m.utcToZonedTime)(new Date(e),t),p=(e,t)=>{const n=(0,s.Z)(e),r=(0,c.Z)(e),o=t?1:0;return{start:(0,a.Z)(n,{weekStartsOn:o}),end:(0,u.Z)(r,{weekStartsOn:o})}},T=(e,t=null,n=null)=>(t||(t="yyyy/MM/dd"),n||(n="HH:mm"),{workout_date:(0,d.Z)(e,t),workout_time:(0,d.Z)(e,n)})},8966:function(e,t,n){"use strict";n.d(t,{Z:function(){return r},j:function(){return s}});const a=["bytes","KB","MB","GB","TB"],r=(e,t=!0)=>{const n=Math.floor(Math.log(e)/Math.log(1024));if(!e)return t?"0 bytes":{size:"0",suffix:"bytes"};const r=(e/Math.pow(1024,n)).toFixed(1),s=a[n];return t?`${r}${s}`:{size:r,suffix:s}},s=e=>{const t=e/1048576;return+t.toFixed(2)}},2024:function(e,t,n){"use strict";n.d(t,{S:function(){return s},k:function(){return r}});var a=n(8602);const r=()=>"/api/",s=(e,t,n="UNKNOWN")=>{const r=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(a.SY.MUTATIONS.SET_ERROR_MESSAGES,r.includes("\n")?r.split("\n").filter((e=>""!==e)).map((e=>`api.ERROR.${e}`)):`api.ERROR.${r}`)}},6287:function(e,t,n){"use strict";n.d(t,{mT:function(){return c},v1:function(){return o},zK:function(){return i}});var a=n(5826),r=n(5830),s=n(2540);const o={en:a.Z,fr:r.Z},i={en:"English",fr:"Français"},{availableLocales:l}=s.Z.global,c=l.map((e=>({label:i[e],value:e})))},631:function(e,t,n){"use strict";n.d(t,{CM:function(){return l},PA:function(){return i},Yx:function(){return r},Zo:function(){return a},xH:function(){return o}});const a={"Cycling (Sport)":"#4c9792","Cycling (Transport)":"#88af98",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"},r=e=>{const t={};return e.map((e=>t[e.id]=e.color?e.color:a[e.label])),t},s=(e,t)=>{const n=e.translatedLabel.toLowerCase(),a=t.translatedLabel.toLowerCase();return n>a?1:ne.filter((e=>"all"===n||(a.includes(e.id)||e[n]))).map((e=>({...e,translatedLabel:t(`sports.${e.label}.LABEL`)}))).sort(s),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 N},aZ:function(){return f},v1:function(){return v}});var a=n(4850),r=n(8148),s=n(9319),o=n(584),i=n(4559),l=n(3703),c=n(876),u=n(7090),d=n(4135),m=n(1593),S=n(7982),_=n(3500),E=n(1640),p=n(6558),T=n(631),A=n(3649);const U={week:{api:"yyyy-MM-dd",chart:"dd/MM/yyyy"},month:{api:"yyyy-MM",chart:"MM/yyyy"},year:{api:"yyyy",chart:"yyyy"}},O=["average_speed","nb_workouts","total_duration","total_distance","total_ascent","total_descent"],R=(e,t)=>{const n=[];for(let a=(0,p.Nh)(e.duration,e.start,t);a<=e.end;a=(0,p.xA)(e.duration,a))n.push(a);return n},I=(e,t,n=!1)=>{const a={label:e,backgroundColor:[t],data:[]};return n&&(a.type="line",a.borderColor=[t],a.spanGaps=!0),a},g=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:T.Zo[e.label];t.average_speed.push(I(e.label,n,!0)),t.nb_workouts.push(I(e.label,n)),t.total_distance.push(I(e.label,n)),t.total_duration.push(I(e.label,n)),t.total_ascent.push(I(e.label,n)),t.total_descent.push(I(e.label,n))})),t},w=(e,t,n)=>{switch(e){case"average_speed":case"total_distance":case"total_ascent":case"total_descent":return(0,A.f3)(["average_speed","total_distance"].includes(e)?"km":"m",t,n);default:case"nb_workouts":case"total_duration":return t}},v=(e,t,n,r,s,o)=>{const i=R(e,t),l=U[e.duration],c=n.filter((e=>r.includes(e.id))),u=[],d=g(c),m={};return c.map((e=>m[e.label]=e.id)),i.map((e=>{const t=(0,a.Z)(e,l.api),n=(0,a.Z)(e,l.chart);u.push(n),O.map((e=>{d[e].map((n=>{n.data.push(s!=={}&&t in s&&m[n.label]in s[t]?w(e,s[t][m[n.label]][e],o):"average_speed"===e?null:0)}))}))})),{labels:u,datasets:d}},f=(e,t,n)=>{const a=n?1:0,m="year"===t?(0,r.Z)((0,s.Z)(e,9)):"week"===t?(0,o.Z)((0,i.Z)(e,2),{weekStartsOn:a}):(0,l.Z)((0,i.Z)(e,11)),S="year"===t?(0,c.Z)(e):"week"===t?(0,u.Z)(e,{weekStartsOn:a}):(0,d.Z)(e);return{duration:t,end:S,start:m}},N=(e,t,n)=>{const{duration:a,start:p,end:T}=e,A=n?1:0;return{duration:a,end:"year"===a?(0,c.Z)(t?(0,s.Z)(T,1):(0,m.Z)(T,1)):"week"===a?(0,u.Z)(t?(0,S.Z)(T,1):(0,_.Z)(T,1),{weekStartsOn:A}):(0,d.Z)(t?(0,i.Z)(T,1):(0,E.Z)(T,1)),start:"year"===a?(0,r.Z)(t?(0,s.Z)(p,1):(0,m.Z)(p,1)):"week"===a?(0,o.Z)(t?(0,S.Z)(p,1):(0,_.Z)(p,1),{weekStartsOn:A}):(0,l.Z)(t?(0,i.Z)(p,1):(0,E.Z)(p,1))}}},3649:function(e,t,n){"use strict";n.d(t,{Dl:function(){return a},f3:function(){return o},sC:function(){return s}});const a={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"}},r={metric:{imperial:3.280839895,metric:1},imperial:{metric:1/3.280839895,imperial:1}},s=(e,t,n,s=3)=>{const o=a[t],i=a[n],l=e*o.multiplier*r[o.system][i.system]/i.multiplier;return null!==s?parseFloat(l.toFixed(s)):l},o=(e,t,n)=>{const r=n?a[e].defaultTarget:e;return n?s(t,e,r,2):t}},3768:function(e,t,n){"use strict";n.d(t,{BN:function(){return s},EX:function(){return r},eR:function(){return o}});var a=n(3649);const r=(e,t,n)=>{const r={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"}},s=[],o=[],i=[];return e.map((e=>{s.push(e.distance),o.push(e.duration),r.speed.data.push((0,a.f3)("km",e.speed,n)),r.elevation.data.push((0,a.f3)("m",e.elevation,n)),i.push({latitude:e.latitude,longitude:e.longitude})})),{distance_labels:s,duration_labels:o,datasets:r,coordinates:i}},s=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},o={order:"desc",order_by:"workout_date"}},2531:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var a=n(5793);const r={class:"card"},s={class:"card-title"},o={class:"card-content"};function i(e,t){return(0,a.wg)(),(0,a.iD)("div",r,[(0,a._)("div",s,[(0,a.WI)(e.$slots,"title")]),(0,a._)("div",o,[(0,a.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 p}});var a=n(5793),r=n(3577),s=n(2715);const o={class:"table-selects"},i=["value"],l=["value"],c=["value"],u=["value"],d=["value"],m=["value"];var S=(0,a.aZ)({props:{order_by:null,query:null,sort:null,message:null},emits:["updateSelect"],setup(e,{emit:t}){const n=e,{order_by:S,query:_,sort:E,message:p}=(0,s.BK)(n),T=[10,25,50,100];function A(e){t("updateSelect",e.target.id,e.target.value)}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",o,[(0,a._)("label",null,[(0,a.Uk)((0,r.zw)(e.$t("common.SELECTS.ORDER_BY.LABEL"))+": ",1),(0,a._)("select",{name:"order_by",id:"order_by",value:(0,s.SU)(_).order_by,onChange:A},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,s.SU)(S),(t=>((0,a.wg)(),(0,a.iD)("option",{value:t,key:t},(0,r.zw)(e.$t(`${(0,s.SU)(p)}.${t.toUpperCase()}`)),9,l)))),128))],40,i)]),(0,a._)("label",null,[(0,a.Uk)((0,r.zw)(e.$t("common.SELECTS.ORDER.LABEL"))+": ",1),(0,a._)("select",{name:"order",id:"order",value:(0,s.SU)(_).order,onChange:A},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,s.SU)(E),(t=>((0,a.wg)(),(0,a.iD)("option",{value:t,key:t},(0,r.zw)(e.$t(`common.SELECTS.ORDER.${t.toUpperCase()}`)),9,u)))),128))],40,c)]),(0,a._)("label",null,[(0,a.Uk)((0,r.zw)(e.$t("common.SELECTS.PER_PAGE.LABEL"))+": ",1),(0,a._)("select",{name:"per_page",id:"per_page",value:(0,s.SU)(_).per_page,onChange:A},[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(T,(e=>(0,a._)("option",{value:e,key:e},(0,r.zw)(e),9,m))),64))],40,d)])]))}}),_=n(3744);const E=(0,_.Z)(S,[["__scopeId","data-v-72463173"]]);var p=E},7167:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var a=n(5793);const r={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -51 512 512"},s=(0,a.uE)('',1),o=[s];function i(e,t,n,s,i,l){return(0,a.wg)(),(0,a.iD)("svg",r,o)}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 _}});var a=n(5793),r=n(2715),s=n(3577);const o={id:"error"},i={class:"error-content"};var l=(0,a.aZ)({props:{title:null,message:null,buttonText:null,path:{default:"/"}},setup(e){const t=e,{buttonText:n,title:l,message:c,path:u}=(0,r.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.iD)("div",o,[(0,a._)("div",i,[(0,a._)("h1",null,(0,s.zw)((0,r.SU)(l)),1),(0,a._)("p",null,(0,s.zw)((0,r.SU)(c)),1),(0,r.SU)(n)?((0,a.wg)(),(0,a.iD)("button",{key:0,onClick:t[0]||(t[0]=t=>e.$router.push((0,r.SU)(u))),class:"upper"},(0,s.zw)((0,r.SU)(n)),1)):(0,a.kq)("",!0)])]))}}),c=n(3744);const u=(0,c.Z)(l,[["__scopeId","data-v-b60bfa80"]]);var d=u,m=(0,a.aZ)({props:{target:{default:"PAGE"}},setup(e){const t=e,{target:n}=(0,r.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.j4)(d,{title:"404",message:e.$t(`error.NOT_FOUND.${(0,r.SU)(n)}`),"button-text":e.$t("common.HOME")},null,8,["message","button-text"]))}});const S=m;var _=S},6514:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var a=n(5793),r=n(3577),s=n(2715),o=n(2766);const i=e=>((0,a.dD)("data-v-f38ea1b8"),e=e(),(0,a.Cn)(),e),l={class:"pagination-center","aria-label":"navigation"},c={class:"pagination"},u=i((()=>(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1))),d={key:0},m=i((()=>(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1)));var S=(0,a.aZ)({props:{pagination:null,path:null,query:null},setup(e){const t=e,{pagination:n,path:i,query:S}=(0,s.BK)(t);function _(e,t){const n=Object.assign({},S.value);return n.page=t?e+t:e,n}return(e,t)=>{const S=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("nav",l,[(0,a._)("ul",c,[(0,a._)("li",{class:(0,r.C_)(["page-prev",{disabled:!(0,s.SU)(n).has_prev}])},[(0,a.Wm)(S,{class:"page-link",to:{path:(0,s.SU)(i),query:_((0,s.SU)(n).page,-1)},disabled:!(0,s.SU)(n).has_prev},{default:(0,a.w5)((({navigate:t})=>[(0,a.WI)(e.$slots,"default",{onClick:e=>(0,s.SU)(n).has_next?t:null},(()=>[(0,a.Uk)((0,r.zw)(e.$t("api.PAGINATION.PREVIOUS"))+" ",1),u]))])),_:3},8,["to","disabled"])],2),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,s.SU)(o.lM)((0,s.SU)(n).pages,(0,s.SU)(n).page),(e=>((0,a.wg)(),(0,a.iD)("li",{key:e,class:(0,r.C_)(["page",{active:e===(0,s.SU)(n).page}])},["..."===e?((0,a.wg)(),(0,a.iD)("span",d," ... ")):((0,a.wg)(),(0,a.j4)(S,{key:1,class:"page-link",to:{path:(0,s.SU)(i),query:_(+e)}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,r.zw)(e),1)])),_:2},1032,["to"]))],2)))),128)),(0,a._)("li",{class:(0,r.C_)(["page-next",{disabled:!(0,s.SU)(n).has_next}])},[(0,a.Wm)(S,{class:"page-link",to:{path:(0,s.SU)(i),query:_((0,s.SU)(n).page,1)},disabled:!(0,s.SU)(n).has_next},{default:(0,a.w5)((({navigate:t})=>[(0,a.WI)(e.$slots,"default",{onClick:e=>(0,s.SU)(n).has_next?t:null},(()=>[(0,a.Uk)((0,r.zw)(e.$t("api.PAGINATION.NEXT"))+" ",1),m]))])),_:3},8,["to","disabled"])],2)])])}}}),_=n(3744);const E=(0,_.Z)(S,[["__scopeId","data-v-f38ea1b8"]]);var p=E},2047:function(e,t,n){"use strict";n.d(t,{Z:function(){return C}});var a=n(5793),r=n(2715),s=n(9963),o=n(3577),i=n(3257),l=n(8602),c=n(9917);const u=async e=>{const t=await n.e(881).then(n.bind(n,410)),a=await n.e(881).then(n.bind(n,8288)),r=await n.e(881).then(n.bind(n,6947)),s={en:a,fr:r},o=s[e],l={graphs:t.default.adjacencyGraphs,dictionary:{...t.default.dictionary,...o.default.dictionary}};i.Mu.setOptions(l)},d=e=>{switch(e){case 2:return"AVERAGE";case 3:return"GOOD";case 4:return"STRONG";default:return"WEAK"}},m={class:"password-strength"},S=["value"],_={key:0,class:"password-strength-details"},E={class:"password-strength-value"},p={key:0,class:"info-box"},T={class:"password-feedback"};var A=(0,a.aZ)({props:{password:null},setup(e){const t=e,{password:n}=(0,r.BK)(t),s=(0,c.o)(),A=(0,a.Fl)((()=>s.getters[l.SY.GETTERS.LANGUAGE])),U=(0,a.Fl)((()=>s.getters[l.YN.GETTERS.IS_SUCCESS])),O=(0,r.iH)(0),R=(0,r.iH)(""),I=(0,r.iH)([]),g=(0,r.iH)("0% 100%");function w(e){let t=(0,i.tu)(e);O.value=t.score,R.value=d(O.value),I.value=t.feedback.suggestions,g.value=100*O.value/4+"% 100%"}return(0,a.wF)((async()=>await u(A.value))),(0,a.YP)((()=>A.value),(async e=>{await u(e)})),(0,a.YP)((()=>n.value),(async e=>{U.value?R.value="":w(e)})),(e,t)=>((0,a.wg)(),(0,a.iD)("div",m,[(0,a._)("input",{class:(0,o.C_)(["password-slider",`strength-${O.value}`]),style:(0,o.j5)({backgroundSize:g.value}),type:"range",value:O.value,min:"0",max:"4",step:"1"},null,14,S),R.value?((0,a.wg)(),(0,a.iD)("div",_,[(0,a._)("span",E,(0,o.zw)(e.$t("user.PASSWORD_STRENGTH.LABEL"))+": "+(0,o.zw)(e.$t(`user.PASSWORD_STRENGTH.${R.value}`)),1),I.value.length>0?((0,a.wg)(),(0,a.iD)("div",p,[(0,a._)("ul",T,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(I.value,(t=>((0,a.wg)(),(0,a.iD)("li",{key:t},(0,o.zw)(e.$t(`user.PASSWORD_STRENGTH.SUGGESTIONS.${t}`)),1)))),128))])])):(0,a.kq)("",!0)])):(0,a.kq)("",!0)]))}}),U=n(3744);const O=(0,U.Z)(A,[["__scopeId","data-v-79c9693d"]]);var R=O;const I=e=>((0,a.dD)("data-v-5a126514"),e=e(),(0,a.Cn)(),e),g={class:"password-input"},w=["id","disabled","placeholder","required","type"],v={key:0,class:"form-info"},f=I((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1)));var N=(0,a.aZ)({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,r.BK)(n),S=(0,r.iH)(!1),_=(0,r.iH)("");function E(){S.value=!S.value}function p(e){t("updatePassword",e.target.value)}function T(){t("passwordError")}return(0,a.YP)((()=>u.value),(e=>{""===e&&(_.value="")})),(e,t)=>((0,a.wg)(),(0,a.iD)("div",g,[(0,a.wy)((0,a._)("input",{id:(0,r.SU)(c),disabled:(0,r.SU)(l),placeholder:(0,r.SU)(d),required:(0,r.SU)(m),type:S.value?"text":"password","onUpdate:modelValue":t[0]||(t[0]=e=>_.value=e),minlength:"8",onInput:p,onInvalid:T},null,40,w),[[s.YZ,_.value]]),(0,a._)("div",{class:"show-password",onClick:E},[(0,a.Uk)((0,o.zw)(e.$t(`user.${S.value?"HIDE":"SHOW"}_PASSWORD`))+" ",1),(0,a._)("i",{class:(0,o.C_)(["fa","fa-eye"+(S.value?"-slash":"")]),"aria-hidden":"true"},null,2)]),(0,r.SU)(i)?((0,a.wg)(),(0,a.iD)("div",v,[f,(0,a.Uk)(" "+(0,o.zw)(e.$t("user.PASSWORD_INFO")),1)])):(0,a.kq)("",!0),(0,r.SU)(i)?((0,a.wg)(),(0,a.j4)(R,{key:1,password:_.value},null,8,["password"])):(0,a.kq)("",!0)]))}});const h=(0,U.Z)(N,[["__scopeId","data-v-5a126514"]]);var C=h},2056:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var a=n(5793),r=n(3577),s=n(2715),o=n(2024);const i=(0,a._)("div",{class:"map-attribution"},[(0,a._)("span",{class:"map-attribution-text"},"©"),(0,a._)("a",{class:"map-attribution-text",href:"https://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer"}," OpenStreetMap ")],-1);var l=(0,a.aZ)({props:{workout:null,displayHover:{type:Boolean,default:!1}},setup(e){const t=e,{displayHover:n}=(0,s.BK)(t),l=`${(0,o.k)()}workouts/map/${t.workout.map}`;return(e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:(0,r.C_)(["static-map",{"display-hover":(0,s.SU)(n)}])},[(0,s.SU)(n)?((0,a.wg)(),(0,a.iD)("img",{key:0,src:l,alt:""})):((0,a.wg)(),(0,a.iD)("div",{key:1,class:"bg-map-image",style:(0,r.j5)({backgroundImage:`url(${l})`})},null,4)),i],2))}});const c=l;var u=c},7402:function(e,t,n){"use strict";n.d(t,{Z:function(){return L}});var a=n(5793),r=n(3577);const s={class:"start-chart"},o={key:0},i={key:1},l={class:"chart-radio"},c=["checked"],u=["checked"],d=["checked"],m={key:0},S=["checked"],_={key:1},E=["checked"],p={key:2},T=["checked"];function A(e,t,n,A,U,O){const R=(0,a.up)("Chart");return(0,a.wg)(),(0,a.iD)("div",s,[e.hideChartIfNoData&&e.emptyStats?((0,a.wg)(),(0,a.iD)("div",o,(0,r.zw)(e.$t("workouts.NO_WORKOUTS")),1)):((0,a.wg)(),(0,a.iD)("div",i,[(0,a._)("div",l,[(0,a._)("label",null,[(0,a._)("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,a.Uk)(" "+(0,r.zw)(e.$t("workouts.DISTANCE")),1)]),(0,a._)("label",null,[(0,a._)("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,a.Uk)(" "+(0,r.zw)(e.$t("workouts.DURATION")),1)]),(0,a._)("label",null,[(0,a._)("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,a.Uk)(" "+(0,r.zw)(e.$t("workouts.WORKOUT",2)),1)]),e.fullStats?((0,a.wg)(),(0,a.iD)("label",m,[(0,a._)("input",{type:"radio",name:"average_speed",checked:"average_speed"===e.displayedData,onClick:t[3]||(t[3]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,S),(0,a.Uk)(" "+(0,r.zw)(e.$t("workouts.AVERAGE_SPEED")),1)])):(0,a.kq)("",!0),e.fullStats?((0,a.wg)(),(0,a.iD)("label",_,[(0,a._)("input",{type:"radio",name:"total_ascent",checked:"total_ascent"===e.displayedData,onClick:t[4]||(t[4]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,E),(0,a.Uk)(" "+(0,r.zw)(e.$t("workouts.ASCENT")),1)])):(0,a.kq)("",!0),e.fullStats?((0,a.wg)(),(0,a.iD)("label",p,[(0,a._)("input",{type:"radio",name:"total_descent",checked:"total_descent"===e.displayedData,onClick:t[5]||(t[5]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,T),(0,a.Uk)(" "+(0,r.zw)(e.$t("workouts.DESCENT")),1)])):(0,a.kq)("",!0)]),e.labels.length>0?((0,a.wg)(),(0,a.j4)(R,{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,a.kq)("",!0)]))])}var U=n(4850),O=n(2715);const R={class:"chart"};function I(e,t,n,r,s,o){const i=(0,a.up)("BarChart");return(0,a.wg)(),(0,a.iD)("div",R,[(0,a.Wm)(i,(0,a.dG)(e.barChartProps,{class:"bar-chart"}),null,16)])}var g=n(6518),w=n(3324);const v=(e,t=!1)=>{let n="0";t&&(n=String(Math.floor(e/86400)),e%=86400);const a=String(Math.floor(e/3600)).padStart(2,"0");e%=3600;const r=String(Math.floor(e/60)).padStart(2,"0"),s=String(e%60).padStart(2,"0");return t?`${"0"===n?"":`${n}d `}${"00"===a?"":`${a}h `}${r}m ${s}s`:`${"00"===a?"":`${a}:`}${r}:${s}`};var f=n(3649);const N=(e,t,n,a=!0)=>{const r="km",s=n?f.Dl[r].defaultTarget:r;switch(e){case"average_speed":return`${t.toFixed(2)} ${s}/h`;case"total_duration":return v(t,a);case"total_distance":return`${t.toFixed(2)} ${s}`;case"total_ascent":case"total_descent":return`${(t/1e3).toFixed(2)} ${s}`;default:return t.toString()}};var h=(0,a.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,w.QT)();function n(e){return isNaN(e)?0:+e}function r(e,t){return n(e)+n(t)}let s=(0,a.Fl)((()=>({labels:e.labels,datasets:JSON.parse(JSON.stringify(e.datasets))})));const o=(0,a.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 N(e.displayedData,+t,e.useImperialUnits,!1)}},afterFit:function(t){t.width=e.fullStats?75: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 N(e.displayedData,t,e.useImperialUnits,!1);{const t=n.chart.data.datasets.map((e=>e.data[n.dataIndex])).reduce(((e,t)=>r(e,t)),0);return n.datasetIndex===e.displayedSportIds.length-1&&t>0?N(e.displayedData,t,e.useImperialUnits,!1):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 a=t(`sports.${n.dataset.label}.LABEL`)||"";return a&&(a+=": "),null!==n.parsed.y&&(a+=N(e.displayedData,n.parsed.y,e.useImperialUnits)),a},footer:function(n){if("average_speed"===e.displayedData)return"";let a=0;return n.map((e=>{a+=e.parsed.y})),`${t("common.TOTAL")}: `+N(e.displayedData,a,e.useImperialUnits)}}}}}))),{barChartProps:i}=(0,g.xZ)({chartData:s,options:o});return{barChartProps:i}}}),C=n(3744);const D=(0,C.Z)(h,[["render",I]]);var k=D,z=n(8602),P=n(9917),M=n(9318),y=(0,a.aZ)({name:"UserMonthStats",components:{Chart:k},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)();let n=(0,O.iH)("total_distance");const r=(0,a.Fl)((()=>t.getters[z.gu.GETTERS.USER_STATS])),s=(0,a.Fl)((()=>(0,M.v1)(e.chartParams,e.user.weekm,e.sports,e.displayedSportIds,r.value,e.user.imperial_units)));function o(n){t.dispatch(z.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,U.Z)(e.start,"yyyy-MM-dd"),to:(0,U.Z)(e.end,"yyyy-MM-dd"),time:"week"===e.duration?"week"+(t.weekm?"m":""):e.duration}}return(0,a.wF)((()=>o(l(e.chartParams,e.user)))),(0,a.YP)((()=>e.chartParams),(async t=>{o(l(t,e.user))})),{datasets:(0,a.Fl)((()=>s.value.datasets[n.value])),labels:(0,a.Fl)((()=>s.value.labels)),emptyStats:(0,a.Fl)((()=>0===Object.keys(r.value).length)),displayedData:n,updateDisplayData:i}}});const b=(0,C.Z)(y,[["render",A],["__scopeId","data-v-68a6a495"]]);var L=b},2179:function(e,t,n){"use strict";n.d(t,{Z:function(){return w}});var a=n(5793),r=n(2715),s=n(3577),o=n(6595),i=n(8602),l=n(9917);const c={class:"box user-header"},u={class:"user-details"},d={class:"user-name"},m={class:"user-stats"},S={class:"user-stat"},_={class:"stat-number"},E={class:"stat-label"},p={class:"user-stat"},T={class:"stat-label"},A={class:"user-stat hide-small"},U={class:"stat-number"},O={class:"stat-label"};var R=(0,a.aZ)({props:{user:null},setup(e){const t=e,{user:n}=(0,r.BK)(t),R=(0,l.o)(),I=(0,a.Fl)((()=>R.getters[i.YN.GETTERS.AUTH_USER_PROFILE]));return(e,t)=>{const i=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",c,[(0,a.Wm)(o.Z,{user:(0,r.SU)(n)},null,8,["user"]),(0,a._)("div",u,[(0,a._)("div",d,(0,s.zw)((0,r.SU)(n).username),1),(0,a._)("div",m,[(0,a._)("div",S,[(0,a._)("span",_,(0,s.zw)((0,r.SU)(n).nb_workouts),1),(0,a._)("span",E,(0,s.zw)(e.$t("workouts.WORKOUT",(0,r.SU)(n).nb_workouts)),1)]),(0,a._)("div",p,[(0,a.Wm)(i,{distance:(0,r.SU)(n).total_distance,unitFrom:"km",digits:0,displayUnit:!1,useImperialUnits:(0,r.SU)(I).imperial_units},null,8,["distance","useImperialUnits"]),(0,a._)("span",T,(0,s.zw)((0,r.SU)(I).imperial_units?"miles":"km"),1)]),(0,a._)("div",A,[(0,a._)("span",U,(0,s.zw)((0,r.SU)(n).nb_sports),1),(0,a._)("span",O,(0,s.zw)(e.$t("workouts.SPORT",(0,r.SU)(n).nb_sports)),1)])])])])}}}),I=n(3744);const g=(0,I.Z)(R,[["__scopeId","data-v-20291951"]]);var w=g},4980:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});var a=n(5793),r=n(2715),s=n(3577),o=n(9963),i=n(4850),l=n(8602),c=n(9917);const u={id:"user-infos",class:"description-list"},d={key:1,class:"info-box success-message"},m={key:4,class:"email-form form-box"},S={class:"form-items",for:"email"},_={class:"form-items",for:"email"},E={class:"form-buttons"},p={class:"confirm",type:"submit"},T=["onClick"],A={key:5},U={class:"user-bio"},O={key:0,class:"profile-buttons"},R=["onClick"],I={key:1,class:"profile-buttons"};var g=(0,a.aZ)({props:{user:null,fromAdmin:{type:Boolean,default:!1}},setup(e){const t=e,n=(0,c.o)(),{user:g,fromAdmin:w}=(0,r.BK)(t),v=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),f=(0,a.Fl)((()=>t.user.created_at?(0,i.Z)(new Date(t.user.created_at),"dd/MM/yyyy HH:mm"):"")),N=(0,a.Fl)((()=>t.user.birth_date?(0,i.Z)(new Date(t.user.birth_date),"dd/MM/yyyy"):"")),h=(0,a.Fl)((()=>n.getters[l.RT.GETTERS.USERS_IS_SUCCESS])),C=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),D=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG]));let k=(0,r.iH)("");const z=(0,r.iH)(!1),P=(0,r.iH)(!1),M=(0,r.iH)(""),y=(0,r.iH)("");function b(e){k.value=e,""!==e&&n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1)}function L(e){n.dispatch(l.RT.ACTIONS.DELETE_USER_ACCOUNT,{username:e})}function G(e){y.value="password-reset",n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,resetPassword:!0})}function F(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,activate:!0})}function W(){$(),M.value=g.value.email_to_confirm?g.value.email_to_confirm:"",P.value=!0,y.value="email-update"}function Y(){M.value="",P.value=!1}function x(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,new_email:M.value})}function $(){n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1),y.value=""}return(0,a.Ah)((()=>$())),(0,a.YP)((()=>h.value),(e=>{e&&(b(""),Y())})),(e,t)=>{const n=(0,a.up)("Modal"),i=(0,a.up)("AlertMessage"),l=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",u,[(0,r.SU)(k)?((0,a.wg)(),(0,a.j4)(n,{key:0,title:e.$t("common.CONFIRMATION"),message:"delete"===(0,r.SU)(k)?"admin.CONFIRM_USER_ACCOUNT_DELETION":"admin.CONFIRM_USER_PASSWORD_RESET",strongMessage:(0,r.SU)(g).username,onConfirmAction:t[0]||(t[0]=e=>"delete"===(0,r.SU)(k)?L((0,r.SU)(g).username):G((0,r.SU)(g).username)),onCancelAction:t[1]||(t[1]=e=>b(""))},null,8,["title","message","strongMessage"])):(0,a.kq)("",!0),(0,r.SU)(h)?((0,a.wg)(),(0,a.iD)("div",d,(0,s.zw)(e.$t(`admin.${"password-reset"===y.value?"PASSWORD_RESET":"USER_EMAIL_UPDATE"}_SUCCESSFUL`)),1)):(0,a.kq)("",!0),(0,r.SU)(g).is_active?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)(i,{key:2,message:"user.THIS_USER_ACCOUNT_IS_INACTIVE"})),(0,r.SU)(C)?((0,a.wg)(),(0,a.j4)(l,{key:3,message:(0,r.SU)(C)},null,8,["message"])):(0,a.kq)("",!0),P.value?((0,a.wg)(),(0,a.iD)("div",m,[(0,a._)("form",{class:(0,s.C_)({errors:z.value}),onSubmit:t[4]||(t[4]=(0,o.iM)((e=>x((0,r.SU)(g).username)),["prevent"]))},[(0,a._)("label",S,[(0,a.Uk)((0,s.zw)(e.$t("admin.CURRENT_EMAIL"))+" ",1),(0,a.wy)((0,a._)("input",{id:"email",type:"email","onUpdate:modelValue":t[2]||(t[2]=e=>(0,r.SU)(g).email=e),disabled:""},null,512),[[o.nr,(0,r.SU)(g).email]])]),(0,a._)("label",_,[(0,a.Uk)((0,s.zw)(e.$t("admin.NEW_EMAIL"))+"* ",1),(0,a.wy)((0,a._)("input",{id:"new-email",type:"email",required:"","onUpdate:modelValue":t[3]||(t[3]=e=>M.value=e)},null,512),[[o.nr,M.value]])]),(0,a._)("div",E,[(0,a._)("button",p,(0,s.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:(0,o.iM)(Y,["prevent"])},(0,s.zw)(e.$t("buttons.CANCEL")),9,T)])],34)])):((0,a.wg)(),(0,a.iD)("div",A,[(0,a._)("dl",null,[(0,a._)("dt",null,(0,s.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+":",1),(0,a._)("dd",null,(0,s.zw)((0,r.SU)(f)),1),(0,a._)("dt",null,(0,s.zw)(e.$t("user.PROFILE.FIRST_NAME"))+":",1),(0,a._)("dd",null,(0,s.zw)((0,r.SU)(g).first_name),1),(0,a._)("dt",null,(0,s.zw)(e.$t("user.PROFILE.LAST_NAME"))+":",1),(0,a._)("dd",null,(0,s.zw)((0,r.SU)(g).last_name),1),(0,a._)("dt",null,(0,s.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+":",1),(0,a._)("dd",null,(0,s.zw)((0,r.SU)(N)),1),(0,a._)("dt",null,(0,s.zw)(e.$t("user.PROFILE.LOCATION"))+":",1),(0,a._)("dd",null,(0,s.zw)((0,r.SU)(g).location),1),(0,a._)("dt",null,(0,s.zw)(e.$t("user.PROFILE.BIO"))+":",1),(0,a._)("dd",U,(0,s.zw)((0,r.SU)(g).bio),1)]),(0,r.SU)(w)?((0,a.wg)(),(0,a.iD)("div",O,[(0,r.SU)(v).username!==(0,r.SU)(g).username?((0,a.wg)(),(0,a.iD)("button",{key:0,class:"danger",onClick:t[5]||(t[5]=(0,o.iM)((e=>b("delete")),["prevent"]))},(0,s.zw)(e.$t("admin.DELETE_USER")),1)):(0,a.kq)("",!0),(0,r.SU)(g).is_active?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("button",{key:1,onClick:t[6]||(t[6]=(0,o.iM)((e=>F((0,r.SU)(g).username)),["prevent"]))},(0,s.zw)(e.$t("admin.ACTIVATE_USER_ACCOUNT")),1)),(0,r.SU)(v).username!==(0,r.SU)(g).username?((0,a.wg)(),(0,a.iD)("button",{key:2,onClick:(0,o.iM)(W,["prevent"])},(0,s.zw)(e.$t("admin.UPDATE_USER_EMAIL")),9,R)):(0,a.kq)("",!0),(0,r.SU)(v).username!==(0,r.SU)(g).username&&(0,r.SU)(D).is_email_sending_enabled?((0,a.wg)(),(0,a.iD)("button",{key:3,onClick:t[7]||(t[7]=(0,o.iM)((e=>b("reset")),["prevent"]))},(0,s.zw)(e.$t("admin.RESET_USER_PASSWORD")),1)):(0,a.kq)("",!0),(0,a._)("button",{onClick:t[8]||(t[8]=t=>e.$router.go(-1))},(0,s.zw)(e.$t("buttons.BACK")),1)])):((0,a.wg)(),(0,a.iD)("div",I,[(0,a._)("button",{onClick:t[9]||(t[9]=t=>e.$router.push("/profile/edit"))},(0,s.zw)(e.$t("user.PROFILE.EDIT")),1),(0,a._)("button",{onClick:t[10]||(t[10]=t=>e.$router.push("/"))},(0,s.zw)(e.$t("common.HOME")),1)]))]))])}}}),w=n(3744);const v=(0,w.Z)(g,[["__scopeId","data-v-1b6fd7df"]]);var f=v},2422:function(e,t,n){"use strict";n.d(t,{Z:function(){return D}});var a=n(5793),r=n(3577),s=n(2715),o=n(9963),i=n(2119),l=n(2047),c=n(8602),u=n(9917);const d=e=>((0,a.dD)("data-v-26d3a7be"),e=e(),(0,a.Cn)(),e),m={id:"user-form"},S={key:2,class:"info-box success-message"},_={class:"form-items"},E=["disabled","placeholder"],p={key:1,class:"form-info"},T=d((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),A=["disabled","placeholder"],U={key:3,class:"form-info"},O=d((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),R=["disabled"],I={key:3},g={key:0},w={key:4},v={class:"account"},f={key:5};var N=(0,a.aZ)({props:{action:null,token:{default:""}},setup(e){const t=e,n=(0,i.yj)(),d=(0,u.o)(),{action:N}=(0,s.BK)(t),h=(0,s.qj)({username:"",email:"",password:""}),C=(0,a.Fl)((()=>L(t.action))),D=(0,a.Fl)((()=>d.getters[c.SY.GETTERS.ERROR_MESSAGES])),k=(0,a.Fl)((()=>d.getters[c.YN.GETTERS.IS_REGISTRATION_SUCCESS])),z=(0,a.Fl)((()=>d.getters[c.YN.GETTERS.IS_SUCCESS])),P=(0,a.Fl)((()=>d.getters[c.SY.GETTERS.APP_CONFIG])),M=(0,a.Fl)((()=>"register"===t.action&&!P.value.is_registration_enabled)),y=(0,a.Fl)((()=>["reset-request","account-confirmation-resend"].includes(t.action)&&!P.value.is_email_sending_enabled)),b=(0,s.iH)(!1);function L(e){switch(e){case"reset-request":case"reset":return"buttons.SUBMIT";default:return`buttons.${t.action.toUpperCase()}`}}function G(){b.value=!0}function F(e){h.password=e}function W(e){switch(e){case"reset":return t.token?d.dispatch(c.YN.ACTIONS.RESET_USER_PASSWORD,{password:h.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:h.email});case"account-confirmation-resend":return d.dispatch(c.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL,{email:h.email});default:d.dispatch(c.YN.ACTIONS.LOGIN_OR_REGISTER,{actionType:e,formData:h,redirectUrl:n.query.from})}}function Y(){h.username="",h.email="",h.password=""}return(0,a.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),b.value=!1,Y()})),(e,t)=>{const n=(0,a.up)("AlertMessage"),i=(0,a.up)("router-link"),c=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",{id:"user-auth-form",class:(0,r.C_)(`${["reset","reset-request"].includes((0,s.SU)(N))?(0,s.SU)(N):"user-form"}`)},[(0,a._)("div",m,[(0,a._)("div",{class:(0,r.C_)(["form-box",{disabled:(0,s.SU)(M)}])},[(0,s.SU)(M)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:"user.REGISTER_DISABLED"})):(0,a.kq)("",!0),(0,s.SU)(y)?((0,a.wg)(),(0,a.j4)(n,{key:1,message:"admin.EMAIL_SENDING_DISABLED"})):(0,a.kq)("",!0),(0,s.SU)(z)||(0,s.SU)(k)?((0,a.wg)(),(0,a.iD)("div",S,(0,r.zw)(e.$t("user.PROFILE.SUCCESSFUL_"+((0,s.SU)(k)?"REGISTRATION"+((0,s.SU)(P).is_email_sending_enabled?"_WITH_EMAIL":""):"UPDATE"))),1)):(0,a.kq)("",!0),(0,a._)("form",{class:(0,r.C_)({errors:b.value}),onSubmit:t[2]||(t[2]=(0,o.iM)((e=>W((0,s.SU)(N))),["prevent"]))},[(0,a._)("div",_,["register"===(0,s.SU)(N)?(0,a.wy)(((0,a.wg)(),(0,a.iD)("input",{key:0,id:"username",disabled:(0,s.SU)(M),required:"",pattern:"[a-zA-Z0-9_]+",minlength:"3",maxlength:"30",onInvalid:G,"onUpdate:modelValue":t[0]||(t[0]=e=>(0,s.SU)(h).username=e),placeholder:e.$t("user.USERNAME")},null,40,E)),[[o.nr,(0,s.SU)(h).username]]):(0,a.kq)("",!0),"register"===(0,s.SU)(N)?((0,a.wg)(),(0,a.iD)("div",p,[T,(0,a.Uk)(" "+(0,r.zw)(e.$t("user.USERNAME_INFO")),1)])):(0,a.kq)("",!0),"reset"!==(0,s.SU)(N)?(0,a.wy)(((0,a.wg)(),(0,a.iD)("input",{key:2,id:"email",disabled:(0,s.SU)(M)||(0,s.SU)(y),required:"",onInvalid:G,type:"email","onUpdate:modelValue":t[1]||(t[1]=e=>(0,s.SU)(h).email=e),placeholder:e.$t("user.EMAIL")},null,40,A)),[[o.nr,(0,s.SU)(h).email]]):(0,a.kq)("",!0),["reset-request","register","account-confirmation-resend"].includes((0,s.SU)(N))?((0,a.wg)(),(0,a.iD)("div",U,[O,(0,a.Uk)(" "+(0,r.zw)(e.$t("user.EMAIL_INFO")),1)])):(0,a.kq)("",!0),["account-confirmation-resend","reset-request"].includes((0,s.SU)(N))?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)(l.Z,{key:4,disabled:(0,s.SU)(M),required:!0,placeholder:"reset"===(0,s.SU)(N)?e.$t("user.ENTER_PASSWORD"):e.$t("user.PASSWORD"),password:(0,s.SU)(h).password,checkStrength:["reset","register"].includes((0,s.SU)(N)),onUpdatePassword:F,onPasswordError:G},null,8,["disabled","placeholder","password","checkStrength"]))]),(0,a._)("button",{type:"submit",disabled:(0,s.SU)(M)||(0,s.SU)(y)},(0,r.zw)(e.$t((0,s.SU)(C))),9,R)],34),"login"===(0,s.SU)(N)?((0,a.wg)(),(0,a.iD)("div",I,[(0,a.Wm)(i,{class:"links",to:"/register"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,r.zw)(e.$t("user.REGISTER")),1)])),_:1}),(0,s.SU)(P).is_email_sending_enabled?((0,a.wg)(),(0,a.iD)("span",g,"-")):(0,a.kq)("",!0),(0,s.SU)(P).is_email_sending_enabled?((0,a.wg)(),(0,a.j4)(i,{key:1,class:"links",to:"/password-reset/request"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,r.zw)(e.$t("user.PASSWORD_FORGOTTEN")),1)])),_:1})):(0,a.kq)("",!0)])):(0,a.kq)("",!0),"register"===(0,s.SU)(N)?((0,a.wg)(),(0,a.iD)("div",w,[(0,a._)("span",v,(0,r.zw)(e.$t("user.ALREADY_HAVE_ACCOUNT")),1),(0,a.Wm)(i,{class:"links",to:"/login"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,r.zw)(e.$t("user.LOGIN")),1)])),_:1})])):(0,a.kq)("",!0),["login","register"].includes((0,s.SU)(N))&&(0,s.SU)(P).is_email_sending_enabled?((0,a.wg)(),(0,a.iD)("div",f,[(0,a.Wm)(i,{class:"links",to:"/account-confirmation/resend"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,r.zw)(e.$t("user.ACCOUNT_CONFIRMATION_NOT_RECEIVED")),1)])),_:1})])):(0,a.kq)("",!0),(0,s.SU)(D)?((0,a.wg)(),(0,a.j4)(c,{key:6,message:(0,s.SU)(D)},null,8,["message"])):(0,a.kq)("",!0)],2)])],2)}}}),h=n(3744);const C=(0,h.Z)(N,[["__scopeId","data-v-26d3a7be"]]);var D=C},6595:function(e,t,n){"use strict";n.d(t,{Z:function(){return S}});var a=n(5793),r=n(2715),s=n(2024);const o={class:"user-picture"},i=["alt","src"],l={key:1,class:"no-picture"},c=(0,a._)("i",{class:"fa fa-user-circle-o","aria-hidden":"true"},null,-1),u=[c];var d=(0,a.aZ)({props:{user:null},setup(e){const t=e,n=(0,a.Fl)((()=>t.user.picture?`${(0,s.k)()}users/${t.user.username}/picture?${Date.now()}`:""));return(e,t)=>((0,a.wg)(),(0,a.iD)("div",o,[""!==(0,r.SU)(n)?((0,a.wg)(),(0,a.iD)("img",{key:0,class:"profile-user-img",alt:e.$t("user.USER_PICTURE"),src:(0,r.SU)(n)},null,8,i)):((0,a.wg)(),(0,a.iD)("div",l,u))]))}});const m=d;var S=m},5630:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var a=n(5793),r=n(3577);const s={class:"no-workouts box"};function o(e,t){const n=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",s,[(0,a._)("div",null,[(0,a.Uk)((0,r.zw)(e.$t("workouts.NO_WORKOUTS"))+" ",1),(0,a.Wm)(n,{to:"/workouts/add"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,r.zw)(e.$t("workouts.UPLOAD_FIRST_WORKOUT")),1)])),_:1})])])}var i=n(3744);const l={},c=(0,i.Z)(l,[["render",o],["__scopeId","data-v-4b4d15fb"]]);var u=c},4612:function(e,t,n){var a={"./en/en.ts":9350,"./fr/fr.ts":1079};function r(e){var t=s(e);return n(t)}function s(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}r.keys=function(){return Object.keys(a)},r.resolve=s,e.exports=r,r.id=4612}},t={};function n(a){var r=t[a];if(void 0!==r)return r.exports;var s=t[a]={exports:{}};return e[a].call(s.exports,s,s.exports,n),s.exports}n.m=e,function(){var e=[];n.O=function(t,a,r,s){if(!a){var o=1/0;for(u=0;u=s)&&Object.keys(n.O).every((function(e){return n.O[e](a[l])}))?a.splice(l--,1):(i=!1,s0&&e[u-1][2]>s;u--)e[u]=e[u-1];e[u]=[a,r,s]}}(),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(a,r){if(1&r&&(a=this(a)),8&r)return a;if("object"===typeof a&&a){if(4&r&&a.__esModule)return a;if(16&r&&"function"===typeof a.then)return a}var s=Object.create(null);n.r(s);var o={};e=e||[null,t({}),t([]),t(t)];for(var i=2&r&&a;"object"==typeof i&&!~e.indexOf(i);i=t(i))Object.getOwnPropertyNames(i).forEach((function(e){o[e]=function(){return a[e]}}));return o["default"]=function(){return a},n.d(s,o),s}}(),function(){n.d=function(e,t){for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})}}(),function(){n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce((function(t,a){return n.f[a](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:"b7d4ded2",93:"35a58b95",193:"284e20be",243:"d80d691c",328:"c095abe4",401:"4c428272",431:"0a529e40",633:"031db9b5",845:"52d627f4",858:"62431e1e",881:"23cdd304"}[e]+".js"}}(),function(){n.miniCssF=function(e){return"static/css/"+{24:"reset",193:"statistics",328:"admin",401:"workouts",845:"profile"}[e]+"."+{24:"e2527ec6",193:"91fe968e",328:"73df498d",401:"1f6e4a1d",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(a,r,s,o){if(e[a])e[a].push(r);else{var i,l;if(void 0!==s)for(var c=document.getElementsByTagName("script"),u=0;u {\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\nexport default authApi\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 */\nfunction loadLocaleMessages(): LocaleMessages {\n const locales = require.context('./locales', true, /[A-Za-z0-9-_,\\s]+\\.ts$/i)\n const messages: LocaleMessages = {}\n locales.keys().forEach((key) => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n if (matched && matched.length > 1) {\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([\"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 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 \"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 \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Home\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"here\"])},\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 \"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 \"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 \"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 \"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 \"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_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 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 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 license \", _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([\"Email : une adresse email valide doit être fournie.\"])},\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 email 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 email 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([\"Envoyer à nouveau l'email de confirmation\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Précédent\"])},\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 \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation (en)\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accueil\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ici\"])},\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\"])}\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 \"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 \"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 (Electrique)\"])}\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 votre boite mail. Un nouvel email de confirmation a été envoyé à l'adresse email 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 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([\"Email\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisir une adresse email valide.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisir 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 votre boite mail. Si vote adresse est dans notre base de données, vous recevrez un email 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 \"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 \"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 email 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 \"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 boite email pour valider votre nouvelle adresse email.\"])},\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 email 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 l'email 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_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 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 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 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, unref as _unref, normalizeClass as _normalizeClass, 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-0d4f0b8f\"),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 import { useI18n } from 'vue-i18n'\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 emits: ['menuInteraction'],\n setup(__props, { emit }) {\n\n \n\n const { locale } = useI18n()\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 let 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 locale.value = option.value.toString()\n store.commit(ROOT_STORE.MUTATIONS.UPDATE_LANG, option.value)\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': _unref(isMenuOpen) }])\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': _unref(isMenuOpen) }])\n }, [\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-close close-icon nav-item\", { 'menu-closed': !_unref(isMenuOpen) }]),\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=0d4f0b8f&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-0d4f0b8f\"]])\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 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\n \nexport default /*#__PURE__*/_defineComponent({\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(() => store.dispatch(ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG))\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 let 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\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=c446fb44&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 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 { unref as _unref, isRef as _isRef, 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-3ec2aca2\"),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\n }\n \nexport default /*#__PURE__*/_defineComponent({\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 }\n\n \n\n \n\n let 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\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) => (_isRef(text) ? (text).value = $event : text = $event)),\n onInput: updateText\n }, null, 40, _hoisted_2), [\n [_vModelText, _unref(text)]\n ]),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('workouts.REMAINING_CHARS')) + \": \" + _toDisplayString(_unref(text).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=3ec2aca2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3ec2aca2\"]])\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, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-f46ff1d6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = /*#__PURE__*/_createTextVNode(\" \" + /*#__PURE__*/_toDisplayString(' ') + \" \")\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 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 _hoisted_1,\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-ca61364c\"),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 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 let isOpen = ref(false)\n let 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 (_unref(isOpen))\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=ca61364c&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-ca61364c\"]])\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 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 \"./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 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 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) === 'Hiking')\n ? (_openBlock(), _createBlock(Hiking, { key: 2 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking')\n ? (_openBlock(), _createBlock(MountainBiking, { key: 3 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking (Electric)')\n ? (_openBlock(), _createBlock(MountainBikingElectric, { key: 4 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Rowing')\n ? (_openBlock(), _createBlock(Rowing, { key: 5 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Running')\n ? (_openBlock(), _createBlock(Running, { key: 6 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Alpine)')\n ? (_openBlock(), _createBlock(SkiingAlpine, { key: 7 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Cross Country)')\n ? (_openBlock(), _createBlock(SkiingCrossCountry, { key: 8 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Snowshoes')\n ? (_openBlock(), _createBlock(Snowshoes, { key: 9 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Trail')\n ? (_openBlock(), _createBlock(Trail, { key: 10 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Walking')\n ? (_openBlock(), _createBlock(Walking, { key: 11 }))\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 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 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) && !_unref(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) => ((_unref(appData).admin_contact) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_5)), [\n [_vModelText, _unref(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) => ((_unref(appData).max_users) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_7), [\n [_vModelText, _unref(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) => ((_unref(appData).max_single_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_12), [\n [_vModelText, _unref(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) => ((_unref(appData).max_zip_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_14), [\n [_vModelText, _unref(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) => ((_unref(appData).gpx_limit_import) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_16), [\n [_vModelText, _unref(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 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 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 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 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 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-4735c10f\"),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 { format } from 'date-fns'\n import {\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 { getDateWithTZ } from '@/utils/dates'\n\n \nexport default /*#__PURE__*/_defineComponent({\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(format)(\n _unref(getDateWithTZ)(user.created_at, _unref(authUser).timezone),\n 'dd/MM/yyyy HH:mm'\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=4735c10f&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4735c10f\"]])\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 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 '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) === 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=40025245&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-e26535e0\"),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 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']\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=e26535e0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-e26535e0\"]])\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 } from 'vue'\n\n import { IUserProfile } from '@/types/user'\n import { languageLabels } from '@/utils/locales'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const language = 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\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(language)), 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.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 ]),\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 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 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) => ((_unref(userForm).email) = $event)),\n disabled: _unref(loading),\n required: true,\n onInvalid: invalidateForm\n }, null, 40, _hoisted_6), [\n [_vModelText, _unref(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: _unref(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: _unref(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-b6bacea0\"),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 } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\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 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 ? format(new Date(props.user.created_at), 'dd/MM/yyyy HH:mm')\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) => ((_unref(userForm).first_name) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_7), [\n [_vModelText, _unref(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) => ((_unref(userForm).last_name) = $event))\n }, null, 512), [\n [_vModelText, _unref(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) => ((_unref(userForm).birth_date) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_10), [\n [_vModelText, _unref(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) => ((_unref(userForm).location) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_12), [\n [_vModelText, _unref(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: _unref(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=b6bacea0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b6bacea0\"]])\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-3a97bb3c\"),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 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 let 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: !_unref(pictureFile)\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=3a97bb3c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3a97bb3c\"]])\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 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 } from \"vue\"\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\" }\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = [\"value\"]\nconst _hoisted_14 = { class: \"form-buttons\" }\nconst _hoisted_15 = {\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 { IUserProfile, IUserPreferencesPayload } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { availableLanguages } from '@/utils/locales'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\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 userForm: IUserPreferencesPayload = reactive({\n imperial_units: false,\n language: '',\n timezone: 'Europe/Paris',\n weekm: false,\n })\n const weekStart = [\n {\n label: 'MONDAY',\n value: true,\n },\n {\n label: 'SUNDAY',\n value: false,\n },\n ]\n const imperialUnits = [\n {\n label: 'IMPERIAL',\n value: true,\n },\n {\n label: 'METRIC',\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\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function updateUserForm(user: IUserProfile) {\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.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\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) => ((_unref(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, _unref(userForm).language]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.TIMEZONE')) + \" \", 1),\n _createVNode(TimezoneDropdown, {\n input: _unref(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.FIRST_DAY_OF_WEEK')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"weekm\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_unref(userForm).weekm) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(weekStart, (start) => {\n return _createElementVNode(\"option\", {\n value: start.value,\n key: start.value\n }, _toDisplayString(_ctx.$t(`user.PROFILE.${start.label}`)), 9, _hoisted_10)\n }), 64))\n ], 8, _hoisted_9), [\n [_vModelSelect, _unref(userForm).weekm]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.UNITS.LABEL')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"imperial_units\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_unref(userForm).imperial_units) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(imperialUnits, (unit) => {\n return _createElementVNode(\"option\", {\n value: unit.value,\n key: unit.value\n }, _toDisplayString(_ctx.$t(`user.PROFILE.UNITS.${unit.label}`)), 9, _hoisted_13)\n }), 64))\n ], 8, _hoisted_12), [\n [_vModelSelect, _unref(userForm).imperial_units]\n ])\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[3] || (_cache[3] = _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\nconst __exports__ = script;\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-4775544a\"),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 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 sportColors = 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 ? sport.color : sportColors[sport.label]\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: _unref(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) && _unref(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: _unref(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 (_unref(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=4775544a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4775544a\"]])\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 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 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-c9d1f10c\"),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 = /*#__PURE__*/_createTextVNode(\"/ \")\nconst _hoisted_18 = {\n key: 1,\n class: \"data altitude\"\n}\nconst _hoisted_19 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_20 = { class: \"data-values\" }\nconst _hoisted_21 = /*#__PURE__*/_createTextVNode(\" +\")\nconst _hoisted_22 = /*#__PURE__*/_createTextVNode(\"/- \")\n\nimport { Locale, format, 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 { getDateWithTZ } 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 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(format)(\n _unref(getDateWithTZ)(_unref(workout).workout_date, _unref(user).timezone),\n 'dd/MM/yyyy HH:mm'\n )\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 _hoisted_17,\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_18, [\n _hoisted_19,\n _createElementVNode(\"div\", _hoisted_20, [\n _hoisted_21,\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 _hoisted_22,\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=c9d1f10c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-c9d1f10c\"]])\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-9ef2a9ac\"),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 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 let 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=9ef2a9ac&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9ef2a9ac\"]])\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 workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n props: {\n workout: null,\n sportLabel: null,\n sportColor: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n\n \n\n const { 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.map(\n (record) => ` ${_ctx.$t(`workouts.RECORD_${record.record_type}`)}`\n )\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=7de0052b&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 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 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 workouts: IWorkout[]\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n props: {\n workouts: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n workouts: IWorkout[]\n sports: ISport[]\n }\n\n \n\n const { 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 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 : (_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=4663dbac&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 endDate: Date\n sports: ISport[]\n startDate: Date\n timezone: string\n weekStartingMonday: boolean\n workouts: IWorkout[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n props: {\n currentDay: null,\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 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 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 }, null, 8, [\"workouts\", \"sports\"]),\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=73426002&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 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 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 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 let day = ref(new Date())\n let 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: _unref(day),\n \"locale-options\": _unref(localeOptions),\n onDisplayNextMonth: displayNextMonth,\n onDisplayPreviousMonth: displayPreviousMonth\n }, null, 8, [\"day\", \"locale-options\"]),\n _createVNode(CalendarDays, {\n \"start-date\": _unref(calendarDates).start,\n \"locale-options\": _unref(localeOptions)\n }, null, 8, [\"start-date\", \"locale-options\"]),\n _createVNode(CalendarCells, {\n currentDay: _unref(day),\n \"end-date\": _unref(calendarDates).end,\n sports: _unref(sports),\n \"start-date\": _unref(calendarDates).start,\n timezone: _unref(user).timezone,\n workouts: _unref(calendarWorkouts),\n weekStartingMonday: _unref(user).weekm\n }, null, 8, [\"currentDay\", \"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=4b0ade2c&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 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 { 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-aee1f956\"),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\n import { IRecordsBySports } from '@/types/workouts'\n\n interface Props {\n records: IRecordsBySports\n sportTranslatedLabel: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\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\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(_unref(records).records, (record) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"record\",\n key: record.id\n }, [\n _createElementVNode(\"span\", _hoisted_2, _toDisplayString(_ctx.$t(`workouts.RECORD_${record.record_type}`)), 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=aee1f956&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-aee1f956\"]])\n\nexport default __exports__","import { ITranslatedSport } from '@/types/sports'\nimport { TUnit } from '@/types/units'\nimport { IRecord, IRecordsBySports } from '@/types/workouts'\nimport { formatWorkoutDate, getDateWithTZ } from '@/utils/dates'\nimport { convertDistance, units } from '@/utils/units'\n\nexport const formatRecord = (\n record: IRecord,\n tz: string,\n useImperialUnits: boolean\n): Record => {\n const unitFrom: TUnit = 'km'\n const unitTo: TUnit = useImperialUnits\n ? units[unitFrom].defaultTarget\n : unitFrom\n let value\n switch (record.record_type) {\n case 'AS':\n case 'MS':\n value = `${convertDistance(\n +record.value,\n unitFrom,\n unitTo,\n 2\n )} ${unitTo}/h`\n break\n case 'FD':\n value = `${convertDistance(+record.value, unitFrom, unitTo, 3)} ${unitTo}`\n break\n case 'LD':\n value = record.value\n break\n default:\n throw new Error(\n `Invalid record type, expected: \"AS\", \"FD\", \"LD\", \"MD\", got: \"${record.record_type}\"`\n )\n }\n return {\n workout_date: formatWorkoutDate(getDateWithTZ(record.workout_date, tz))\n .workout_date,\n workout_id: record.workout_id,\n id: record.id,\n record_type: record.record_type,\n value: value,\n }\n}\n\nexport const getRecordsBySports = (\n records: IRecord[],\n translatedSports: ITranslatedSport[],\n tz: string,\n useImperialUnits: boolean\n): IRecordsBySports =>\n records.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)\n )\n }\n return sportList\n }, {})\n","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-ae25a82a\"),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 { IUserProfile } from '@/types/user'\n import { getRecordsBySports } from '@/utils/records'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n sports: ISport[]\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\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 { 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 )\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=ae25a82a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-ae25a82a\"]])\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 { 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 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 defaultUnitFrom: TUnit = 'km'\n const unitTo: TUnit = user.value.imperial_units\n ? units[defaultUnitFrom].defaultTarget\n : defaultUnitFrom\n const totalDistance: ComputedRef = computed(() =>\n user.value.imperial_units\n ? convertDistance(user.value.total_distance, defaultUnitFrom, unitTo, 2)\n : parseFloat(user.value.total_distance.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(unitTo) === 'mi' ? 'miles' : _unref(unitTo)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"clock-o\",\n value: _unref(totalDuration).days,\n text: _unref(totalDuration).duration\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\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 ]))\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=6c24b4fa&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-20e19721\"),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, 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 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 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=20e19721&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-20e19721\"]])\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 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 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 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 },\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 RootActions {\n GET_APPLICATION_CONFIG = 'GET_APPLICATION_CONFIG',\n GET_APPLICATION_STATS = 'GET_APPLICATION_STATS',\n UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',\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 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}\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 { getApiUrl } from '@/utils'\n\nconst api = axios.create({\n baseURL: getApiUrl(),\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 createI18n from '@/i18n'\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 { locale } = createI18n.global\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 },\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.commit(\n ROOT_STORE.MUTATIONS.UPDATE_LANG,\n res.data.data.language\n )\n locale.value = res.data.data.language\n }\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n removeAuthUserData(context)\n }\n })\n .catch((error) => {\n handleError(context, error)\n removeAuthUserData(context)\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 removeAuthUserData(context)\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.commit(\n ROOT_STORE.MUTATIONS.UPDATE_LANG,\n res.data.data.language\n )\n locale.value = res.data.data.language\n 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 { ROOT_STORE } from '@/store/constants'\nimport { IRootActions, IRootState } from '@/store/modules/root/types'\nimport { TAppConfigForm } from '@/types/application'\nimport { handleError } from '@/utils'\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}\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 { 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 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\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 if (!timeFormat) {\n timeFormat = 'HH:mm'\n }\n return {\n workout_date: format(dateTime, dateFormat),\n workout_time: format(dateTime, timeFormat),\n }\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 { ROOT_STORE } from '@/store/constants'\nimport { IAuthUserState } from '@/store/modules/authUser/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 error: AxiosError | null,\n msg = 'UNKNOWN'\n): void => {\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 { enUS, fr } from 'date-fns/locale'\n\nimport createI18n from '@/i18n'\n\nexport const localeFromLanguage: Record = {\n en: enUS,\n fr: fr,\n}\n\nexport const languageLabels: Record = {\n en: 'English',\n fr: 'Français',\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 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 { 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 } from '@/utils/dates'\nimport { sportColors } from '@/utils/sports'\nimport { convertStatsDistance } from '@/utils/units'\n\nconst dateFormats: Record> = {\n week: {\n api: 'yyyy-MM-dd',\n chart: 'dd/MM/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): 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(key, dateFormat.chart)\n labels.push(label)\n datasetKeys.map((datasetKey) => {\n datasets[datasetKey].map((dataset) => {\n dataset.data.push(\n apiStats !== {} &&\n date in apiStats &&\n 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 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 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 } from \"vue\"\n\nimport { toRefs, withDefaults } from 'vue'\n\n import Error from '@/components/Common/Error.vue'\n interface Props {\n target?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\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\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(Error, {\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}\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-f38ea1b8\"),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 { TWorkoutsPayload } from '@/types/workouts'\n import { rangePagination } from '@/utils/api'\n\n interface Props {\n pagination: IPagination\n path: string\n query: TWorkoutsPayload | TPaginationPayload\n }\n \nexport default /*#__PURE__*/_defineComponent({\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\n }\n\n \n\n const { pagination, path, query } = toRefs(props)\n\n function getQuery(\n page: number,\n cursor?: number\n ): TWorkoutsPayload | TPaginationPayload {\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=f38ea1b8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f38ea1b8\"]])\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 zxcvbnLangPackages: Record = {\n en: zxcvbnEnPackage,\n fr: zxcvbnFrPackage,\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-79c9693d\"),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 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 let 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=79c9693d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-79c9693d\"]])\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 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 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-68a6a495\"),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): string => {\n const unitFrom = 'km'\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 return `${value.toFixed(2)} ${unitTo}`\n case 'total_ascent':\n case 'total_descent':\n return `${(value / 1000).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 let 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 )\n },\n },\n afterFit: function (scale: LayoutItem) {\n scale.width = props.fullStats ? 75 : 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 )\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 )\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 )\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=7eb1257c&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 let 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 )\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=68a6a495&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=68a6a495&lang=scss&scoped=true\"\n\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-68a6a495\"]])\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 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-1b6fd7df\"),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\n interface Props {\n user: IUserProfile\n fromAdmin?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\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 authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const registrationDate = computed(() =>\n props.user.created_at\n ? format(new Date(props.user.created_at), 'dd/MM/yyyy HH:mm')\n : ''\n )\n const birthDate = computed(() =>\n props.user.birth_date\n ? format(new Date(props.user.birth_date), 'dd/MM/yyyy')\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 let 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 (_unref(displayModal))\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: \n _unref(displayModal) === '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 _unref(displayModal) === '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=1b6fd7df&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1b6fd7df\"]])\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-26d3a7be\"),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 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 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 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 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 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) => ((_unref(formData).username) = $event)),\n placeholder: _ctx.$t('user.USERNAME')\n }, null, 40, _hoisted_4)), [\n [_vModelText, _unref(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) => ((_unref(formData).email) = $event)),\n placeholder: _ctx.$t('user.EMAIL')\n }, null, 40, _hoisted_7)), [\n [_vModelText, _unref(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: _unref(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=26d3a7be&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-26d3a7be\"]])\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 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\"./en/en.ts\": 9350,\n\t\"./fr/fr.ts\": 1079\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\":\"b7d4ded2\",\"93\":\"35a58b95\",\"193\":\"284e20be\",\"243\":\"d80d691c\",\"328\":\"c095abe4\",\"401\":\"9770e7ed\",\"431\":\"0a529e40\",\"633\":\"031db9b5\",\"845\":\"52d627f4\",\"858\":\"62431e1e\",\"881\":\"23cdd304\"}[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\":\"91fe968e\",\"328\":\"73df498d\",\"401\":\"1f6e4a1d\",\"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__(811); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["authApi","axios","baseURL","getApiUrl","interceptors","request","use","config","authToken","store","AUTH_USER_STORE","auth","headers","Authorization","error","Promise","reject","loadLocaleMessages","locales","require","messages","keys","forEach","key","matched","match","length","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","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","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","useI18n","useStore","authUser","computed","getters","isAuthenticated","language","ROOT_STORE","isMenuOpen","ref","openMenu","value","closeMenu","updateLanguage","option","toString","commit","logout","dispatch","_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","onBeforeMount","onMounted","_component_Loader","_component_router_view","_Fragment","NavBar","onMenuInteraction","NoConfig","Footer","admin_contact","message","name","charLimit","disabled","type","Boolean","input","text","updateText","event","watch","_withDirectives","maxLenght","_isRef","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","_hoisted_20","cx","cy","r","sportLabel","color","title","sportColors","inject","_normalizeStyle","fill","CyclingSport","CyclingTransport","Hiking","MountainBiking","MountainBikingElectric","Rowing","Running","SkiingAlpine","SkiingCrossCountry","Snowshoes","Trail","Walking","script","strongMessage","errorMessages","onUnmounted","_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","edition","useRouter","appData","reactive","max_users","max_single_file_size","max_zip_file_size","gpx_limit_import","updateForm","Object","includes","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","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","format","getDateWithTZ","created_at","timezone","nb_workouts","Pagination","tabs","selectedTab","getPath","tab","toLocaleLowerCase","checked","UserHeader","UserProfileTabs","languageLabels","fistDayOfWeek","weekm","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","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","weekStart","imperialUnits","updateTZ","lang","_vModelSelect","TimezoneDropdown","start","unit","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","isEdition","sports_list","sportPayload","sport_id","stopped_speed_threshold","updateSportInEdition","is_active_for_user","resetSportPayload","isSportInEdition","sportId","updateColor","updateThreshold","updateIsActive","updateSport","resetSport","newIsLoading","onChange","e","src","alt","BikePic","About","workout","_component_Distance","params","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","sportColor","records","record","record_type","height","width","colors","datasets","angleOffset","radius","circumference","Math","PI","calculateStrokeDashOffset","percentage","returnCircleTransformValue","rotation","entries","data","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","reverse","row","isSameMonth","today","isToday","CalendarWorkouts","localeOptions","dateFormat","calendarDates","getCalendarStartAndEnd","calendarWorkouts","getCalendarWorkouts","apiParams","from","end","displayNextMonth","addMonths","displayPreviousMonth","subMonths","CalendarHeader","onDisplayNextMonth","onDisplayPreviousMonth","CalendarDays","CalendarCells","date","chartParams","duration","startOfMonth","endOfMonth","selectedSportIds","StatChart","sportTranslatedLabel","workout_id","formatRecord","Error","formatWorkoutDate","getRecordsBySports","reduce","sportList","find","recordsBySport","RecordsCard","userTotalDuration","total_duration","totalDuration","get_duration","defaultUnitFrom","totalDistance","total_distance","split","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","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","RootActions","RootGetters","RootMutations","SportsActions","SportsGetters","SportsMutation","StatisticsActions","StatisticsGetters","StatisticsMutations","UsersActions","UsersGetters","UsersMutations","ACTIONS","GETTERS","MUTATIONS","STATS_STORE","WorkoutsActions","WorkoutsGetters","WorkoutsMutations","deleteUserAccount","context","res","status","handleError","actions","finally","resetPassword","reset_password","activate","new_email","removeAuthUserData","localStorage","removeItem","token","auth_token","setItem","refreshUser","actionType","redirectUrl","form","FormData","append","state","authUserProfile","isRegistrationSuccess","mutations","authUserState","application","localeFromLanguage","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","sportsModule","statsModule","usersModule","workoutsModule","createStore","VuexStore","defaultPage","defaultPerPage","getNumberQueryValue","defaultValue","getStringQueryValue","availableValues","locationQuery","queryOptions","defaultSort","order","workoutsPayloadKeys","getRange","stop","rangePagination","pages","currentPage","getStartDate","startOfWeek","weekStartsOn","startOfYear","incrementDate","addYears","dateInUTC","utcToZonedTime","monthStart","monthEnd","endOfWeek","dateTime","timeFormat","workout_time","suffixes","fileSize","asText","floor","pow","msg","response","m","en","fr","availableLocales","l","sortSports","a","b","sportATranslatedLabel","sportBTranslatedLabel","activeStatus","sportsToInclude","dateFormats","week","chart","month","year","datasetKeys","getDateKeys","getStatisticsChartDataset","isLineChart","dataset","backgroundColor","borderColor","spanGaps","getDatasets","displayedSports","average_speed","total_ascent","total_descent","convertStatsValue","datasetKey","convertStatsDistance","formatStats","displayedSportsId","apiStats","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","cursor","has_prev","navigate","has_next","active","setZxcvbnOptions","zxcvbnCommonPackage","zxcvbnEnPackage","zxcvbnFrPackage","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","JSON","parse","stringify","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","splice","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","obj","__proto__","this","ns","create","def","current","indexOf","getOwnPropertyNames","definition","defineProperty","enumerable","get","f","chunkId","all","promises","u","miniCssF","g","globalThis","Function","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","url","done","needAttach","scripts","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","setAttribute","onScriptComplete","prev","onerror","onload","clearTimeout","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.2222dbc7.js","mappings":"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G,GAAY,EACrCH,EAAAA,EAAAA,GAAoB,SAAU,CAC5B0G,KAAM,SACND,WAAW9E,EAAAA,EAAAA,IAAOoV,KACjBrV,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,gCAAiC,EAAG3B,KAC/DuB,EAAAA,EAAAA,IAAOlD,GAAM2Y,UACT7V,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,SAAU,CAC3CnF,IAAK,EACLwD,MAAO,SACP4D,QAASuT,IACRtV,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,gCAAiC,KAC7DE,EAAAA,EAAAA,IAAoB,IAAI,IAC5BjC,EAAAA,EAAAA,GAAoB,SAAU,CAC5BH,MAAO,SACP4D,QAASrC,EAAO,KAAOA,EAAO,GAAMsC,GAAiBvC,EAAKwC,QAAQC,KAAK,eACtElC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,iCAAkC,MAE/D,GAAIjC,YCjHb,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,UCRO,MAAMwX,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,mBACA,iBACA,eACA,mBACA,uBACA,kBACA,gBACA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","sources":["webpack://fittrackee_client/./src/api/authApi.ts","webpack://fittrackee_client/./src/i18n.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/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/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/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/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/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/components/Dashboard/UserRecords/RecordsCard.vue?9439","webpack://fittrackee_client/./src/components/Dashboard/UserRecords/RecordsCard.vue","webpack://fittrackee_client/./src/utils/records.ts","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/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/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?514a","webpack://fittrackee_client/./src/components/Common/StatsChart/Chart.vue?1909","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 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 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\nexport default authApi\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 */\nfunction loadLocaleMessages(): LocaleMessages {\n const locales = require.context('./locales', true, /[A-Za-z0-9-_,\\s]+\\.ts$/i)\n const messages: LocaleMessages = {}\n locales.keys().forEach((key) => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n if (matched && matched.length > 1) {\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([\"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 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 \"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 \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Home\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"here\"])},\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 \"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 \"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 \"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 \"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 \"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_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 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 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 license \", _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([\"Email : une adresse email valide doit être fournie.\"])},\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 email 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 email 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([\"Envoyer à nouveau l'email de confirmation\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Précédent\"])},\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 \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation (en)\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accueil\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ici\"])},\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\"])}\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 \"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 \"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 (Electrique)\"])}\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 votre boite mail. Un nouvel email de confirmation a été envoyé à l'adresse email 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 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([\"Email\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisir une adresse email valide.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisir 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 votre boite mail. Si vote adresse est dans notre base de données, vous recevrez un email 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 \"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 \"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 email 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 \"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 boite email pour valider votre nouvelle adresse email.\"])},\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 email 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 l'email 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_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 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 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 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, unref as _unref, normalizeClass as _normalizeClass, 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-0d4f0b8f\"),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 import { useI18n } from 'vue-i18n'\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 emits: ['menuInteraction'],\n setup(__props, { emit }) {\n\n \n\n const { locale } = useI18n()\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 let 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 locale.value = option.value.toString()\n store.commit(ROOT_STORE.MUTATIONS.UPDATE_LANG, option.value)\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': _unref(isMenuOpen) }])\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': _unref(isMenuOpen) }])\n }, [\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-close close-icon nav-item\", { 'menu-closed': !_unref(isMenuOpen) }]),\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=0d4f0b8f&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-0d4f0b8f\"]])\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 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\n \nexport default /*#__PURE__*/_defineComponent({\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(() => store.dispatch(ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG))\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 let 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\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=c446fb44&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 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 { unref as _unref, isRef as _isRef, 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-3ec2aca2\"),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\n }\n \nexport default /*#__PURE__*/_defineComponent({\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 }\n\n \n\n \n\n let 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\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) => (_isRef(text) ? (text).value = $event : text = $event)),\n onInput: updateText\n }, null, 40, _hoisted_2), [\n [_vModelText, _unref(text)]\n ]),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('workouts.REMAINING_CHARS')) + \": \" + _toDisplayString(_unref(text).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=3ec2aca2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3ec2aca2\"]])\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, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-f46ff1d6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = /*#__PURE__*/_createTextVNode(\" \" + /*#__PURE__*/_toDisplayString(' ') + \" \")\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 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 _hoisted_1,\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-ca61364c\"),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 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 let isOpen = ref(false)\n let 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 (_unref(isOpen))\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=ca61364c&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-ca61364c\"]])\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 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 \"./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 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 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) === 'Hiking')\n ? (_openBlock(), _createBlock(Hiking, { key: 2 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking')\n ? (_openBlock(), _createBlock(MountainBiking, { key: 3 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking (Electric)')\n ? (_openBlock(), _createBlock(MountainBikingElectric, { key: 4 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Rowing')\n ? (_openBlock(), _createBlock(Rowing, { key: 5 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Running')\n ? (_openBlock(), _createBlock(Running, { key: 6 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Alpine)')\n ? (_openBlock(), _createBlock(SkiingAlpine, { key: 7 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Cross Country)')\n ? (_openBlock(), _createBlock(SkiingCrossCountry, { key: 8 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Snowshoes')\n ? (_openBlock(), _createBlock(Snowshoes, { key: 9 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Trail')\n ? (_openBlock(), _createBlock(Trail, { key: 10 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Walking')\n ? (_openBlock(), _createBlock(Walking, { key: 11 }))\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 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 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) && !_unref(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) => ((_unref(appData).admin_contact) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_5)), [\n [_vModelText, _unref(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) => ((_unref(appData).max_users) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_7), [\n [_vModelText, _unref(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) => ((_unref(appData).max_single_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_12), [\n [_vModelText, _unref(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) => ((_unref(appData).max_zip_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_14), [\n [_vModelText, _unref(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) => ((_unref(appData).gpx_limit_import) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_16), [\n [_vModelText, _unref(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 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 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 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 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 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-4735c10f\"),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 { format } from 'date-fns'\n import {\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 { getDateWithTZ } from '@/utils/dates'\n\n \nexport default /*#__PURE__*/_defineComponent({\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(format)(\n _unref(getDateWithTZ)(user.created_at, _unref(authUser).timezone),\n 'dd/MM/yyyy HH:mm'\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=4735c10f&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4735c10f\"]])\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 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 '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) === 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=40025245&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-e26535e0\"),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 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']\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=e26535e0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-e26535e0\"]])\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 } from 'vue'\n\n import { IUserProfile } from '@/types/user'\n import { languageLabels } from '@/utils/locales'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const language = 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\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(language)), 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.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 ]),\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 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 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) => ((_unref(userForm).email) = $event)),\n disabled: _unref(loading),\n required: true,\n onInvalid: invalidateForm\n }, null, 40, _hoisted_6), [\n [_vModelText, _unref(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: _unref(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: _unref(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-b6bacea0\"),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 } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\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 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 ? format(new Date(props.user.created_at), 'dd/MM/yyyy HH:mm')\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) => ((_unref(userForm).first_name) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_7), [\n [_vModelText, _unref(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) => ((_unref(userForm).last_name) = $event))\n }, null, 512), [\n [_vModelText, _unref(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) => ((_unref(userForm).birth_date) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_10), [\n [_vModelText, _unref(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) => ((_unref(userForm).location) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_12), [\n [_vModelText, _unref(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: _unref(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=b6bacea0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b6bacea0\"]])\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-3a97bb3c\"),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 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 let 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: !_unref(pictureFile)\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=3a97bb3c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3a97bb3c\"]])\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 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 } from \"vue\"\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\" }\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = [\"value\"]\nconst _hoisted_14 = { class: \"form-buttons\" }\nconst _hoisted_15 = {\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 { IUserProfile, IUserPreferencesPayload } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { availableLanguages } from '@/utils/locales'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\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 userForm: IUserPreferencesPayload = reactive({\n imperial_units: false,\n language: '',\n timezone: 'Europe/Paris',\n weekm: false,\n })\n const weekStart = [\n {\n label: 'MONDAY',\n value: true,\n },\n {\n label: 'SUNDAY',\n value: false,\n },\n ]\n const imperialUnits = [\n {\n label: 'IMPERIAL',\n value: true,\n },\n {\n label: 'METRIC',\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\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function updateUserForm(user: IUserProfile) {\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.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\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) => ((_unref(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, _unref(userForm).language]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.TIMEZONE')) + \" \", 1),\n _createVNode(TimezoneDropdown, {\n input: _unref(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.FIRST_DAY_OF_WEEK')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"weekm\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_unref(userForm).weekm) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(weekStart, (start) => {\n return _createElementVNode(\"option\", {\n value: start.value,\n key: start.value\n }, _toDisplayString(_ctx.$t(`user.PROFILE.${start.label}`)), 9, _hoisted_10)\n }), 64))\n ], 8, _hoisted_9), [\n [_vModelSelect, _unref(userForm).weekm]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.UNITS.LABEL')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"imperial_units\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_unref(userForm).imperial_units) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(imperialUnits, (unit) => {\n return _createElementVNode(\"option\", {\n value: unit.value,\n key: unit.value\n }, _toDisplayString(_ctx.$t(`user.PROFILE.UNITS.${unit.label}`)), 9, _hoisted_13)\n }), 64))\n ], 8, _hoisted_12), [\n [_vModelSelect, _unref(userForm).imperial_units]\n ])\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[3] || (_cache[3] = _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\nconst __exports__ = script;\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-4775544a\"),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 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 sportColors = 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 ? sport.color : sportColors[sport.label]\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: _unref(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) && _unref(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: _unref(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 (_unref(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=4775544a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4775544a\"]])\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 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 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-c9d1f10c\"),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 = /*#__PURE__*/_createTextVNode(\"/ \")\nconst _hoisted_18 = {\n key: 1,\n class: \"data altitude\"\n}\nconst _hoisted_19 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_20 = { class: \"data-values\" }\nconst _hoisted_21 = /*#__PURE__*/_createTextVNode(\" +\")\nconst _hoisted_22 = /*#__PURE__*/_createTextVNode(\"/- \")\n\nimport { Locale, format, 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 { getDateWithTZ } 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 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(format)(\n _unref(getDateWithTZ)(_unref(workout).workout_date, _unref(user).timezone),\n 'dd/MM/yyyy HH:mm'\n )\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 _hoisted_17,\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_18, [\n _hoisted_19,\n _createElementVNode(\"div\", _hoisted_20, [\n _hoisted_21,\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 _hoisted_22,\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=c9d1f10c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-c9d1f10c\"]])\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-9ef2a9ac\"),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 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 let 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=9ef2a9ac&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9ef2a9ac\"]])\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 workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n props: {\n workout: null,\n sportLabel: null,\n sportColor: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n\n \n\n const { 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.map(\n (record) => ` ${_ctx.$t(`workouts.RECORD_${record.record_type}`)}`\n )\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=7de0052b&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 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 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 workouts: IWorkout[]\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n props: {\n workouts: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n workouts: IWorkout[]\n sports: ISport[]\n }\n\n \n\n const { 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 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 : (_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=4663dbac&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 endDate: Date\n sports: ISport[]\n startDate: Date\n timezone: string\n weekStartingMonday: boolean\n workouts: IWorkout[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n props: {\n currentDay: null,\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 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 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 }, null, 8, [\"workouts\", \"sports\"]),\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=73426002&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 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 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 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 let day = ref(new Date())\n let 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: _unref(day),\n \"locale-options\": _unref(localeOptions),\n onDisplayNextMonth: displayNextMonth,\n onDisplayPreviousMonth: displayPreviousMonth\n }, null, 8, [\"day\", \"locale-options\"]),\n _createVNode(CalendarDays, {\n \"start-date\": _unref(calendarDates).start,\n \"locale-options\": _unref(localeOptions)\n }, null, 8, [\"start-date\", \"locale-options\"]),\n _createVNode(CalendarCells, {\n currentDay: _unref(day),\n \"end-date\": _unref(calendarDates).end,\n sports: _unref(sports),\n \"start-date\": _unref(calendarDates).start,\n timezone: _unref(user).timezone,\n workouts: _unref(calendarWorkouts),\n weekStartingMonday: _unref(user).weekm\n }, null, 8, [\"currentDay\", \"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=4b0ade2c&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 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 { 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-aee1f956\"),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\n import { IRecordsBySports } from '@/types/workouts'\n\n interface Props {\n records: IRecordsBySports\n sportTranslatedLabel: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\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\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(_unref(records).records, (record) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"record\",\n key: record.id\n }, [\n _createElementVNode(\"span\", _hoisted_2, _toDisplayString(_ctx.$t(`workouts.RECORD_${record.record_type}`)), 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=aee1f956&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-aee1f956\"]])\n\nexport default __exports__","import { ITranslatedSport } from '@/types/sports'\nimport { TUnit } from '@/types/units'\nimport { IRecord, IRecordsBySports } from '@/types/workouts'\nimport { formatWorkoutDate, getDateWithTZ } from '@/utils/dates'\nimport { convertDistance, units } from '@/utils/units'\n\nexport const formatRecord = (\n record: IRecord,\n tz: string,\n useImperialUnits: boolean\n): Record => {\n const unitFrom: TUnit = 'km'\n const unitTo: TUnit = useImperialUnits\n ? units[unitFrom].defaultTarget\n : unitFrom\n let value\n switch (record.record_type) {\n case 'AS':\n case 'MS':\n value = `${convertDistance(\n +record.value,\n unitFrom,\n unitTo,\n 2\n )} ${unitTo}/h`\n break\n case 'FD':\n value = `${convertDistance(+record.value, unitFrom, unitTo, 3)} ${unitTo}`\n break\n case 'LD':\n value = record.value\n break\n default:\n throw new Error(\n `Invalid record type, expected: \"AS\", \"FD\", \"LD\", \"MD\", got: \"${record.record_type}\"`\n )\n }\n return {\n workout_date: formatWorkoutDate(getDateWithTZ(record.workout_date, tz))\n .workout_date,\n workout_id: record.workout_id,\n id: record.id,\n record_type: record.record_type,\n value: value,\n }\n}\n\nexport const getRecordsBySports = (\n records: IRecord[],\n translatedSports: ITranslatedSport[],\n tz: string,\n useImperialUnits: boolean\n): IRecordsBySports =>\n records.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)\n )\n }\n return sportList\n }, {})\n","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-ae25a82a\"),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 { IUserProfile } from '@/types/user'\n import { getRecordsBySports } from '@/utils/records'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n sports: ISport[]\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\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 { 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 )\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=ae25a82a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-ae25a82a\"]])\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 { 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 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 defaultUnitFrom: TUnit = 'km'\n const unitTo: TUnit = user.value.imperial_units\n ? units[defaultUnitFrom].defaultTarget\n : defaultUnitFrom\n const totalDistance: ComputedRef = computed(() =>\n user.value.imperial_units\n ? convertDistance(user.value.total_distance, defaultUnitFrom, unitTo, 2)\n : parseFloat(user.value.total_distance.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(unitTo) === 'mi' ? 'miles' : _unref(unitTo)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"clock-o\",\n value: _unref(totalDuration).days,\n text: _unref(totalDuration).duration\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\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 ]))\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=6c24b4fa&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-20e19721\"),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, 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 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 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=20e19721&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-20e19721\"]])\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 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 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 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 },\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 RootActions {\n GET_APPLICATION_CONFIG = 'GET_APPLICATION_CONFIG',\n GET_APPLICATION_STATS = 'GET_APPLICATION_STATS',\n UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',\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 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}\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 { getApiUrl } from '@/utils'\n\nconst api = axios.create({\n baseURL: getApiUrl(),\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 createI18n from '@/i18n'\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 { locale } = createI18n.global\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 },\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.commit(\n ROOT_STORE.MUTATIONS.UPDATE_LANG,\n res.data.data.language\n )\n locale.value = res.data.data.language\n }\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n removeAuthUserData(context)\n }\n })\n .catch((error) => {\n handleError(context, error)\n removeAuthUserData(context)\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 removeAuthUserData(context)\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.commit(\n ROOT_STORE.MUTATIONS.UPDATE_LANG,\n res.data.data.language\n )\n locale.value = res.data.data.language\n 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 { ROOT_STORE } from '@/store/constants'\nimport { IRootActions, IRootState } from '@/store/modules/root/types'\nimport { TAppConfigForm } from '@/types/application'\nimport { handleError } from '@/utils'\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}\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 { 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 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\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 if (!timeFormat) {\n timeFormat = 'HH:mm'\n }\n return {\n workout_date: format(dateTime, dateFormat),\n workout_time: format(dateTime, timeFormat),\n }\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 { ROOT_STORE } from '@/store/constants'\nimport { IAuthUserState } from '@/store/modules/authUser/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 error: AxiosError | null,\n msg = 'UNKNOWN'\n): void => {\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 { enUS, fr } from 'date-fns/locale'\n\nimport createI18n from '@/i18n'\n\nexport const localeFromLanguage: Record = {\n en: enUS,\n fr: fr,\n}\n\nexport const languageLabels: Record = {\n en: 'English',\n fr: 'Français',\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 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 { 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 } from '@/utils/dates'\nimport { sportColors } from '@/utils/sports'\nimport { convertStatsDistance } from '@/utils/units'\n\nconst dateFormats: Record> = {\n week: {\n api: 'yyyy-MM-dd',\n chart: 'dd/MM/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): 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(key, dateFormat.chart)\n labels.push(label)\n datasetKeys.map((datasetKey) => {\n datasets[datasetKey].map((dataset) => {\n dataset.data.push(\n apiStats !== {} &&\n date in apiStats &&\n 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 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 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 } from \"vue\"\n\nimport { toRefs, withDefaults } from 'vue'\n\n import Error from '@/components/Common/Error.vue'\n interface Props {\n target?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\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\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(Error, {\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}\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-f38ea1b8\"),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 { TWorkoutsPayload } from '@/types/workouts'\n import { rangePagination } from '@/utils/api'\n\n interface Props {\n pagination: IPagination\n path: string\n query: TWorkoutsPayload | TPaginationPayload\n }\n \nexport default /*#__PURE__*/_defineComponent({\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\n }\n\n \n\n const { pagination, path, query } = toRefs(props)\n\n function getQuery(\n page: number,\n cursor?: number\n ): TWorkoutsPayload | TPaginationPayload {\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=f38ea1b8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f38ea1b8\"]])\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 zxcvbnLangPackages: Record = {\n en: zxcvbnEnPackage,\n fr: zxcvbnFrPackage,\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-79c9693d\"),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 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 let 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=79c9693d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-79c9693d\"]])\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 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 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-68a6a495\"),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): string => {\n const unitFrom = 'km'\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 return `${value.toFixed(2)} ${unitTo}`\n case 'total_ascent':\n case 'total_descent':\n return `${(value / 1000).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 let 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 )\n },\n },\n afterFit: function (scale: LayoutItem) {\n scale.width = props.fullStats ? 75 : 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 )\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 )\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 )\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=7eb1257c&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 let 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 )\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=68a6a495&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=68a6a495&lang=scss&scoped=true\"\n\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-68a6a495\"]])\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 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-1b6fd7df\"),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\n interface Props {\n user: IUserProfile\n fromAdmin?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\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 authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const registrationDate = computed(() =>\n props.user.created_at\n ? format(new Date(props.user.created_at), 'dd/MM/yyyy HH:mm')\n : ''\n )\n const birthDate = computed(() =>\n props.user.birth_date\n ? format(new Date(props.user.birth_date), 'dd/MM/yyyy')\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 let 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 (_unref(displayModal))\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: \n _unref(displayModal) === '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 _unref(displayModal) === '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=1b6fd7df&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1b6fd7df\"]])\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-26d3a7be\"),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 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 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 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 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 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) => ((_unref(formData).username) = $event)),\n placeholder: _ctx.$t('user.USERNAME')\n }, null, 40, _hoisted_4)), [\n [_vModelText, _unref(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) => ((_unref(formData).email) = $event)),\n placeholder: _ctx.$t('user.EMAIL')\n }, null, 40, _hoisted_7)), [\n [_vModelText, _unref(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: _unref(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=26d3a7be&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-26d3a7be\"]])\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 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\"./en/en.ts\": 9350,\n\t\"./fr/fr.ts\": 1079\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\":\"b7d4ded2\",\"93\":\"35a58b95\",\"193\":\"284e20be\",\"243\":\"d80d691c\",\"328\":\"c095abe4\",\"401\":\"4c428272\",\"431\":\"0a529e40\",\"633\":\"031db9b5\",\"845\":\"52d627f4\",\"858\":\"62431e1e\",\"881\":\"23cdd304\"}[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\":\"91fe968e\",\"328\":\"73df498d\",\"401\":\"1f6e4a1d\",\"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__(811); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["authApi","axios","baseURL","getApiUrl","interceptors","request","use","config","authToken","store","AUTH_USER_STORE","auth","headers","Authorization","error","Promise","reject","loadLocaleMessages","locales","require","messages","keys","forEach","key","matched","match","length","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","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","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","useI18n","useStore","authUser","computed","getters","isAuthenticated","language","ROOT_STORE","isMenuOpen","ref","openMenu","value","closeMenu","updateLanguage","option","toString","commit","logout","dispatch","_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","onBeforeMount","onMounted","_component_Loader","_component_router_view","_Fragment","NavBar","onMenuInteraction","NoConfig","Footer","admin_contact","message","name","charLimit","disabled","type","Boolean","input","text","updateText","event","watch","_withDirectives","maxLenght","_isRef","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","_hoisted_20","cx","cy","r","sportLabel","color","title","sportColors","inject","_normalizeStyle","fill","CyclingSport","CyclingTransport","Hiking","MountainBiking","MountainBikingElectric","Rowing","Running","SkiingAlpine","SkiingCrossCountry","Snowshoes","Trail","Walking","script","strongMessage","errorMessages","onUnmounted","_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","edition","useRouter","appData","reactive","max_users","max_single_file_size","max_zip_file_size","gpx_limit_import","updateForm","Object","includes","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","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","format","getDateWithTZ","created_at","timezone","nb_workouts","Pagination","tabs","selectedTab","getPath","tab","toLocaleLowerCase","checked","UserHeader","UserProfileTabs","languageLabels","fistDayOfWeek","weekm","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","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","weekStart","imperialUnits","updateTZ","lang","_vModelSelect","TimezoneDropdown","start","unit","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","isEdition","sports_list","sportPayload","sport_id","stopped_speed_threshold","updateSportInEdition","is_active_for_user","resetSportPayload","isSportInEdition","sportId","updateColor","updateThreshold","updateIsActive","updateSport","resetSport","newIsLoading","onChange","e","src","alt","BikePic","About","workout","_component_Distance","params","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","sportColor","records","record","record_type","height","width","colors","datasets","angleOffset","radius","circumference","Math","PI","calculateStrokeDashOffset","percentage","returnCircleTransformValue","rotation","entries","data","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","reverse","row","isSameMonth","today","isToday","CalendarWorkouts","localeOptions","dateFormat","calendarDates","getCalendarStartAndEnd","calendarWorkouts","getCalendarWorkouts","apiParams","from","end","displayNextMonth","addMonths","displayPreviousMonth","subMonths","CalendarHeader","onDisplayNextMonth","onDisplayPreviousMonth","CalendarDays","CalendarCells","date","chartParams","duration","startOfMonth","endOfMonth","selectedSportIds","StatChart","sportTranslatedLabel","workout_id","formatRecord","Error","formatWorkoutDate","getRecordsBySports","reduce","sportList","find","recordsBySport","RecordsCard","userTotalDuration","total_duration","totalDuration","get_duration","defaultUnitFrom","totalDistance","total_distance","split","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","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","RootActions","RootGetters","RootMutations","SportsActions","SportsGetters","SportsMutation","StatisticsActions","StatisticsGetters","StatisticsMutations","UsersActions","UsersGetters","UsersMutations","ACTIONS","GETTERS","MUTATIONS","STATS_STORE","WorkoutsActions","WorkoutsGetters","WorkoutsMutations","deleteUserAccount","context","res","status","handleError","actions","finally","resetPassword","reset_password","activate","new_email","removeAuthUserData","localStorage","removeItem","token","auth_token","setItem","refreshUser","actionType","redirectUrl","form","FormData","append","state","authUserProfile","isRegistrationSuccess","mutations","authUserState","application","localeFromLanguage","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","sportsModule","statsModule","usersModule","workoutsModule","createStore","VuexStore","defaultPage","defaultPerPage","getNumberQueryValue","defaultValue","getStringQueryValue","availableValues","locationQuery","queryOptions","defaultSort","order","workoutsPayloadKeys","getRange","stop","rangePagination","pages","currentPage","getStartDate","startOfWeek","weekStartsOn","startOfYear","incrementDate","addYears","dateInUTC","utcToZonedTime","monthStart","monthEnd","endOfWeek","dateTime","timeFormat","workout_time","suffixes","fileSize","asText","floor","pow","msg","response","m","en","fr","availableLocales","l","sortSports","a","b","sportATranslatedLabel","sportBTranslatedLabel","activeStatus","sportsToInclude","dateFormats","week","chart","month","year","datasetKeys","getDateKeys","getStatisticsChartDataset","isLineChart","dataset","backgroundColor","borderColor","spanGaps","getDatasets","displayedSports","average_speed","total_ascent","total_descent","convertStatsValue","datasetKey","convertStatsDistance","formatStats","displayedSportsId","apiStats","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","cursor","has_prev","navigate","has_next","active","setZxcvbnOptions","zxcvbnCommonPackage","zxcvbnEnPackage","zxcvbnFrPackage","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","JSON","parse","stringify","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","splice","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","obj","__proto__","this","ns","create","def","current","indexOf","getOwnPropertyNames","definition","defineProperty","enumerable","get","f","chunkId","all","promises","u","miniCssF","g","globalThis","Function","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","url","done","needAttach","scripts","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","setAttribute","onScriptComplete","prev","onerror","onload","clearTimeout","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/workouts.9770e7ed.js b/fittrackee/dist/static/js/workouts.4c428272.js similarity index 99% rename from fittrackee/dist/static/js/workouts.9770e7ed.js rename to fittrackee/dist/static/js/workouts.4c428272.js index 130deb64..6a00b56b 100644 --- a/fittrackee/dist/static/js/workouts.9770e7ed.js +++ b/fittrackee/dist/static/js/workouts.4c428272.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[401],{4611:function(t,e,o){o.d(e,{Z:function(){return et}});var a=o(5793),n=o(3577),l=o(2715),r=o(9963),s=o(3324),i=o(2119),u=o(8602),d=o(9917),c=o(6558),p=o(8966),m=o(631),w=o(3649);const f={id:"workout-form"},k=["onSubmit"],v={class:"form-items"},g={key:0,class:"form-item-radio"},_=["checked","disabled"],S={for:"withGpx"},y=["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},x={class:"workout-date-duration"},N={class:"form-item"},z={class:"workout-date-time"},L=["disabled"],j=["disabled"],W={class:"form-item"},B=["disabled"],P=(0,a.Uk)(" : "),F=["disabled"],M=(0,a.Uk)(" : "),H=["disabled"],Z={class:"form-item"},q=["disabled"],G={class:"form-item"},K={key:1},Y={key:2,class:"form-buttons"},V=["disabled"],J=["onClick"];var X=(0,a.aZ)({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)(),X=(0,d.o)(),Q=(0,i.tv)(),{authUser:tt,workout:et,isCreation:ot,loading:at}=(0,l.BK)(e),nt=(0,a.Fl)((()=>(0,m.xH)(e.sports,o,"is_active_for_user",et.value.id?[et.value.sport_id]:[]))),lt=(0,a.Fl)((()=>X.getters[u.SY.GETTERS.APP_CONFIG])),rt=lt.value.max_single_file_size?(0,p.Z)(lt.value.max_single_file_size):"",st=lt.value.gpx_limit_import,it=lt.value.max_zip_file_size?(0,p.Z)(lt.value.max_zip_file_size):"",ut=(0,a.Fl)((()=>X.getters[u.SY.GETTERS.ERROR_MESSAGES])),dt=(0,l.qj)({sport_id:"",title:"",notes:"",workoutDate:"",workoutTime:"",workoutDurationHour:"",workoutDurationMinutes:"",workoutDurationSeconds:"",workoutDistance:""});let ct=(0,l.iH)(e.workout.id?e.workout.with_gpx:e.isCreation),pt=null;const mt=(0,l.iH)(!1);function wt(t){dt.notes=t}function ft(){ct.value=!ct.value,mt.value=!1}function kt(t){t.target.files&&(pt=t.target.files[0])}function vt(t){if(dt.sport_id=`${t.sport_id}`,dt.title=t.title,dt.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(":");dt.workoutDistance=`${tt.value.imperial_units?(0,w.sC)(t.distance,"km","mi",2):parseFloat(t.distance.toFixed(2))}`,dt.workoutDate=o.workout_date,dt.workoutTime=o.workout_time,dt.workoutDurationHour=a[0],dt.workoutDurationMinutes=a[1],dt.workoutDurationSeconds=a[2]}}function gt(t){t.title=dt.title,t.distance=tt.value.imperial_units?(0,w.sC)(+dt.workoutDistance,"mi","km",3):+dt.workoutDistance,t.duration=3600*+dt.workoutDurationHour+60*+dt.workoutDurationMinutes+ +dt.workoutDurationSeconds,t.workout_date=`${dt.workoutDate} ${dt.workoutTime}`}function _t(){const t={sport_id:+dt.sport_id,notes:dt.notes};if(e.workout.id)e.workout.with_gpx?t.title=dt.title:gt(t),X.dispatch(u.aX.ACTIONS.EDIT_WORKOUT,{workoutId:e.workout.id,data:t});else if(ct.value){if(!pt){const t="workouts.NO_FILE_PROVIDED";return void X.commit(u.SY.MUTATIONS.SET_ERROR_MESSAGES,t)}t.file=pt,X.dispatch(u.aX.ACTIONS.ADD_WORKOUT,t)}else gt(t),X.dispatch(u.aX.ACTIONS.ADD_WORKOUT_WITHOUT_GPX,t)}function St(){e.workout.id?Q.push({name:"Workout",params:{workoutId:e.workout.id}}):Q.go(-1)}function yt(){mt.value=!0}return(0,a.bv)((()=>{e.workout.id&&vt(e.workout)})),(0,a.Ah)((()=>X.commit(u.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(0,a.YP)((()=>e.workout),(async(t,e)=>{t!==e&&t&&t.id&&vt(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)(et)&&(0,l.SU)(et).with_gpx}])},[(0,a.Wm)(u,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,n.zw)(t.$t(`workouts.${(0,l.SU)(ot)?"ADD":"EDIT"}_WORKOUT`)),1)])),content:(0,a.w5)((()=>[(0,a._)("div",f,[(0,a._)("form",{class:(0,n.C_)({errors:mt.value}),onSubmit:(0,r.iM)(_t,["prevent"])},[(0,a._)("div",v,[(0,l.SU)(ot)?((0,a.wg)(),(0,a.iD)("div",g,[(0,a._)("div",null,[(0,a._)("input",{id:"withGpx",type:"radio",checked:(0,l.SU)(ct),disabled:(0,l.SU)(at),onClick:ft},null,8,_),(0,a._)("label",S,(0,n.zw)(t.$t("workouts.WITH_GPX")),1)]),(0,a._)("div",null,[(0,a._)("input",{id:"withoutGpx",type:"radio",checked:!(0,l.SU)(ct),disabled:(0,l.SU)(at),onClick:ft},null,8,y),(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:yt,disabled:(0,l.SU)(at),"onUpdate:modelValue":e[0]||(e[0]=t=>(0,l.SU)(dt).sport_id=t)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,l.SU)(nt),(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,(0,l.SU)(dt).sport_id]])]),(0,l.SU)(ot)&&(0,l.SU)(ct)?((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)(at),required:"",onInvalid:yt,onInput:kt},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)(rt)),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)(st)),1),(0,a._)("li",null,(0,n.zw)(t.$t("workouts.MAX_SIZE"))+": "+(0,n.zw)((0,l.SU)(it)),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)(ot),onInvalid:yt,disabled:(0,l.SU)(at),"onUpdate:modelValue":e[1]||(e[1]=t=>(0,l.SU)(dt).title=t)},null,40,R),[[r.nr,(0,l.SU)(dt).title]])])),(0,l.SU)(ct)?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("div",$,[(0,a._)("div",x,[(0,a._)("div",N,[(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:yt,disabled:(0,l.SU)(at),"onUpdate:modelValue":e[2]||(e[2]=t=>(0,l.SU)(dt).workoutDate=t)},null,40,L),[[r.nr,(0,l.SU)(dt).workoutDate]]),(0,a.wy)((0,a._)("input",{id:"workout-time",name:"workout-time",class:"workout-time",type:"time",required:"",onInvalid:yt,disabled:(0,l.SU)(at),"onUpdate:modelValue":e[3]||(e[3]=t=>(0,l.SU)(dt).workoutTime=t)},null,40,j),[[r.nr,(0,l.SU)(dt).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:yt,disabled:(0,l.SU)(at),"onUpdate:modelValue":e[4]||(e[4]=t=>(0,l.SU)(dt).workoutDurationHour=t)},null,40,B),[[r.nr,(0,l.SU)(dt).workoutDurationHour]]),P,(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:yt,disabled:(0,l.SU)(at),"onUpdate:modelValue":e[5]||(e[5]=t=>(0,l.SU)(dt).workoutDurationMinutes=t)},null,40,F),[[r.nr,(0,l.SU)(dt).workoutDurationMinutes]]),M,(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:yt,disabled:(0,l.SU)(at),"onUpdate:modelValue":e[6]||(e[6]=t=>(0,l.SU)(dt).workoutDurationSeconds=t)},null,40,H),[[r.nr,(0,l.SU)(dt).workoutDurationSeconds]])])])]),(0,a._)("div",Z,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.DISTANCE"))+" ("+(0,n.zw)((0,l.SU)(tt).imperial_units?"mi":"km")+"): ",1),(0,a.wy)((0,a._)("input",{name:"workout-distance",type:"number",min:"0",step:"0.001",required:"",onInvalid:yt,disabled:(0,l.SU)(at),"onUpdate:modelValue":e[7]||(e[7]=t=>(0,l.SU)(dt).workoutDistance=t)},null,40,q),[[r.nr,(0,l.SU)(dt).workoutDistance]])])])),(0,a._)("div",G,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.NOTES"))+": ",1),(0,a.Wm)(o,{name:"notes",input:(0,l.SU)(dt).notes,disabled:(0,l.SU)(at),onUpdateValue:wt},null,8,["input","disabled"])])]),(0,l.SU)(ut)?((0,a.wg)(),(0,a.j4)(s,{key:0,message:(0,l.SU)(ut)},null,8,["message"])):(0,a.kq)("",!0),(0,l.SU)(at)?((0,a.wg)(),(0,a.iD)("div",K,[(0,a.Wm)(i)])):((0,a.wg)(),(0,a.iD)("div",Y,[(0,a._)("button",{class:"confirm",type:"submit",disabled:(0,l.SU)(at)},(0,n.zw)(t.$t("buttons.SUBMIT")),9,V),(0,a._)("button",{class:"cancel",onClick:(0,r.iM)(St,["prevent"])},(0,n.zw)(t.$t("buttons.CANCEL")),9,J)]))],42,k)])])),_:1})],2)}}}),Q=o(3744);const tt=(0,Q.Z)(X,[["__scopeId","data-v-9dea86c6"]]);var et=tt},4189:function(t,e,o){o.r(e),o.d(e,{default:function(){return p}});var a=o(5793),n=o(2715),l=o(4611),r=o(8602),s=o(9917);const i={id:"add-workout",class:"view"},u={class:"container"};var d=(0,a.aZ)({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(5793),n=o(2715),l=o(2119),r=o(4611),s=o(8602),i=o(9917);const u={id:"edit-workout",class:"view"},d={class:"container"};var c=(0,a.aZ)({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,a.Wm)(r.Z,{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"])])]))}});const p=c;var m=p},7365:function(t,e,o){o.r(e),o.d(e,{default:function(){return na}});var a=o(5793),n=o(2715),l=o(2119),r=o(8273),s=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],f={class:"workout-card-title"},k={class:"workout-title-date"},v={key:0,class:"workout-title"},g={key:1,class:"workout-title"},_={class:"workout-segment"},S=(0,a.Uk)(" — "),y=d((()=>(0,a._)("i",{class:"fa fa-map-marker","aria-hidden":"true"},null,-1))),U={class:"workout-date"},h={class:"workout-link"},b=["title"],T=d((()=>(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1))),E=[T];var D=(0,a.aZ)({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",f,[(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",k,["WORKOUT"===(0,n.SU)(r).type?((0,a.wg)(),(0,a.iD)("div",v,[(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",g,[(0,a.Uk)((0,s.zw)((0,n.SU)(r).title)+" ",1),(0,a._)("span",_,[S,y,(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.SEGMENT"))+" "+(0,s.zw)((0,n.SU)(r).segmentId+1),1)])])),(0,a._)("div",U,[(0,a.Uk)((0,s.zw)((0,n.SU)(r).workoutDate)+" - "+(0,s.zw)((0,n.SU)(r).workoutTime)+" ",1),(0,a._)("span",h,["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)},E,10,b)])}}}),O=o(3744);const I=(0,O.Z)(D,[["__scopeId","data-v-4d9f9a8a"]]);var A=I;const C=t=>((0,a.dD)("data-v-1a5282f6"),t=t(),(0,a.Cn)(),t),R={key:0,class:"workout-record"},$=C((()=>(0,a._)("sup",null,[(0,a._)("i",{class:"fa fa-trophy","aria-hidden":"true"})],-1))),x=[$];var N=(0,a.aZ)({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",R,x)):(0,a.kq)("",!0)}});const z=(0,O.Z)(N,[["__scopeId","data-v-1a5282f6"]]);var L=z,j=o(3324);const W=["N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"],B=t=>{const e=Math.floor(t/22.5+.5);return W[e%16]},P={class:"wind"},F={class:"wind-bearing"},M=["title"];var H=(0,a.aZ)({props:{weather:null,useImperialUnits:{type:Boolean}},setup(t){const e=t,{useImperialUnits:o,weather:l}=(0,n.BK)(e),{t:r}=(0,j.QT)();function i(t){return r(`workouts.WEATHER.WIND_DIRECTIONS.${B(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",F,[(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,M)):(0,a.kq)("",!0)])])}}});const Z=(0,O.Z)(H,[["__scopeId","data-v-46a7c31c"]]);var q=Z;const G=t=>((0,a.dD)("data-v-76e9ab62"),t=t(),(0,a.Cn)(),t),K={key:0,id:"workout-weather"},Y={class:"weather-table"},V=G((()=>(0,a._)("th",null,null,-1))),J={class:"weather-th"},X=["src","alt","title"],Q={class:"weather-th"},tt=["src","alt","title"],et=["alt","title"],ot=["alt","title"],at=["alt","title"];var nt=(0,a.aZ)({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",K,[(0,a._)("table",Y,[(0,a._)("thead",null,[(0,a._)("tr",null,[V,(0,a._)("th",null,[(0,a._)("div",J,[(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,X)])]),(0,a._)("th",null,[(0,a._)("div",Q,[(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,tt)])])])]),(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,et)]),(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,ot)]),(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,at)]),(0,a._)("td",null,[(0,a.Wm)(q,{weather:(0,n.SU)(l).weatherStart,useImperialUnits:(0,n.SU)(o)},null,8,["weather","useImperialUnits"])]),(0,a._)("td",null,[(0,a.Wm)(q,{weather:(0,n.SU)(l).weatherEnd,useImperialUnits:(0,n.SU)(o)},null,8,["weather","useImperialUnits"])])])])])])):(0,a.kq)("",!0)}});const lt=(0,O.Z)(nt,[["__scopeId","data-v-76e9ab62"]]);var rt=lt;const st=t=>((0,a.dD)("data-v-dc2fbc66"),t=t(),(0,a.Cn)(),t),it={id:"workout-info"},ut={class:"workout-data"},dt=st((()=>(0,a._)("i",{class:"fa fa-clock-o","aria-hidden":"true"},null,-1))),ct={class:"label"},pt=(0,a.Uk)(": "),mt={class:"value"},wt={key:0},ft={class:"value"},kt={class:"value"},vt={class:"workout-data"},gt=st((()=>(0,a._)("i",{class:"fa fa-road","aria-hidden":"true"},null,-1))),_t={class:"label"},St=(0,a.Uk)(": "),yt={class:"workout-data"},Ut=st((()=>(0,a._)("i",{class:"fa fa-tachometer","aria-hidden":"true"},null,-1))),ht={class:"label"},bt=(0,a.Uk)(": "),Tt=st((()=>(0,a._)("br",null,null,-1))),Et={class:"label"},Dt=(0,a.Uk)(": "),Ot={key:0,class:"workout-data"},It=["alt"],At={class:"label"},Ct=(0,a.Uk)(": "),Rt=st((()=>(0,a._)("br",null,null,-1))),$t={class:"label"},xt=(0,a.Uk)(": "),Nt={key:1,class:"workout-data"},zt=st((()=>(0,a._)("i",{class:"fa fa-location-arrow","aria-hidden":"true"},null,-1))),Lt={class:"label"},jt=(0,a.Uk)(": "),Wt=st((()=>(0,a._)("br",null,null,-1))),Bt={class:"label"},Pt=(0,a.Uk)(": ");var Ft=(0,a.aZ)({props:{workoutObject:null,useImperialUnits:{type:Boolean}},setup(t){const e=t,{workoutObject:o,useImperialUnits:l}=(0,n.BK)(e),r=(0,a.Fl)((()=>"0:00:00"!==e.workoutObject.pauses&&null!==e.workoutObject.pauses));return(t,e)=>{const i=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",it,[(0,a._)("div",ut,[dt,(0,a._)("span",ct,(0,s.zw)(t.$t("workouts.DURATION")),1),pt,(0,a._)("span",mt,(0,s.zw)((0,n.SU)(o).moving),1),(0,a.Wm)(L,{workoutObject:(0,n.SU)(o),recordType:"LD"},null,8,["workoutObject"]),(0,n.SU)(r)?((0,a.wg)(),(0,a.iD)("div",wt,[(0,a.Uk)(" ("+(0,s.zw)(t.$t("workouts.PAUSES"))+": ",1),(0,a._)("span",ft,(0,s.zw)((0,n.SU)(o).pauses),1),(0,a.Uk)(" - "+(0,s.zw)(t.$t("workouts.TOTAL_DURATION"))+": ",1),(0,a._)("span",kt,(0,s.zw)((0,n.SU)(o).duration)+")",1)])):(0,a.kq)("",!0)]),(0,a._)("div",vt,[gt,(0,a._)("span",_t,(0,s.zw)(t.$t("workouts.DISTANCE")),1),St,(0,a.Wm)(i,{distance:(0,n.SU)(o).distance,digits:3,unitFrom:"km",strong:!0,useImperialUnits:(0,n.SU)(l)},null,8,["distance","useImperialUnits"]),(0,a.Wm)(L,{workoutObject:(0,n.SU)(o),recordType:"FD"},null,8,["workoutObject"])]),(0,a._)("div",yt,[Ut,(0,a._)("span",ht,(0,s.zw)(t.$t("workouts.AVERAGE_SPEED")),1),bt,(0,a.Wm)(i,{distance:(0,n.SU)(o).aveSpeed,unitFrom:"km",speed:!0,strong:!0,useImperialUnits:(0,n.SU)(l)},null,8,["distance","useImperialUnits"]),(0,a.Wm)(L,{workoutObject:(0,n.SU)(o),recordType:"AS"},null,8,["workoutObject"]),Tt,(0,a._)("span",Et,(0,s.zw)(t.$t("workouts.MAX_SPEED")),1),Dt,(0,a.Wm)(i,{distance:(0,n.SU)(o).maxSpeed,unitFrom:"km",speed:!0,strong:!0,useImperialUnits:(0,n.SU)(l)},null,8,["distance","useImperialUnits"]),(0,a.Wm)(L,{workoutObject:(0,n.SU)(o),recordType:"MS"},null,8,["workoutObject"])]),null!==(0,n.SU)(o).maxAlt&&null!==(0,n.SU)(o).minAlt?((0,a.wg)(),(0,a.iD)("div",Ot,[(0,a._)("img",{class:"mountains",src:"/img/workouts/mountains.svg",alt:t.$t("workouts.ELEVATION")},null,8,It),(0,a._)("span",At,(0,s.zw)(t.$t("workouts.MIN_ALTITUDE")),1),Ct,(0,a.Wm)(i,{distance:(0,n.SU)(o).minAlt,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(l)},null,8,["distance","useImperialUnits"]),Rt,(0,a._)("span",$t,(0,s.zw)(t.$t("workouts.MAX_ALTITUDE")),1),xt,(0,a.Wm)(i,{distance:(0,n.SU)(o).maxAlt,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(l)},null,8,["distance","useImperialUnits"])])):(0,a.kq)("",!0),null!==(0,n.SU)(o).ascent&&null!==(0,n.SU)(o).descent?((0,a.wg)(),(0,a.iD)("div",Nt,[zt,(0,a._)("span",Lt,(0,s.zw)(t.$t("workouts.ASCENT")),1),jt,(0,a.Wm)(i,{distance:(0,n.SU)(o).ascent,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(l)},null,8,["distance","useImperialUnits"]),Wt,(0,a._)("span",Bt,(0,s.zw)(t.$t("workouts.DESCENT")),1),Pt,(0,a.Wm)(i,{distance:(0,n.SU)(o).descent,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(l)},null,8,["distance","useImperialUnits"])])):(0,a.kq)("",!0),(0,a.Wm)(rt,{workoutObject:(0,n.SU)(o),useImperialUnits:(0,n.SU)(l)},null,8,["workoutObject","useImperialUnits"])])}}});const Mt=(0,O.Z)(Ft,[["__scopeId","data-v-dc2fbc66"]]);var Ht=Mt;function Zt(t,e){return Array.from(t.getElementsByTagName(e))}function qt(t){return t?.normalize(),t&&t.textContent||""}function Gt(t,e,o){const a=t.getElementsByTagName(e),n=a.length?a[0]:null;return n&&o&&o(n),n}function Kt(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 Yt(t,e,o){const a=qt(Gt(t,e));return a&&o&&o(a)||{}}function Vt(t,e,o){const a=parseFloat(qt(Gt(t,e)));if(!isNaN(a))return a&&o&&o(a)||{}}function Jt(t,e,o){const a=parseFloat(qt(Gt(t,e)));if(!isNaN(a))return a&&o&&o(a),a}function Xt(t,e){const o={};for(const a of e)Yt(t,a,(t=>{o[a]=t}));return o}function Qt(t){return 1===t?.nodeType}function te(t){return Kt(t,"line",(t=>{const e=Object.assign({},Yt(t,"color",(t=>({stroke:`#${t}`}))),Vt(t,"opacity",(t=>({"stroke-opacity":t}))),Vt(t,"width",(t=>({"stroke-width":96*t/25.4}))));return e}))}function ee(t){let e=[];if(null===t)return e;for(const o of Array.from(t.childNodes)){if(!Qt(o))continue;const t=oe(o.nodeName);if("gpxtpx:TrackPointExtension"===t)e=e.concat(ee(o));else{const a=qt(o);e.push([t,ae(a)])}}return e}function oe(t){return["heart","gpxtpx:hr","hr"].includes(t)?"heart":t}function ae(t){const e=parseFloat(t);return isNaN(e)?t:e}function ne(t){const e=[parseFloat(t.getAttribute("lon")||""),parseFloat(t.getAttribute("lat")||"")];Jt(t,"ele",(t=>{e.push(t)}));const o=Gt(t,"time");return{coordinates:e,time:o?qt(o):null,extendedValues:ee(Gt(t,"extensions"))}}function le(t){const e=Xt(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(":","_")]=qt(n));const a=Zt(t,"link");return a.length&&(e.links=a.map((t=>Object.assign({href:t.getAttribute("href")},Xt(t,["text","type"]))))),e}function re(t,e){const o=Zt(t,e);if(o.length<2)return;const a=[],n=[],l={};for(let r=0;r1,r=Object.assign({_gpxType:"trk"},le(t),te(Gt(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 ue(t){const e=Object.assign(le(t),Xt(t,["sym"]));return{type:"Feature",properties:e,geometry:{type:"Point",coordinates:ne(t).coordinates}}}function*de(t){for(const e of Zt(t,"trk")){const t=ie(e);t&&(yield t)}for(const e of Zt(t,"rte")){const t=se(e);t&&(yield t)}for(const e of Zt(t,"wpt"))yield ue(e)}function ce(t){return{type:"FeatureCollection",features:Array.from(de(t))}}const pe=(t,e)=>{let o;return function(...a){const n=this;o&&clearTimeout(o),o=setTimeout((()=>{t.apply(n,a),o=null}),e)}},me=t=>t&&"function"===typeof t.charAt?t.charAt(0).toUpperCase()+t.slice(1):t,we=(t,e,o)=>{for(const n in o){const l="set"+me(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)}))}},fe=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},ke=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})},ve=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},ge=(t,e)=>t.wrapped.value=e,_e="object"===typeof self&&self.self===self&&self||"object"===typeof o.g&&o.g.global===o.g&&o.g||void 0,Se="useGlobalLeaflet",ye={options:{type:Object,default:()=>({})}},Ue=t=>({options:t.options,methods:{}}),he={...ye,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}},be=(t,e,o)=>{const n=(0,a.f3)("addLayer"),l=(0,a.f3)("removeLayer"),{options:r,methods:s}=Ue(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}},Te=(t,e)=>{if(t&&e.default)return(0,a.h)("div",{style:{display:"none"}},e.default())},Ee={...ye,interactive:{type:Boolean,default:!0},bubblingMouseEvents:{type:Boolean,default:!0}},De={...he,...Ee,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}},Oe={...De,latLng:{type:[Object,Array],custom:!0,default:null},radius:{type:Number,default:null}};const Ie={...ye,position:{type:String,default:"topright"}},Ae=(t,e)=>{const{options:o,methods:n}=Ue(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}},Ce=t=>t.default?(0,a.h)("div",{ref:"root"},t.default()):null;var Re={name:"LControl",props:{...Ie,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)(Se),i=(0,a.f3)("registerControl"),{options:u,methods:d}=Ae(t,l);return(0,a.bv)((async()=>{const{Control:n,DomEvent:c}=s?_e.L:await o.e(633).then(o.bind(o,6633)),p=n.extend({onAdd(){return r.value}});l.value=new p(u),we(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 Ce(this.$slots)},__file:"src/components/LControl.vue"};const $e={...Ie,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}},xe=(t,e)=>{const{options:o}=Ae(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 Ne={name:"LControlLayers",props:$e,setup(t,e){const l=(0,n.iH)({}),r=(0,a.f3)(Se),s=(0,a.f3)("registerLayerControl"),{options:i,methods:u}=xe(t,l);return(0,a.bv)((async()=>{const{control:n}=r?_e.L:await o.e(633).then(o.bind(o,6633));l.value=n.layers(null,null,i),we(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 ze={...he},Le=(t,e,o)=>{const{options:n,methods:l}=be(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 je={...ze,geojson:{type:[Object,Array],default:()=>({})}},We=(t,e)=>{const{options:o,methods:a}=Le(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 Be={props:je,setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(!1),s=(0,a.f3)(Se),i=(0,a.f3)("addLayer"),{methods:u,options:d}=We(t,l);return(0,a.bv)((async()=>{const{geoJSON:n,DomEvent:c}=s?_e.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.geojson,d);const p=fe(e.attrs);c.on(l.value,p),we(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 Te(this.ready,this.$slots)},__file:"src/components/LGeoJson.vue"};const Pe={...he,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}},Fe=(t,e,o)=>{const{options:a,methods:n}=be(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 Me={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 He={name:"LIcon",props:{...Me,...ye},setup(t,e){const l=(0,n.iH)(null),r=(0,a.f3)(Se),s=(0,a.f3)("canSetParentHtml"),i=(0,a.f3)("setParentHtml"),u=(0,a.f3)("setIcon");let d,c,p,m,w;const f=(o,a,n)=>{const l=o&&o.innerHTML;if(!a)return void(n&&w&&s()&&i(l));const r=fe(e.attrs);w&&c(w,r);const{options:f}=Ue(t),k={...f,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=k.html?p(k):m(k),d(w,r),u(w)},k=()=>{(0,a.Y3)((()=>f(l.value,!0,!1)))},v=()=>{(0,a.Y3)((()=>f(l.value,!1,!0)))},g={setIconUrl:k,setIconRetinaUrl:k,setIconSize:k,setIconAnchor:k,setPopupAnchor:k,setTooltipAnchor:k,setShadowUrl:k,setShadowRetinaUrl:k,setShadowAnchor:k,setBgPos:k,setClassName:k,setHtml:k};return(0,a.bv)((async()=>{const{DomEvent:e,divIcon:a,icon:n}=r?_e.L:await o.e(633).then(o.bind(o,6633));d=e.on,c=e.off,p=a,m=n,we(g,{},t);const s=new MutationObserver(v);s.observe(l.value,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),k()})),{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:ze,setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(!1),s=(0,a.f3)(Se),i=(0,a.f3)("addLayer"),{methods:u}=Le(t,l,e);return(0,a.bv)((async()=>{const{layerGroup:n,DomEvent:d}=s?_e.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.options);const c=fe(e.attrs);d.on(l.value,c),we(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 Te(this.ready,this.$slots)},__file:"src/components/LLayerGroup.vue"},qe={emits:["ready","update:zoom","update:center","update:bounds"],props:{...ye,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}=Ue(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=ve("addLayer"),d=ve("removeLayer"),c=ve("registerControl"),p=ve("registerLayerControl");(0,a.JJ)(Se,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&&(_e.L=_e.L||await o.e(243).then(o.t.bind(o,5243,23)));const{map:n,CRS:s,Icon:w,latLngBounds:f,latLng:k,DomEvent:v}=t.useGlobalLeaflet?_e.L:await o.e(633).then(o.bind(o,6633));try{i.beforeMapMount&&await i.beforeMapMount()}catch(y){console.error(`The following error occurred running the provided beforeMapMount hook ${y.message}`)}await ke(w);const g="string"==typeof i.crs?s[i.crs]:i.crs;i.crs=g||s.EPSG3857;const _={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=f(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=k(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}))}};ge(u,_.addLayer),ge(d,_.removeLayer),ge(c,_.registerControl),ge(p,_.registerLayerControl),r.leafletRef=n(l.value,i),we(_,r.leafletRef,t);const S=fe(e.attrs);r.leafletRef.on("moveend",pe(m.moveEndHandler,100)),r.leafletRef.on("overlayadd",m.overlayAddHandler),r.leafletRef.on("overlayremove",m.overlayRemoveHandler),v.on(r.leafletRef,S),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)),f=(0,a.Fl)((()=>r.ready));return{root:l,ready:f,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 Ge={...he,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}},Ke=(t,e,o)=>{const{options:a,methods:n}=be(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 Ye={name:"LMarker",props:Ge,setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(!1),s=(0,a.f3)(Se),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}=Ke(t,l,e);return void 0===u.icon&&delete u.icon,(0,a.bv)((async()=>{const{marker:n,DomEvent:c}=s?_e.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.latLng,u);const p=fe(e.attrs);c.on(l.value,p),l.value.on("move",pe(d.latLngSync,100)),we(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 Te(this.ready,this.$slots)},__file:"src/components/LMarker.vue"};const Ve={...De,latLngs:{type:Array,default:()=>[]},smoothFactor:{type:Number,custom:!0,default:1},noClip:{type:Boolean,custom:!0,default:!1}},Je={...Ve};const Xe={...ye,content:{type:String,default:null}};const Qe={...Pe,tms:{type:Boolean,default:!1},subdomains:{type:String,default:"abc"},detectRetina:{type:Boolean,default:!1},url:{type:String,default:null}},to=(t,e)=>{const{options:o,methods:a}=Fe(t,e),n={...o,tms:t.tms,subdomains:t.subdomains,detectRetina:t.detectRetina};return{options:n,methods:{...a}}};var eo={props:Qe,setup(t,e){const l=(0,n.iH)({}),r=(0,a.f3)(Se),s=(0,a.f3)("addLayer"),{options:i,methods:u}=to(t,l);return(0,a.bv)((async()=>{const{tileLayer:n,DomEvent:d}=r?_e.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.url,i);const c=fe(e.attrs);d.on(l.value,c),we(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 oo=(0,a.aZ)({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)(Ye),{key:0,"lat-lng":[(0,n.SU)(l).latitude,(0,n.SU)(l).longitude]},{default:(0,a.w5)((()=>[(0,a.Wm)((0,n.SU)(He),{"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 ao=oo;var no=ao,lo=o(8602),ro=o(9917),so=o(2024);const io=t=>((0,a.dD)("data-v-6b490f5d"),t=t(),(0,a.Cn)(),t),uo={id:"workout-map"},co={key:0,class:"leaflet-container"},po={key:1},mo=io((()=>(0,a._)("i",{class:"fa fa-refresh","aria-hidden":"true"},null,-1))),wo={key:1,class:"no-map"};var fo=(0,a.aZ)({props:{workoutData:null,markerCoordinates:{default:()=>({})}},setup(t){const e=t,o=(0,ro.o)(),{workoutData:l,markerCoordinates:r}=(0,n.BK)(e),i=(0,n.iH)(null),u=(0,a.Fl)((()=>_())),d=(0,a.Fl)((()=>o.getters[lo.SY.GETTERS.APP_CONFIG])),c=(0,a.Fl)((()=>v(u))),p=(0,a.Fl)((()=>e.workoutData&&e.workoutData.gpx?k(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}:{})),f=(0,n.iH)(!1);function k(t){if(!t||""!==t)try{const e=ce((new DOMParser).parseFromString(t,"text/xml"));return{jsonData:e}}catch(e){return console.error("Invalid gpx content"),{}}return{}}function v(t){return[(t.value[0][0]+t.value[1][0])/2,(t.value[0][1]+t.value[1][1])/2]}function g(t){i.value?.leafletObject&&i.value?.leafletObject.fitBounds(t)}function _(){return e.workoutData?[[e.workoutData.workout.bounds[0],e.workoutData.workout.bounds[1]],[e.workoutData.workout.bounds[2],e.workoutData.workout.bounds[3]]]:[]}function S(){i.value?.leafletObject.fitBounds(_())}function y(){f.value=!f.value,f.value||setTimeout((()=>{S()}),100)}return(t,e)=>{const o=(0,a.up)("VFullscreen");return(0,a.wg)(),(0,a.iD)("div",uo,[(0,n.SU)(l).loading?((0,a.wg)(),(0,a.iD)("div",co)):((0,a.wg)(),(0,a.iD)("div",po,[(0,n.SU)(l).workout.with_gpx?((0,a.wg)(),(0,a.j4)(o,{key:0,modelValue:f.value,"onUpdate:modelValue":e[1]||(e[1]=t=>f.value=t)},{default:(0,a.w5)((()=>[(0,a._)("div",{class:(0,s.C_)(["leaflet-container",{"fullscreen-map":f.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)(qe),{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=>g((0,n.SU)(u)))},{default:(0,a.w5)((()=>[(0,a.Wm)((0,n.SU)(Ne)),(0,a.Wm)((0,n.SU)(Re),{position:"topleft",class:"map-control",onClick:S},{default:(0,a.w5)((()=>[mo])),_:1}),(0,a.Wm)((0,n.SU)(Re),{position:"topleft",class:"map-control",onClick:y},{default:(0,a.w5)((()=>[(0,a._)("i",{class:(0,s.C_)("fa fa-"+(f.value?"compress":"arrows-alt")),"aria-hidden":"true"},null,2)])),_:1}),(0,a.Wm)((0,n.SU)(eo),{url:`${(0,n.SU)(so.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)(Be),{geojson:(0,n.SU)(p).jsonData},null,8,["geojson"]),(0,n.SU)(r).latitude?((0,a.wg)(),(0,a.j4)((0,n.SU)(Ye),{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)(no,{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)(no,{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",wo,(0,s.zw)(t.$t("workouts.NO_MAP")),1))]))])}}});const ko=(0,O.Z)(fo,[["__scopeId","data-v-6b490f5d"]]);var vo=ko,go=o(6558);const _o={class:"workout-detail"};var So=(0,a.aZ)({props:{authUser:null,displaySegment:{type:Boolean},sports:null,workoutData:null,markerCoordinates:{default:()=>({})}},setup(t){const e=t,o=(0,l.yj)(),r=(0,ro.o)(),{authUser:s,markerCoordinates:i,workoutData:u}=(0,n.BK)(e),d=(0,a.Fl)((()=>e.workoutData.workout));let c=(0,n.iH)(o.params.workoutId?+o.params.segmentId:null);const p=(0,a.Fl)((()=>d.value.segments.length>0&&c.value?d.value.segments[+c.value-1]:null));let m=(0,n.iH)(!1);const w=(0,a.Fl)((()=>e.sports?e.sports.find((t=>t.id===e.workoutData.workout.sport_id)):{})),f=(0,a.Fl)((()=>v(d.value,p.value)));function k(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",_o,[(0,n.SU)(m)?((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=>_((0,n.SU)(f).workoutId)),onCancelAction:e[1]||(e[1]=t=>g(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Wm)(A,{sport:(0,n.SU)(w),workoutObject:(0,n.SU)(f),onDisplayModal:e[2]||(e[2]=t=>g(!0))},null,8,["sport","workoutObject"])])),content:(0,a.w5)((()=>[(0,a.Wm)(vo,{workoutData:(0,n.SU)(u),markerCoordinates:(0,n.SU)(i)},null,8,["workoutData","markerCoordinates"]),(0,a.Wm)(Ht,{workoutObject:(0,n.SU)(f),useImperialUnits:(0,n.SU)(s).imperial_units},null,8,["workoutObject","useImperialUnits"])])),_:1})])}}});const yo=(0,O.Z)(So,[["__scopeId","data-v-578bb8ea"]]);var Uo=yo,ho=o(6518);o(1703);const bo=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")},To={id:"htmlLegend",afterUpdate(t,e,o){const a=bo(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=()=>{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 Eo=o(3649),Do=o(3768);const Oo=t=>((0,a.dD)("data-v-7b25bb74"),t=t(),(0,a.Cn)(),t),Io={id:"workout-chart"},Ao={class:"chart-radio"},Co=["checked"],Ro=["checked"],$o=Oo((()=>(0,a._)("div",{id:"chart-legend"},null,-1))),xo={class:"chart-info"},No={class:"no-data-cleaning"},zo={class:"elevation-start"},Lo=["checked"];var jo=(0,a.aZ)({props:{authUser:null,workoutData:null},emits:["getCoordinates"],setup(t,{emit:e}){const o=t,{t:l}=(0,j.QT)();let r=(0,n.iH)(!0),i=(0,n.iH)(!0);const u=(0,a.Fl)((()=>(0,Do.EX)(o.workoutData.chartData,l,o.authUser.imperial_units))),d=S("km"),c=S("m");let 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]))})));const 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):v(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&&g(m.value[t[0].dataIndex]),0===t.length?"":r.value?`${l("workouts.DISTANCE")}: ${t[0].label} ${d}`:`${l("workouts.DURATION")}: ${v(t[0].label.replace(",",""))}`}}},legend:{display:!1},htmlLegend:{containerID:"chart-legend"}}}))),{lineChartProps:f}=(0,ho.tn)({chartData:p,options:w,plugins:[To]});function k(){r.value=!r.value}function v(t){return new Date(1e3*+t).toISOString().substr(11,8)}function g(t){e("getCoordinates",t)}function _(){g({latitude:null,longitude:null})}function S(t){return o.authUser.imperial_units?Eo.Dl[t].defaultTarget:t}return(t,e)=>{const o=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",Io,[(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",Ao,[(0,a._)("label",null,[(0,a._)("input",{type:"radio",name:"distance",checked:(0,n.SU)(r),onClick:k},null,8,Co),(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.DISTANCE")),1)]),(0,a._)("label",null,[(0,a._)("input",{type:"radio",name:"duration",checked:!(0,n.SU)(r),onClick:k},null,8,Ro),(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.DURATION")),1)])]),$o,(0,a.Wm)((0,n.SU)(ho.wW),(0,a.dG)((0,n.SU)(f),{class:"line-chart",onMouseleave:_}),null,16),(0,a._)("div",xo,[(0,a._)("div",No,(0,s.zw)(t.$t("workouts.NO_DATA_CLEANING")),1),(0,a._)("div",zo,[(0,a._)("label",null,[(0,a._)("input",{type:"checkbox",checked:(0,n.SU)(i),onClick:e[0]||(e[0]=t=>(0,n.dq)(i)?i.value=!(0,n.SU)(i):i=!(0,n.SU)(i))},null,8,Lo),(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.START_ELEVATION_AT_ZERO")),1)])])])])),_:1})])}}});const Wo=(0,O.Z)(jo,[["__scopeId","data-v-7b25bb74"]]);var Bo=Wo;const Po={id:"workout-note"};var Fo=(0,a.aZ)({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",Po,[(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 Mo=(0,O.Z)(Fo,[["__scopeId","data-v-028ad527"]]);var Ho=Mo;const Zo={id:"workout-segments"};var qo=(0,a.aZ)({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 Go=(0,O.Z)(qo,[["__scopeId","data-v-6b8a27cd"]]);var Ko=Go;const Yo=t=>((0,a.dD)("data-v-85ac744a"),t=t(),(0,a.Cn)(),t),Vo={id:"workout",class:"view"},Jo={class:"container"},Xo={key:0,class:"workout-container"},Qo={key:0},ta=Yo((()=>(0,a._)("div",{id:"bottom"},null,-1))),ea={key:1};var oa=(0,a.aZ)({props:{displaySegment:{type:Boolean}},setup(t){const e=t,o=(0,l.yj)(),s=(0,ro.o)(),{displaySegment:i}=(0,n.BK)(e),u=(0,a.Fl)((()=>s.getters[lo.aX.GETTERS.WORKOUT_DATA])),d=(0,a.Fl)((()=>s.getters[lo.YN.GETTERS.AUTH_USER_PROFILE])),c=(0,a.Fl)((()=>s.getters[lo.O8.GETTERS.SPORTS]));let 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(lo.aX.ACTIONS.GET_WORKOUT_DATA,t)})),(0,a.Ah)((()=>{s.commit(lo.aX.MUTATIONS.EMPTY_WORKOUT)})),(0,a.YP)((()=>o.params.workoutId),(async t=>{t&&s.dispatch(lo.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(lo.aX.ACTIONS.GET_WORKOUT_DATA,e)}})),(t,e)=>((0,a.wg)(),(0,a.iD)("div",Vo,[(0,a._)("div",Jo,[(0,n.SU)(c).length>0?((0,a.wg)(),(0,a.iD)("div",Xo,[(0,n.SU)(u).workout.id?((0,a.wg)(),(0,a.iD)("div",Qo,[(0,a.Wm)(Uo,{workoutData:(0,n.SU)(u),sports:(0,n.SU)(c),authUser:(0,n.SU)(d),markerCoordinates:(0,n.SU)(p),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)(Bo,{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)(Ko,{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)(Ho,{key:2,notes:(0,n.SU)(u).workout.notes},null,8,["notes"])),ta])):((0,a.wg)(),(0,a.iD)("div",ea,[(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 aa=(0,O.Z)(oa,[["__scopeId","data-v-85ac744a"]]);var na=aa},5298:function(t,e,o){o.r(e),o.d(e,{default:function(){return Bt}});var a=o(5793),n=o(2715),l=o(3577),r=o(3324),s=o(2119),i=o(631),u=o(3649);const d=t=>((0,a.dD)("data-v-241c23ba"),t=t(),(0,a.Cn)(),t),c={class:"workouts-filters"},p={class:"box"},m={class:"form"},w={class:"form-items-group"},f={class:"form-item"},k=["value"],v={class:"form-item"},g=["value"],_={class:"form-items-group"},S={class:"form-item"},y=["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"],x={class:"form-items-group"},N={class:"form-item"},z={class:"form-inputs-group"},L=["value"],j=["value"],W={class:"form-items-group"},B={class:"form-item"},P={class:"form-inputs-group"},F=["value"],M=["value"],H={class:"form-button"};var Z=(0,a.aZ)({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",f,[(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,k)]),(0,a._)("div",v,[(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,g)])]),(0,a._)("div",_,[(0,a._)("div",S,[(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,y)])]),(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",x,[(0,a._)("div",N,[(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",B,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.MAX_SPEED"))+" ("+(0,l.zw)((0,n.SU)(K))+"/h): ",1),(0,a._)("div",P,[(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,M)])])])]),(0,a._)("div",H,[(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-241c23ba"]]);var K=G,Y=o(4850),V=o(8626),J=o(6514),X=o(2056),Q=o(5630),tt=o(8602),et=o(9917),ot=o(2766),at=o(6558),nt=o(3768);const lt=t=>((0,a.dD)("data-v-3be47bc9"),t=t(),(0,a.Cn)(),t),rt={class:"workouts-list"},st={class:"total"},it={class:"total-label"},ut={key:0},dt={key:0,class:"workouts-table responsive-table"},ct=lt((()=>(0,a._)("th",{class:"sport-col"},null,-1))),pt={class:"sport-col"},mt={class:"cell-heading"},wt=["onMouseover"],ft={class:"cell-heading"},kt={key:0,class:"fa fa-map-o","aria-hidden":"true"},vt={class:"cell-heading"},gt={class:"text-right"},_t={class:"cell-heading"},St={class:"text-right"},yt={class:"cell-heading"},Ut={class:"text-right"},ht={class:"cell-heading"},bt={class:"text-right"},Tt={class:"cell-heading"},Et={class:"text-right"},Dt={class:"cell-heading"},Ot={class:"text-right"},It={class:"cell-heading"},At=lt((()=>(0,a._)("div",{id:"bottom"},null,-1)));var Ct=(0,a.aZ)({props:{user:null,sports:null},setup(t){const e=t,o=(0,et.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[tt.aX.GETTERS.USER_WORKOUTS])),f=(0,a.Fl)((()=>o.getters[tt.aX.GETTERS.WORKOUTS_PAGINATION]));let k=S(r.query);const v=(0,n.iH)(null);function g(t){o.dispatch(tt.aX.ACTIONS.GET_USER_WORKOUTS,c.value.imperial_units?y(t):t)}function _(t,e){const o=Object.assign({},r.query);o[t]=e,"per_page"===t&&(o["page"]="1"),k=S(o),d.push({path:"/workouts",query:k})}function S(t){let e=(0,ot.pm)(t,m,nt.eR.order_by,{defaultSort:nt.eR.order});return Object.keys(t).filter((t=>ot.Ne.includes(t))).map((o=>{"string"===typeof t[o]&&(e[o]=t[o])})),e}function y(t){const e={...t};return Object.entries(e).map((t=>{t[0].match("speed|distance")&&(e[t[0]]=(0,u.sC)(+t[1],"mi","km"))})),e}function U(t){v.value=t}return(0,a.wF)((()=>{g(k)})),(0,a.YP)((()=>r.query),(async t=>{k=S(t),g(k)})),(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",rt,[(0,a._)("div",{class:(0,l.C_)(["box",{"empty-table":0===(0,n.SU)(w).length}])},[(0,a._)("div",st,[(0,a._)("span",it,(0,l.zw)(t.$t("common.TOTAL").toLowerCase())+": ",1),null!==(0,n.SU)(f).total?((0,a.wg)(),(0,a.iD)("span",ut,(0,l.zw)((0,n.SU)(f).total)+" "+(0,l.zw)(t.$t("workouts.WORKOUT",(0,n.SU)(f).total)),1)):(0,a.kq)("",!0)]),(0,a.Wm)(V.Z,{sort:(0,n.SU)(ot.fS),order_by:m,query:(0,n.SU)(k),message:"workouts",onUpdateSelect:_},null,8,["sort","query"]),(0,n.SU)(w).length>0?((0,a.wg)(),(0,a.iD)("div",dt,[(0,a.Wm)(J.Z,{class:"top-pagination",pagination:(0,n.SU)(f),path:"/workouts",query:(0,n.SU)(k)},null,8,["pagination","query"]),(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[ct,(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)])]),(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",pt,[(0,a._)("span",mt,(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=>U(u.id),onMouseleave:e[0]||(e[0]=t=>U(null))},[(0,a._)("span",ft,(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.Uk)(" "+(0,l.zw)(u.title),1)])),_:2},1032,["to"]),u.with_gpx&&v.value===u.id?((0,a.wg)(),(0,a.j4)(X.Z,{key:0,workout:u,"display-hover":!0},null,8,["workout"])):(0,a.kq)("",!0)],40,wt),(0,a._)("td",null,[(0,a._)("span",vt,(0,l.zw)(t.$t("workouts.DATE")),1),(0,a.Uk)(" "+(0,l.zw)((0,n.SU)(Y.Z)((0,n.SU)(at.eB)(u.workout_date,(0,n.SU)(c).timezone),"dd/MM/yyyy HH:mm")),1)]),(0,a._)("td",gt,[(0,a._)("span",_t,(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",yt,(0,l.zw)(t.$t("workouts.DURATION")),1),(0,a.Uk)(" "+(0,l.zw)(u.moving),1)]),(0,a._)("td",Ut,[(0,a._)("span",ht,(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",bt,[(0,a._)("span",Tt,(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",Et,[(0,a._)("span",Dt,(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",Ot,[(0,a._)("span",It,(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)(J.Z,{pagination:(0,n.SU)(f),path:"/workouts",query:(0,n.SU)(k)},null,8,["pagination","query"])])):(0,a.kq)("",!0)],2),0===(0,n.SU)(w).length?((0,a.wg)(),(0,a.j4)(Q.Z,{key:0})):(0,a.kq)("",!0),At])}}});const Rt=(0,q.Z)(Ct,[["__scopeId","data-v-3be47bc9"]]);var $t=Rt;const xt={key:0,id:"workouts",class:"view"},Nt={class:"container workouts-container"},zt={class:"display-filters"},Lt={class:"list-container"};var jt=(0,a.aZ)({setup(t){const{t:e}=(0,r.QT)(),o=(0,et.o)(),s=(0,a.Fl)((()=>o.getters[tt.YN.GETTERS.AUTH_USER_PROFILE])),u=(0,a.Fl)((()=>o.getters[tt.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",Nt,[(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",zt,[(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",Lt,[(0,a.Wm)($t,{user:(0,n.SU)(s),sports:(0,n.SU)(d)},null,8,["user","sports"])])])])):(0,a.kq)("",!0)}});const Wt=(0,q.Z)(jt,[["__scopeId","data-v-77e54012"]]);var Bt=Wt}}]); -//# sourceMappingURL=workouts.9770e7ed.js.map \ No newline at end of file +//# sourceMappingURL=workouts.4c428272.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/workouts.9770e7ed.js.map b/fittrackee/dist/static/js/workouts.4c428272.js.map similarity index 99% rename from fittrackee/dist/static/js/workouts.9770e7ed.js.map rename to fittrackee/dist/static/js/workouts.4c428272.js.map index 85c277bc..74dfc021 100644 --- a/fittrackee/dist/static/js/workouts.9770e7ed.js.map +++ b/fittrackee/dist/static/js/workouts.4c428272.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/workouts.9770e7ed.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.js","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-9dea86c6\"),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 = /*#__PURE__*/_createTextVNode(\" : \")\nconst _hoisted_28 = [\"disabled\"]\nconst _hoisted_29 = /*#__PURE__*/_createTextVNode(\" : \")\nconst _hoisted_30 = [\"disabled\"]\nconst _hoisted_31 = { class: \"form-item\" }\nconst _hoisted_32 = [\"disabled\"]\nconst _hoisted_33 = { class: \"form-item\" }\nconst _hoisted_34 = { key: 1 }\nconst _hoisted_35 = {\n key: 2,\n class: \"form-buttons\"\n}\nconst _hoisted_36 = [\"disabled\"]\nconst _hoisted_37 = [\"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 { IUserProfile } from '@/types/user'\n import { IWorkout, IWorkoutForm } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { formatWorkoutDate, getDateWithTZ } from '@/utils/dates'\n import { getReadableFileSize } from '@/utils/files'\n import { translateSports } from '@/utils/sports'\n import { convertDistance } from '@/utils/units'\n\n interface Props {\n authUser: IUserProfile\n sports: ISport[]\n isCreation?: boolean\n loading?: boolean\n workout?: IWorkout\n }\n \nexport default /*#__PURE__*/_defineComponent({\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: IUserProfile, 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 let 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: _unref(withGpx),\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: !_unref(withGpx),\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) => ((_unref(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, _unref(workoutForm).sport_id]\n ])\n ]),\n (_unref(isCreation) && _unref(withGpx))\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) => ((_unref(workoutForm).title) = $event))\n }, null, 40, _hoisted_18), [\n [_vModelText, _unref(workoutForm).title]\n ])\n ])),\n (!_unref(withGpx))\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) => ((_unref(workoutForm).workoutDate) = $event))\n }, null, 40, _hoisted_23), [\n [_vModelText, _unref(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) => ((_unref(workoutForm).workoutTime) = $event))\n }, null, 40, _hoisted_24), [\n [_vModelText, _unref(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) => ((_unref(workoutForm).workoutDurationHour) = $event))\n }, null, 40, _hoisted_26), [\n [_vModelText, _unref(workoutForm).workoutDurationHour]\n ]),\n _hoisted_27,\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) => ((_unref(workoutForm).workoutDurationMinutes) = $event))\n }, null, 40, _hoisted_28), [\n [_vModelText, _unref(workoutForm).workoutDurationMinutes]\n ]),\n _hoisted_29,\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) => ((_unref(workoutForm).workoutDurationSeconds) = $event))\n }, null, 40, _hoisted_30), [\n [_vModelText, _unref(workoutForm).workoutDurationSeconds]\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_31, [\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) => ((_unref(workoutForm).workoutDistance) = $event))\n }, null, 40, _hoisted_32), [\n [_vModelText, _unref(workoutForm).workoutDistance]\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_33, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.NOTES')) + \": \", 1),\n _createVNode(_component_CustomTextArea, {\n name: \"notes\",\n input: _unref(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_34, [\n _createVNode(_component_Loader)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_35, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n type: \"submit\",\n disabled: _unref(loading)\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_36),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(onCancel, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_37)\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=9dea86c6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9dea86c6\"]])\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 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, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, 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 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 _createVNode(WorkoutEdition, {\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 ])\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__*/_createTextVNode(\" — \")\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-map-marker\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_12 = { class: \"workout-date\" }\nconst _hoisted_13 = { class: \"workout-link\" }\nconst _hoisted_14 = [\"title\"]\nconst _hoisted_15 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_16 = [\n _hoisted_15\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 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 _hoisted_10,\n _hoisted_11,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.SEGMENT')) + \" \" + _toDisplayString(_unref(workoutObject).segmentId + 1), 1)\n ])\n ])),\n _createElementVNode(\"div\", _hoisted_12, [\n _createTextVNode(_toDisplayString(_unref(workoutObject).workoutDate) + \" - \" + _toDisplayString(_unref(workoutObject).workoutTime) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_13, [\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_16, 10, _hoisted_14)\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 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 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 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, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-dc2fbc66\"),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 = /*#__PURE__*/_createTextVNode(\": \")\nconst _hoisted_6 = { class: \"value\" }\nconst _hoisted_7 = { key: 0 }\nconst _hoisted_8 = { class: \"value\" }\nconst _hoisted_9 = { class: \"value\" }\nconst _hoisted_10 = { class: \"workout-data\" }\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-road\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_12 = { class: \"label\" }\nconst _hoisted_13 = /*#__PURE__*/_createTextVNode(\": \")\nconst _hoisted_14 = { class: \"workout-data\" }\nconst _hoisted_15 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-tachometer\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_16 = { class: \"label\" }\nconst _hoisted_17 = /*#__PURE__*/_createTextVNode(\": \")\nconst _hoisted_18 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_19 = { class: \"label\" }\nconst _hoisted_20 = /*#__PURE__*/_createTextVNode(\": \")\nconst _hoisted_21 = {\n key: 0,\n class: \"workout-data\"\n}\nconst _hoisted_22 = [\"alt\"]\nconst _hoisted_23 = { class: \"label\" }\nconst _hoisted_24 = /*#__PURE__*/_createTextVNode(\": \")\nconst _hoisted_25 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_26 = { class: \"label\" }\nconst _hoisted_27 = /*#__PURE__*/_createTextVNode(\": \")\nconst _hoisted_28 = {\n key: 1,\n class: \"workout-data\"\n}\nconst _hoisted_29 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_30 = { class: \"label\" }\nconst _hoisted_31 = /*#__PURE__*/_createTextVNode(\": \")\nconst _hoisted_32 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_33 = { class: \"label\" }\nconst _hoisted_34 = /*#__PURE__*/_createTextVNode(\": \")\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 }\n \nexport default /*#__PURE__*/_defineComponent({\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 { 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 _hoisted_5,\n _createElementVNode(\"span\", _hoisted_6, _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_7, [\n _createTextVNode(\" (\" + _toDisplayString(_ctx.$t('workouts.PAUSES')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_unref(workoutObject).pauses), 1),\n _createTextVNode(\" - \" + _toDisplayString(_ctx.$t('workouts.TOTAL_DURATION')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_unref(workoutObject).duration) + \")\", 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1),\n _hoisted_13,\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_14, [\n _hoisted_15,\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.AVERAGE_SPEED')), 1),\n _hoisted_17,\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_18,\n _createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')), 1),\n _hoisted_20,\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_21, [\n _createElementVNode(\"img\", {\n class: \"mountains\",\n src: \"/img/workouts/mountains.svg\",\n alt: _ctx.$t('workouts.ELEVATION')\n }, null, 8, _hoisted_22),\n _createElementVNode(\"span\", _hoisted_23, _toDisplayString(_ctx.$t('workouts.MIN_ALTITUDE')), 1),\n _hoisted_24,\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_25,\n _createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('workouts.MAX_ALTITUDE')), 1),\n _hoisted_27,\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_28, [\n _hoisted_29,\n _createElementVNode(\"span\", _hoisted_30, _toDisplayString(_ctx.$t('workouts.ASCENT')), 1),\n _hoisted_31,\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 _hoisted_32,\n _createElementVNode(\"span\", _hoisted_33, _toDisplayString(_ctx.$t('workouts.DESCENT')), 1),\n _hoisted_34,\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=dc2fbc66&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dc2fbc66\"]])\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 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\nfunction getPoints$1(node, pointname) {\n const pts = $(node, pointname);\n if (pts.length < 2)\n return; // Invalid line in GeoJSON\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 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 return {\n line: line,\n times: times,\n extendedValues: extendedValues,\n };\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}\nfunction getPoint(node) {\n const properties = Object.assign(extractProperties(node), getMulti(node, [\"sym\"]));\n return {\n type: \"Feature\",\n properties,\n geometry: {\n type: \"Point\",\n coordinates: coordPair$1(node).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 yield getPoint(waypoint);\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 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 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 if (!isNaN(left) && !isNaN(top))\n return { \"icon-offset\": [left, top] };\n return {};\n }), get(iconStyle, \"Icon\", (icon, properties) => {\n val1(icon, \"href\", (href) => {\n properties.icon = href;\n });\n return properties;\n }));\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\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}\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}\nconst GEO_TYPES = [\n \"Polygon\",\n \"LineString\",\n \"Point\",\n \"Track\",\n \"gx:Track\",\n];\nfunction getCoordinates(node) {\n return nodeVal(get1(node, \"coordinates\"));\n}\nfunction getGeometry(node) {\n const geometries = [];\n const coordTimes = [];\n for (const t of [\"MultiGeometry\", \"MultiTrack\", \"gx:MultiTrack\"]) {\n const elem = get1(node, t);\n if (elem) {\n return getGeometry(elem);\n }\n }\n for (const geoType of GEO_TYPES) {\n for (const geomNode of $(node, geoType)) {\n switch (geoType) {\n case \"Point\": {\n const coordinates = coord1(getCoordinates(geomNode));\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(geomNode));\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 $(geomNode, \"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(geomNode);\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 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 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 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}\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 ]), 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 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 */\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 \"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}\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.js.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 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 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 { unref as _unref, resolveComponent as _resolveComponent, 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-578bb8ea\"),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 { IUserProfile } from '@/types/user'\n import {\n IWorkout,\n IWorkoutData,\n IWorkoutObject,\n IWorkoutSegment,\n TCoordinates,\n } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { formatWorkoutDate, getDateWithTZ } from '@/utils/dates'\n\n interface Props {\n authUser: IUserProfile\n displaySegment: boolean\n sports: ISport[]\n workoutData: IWorkoutData\n markerCoordinates?: TCoordinates\n }\n \nexport default /*#__PURE__*/_defineComponent({\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: IUserProfile, 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 let 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 let 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 )\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 (_unref(displayModal))\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 }, null, 8, [\"workoutObject\", \"useImperialUnits\"])\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=578bb8ea&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-578bb8ea\"]])\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 chart.setDatasetVisibility(\n item.datasetIndex,\n !chart.isDatasetVisible(item.datasetIndex)\n )\n chart.update()\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, unref as _unref, createElementVNode as _createElementVNode, mergeProps as _mergeProps, createVNode as _createVNode, isRef as _isRef, 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-7b25bb74\"),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 { IUserProfile } 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: IUserProfile\n workoutData: IWorkoutData\n }\n \nexport default /*#__PURE__*/_defineComponent({\n props: {\n authUser: null,\n workoutData: null\n },\n emits: ['getCoordinates'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IUserProfile\n workoutData: IWorkoutData\n }\n\n \n\n \n\n const { t } = useI18n()\n\n let displayDistance = ref(true)\n let 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 let 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: _unref(displayDistance),\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: !_unref(displayDistance),\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: _unref(beginElevationAtZero),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_isRef(beginElevationAtZero) //@ts-ignore\n ? beginElevationAtZero.value = !_unref(beginElevationAtZero) : beginElevationAtZero = !_unref(beginElevationAtZero)))\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=7b25bb74&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-7b25bb74\"]])\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 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 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-85ac744a\"),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 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 let 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: _unref(markerCoordinates),\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=85ac744a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-85ac744a\"]])\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-241c23ba\"),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 { IUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n import { units } from '@/utils/units'\n\n interface Props {\n authUser: IUserProfile\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n props: {\n authUser: null,\n sports: null\n },\n emits: ['filter'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IUserProfile\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=241c23ba&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-241c23ba\"]])\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, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, createTextVNode as _createTextVNode, withCtx as _withCtx, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3be47bc9\"),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: \"cell-heading\" }\nconst _hoisted_13 = { class: \"text-right\" }\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 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport { format } from 'date-fns'\n import {\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 { WORKOUTS_STORE } from '@/store/constants'\n import { IPagination } from '@/types/api'\n import { ITranslatedSport } from '@/types/sports'\n import { IUserProfile } 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 { getDateWithTZ } 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: IUserProfile\n sports: ITranslatedSport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n props: {\n user: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\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 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 let workoutQuery = getQuery(newQuery, orderByList, defaultOrder.order_by, {\n defaultSort: defaultOrder.order,\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')) {\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\", null, [\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 ]),\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 _createTextVNode(\" \" + _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\", null, [\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('workouts.DATE')), 1),\n _createTextVNode(\" \" + _toDisplayString(_unref(format)(\n _unref(getDateWithTZ)(workout.workout_date, _unref(user).timezone),\n 'dd/MM/yyyy HH:mm'\n )), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_13, [\n _createElementVNode(\"span\", _hoisted_14, _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_15, [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.DURATION')), 1),\n _createTextVNode(\" \" + _toDisplayString(workout.moving), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_17, [\n _createElementVNode(\"span\", _hoisted_18, _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_19, [\n _createElementVNode(\"span\", _hoisted_20, _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_21, [\n _createElementVNode(\"span\", _hoisted_22, _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_23, [\n _createElementVNode(\"span\", _hoisted_24, _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_25\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=3be47bc9&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3be47bc9\"]])\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 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","_createTextVNode","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_defineComponent","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","_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","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","gpxGen","feature","waypoint","gpx","features","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","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","getOrCreateLegendList","legendContainer","getElementById","listContainer","querySelector","Error","htmlLegendPlugin","afterUpdate","chart","ul","containerID","firstChild","legendItems","plugins","legend","labels","generateLabels","item","li","onclick","setDatasetVisibility","datasetIndex","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","point","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","_isRef","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","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","capitalize","getSportLabel","getSportColor","onMouseover","StaticMap","format","NoWorkouts","hiddenFilters","toggleFilters","username","WorkoutsFilters","WorkoutsList"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/workouts.4c428272.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.js","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-9dea86c6\"),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 = /*#__PURE__*/_createTextVNode(\" : \")\nconst _hoisted_28 = [\"disabled\"]\nconst _hoisted_29 = /*#__PURE__*/_createTextVNode(\" : \")\nconst _hoisted_30 = [\"disabled\"]\nconst _hoisted_31 = { class: \"form-item\" }\nconst _hoisted_32 = [\"disabled\"]\nconst _hoisted_33 = { class: \"form-item\" }\nconst _hoisted_34 = { key: 1 }\nconst _hoisted_35 = {\n key: 2,\n class: \"form-buttons\"\n}\nconst _hoisted_36 = [\"disabled\"]\nconst _hoisted_37 = [\"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 { IUserProfile } from '@/types/user'\n import { IWorkout, IWorkoutForm } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { formatWorkoutDate, getDateWithTZ } from '@/utils/dates'\n import { getReadableFileSize } from '@/utils/files'\n import { translateSports } from '@/utils/sports'\n import { convertDistance } from '@/utils/units'\n\n interface Props {\n authUser: IUserProfile\n sports: ISport[]\n isCreation?: boolean\n loading?: boolean\n workout?: IWorkout\n }\n \nexport default /*#__PURE__*/_defineComponent({\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: IUserProfile, 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 let 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: _unref(withGpx),\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: !_unref(withGpx),\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) => ((_unref(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, _unref(workoutForm).sport_id]\n ])\n ]),\n (_unref(isCreation) && _unref(withGpx))\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) => ((_unref(workoutForm).title) = $event))\n }, null, 40, _hoisted_18), [\n [_vModelText, _unref(workoutForm).title]\n ])\n ])),\n (!_unref(withGpx))\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) => ((_unref(workoutForm).workoutDate) = $event))\n }, null, 40, _hoisted_23), [\n [_vModelText, _unref(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) => ((_unref(workoutForm).workoutTime) = $event))\n }, null, 40, _hoisted_24), [\n [_vModelText, _unref(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) => ((_unref(workoutForm).workoutDurationHour) = $event))\n }, null, 40, _hoisted_26), [\n [_vModelText, _unref(workoutForm).workoutDurationHour]\n ]),\n _hoisted_27,\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) => ((_unref(workoutForm).workoutDurationMinutes) = $event))\n }, null, 40, _hoisted_28), [\n [_vModelText, _unref(workoutForm).workoutDurationMinutes]\n ]),\n _hoisted_29,\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) => ((_unref(workoutForm).workoutDurationSeconds) = $event))\n }, null, 40, _hoisted_30), [\n [_vModelText, _unref(workoutForm).workoutDurationSeconds]\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_31, [\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) => ((_unref(workoutForm).workoutDistance) = $event))\n }, null, 40, _hoisted_32), [\n [_vModelText, _unref(workoutForm).workoutDistance]\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_33, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.NOTES')) + \": \", 1),\n _createVNode(_component_CustomTextArea, {\n name: \"notes\",\n input: _unref(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_34, [\n _createVNode(_component_Loader)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_35, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n type: \"submit\",\n disabled: _unref(loading)\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_36),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(onCancel, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_37)\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=9dea86c6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9dea86c6\"]])\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 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, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, 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 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 _createVNode(WorkoutEdition, {\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 ])\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__*/_createTextVNode(\" — \")\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-map-marker\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_12 = { class: \"workout-date\" }\nconst _hoisted_13 = { class: \"workout-link\" }\nconst _hoisted_14 = [\"title\"]\nconst _hoisted_15 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_16 = [\n _hoisted_15\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 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 _hoisted_10,\n _hoisted_11,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.SEGMENT')) + \" \" + _toDisplayString(_unref(workoutObject).segmentId + 1), 1)\n ])\n ])),\n _createElementVNode(\"div\", _hoisted_12, [\n _createTextVNode(_toDisplayString(_unref(workoutObject).workoutDate) + \" - \" + _toDisplayString(_unref(workoutObject).workoutTime) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_13, [\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_16, 10, _hoisted_14)\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 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 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 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, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-dc2fbc66\"),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 = /*#__PURE__*/_createTextVNode(\": \")\nconst _hoisted_6 = { class: \"value\" }\nconst _hoisted_7 = { key: 0 }\nconst _hoisted_8 = { class: \"value\" }\nconst _hoisted_9 = { class: \"value\" }\nconst _hoisted_10 = { class: \"workout-data\" }\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-road\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_12 = { class: \"label\" }\nconst _hoisted_13 = /*#__PURE__*/_createTextVNode(\": \")\nconst _hoisted_14 = { class: \"workout-data\" }\nconst _hoisted_15 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-tachometer\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_16 = { class: \"label\" }\nconst _hoisted_17 = /*#__PURE__*/_createTextVNode(\": \")\nconst _hoisted_18 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_19 = { class: \"label\" }\nconst _hoisted_20 = /*#__PURE__*/_createTextVNode(\": \")\nconst _hoisted_21 = {\n key: 0,\n class: \"workout-data\"\n}\nconst _hoisted_22 = [\"alt\"]\nconst _hoisted_23 = { class: \"label\" }\nconst _hoisted_24 = /*#__PURE__*/_createTextVNode(\": \")\nconst _hoisted_25 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_26 = { class: \"label\" }\nconst _hoisted_27 = /*#__PURE__*/_createTextVNode(\": \")\nconst _hoisted_28 = {\n key: 1,\n class: \"workout-data\"\n}\nconst _hoisted_29 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_30 = { class: \"label\" }\nconst _hoisted_31 = /*#__PURE__*/_createTextVNode(\": \")\nconst _hoisted_32 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_33 = { class: \"label\" }\nconst _hoisted_34 = /*#__PURE__*/_createTextVNode(\": \")\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 }\n \nexport default /*#__PURE__*/_defineComponent({\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 { 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 _hoisted_5,\n _createElementVNode(\"span\", _hoisted_6, _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_7, [\n _createTextVNode(\" (\" + _toDisplayString(_ctx.$t('workouts.PAUSES')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_unref(workoutObject).pauses), 1),\n _createTextVNode(\" - \" + _toDisplayString(_ctx.$t('workouts.TOTAL_DURATION')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_unref(workoutObject).duration) + \")\", 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1),\n _hoisted_13,\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_14, [\n _hoisted_15,\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.AVERAGE_SPEED')), 1),\n _hoisted_17,\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_18,\n _createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')), 1),\n _hoisted_20,\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_21, [\n _createElementVNode(\"img\", {\n class: \"mountains\",\n src: \"/img/workouts/mountains.svg\",\n alt: _ctx.$t('workouts.ELEVATION')\n }, null, 8, _hoisted_22),\n _createElementVNode(\"span\", _hoisted_23, _toDisplayString(_ctx.$t('workouts.MIN_ALTITUDE')), 1),\n _hoisted_24,\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_25,\n _createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('workouts.MAX_ALTITUDE')), 1),\n _hoisted_27,\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_28, [\n _hoisted_29,\n _createElementVNode(\"span\", _hoisted_30, _toDisplayString(_ctx.$t('workouts.ASCENT')), 1),\n _hoisted_31,\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 _hoisted_32,\n _createElementVNode(\"span\", _hoisted_33, _toDisplayString(_ctx.$t('workouts.DESCENT')), 1),\n _hoisted_34,\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=dc2fbc66&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dc2fbc66\"]])\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 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\nfunction getPoints$1(node, pointname) {\n const pts = $(node, pointname);\n if (pts.length < 2)\n return; // Invalid line in GeoJSON\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 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 return {\n line: line,\n times: times,\n extendedValues: extendedValues,\n };\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}\nfunction getPoint(node) {\n const properties = Object.assign(extractProperties(node), getMulti(node, [\"sym\"]));\n return {\n type: \"Feature\",\n properties,\n geometry: {\n type: \"Point\",\n coordinates: coordPair$1(node).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 yield getPoint(waypoint);\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 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 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 if (!isNaN(left) && !isNaN(top))\n return { \"icon-offset\": [left, top] };\n return {};\n }), get(iconStyle, \"Icon\", (icon, properties) => {\n val1(icon, \"href\", (href) => {\n properties.icon = href;\n });\n return properties;\n }));\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\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}\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}\nconst GEO_TYPES = [\n \"Polygon\",\n \"LineString\",\n \"Point\",\n \"Track\",\n \"gx:Track\",\n];\nfunction getCoordinates(node) {\n return nodeVal(get1(node, \"coordinates\"));\n}\nfunction getGeometry(node) {\n const geometries = [];\n const coordTimes = [];\n for (const t of [\"MultiGeometry\", \"MultiTrack\", \"gx:MultiTrack\"]) {\n const elem = get1(node, t);\n if (elem) {\n return getGeometry(elem);\n }\n }\n for (const geoType of GEO_TYPES) {\n for (const geomNode of $(node, geoType)) {\n switch (geoType) {\n case \"Point\": {\n const coordinates = coord1(getCoordinates(geomNode));\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(geomNode));\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 $(geomNode, \"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(geomNode);\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 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 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 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}\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 ]), 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 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 */\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 \"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}\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.js.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 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 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 { unref as _unref, resolveComponent as _resolveComponent, 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-578bb8ea\"),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 { IUserProfile } from '@/types/user'\n import {\n IWorkout,\n IWorkoutData,\n IWorkoutObject,\n IWorkoutSegment,\n TCoordinates,\n } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { formatWorkoutDate, getDateWithTZ } from '@/utils/dates'\n\n interface Props {\n authUser: IUserProfile\n displaySegment: boolean\n sports: ISport[]\n workoutData: IWorkoutData\n markerCoordinates?: TCoordinates\n }\n \nexport default /*#__PURE__*/_defineComponent({\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: IUserProfile, 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 let 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 let 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 )\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 (_unref(displayModal))\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 }, null, 8, [\"workoutObject\", \"useImperialUnits\"])\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=578bb8ea&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-578bb8ea\"]])\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 chart.setDatasetVisibility(\n item.datasetIndex,\n !chart.isDatasetVisible(item.datasetIndex)\n )\n chart.update()\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, unref as _unref, createElementVNode as _createElementVNode, mergeProps as _mergeProps, createVNode as _createVNode, isRef as _isRef, 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-7b25bb74\"),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 { IUserProfile } 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: IUserProfile\n workoutData: IWorkoutData\n }\n \nexport default /*#__PURE__*/_defineComponent({\n props: {\n authUser: null,\n workoutData: null\n },\n emits: ['getCoordinates'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IUserProfile\n workoutData: IWorkoutData\n }\n\n \n\n \n\n const { t } = useI18n()\n\n let displayDistance = ref(true)\n let 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 let 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: _unref(displayDistance),\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: !_unref(displayDistance),\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: _unref(beginElevationAtZero),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_isRef(beginElevationAtZero) //@ts-ignore\n ? beginElevationAtZero.value = !_unref(beginElevationAtZero) : beginElevationAtZero = !_unref(beginElevationAtZero)))\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=7b25bb74&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-7b25bb74\"]])\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 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 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-85ac744a\"),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 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 let 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: _unref(markerCoordinates),\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=85ac744a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-85ac744a\"]])\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-241c23ba\"),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 { IUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n import { units } from '@/utils/units'\n\n interface Props {\n authUser: IUserProfile\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n props: {\n authUser: null,\n sports: null\n },\n emits: ['filter'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IUserProfile\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=241c23ba&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-241c23ba\"]])\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, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, createTextVNode as _createTextVNode, withCtx as _withCtx, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3be47bc9\"),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: \"cell-heading\" }\nconst _hoisted_13 = { class: \"text-right\" }\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 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport { format } from 'date-fns'\n import {\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 { WORKOUTS_STORE } from '@/store/constants'\n import { IPagination } from '@/types/api'\n import { ITranslatedSport } from '@/types/sports'\n import { IUserProfile } 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 { getDateWithTZ } 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: IUserProfile\n sports: ITranslatedSport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n props: {\n user: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\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 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 let workoutQuery = getQuery(newQuery, orderByList, defaultOrder.order_by, {\n defaultSort: defaultOrder.order,\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')) {\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\", null, [\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 ]),\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 _createTextVNode(\" \" + _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\", null, [\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('workouts.DATE')), 1),\n _createTextVNode(\" \" + _toDisplayString(_unref(format)(\n _unref(getDateWithTZ)(workout.workout_date, _unref(user).timezone),\n 'dd/MM/yyyy HH:mm'\n )), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_13, [\n _createElementVNode(\"span\", _hoisted_14, _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_15, [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.DURATION')), 1),\n _createTextVNode(\" \" + _toDisplayString(workout.moving), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_17, [\n _createElementVNode(\"span\", _hoisted_18, _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_19, [\n _createElementVNode(\"span\", _hoisted_20, _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_21, [\n _createElementVNode(\"span\", _hoisted_22, _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_23, [\n _createElementVNode(\"span\", _hoisted_24, _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_25\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=3be47bc9&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3be47bc9\"]])\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 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","_createTextVNode","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_defineComponent","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","_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","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","gpxGen","feature","waypoint","gpx","features","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","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","getOrCreateLegendList","legendContainer","getElementById","listContainer","querySelector","Error","htmlLegendPlugin","afterUpdate","chart","ul","containerID","firstChild","legendItems","plugins","legend","labels","generateLabels","item","li","onclick","setDatasetVisibility","datasetIndex","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","point","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","_isRef","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","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","capitalize","getSportLabel","getSportColor","onMouseover","StaticMap","format","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 5570ae1b..1cdf39a2 100644 --- a/fittrackee_client/package.json +++ b/fittrackee_client/package.json @@ -1,6 +1,6 @@ { "name": "fittrackee_client", - "version": "0.6.4", + "version": "0.6.5", "private": true, "scripts": { "serve": "vue-cli-service serve", diff --git a/pyproject.toml b/pyproject.toml index 7f8a2f04..d81fba18 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "fittrackee" -version = "0.6.4" +version = "0.6.5" description = "Self-hosted outdoor workout/activity tracker" authors = ["SamR1"] license = "AGPL-3.0"