PageSourceSearch

https://sporlyst.com/assets/ActivityDetail-o6NlyUCN.js

js sporlyst.com collected 2026-10-02 01:44:25 UTC 49,235 bytes, 1 lines download raw bytes

1import{d as Ge,r as m,o as st,a as Ut,J as Xe,c as b,m as s,a1 as Wt,D as Bt,s as M,W as It,M as v,Q as zt,b as l,j as ee,v as Ce,k as u,F as J,h as le,N as Ye,u as o,n as te,t as C,g as Ze,p as Vt,i as Nt,q as vt,a2 as pt,f as ke,H as we,E as jt,K as Ht,Z as Yt}from"./index-BWLfjhcL.js";import{L as Q,c as gt}from"./basemaps-BdMlw5AC.js";import{_ as Gt}from"./ActivityStreamChart.vue_vue_type_script_setup_true_lang-CG4A0mg4.js";import{u as _t}from"./useUnits-C5UY8e1P.js";import{_ as Xt}from"./GarminAttribution.vue_vue_type_script_setup_true_lang-CLfgrDBU.js";import{_ as Zt}from"./GarminDataNote.vue_vue_type_script_setup_true_lang-xc6NSIGO.js";import{_ as Kt,i as Jt,s as qt}from"./StravaAttribution.vue_vue_type_script_setup_true_lang-C3LfZvQC.js";import"./useEchartsTheme-DxmxMFj5.js";import"./useGarminAttribution-B5hWPBns.js";import"./api_logo_pwrdBy_strava_horiz_white-nCHXI2PK.js";const Qt="/assets/Garmin-connect-icon-logo-zMO_rScU.png",ea=Ge({__name:"ActivityRouteMap",props:{polyline:{},latlng:{},hoverIndex:{}},setup(Ie){const O=Ie,G=m(null);let h=null,W=null,oe=null,B=null;const $=[{id:"dark",label:"Dark",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/></svg>',routeColor:"#CCFF00"},{id:"light",label:"Light",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2"/><path d="M12 20v2"/><path d="m4.93 4.93 1.41 1.41"/><path d="m17.66 17.66 1.41 1.41"/><path d="M2 12h2"/><path d="M20 12h2"/><path d="m6.34 17.66-1.41 1.41"/><path d="m19.07 4.93-1.41 1.41"/></svg>',routeColor:"#2563EB"},{id:"satellite",label:"Satellite",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M13 7 9 3 5 7l4 4"/><path d="m17 11 4 4-4 4-4-4"/><path d="m8 12 4 4 6-6-4-4Z"/><path d="m16 8 3-3"/><path d="M9 21a6 6 0 0 0-6-6"/></svg>',routeColor:"#CCFF00"},{id:"outdoor",label:"Outdoor",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m8 3 4 8 5-5 5 15H2L8 3z"/></svg>',routeColor:"#FF6B00"}],I=m("dark"),S={};function d(){for(const k of $){const f=S[k.id];f&&(I.value===k.id?(f.style.background="#CCFF00",f.style.color="#000"):(f.style.background="transparent",f.style.color="rgba(255,255,255,0.7)"))}}function Fe(){if(!h)return;const k=Q.DomUtil.create("div","",h.getContainer());k.style.cssText="position:absolute;top:8px;right:8px;z-index:1000;display:flex;flex-direction:column;gap:2px;background:rgba(0,0,0,0.6);backdrop-filter:blur(4px);border-radius:8px;padding:4px;",Q.DomEvent.disableClickPropagation(k);for(const f of $){const w=Q.DomUtil.create("button","",k);w.type="button",w.title=f.label,w.innerHTML=f.icon,w.style.cssText="width:28px;height:28px;border:none;cursor:pointer;border-radius:6px;display:flex;align-items:center;justify-content:center;transition:background 0.15s,color 0.15s;",Q.DomEvent.on(w,"click",()=>Oe(f.id)),S[f.id]=w}d()}function Oe(k){if(!h||I.value===k)return;I.value=k;const f=$.find(w=>w.id===k);oe&&oe.remove(),oe=gt(f.id).addTo(h),d(),A(!1)}function a(k){const f=[];let w=0,T=0,X=0;for(;w<k.length;){let N,j=0,F=0;do N=k.charCodeAt(w++)-63,F|=(N&31)<<j,j+=5;while(N>=32);T+=F&1?~(F>>1):F>>1,j=0,F=0;do N=k.charCodeAt(w++)-63,F|=(N&31)<<j,j+=5;while(N>=32);X+=F&1?~(F>>1):F>>1,f.push([T/1e7,X/1e7])}return f}function V(){return O.latlng&&O.latlng.length>0?O.latlng:O.polyline?a(O.polyline):null}function A(k=!0){if(!h)return;h.eachLayer(T=>{(T instanceof Q.Polyline||T instanceof Q.CircleMarker)&&T.remove()}),W=null;const f=V();if(!f||f.length===0)return;const w=$.find(T=>T.id===I.value).routeColor;W=Q.polyline(f,{color:w,weight:3,opacity:.9}).addTo(h),Q.circleMarker(f[0],{radius:6,fillColor:w,color:"#000000",weight:2,fillOpacity:1}).addTo(h),Q.circleMarker(f[f.length-1],{radius:6,fillColor:"#ff4444",color:"#1a0000",weight:2,fillOpacity:1}).addTo(h),k&&h.fitBounds(W.getBounds(),{padding:[20,20]})}return st(()=>{G.value&&(h=Q.map(G.value,{zoomControl:!0,scrollWheelZoom:!0}),oe=gt(I.value).addTo(h),A(),Fe())}),Ut(()=>{h==null||h.remove(),h=null}),Xe([()=>O.polyline,()=>O.latlng],()=>{A()}),Xe(()=>O.hoverIndex,k=>{if(!h||(B&&(B.remove(),B=null),k==null))return;const f=V();if(!f||k>=f.length)return;const w=$.find(T=>T.id===I.value).routeColor;B=Q.circleMarker(f[k],{radius:8,fillColor:"#ffffff",color:w,weight:3,fillOpacity:1}).addTo(h)}),(k,f)=>(s(),b("div",{ref_key:"mapEl",ref:G,class:"w-full h-full rounded-xl"},null,512))}}),ta={class:"bg-[#1c1b1b] border border-[#444933] rounded-2xl w-full max-w-3xl max-h-[90vh] overflow-y-auto"},aa={class:"flex items-center justify-between px-5 py-4 border-b border-[#444933]"},na={class:"p-5 space-y-5"},la={class:"flex flex-wrap gap-x-8 gap-y-4 items-start"},oa={key:0,class:"space-y-1.5"},sa={class:"flex items-center gap-2"},ia={key:1,class:"space-y-1.5"},ra={class:"flex gap-1.5"},ua=["onClick"],ca={class:"space-y-1.5"},da={class:"flex items-center gap-2"},va={class:"space-y-1.5"},pa={class:"flex gap-4 flex-wrap"},ga={class:"flex items-center gap-1.5 cursor-pointer"},fa={class:"flex items-center gap-1.5 cursor-pointer"},_a={class:"flex items-center gap-1.5 cursor-pointer"},ba=["title"],ma=["disabled"],ya={key:0,class:"text-[10px] font-bold uppercase tracking-widest text-[#CCFF00] border border-[#CCFF00]/40 rounded px-1 py-0.5 leading-none"},xa={key:0,class:"flex items-center gap-1.5 pt-1"},ha=["onClick"],ka={class:"flex flex-wrap gap-x-8 gap-y-4 items-start"},wa={class:"space-y-1.5"},Ca={class:"flex gap-1.5 flex-wrap items-center"},Fa=["onClick"],Sa=["onClick"],Ma={class:"space-y-1.5"},$a={class:"flex gap-1.5"},La=["onClick"],Ta={class:"space-y-1.5"},Aa={class:"flex items-center gap-2"},Oa={class:"text-xs text-[#c4c9ac] w-8 tabular-nums"},Ea={class:"space-y-1.5"},Ra={class:"flex items-center gap-2"},Pa={class:"text-xs text-[#c4c9ac] w-8 tabular-nums"},Da={class:"border border-[#444933] rounded-xl p-4 space-y-3"},Ua={key:0,class:"flex gap-1.5 flex-wrap"},Wa=["onClick"],Ba={class:"flex flex-wrap gap-4 items-center"},Ia={class:"cursor-pointer px-3 py-1.5 rounded-lg border border-[#444933] text-xs font-bold uppercase tracking-widest text-[#c4c9ac] hover:border-[#c4c9ac] transition-colors flex items-center gap-1.5"},za={key:1,class:"text-xs text-[#444933] uppercase tracking-widest"},Va={key:1,class:"flex flex-wrap gap-x-6 gap-y-3 items-center"},Na={class:"flex items-center gap-2"},ja={class:"text-xs text-[#c4c9ac] w-8 tabular-nums"},Ha={class:"flex items-center gap-2"},Ya={class:"text-xs text-[#c4c9ac] w-8 tabular-nums"},Ga={class:"space-y-2"},Xa={class:"flex flex-wrap gap-2"},Za=["onClick"],Ka={class:"space-y-2"},Ja={class:"flex items-center justify-between"},qa={class:"text-xs text-[#444933] uppercase tracking-widest"},Qa={class:"flex justify-end gap-3 pt-1"},en=["disabled"],L=1080,D=1920,Be=200,Ae=90,ft=74,tn=42,an=32,nn=48,ln=100,on=160,ot="#CCFF00",sn=Ge({__name:"ActivityExportModal",props:{activity:{},polyline:{},latlng:{}},emits:["close"],setup(Ie){const{isPro:O}=Wt(Bt()),{distanceUnit:G,speedUnit:h,elevationUnit:W,toDisplayDistance:oe,toDisplaySpeed:B,toDisplayElevation:$,formatPace:I}=_t(),S=Ie,d=L/2,Fe=Be+240,Oe=L*.95,a=D*.55,V=m(ot),A=m("#ffffff"),k=m(2),f=m(!0),w=m(!0),T=m(!0),X=m(!0),N=m("brand"),j=m(!1),F=m(null),H=m([]),q=m("brand"),R=m(null),z=m(null),Z=m(""),_e=m(.55),P=m(1),ae=m(0),Y=m(0),Ee=m(!1),Se=m({x:0,y:0}),se=m("columns"),ie=m(3),ne=m(.72),de=m(1),ve=m(1),Re=[{label:"Thin",value:1},{label:"Med",value:2},{label:"Thick",value:3}],Ke=[{label:"Vertical",value:"vertical"},{label:"Columns",value:"columns"}],Je=[{label:"S",value:.75},{label:"M",value:1},{label:"L",value:1.25}],Pe=[{label:"Brand",value:"brand"},{label:"Dark",value:"dark"}
1,{label:"Transparent",value:"transparent"}],i=[{label:"Brand",value:"brand"},{label:"Text",value:"text"}],r=M(()=>!R.value&&q.value==="transparent"),p=M(()=>R.value?"with background":q.value==="brand"?"brand fill":q.value==="dark"?"dark fill":"transparent bg"),U={running:"directions_run",cycling:"directions_bike",swimming:"pool",hiking:"hiking",walking:"directions_walk",rowing:"rowing"},pe={indoor:"exercise",trail:"hiking",treadmill:"directions_run"},ge=M(()=>{var n,c;const t=((n=S.activity.sport)==null?void 0:n.toLowerCase())??"",e=((c=S.activity.sport_subtype)==null?void 0:c.toLowerCase())??"";return pe[e]??U[t]??"sports"});function K(){if(!z.value)return;const t=Math.max(L/z.value.width,D/z.value.height),e=P.value,n=Math.max(0,(z.value.width*t*e-L)/2),c=Math.max(0,(z.value.height*t*e-D)/2);ae.value=Math.max(-n,Math.min(n,ae.value)),Y.value=Math.max(-c,Math.min(c,Y.value))}function re(t){var g;const e=((g=t.target.files)==null?void 0:g[0])??null;if(Z.value&&URL.revokeObjectURL(Z.value),!e){R.value=null,z.value=null,Z.value="";return}R.value=e,P.value=1,ae.value=0,Y.value=0;const n=URL.createObjectURL(e);Z.value=n;const c=new Image;c.onload=()=>{z.value=c,Le()},c.src=n}function ue(){Z.value&&URL.revokeObjectURL(Z.value),R.value=null,z.value=null,Z.value="",P.value=1,ae.value=0,Y.value=0,Le()}function Me(){const t=F.value;return t?D/t.clientHeight:1}function $e(t){z.value&&(Ee.value=!0,Se.value={x:t.clientX,y:t.clientY},t.target.setPointerCapture(t.pointerId))}function ze(t){if(!Ee.value||!z.value)return;const e=Me(),n=(t.clientX-Se.value.x)*e,c=(t.clientY-Se.value.y)*e;Se.value={x:t.clientX,y:t.clientY},ae.value+=n,Y.value+=c,K(),Le()}function De(){Ee.value=!1}It(()=>{Z.value&&URL.revokeObjectURL(Z.value)});function be(t,e){return t+Math.round(e*255).toString(16).padStart(2,"0")}function Ve(t){const e=[];let n=0,c=0,g=0;for(;n<t.length;){let _,x=0,y=0;do _=t.charCodeAt(n++)-63,y|=(_&31)<<x,x+=5;while(_>=32);c+=y&1?~(y>>1):y>>1,x=0,y=0;do _=t.charCodeAt(n++)-63,y|=(_&31)<<x,x+=5;while(_>=32);g+=y&1?~(y>>1):y>>1,e.push([c/1e7,g/1e7])}return e}function me(t){if(!t)return"--";const[e,n,c]=t.split(":").map(Number);return e>0?`${e}h ${n}m`:`${n}m ${Math.round(c)}s`}function Ne(t,e){const c=6378137*(e*Math.PI/180),g=6378137*Math.log(Math.tan(Math.PI/4+t*Math.PI/360));return[c,g]}const ye=M(()=>S.latlng&&S.latlng.length>0?S.latlng:S.polyline?Ve(S.polyline):null),ce=M(()=>!!(ye.value&&ye.value.length>0));function bt(t){if(!t)return 0;const[e,n,c]=t.split(":").map(Number);return e*3600+n*60+(c||0)}const it=M(()=>{var t;return((t=S.activity.sport)==null?void 0:t.toLowerCase())==="running"}),qe=M(()=>{const t=S.activity,e=[],n=t.moving_time||t.duration,c=bt(n),g=c>0?t.distance/(c/3600):null;e.push({key:"distance",label:"Distance",value:oe(t.distance).toFixed(2),unit:G.value,defaultOn:!0}),t.moving_time?(e.push({key:"move_time",label:"Moving Time",value:me(t.moving_time),unit:"",defaultOn:!0}),e.push({key:"duration",label:"Duration",value:me(t.duration),unit:"",defaultOn:!1})):e.push({key:"duration",label:"Duration",value:me(t.duration),unit:"",defaultOn:!0}),g!==null&&e.push({key:"avg_speed_calc",label:"Avg Speed",value:B(g).toFixed(1),unit:h.value,defaultOn:!it.value}),t.calories&&e.push({key:"calories",label:"Calories",value:String(Math.round(t.calories)),unit:"kcal",defaultOn:!1}),t.avg_heart_rate&&e.push({key:"avg_hr",label:"Avg HR",value:String(t.avg_heart_rate),unit:"bpm",defaultOn:!1}),t.max_heart_rate&&e.push({key:"max_hr",label:"Max HR",value:String(t.max_heart_rate),unit:"bpm",defaultOn:!1}),t.aerobic_te&&e.push({key:"aerobic_te",label:"Aerobic TE",value:t.aerobic_te.toFixed(1),unit:"",defaultOn:!1}),t.number_of_laps&&e.push({key:"laps",label:"Laps",value:String(t.number_of_laps),unit:"",defaultOn:!1}),t.best_lap_time&&e.push({key:"best_lap",label:"Best Lap",value:me(t.best_lap_time),unit:"",defaultOn:!1});const _=t.running_data;_&&(_.avg_pace&&e.push({key:"avg_pace",label:"Avg Pace",value:I(_.avg_pace),unit:"",defaultOn:it.value}),_.avg_run_cadence&&e.push({key:"cadence",label:"Cadence",value:String(_.avg_run_cadence),unit:"spm",defaultOn:!1}),_.steps&&e.push({key:"steps",label:"Steps",value:_.steps.toLocaleStr
1ing(),unit:"",defaultOn:!1}),_.total_ascent&&e.push({key:"ascent",label:"Ascent",value:String(Math.round($(_.total_ascent))),unit:W.value,defaultOn:!1}),_.total_descent&&e.push({key:"descent",label:"Descent",value:String(Math.round($(_.total_descent))),unit:W.value,defaultOn:!1}),_.avg_power&&e.push({key:"avg_pwr",label:"Avg Power",value:String(_.avg_power),unit:"W",defaultOn:!1}));const x=t.road_cycling_data;x&&(x.total_ascent&&e.push({key:"ascent",label:"Ascent",value:String(Math.round($(x.total_ascent))),unit:W.value,defaultOn:!1}),x.total_descent&&e.push({key:"descent",label:"Descent",value:String(Math.round($(x.total_descent))),unit:W.value,defaultOn:!1}),x.avg_power&&e.push({key:"avg_pwr",label:"Avg Power",value:String(x.avg_power),unit:"W",defaultOn:!1}),x.normalized_power&&e.push({key:"np",label:"Weighted Avg",value:String(Math.round(x.normalized_power)),unit:"W",defaultOn:!1}),x.training_stress_score&&e.push({key:"tss",label:"Load",value:x.training_stress_score.toFixed(1),unit:"",defaultOn:!1}));const y=t.indoor_cycling_data;return y&&(y.avg_cadence&&e.push({key:"cadence",label:"Cadence",value:String(y.avg_cadence),unit:"rpm",defaultOn:!1}),y.avg_power&&e.push({key:"avg_pwr",label:"Avg Power",value:String(y.avg_power),unit:"W",defaultOn:!1}),y.max_power&&e.push({key:"max_pwr",label:"Max Power",value:String(y.max_power),unit:"W",defaultOn:!1}),y.normalized_power&&e.push({key:"np",label:"Weighted Avg",value:String(Math.round(y.normalized_power)),unit:"W",defaultOn:!1}),y.max_20min_power&&e.push({key:"20min",label:"20min Pwr",value:String(y.max_20min_power),unit:"W",defaultOn:!1}),y.training_stress_score&&e.push({key:"tss",label:"Load",value:y.training_stress_score.toFixed(1),unit:"",defaultOn:!1})),e});function mt(t){const e=H.value.indexOf(t);e>=0?H.value.splice(e,1):H.value.push(t)}Xe(qe,t=>{H.value.length===0&&(H.value=t.filter(e=>e.defaultOn).map(e=>e.key))},{immediate:!0});function Qe(){return Math.round(140*ve.value)}function yt(t){let e=Be;T.value&&(e+=on);const n=e;f.value&&(e+=ft),w.value&&(e+=tn),(f.value||w.value)&&(e+=an);const c=e,g=e,_=se.value==="columns"?Math.ceil(t/ie.value):t;e+=_*Qe(),t>0&&(e+=nn);const x=e,y=x,fe=D-Be-ln,xe=D-Be-16;return{headerStart:n,headerEnd:c,statsStart:g,statsEnd:x,routeTop:y,routeBottom:fe,brandY:xe}}function xt(t){t.fillStyle="#0E0E0E",t.fillRect(0,0,L,D);const e=t.createRadialGradient(d,Fe,0,d,Fe,Oe);e.addColorStop(0,"rgba(204,255,0,0.20)"),e.addColorStop(.55,"rgba(204,255,0,0.05)"),e.addColorStop(1,"rgba(204,255,0,0)"),t.fillStyle=e,t.fillRect(0,0,L,D);const n=t.createLinearGradient(0,a,0,D);n.addColorStop(0,"rgba(19,19,19,0)"),n.addColorStop(1,"rgba(19,19,19,0.85)"),t.fillStyle=n,t.fillRect(0,a,L,D-a)}function ht(t){t.fillStyle="#131313",t.fillRect(0,0,L,D)}function kt(t,e){const n=Math.max(L/e.width,D/e.height),c=P.value,g=e.width*n*c,_=e.height*n*c;t.drawImage(e,(L-g)/2+ae.value,(D-_)/2+Y.value,g,_),t.fillStyle=`rgba(0,0,0,${_e.value})`,t.fillRect(0,0,L,D)}function wt(t,e){t.font='120px "Material Symbols Outlined"',t.fillStyle=ot,t.textAlign="center",t.textBaseline="top",t.fillText(ge.value,L/2,e)}function Ct(t,e){const n=S.activity,c=L/2;let g=e;if(t.textAlign="center",t.textBaseline="top",f.value){const _=n.sport_subtype?`${n.sport_subtype} ${n.sport}`:n.sport,x=(n.title||_).toUpperCase();t.font="bold 56px Lexend, sans-serif",t.fillStyle=A.value,t.fillText(x,c,g,L-Ae*2),g+=ft}if(w.value){const _=new Date(n.date).toLocaleDateString("en-GB",{weekday:"short",year:"numeric",month:"short",day:"numeric"});t.font="26px Lexend, sans-serif",t.fillStyle=be(A.value,ne.value),t.fillText(_.toUpperCase(),c,g)}}function Ft(t,e,n){se.value==="columns"?Mt(t,e,n):St(t,e,n)}function rt(t,e,n,c,g){const _=Math.round(68*ve.value),x=Math.round(30*ve.value),y=Math.round(20*de.value);t.textBaseline="top",t.font=`bold ${y}px Lexend, sans-serif`,t.fillStyle=be(A.value,ne.value),t.textAlign="center",t.fillText(e.label.toUpperCase(),n,c),t.font=`bold ${_}px Lexend, sans-serif`;const fe=t.measureText(e.value).width;t.font=`${x}px Lexend, sans-serif`;const xe=e.unit?t.measureText(" "+e.unit).width:0,Te=Math.min(fe+xe,g),Ue=n-Te/2,We=c+y+8;t.font=`bold ${_}px Lexend, sans-serif`,t.fillStyle=A.value,t.textAlign="left",t.fillText(e.value,Ue,We,g),e.unit&&(t.font=`${x}px Lexend, sans-serif`,t.fillStyle=be(A.value,ne.value),t.fillText(" "+e.unit,Ue+fe,We+(_-x)))}function St(t,e,n){const c=L/2,g=Qe();e.forEach((_,x)=>{rt(t,_,c,n+x*g,L-Ae*2)})}function Mt(t,e,n){const c=ie.value,g=(L-Ae*2)/c,_=Qe();e.forEach((x,y)=>{const fe=y%c,xe=Math.floor(y/c),Te=Ae+fe*g+g/2;rt(t,x,Te,n+xe*_,g-16)})}function $t(t,e,n,c){const g=e.map(([E,he])=>Ne(E,he)),_=g.map(E=>E[0]),x=g.map(E=>E[1]),y=Math.min(..._),fe=Math.max(..._),xe=Math.min(...x),Te=Math.max(...x),Ue=fe-y||1e-4,We=Te-xe||1e-4,ut=L-Ae*2,et=c-n;if(et<20)return;const je=Math.min(ut/Ue,et/We),At=Ue*je,Ot=We*je,Et=Ae+(ut-At)/2,Rt=n+(et-Ot)/2,He=(E,he)=>[Et+(E-y)*je,Rt+(Te-he)*je],tt=k.value*3;t.beginPath();const[at,nt]=He(g[0][0],g[0][1]);t.moveTo(at,nt);for(let E=1;E<g.length;E++){const[he,lt]=He(g[E][0],g[E][1]);t.lineTo(he,lt)}t.strokeStyle=be(V.value,.22),t.lineWidth=tt*4,t.lineJoin="round",t.lineCap="round",t.stroke(),t.beginPath(),t.moveTo(at,nt);for(let E=1;E<g.length;E++){const[he,lt]=He(g[E][0],g[E][1]);t.lineTo(he,lt)}t.strokeStyle=V.value,t.lineWidth=tt,t.lineJoin="round",t.lineCap="round",t.stroke();const ct=tt*2.2;t.beginPath(),t.arc(at,nt,ct,0,Math.PI*2),t.fillStyle=V.value,t.fill(),t.strokeStyle="#283500",t.lineWidth=2,t.stroke();const dt=g[g.length-1],[Pt,Dt]=He(dt[0],dt[1]);t.beginPath(),t.arc(Pt,Dt,ct,0,Math.PI*2),t.fillStyle="#ff4444",t.fill(),t.strokeStyle="#1a0000",t.lineWidth=2,t.stroke()}function Lt(t,e){t.textAlign="center",t.textBaseline="bottom",t.font='400 52px "Fugaz One", sans-serif',t.fillStyle=N.value==="brand"?ot:A.value,t.fillText("SPORLYST",L/2,e)}async function Le(){const t=F.value;if(!t)return;await document.fonts.ready;try{await document.fonts.load('120px "Material Symbols Outlined"')}catch{}t.width=L,t.height=D;const e=t.getContext("2d");e.clearRect(0,0,L,D),z.value?kt(e,z.value):q.value==="brand"?xt(e):q.value==="dark"&&ht(e);const n=qe.value.filter(g=>H.value.includes(g.key)),c=yt(n.length);T.value&&wt(e,Be),(f.value||w.value)&&Ct(e,c.headerStart),n.length>0&&Ft(e,n,c.statsStart),ce.value&&ye.value&&$t(e,ye.value,c.routeTop,c.routeBottom),X.value&&Lt(e,c.brandY)}async function Tt(){j.value=!0;try{await Le();const t=F.value;if(!t)return;const e=document.createElement("a"),n=S.activity.sport_subtype?`${S.activity.sport_subtype}_${S.activity.sport}`:S.activity.sport,c=S.activity.title||n;e.download=`${c}_${S.activity.date}.png`.replace(/[^a-z0-9._-]/gi,"_"),e.href=t.toDataURL("image/png"),e.click()}finally{j.value=!1}}return Xe([V,k,A,f,w,T,X,N,H,q,_e,P,ae,Y,se,ie,ne,de,ve],Le,{deep:!0}),st(()=>{O.value||(X.value=!0),Le()}),(t,e)=>(s(),v(zt,{to:"body"},[l("div",{class:"fixed inset-0 z-[9999] flex items-center justify-center bg-black/80 backdrop-blur-sm p-4",onClick:e[18]||(e[18]=Nt(n=>t.$emit("close"),["self"]))},[l("div",ta,[l("div",aa,[e[20]||(e[20]=l("h2",{class:"text-base font-black uppercase tracking-widest text-[#e5e2e1]"},"Export · Story / Reel (9:16)",-1)),l("button",{onClick:e[0]||(e[0]=n=>t.$emit("close")),class:"text-[#c4c9ac] hover:text-[#CCFF00] transition-colors"},e[19]||(e[19]=[l("span",{class:"material-symbols-outlined"},"close",-1)]))]),l("div",na,[l("div",la,[ce.value?(s(),b("div",oa,[e[21]||(e[21]=l("p",{class:"text-xs font-bold uppercase tracking-widest text-[#c4c9ac]"},"Route Color",-1)),l("div",sa,[ee(l("input",{type:"color","onUpdate:modelValue":e[1]||(e[1]=n=>V.value=n),class:"w-8 h-8 rounded-lg cursor-pointer border border-[#444933] bg-transparent p-0.5"},null,512),[[Ce,V.value]]),l("button",{onClick:e[2]||(e[2]=n=>
1V.value="#CCFF00"),class:"text-xs text-[#CCFF00] font-bold uppercase tracking-widest hover:underline"},"Reset")])])):u("",!0),ce.value?(s(),b("div",ia,[e[22]||(e[22]=l("p",{class:"text-xs font-bold uppercase tracking-widest text-[#c4c9ac]"},"Line Weight",-1)),l("div",ra,[(s(),b(J,null,le(Re,n=>l("button",{key:n.value,onClick:c=>k.value=n.value,class:te(["px-3 py-1.5 rounded-lg border text-xs font-bold uppercase tracking-widest transition-colors",k.value===n.value?"border-[#CCFF00] bg-[#CCFF00]/10 text-[#CCFF00]":"border-[#444933] text-[#c4c9ac] hover:border-[#c4c9ac]"])},C(n.label),11,ua)),64))])])):u("",!0),l("div",ca,[e[23]||(e[23]=l("p",{class:"text-xs font-bold uppercase tracking-widest text-[#c4c9ac]"},"Text Color",-1)),l("div",da,[ee(l("input",{type:"color","onUpdate:modelValue":e[3]||(e[3]=n=>A.value=n),class:"w-8 h-8 rounded-lg cursor-pointer border border-[#444933] bg-transparent p-0.5"},null,512),[[Ce,A.value]]),l("button",{onClick:e[4]||(e[4]=n=>A.value="#ffffff"),class:"text-xs text-[#CCFF00] font-bold uppercase tracking-widest hover:underline"},"Reset")])]),l("div",va,[e[29]||(e[29]=l("p",{class:"text-xs font-bold uppercase tracking-widest text-[#c4c9ac]"},"Include",-1)),l("div",pa,[l("label",ga,[ee(l("input",{type:"checkbox","onUpdate:modelValue":e[5]||(e[5]=n=>f.value=n),class:"accent-[#CCFF00] w-3.5 h-3.5"},null,512),[[Ye,f.value]]),e[24]||(e[24]=l("span",{class:"text-sm text-[#e5e2e1]"},"Title",-1))]),l("label",fa,[ee(l("input",{type:"checkbox","onUpdate:modelValue":e[6]||(e[6]=n=>w.value=n),class:"accent-[#CCFF00] w-3.5 h-3.5"},null,512),[[Ye,w.value]]),e[25]||(e[25]=l("span",{class:"text-sm text-[#e5e2e1]"},"Date",-1))]),l("label",_a,[ee(l("input",{type:"checkbox","onUpdate:modelValue":e[7]||(e[7]=n=>T.value=n),class:"accent-[#CCFF00] w-3.5 h-3.5"},null,512),[[Ye,T.value]]),e[26]||(e[26]=l("span",{class:"text-sm text-[#e5e2e1]"},"Activity Icon",-1))]),l("label",{class:te(["flex items-center gap-1.5",o(O)?"cursor-pointer":"cursor-not-allowed opacity-50"]),title:o(O)?"":"Pro feature — upgrade to remove the Sporlyst logo"},[ee(l("input",{type:"checkbox","onUpdate:modelValue":e[8]||(e[8]=n=>X.value=n),disabled:!o(O),class:"accent-[#CCFF00] w-3.5 h-3.5"},null,8,ma),[[Ye,X.value]]),e[27]||(e[27]=l("span",{class:"text-sm text-[#e5e2e1]"},"Logo",-1)),o(O)?u("",!0):(s(),b("span",ya,"Pro"))],10,ba)]),X.value?(s(),b("div",xa,[e[28]||(e[28]=l("span",{class:"text-[11px] font-bold uppercase tracking-widest text-[#444933]"},"Color",-1)),(s(),b(J,null,le(i,n=>l("button",{key:n.value,onClick:c=>N.value=n.value,class:te(["px-2 py-1 rounded-md border text-[11px] font-bold uppercase tracking-widest transition-colors",N.value===n.value?"border-[#CCFF00] bg-[#CCFF00]/10 text-[#CCFF00]":"border-[#444933] text-[#c4c9ac] hover:border-[#c4c9ac]"])},C(n.label),11,ha)),64))])):u("",!0)])]),l("div",ka,[l("div",wa,[e[31]||(e[31]=l("p",{class:"text-xs font-bold uppercase tracking-widest text-[#c4c9ac]"},"Stats Layout",-1)),l("div",Ca,[(s(),b(J,null,le(Ke,n=>l("button",{key:n.value,onClick:c=>se.value=n.value,class:te(["px-3 py-1.5 rounded-lg border text-xs font-bold uppercase tracking-widest transition-colors",se.value===n.value?"border-[#CCFF00] bg-[#CCFF00]/10 text-[#CCFF00]":"border-[#444933] text-[#c4c9ac] hover:border-[#c4c9ac]"])},C(n.label),11,Fa)),64)),se.value==="columns"?(s(),b(J,{key:0},[e[30]||(e[30]=l("span",{class:"text-[#333] self-center text-xs"},"|",-1)),(s(),b(J,null,le([2,3],n=>l("button",{key:n,onClick:c=>ie.value=n,class:te(["px-3 py-1.5 rounded-lg border text-xs font-bold uppercase tracking-widest transition-colors",ie.value===n?"border-[#CCFF00] bg-[#CCFF00]/10 text-[#CCFF00]":"border-[#444933] text-[#c4c9ac] hover:border-[#c4c9ac]"])},C(n),11,Sa)),64))],64)):u("",!0)])]),l("div",Ma,[e[32]||(e[32]=l("p",{class:"text-xs font-bold uppercase tracking-widest text-[#c4c9ac]"},"Value Size",-1)),l("div",$a,[(s(),b(J,null,le(Je,n=>l("button",{key:n.value,onClick:c=>ve.value=n.value,class:te(["px-3 py-1.5 rounded-lg border text-xs font-bold uppercase tracking-widest transition-colors",ve.value===n.value?"border-[#CCFF00] bg-[#CCFF00]/10 text-[#CCFF00]":"border-[#444933] text-[#c4c9ac] hover:border-[#c4c9ac]"])},C(n.label),11,La)),64))])]),l("div",Ta,[e[33]||(e[33]=l("p",{class:"text-xs font-bold uppercase tracking-widest text-[#c4c9ac]"},"Label Opacity",-1)),l("div",Aa,[ee(l("input",{type:"range","onUpdate:modelValue":e[9]||(e[9]=n=>ne.value=n),min:"0",max:"1",step:"0.05",class:"w-28 accent-[#CCFF00]"},null,512),[[Ce,ne.value,void 0,{number:!0}]]),l("span",Oa,C(Math.round(ne.value*100))+"%",1)])]),l("div",Ea,[e[34]||(e[34]=l("p",{class:"text-xs font-bold uppercase tracking-widest text-[#c4c9ac]"},"Label Size",-1)),l("div",Ra,[ee(l("input",{type:"range","onUpdate:modelValue":e[10]||(e[10]=n=>de.value=n),min:"0.5",max:"2",step:"0.05",class:"w-28 accent-[#CCFF00]"},null,512),[[Ce,de.value,void 0,{number:!0}]]),l("span",Pa,C(Math.round(de.value*100))+"%",1)])])]),l("div",Da,[e[39]||(e[39]=l("p",{class:"text-xs font-bold uppercase tracking-widest text-[#c4c9ac]"}
1,"Background",-1)),R.value?u("",!0):(s(),b("div",Ua,[(s(),b(J,null,le(Pe,n=>l("button",{key:n.value,onClick:c=>q.value=n.value,class:te(["px-3 py-1.5 rounded-lg border text-xs font-bold uppercase tracking-widest transition-colors",q.value===n.value?"border-[#CCFF00] bg-[#CCFF00]/10 text-[#CCFF00]":"border-[#444933] text-[#c4c9ac] hover:border-[#c4c9ac]"])},C(n.label),11,Wa)),64))])),l("div",Ba,[l("label",Ia,[e[35]||(e[35]=l("span",{class:"material-symbols-outlined text-sm",style:{"font-size":"16px"}},"add_photo_alternate",-1)),Ze(" "+C(R.value?R.value.name.slice(0,20):"Add Photo")+" ",1),l("input",{type:"file",accept:"image/*",class:"hidden",onChange:re},null,32)]),R.value?(s(),b("button",{key:0,onClick:ue,class:"text-xs text-red-400 hover:text-red-300 font-bold uppercase tracking-widest transition-colors"}," Remove ")):u("",!0),R.value?u("",!0):(s(),b("p",za," Optional — a photo replaces the fill above "))]),R.value?(s(),b("div",Va,[l("div",Na,[e[36]||(e[36]=l("span",{class:"text-xs text-[#c4c9ac] font-bold uppercase tracking-widest whitespace-nowrap"},"Overlay",-1)),ee(l("input",{type:"range","onUpdate:modelValue":e[11]||(e[11]=n=>_e.value=n),min:"0",max:"1",step:"0.05",class:"w-28 accent-[#CCFF00]"},null,512),[[Ce,_e.value,void 0,{number:!0}]]),l("span",ja,C(Math.round(_e.value*100))+"%",1)]),l("div",Ha,[e[37]||(e[37]=l("span",{class:"text-xs text-[#c4c9ac] font-bold uppercase tracking-widest whitespace-nowrap"},"Zoom",-1)),l("button",{onClick:e[12]||(e[12]=n=>{P.value=Math.max(1,+(P.value-.1).toFixed(1)),K()}),class:"w-6 h-6 rounded border border-[#444933] text-[#c4c9ac] hover:border-[#c4c9ac] text-sm leading-none flex items-center justify-center transition-colors"},"−"),ee(l("input",{type:"range","onUpdate:modelValue":e[13]||(e[13]=n=>P.value=n),min:"1",max:"4",step:"0.05",class:"w-28 accent-[#CCFF00]",onInput:e[14]||(e[14]=n=>K())},null,544),[[Ce,P.value,void 0,{number:!0}]]),l("button",{onClick:e[15]||(e[15]=n=>{P.value=Math.min(4,+(P.value+.1).toFixed(1)),K()}),class:"w-6 h-6 rounded border border-[#444933] text-[#c4c9ac] hover:border-[#c4c9ac] text-sm leading-none flex items-center justify-center transition-colors"},"+"),l("span",Ya,C(P.value.toFixed(1))+"×",1)]),l("button",{onClick:e[16]||(e[16]=n=>{P.value=1,ae.value=0,Y.value=0}),class:"text-xs text-[#CCFF00] font-bold uppercase tracking-widest hover:underline"}," Reset "),e[38]||(e[38]=l("span",{class:"text-xs text-[#444933] uppercase tracking-widest"},"Drag preview to reposition",-1))])):u("",!0)]),l("div",Ga,[e[40]||(e[40]=l("p",{class:"text-xs font-bold uppercase tracking-widest text-[#c4c9ac]"},"Stats",-1)),l("div",Xa,[(s(!0),b(J,null,le(qe.value,n=>(s(),b("button",{key:n.key,onClick:c=>mt(n.key),class:te(["px-3 py-1.5 rounded-lg border text-xs font-bold uppercase tracking-widest transition-colors",H.value.includes(n.key)?"border-[#CCFF00] bg-[#CCFF00]/10 text-[#CCFF00]":"border-[#444933] text-[#c4c9ac] hover:border-[#c4c9ac]"])},C(n.label),11,Za))),128))])]),l("div",Ka,[l("div",Ja,[e[41]||(e[41]=l("p",{class:"text-xs font-bold uppercase tracking-widest text-[#c4c9ac]"},"Preview",-1)),l("span",qa,"1080 × 1920 · "+C(p.value),1)]),l("div",{class:"rounded-xl overflow-hidden flex justify-center",style:Vt(r.value?"background: repeating-conic-gradient(#2a2a2a 0% 25%, #222 0% 50%) 0 0 / 16px 16px;":"")},[l("canvas",{ref_key:"previewCanvas",ref:F,class:te(["rounded-xl",R.value?"cursor-grab active:cursor-grabbing":""]),style:{"max-height":"500px",width:"auto"},onPointerdown:$e,onPointermove:ze,onPointerup:De,onPointerleave:De},null,34)],4)]),l("div",Qa,[l("button",{onClick:e[17]||(e[17]=n=>t.$emit("close")),class:"px-5 py-2.5 rounded-xl text-sm font-bold uppercase tracking-widest text-[#c4c9ac] border border-[#444933] hover:border-[#c4c9ac] transition-colors"},"Cancel"),l("button",{onClick:Tt,disabled:j.value,class:"px-5 py-2.5 rounded-xl text-sm font-bold uppercase tracking-widest bg-[#CCFF00] text-[#131313] hover:bg-[#bbee00] transition-colors disabled:opacity-50 flex items-center gap-2"},[e[42]||(e[42]=l("span",{class:"material-symbols-outlined text-base leading-none"},"download",-1)),Ze(" "+C(j.value?"Generating...":"Download PNG"),1)],8,en)])])])])]))}}),rn={class:"p-4 md:p-6 space-y-4"},un={key:0,class:"text-center py-16 text-on-surface-variant text-base uppercase tracking-widest"},cn={key:1,class:"text-center py-16 text-error text-base uppercase tracking-widest"},dn={class:"bg-surface-container-low rounded-xl p-5"},vn={class:"flex flex-wrap items-start justify-between gap-3"},pn={class:"flex items-center gap-2 group"},gn={class:"text-base text-on-surface-variant uppercase tracking-widest mt-1"},fn={key:0,class:"flex flex-wrap items-center gap-2 mt-2"},_n={key:0,class:"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-surface-container"},bn={key:1,class:"inline-flex items-center px-2.5 py-1 rounded-full bg-surface-container"},mn=["href"],yn={key:3,class:"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-surface-container"},xn={class:"material-symbols-outlined text-base leading-none text-on-surface-variant"},hn={class:"text-sm font-bold uppercase tracking-widest text-on-surface-variant"},kn=["title"],wn={class:"material-symbols-outlined text-base leading-none text-on-surface-variant"},Cn={class:"text-sm font-bold uppercase tracking-widest text-on-surface-variant"},Fn={class:"flex items-center gap-2"},Sn={class:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-3"},Mn={key:1,class:"bg-surface-container-low rounded-xl p-5"},$n={class:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-3"},Ln={key:2,class:"bg-surface-container-low rounded-xl p-5"},Tn={class:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-3"},An={key:3,class:"bg-surface-container-low rounded-xl p-5"},On={class:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-3"},En={key:4,class:"bg-surface-container-low rounded-xl p-5"},Rn={class:"h-[36rem] rounded-xl overflow-hidden"},Pn={key:5,class:"bg-surface-container-low rounded-xl p-5 space-y-6"},Dn={class:"flex items-center justify-between"},Un={class:"flex gap-1 bg-surface-container rounded-lg p-1"},Wn=["onClick"],Bn={class:"text-base font-bold uppercase tracking-widest text-on-surface-variant mb-2"},Kn=Ge({__name:"ActivityDetail",setup(Ie){const{distanceUnit:O,speedUnit:G,elevationUnit:h,temperatureUnit:W,toDisplayDistance:oe,toDisplaySpeed:B,toDisplayElevation:$,toDisplayTemperature:I,formatPace:S}=_t(),d=Ge({props:{label:String,value:[String,Number],unit:String,icon:String},setup(i){return()=>we("div",{class:"bg-surface-container rounded-xl p-4 flex flex-col gap-1"},[we("div",{class:"flex items-center gap-1.5 text-on-surface-variant"},[we("span",{class:"material-symbols-outlined text-base leading-none"},i.icon),we("span",{class:"text-base font-bold uppercase tracking-widest"},i.label)]),we("div",{class:"flex items-baseline gap-1 mt-1"},[we("span",{class:"text-xl font-black text-on-surface"},String(i.value??"--")),i.unit?we("span",{class:"text-base text-on-surface-variant"},i.unit):null])])}}),Fe=jt(),Oe=Ht(),a=m(null),V=m(!0),A=m(null),k=m(!1),f=m(!1),w=m(""),T=m(null);function X(){var i;w.value=((i=a.value)==null?void 0:i.title)||"",f.value=!0,Yt(()=>{var r;return(r=T.value)==null?void 0:r.select()})}function N(){f.value=!1}async function j(){if(!a.value||!f.value)return;f.value=!1;const i=w.value.trim();if(i===(a.value.title||""))return;a.value.title=i||void 0;const r=new FormData;r.append("title",i),await vt.patch(`/api/activities/${a.value.id}/`,r)}function F(i){var p,U;const r=(U=(p=a.value)==null?void 0:p.streams)==null?void 0:U.find(pe=>pe.stream_type===i);return r==null?void 0:r.data}const H=M(()=>{var i,r;return((r=(i=a.value)==null?void 0:i.sources)==null?void 0:r.some(p=>p.data_source.name==="garmin"))??!1}),q=M(()=>Jt(a.value)),R=M(()=>qt(a.value)),z=M(()=>{var r,p;if(!H.value)return!1;const i=(p=(r=a.value)==null?void 0:r.device)==null?void 0:p.manufacturer;return!i||i==="garmin"}),Z={watch:"watch",bike_computer:"speed",trainer:"fitness_center",power_meter:"bolt",hr_monitor:"ecg_heart",speed_cadence:"sync",phone_app:"smartphone",other:"memory"},_e=M(()=>{var i,r;return Z[((r=(i=a.value)==null?void 0:i.device)==null?void 0:r.kind)??"other"]??"memory"}),P=M(()=>{var i;return((i=a.value)==null?void 0:i.sensors)??[]});function ae(i){const r=[i.role.replace("_"," ")];return i.battery_status&&r.push(`battery ${i.battery_status}`),i.software_version&&r.push(`v${i.software_version}`),r.join(" · ")}const Y=M(()=>{var r,p;const i=(p=(r=a.value)==null?void 0:r.streams)==null?void 0:p.find(U=>U.stream_type==="latlng");return i==null?void 0:i.data}),Ee=M(()=>F("time")),Se=M(()=>{const i=F("distance");return i==null?void 0:i.map(r=>oe(r))}),se=M(()=>{var re,ue;const i=a.value;if(!i)return null;const r=((re=i.road_cycling_data)==null?void 0:re.avg_speed)??((ue=i.indoor_cycling_data)==null?void 0:ue.avg_speed);if(r)return r;const p=i.moving_time??i.duration;if(!p)return null;const[U,pe,ge]=p.split(":").map(Number),K=U+pe/60+ge/3600;return K?i.distance/K:null}),ie=m("time"),ne=m(null),de=M(()=>{var ze,De,be,Ve,me,Ne,ye;const i=a.value;if(!i)return[];const r=[],p=((ze=i.indoor_cycling_data)==null?void 0:ze.avg_power)??((De=i.road_cycling_data)==null?void 0:De.avg_power)??((be=i.running_data)==null?void 0:be.avg_power)??void 0,U=((Ve=i.indoor_cycling_data)==null?void 0:Ve.avg_cadence)??((me=i.running_data)==null?void 0:me.avg_run_cadence)??void 0,pe
1=((Ne=i.indoor_cycling_data)==null?void 0:Ne.avg_speed)??((ye=i.road_cycling_data)==null?void 0:ye.avg_speed)??void 0,ge=i.heart_rate_data??F("heartrate");ge!=null&&ge.length&&r.push({label:"Heart Rate",unit:"bpm",color:"#ff6b6b",data:ge,avg:i.avg_heart_rate??void 0});const K=i.speed_data??F("speed");K!=null&&K.length&&r.push({label:"Speed",unit:G.value,color:"#00F4FE",data:K.map(ce=>B(ce)),avg:pe!=null?B(pe):void 0});const re=i.power_data??F("power");re!=null&&re.length&&r.push({label:"Power",unit:"W",color:"#CCFF00",data:re,avg:p});const ue=i.cadence_data??F("cadence");ue!=null&&ue.length&&r.push({label:"Cadence",unit:i.sport==="running"?"spm":"rpm",color:"#f9ca24",data:ue,avg:U});const Me=F("altitude");Me!=null&&Me.length&&r.push({label:"Elevation",unit:h.value,color:"#a29bfe",data:Me.map(ce=>$(ce))});const $e=F("temperature");return $e!=null&&$e.length&&r.push({label:"Temperature",unit:W.value,color:"#fd9644",data:$e.map(ce=>I(ce))}),r}),ve=M(()=>{var i;return!!((i=a.value)!=null&&i.polyline||Y.value&&Y.value.length>0)}),Re=M(()=>{if(!a.value)return"";const i=a.value.sport.charAt(0).toUpperCase()+a.value.sport.slice(1);return a.value.sport_subtype?`${a.value.sport_subtype.charAt(0).toUpperCase()+a.value.sport_subtype.slice(1)} ${i}`:i}),Ke=M(()=>a.value?new Date(a.value.date).toLocaleDateString("en-GB",{weekday:"long",year:"numeric",month:"long",day:"numeric"}):""),Je=M(()=>{var r;const i=((r=a.value)==null?void 0:r.sport)??"";return i==="running"?"bg-primary/20 text-primary":i==="cycling"?"bg-tertiary/20 text-tertiary":"bg-surface-container text-on-surface-variant"});function Pe(i){if(!i)return"--";const[r,p,U]=i.split(":").map(Number);return r>0?`${r}h ${p}m`:`${p}m ${Math.round(U)}s`}return st(async()=>{const i=Oe.params.id;try{const r=await vt.get(`/api/activities/${i}/`);a.value=r.data}catch{A.value="Could not load activity."}finally{V.value=!1}}),(i,r)=>(s(),b("div",rn,[l("button",{onClick:r[0]||(r[0]=p=>o(Fe).back()),class:"flex items-center gap-2 text-base font-bold uppercase tracking-widest text-on-surface-variant hover:text-primary transition-colors"},r[5]||(r[5]=[l("span",{class:"material-symbols-outlined text-base leading-none"},"arrow_back",-1),Ze(" Back ")])),V.value?(s(),b("div",un," Loading... ")):A.value?(s(),b("div",cn,C(A.value),1)):a.value?(s(),b(J,{key:2},[l("div",dn,[l("div",vn,[l("div",null,[l("div",pn,[f.value?ee((s(),b("input",{key:1,ref_key:"titleInputEl",ref:T,"onUpdate:modelValue":r[1]||(r[1]=p=>w.value=p),class:"text-xl font-black tracking-tight text-on-surface bg-surface-container rounded-lg px-2 py-0.5 outline-none focus:ring-1 focus:ring-primary",onKeydown:[pt(j,["enter"]),pt(N,["escape"])],onBlur:j},null,544)),[[Ce,w.value]]):(s(),b("h1",{key:0,class:"text-xl font-black tracking-tight text-on-surface cursor-pointer hover:text-primary transition-colors",onClick:X},C(a.value.title||Re.value),1)),f.value?u("",!0):(s(),b("span",{key:2,class:"material-symbols-outlined text-base text-on-surface-variant opacity-0 group-hover:opacity-60 transition-opacity cursor-pointer hover:text-primary",onClick:X},"edit"))]),l("p",gn,C(Re.value)+" · "+C(Ke.value),1),a.value.device||P.value.length||H.value||q.value||R.value?(s(),b("div",fn,[H.value?(s(),b("div",_n,[r[6]||(r[6]=l("img",{src:Qt,alt:"",class:"h-4 w-4 object-contain"},null,-1)),ke(Xt,{activity:a.value},null,8,["activity"])])):u("",!0),q.value?(s(),b("div",bn,[ke(Kt,{activity:a.value},null,8,["activity"])])):u("",!0),R.value?(s(),b("a",{key:2,href:R.value,target:"_blank",rel:"noopener",class:"text-sm font-bold uppercase tracking-widest underline hover:opacity-80",style:{color:"#FC4C02"}},"View on Strava",8,mn)):u("",!0),a.value.device&&!z.value?(s(),b("div",yn,[l("span",xn,C(_e.value),1),l("span",hn,C(a.value.device.name),1)])):u("",!0),(s(!0),b(J,null,le(P.value,p=>(s(),b("div",{key:p.id,class:"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-surface-container-lowest",title:ae(p)},[l("span",wn,C(Z[p.kind]??"sensors"),1),l("span",Cn,C(p.name),1)],8,kn))),128))])):u("",!0)]),l("div",Fn,[l("button",{onClick:r[2]||(r[2]=p=>k.value=!0),class:"flex items-center gap-1.5 px-3 py-1.5 rounded-lg border border-outline-variant text-base font-bold uppercase tracking-widest text-on-surface-variant hover:border-primary hover:text-primary transition-colors"},r[7]||(r[7]=[l("span",{class:"material-symbols-outlined text-base leading-none"}
1,"ios_share",-1),Ze(" Export ")])),l("span",{class:te(["px-3 py-1 rounded-full text-base font-black uppercase tracking-widest",Je.value])},C(Re.value),3)])])]),k.value?(s(),v(sn,{key:0,activity:a.value,polyline:a.value.polyline,latlng:Y.value,onClose:r[3]||(r[3]=p=>k.value=!1)},null,8,["activity","polyline","latlng"])):u("",!0),l("div",Sn,[ke(o(d),{label:"Distance",value:o(oe)(a.value.distance).toFixed(2),unit:o(O),icon:"route"},null,8,["value","unit"]),ke(o(d),{label:"Duration",value:Pe(a.value.duration),icon:"timer"},null,8,["value"]),se.value?(s(),v(o(d),{key:0,label:"Avg Speed",value:o(B)(se.value).toFixed(1),unit:o(G),icon:"speed"},null,8,["value","unit"])):u("",!0),a.value.calories?(s(),v(o(d),{key:1,label:"Calories",value:Math.round(a.value.calories),unit:"kcal",icon:"local_fire_department"},null,8,["value"])):u("",!0),a.value.moving_time?(s(),v(o(d),{key:2,label:"Moving Time",value:Pe(a.value.moving_time),icon:"directions_run"},null,8,["value"])):u("",!0),a.value.avg_heart_rate?(s(),v(o(d),{key:3,label:"Avg HR",value:a.value.avg_heart_rate,unit:"bpm",icon:"favorite"},null,8,["value"])):u("",!0),a.value.max_heart_rate?(s(),v(o(d),{key:4,label:"Max HR",value:a.value.max_heart_rate,unit:"bpm",icon:"heart_plus"},null,8,["value"])):u("",!0),a.value.aerobic_te?(s(),v(o(d),{key:5,label:"Aerobic TE",value:a.value.aerobic_te.toFixed(1),icon:"trending_up"},null,8,["value"])):u("",!0),a.value.number_of_laps?(s(),v(o(d),{key:6,label:"Laps",value:a.value.number_of_laps,icon:"repeat"},null,8,["value"])):u("",!0),a.value.best_lap_time?(s(),v(o(d),{key:7,label:"Best Lap",value:Pe(a.value.best_lap_time),icon:"avg_pace"},null,8,["value"])):u("",!0)]),a.value.running_data?(s(),b("div",Mn,[r[8]||(r[8]=l("h2",{class:"text-base font-black uppercase tracking-widest text-on-surface mb-4"},"Running",-1)),l("div",$n,[a.value.running_data.avg_pace?(s(),v(o(d),{key:0,label:"Avg Pace",value:o(S)(a.value.running_data.avg_pace),icon:"speed"},null,8,["value"])):u("",!0),a.value.running_data.best_pace?(s(),v(o(d),{key:1,label:"Best Pace",value:o(S)(a.value.running_data.best_pace),icon:"bolt"},null,8,["value"])):u("",!0),a.value.running_data.avg_run_cadence?(s(),v(o(d),{key:2,label:"Avg Cadence",value:a.value.running_data.avg_run_cadence,unit:"spm",icon:"restart_alt"},null,8,["value"])):u("",!0),a.value.running_data.max_run_cadence?(s(),v(o(d),{key:3,label:"Max Cadence",value:a.value.running_data.max_run_cadence,unit:"spm",icon:"restart_alt"},null,8,["value"])):u("",!0),a.value.running_data.steps?(s(),v(o(d),{key:4,label:"Steps",value:a.value.running_data.steps.toLocaleString(),icon:"footprint"},null,8,["value"])):u("",!0),a.value.running_data.avg_stride_length?(s(),v(
1o(d),{key:5,label:"Avg Stride",value:o($)(a.value.running_data.avg_stride_length).toFixed(2),unit:o(h),icon:"swap_horiz"},null,8,["value","unit"])):u("",!0),a.value.running_data.total_ascent?(s(),v(o(d),{key:6,label:"Ascent",value:Math.round(o($)(a.value.running_data.total_ascent)),unit:o(h),icon:"trending_up"},null,8,["value","unit"])):u("",!0),a.value.running_data.total_descent?(s(),v(o(d),{key:7,label:"Descent",value:Math.round(o($)(a.value.running_data.total_descent)),unit:o(h),icon:"trending_down"},null,8,["value","unit"])):u("",!0),a.value.running_data.min_elevation!=null?(s(),v(o(d),{key:8,label:"Min Elevation",value:Math.round(o($)(a.value.running_data.min_elevation)),unit:o(h),icon:"landscape"},null,8,["value","unit"])):u("",!0),a.value.running_data.max_elevation!=null?(s(),v(o(d),{key:9,label:"Max Elevation",value:Math.round(o($)(a.value.running_data.max_elevation)),unit:o(h),icon:"landscape"},null,8,["value","unit"])):u("",!0),a.value.running_data.avg_power?(s(),v(o(d),{key:10,label:"Avg Power",value:a.value.running_data.avg_power,unit:"W",icon:"bolt"},null,8,["value"])):u("",!0),a.value.running_data.normalized_power?(s(),v(o(d),{key:11,label:"Weighted Avg",value:Math.round(a.value.running_data.normalized_power),unit:"W",icon:"bolt"},null,8,["value"])):u("",!0),a.value.running_data.training_stress_score?(s(),v(o(d),{key:12,label:"Load",value:a.value.running_data.training_stress_score.toFixed(1),icon:"fitness_center"},null,8,["value"])):u("",!0),a.value.running_data.min_temp!=null?(s(),v(o(d),{key:13,label:"Min Temp",value:o(I)(a.value.running_data.min_temp).toFixed(1),unit:o(W),icon:"thermometer"},null,8,["value","unit"])):u("",!0),a.value.running_data.max_temp!=null?(s(),v(o(d),{key:14,label:"Max Temp",value:o(I)(a.value.running_data.max_temp).toFixed(1),unit:o(W),icon:"thermometer"},null,8,["value","unit"])):u("",!0)])])):u("",!0),a.value.road_cycling_data?(s(),b("div",Ln,[r[9]||(r[9]=l("h2",{class:"text-base font-black uppercase tracking-widest text-on-surface mb-4"},"Cycling",-1)),l("div",Tn,[a.value.road_cycling_data.avg_speed?(s(),v(o(d),{key:0,label:"Avg Speed",value:o(B)(a.value.road_cycling_data.avg_speed).toFixed(1),unit:o(G),icon:"speed"},null,8,["value","unit"])):u("",!0),a.value.road_cycling_data.max_speed?(s(),v(o(d),{key:1,label:"Max Speed",value:o(B)(a.value.road_cycling_data.max_speed).toFixed(1),unit:o(G),icon:"speed"},null,8,["value","unit"])):u("",!0),a.value.road_cycling_data.total_ascent?(s(),v(o(d),{key:2,label:"Ascent",value:Math.round(o($)(a.value.road_cycling_data.total_ascent)),unit:o(h),icon:"trending_up"},null,8,["value","unit"])):u("",!0),a.value.road_cycling_data.total_descent?(s(),v(o(d),{key:3,label:"Descent",value:Math.round(o($)(a.value.road_cycling_data.total_descent)),unit:o(h),icon:"trending_down"},null,8,["value","unit"])):u("",!0),a.value.road_cycling_data.avg_power?(s(),v(o(d),{key:4,label:"Avg Power",value:a.value.road_cycling_data.avg_power,unit:"W",icon:"bolt"},null,8,["value"])):u("",!0),a.value.road_cycling_data.max_power?(s(),v(o(d),{key:5,label:"Max Power",value:a.value.road_cycling_data.max_power,unit:"W",icon:"bolt"},null,8,["value"])):u("",!0),a.value.road_cycling_data.normalized_power?(s(),v(o(d),{key:6,label:"Weighted Avg",value:a.value.road_cycling_data.normalized_power,unit:"W",icon:"bolt"},null,8,["value"])):u("",!0),a.value.road_cycling_data.training_stress_score?(s(),v(o(d),{key:7,label:"Load",value:a.value.road_cycling_data.training_stress_score.toFixed(1),icon:"fitness_center"},null,8,["value"])):u("",!0),a.value.road_cycling_data.min_elevation!=null?(s(),v(o(d),{key:8,label:"Min Elevation",value:Math.round(o($)(a.value.road_cycling_data.min_elevation)),unit:o(h),icon:"landscape"},null,8,["value","unit"])):u("",!0),a.value.road_cycling_data.max_elevation!=null?(s(),v(o(d),{key:9,label:"Max Elevation",value:Math.round(o($)(a.value.road_cycling_data.max_elevation)),unit:o(h),icon:"landscape"},null,8,["value","unit"])):u("",!0),a.value.road_cycling_data.min_temp!=null?(s(),v(o(d),{key:10,label:"Min Temp",value:o(I)(a.value.road_cycling_data.min_temp).toFixed(1),unit:o(W),icon:"thermometer"},null,8,["value","unit"])):u("",!0),a.value.road_cycling_data.max_temp!=null?(s(),v(o(d),{key:11,label:"Max Temp",value:o(I)(a.value.road_cycling_data.max_temp).toFixed(1),unit:o(W),icon:"thermometer"},null,8,["value","unit"])):u("",!0)])])):u("",!0),a.value.indoor_cycling_data?(s(),b("div",An,[r[10]||(r[10]=l("h2",{class:"text-base font-black uppercase tracking-widest text-on-surface mb-4"},"Indoor Cycling",-1)),l("div",On,[a.value.indoor_cycling_data.avg_speed?(s(),v(
1o(d),{key:0,label:"Avg Speed",value:o(B)(a.value.indoor_cycling_data.avg_speed).toFixed(1),unit:o(G),icon:"speed"},null,8,["value","unit"])):u("",!0),a.value.indoor_cycling_data.max_speed?(s(),v(o(d),{key:1,label:"Max Speed",value:o(B)(a.value.indoor_cycling_data.max_speed).toFixed(1),unit:o(G),icon:"speed"},null,8,["value","unit"])):u("",!0),a.value.indoor_cycling_data.avg_cadence?(s(),v(o(d),{key:2,label:"Avg Cadence",value:a.value.indoor_cycling_data.avg_cadence,unit:"rpm",icon:"restart_alt"},null,8,["value"])):u("",!0),a.value.indoor_cycling_data.max_cadence?(s(),v(o(d),{key:3,label:"Max Cadence",value:a.value.indoor_cycling_data.max_cadence,unit:"rpm",icon:"restart_alt"},null,8,["value"])):u("",!0),a.value.indoor_cycling_data.avg_power?(s(),v(o(d),{key:4,label:"Avg Power",value:a.value.indoor_cycling_data.avg_power,unit:"W",icon:"bolt"},null,8,["value"])):u("",!0),a.value.indoor_cycling_data.max_power?(s(),v(o(d),{key:5,label:"Max Power",value:a.value.indoor_cycling_data.max_power,unit:"W",icon:"bolt"},null,8,["value"])):u("",!0),a.value.indoor_cycling_data.normalized_power?(s(),v(o(d),{key:6,label:"Weighted Avg",value:a.value.indoor_cycling_data.normalized_power,unit:"W",icon:"bolt"},null,8,["value"])):u("",!0),a.value.indoor_cycling_data.max_20min_power?(s(),v(o(d),{key:7,label:"20min Power",value:a.value.indoor_cycling_data.max_20min_power,unit:"W",icon:"bolt"},null,8,["value"])):u("",!0),a.value.indoor_cycling_data.training_stress_score?(s(),v(o(d),{key:8,label:"Load",value:a.value.indoor_cycling_data.training_stress_score.toFixed(1),icon:"fitness_center"},null,8,["value"])):u("",!0)])])):u("",!0),ve.value?(s(),b("div",En,[r[11]||(r[11]=l("h2",{class:"text-base font-black uppercase tracking-widest text-on-surface mb-4"},"Route",-1)),l("div",Rn,[ke(ea,{polyline:a.value.polyline,latlng:Y.value,"hover-index":ne.value},null,8,["polyline","latlng","hover-index"])])])):u("",!0),de.value.length?(s(),b("div",Pn,[l("div",Dn,[r[12]||(r[12]=l("h2",{class:"text-base font-black uppercase tracking-widest text-on-surface"},"Analysis",-1)),l("div",Un,[(s(),b(J,null,le(["time","distance"],p=>l("button",{key:p,onClick:U=>ie.value=p,class:te(["px-3 py-1.5 rounded-md text-base font-black uppercase tracking-widest transition-all",ie.value===p?"bg-primary text-on-primary":"text-on-surface-variant hover:text-on-surface"])},C(p==="time"?"Time":"Distance"),11,Wn)),64))])]),ke(Zt,{"has-garmin-data":H.value,plural:"",class:"!mt-3"},null,8,["has-garmin-data"]),(s(!0),b(J,null,le(de.value,p=>(s(),b("div",{key:p.label},[l("p",Bn,C(p.label),1),ke(Gt,{data:p.data,label:p.label,unit:p.unit,color:p.color,"x-mode":ie.value,"time-data":Ee.value,"distance-data":Se.value,"distance-unit":o(O),avg:p.avg,onHover:r[4]||(r[4]=U=>ne.value=U)},null,8,["data","label","unit","color","x-mode","time-data","distance-data","distance-unit","avg"])]))),128))])):u("",!0)],64)):u("",!0)]))}});export{Kn as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.