1import{a as rt}from"./chunk-I2ABSAGV.js";import{f as it,g as nt}from"./chunk-R3RRODK4.js";import{f as tt,g as et}from"./chunk-MUO7Y74M.js";import{a as J}from"./chunk-SKRKE3LY.js";import"./chunk-7LOBEPCM.js";import{a as Z}from"./chunk-Z7CARDWI.js";import{a as X}from"./chunk-KGTPPFRX.js";import"./chunk-2FGQMKT5.js";import{Pa as q,hb as Q}from"./chunk-GNOMKHH2.js";import"./chunk-MIYW5325.js";import"./chunk-FJFH4XCE.js";import"./chunk-T52FVTMS.js";import"./chunk-4I6Y24VE.js";import"./chunk-VHBEXHUY.js";import{c as z}from"./chunk-IXNXTOPZ.js";import"./chunk-GGY6QDTV.js";import"./chunk-3WQEZLC2.js";import"./chunk-DB7AUQFG.js";import"./chunk-GLFTJW2T.js";import"./chunk-BHLMCFFK.js";import"./chunk-NP4PC25X.js";import"./chunk-D6IOGJMO.js";import{m as Y}from"./chunk-MKJMCBBH.js";import"./chunk-KKDZHWJ2.js";import"./chunk-RS4X3CMD.js";import"./chunk-7DHSGR33.js";import{g as H,i as K}from"./chunk-4KDBBJRG.js";import{f as j}from"./chunk-3SEIXLDK.js";import{c as $,d as W}from"./chunk-UIEAU6S2.js";import{j as N,k as A,l as F,v as U,x as P}from"./chunk-H3Y6JSWE.js";import{Hb as b,Oc as V,Pc as T,Q as k,Rb as l,Sb as r,Tb as n,Ub as y,Uc as c,Vc as p,Wc as L,Zc as G,bc as E,db as i,gc as g,ic as u,kd as B,mb as _,oa as f,pa as v,qa as S,ra as D,sb as O,wc as a,xc as w,yb as h,yc as m,zc as R}from"./chunk-AHLRJ2EW.js";import"./chunk-AMJ4GB2S.js";import"./chunk-OXDKANHF.js";import"./chunk-WGJEEJGF.js";import"./chunk-6ACFICIG.js";import"./chunk-K7BHMZHH.js";import"./chunk-FE7444LI.js";import"./chunk-XUHYVR5R.js";var ot=e=>({count:e}),at=(e,d)=>[e,"USD","symbol","1.0-0",d];function st(e,d){if(e&1&&y(0,"app-mech-mods-generating",9),e&2){let t=u();l("phraseKeys",t.loadingPhrases)("noteKey",t.autoRetryWait?"V2.MODS.GUIDE.LOADING_NOTE_LONG":"V2.MODS.GUIDE.LOADING_NOTE")}}function dt(e,d){if(e&1){let t=E();r(0,"div",10)(1,"p",11),a(2),c(3,"translate"),n(),r(4,"p",12),a(5),c(6,"translate"),n(),r(7,"button",13),g("click",function(){f(t);let o=u();return v(o.goToGarage())}),a(8),c(9,"translate"),n()()}e&2&&(i(2),w(p(3,3,"V2.MODS.GUIDE.NO_VEHICLE_TITLE")),i(3),w(p(6,5,"V2.MODS.GUIDE.NO_VEHICLE_DESC")),i(3),m(" ",p(9,7,"V2.MODS.GUIDE.NO_VEHICLE_CTA")," "))}function ct(e,d){if(e&1){let t=E();r(0,"div",10)(1,"p",12),a(2),c(3,"translate"),n(),r(4,"button",13),g("click",function(){f(t);let o=u();return v(o.retry())}),a(5),c(6,"translate"),n()()}if(e&2){let t=u();i(2),m(" ",p(3,2,t.isNetworkError?"V2.MODS.GUIDE.ERROR_NETWORK":t.stillGenerating?"V2.MODS.GUIDE.ERROR_STILL_GENERATING":"V2.MODS.GUIDE.ERROR_LOAD_FAILED")," "),i(3),m(" ",p(6,4,"V2.COMMON.RETRY")," ")}}function lt(e,d){if(e&1&&(r(0,"li",27),S(),r(1,"svg",28),y(2,"path",29),n(),a(3),n()),e&2){let t=d.$implicit;i(3),m(" ",t," ")}}function pt(e,d){if(e&1&&(r(0,"div")(1,"h2",24),a(2),c(3,"translate"),n(),r(4,"ul",25),h(5,lt,4,1,"li",26),n()()),e&2){let t=u(2);i(2),w(p(3,3,"V2.MODS.GUIDE.TOOLS_TITLE")),i(3),l("ngForOf",t.guide.toolsNeeded)("ngForTrackBy",t.trackByToolName)}}function mt(e,d){if(e&1){let t=E();r(0,"button",37),g("click",function(){f(t);let o=u().$implicit,x=u(3);return v(x.buyPart(o))}),a(1),c(2,"translate"),n()}e&2&&(i(),m(" ",p(2,1,"V2.MODS.GUIDE.BUY_ON_AMAZON")," "))}function ut(e,d){if(e&1){let t=E();r(0,"div",32)(1,"span",33),a(2),n(),r(3,"div",34),h(4,mt,3,3,"button",35),r(5,"button",36),g("click",function(){let o=f(t).$implicit,x=u(3);return v(x.findPart(o))}),a(6),c(7,"translate"),n()()()}if(e&2){let t=d.$implicit;i(2),w(t.name),i(2),l("ngIf",t.amazonUrl),i(2),m(" ",p(7,3,"V2.MODS.GUIDE.FIND_PART")," ")}}function wt(e,d){if(e&1&&(r(0,"div")(1,"h2",24),a(2),c(3,"translate"),n(),r(4,"div",30),h(5,ut,8,5,"div",31),n()()),e&2){let t=u(2);i(2),w(p(3,3,"V2.MODS.GUIDE.PARTS_TITLE")),i(3),l("ngForOf",t.guide.partsNeeded)("ngForTrackBy",t.trackByPartName)}}function ht(e,d){if(e&1&&(r(0,"div",46),S(),r(1,"svg",47),y(2,"path",48),n(),D(),r(3,"span"),a(4),n()()),e&2){let t=u().$implicit;i(4),w(t.warning)}}function xt(e,d){if(e&1&&(r(0,"div",40)(1,"div",41),a(2),n(),r(3,"div",42)(4,"p",43),a(5),n(),h(6,ht,5,1,"div",44),r(7,"p",45),a(8),n()()()),e&2){let t=d.$implicit;i(2),m(" ",t.order," "),i(3),w(t.title),i(),l("ngIf",t.warning),i(2),w(t.detail)}}function _t(e,d){if(e&1&&(r(0,"div")(1,"h2",24),a(2),c(3,"translate"),n(),r(4,"div",38),h(5,xt,9,4,"div",39),n()()),e&2){let t=u(2);
1i(2),w(p(3,3,"V2.MODS.GUIDE.STEPS_TITLE")),i(3),l("ngForOf",t.guide.steps)("ngForTrackBy",t.trackByStepOrder)}}function gt(e,d){if(e&1&&(r(0,"li",50)(1,"span",51),a(2," \u{1F4A1} "),n(),a(3),n()),e&2){let t=d.$implicit;i(3),m(" ",t," ")}}function ft(e,d){if(e&1&&(r(0,"div")(1,"h2",24),a(2),c(3,"translate"),n(),r(4,"ul",25),h(5,gt,4,1,"li",49),n()()),e&2){let t=u(2);i(2),w(p(3,3,"V2.MODS.GUIDE.TIPS_TITLE")),i(3),l("ngForOf",t.guide.tips)("ngForTrackBy",t.trackByIndex)}}function vt(e,d){if(e&1&&(r(0,"li",50)(1,"span",52),a(2," \u26A0\uFE0F "),n(),a(3),n()),e&2){let t=d.$implicit;i(3),m(" ",t," ")}}function yt(e,d){if(e&1&&(r(0,"div")(1,"h2",24),a(2),c(3,"translate"),n(),r(4,"ul",25),h(5,vt,4,1,"li",49),n()()),e&2){let t=u(2);i(2),w(p(3,3,"V2.MODS.GUIDE.RISKS_TITLE")),i(3),l("ngForOf",t.guide.risks)("ngForTrackBy",t.trackByIndex)}}function Et(e,d){if(e&1&&(r(0,"div",53)(1,"p",54),a(2),c(3,"translate"),n(),a(4),n()),e&2){let t=u(2);i(2),m(" ",p(3,2,"V2.MODS.GUIDE.LEGAL_NOTE_TITLE")," "),i(2),m(" ",t.guide.legalNote," ")}}function It(e,d){if(e&1&&(r(0,"div",14)(1,"p",15),a(2),n(),r(3,"div",16)(4,"div",17)(5,"p",18),a(6),c(7,"translate"),n(),r(8,"span",19),a(9),c(10,"translate"),n()(),r(11,"div",17)(12,"p",18),a(13),c(14,"translate"),n(),r(15,"p",20),a(16),c(17,"translate"),n()(),r(18,"div",17)(19,"p",18),a(20),c(21,"translate"),n(),r(22,"p",20),a(23),c(24,"currency"),c(25,"currency"),n()()(),h(26,pt,6,5,"div",21)(27,wt,6,5,"div",21)(28,_t,6,5,"div",21)(29,ft,6,5,"div",21)(30,yt,6,5,"div",21)(31,Et,5,4,"div",22),r(32,"p",23),a(33),c(34,"translate"),n()()),e&2){let t=u();i(2),w(t.guide.summary),i(4),m(" ",p(7,16,"V2.MODS.GUIDE.DIFFICULTY_LABEL")," "),i(2),l("ngClass",t.difficultyBadgeClass(t.guide.difficulty)),i(),m(" ",p(10,18,t.difficultyLabelKey(t.guide.difficulty))," "),i(4),m(" ",p(14,20,"V2.MODS.GUIDE.TIME_LABEL")," "),i(3),m(" ",L(17,22,"V2.MODS.GUIDE.HOURS_ABBR",V(41,ot,t.guide.estTimeHours))," "),i(4),m(" ",p(21,25,"V2.MODS.GUIDE.COST_LABEL")," "),i(3),R(" ",G(24,27,T(43,at,t.guide.estCostMinUsd,t.currencyLocale))," \u2013 ",G(25,33,T(46,at,t.guide.estCostMaxUsd,t.currencyLocale))," "),i(3),l("ngIf",t.guide.toolsNeeded.length>0),i(),l("ngIf",t.guide.partsNeeded.length>0),i(),l("ngIf",t.guide.steps.length>0),i(),l("ngIf",t.guide.tips.length>0),i(),l("ngIf",t.guide.risks.length>0),i(),l("ngIf",t.guide.legalNote),i(2),m(" ",p(34,39,"V2.MODS.GUIDE.DISCLAIMER")," ")}}var Ht=(()=>{class e{static{this.MAX_AUTO_RETRIES=3}constructor(t,s,o,x,I,M,C){this.route=t,this.router=s,this.store=o,this.activeVehicle=x,this.analytics=I,this.connectivity=M,this.cdr=C,this.modSlug="",this.modName="",this.guide=null,this.isLoading=!0,this.loadError=!1,this.stillGenerating=!1,this.autoRetryWait=!1,this.noVehicle=!1,this.isNetworkError=!1,this.loadingPhrases=["V2.MODS.GUIDE.LOADING_PHRASE_1","V2.MODS.GUIDE.LOADING_PHRASE_2","V2.MODS.GUIDE.LOADING_PHRASE_3","V2.MODS.GUIDE.LOADING_PHRASE_4","V2.MODS.GUIDE.LOADING_PHRASE_5"],this.autoRetryCount=0,this.autoRetryTimer=null,this.autoRetriedOnReconnect=!1,this.subs=[]}get currencyLocale(){return z()}ngOnInit(){if(this.modSlug=this.route.snapshot.paramMap.get("modSlug")??"",this.modName=this.route.snapshot.queryParamMap.get("modName")??this.modSlug,!this.modSlug){this.router.navigate(["/v2/mech-mods"]);return}this.subs.push(this.store.select(et.guide).subscribe(t=>{this.guide=t,this.cdr.markForCheck()})),this.subs.push(this.connectivity.online$.pipe(k()).subscribe(([t,s])=>{!t&&s&&this.maybeAutoRetryOnReconnect()})),this.loadGuide()}ngOnDestroy(){this.subs.forEach(t=>t.unsubscribe()),this.clearAutoRetryTimer()}loadGuide(){this.autoRetryCount=0,this.clearAutoRetryTimer();let t=this.activeVehicle.getActiveCar();if(!t){this.noVehicle=!1,this.isLoading=!0,this.loadError=!1,this.cdr.markForCheck(),this.store.dispatch(new q).subscribe({next:()=>{let s=this.activeVehicle.getActiveCar();s?this.fetchGuide(s.id):(this.noVehicle=!0,this.isLoading=!1,this.cdr.markForCheck())},error:()=>{this.isLoading=!1,this.loadError=!0,this.cdr.markForCheck()}});return}this.fetchGuide(t.id)}fetchGuide(t){this.noVehicle=!1,this.isLoading=!0,this.loadError=!1,this.stillGenerating=!1,this.isNetworkError=!1,this.cdr.markForCheck(),this.store.dispatch(new tt({carId:t,modSlug:this.modSlug,modName:this.modName})).subscribe({next:()=>{this.isLoading=!1,this.loadError=!1,this.autoRetryWait=!1,this.autoRetryCount=0,this.analytics.logModsGuideViewed(this.modSlug),this.cdr.markForCheck()},error:s=>{let o=s instanceof j?s:null,x=o?.error,I=x?.code==="GenerationTimeout",M=o?.status===0;if(I&&this.autoRetryCount<e.MAX_AUTO_RETRIES){this.autoRetryCount++,this.autoRetryWait=!0;let C=(x?.retryAfterSeconds??30)*1e3;this.autoRetryTimer=setTimeout(()=>this.fetchGuide(t),C),this.cdr.markForCheck();return}this.isLoading=!1,this.loadError=!0,this.autoRetryWait=!1,this.isNetworkError=M,this.stillGenerating=I,this.cdr.markForCheck()}})}clearAutoRetryTimer(){this.autoRetryTimer!==null&&(clearTimeout(this.autoRetryTimer),this.autoRetryTimer=null),this.autoRetryWait=!1}retry(){this.autoRetriedOnReconnect=!1,this.loadGuide()}maybeAutoRetryOnReconnect(){!this.loadError||!this.isNetworkError||this.noVehicle||this.autoRetriedOnReconnect||(this.autoRetriedOnReconnect=!0,this.loadGuide())}goToGarage(){this.router.navigate(["/v2/my-garage"])}goBack(){this.router.navigate(["/v2/mech-mods"])}buyPart(t){this.analytics.logModsModAction("buy","guide-part",this.modSlug,t.searchQuery||t.name),J(t.amazonUrl)}findPart(t){this.analytics.logModsPartsClick(this.modSlug,t.searchQuery),this.router.navigate(["/v2/parts-center"],{queryParams:{q:t.searchQuery}})}difficultyLabelKey(t){return it[t]??t}difficultyBadgeClass(t){return nt(t)}trackByToolName(t,s){return s}trackByPartName(t,s){return s.name}trackByStepOrder(t,s){return s.order}trackByIndex(t){return t}static{this.\u0275fac=function(s){return new(s||e)(_(H),_(K),_(Y),_(X),_(Q),_(Z),_(B))}}static{this.\u0275cmp=O({type:e,selectors:[["app-mech-mods-guide"]],decls:12,vars:8,consts:[[1,"tw-pb-8"],[1,"tw-flex","tw-items-center","tw-gap-3","tw-mb-6","tw-px-1"],["type","button",1,"tw-w-9","tw-h-9","tw-rounded-xl","tw-bg-mech-surface-2","tw-flex","tw-items-center","tw-justify-center","tw-border-none","tw-cursor-pointer","hover:tw-bg-mech-border","t
1w-transition-colors",3,"click"],["aria-hidden","true","fill","none","stroke","currentColor","viewBox","0 0 24 24","stroke-width","2",1,"tw-w-4","tw-h-4","tw-text-mech-text-secondary"],["stroke-linecap","round","stroke-linejoin","round","d","M15.75 19.5L8.25 12l7.5-7.5"],[1,"tw-text-xl","md:tw-text-2xl","tw-font-[800]","tw-text-mech-text","tw-tracking-tight","tw-truncate"],["emoji","\u{1F527}","titleKey","V2.MODS.GUIDE.LOADING_TITLE",3,"phraseKeys","noteKey",4,"ngIf"],["class","mech-section-card tw-p-6 tw-text-center",4,"ngIf"],["class","tw-space-y-6",4,"ngIf"],["emoji","\u{1F527}","titleKey","V2.MODS.GUIDE.LOADING_TITLE",3,"phraseKeys","noteKey"],[1,"mech-section-card","tw-p-6","tw-text-center"],[1,"tw-text-sm","tw-font-semibold","tw-text-mech-text","tw-mb-1"],[1,"tw-text-sm","tw-text-mech-text-muted","tw-mb-4"],["type","button",1,"mech-btn-primary",3,"click"],[1,"tw-space-y-6"],[1,"tw-text-sm","tw-text-mech-text-muted","tw-leading-relaxed"],[1,"tw-grid","tw-grid-cols-3","tw-gap-3"],[1,"mech-section-card","tw-p-3","tw-text-center"],[1,"tw-text-[9px]","tw-font-bold","tw-text-mech-text-muted","tw-uppercase","tw-tracking-widest","tw-mb-1"],[1,"tw-text-[11px]","tw-font-bold","tw-uppercase","tw-tracking-wider","tw-px-2","tw-py-0.5","tw-rounded-full",3,"ngClass"],[1,"tw-text-sm","tw-font-bold","tw-text-mech-text","tw-m-0"],[4,"ngIf"],["class","tw-bg-mech-surface-2 tw-text-mech-text-secondary tw-rounded-2xl tw-p-4 tw-text-xs tw-leading-relaxed",4,"ngIf"],[1,"tw-text-[11px]","tw-text-mech-text-faint","tw-text-center","tw-pt-2"],[1,"tw-text-sm","tw-font-bold","tw-text-mech-text","tw-mb-3"],[1,"tw-space-y-2","tw-list-none","tw-p-0","tw-m-0"],["class","tw-flex tw-items-center tw-gap-2.5 tw-text-sm tw-text-mech-text",4,"ngFor","ngForOf","ngForTrackBy"],[1,"tw-flex","tw-items-center","tw-gap-2.5","tw-text-sm","tw-text-mech-text"],["aria-hidden","true","fill","none","stroke","currentColor","viewBox","0 0 24 24","stroke-width","2.5",1,"tw-w-4","tw-h-4","tw-text-mech-primary","tw-shrink-0"],["stroke-linecap","round","stroke-linejoin","round","d","M5 13l4 4L19 7"],[1,"tw-space-y-2"],["class","mech-section-card tw-p-3.5 tw-flex tw-flex-wrap tw-items-center tw-justify-between tw-gap-x-3 tw-gap-y-2",4,"ngFor","ngForOf","ngForTrackBy"],[1,"mech-section-card","tw-p-3.5","tw-flex","tw-flex-wrap","tw-items-center","tw-justify-between","tw-gap-x-3","tw-gap-y-2"],[1,"tw-text-sm","tw-font-semibold","tw-text-mech-text","tw-min-w-0","tw-truncate"],[1,"tw-flex","tw-items-center","tw-gap-2","tw-shrink-0","tw-ml-auto"],["type","button","class","mech-btn-primary tw-text-xs tw-py-1.5 tw-px-3",3,"click",4,"ngIf"],["type","button",1,"mech-btn-secondary","tw-text-xs","tw-py-1.5","tw-px-3",3,"click"],["type","button",1,"mech-btn-primary","tw-text-xs","tw-py-1.5","tw-px-3",3,"click"],[1,"tw-space-y-4"],["class","tw-flex tw-gap-3",4,"ngFor","ngForOf","ngForTrackBy"],[1,"tw-flex","tw-gap-3"],[1,"tw-w-7","tw-h-7","tw-rounded-full","tw-bg-mech-primary/10","tw-text-mech-primary","tw-text-xs","tw-font-bold","tw-flex","tw-items-center","tw-justify-center","tw-shrink-0","tw-mt-0.5"],[1,"tw-flex-1","tw-min-w-0"],[1,"tw-text-sm","tw-font-bold","tw-text-mech-text","tw-m-0","tw-mb-1"],["class","tw-flex tw-items-start tw-gap-2 tw-bg-amber-100 tw-text-amber-800 tw-rounded-xl tw-px-3 tw-py-2 tw-mb-2 tw-text-xs tw-font-medium",4,"ngIf"],[1,"tw-text-sm","tw-text-mech-text-secondary","tw-leading-relaxed","tw-m-0"],[1,"tw-flex","tw-items-start","tw-gap-2","tw-bg-amber-100","tw-text-amber-800","tw-rounded-xl","tw-px-3","tw-py-2","tw-mb-2","tw-text-xs","tw-font-medium"],["aria-hidden","true","fill","none","stroke","currentColor","viewBox","0 0 24 24","stroke-width","2",1,"tw-w-4","tw-h-4","tw-shrink-0","tw-mt-0.5"],["stroke-linecap","round","stroke-linejoin","round","d","M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z"],["class","tw-flex tw-items-start tw-gap-2.5 tw-text-sm tw-text-mech-text-secondary",4,"ngFor","ngForOf","ngForTrackBy"],[1,"tw-flex","tw-items-start","tw-gap-2.5","tw-text-sm","tw-text-mech-text-secondary"],["aria-hidden","true",1,"tw-text-mech-primary","tw-shrink-0"],["aria-hidden","true",1,"tw-text-[var(--color-danger)]","tw-shrink-0"],[1,"tw-bg-mech-surface-2","tw-text-mech-text-secondary","tw-rounded-2xl","tw-p-4","tw-text-xs","tw-leading-relaxed"],[1,"tw-font-bold","tw-text-mech-text","tw-uppercase","tw-tracking-wide","tw-text-[10px]","tw-mb-1.5","tw-m-0"]],template:function(s,o){s&1&&(r(0,"div",0)(1,"div",1)(2,"button",2),c(3,"translate"),g("click",function(){return o.goBack()}),S(),r(4,"svg",3),y(5,"path",4),n()(),D(),r(6,"h1",5),a(7),n()(),h(8,st,1,2,"app-mech-mods-generating",6)(9,dt,10,9,"div",7)(10,ct,7,6,"div",7)(11,It,35,49,"div",8),n()),s&2&&(i(2),b("aria-label",p(3,6,"V2.COMMON.BACK")),i(5),m(" ",o.modName||((o.guide==null?null:o.guide.title)??"")," "),i(),l("ngIf",o.isLoading),i(),l("ngIf",o.noVehicle),i(),l("ngIf",!o.isLoading&&o.loadError&&!o.noVehicle),i(),l("ngIf",!o.isLoading&&!o.loadError&&o.guide))},dependencies:[P,N,A,F,W,rt,U,$],styles:['@charset "UTF-8";[_nghost-%COMP%]{display:block}'],changeDetection:0})}}return e})();export{Ht as MechModsGuideComponent};
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.