1import{a as ge}from"./chunk-WSUWFR5I.js";import{b as ee,c as ne,e as ue}from"./chunk-KTCKEGAU.js";import{c as ie,g as ae,l as oe,n as re,r as le,s as ce,t as se,u as de,v as me,y as pe}from"./chunk-C4DUFTD6.js";import{p as te,q as B}from"./chunk-NOK5FE6X.js";import{e as $,f as R,o as O,p as F}from"./chunk-UCPGDHMW.js";import{Bb as Q,Da as A,Ib as i,Jb as o,Kb as x,Ob as X,T as G,Tb as m,Vb as u,Xa as J,Y as q,ab as s,dc as l,ec as T,f as K,fc as I,gb as p,ha as W,ia as D,ic as g,ja as U,jc as f,kc as h,mb as v,pc as Z,ra as k,rb as P,zb as d}from"./chunk-MXT7AG4T.js";import{a as _,b as z}from"./chunk-6MDQTQU3.js";function _e(c,e){if(c&1&&(i(0,"div",22),l(1),o()),c&2){let n=u();s(),I(" ",n.errorMessage," ")}}var j=class c{state;errorMessage="";calculate=new k;showSplits=new k;reset=new k;formState;ngOnInit(){this.formState=_({},this.state)}ngOnChanges(){this.state&&(this.formState=_({},this.state))}isFieldDisabled(e){return this.formState.lastCalculatedVariable===e}onCalculate(){this.calculate.emit(this.formState)}onSplits(){this.showSplits.emit()}onReset(){this.reset.emit()}onInputChange(){this.calculate.emit(this.formState)}static \u0275fac=function(n){return new(n||c)};static \u0275cmp=v({type:c,selectors:[["app-calculator-form"]],inputs:{state:"state",errorMessage:"errorMessage"},outputs:{calculate:"calculate",showSplits:"showSplits",reset:"reset"},features:[W],decls:57,vars:20,consts:[[1,"calculator-form-container"],[1,"form-section"],[1,"metric-box"],[1,"metric-label"],[1,"input-group"],[1,"input-wrapper"],["type","number","min","0","placeholder","0","aria-label","Hours",1,"time-input",3,"ngModelChange","ngModel","disabled"],[1,"input-label"],["type","number","min","0","max","59","placeholder","0","aria-label","Minutes",1,"time-input",3,"ngModelChange","ngModel","disabled"],["type","number","min","0","max","59","placeholder","0","aria-label","Seconds",1,"time-input",3,"ngModelChange","ngModel","disabled"],["type","number","min","0","step","0.1","placeholder","0","aria-label","Distance",1,"distance-input",3,"ngModelChange","ngModel","disabled"],["aria-label","Distance unit",1,"unit-select",3,"ngModelChange","ngModel","disabled"],["value","km"],["value","mile"],["type","number","min","0","placeholder","0","aria-label","Pace hours",1,"time-input",3,"ngModelChange","ngModel","disabled"],["type","number","min","0","max","59","placeholder","0","aria-label","Pace minutes",1,"time-input",3,"ngModelChange","ngModel","disabled"],["type","number","min","0","max","59","placeholder","0","aria-label","Pace seconds",1,"time-input",3,"ngModelChange","ngModel","disabled"],["aria-label","Pace unit",1,"unit-select",3,"ngModelChange","ngModel","disabled"],["class","warning","role","alert",4,"ngIf"],[1,"button-group"],["type","button",1,"btn","btn-primary",3,"click"],["type","button",1,"btn","btn-secondary",3,"click"],["role","alert",1,"warning"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div",2)(3,"label",3),l(4,"Time:"),o(),i(5,"div",4)(6,"div",5)(7,"input",6),h("ngModelChange",function(a){return f(t.formState.timeHours,a)||(t.formState.timeHours=a),a}),o(),i(8,"span",7),l(9,"h"),o()(),i(10,"div",5)(11,"input",8),h("ngModelChange",function(a){return f(t.formState.timeMinutes,a)||(t.formState.timeMinutes=a),a}),o(),i(12,"span",7),l(13,"m"),o()(),i(14,"div",5)(15,"input",9),h("ngModelChange",function(a){return f(t.formState.timeSeconds,a)||(t.formState.timeSeconds=a),a}),o(),i(16,"span",7),l(17,"s"),o()()()(),i(18,"div",2)(19,"label",3),l(20,"Distance:"),o(),i(21,"div",4)(22,"input",10),h("ngModelChange",function(a){return f(t.formState.distance,a)||(t.formState.distance=a),a}),o(),i(23,"select",11),h("ngModelChange",function(a){return f(t.formState.distanceUnit,a)||(t.formState.distanceUnit=a),a}),i(24,"option",12),l(25,"KM"),o(),i(26,"option",13),l(27,"Mile"),o()()()(),i(28,"div",2)(29,"label",3),l(30),o(),i(31,"div",4)(32,"div",5)(33,"input",14),h("ngModelChange",function(a){return f(t.formState.paceHours,a)||(t.formState.paceHours=a),a}),o(),i(34,"span",7),l(35,"h"),o()(),i(36,"div",5)(37,"input",15),h("ngModelChange",function(a){return f(t.formState.paceMinutes,a)||(t.formState.paceMinutes=a),a}),o(),i(38,"span",7),l(39,"m"),o()(),i(40,"div",5)(41,"input",16),h("ngModelChange",function(a){return f(t.formState.paceSeconds,a)||(t.formState.paceSeconds=a),a}),o(),i(42,"span",7),l(43,"s"),o()(),i(44,"select",17),h("ngModelChange",function(a){return f(t.formState.paceUnit,a)||(t.formState.paceUnit=a),a}),i(45,"option",12),l(46,"KM"),o(),i(47,"option",13),l(48,"Mile"),o()()()(),P(49,_e,2,1,"div",18),i(50,"div",19)(51,"button",20),m("click",function(){return t.onCalculate()}),l(52," Calculate "),o(),i(53,"button",21),m("click",function(){return t.onSplits()}),l(54," Splits "),o(),i(55,"button",21),m("click",function(){return t.onReset()}),l(56," Reset "),o()()()()),n&2&&(s(7),g("ngModel",t.formState.timeHours),d("disabled",t.isFieldDisabled("time")),s(4),g("ngModel",t.formState.timeMinutes),d("disabled",t.isFieldDisabled("time")),s(4),g("ngModel",t.formState.timeSeconds),d("disabled",t.isFieldDisabled("time")),s(7),g("ngModel",t.formState.distance),d("disabled",t.isFieldDisabled("distance")),s(),g("ngModel",t.formState.distanceUnit),d("disabled",t.isFieldDisabled("distance")),s(7),I("Pace (time / ",t.formState.paceUnit,"):"),s(3),g("ngModel",t.formState.paceHours),d("disabled",t.isFieldDisabled("pace")),s(4),g("ngModel",t.formState.paceMinutes),d("disabled",t.isFieldDisabled("pace")),s(4),g("ngModel",t.formState.paceSeconds),d("disabled",t.isFieldDisabled("pace")),s(3),g("ngModel",t.formState.paceUnit),d("disabled",t.isFieldDisabled("pace")),s(5),d("ngIf",t.errorMessage))},dependencies:[O,R,pe,ce,se,ie,re,le,ae,me,de,oe],styles:[".calculator-form-container[_ngcontent-%COMP%]{width:100%}.form-section[_ngcontent-%COMP%]{background:#fff;border-radius:12px;padding:2rem;box-shadow:0 2px 8px #0000001a}.metric-box[_ngcontent-%COMP%]{margin-bottom:1.5rem}.metric-box[_ngcontent-%COMP%]:last-of-type{margin-bottom:0}.metric-label[_ngcontent-%COMP%]{display:block;font-weight:600;font-size:1rem;margin-bottom:.5rem;color:#333}.input-group[_ngcontent-%COMP%]{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}.input-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.25rem}.input-label[_ngcontent-%COMP%]{font-size:.875rem;color:#666;font-weight:500}input[type=number][_ngcontent-%COMP%], .distance-input[_ngcontent-%COMP%]{width:80px;padding:.75rem;border:2px solid #e0e0e0;border-radius:8px;font-size:1rem;color:#333;background-color:#f5f5f5;transition:all .2s ease}input[type=number][_ngcontent-%COMP%]:focus, .distance-input[_ngcontent-%COMP%]:focus{outline:none;border-color:#2c5aa0;background-color:#fff;box-shadow:0 0 0 3px #2c5aa01a}input[type=number][_ngcontent-%COMP%]:disabled, .distance-input[_ngcontent-%COMP%]:disabled{background-color:#c3c3ff;color:#333;opacity:1;cursor:not-allowed;border-color:#b0b0ff}input[type=number][_ngcontent-%COMP%]::placeholder, .distance-input[_ngcontent-%COMP%]::placeholder{color:#999}@media (max-width: 600px){input[type=number][_ngcontent-%COMP%], .distance-input[_ngcontent-%COMP%]{width:60px;padding:.5rem;font-size:.9rem}}.time-input[_ngcontent-%COMP%]{width:70px}@media (max-width: 600px){.time-input[_ngcontent-%COMP%]{width:55px}}.distance-input[_ngcontent-%COMP%]{width:100px}@media (max-width: 600px){.distance-input[_ngcontent-%COMP%]{width:80px}}.unit-select[_ngcontent-%COMP%]{padding:.75rem;border:2px solid #e0e0e0;border-radius:8px;font-size:1rem;color:#333;background-color:#f5f5f5;cursor:pointer;transition:all .2s ease}.unit-select[_ngcontent-%COMP%]:focus{outline:none;border-color:#2c5aa0;background-color:#fff;box-shadow:0 0 0 3px #2c5aa01a}.unit-select[_ngcontent-%COMP%]:disabled{background-color:#c3c3ff;opacity:1;cursor:not-allowed;border-color:#b0b0ff}@media (max-width: 600px){.unit-select[_ngcontent-%COMP%]{padding:.5rem;font-size:.9rem}}.warning[_ngcontent-%COMP%]{background-color:#fff3cd;color:#856404;padding:1rem;border-radius:8px;margin-top:1rem;margin-bottom:1rem;border:1px solid #ffeaa7;font-size:.95rem}.button-group[_ngcontent-%COMP%]{display:flex;gap:1rem;margin-top:2rem;flex-wrap:wrap}.btn[_ngcontent-%COMP%]{padding:.875rem 1.75rem;font-size:1rem;font-weight:600;border-radius:8px;border:none;cursor:pointer;transition:all .2s ease;min-width:100px}.btn[_ngcontent-%COMP%]:focus{outline:none;box-shadow:0 0 0 3px #2c5aa033}.btn[_ngcontent-%COMP%]:active{transform:translateY(1px)}@media (max-width: 600px){.btn[_ngcontent-%COMP%]{flex:1;min-width:auto;padding:.75rem 1rem}}.btn-primary[_ngcontent-%COMP%]{background-color:#2c5aa0;color:#fff}.btn-primary[_ngcontent-%COMP%]:hover{background-color:#234780;box-shadow:0 4px 12px #2c5aa04d}.btn-secondary[_ngcontent-%COMP%]{background-color:#fff;color:#2c5aa0;border:2px solid #2c5aa0}.btn-secondary[_ngcontent-%COMP%]:hover{background-color:#f0f4f8;box-shadow:0 4px 12px #2c5aa033}input[type=number][_ngcontent-%COMP%]::-webkit-inner-spin-button, input[type=number][_ngcontent-%COMP%]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number][_ngcontent-%COMP%]{-moz-appearance:textfield}"]})};function be(c,e){c&1&&(i(0,"div",4),x(1,"img",5),o())}function Me(c,e){c&1&&(i(0,"div",6),x(1,"img",7),o())}function Se(c,e){if(c&1&&(i(0,"div",8)(1,"div",9)(2,"p",10),l(3),o(),i(4,"div",11),x(5,"img",12),o()()()),c&2){let n=u();s(3),T(n.result.text),s(2),d("src",n.result.image,J)("alt",n.result.animal.name)}}var H=class c{constructor(e){this.platformId=e;this.isBrowser=F(this.platformId)}result=null;loading=!1;isDesktop=!1;isBrowser=!1;ngOnInit(){this.isBrowser&&(this.checkScreenSize(),window.addEventListener("resize",()=>this.checkScreenSize()))}checkScreenSize(){this.isBrowser&&(this.isDesktop=window.innerWidth>1063)}static \u0275fac=function(n){return new(n||c)(p(A))};static \u0275cmp=v({type:c,selectors:[["app-animal-race-result"]],inputs:{result:"result",loading:"loading"},decls:4,vars:3,consts:[[1,"race-result-container"],["class","placeholder",4,"ngIf"],["class","loading",4,"ngIf"],["class","result",4,"ngIf"],[1,"placeholder"],["src","/frontend_assets/images/animal_race/question_marks.png","alt","Calculate to see if you can outrun an animal",1,"placeholder-image"],[1,"loading"],["src","/frontend_assets/images/animal_race/animal-spinner.gif","alt","Loading...",1,"loading-spinner"],[1,"result"],[1,"result-content"],[1,"result-text"],[1,"result-image-wrapper"],[1,"result-image",3,"src","alt"]],template:function(n,t){n&1&&(i(0,"div",0),P(1,be,2,0,"div",1)(2,Me,2,0,"div",2)(3,Se,6,3,"div",3),o()),n&2&&(s(),d("ngIf",!t.result&&!t.loading&&t.isDesktop),s(),d("ngIf",t.loading),s(),d("ngIf",t.result&&!t.loading))},dependencies:[O,R],styles:[".race-result-container[_ngcontent-%COMP%]{width:100%;background:#fff;border-radius:12px;padding:2rem;box-shadow:0 2px 8px #0000001a;min-height:300px;display:flex;align-items:center;justify-content:center}@media (max-width: 600px){.race-result-container[_ngcontent-%COMP%]{padding:1.5rem;min-height:200px}}.placeholder[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;opacity:.6;transition:opacity .3s ease}.placeholder[_ngcontent-%COMP%]:hover{opacity:.8}.placeholder-image[_ngcontent-%COMP%]{max-width:100%;height:auto;max-height:250px;object-fit:contain}.loading[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center}.loading-spinner[_ngcontent-%COMP%]{width:100px;height:100px;object-fit:contain}@media (max-width: 600px){.loading-spinner[_ngcontent-%COMP%]{width:60px;height:60px}}.result[_ngcontent-%COMP%]{width:100%;animation:_ngcontent-%COMP%_fadeIn .5s ease-in}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.result-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.5rem;align-items:center}.result-text[_ngcontent-%COMP%]{font-size:1.125rem;line-height:1.6;color:#333;text-align:center;margin:0;padding:0 1rem;font-weight:500}@media (max-width: 600px){.result-text[_ngcontent-%COMP%]{font-size:1rem;padding:0}}.result-image-wrapper[_ngcontent-%COMP%]{width:100%;max-width:500px;border-radius:12px;overflow:hidden;box-shadow:0 4px 16px #00000026;transition:transform .3s ease,box-shadow .3s ease}.result-image-wrapper[_ngcontent-%COMP%]:hover{transform:translateY(-4px);box-shadow:0 8px 24px #0003}.result-image[_ngcontent-%COMP%]{width:100%;height:auto;display:block;object-fit:cover}"]})};var Y=[{name:"Crocodile",noun:"a crocodile",pace:.424},{name:"Komodo Dragon",noun:"a komodo dragon",pace:.379},{name:"Wild Turkey",noun:"a turkey",pace:.18},{name:"Grizzly Bear",noun:"a grizzly bear",pace:.16},{name:"Hippo",noun:"a hippo",pace:.15},{name:"Tiger",noun:"a tiger",pace:.129},{name:"Hyena",noun:"a pack of hyenas",pace:.12},{name:"Ostrich",noun:"an ostrich",pace:.103},{name:"Camel",noun:"a camel",pace:.14}];var E=class c{clockToSeconds(e){let n=e.seconds||0,t=e.hours||0,r=e.minutes||0;return t*3600+r*60+parseInt(n.toString())}secondsToClock(e){let n=Math.floor(e/3600),t=Math.floor((e-n*3600)/60),r=M
1ath.round(e-n*3600-t*60);return{hours:n,minutes:t,seconds:r}}distanceToMeters(e,n){return n==="km"?e*1e3:n==="mile"?e*1609:e}metersToDistance(e,n){return n==="m"?e:n==="km"?e/1e3:n==="mile"?e/1609:e}distanceToUnit(e,n,t){return e*this.distanceToMeters(1,n)*this.metersToDistance(1,t)}normalizePace(e,n){return e/this.distanceToMeters(1,n)}paceToUnit(e,n,t){return e*(this.distanceToMeters(1,t)/this.distanceToMeters(1,n))}calculatePace(e,n,t,r){if(e===0||n===0)return null;let a=this.distanceToUnit(n,t,"m"),C=e/a;return this.secondsToClock(this.paceToUnit(C,"m",r))}calculateDistance(e,n,t,r){let a=this.paceToUnit(n,t,"m");return e===0||a===0?null:this.metersToDistance(e/a,r)}calculateTime(e,n,t,r){let a=this.paceToUnit(t,r,"m");if(e===0||a===0)return null;let C=this.distanceToMeters(e,n)*a;return this.secondsToClock(C)}generalCalculate(e){let n=this.clockToSeconds({hours:e.paceHours,minutes:e.paceMinutes,seconds:e.paceSeconds}),t=this.clockToSeconds({hours:e.timeHours,minutes:e.timeMinutes,seconds:e.timeSeconds});if(e.distance===0||e.distance===void 0||e.lastCalculatedVariable==="distance")if(n!==0&&t!==0){let r=this.calculateDistance(t,n,e.paceUnit,e.distanceUnit);if(r!==null)return{state:z(_({},e),{distance:r,lastCalculatedVariable:"distance"}),error:"",calculated:"distance"}}else return{state:e,error:"You must enter at least 2 variables",calculated:null};if(n===0||e.lastCalculatedVariable==="pace")if(e.distance!==0&&t!==0){let r=this.calculatePace(t,e.distance,e.distanceUnit,e.paceUnit);if(r!==null)return{state:z(_({},e),{paceHours:r.hours,paceMinutes:r.minutes,paceSeconds:r.seconds,lastCalculatedVariable:"pace"}),error:"",calculated:"pace"}}else return{state:e,error:"You must enter at least 2 variables",calculated:null};if(t===0||e.lastCalculatedVariable==="time")if(e.distance!==0&&n!==0){let r=this.calculateTime(e.distance,e.distanceUnit,n,e.paceUnit);if(r!==null)return{state:z(_({},e),{timeHours:r.hours,timeMinutes:r.minutes,timeSeconds:r.seconds,lastCalculatedVariable:"time"}),error:"",calculated:"time"}}else return{state:e,error:"You must at least enter 2 variables",calculated:null};return{state:e,error:"Please enter no more than two variables",calculated:null}}calculateAnimalRace(e,n,t,r=0){let a=Y[Math.floor(Math.random()*Y.length)],C=this.distanceToMeters(n,t),w=C*a.pace,y=C*e-parseInt((r*60).toString()),b="",M="";if(w<y){let S=this.secondsToClock(y-w);b="At this pace, you would need a head start of ",S.hours!==0&&(b+=S.hours+" hour",S.hours>1&&(b+="s")),b+=" "+S.minutes+" minutes "+S.seconds+" seconds to outrun "+a.noun+" over this distance",Math.random()<.5?M=`/frontend_assets/images/animal_race/${a.name}-Chase.jpg`:M=`/frontend_assets/images/animal_race/${a.name}-Win.jpg`}else b="At your pace you could out run "+a.noun+" over this distance!",M=`/frontend_assets/images/animal_race/${a.name}-Win.jpg`;return{text:b,image:M,animal:a}}calculateSplits(e,n,t){let r=[],a=t==="km"?1e3:1609,C=Math.floor(n/a);if(C===0)return r;let w=e/(n/a);for(let y=1;y<=C;y++){let b=w*y,M=this.secondsToClock(b),S=this.secondsToClock(w);r.push({distance:y,time:`${M.hours}:${M.minutes.toString().padStart(2,"0")}:${M.seconds.toString().padStart(2,"0")}`,pace:`${S.minutes}:${S.seconds.toString().padStart(2,"0")}`})}return r}validateInputs(e){let n=0,t=this.clockToSeconds({hours:e.timeHours,minutes:e.timeMinutes,seconds:e.timeSeconds}),r=this.clockToSeconds({hours:e.paceHours,minutes:e.paceMinutes,seconds:e.paceSeconds});return e.distance!==0&&n++,r!==0&&n++,t!==0&&n++,n<2?{valid:!1,error:"You must enter at least 2 variables"}:n>2&&e.lastCalculatedVariable===""?{valid:!1,error:"Please enter no more than two variables"}:{valid:!0}}static \u0275fac=function(n){return new(n||c)};static \u0275prov=q({token:c,factory:c.\u0275fac,providedIn:"root"})};function ve(c,e){c&1&&(i(0,"div",10)(1,"p"),l(2,"No splits available. Please ensure you have calculated your pace first."),o()())}function Pe(c,e){if(c&1&&(i(0,"tr")(1,"td"),l(2),o(),i(3,"td"),l(4),o(),i(5,"td"),l(6),o()()),c&2){let n=e.$implicit,t=e.index;Q("even",t%2===0),s(2),T(n.distance),s(2),T(n.time),s(2),T(n.pace)}}function xe(c,e){if(c&1&&(i(0,"div",11)(1,"table",12)(2,"thead")(3,"tr")(4,"th"),l(5),o(),i(6,"th"),l(7,"Cumulative Time"),o(),i(8,"th"),l(9),o()()(),i(10,"tbody"),P(11,Pe,7,5,"tr",13),o()()()),c&2){let n=u(2);s(5),I("Distance (",n.initialUnit,")"),s(4),I("Pace (per ",n.initialUnit,")"),s(2),d("ngForOf",n.splits)}}function Oe(c,e){if(c&1){let n=X();i(0,"div",1),m("click",function(r){D(n);let a=u();return U(a.onBackdropClick(r))}),i(1,"div",2),m("click",function(r){return D(n),U(r.stopPropagation())}),i(2,"div",3)(3,"h2"),l(4,"Running Splits Calculator"),o(),i(5,"button",4),m("click",function(){D(n);let r=u();return U(r.onClose())}),l(6," \xD7 "),o()(),i(7,"div",5),P(8,ve,3,0,"div",6)(9,xe,12,3,"div",7),o(),i(10,"div",8)(11,"button",9),m("click",function(){D(n);let r=u();return U(r.onClose())}),l(12,"Close"),o()()()()}if(c&2){let n=u();s(8),d("ngIf",n.splits.length===0),s(),d("ngIf",n.splits.length>0)}}var N=class c{constructor(e){this.paceCalculatorService=e}isOpen=!1;initialTime;initialDistance;initialUnit;close=new k;splits=[];ngOnChanges(){this.isOpen&&this.initialTime&&this.initialDistance&&this.initialUnit&&this.calculateSplits()}onClose(){this.close.emit()}onBackdropClick(e){e.target.classList.contains("modal-overlay")&&this.onClose()}calculateSplits(){if(!this.initialTime||!this.initialDistance||!this.initialUnit){this.splits=[];return}let e=this.paceCalculatorService.distanceToMeters(this.initialDistance,this.initialUnit);this.splits=this.paceCalculatorService.calculateSplits(this.initialTime,e,this.initialUnit)}static \u0275fac=function(n){return new(n||c)(p(E))};static \u0275cmp=v({type:c,selectors:[["app-splits-modal"]],inputs:{isOpen:"isOpen",initialTime:"initialTime",initialDistance:"initialDistance",initialUnit:"initialUnit"},outputs:{close:"close"},features:[W],decls:1,vars:1,consts:[["class","modal-overlay",3,"click",4,"ngIf"],[1,"modal-overlay",3,"click"],[1,"modal-content",3,"click"],[1,"modal-header"],["aria-label","Close modal",1,"close-button",3,"click"],[1,"modal-body"],["class","no-splits",4,"ngIf"],["class","splits-table-wrapper",4,"ngIf"],[1,"modal-footer"],[1,"btn","btn-primary",3,"click"],[1,"n
1o-splits"],[1,"splits-table-wrapper"],[1,"splits-table"],[3,"even",4,"ngFor","ngForOf"]],template:function(n,t){n&1&&P(0,Oe,13,2,"div",0),n&2&&d("ngIf",t.isOpen)},dependencies:[O,$,R],styles:[".modal-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background-color:#0009;display:flex;align-items:center;justify-content:center;z-index:1000;padding:1rem;animation:_ngcontent-%COMP%_fadeIn .3s ease}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0}to{opacity:1}}.modal-content[_ngcontent-%COMP%]{background:#fff;border-radius:16px;box-shadow:0 8px 32px #0003;max-width:700px;width:100%;max-height:90vh;display:flex;flex-direction:column;animation:_ngcontent-%COMP%_slideUp .3s ease}@media (max-width: 600px){.modal-content[_ngcontent-%COMP%]{max-width:100%;max-height:100vh;border-radius:0}}@keyframes _ngcontent-%COMP%_slideUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.modal-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:1.5rem 2rem;border-bottom:1px solid #e0e0e0}.modal-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;color:#333;font-weight:600}@media (max-width: 600px){.modal-header[_ngcontent-%COMP%]{padding:1rem 1.5rem}.modal-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.25rem}}.close-button[_ngcontent-%COMP%]{background:none;border:none;font-size:2rem;color:#666;cursor:pointer;width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:all .2s ease;line-height:1;padding:0}.close-button[_ngcontent-%COMP%]:hover{background-color:#f0f0f0;color:#333}.close-button[_ngcontent-%COMP%]:focus{outline:none;box-shadow:0 0 0 3px #2c5aa033}.modal-body[_ngcontent-%COMP%]{padding:2rem;overflow-y:auto;flex:1}@media (max-width: 600px){.modal-body[_ngcontent-%COMP%]{padding:1.5rem}}.no-splits[_ngcontent-%COMP%]{text-align:center;padding:2rem;color:#666}.splits-table-wrapper[_ngcontent-%COMP%]{overflow-x:auto}.splits-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;font-size:1rem}.splits-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%]{background-color:#2c5aa0;color:#fff}.splits-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{padding:1rem;text-align:left;font-weight:600}@media (max-width: 600px){.splits-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{padding:.75rem .5rem;font-size:.9rem}}.splits-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]{border-bottom:1px solid #e0e0e0;transition:background-color .2s ease}.splits-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{background-color:#f5f5f5}.splits-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.even[_ngcontent-%COMP%]{background-color:#fafafa}.splits-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.even[_ngcontent-%COMP%]:hover{background-color:#f0f0f0}.splits-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child{border-bottom:none}.splits-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:1rem}@media (max-width: 600px){.splits-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:.75rem .5rem;font-size:.9rem}}.modal-footer[_ngcontent-%COMP%]{padding:1.5rem 2rem;border-top:1px solid #e0e0e0;display:flex;justify-content:flex-end}@media (max-width: 600px){.modal-footer[_ngcontent-%COMP%]{padding:1rem 1.5rem}}.btn[_ngcontent-%COMP%]{padding:.875rem 1.75rem;font-size:1rem;font-weight:600;border-radius:8px;border:none;cursor:pointer;transition:all .2s ease}.btn[_ngcontent-%COMP%]:focus{outline:none;box-shadow:0 0 0 3px #2c5aa033}@media (max-width: 600px){.btn[_ngcontent-%COMP%]{padding:.75rem 1.5rem}}.btn-primary[_ngcontent-%COMP%]{background-color:#2c5aa0;color:#fff}.btn-primary[_ngcontent-%COMP%]:hover{background-color:#234780;box-shadow:0 4px 12px #2c5aa04d}"]})};var ye=(c,e,n)=>({hours:c,minutes:e,seconds:n}),Ce=class c{constructor(e,n,t,r,a){this.paceCalculatorService=e;this.seoService=n;this.breakpointObserver=t;this.deviceContextService=r;this.platformId=a;this.isMobile=this.deviceContextService.isMobile()}
1onDestroySubject=new K;isMobile=!1;calculatorState={timeHours:0,timeMinutes:0,timeSeconds:0,distance:0,distanceUnit:"km",paceHours:0,paceMinutes:0,paceSeconds:0,paceUnit:"km",lastCalculatedVariable:""};raceResult=null;loadingAnimalResult=!1;showSplitsModal=!1;errorMessage="";ngOnInit(){this.setupResponsiveListeners(),this.setPageSEO()}ngOnDestroy(){this.onDestroySubject.next(),this.onDestroySubject.complete()}setupResponsiveListeners(){this.breakpointObserver.observe([B.Handset,B.Tablet]).pipe(G(this.onDestroySubject)).subscribe(e=>{this.isMobile=e.matches})}setPageSEO(){console.log("\u{1F3AF} [RunPaceCalculatorComponent] Setting SEO"),this.seoService.setTitle("Running Pace Calculator | Calculate Race Time, Pace & Distance"),this.seoService.updateTag("description","Free running pace calculator. Enter any two of time, distance, or pace to calculate the third. Includes fun animal race comparison! Perfect for marathon training and race planning."),this.seoService.setCanonicalUrl(null,"/run-pace-calculator"),console.log("\u{1F4DD} [RunPaceCalculatorComponent] SEO set")}onCalculate(e){console.log("\u{1F522} [RunPaceCalculatorComponent] Calculate clicked",e);let n=this.paceCalculatorService.validateInputs(e);if(!n.valid){this.errorMessage=n.error||"Invalid inputs";return}this.errorMessage="";let t=this.paceCalculatorService.generalCalculate(e);if(t.error){this.errorMessage=t.error;return}t.calculated&&(this.calculatorState=_({},t.state),this.raceTheAnimal(),console.log("\u2705 [RunPaceCalculatorComponent] Calculation completed",{calculated:t.calculated,state:this.calculatorState}))}onShowSplits(){if(console.log("\u{1F4CA} [RunPaceCalculatorComponent] Splits button clicked"),!this.paceCalculatorService.validateInputs(this.calculatorState).valid){this.errorMessage="Please calculate your pace first before viewing splits";return}this.calculatorState.lastCalculatedVariable===""&&this.onCalculate(this.calculatorState),this.showSplitsModal=!0}onReset(){console.log("\u{1F504} [RunPaceCalculatorComponent] Reset clicked"),this.calculatorState={timeHours:0,timeMinutes:0,timeSeconds:0,distance:0,distanceUnit:"km",paceHours:0,paceMinutes:0,paceSeconds:0,paceUnit:"km",lastCalculatedVariable:""},this.raceResult=null,this.loadingAnimalResult=!1,this.errorMessage=""}raceTheAnimal(){console.log("\u{1F405} [RunPaceCalculatorComponent] Racing the animal");let e={hours:this.calculatorState.paceHours,minutes:this.calculatorState.paceMinutes,seconds:this.calculatorState.paceSeconds}
1,n=this.paceCalculatorService.normalizePace(this.paceCalculatorService.clockToSeconds(e),this.calculatorState.paceUnit);n===0||this.calculatorState.distance===0||(F(this.platformId)&&window.innerWidth>1063&&(this.loadingAnimalResult=!0,setTimeout(()=>{this.loadingAnimalResult=!1},2e3)),setTimeout(()=>{this.raceResult=this.paceCalculatorService.calculateAnimalRace(n,this.calculatorState.distance,this.calculatorState.distanceUnit,0),console.log("\u{1F3C1} [RunPaceCalculatorComponent] Race result:",this.raceResult)},F(this.platformId)&&window.innerWidth>1063?2e3:0))}static \u0275fac=function(n){return new(n||c)(p(E),p(ue),p(te),p(ge),p(A))};static \u0275cmp=v({type:c,selectors:[["app-run-pace-calculator"]],decls:39,vars:12,consts:[[1,"page-container"],[1,"content-wrapper"],[1,"calculator-container"],[1,"calculator-header"],[1,"description"],[1,"calculator-layout"],[1,"calculator-section"],[3,"calculate","showSplits","reset","state","errorMessage"],[1,"results-section"],[3,"result","loading"],[1,"disclaimer-section"],[1,"disclaimer-content"],["href","/","routerLink","/"],["href","/contact","routerLink","/contact"],[3,"close","isOpen","initialTime","initialDistance","initialUnit"]],template:function(n,t){n&1&&(x(0,"app-header"),i(1,"div",0)(2,"div",1)(3,"div",2)(4,"div",3)(5,"h1"),l(6,"Calculate Your Running Pace"),o(),i(7,"p",4),l(8," Enter any two variables; pace, time, or distance into the calculator below. As a bonus we'll tell you if you would be able to beat a dangerous animal! "),o()(),i(9,"div",5)(10,"div",6)(11,"app-calculator-form",7),m("calculate",function(a){return t.onCalculate(a)})("showSplits",function(){return t.onShowSplits()})("reset",function(){return t.onReset()}),o()(),i(12,"div",8),x(13,"app-animal-race-result",9),o()(),i(14,"div",10)(15,"div",11)(16,"h3"),l(17,"Disclaimer"),o(),i(18,"p"),l(19," We have used a highly advanced formula that factors in the top speed, and recovery time of all the animals in our calculator to determine how fast they can cover longer distances. "),o(),i(20,"p"),l(21," In the wild there may be some variance in animal speed due to factors like weather, the time of year, and age. "),o(),i(22,"p"),l(23," In order to assure your safety, we highly recommend that if you choose to race dangerous animals you bring along at least one other person that runs slower than you. "),o(),i(24,"h3"),l(25,"Looking for a Run?"),o(),i(26,"p"),l(27," Ready to go find a race and see if you can hold your speed? Get a full calendar of runs and races in cities across North America at "),i(28,"a",12),l(29,"www.runguides.com"),o()(),i(30,"h3"),l(31,"Suggestions?"),o(),i(32,"p"),l(33," Want something added to this calculator? "),i(34,"a",13),l(35,"Contact Us"),o(),l(36," and let us know. "),o()()()()()(),i(37,"app-splits-modal",14),m("close",function(){return t.showSplitsModal=!1}),o(),x(38,"app-footer")),n&2&&(s(11),d("state",t.calculatorState)("errorMessage",t.errorMessage),s(2),d("result",t.raceResult)("loading",t.loadingAnimalResult),s(24),d("isOpen",t.showSplitsModal)("initialTime",t.paceCalculatorService.clockToSeconds(Z(8,ye,t.calculatorState.timeHours,t.calculatorState.timeMinutes,t.calculatorState.timeSeconds)))("initialDistance",t.calculatorState.distance)("initialUnit",t.calculatorState.distanceUnit==="m"?"km":t.calculatorState.distanceUnit))},dependencies:[O,ne,ee,j,H,N],styles:[".page-container[_ngcontent-%COMP%]{min-height:calc(100vh - 200px);padding:2rem 1rem;background:linear-gradient(135deg,#f5f7fa,#e8edf3)}@media (max-width: 600px){.page-container[_ngcontent-%COMP%]{padding:1rem .5rem}}.content-wrapper[_ngcontent-%COMP%]{max-width:1200px;margin:0 auto}.calculator-container[_ngcontent-%COMP%]{width:100%}.calculator-header[_ngcontent-%COMP%]{text-align:center;margin-bottom:3rem;padding:0 1rem}.calculator-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:2.5rem;font-weight:700;color:#2c5aa0;margin-bottom:1rem}@media (max-width: 600px){.calculator-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:1.875rem}}.calculator-header[_ngcontent-%COMP%] .description[_ngcontent-%COMP%]{font-size:1.125rem;line-height:1.6;color:#555;max-width:800px;margin:0 auto}@media (max-width: 600px){.calculator-header[_ngcontent-%COMP%] .description[_ngcontent-%COMP%]{font-size:1rem}}.calculator-layout[_ngcontent-%COMP%]{display:grid;gap:2rem;margin-bottom:3rem}@media (min-width: 1063px){.calculator-layout[_ngcontent-%COMP%]{grid-template-columns:1fr 1fr;gap:3rem}}@media (max-width: 600px){.calculator-section[_ngcontent-%COMP%], .results-section[_ngcontent-%COMP%]{margin:0}}.disclaimer-section[_ngcontent-%COMP%]{background:#fff;border-radius:12px;padding:2rem;box-shadow:0 2px 8px #0000001a;margin-top:3rem}@media (max-width: 600px){.disclaimer-section[_ngcontent-%COMP%]{padding:1.5rem;margin-top:2rem}}.disclaimer-content[_ngcontent-%COMP%]{max-width:800px;margin:0 auto}.disclaimer-content[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:1.25rem;font-weight:600;color:#333;margin-top:1.5rem;margin-bottom:.75rem}.disclaimer-content[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]:first-child{margin-top:0}@media (max-width: 600px){.disclaimer-content[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:1.125rem}}.disclaimer-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:1rem;line-height:1.7;color:#555;margin-bottom:1rem}.disclaimer-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]:last-child{margin-bottom:0}@media (max-width: 600px){.disclaimer-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:.9375rem}}.disclaimer-content[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#2c5aa0;text-decoration:none;font-weight:600;transition:color .2s ease}.disclaimer-content[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{color:#234780;text-decoration:underline}.disclaimer-content[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:focus{outline:none;text-decoration:underline;box-shadow:0 0 0 2px #2c5aa04d;border-radius:2px}"]})};export{Ce as RunPaceCalculatorComponent};
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.