1import{az as X,r as f,aM as Ne,j as e,b5 as _e,ac as be,aI as T,b4 as R,b0 as E,b3 as Je,R as Qe,aT as fe,aU as ae,bm as et,bA as tt,bh as at}from"./index-0DxIl0MM.js";import{P as rt}from"./PagePadding-dog4cvL2.js";import{T as te,f as nt,w as st}from"./SignInPage-B2tg9Krb.js";import{c$ as it,Y as pe,a2 as A,E as Me,d0 as J,d1 as ie,d2 as ot,cU as Ie,d3 as ct,d4 as lt,d5 as dt,d6 as ut,d7 as gt,Z as ht,al as He,cV as Re,M as D,d8 as xe,d9 as Ce,da as $e,bR as pt,y as mt,v as ft,aD as xt,W as Ct,bd as ze}from"./PowerCenter-Levnk4it.js";import{C as yt,F as wt,G as Ge}from"./GuideLink-Bk_OG5GE.js";import{s as ke,U as jt}from"./UploadCourseModal-DAfNf9KQ.js";import{I as bt}from"./IconChevronDown-Dkhs_jHC.js";import{t as re,n as Oe,w as ye,x as Tt,j as vt}from"./user-BFA3j88n.js";import{C as F,e as Te,O as _t}from"./OverviewChart-DyHvXTcp.js";import"./PublicRoute-B4rFMP24.js";import"./AuthPage-BlErbFvd.js";import"./MenuComponents-D4j7gx0o.js";import"./FileSelector-B_xh-W6T.js";import"./index-nP3HLDlB.js";globalThis.jotaiAtomCache=globalThis.jotaiAtomCache||{cache:new Map,get(t,a){return this.cache.has(t)?this.cache.get(t):(this.cache.set(t,a),a)}};T.span.withConfig({displayName:"CourseSelector__CourseDistance",componentId:"sc-1kkzike-0"})(["font-family:'Trim-Thin';color:",";"],R.themes.dark.headerText);T.span.withConfig({displayName:"CourseSelector__UnitSpan",componentId:"sc-1kkzike-1"})(["color:",";font-family:'Trim-Thin';"],R.themes.dark.text);const Mt=({selectedCourse:t,onSelection:a})=>{const r=X(),s=it({onDropdownClose:()=>s.resetSelectedOption()}),[o,c]=f.useState(!0),[u,l]=f.useState(!1),d=Ne(),{userData:x}=pe(),[M,y]=f.useState([]),C=M.filter(p=>p.official),i=M.filter(p=>!p.official),m=p=>{const j=Me(p.distance,x.units).toFixed(1),_=x.units==="feet"?"mi":"km";return j+" "+_};return f.useEffect(()=>{c(!0),d.user.getRaceCourses(x.id).then(p=>{if(!p.ok||p.status!==200){c(!1);return}const j=[...p.data.official_courses||[],...p.data.personal_courses||[]].sort(ke);y(j),c(!1)})},[d.user,x.race,x.id]),e.jsxs(e.Fragment,{children:[e.jsxs(A,{width:200,position:"bottom-start",children:[e.jsx(A.Target,{children:e.jsx(_e,{loading:o,variant:"default",rightSection:e.jsx(bt,{size:14}),children:t?t.name:r.formatMessage({id:"CourseSelector.noSelectionText",defaultMessage:"Select Course"})})}),e.jsxs(A.Dropdown,{children:[C.length>0&&e.jsxs(A.Sub,{openDelay:120,closeDelay:150,children:[e.jsx(A.Sub.Target,{children:e.jsx(A.Sub.Item,{children:r.formatMessage({id:"CourseSelector.categoryLabel.verified",defaultMessage:"Verified"})})}),e.jsx(A.Sub.Dropdown,{children:C.map(p=>e.jsx(A.Item,{onClick:()=>{a==null||a(p)},children:e.jsxs(be,{justify:"space-between",children:[e.jsx(te,{size:"sm",children:p.name}),e.jsx(te,{size:"sm",c:"dimmed",children:m(p)})]})},p.id))})]}),i.length>0&&e.jsxs(A.Sub,{children:[e.jsx(A.Sub.Target,{children:e.jsx(A.Sub.Item,{children:r.formatMessage({id:"CourseSelector.categoryLabel.personal",defaultMessage:"Personal"})})}),e.jsx(A.Sub.Dropdown,{children:i.map(p=>e.jsx(A.Item,{onClick:()=>{a==null||a(p)},children:e.jsxs(be,{children:[e.jsx(te,{size:"sm",children:p.name}),e.jsx(te,{size:"sm",c:"dimmed",children:m(p)})]})},p.id))})]}),e.jsx(A.Divider,{}),t&&e.jsx(A.Item,{c:"error",onClick:()=>a(null),children:r.formatMessage({id:"action.clear"})}),e.jsx(A.Item,{c:"primary",onClick:()=>l(!0),children:r.formatMessage({id:"CourseSelector.uploadActionLabel",defaultMessage:"Upload Course"})})]})]}),u&&e.jsx(jt,{userData:x,onClose:()=>l(!1),onSubmit:(p,j)=>{p&&(j&&y(_=>[..._,j].sort(ke)),l(!1))}})]})};globalThis.jotaiAtomCache=globalThis.jotaiAtomCache||{cache:new Map,get(t,a){return this.cache.has(t)?this.cache.get(t):(this.cache.set(t,a),a)}};const It=t=>{const a=f.useRef(t);return f.useEffect(()=>{a.current=t}),a.current};globalThis.jotaiAtomCache=globalThis.jotaiAtomCache||{cache:new Map,get(t,a){return this.cache.has(t)?this.cache.get(t):(this.cache.set(t,a),a)}};const ue=(t,a)=>{const r={};return Object.keys(t).forEach(s=>{r[s]=a(t[s])}),r};globalThis.jotaiAtomCache=globalThis.jotaiAtomCache||{cache:new Map,get(t,a){return this.cache.has(t)?this.cache.get(t):(this.cache.set(t,a),a)}};const Rt="2.2ch",Et=T.div.withConfig({displayName:"DurationInput__Container",componentId:"sc-1jkyvxd-0"})(["display:flex;flex-direction:row;align-items:center;justify-content:flex-start;width:100%;"]),we=T.input.withConfig({displayName:"DurationInput__Input",componentId:"sc-1jkyvxd-1"})(["font-size:"," !important;width:",";padding:0;background:transparent;color:",";border:none;caret-color:",";&:focus{outline:0;}&::placeholder{color:",";opacity:0.5;}"],E.bigInputFontSize,Rt,R.themes.dark.headerText,R.themes.dark.textHighlight,R.themes.dark.headerText),Pe=T.span.withConfig({displayName:"DurationInput__Colon",componentId:"sc-1jkyvxd-2"})(["font-size:",";margin:0;margin-top:-2px;color:",";"],E.bigInputFontSize,R.themes.dark.headerText);let St=-1;const kt=()=>++St,je={},Pt=t=>t.includes("hr")?"2.4ch":"2.9ch",Ae=(t,a)=>{if(!t)return;if(a.length===0){t.style.width=Pt(t.id);return}const r=je[t.id]?je[t.id]:je[t.id]=window.getComputedStyle(t);let s=r.getPropertyValue("font");if(s===""){const c=r.getPropertyValue("font-family"),u=r.getPropertyValue("font-size");c&&u?s="".concat(u," ").concat(c):s="".concat(E.inputFontSize," ").concat(Je)}const{width:o}=ot(a,s);t.style.width="".concat(o+7,"px")},de="durationInputElement",At=t=>!!(t&&t.id&&t.id.includes(de)),Ft=t=>{const{label:a,onChange:r,onFocus:s,onBlur:o,durationValue:c,initialDuration:u,hoursPlaceholder:l,minutesPlaceholder:d,secondsPlaceholder:x}=t;if(c&&!r)throw new Error("If providing the durationValue state, you must also supply an onChange handler to update it.");const[M,y]=f.useState(u?J(u.hours||"0"):""),[C,i]=f.useState(u?J(u.minutes||"0"):""),[m,p]=f.useState(u?J(u.seconds||"0"):""),j=f.useRef(null),_=f.useRef(null),N=f.useRef(null),Y=f.useRef(null),I=f.useRef(null),{current:P}=f.useRef(kt()),L="".concat(de,"-").concat(P,"-hr"),G="".concat(de,"-").concat(P,"-min"),q="".concat(de,"-").concat(P,"-sec"),me={[L]:y,[G]:i,[q]:p}
1,ne={[L]:{durationKey:"hours",stateValue:M},[G]:{durationKey:"minutes",stateValue:C},[q]:{durationKey:"seconds",stateValue:m}},O=n=>{if(t.durationValue){const{durationKey:h}=ne[n];return t.durationValue[h]}else return ne[n].stateValue},ce=()=>({hours:O(L),minutes:O(G),seconds:O(q)}),Q=n=>{if(!n||!_.current||!N.current)return;let h;if(n.id===L)h=_.current;else if(n.id===G)h=N.current;else return n;return h.focus(),h.setSelectionRange(0,h.value.length),h},se=n=>{if(!n||!j.current||!_.current)return;let h;if(n.id===q)h=_.current;else if(n.id===G)h=j.current;else return n;return h.focus(),h.setSelectionRange(h.value.length,h.value.length),h},Z=n=>{const h=n.map(({input:b,newValue:U})=>({[ne[b.id].durationKey]:U}));if(c===void 0&&n.forEach(({input:b,newValue:U})=>{me[b.id](U)}),typeof r=="function"){const b=h.reduce((U,ee)=>({...U,...ee}),{});r(b)}n.forEach(({input:b,newValue:U})=>{Ae(b,U)})},g=n=>{const h=se(n);!h||h===n||Z([{input:h,newValue:O(h.id).slice(0,-1)},{input:n,newValue:w(O(n.id))}])},v=(n,h)=>{const b=O(n.id);let U=parseInt(b,10);if(isNaN(U)&&(U=0),U===0&&h==="decrement")return;const ee=h==="increment"?++U:--U,le=J(ee.toString());Z([{input:n,newValue:le}])},S=n=>{Y.current=n.target.selectionStart,I.current=n.target.selectionEnd,n.keyCode===ie.UpArrow?v(n.target,"increment"):n.keyCode===ie.DownArrow&&v(n.target,"decrement")},k=n=>{if(n.target.selectionStart!==n.target.selectionEnd)return;const h=n.target.value.length,b=Y.current,U=I.current;if(b===0&&n.keyCode===ie.Backspace&&b===U){g(n.target);return}const ee=b===2||h===0||h===1&&b===1,le=b===0||h===0;n.keyCode===ie.RightArrow&&ee?Q(n.target):n.keyCode===ie.LeftArrow&&le?se(n.target):(Y.current=n.target.selectionStart,I.current=n.target.selectionEnd)},H=n=>{Y.current=n.target.selectionStart,I.current=n.target.selectionEnd,typeof s=="function"&&s(ce(),n.target,n)},z=n=>{const h=new RegExp(/([^0-9])/,"g"),{value:b}=n.target;if(b.match(/:/)){Q(n.target),Z([{input:n.target,newValue:w(b)}]);return}b.match(h)||b.length>2||(Z([{input:n.target,newValue:b}]),b.length===2&&n.target.selectionStart===2&&Q(n.target))},w=n=>n.match(/:/)?J(n.replace(":","")):n.length>1?n:n===":"?"00":J(n),B={type:"text",size:2,onChange:z,onFocus:H,onBlur:n=>{const h=n.target;Z([{input:h,newValue:w(h.value)}]),typeof o=="function"&&o(ce(),n.target,n)},onKeyDown:S,onKeyUp:k},$=()=>{if(!j.current||!_.current||!N.current)return;const n={hours:j.current,minutes:_.current,seconds:N.current};return re(n).forEach(h=>{Ae(n[h],n[h].value)}),n};return f.useLayoutEffect(()=>{const n=$();n&&re(n).forEach(h=>{const b=n[h];b.value.length===1&&Z([{input:b,newValue:"0".concat(b.value)}])})},[]),f.useLayoutEffect(()=>{$()},[c]),e.jsxs(Et,{children:[e.jsx(we,{id:L,"aria-label":"".concat(a," hours"),ref:j,placeholder:l||"HH",style:{margin:"0 -2px 0 0",textAlign:"left"},value:O(L),...B}),e.jsx(Pe,{children:":"}),e.jsx(we,{id:G,"aria-label":"".concat(a," minutes"),ref:_,placeholder:d||"MM",style:{margin:"0 2px",textAlign:_.current&&_.current.value.length===0?"left":"center"},value:O(G),...B}),e.jsx(Pe,{children:":"}),e.jsx(we,{id:q,"aria-label":"".concat(a," seconds"),ref:N,placeholder:x||"SS",style:{margin:"0 4px",textAlign:"left"},value:O(q),...B})]})};globalThis.jotaiAtomCache=globalThis.jotaiAtomCache||{cache:new Map,get(t,a){return this.cache.has(t)?this.cache.get(t):(this.cache.set(t,a),a)}};const Be=t=>isNaN(parseFloat(t))?{ok:!1,error:"Must be a number"}:{ok:!0};globalThis.jotaiAtomCache=globalThis.jotaiAtomCache||{cache:new Map,get(t,a){return this.cache.has(t)?this.cache.get(t):(this.cache.set(t,a),a)}};var K=(t=>(t.mi="mi",t.km="km",t))(K||{});const Lt=t=>{const{value:a,selectedUnit:r,onChange:s,onErrorUpdate:o,validate:c,label:u,...l}=t,{userData:d}=pe(),x=d.units==="feet"?"mi":"km",[M,y]=f.useState(x),C=()=>r!==void 0?r:M,i=(I,P)=>I===""?0:P==="mi"?parseFloat(I)*ct:parseFloat(I)*lt,m=I=>{let P;if(Object.values(K).includes(I))P=I;else throw new Error("Invalid DistanceUnit: ".concat(I));const L=i(a,P);s(a,L,P),y(P)},p=I=>{let P=I.target.value;P==="00"&&(P="0");const L=C(),G=i(P,L);s(P,G,L)},j={id:"mi",label:"mi",onClick:m,selected:C()==="mi"},_={id:"km",label:"km",onClick:m,selected:C()==="km"},N=d.units==="meters"?[_,j]:[j,_],Y=f.useCallback(I=>typeof c=="function"?c(I):Be(I),[c]);return e.jsx(Ie,{type:"number",step:.01,maxLength:6,value:a,onChange:p,onErrorUpdate:o,validate:Y,options:N,preventNegative:!0,...l})};globalThis.jotaiAtomCache=globalThis.jotaiAtomCache||{cache:new Map,get(t,a){return this.cache.has(t)?this.cache.get(t):(this.cache.set(t,a),a)}};const Ut=T.fieldset.withConfig({displayName:"GridFieldset__FieldsetOuterContainer",componentId:"t3bet7-0"})(["width:100%;margin:0;padding:0;border:none;"]),Dt=T.legend.withConfig({displayName:"GridFieldset__FieldsetLegend",componentId:"t3bet7-1"})(["color:",";text-transform:uppercase;font-size:0.9rem;margin-left:",";pointer-events:none;display:inline-block;margin-bottom:10px;grid-column:1;grid-row:1;"],R.themes.dark.headerText,E.defaultPadding);let Vt=0;const Nt=()=>"fieldset-".concat(Vt++),Ht=t=>{const{groupLabel:a,inputs:r}=t,{current:s}=f.useRef(Nt()),o="legend-".concat(s);return e.jsx(Ut,{"aria-labelledby":o,children:e.jsxs(dt,{numColumns:r.length,children:[e.jsx(Dt,{id:o,children:a}),r.map((c,u)=>{const{readOnly:l,error:d}=c,x=u+1;return e.jsxs(Qe.Fragment,{children:[e.jsx(ut,{hasError:!!d,style:{gridColumn:x},readOnly:l,children:e.jsx(Ie,{...c})}),e.jsx(gt,{column:x,children:d})]},"".concat(a,"-").concat(c.id))})]})})};globalThis.jotaiAtomCache=globalThis.jotaiAtomCache||{cache:new Map,get(t,a){return this.cache.has(t)?this.cache.get(t):(this.cache.set(t,a),a)}};const $t=(t,a)=>r=>{const[s,o]=t,[c,u]=a;return(r-c)/(u-c)*(o-s)},zt="35px",ge=2,Gt=(t,a,r)=>{let s=t;s>r?s=r:s<a&&(s=a);const o=5,c=ge-2,u=ge+6,l="".concat(s-o," ").concat(c),d="".concat(s+o," ").concat(c),x="".concat(s," ").concat(u);return"".concat(l,", ").concat(d,", ").concat(x,", ").concat(l)},Ot={target:R.themes.dark.targetValue,overRange:R.themes.dark.overTargetValue,underRange:R.themes.dark.underTargetValue},qe=t=>{const{value:a,targetRange:{min:r,max:s,target:o}}=t,c={...Ot,...t.colors},u=r-(o-r),l=s+(s-o),[d,x]=f.useState(()=>null),M=f.useRef(null);f.useEffect(()=>{const j=()=>
1{if(!M.current)return;const{width:_}=M.current.getBoundingClientRect();x(()=>$t([0,_],[u,l]))};return j(),window.addEventListener("resize",j),()=>{window.removeEventListener("resize",j)}},[u,l]);const y=(j,_)=>d?d(_)-d(j):0,C={y:ge,height:"100%"},i={...C,fillOpacity:.5},m={stroke:R.themes.dark.textInputBorder,strokeWidth:E.inputBorderWidth},p={y1:ge,y2:"100%",...m};return e.jsx("div",{style:{width:"100%",height:zt},children:e.jsx("svg",{ref:M,width:"100%",height:"100%",children:d&&e.jsxs(e.Fragment,{children:[e.jsx("rect",{x:d(u),width:y(u,r),fill:c.underRange,...i}),e.jsx("rect",{x:d(r),width:y(r,s),fill:c.target,...i}),e.jsx("rect",{x:d(s),width:y(s,l),fill:c.overRange,...i}),e.jsx("rect",{x:d(u),width:y(u,a<=r?a:r),fill:c.underRange,...C}),a>r&&e.jsx("rect",{x:d(r),width:y(r,a<=s?a:s),fill:c.target,...C}),a>s&&e.jsx("rect",{x:d(s),width:y(s,a<=l?a:l),fill:c.overRange,...C}),e.jsx("line",{x1:d(u),x2:d(l),y1:"100%",y2:"100%",...m}),e.jsx("line",{x1:d(r),x2:d(r),...p}),e.jsx("line",{x1:d(o),x2:d(o),strokeDasharray:2,...p}),e.jsx("line",{x1:d(s),x2:d(s),...p}),e.jsx("polygon",{fill:"white",stroke:R.themes.dark.textInputBorder,points:Gt(d(a),0,d(l))})]})})})};globalThis.jotaiAtomCache=globalThis.jotaiAtomCache||{cache:new Map,get(t,a){return this.cache.has(t)?this.cache.get(t):(this.cache.set(t,a),a)}};globalThis.jotaiAtomCache=globalThis.jotaiAtomCache||{cache:new Map,get(t,a){return this.cache.has(t)?this.cache.get(t):(this.cache.set(t,a),a)}};const{halfPadding:Fe}=E,Ke="680px",Le=T.div.withConfig({displayName:"CalculatorInputs__CalculatorContainer",componentId:"sc-1cf8jq3-0"})(["width:100%;height:",";padding:calc("," * 1.5) 0;border-left:",";@media screen and (max-width:","){height:unset;border-left:unset;}"],Ke,E.defaultPadding,$e,E.breakpoints.tabletLandscape),Bt=T.form.withConfig({displayName:"CalculatorInputs__CalculatorForm",componentId:"sc-1cf8jq3-1"})(["display:flex;flex-direction:column;justify-content:space-between;height:100%;"]),qt=T.div.withConfig({displayName:"CalculatorInputs__DurationInputContainer",componentId:"sc-1cf8jq3-2"})(["width:100%;padding:",";height:",";display:flex;align-items:center;"],E.gridInputPadding,E.bigInputHeight),Kt=T.div.withConfig({displayName:"CalculatorInputs__CalculateContainer",componentId:"sc-1cf8jq3-3"})(["width:100%;padding:"," "," 0 ",";display:flex;flex-direction:row;justify-content:flex-end;align-items:center;"],E.twicePadding,Fe,Fe),Wt=T.p.withConfig({displayName:"CalculatorInputs__FootnoteText",componentId:"sc-1cf8jq3-4"})(["font-size:0.65rem;text-align:right;margin:10px 10px 0 0;"]),Yt=["elevation","temperature","humidity"],Zt={elevation:fe({id:"CalculatorInputs.envLabel.elevation",defaultMessage:"Elevation"}),temperature:fe({id:"CalculatorInputs.envLabel.temperature",defaultMessage:"Temperature"}),humidity:fe({id:"CalculatorInputs.envLabel.humidity",defaultMessage:"Humidity"})},Ue=(t,a)=>{switch(t){case"elevation":return a==="train"?"trainingElevation":"raceElevation";case"humidity":return a==="train"?"trainingHumidity":"raceHumidity";case"temperature":return a==="train"?"trainingTemperature":"raceTemperature";default:throw new Error("Invalid env label: ".concat(t))}},De={trainingElevation:"0",raceElevation:"0",trainingTemperature:"0",raceTemperature:"0",trainingHumidity:"0",raceHumidity:"0"},Xt=t=>({targetPower:"0",targetTime:{hours:"00",minutes:"00",seconds:"00"},suggestedPowerRange:{min:70,max:130,target:100},suggestedTimeRange:{min:0,max:0,target:0},distance:"0",selectedUnit:t,surface:"road",previousEnv:{distance:"0",selectedUnit:t,surface:"road",...De},...De}),oe={targetPower:"targetPower",distance:"distance"},Jt={targetPower:"",targetTime:"",distance:"",surface:"",trainingElevation:"",raceElevation:"",trainingTemperature:"",raceTemperature:"",trainingHumidity:"",raceHumidity:""},Qt=t=>{const a=re(t);for(const r of a)if(t[r])return!0;return!1},We=t=>({distance:t.distance,selectedUnit:t.selectedUnit,surface:t.surface,trainingElevation:t.trainingElevation,raceElevation:t.raceElevation,trainingTemperature:t.trainingTemperature,raceTemperature:t.raceTemperature,trainingHumidity:t.trainingHumidity,raceHumidity:t.raceHumidity}),Ve=(t,a)=>{let r=!0;return re(t).forEach(s=>{t[s]!==a[s]&&(r=!1)}),r},ea={distance:"distance",surface:"event_surface",trainingHumidity:"training_humidity",raceHumidity:"event_humidity",trainingTemperature:"training_temperature",raceTemperature:"event_temperature",trainingElevation:"training_elevation",raceElevation:"event_elevation"},ta=(t,a)=>{switch(a.type){case"UPDATE_PARAMS":return{...t,...a.updates};case"COMPLETE_CALCULATION":{const r=We(t);return{...t,previousEnv:r}}default:throw new Error("Unhandled action: ".concat(a))}},aa=(t,a)=>{if(a.type==="UPDATE_ERROR")return{...t,[a.inputId]:a.error};throw new Error("Unsupported action type: ".concat(a.type))},ra=5,na={fontSize:E.largeInputLabelFontSize,marginRight:E.inputLabelElSeparation},sa=t=>{const{targetPower:a,onChange:r,suggestedPowerRange:s}=t,{userData:o}=pe(),c=X(),u=C=>{const i=C/o.training_info.critical_power;return Math.round(i*100)},l=(C,i)=>{const m={target_type:"manual",target_value:parseFloat(C),target_unit:i};ae.trackEvent("calculation_target_updated",m)},d=C=>{l(C.target.value,"W")},x=a===""?0:parseFloat(a),M=u(x).toFixed()+"% CP";let y;return s&&x!==s.target&&(y={label:c.formatMessage({id:"CalculatorInputs.useSuggestedAction",defaultMessage:"Use Suggested"}),onClick:()=>r(s.target.toFixed())}),e.jsx(Re,{inputs:[{label:c.formatMessage({id:"CalculatorInputs.targetPowerInputLabel",defaultMessage:"Power Target"}),subLabel:M,control:y,labelStyle:na,labelHtmlFor:oe.targetPower,ui:e.jsxs(e.Fragment,{children:[e.jsx(Ie,{id:oe.targetPower,unit:"W",style:{fontSize:E.bigInputFontSize,height:E.bigInputHeight},value:a,onChange:C=>r(C.target.value),onBlur:d,type:"number",preventNegative:!0,preventFloat:!0,maxLength:3}),s&&e.jsx(qe,{value:x,targetRange:s})]})}]})},he=t=>{const a=pt(t*1e3),r={hours:"0",minutes:"0",seconds:"0"};return re(r).forEach(s=>{const o=J(a[s].toString());r[s]=o}),r},ia=(t,a)=>{let r=parseInt(t,10);switch(isNaN(r)&&(r=0),a){case"hours":return r*3600;case"minutes":return r*60;case"seconds":return r;default:throw new Error("Unhandled duration key: ".concat(a))}},ve=t=>{let a=0;return re(t).forEach(r=>{a+=ia(t[r],r)}),a},oa=t=>{const{targetTime:a,suggestedTimeRange:r,onChange:s}=t,o=X(),c=o.formatMessage({id:"CalculatorInputs.targetTimeInputLabel",defaultMessage:"Target Time"}),u=ve(a),l=y=>{s(y)},d=(y,C,i)=>{if(!At(i.relatedTarget)){const p={target_type:"manual",target_value:ve(a),target_unit:"s"};ae.trackEvent("calculation_target_updated",p)}};let x;r&&r.target!==u&&(x={label:o.formatMessage({id:"CalculatorInputs.useSuggestedAction",defaultMessage:"Use Suggested"}),onClick:()=>{const y=he(r.target);l(y)}});const M={label:c,labelStyle:{fontSize:E.largeInputLabelFontSize},labelHtmlFor:"",control:x,ui:e.jsxs(e.Fragment,{children:[e.jsx(qt,{children:e.jsx(Ft,{label:c,durationValue:a,onBlur:d,onChange:l,hoursPlaceholder:o.formatMessage({id:"CalculatorInputs.hoursPlaceholder",defaultMessage:"HH"}),minutesPlaceholder:o.formatMessage({id:"CalculatorInputs.minutesPlaceholder",defaultMessage:"MM"}),secondsPlaceholder:o.formatMessage({id:"CalculatorInputs.secondsPlaceholder",defaultMessage:"SS"})})}),e.jsx(qe,{value:u,targetRange:r,colors:{target:R.themes.dark.targetValue,underRange:R.themes.dark.overTargetValue,overRange:R.themes.dark.underTargetValue}})]})};return e.jsx(Re,{inputs:[M]})},ca=async t=>{const{user:a,api:r,state:s,dispatch:o}=t,{selectedUnit:c}=s,u=Tt(a.race),l=await r.user.getRacePrediction(a.id,{race_distance:u,course_id:0,depth:"complete"});if(!l.ok)throw l.err;const{training_elevation:d,training_humidity:x,training_temp:M}=l.data,y=He(d,a.units).toFixed(),C=(x*100).toFixed(),i=Me(u,c===K.km?"meters":"feet").toFixed(2),m=Oe(a),p=vt(M,m).toFixed(),j={targetPower:l.data.power_range_suggested.target.toFixed(),suggestedPowerRange:ue(l.data.power_range_suggested,Math.round),targetTime:he(Math.round(l.data.time_range_suggested.target)),suggestedTimeRange:ue(l.data.time_range_suggested,Math.round),distance:i,surface:"road",trainingElevation:y,raceElevation:y,trainingHumidity:C,raceHumidity:C,trainingTemperature:p,raceTemperature:p};return o({type:"UPDATE_PARAMS",updates:j}),Te(l.data,!0)},la=t=>{const{onCalculateStart:a,onCalculateEnd:r,calculatorType:s,course:o}=t,{userData:c}=pe(),u=Ne(),l=X(),d=c.units==="feet"?K.mi:K.km,x=Oe(c),M=ht(c.units,x),[y,C]=f.useState(!1),[i,m]=f.useReducer(ta,Xt(d)),[p,j]=f.useReducer(aa,Jt),[_,N]=f.useState(!1),Y=It(o),I=f.useCallback(g=>{const v=Be(g);return v.ok?v:{...v,error:l.formatMessage({id:"inputValidator.nonNumberError",defaultMessage:"Must be a number"})}},[l]),P=f.useCallback((g,v)=>{const S=I(g);if(!S.ok)return S;const k=parseFloat(g),H=v===K.km?"meters":"feet",z=xe(k,H),w=1500,V=5e4;if(z<w)return{ok:!1,error:l.formatMessage({id:"inputValidator.minDistanceError.metric",defaultMessage:"Must be {minMeters}m or more"},{minMeters:w}
1)};if(z>V){const B=V/1e3;return{ok:!1,error:l.formatMessage({id:"inputValidator.maxDistanceError.metric",defaultMessage:"Must be {maxKm}km or less"},{maxKm:B})}}return{ok:!0}},[l,I]),L=f.useCallback((g,v)=>{j({type:"UPDATE_ERROR",inputId:v,error:g})},[j]),G=f.useCallback(g=>P(g,i.selectedUnit),[i.selectedUnit,P]),q=(g,v)=>{const S=ea[g];let k=i[g];if(g==="distance"){const z=i.selectedUnit===K.mi?"feet":"meters";k=xe(parseFloat(k),z)}else/elev/i.test(g)?k=Ce(parseFloat(k),c.units):/temp/i.test(g)?k=ye(parseFloat(k),x):/humid/i.test(g)&&(k=parseFloat(k)/100);const H={[S]:k};return()=>{ae.trackEvent("calculation_parameter_updated",H)}},me=Yt.map(g=>{const v=Ue(g,"train"),S=Ue(g,"race"),k=Zt[g],H=l.formatMessage(k),z={type:"number",preventFloat:!0,preventNegative:g==="humidity",unit:M[g],maxLength:ra,validate:I,onErrorUpdate:L},w=n=>h=>{const{value:b}=h.target;m({type:"UPDATE_PARAMS",updates:{[n]:b}})},V=l.formatMessage({id:"CalculatorInputs.trainedAtLabel",defaultMessage:"Trained At"})+" *",B=l.formatMessage({id:"CalculatorInputs.racingAt",defaultMessage:"Racing At"}),$=[{id:v,subLabel:V,value:i[v],onChange:w(v),onBlur:q(v),error:p[v],...z},{id:S,subLabel:B,readOnly:!!o&&S==="raceElevation",value:i[S],onChange:w(S),onBlur:q(S),error:p[S],...z}];return e.jsx(Ht,{groupLabel:H,inputs:$},"input-group-".concat(g))}),ne=g=>{m({type:"UPDATE_PARAMS",updates:{targetPower:g}})},O=(g,v,S)=>{m({type:"UPDATE_PARAMS",updates:{distance:g,selectedUnit:S}});const H=P(g,S);L(H.error,oe.distance)},ce=g=>{m({type:"UPDATE_PARAMS",updates:{targetTime:{...i.targetTime,...g}}})},Q=g=>{const v=g.response&&typeof g.response.data=="string";if(v&&g.response.data.includes("critical power")){r({err:"invalid-cp"});return}if(v&&g.response.data.includes("entity not found")){r({err:"not-enough-data"});return}r({err:"generic"})},se=async(g,v)=>{g&&g.preventDefault();const S=i.selectedUnit===K.km?"meters":"feet",k=xe(parseFloat(i.distance),S),H={course_id:o?o.id:0,race_distance:o?o.distance:k,surface:o?o.surface:i.surface,training_elevation:Ce(parseFloat(i.trainingElevation),c.units),race_elevation:o?o.elevation:Ce(parseFloat(i.raceElevation),c.units),training_temperature:ye(parseFloat(i.trainingTemperature),x),race_temperature:ye(parseFloat(i.raceTemperature),x),training_humidity:parseFloat(i.trainingHumidity)/100,race_humidity:parseFloat(i.raceHumidity)/100},z=We(i);let w;v||!Ve(i.previousEnv,z)?w=H:s===F.time?w={...H,target_power:parseFloat(i.targetPower)}:w={...H,target_time:ve(i.targetTime)},w={...w,depth:"complete"};for(const $ in w){if(!w.hasOwnProperty($))continue;const h=w[$];if(typeof h=="number"&&isNaN(h))return}a(),C(!0);const V=await u.user.getRacePrediction(c.id,w);if(!V.ok){C(!1),Q(V.err);return}let B;if(v||!Ve(i.previousEnv,z)){const $={targetPower:V.data.power_range_suggested.target.toFixed(),suggestedPowerRange:ue(V.data.power_range_suggested,Math.round),targetTime:he(Math.round(V.data.time_range_suggested.target)),suggestedTimeRange:ue(V.data.time_range_suggested,Math.round)};m({type:"UPDATE_PARAMS",updates:$});const n=Te(V.data,!0);r(n),B=s===F.time?"recommended_power":"recommended_time"}else{const $=Te(V.data);if(s===F.time){const n=he($.time_range.target);m({type:"UPDATE_PARAMS",updates:{targetTime:n}})}else m({type:"UPDATE_PARAMS",updates:{targetPower:$.power_range.target.toFixed()}});r($),B=s===F.time?"power":"time"}m({type:"COMPLETE_CALCULATION"}),C(!1),ae.trackEvent("race_prediction_calculated",{target_type:B,target_value:s===F.time?w.target_power:w.target_time,course_id:w.course_id,event_surface:w.surface,event_elevation:w.race_elevation,event_temperature:w.race_temperature,event_humidity:w.race_humidity,training_elevation:w.training_elevation,training_temperature:w.training_temperature,training_humidity:w.training_humidity,distance:w.race_distance,plan_id:0})};f.useEffect(()=>{a(),ca({user:c,api:u,state:i,dispatch:m}).then(g=>{r(g),m({type:"COMPLETE_CALCULATION"}),N(!0)}).catch(g=>{Q(g)})},[]),f.useEffect(()=>{if(o!==Y){if(o){const g=i.selectedUnit===K.km?"meters":"feet",v=Me(o.distance,g).toFixed(2),S=He(o.elevation,c.units).toFixed(),k={distance:v,surface:o.surface,raceElevation:S};m({type:"UPDATE_PARAMS",updates:k})}se(void 0,!0)}});const Z=s===F.time?e.jsx(sa,{targetPower:i.targetPower,suggestedPowerRange:i.suggestedPowerRange,onChange:ne}):e.jsx(oa,{targetTime:i.targetTime,suggestedTimeRange:i.suggestedTimeRange,onChange:ce});return _?e.jsx(Le,{children:e.jsxs(Bt,{onSubmit:g=>se(g),autoComplete:"off",children:[e.jsxs("div",{children:[Z,e.jsx(Re,{inputs:[{label:l.formatMessage({id:"CalculatorInputs.distanceInputLabel",defaultMessage:"Distance"}),labelHtmlFor:oe.distance,ui:e.jsx(Lt,{id:oe.distance,value:i.distance,selectedUnit:i.selectedUnit,onErrorUpdate:L,onChange:O,readOnly:!!o,onBlur:q("distance"),validate:G}),error:p.distance,readOnly:!!o}]}
1),me,e.jsxs(Wt,{children:["*"," ",e.jsx(D,{id:"CalculatorInputs.trainedAtFootnote",defaultMessage:"Values based on last 90 days"})]})]}),e.jsx(Kt,{children:e.jsx(_e,{disabled:y||Qt(p),type:"submit",style:{minWidth:"150px"},children:y?e.jsx(D,{id:"CalculatorInputs.submitBtnLoadingText",defaultMessage:"Calculating"}):e.jsx(D,{id:"CalculatorInputs.submitBtnDefaultText",defaultMessage:"Calculate"})})})]})}):e.jsx(Le,{})};globalThis.jotaiAtomCache=globalThis.jotaiAtomCache||{cache:new Map,get(t,a){return this.cache.has(t)?this.cache.get(t):(this.cache.set(t,a),a)}};const da=T.div.withConfig({displayName:"RaceGraphs__GraphViewContainer",componentId:"aa6wq1-0"})(["width:100%;height:100%;padding:",";display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;"],E.halfPadding),ua=T.div.withConfig({displayName:"RaceGraphs__ChartHeaderContainer",componentId:"aa6wq1-1"})(["width:100%;margin-bottom:50px;display:flex;flex-direction:row;align-items:center;justify-content:space-between;"]),ga=T.div.withConfig({displayName:"RaceGraphs__ChartSelectorsContainer",componentId:"aa6wq1-2"})(["display:flex;flex-direction:row;align-items:center;justify-content:flex-start;> * + *{margin-left:",";}"],E.twicePadding),ha=T.label.withConfig({displayName:"RaceGraphs__HeadingLabel",componentId:"aa6wq1-3"})(["height:1rem;margin:3px 0 2px 0;"]),Ye=T.h2.withConfig({displayName:"RaceGraphs__GraphTypeHeading",componentId:"aa6wq1-4"})(["font-size:3rem;margin-bottom:0;padding:5px 0;color:",";opacity:",";transition:opacity 0.2s ease;"],R.themes.dark.headerText,t=>t.isSelected?1:.5),pa=T.div.withConfig({displayName:"RaceGraphs__GraphTypeContainer",componentId:"aa6wq1-5"})(["padding:5px ",";&:hover{","{opacity:1;}}"],E.halfPadding,Ye),ma=T.div.withConfig({displayName:"RaceGraphs__ChartContainer",componentId:"aa6wq1-6"})(["width:100%;min-height:375px;flex:1;"]);let fa=-1;const xa=()=>"graph-selector-".concat(++fa),Ca=t=>{const{isSelected:a,description:r,subDescription:s,content:o,chartType:c,onClick:u}=t,{current:l}=f.useRef(xa()),d=()=>{u(c)};return e.jsxs(pa,{onClick:d,children:[e.jsxs(ha,{id:l,children:[r,e.jsx("span",{style:{marginLeft:"10px",fontSize:"0.9rem"},children:s})]}),e.jsx(Ye,{"aria-labelledby":l,isSelected:a,children:o})]})},ya=t=>{const{target:a,errorRange:r,calculatorType:s,onChartChange:o,chartType:c}=t,u=X(),l=s===F.time?u.formatMessage({id:"RaceGraphs.timeLabel",defaultMessage:"Estimated Time"}):u.formatMessage({id:"RaceGraphs.powerLabel",defaultMessage:"Target Power"}),d=x=>{typeof o=="function"&&o(x)};return e.jsx(ua,{children:e.jsx(ga,{children:e.jsx(Ca,{content:a,chartType:0,isSelected:c===0,description:l,subDescription:r,onClick:d})})})},wa=t=>{const{raceData:a,calculatorType:r}=t,s=X(),[o,c]=f.useState(0),u=m=>{if(m<60)return s.formatMessage({id:"RaceGraphs.secondsRange",defaultMessage:"+/- {seconds} sec"},{seconds:m});const p=ft(m,60)/60;return s.formatMessage({id:"RaceGraphs.minutesRange",defaultMessage:"+/- {minutes} min"},{minutes:p})},l=m=>s.formatMessage({id:"RaceGraphs.wattsRange",defaultMessage:"+/- {watts} W"},{watts:m}),d=(m,p)=>{const j=m.target-m.min,_=m.max-m.target,N=_>j?_:j;return p===F.time?u(N):l(N)},x=m=>{c(m)},M=f.useMemo(()=>a?e.jsx(_t,{raceData:a}):null,[a]);if(!a)return e.jsx(e.Fragment,{});const y=r===F.time?mt(a.time_range.target*1e3):"".concat(a.power_range.target.toFixed()," W"),C=r===F.time?a.time_range:a.power_range,i=d(C,r);return e.jsxs(da,{children:[e.jsx(ya,{calculatorType:r,chartType:o,onChartChange:x,target:y,errorRange:i}),e.jsx(ma,{children:M})]})};globalThis.jotaiAtomCache=globalThis.jotaiAtomCache||{cache:new Map,get(t,a){return this.cache.has(t)?this.cache.get(t):(this.cache.set(t,a),a)}};const ja=T.div.withConfig({displayName:"RaceCalculator__FeatureContainer",componentId:"bt1gib-0"})(["width:100%;height:100%;display:flex;flex-direction:row;align-items:center;justify-content:flex-start;flex-wrap:wrap;position:relative;"]),Ee=1,ba=T.div.withConfig({displayName:"RaceCalculator__ChartsContainer",componentId:"bt1gib-1"})(["position:relative;height:calc( 100% - 2px );min-width:500px;flex:1;order:1;z-index:",";@media screen and (max-width:","){width:100%;min-width:unset;height:600px;order:2;}"],Ee,E.breakpoints.tabletLandscape),Ta=T.div.withConfig({displayName:"RaceCalculator__CalculatorContainer",componentId:"bt1gib-2"})(["width:350px;height:100%;order:2;@media screen and (max-width:","){width:100%;height:unset;border-bottom:",";order:1;}"],E.breakpoints.tabletLandscape,$e),Ze=T.div.withConfig({displayName:"RaceCalculator__OverlayBackgroun
1d",componentId:"bt1gib-3"})(["position:absolute;top:0;left:0;width:100%;height:100%;z-index:",";background-color:",";opacity:0.8;"],Ee+1,R.themes.dark.profilePageCard),Xe=T.div.withConfig({displayName:"RaceCalculator__OverlayContainer",componentId:"bt1gib-4"})(["position:absolute;top:0;left:0;width:100%;height:100%;z-index:",";"],Ee+1),W=T.p.withConfig({displayName:"RaceCalculator__ErrorText",componentId:"bt1gib-5"})(["max-width:80%;color:",";"],R.themes.dark.headerText),va=T(Xe).withConfig({displayName:"RaceCalculator__ErrorMessageContainer",componentId:"bt1gib-6"})(["display:flex;flex-direction:column;align-items:center;justify-content:center;"]),_a=T.span.withConfig({displayName:"RaceCalculator__MembershipGradientSpan",componentId:"bt1gib-7"})(["background:linear-gradient(to right,#f77120,#feca2f);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;"]),Ma=()=>{const t=X();return e.jsxs(e.Fragment,{children:[e.jsx(Ze,{}),e.jsx(Xe,{children:e.jsx(at,{text:t.formatMessage({id:"RaceCalculator.loadingMsg",defaultMessage:"Analyzing your race..."})})})]})},Se=t=>{const{message:a}=t;return e.jsxs(e.Fragment,{children:[e.jsx(Ze,{}),e.jsxs(va,{children:[e.jsx(ze,{size:16}),typeof a=="string"?e.jsx(W,{children:a}):a]})]})},Ia=()=>e.jsx(Se,{iconColor:R.themes.dark.error,message:e.jsxs(e.Fragment,{children:[e.jsx(W,{children:e.jsx(D,{id:"RaceCalculator.genericError.header",defaultMessage:"There was an error with your prediction. Please try again."})}),e.jsx(W,{children:e.jsx(D,{id:"RaceCalculator.genericError.msg",defaultMessage:"If the problem persists, please contact [email protected]."})})]})}),Ra=()=>e.jsx(Se,{iconColor:R.themes.dark.textHighlight,message:e.jsxs(e.Fragment,{children:[e.jsx(W,{children:e.jsx(D,{id:"RaceCalculator.confidenceError.header",defaultMessage:"You need more data."})}),e.jsx(W,{children:e.jsx(D,{id:"RaceCalculator.confidenceError.msg",defaultMessage:"You'll be able to generate predictions after 5 runs."})}),e.jsx(W,{children:e.jsx(Ge,{href:"https://help.stryd.com/en/articles/6879549-race-power-calculator-not-enough-data",children:e.jsx(D,{id:"RaceCalculator.confidenceError.readMoreLinkText",defaultMessage:"Read more >"})})})]})}),Ea=()=>e.jsxs(nt,{w:"100%",h:400,gap:"xs",align:"center",justify:"center",p:"md",children:[e.jsx(ze,{}),e.jsxs(be,{align:"center",justify:"center",gap:4,children:[e.jsx(_a,{style:{marginRight:"1rem"},children:e.jsx(D,{id:"strydMembership.title",defaultMessage:"Stryd Membership"})}),e.jsx(te,{children:e.jsx(D,{id:"raceCalculator.gate.header",defaultMessage:"Race Power Calculator"})})]}),e.jsx(te,{children:e.jsx(D,{id:"raceCalculator.gate.message",defaultMessage:"Build the perfect race plan that factors in the race course, weather, your skills, and more."})}),e.jsx(et,{to:st(tt),children:e.jsx(_e,{variant:"light",children:e.jsx(D,{id:"action.learnMore",defaultMessage:"Learn More"})})})]}),Sa=()=>e.jsx(Se,{iconColor:R.themes.dark.textHighlight,message:e.jsxs(e.Fragment,{children:[e.jsx(W,{children:e.jsx("strong",{children:e.jsx(D,{id:"RaceCalculator.cpError.header",defaultMessage:"No Critical Power"})})}),e.jsx(W,{children:e.jsx(D,{id:"RaceCalculator.cpError.msg",defaultMessage:"An accurate Critical Power is required to generate your race targets."})}),e.jsx(W,{children:e.jsx(Ge,{href:"https://help.stryd.com/en/articles/6879345-critical-power",children:e.jsx(D,{id:"RaceCalculator.cpError.readMoreLinkText",defaultMessage:"Learn more >"})})})]})}),ka=()=>{const t=X(),[a,r]=f.useState(null),[s,o]=f.useState(F.time),[c,u]=f.useState(!1),[l,d]=f.useState(""),[x,M]=f.useState(null),{accessGranted:y}=xt("race_power_calculator");let C=null;return c?C=e.jsx(Ma,{}):l==="request"?C=e.jsx(Ia,{}):l==="confidence"?C=e.jsx(Ra,{}):l==="invalid-cp"&&(C=e.jsx(Sa,{})),e.jsx(yt,{children:e.jsx(wt,{title:t.formatMessage({id:"RaceCalculator.title",defaultMessage:"Race Calculator"}),helpLink:"https://help.stryd.com/en/articles/6879548-race-power-calculator-and-event-planner",cardBodyStyle:{padding:0,minHeight:a?"unset":Ke},leftTitleRowComponents:y?e.jsx(Ct,{size:"sm",ml:"md",w:120,value:s,onChange:i=>{if(i){if(i!==F.power&&i!==F.time)throw new Error("Invalid calculator type. Check ids for selector menu are of type CalculatorType");o(i);const m=i===F.power?"by_time":"by_power";ae.trackEvent("calculation_type_updated",{type:m})}},clearable:!1,data:[{value:F.time,label:t.formatMessage({id:"RaceCalculator.option.byPower",defaultMessage:"By Power"})},{value:F.power,label:t.formatMessage({id:"RaceCalculator.option.byTime",defaultMessage:"By Time"})}]}):void 0,rightTitleRowComponents:y?e.jsx(Mt,{selectedCourse:x,onSelection:i=>{M(i),i&&ae.trackEvent("calculation_course_selected",{course_id:i.id,is_official:i.official})}}):void 0,children:e.jsx(ja,{children:y?e.jsxs(e.Fragment,{children:[e.jsxs(ba,{children:[C,e.jsx(wa,{raceData:a,calculatorType:s})]}),e.jsx(Ta,{style:{display:a?"unset":"none"},children:e.jsx(la,{course:x,onCalculateStart:()=>{d(""),u(!0)},onCalculateEnd:i=>
1{if(u(!1),i.err){switch(i.err){case"invalid-cp":d("invalid-cp");break;case"not-enough-data":d("confidence");break;default:d("request")}return}if(i.confidence<.25){d("confidence");return}r(i)},calculatorType:s})})]}):e.jsx(Ea,{})})})})};globalThis.jotaiAtomCache=globalThis.jotaiAtomCache||{cache:new Map,get(t,a){return this.cache.has(t)?this.cache.get(t):(this.cache.set(t,a),a)}};globalThis.jotaiAtomCache=globalThis.jotaiAtomCache||{cache:new Map,get(t,a){return this.cache.has(t)?this.cache.get(t):(this.cache.set(t,a),a)}};const qa=()=>e.jsx(rt,{children:e.jsx(ka,{})});export{qa 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.