PageSourceSearch

https://prod.mechai.app/chunk-PQRNZQSD.js

js mechai.app collected 2026-10-02 15:23:44 UTC 30,126 bytes, 1 lines download raw bytes

1import{b as pt,c as wt,d as G,e as N,f as U,g as K}from"./chunk-R3RRODK4.js";import{b as mt,c as j,d as $,g as y}from"./chunk-MUO7Y74M.js";import{a as dt}from"./chunk-Q3U3JSJ2.js";import{a as lt}from"./chunk-SKRKE3LY.js";import"./chunk-7LOBEPCM.js";import{a as ct}from"./chunk-KGTPPFRX.js";import{ja as st}from"./chunk-VRKJBTE4.js";import{j as at}from"./chunk-ZT7BF6R4.js";import{hb as P,l as nt,m as rt,o as ot}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 F}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 it}from"./chunk-MKJMCBBH.js";import"./chunk-KKDZHWJ2.js";import"./chunk-RS4X3CMD.js";import"./chunk-7DHSGR33.js";import{i as et}from"./chunk-4KDBBJRG.js";import"./chunk-3SEIXLDK.js";import{c as A,d as B}from"./chunk-UIEAU6S2.js";import{j as R,k as tt,l as V,v as H,x as L}from"./chunk-H3Y6JSWE.js";import{$a as q,Hb as k,Nc as Y,Oc as Z,Pc as S,Rb as p,Sb as n,Tb as r,Ub as g,Uc as c,Vc as l,Wc as W,Yb as z,Zb as X,Zc as T,_c as J,bc as M,db as i,gc as x,ic as w,kd as D,mb as _,oa as v,pa as b,qa as E,ra as C,sb as I,sc as Q,wc as a,xc as h,yb as u,yc as d,zc as O}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 ut=(e,m)=>[e,"USD","symbol","1.0-0",m];function St(e,m){if(e&1){let t=M();n(0,"button",15),x("click",function(){v(t);let o=w();return b(o.onShop())}),n(1,"span",12),a(2,"\u{1F6D2}"),r(),a(3),c(4,"translate"),r()}e&2&&(i(3),d(" ",l(4,1,"V2.MODS.SHEET.SHOP_CTA")," "))}function Ct(e,m){if(e&1&&(n(0,"span",20)(1,"span",21),a(2),c(3,"translate"),r(),n(4,"span",24),a(5),r()()),e&2){let t=w(2);i(2),d(" ",l(3,2,"V2.MODS.SHEET.POWER_GAIN")," "),i(3),h(t.data.mod.powerGain)}}function Tt(e,m){if(e&1&&(n(0,"div",16)(1,"p",17),a(2),r(),n(3,"div")(4,"p",18),a(5),c(6,"translate"),r(),n(7,"p",17),a(8),r()(),n(9,"div",19)(10,"span",20)(11,"span",21),a(12),c(13,"translate"),r(),n(14,"span",22),a(15),c(16,"currency"),c(17,"currency"),r()(),u(18,Ct,6,4,"span",23),r()()),e&2){let t=w();i(2),h(t.data.mod.description),i(3),d(" ",l(6,7,"V2.MODS.SHEET.WHY_POPULAR")," "),i(3),h(t.data.mod.whyPopular),i(4),d(" ",l(13,9,"V2.MODS.SHEET.EST_COST")," "),i(3),O(" ",T(16,11,S(23,ut,t.data.mod.estCostMinUsd,t.currencyLocale))," \u2013 ",T(17,17,S(26,ut,t.data.mod.estCostMaxUsd,t.currencyLocale))," "),i(3),p("ngIf",t.data.mod.powerGain)}}var ht=(()=>{class e{constructor(t,s,o,f){this.dialogRef=t,this.analytics=s,this.cdr=o,this.data=f,this.aboutOpen=!1,this.infoLogged=!1}get currencyLocale(){return F()}get categoryEmoji(){return N(this.data.mod.category)}get categoryLabelKey(){return G[this.data.mod.category]??this.data.mod.category}get difficultyLabelKey(){return U[this.data.mod.difficulty]??this.data.mod.difficulty}get difficultyBadgeClass(){return K(this.data.mod.difficulty)}onShop(){this.analytics.logModsModAction("buy","mod-card",this.data.mod.slug,this.data.mod.name),lt(this.data.mod.amazonUrl)}onToggleAbout(){this.aboutOpen=!this.aboutOpen,this.aboutOpen&&!this.infoLogged&&(this.infoLogged=!0,this.analytics.logModsModAction("info","mod-card",this.data.mod.slug,this.data.mod.name)),this.cdr.markForCheck()}onInstallGuide(){this.analytics.logModsModAction("guide","mod-card",this.data.mod.slug,this.data.mod.name),this.dialogRef.close("guide")}onClose(){this.dialogRef.close()}static{this.\u0275fac=function(s){return new(s||e)(_(nt),_(P),_(D),_(rt))}}static{this.\u0275cmp=I({type:e,selectors:[["app-mech-mods-action-sheet"]],decls:31,vars:21,consts:[[1,"mods-action-sheet","tw-w-full","tw-max-w-lg","tw-bg-mech-surface","tw-rounded-t-[28px]","tw-p-6","tw-pb-10","tw-border-t","tw-border-mech-border","tw-shadow-dark-card"],[1,"tw-w-12","tw-h-1","tw-rounded-full","tw-bg-mech-border-strong","tw-mx-auto","tw-mb-5"],[1,"tw-flex","tw-items-start","tw-gap-3","tw-mb-5"],["aria-hidden","true",1,"tw-text-3xl","tw-shrink-0","tw-leading-none"],[1,"tw-flex-1","tw-min-w-0"],["id","mods-action-sheet-title",1,"tw-text-lg","tw-font-[800]","tw-text-mech-text","tw-tracking-tight","tw-m-0","tw-mb-1.5"],[1,"tw-flex","tw-flex-wrap","tw-items-center","tw-gap-2"],[1,"tw-text-[10px]","tw-font-bold","tw-uppercase","tw-tracking-wider","tw-text-mech-text-secondary","tw-bg-mech-surface-2","tw-px-2","tw-py-0.5","tw-rounded-full"],[1,"tw-text-[10px]","tw-font-bold","tw-uppercase","tw-tracking-wider","tw-px-2","tw-py-0.5","tw-rounded-full",3,"ngClass"],[1,"tw-flex","tw-flex-col","tw-gap-2.5"],["type","button","class","tw-w-full tw-flex tw-items-center tw-justify-center tw-gap-2 tw-bg-mech-primary hover:tw-bg-mech-primary-hover tw-text-white tw-font-bold tw-text-sm tw-py-4 tw-rounded-2xl tw-border-none tw-cursor-pointer tw-transition-colors tw-shadow-primary","style","font-family: 'Inter', sans-serif",3,"click",4,"ngIf"],["type","button",1,"tw-w-full","tw-flex","tw-items-center","tw-justify-center","tw-gap-2","tw-bg-mech-surface-2","hover:tw-bg-mech-primary-50","tw-text-mech-text","tw-font-bold","tw-text-sm","tw-py-4","tw-rounded-2xl","tw-border","t
1w-border-mech-border-strong","hover:tw-border-mech-primary","tw-cursor-pointer","tw-transition-colors",2,"font-family","'Inter', sans-serif",3,"click"],["aria-hidden","true"],["class","tw-bg-mech-surface-2 tw-rounded-2xl tw-p-4 tw-space-y-3",4,"ngIf"],["type","button",1,"tw-w-full","tw-bg-transparent","tw-border-none","tw-text-sm","tw-text-mech-text-muted","hover:tw-text-mech-text-secondary","tw-cursor-pointer","tw-py-2","tw-transition-colors",2,"font-family","'Inter', sans-serif",3,"click"],["type","button",1,"tw-w-full","tw-flex","tw-items-center","tw-justify-center","tw-gap-2","tw-bg-mech-primary","hover:tw-bg-mech-primary-hover","tw-text-white","tw-font-bold","tw-text-sm","tw-py-4","tw-rounded-2xl","tw-border-none","tw-cursor-pointer","tw-transition-colors","tw-shadow-primary",2,"font-family","'Inter', sans-serif",3,"click"],[1,"tw-bg-mech-surface-2","tw-rounded-2xl","tw-p-4","tw-space-y-3"],[1,"tw-text-sm","tw-text-mech-text-secondary","tw-leading-relaxed","tw-m-0"],[1,"tw-text-[10px]","tw-font-bold","tw-text-mech-text-muted","tw-uppercase","tw-tracking-widest","tw-m-0","tw-mb-1"],[1,"tw-flex","tw-flex-wrap","tw-items-center","tw-gap-x-4","tw-gap-y-1"],[1,"tw-text-xs","tw-text-mech-text-secondary"],[1,"tw-font-bold","tw-text-mech-text-muted","tw-uppercase","tw-tracking-widest","tw-text-[10px]"],[1,"tw-font-semibold","tw-ml-1.5"],["class","tw-text-xs tw-text-mech-text-secondary",4,"ngIf"],[1,"tw-font-semibold","tw-text-mech-primary","tw-ml-1.5"]],template:function(s,o){s&1&&(n(0,"div",0),g(1,"div",1),n(2,"div",2)(3,"span",3),a(4),r(),n(5,"div",4)(6,"h2",5),a(7),r(),n(8,"div",6)(9,"span",7),a(10),c(11,"translate"),r(),n(12,"span",8),a(13),c(14,"translate"),r()()()(),n(15,"div",9),u(16,St,5,3,"button",10),n(17,"button",11),x("click",function(){return o.onToggleAbout()}),n(18,"span",12),a(19,"\u2139\uFE0F"),r(),a(20),c(21,"translate"),r(),u(22,Tt,19,29,"div",13),n(23,"button",11),x("click",function(){return o.onInstallGuide()}),n(24,"span",12),a(25,"\u{1F527}"),r(),a(26),c(27,"translate"),r(),n(28,"button",14),x("click",function(){return o.onClose()}),a(29),c(30,"translate"),r()()()),s&2&&(i(4),d(" ",o.categoryEmoji," "),i(3),d(" ",o.data.mod.name," "),i(3),d(" ",l(11,11,o.categoryLabelKey)," "),i(2),p("ngClass",o.difficultyBadgeClass),i(),d(" ",l(14,13,o.difficultyLabelKey)," "),i(3),p("ngIf",o.data.mod.amazonUrl),i(),k("aria-expanded",o.aboutOpen),i(3),d(" ",l(21,15,"V2.MODS.SHEET.ABOUT_CTA")," "),i(2),p("ngIf",o.aboutOpen),i(4),d(" ",l(27,17,"V2.MODS.SHEET.GUIDE_CTA")," "),i(3),d(" ",l(30,19,"V2.COMMON.CLOSE")," "))},dependencies:[L,R,V,B,H,A],styles:[".mods-action-sheet[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_mods-action-sheet-slide-up .3s cubic-bezier(.4,0,.2,1) forwards}@keyframes _ngcontent-%COMP%_mods-action-sheet-slide-up{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.mods-action-sheet[_ngcontent-%COMP%]{animation:none}}"],changeDetection:0})}}return e})();var kt=(e,m)=>({remaining:e,limit:m}),It=e=>({vehicle:e}),ft=()=>[1,2,3],xt=(e,m)=>[e,"USD","symbol","1.0-0",m];function Ot(e,m){if(e&1&&(n(0,"div",34),a(1),c(2,"translate"),r()),e&2){let t=w();i(),d(" ",W(2,1,"V2.MODS.HOME.QUOTA_CHIP",S(4,kt,t.quotaRemaining,t.quotaLimit))," ")}}function Dt(e,m){e&1&&(n(0,"p",35),a(1),c(2,"translate"),r()),e&2&&(i(),d(" ",l(2,1,"V2.MODS.HOME.FREE_HINT")," "))}function Rt(e,m){if(e&1&&(z(0),a(1),c(2,"translate"),X()),e&2){let t=w();i(),d(" ",W(2,1,"V2.MODS.HOME.RECOMMENDED_TITLE",Z(4,It,t.vehicleLabel))," ")}}function Vt(e,m){e&1&&(a(0),c(1,"translate")),e&2&&h(l(1,1,"V2.MODS.HOME.RECOMMENDED_TITLE_GENERIC"))}function Ht(e,m){if(e&1){let t=M();n(0,"div",36)(1,"div",37),E(),n(2,"svg",38),g(3,"path",39),r()(),C(),n(4,"div",40)(5,"p",41),a(6),c(7,"translate"),r(),n(8,"p",42),a(9),c(10,"translate"),r()(),n(11,"button",43),x("click",function(){v(t);let o=w();return b(o.goToGarage())}),a(12),c(13,"translate"),r()()}e&2&&(i(6),h(l(7,3,"V2.MODS.HOME.RECOMMENDED_EMPTY_TITLE")),i(3),h(l(10,5,"V2.MODS.HOME.RECOMMENDED_EMPTY_BODY")),i(3),d(" ",l(13,7,"V2.MODS.HOME.RECOMMENDED_EMPTY_CTA")," "))}function Lt(e,m){e&1&&(n(0,"div",50),g(1,"div",51),n(2,"div",52),g(3,"div",53)(4,"div",54),r()())}
1function At(e,m){if(e&1&&(n(0,"div",44)(1,"div",45),E(),n(2,"svg",46),g(3,"circle",47)(4,"path",48),r(),C(),n(5,"div",40)(6,"p",41),a(7),c(8,"translate"),r(),n(9,"p",42),a(10),c(11,"translate"),r()()(),u(12,Lt,5,0,"div",49),r()),e&2){let t=w();i(7),d(" ",l(8,3,t.recommendedAutoWait?"V2.MODS.HOME.RECOMMENDED_LOADING_ALMOST":"V2.MODS.HOME.RECOMMENDED_LOADING")," "),i(3),d(" ",l(11,5,"V2.MODS.HOME.RECOMMENDED_LOADING_NOTE")," "),i(2),p("ngForOf",Y(7,ft))}}function Bt(e,m){if(e&1){let t=M();n(0,"div",55)(1,"p",56),a(2),c(3,"translate"),r(),n(4,"button",57),x("click",function(){v(t);let o=w();return b(o.retryRecommended())}),a(5),c(6,"translate"),r()()}e&2&&(i(2),h(l(3,2,"V2.MODS.HOME.RECOMMENDED_ERROR")),i(3),d(" ",l(6,4,"V2.COMMON.RETRY")," "))}function Ft(e,m){if(e&1&&(n(0,"span",72),a(1),r()),e&2){let t=w().$implicit;i(),d(" ",t.powerGain," ")}}function Pt(e,m){if(e&1){let t=M();n(0,"button",60),x("click",function(){let o=v(t).$implicit,f=w(2);return b(f.openModSheet(o))}),n(1,"span",61),a(2),r(),n(3,"div",40)(4,"div",62)(5,"span",63),a(6),r(),n(7,"span",64),a(8),c(9,"translate"),r(),n(10,"span",65),a(11),c(12,"translate"),r()(),n(13,"p",66),a(14),r(),n(15,"div",67)(16,"span",68),a(17),c(18,"currency"),c(19,"currency"),r(),u(20,Ft,2,1,"span",69),r()(),E(),n(21,"svg",70),g(22,"path",71),r()()}if(e&2){let t=m.$implicit,s=w(2);i(2),d(" ",s.categoryEmoji(t.category)," "),i(4),h(t.name),i(2),d(" ",l(9,9,s.categoryLabelKey(t.category))," "),i(2),p("ngClass",s.difficultyBadgeClass(t.difficulty)),i(),d(" ",l(12,11,s.difficultyLabelKey(t.difficulty))," "),i(3),h(t.description),i(3),O(" ",T(18,13,S(25,xt,t.estCostMinUsd,s.currencyLocale))," \u2013 ",T(19,19,S(28,xt,t.estCostMaxUsd,s.currencyLocale))," "),i(3),p("ngIf",t.powerGain)}}function jt(e,m){e&1&&(n(0,"p",73),a(1),c(2,"translate"),r()),e&2&&(i(),d(" ",l(2,1,"V2.MODS.HOME.RECOMMENDED_EMPTY_RESULTS")," "))}function Gt(e,m){if(e&1&&(n(0,"div",44),u(1,Pt,23,31,"button",58)(2,jt,3,3,"p",59),r()),e&2){let t=w();i(),p("ngForOf",t.recommendedMods)("ngForTrackBy",t.trackByModSlug),i(),p("ngIf",t.recommendedMods.length===0)}}function Nt(e,m){if(e&1){let t=M();n(0,"button",74),x("click",function(){let o=v(t).$implicit,f=w();return b(f.openPartsShortcut(o))}),n(1,"span",75),a(2),r(),n(3,"span",76),a(4),c(5,"translate"),r()()}if(e&2){let t=m.$implicit;i(2),d(" ",t.emoji," "),i(2),h(l(5,2,t.labelKey))}}function Ut(e,m){e&1&&g(0,"div",78)}function Kt(e,m){e&1&&(n(0,"div",29),u(1,Ut,1,0,"div",77),r()),e&2&&(i(),p("ngForOf",Y(1,ft)))}function qt(e,m){if(e&1){let t=M();n(0,"div",55)(1,"p",56),a(2),c(3,"translate"),r(),n(4,"button",57),x("click",function(){v(t);let o=w();return b(o.retryGenerations())}),a(5),c(6,"translate"),r()()}e&2&&(i(2),h(l(3,2,"V2.MODS.HOME.BUILDS_ERROR")),i(3),d(" ",l(6,4,"V2.COMMON.RETRY")," "))}function Yt(e,m){e&1&&(n(0,"div",79)(1,"p",56),a(2),c(3,"translate"),r()()),e&2&&(i(2),h(l(3,1,"V2.MODS.HOME.BUILDS_EMPTY")))}function Wt(e,m){if(e&1&&(n(0,"p",87),a(1),r()),e&2){let t=w().$implicit;i(),d(" ",t.carLabel," ")}}function $t(e,m){if(e&1){let t=M();n(0,"button",81),x("click",function(){let o=v(t).$implicit,f=w(2);return b(f.openPreview(o))}),g(1,"img",82),n(2,"p",83)(3,"span",84),a(4),r(),a(5),c(6,"translate"),r(),u(7,Wt,2,1,"p",85),n(8,"p",86),a(9),r()()}if(e&2){let t=m.$implicit,s=w(2);i(),p("src",t.imageUrl,q)("alt",t.styleSlug),i(3),h(s.styleEmoji(t.styleSlug)),i(),d(" ",l(6,6,s.styleLabelKey(t.styleSlug))," "),i(2),p("ngIf",t.carLabel),i(2),h(s.formattedDate(t.createTime))}}function zt(e,m){if(e&1&&(n(0,"div",29),u(1,$t,10,8,"button",80),r()),e&2){let t=w();i(),p("ngForOf",t.generations)("ngForTrackBy",t.trackByGenerationId)}}function Xt(e,m){if(e&1){let t=M();n(0,"div",88),x("click",function(){v(t);let o=w();return b(o.closePreview())}),n(1,"button",89),c(2,"translate"),x("click",function(){v(t);let o=w();return b(o.closePreview())}),E(),n(3,"svg",90),g(4,"path",91),r()(),C(),n(5,"img",92),x("click",function(o){return o.stopPropagation()}),r()()}if(e&2){let t=w();i(),k("aria-label",l(2,2,"V2.COMMON.CLOSE")),i(4),p("src",t.previewImageUrl,q)}}var Qt=[{labelKey:"V2.MODS.HOME.PARTS_INTAKE",query:"cold air intake",emoji:"\u{1F4A8}"},{labelKey:"V2.MODS.HOME.PARTS_EXHAUST",query:"cat-back exhaust",emoji:"\u{1F525}"},{labelKey:"V2.MODS.HOME.PARTS_SUSPENSION",query:"coilovers",emoji:"\u{1F4D0}"},{labelKey:"V2.MODS.HOME.PARTS_ENGINE",query:"ecu tuner",emoji:"\u2699\uFE0F"},{labelKey:"V2.MODS.HOME.PARTS_BRAKES",query:"big brake kit",emoji:"\u{1F6D1}"},{labelKey:"V2.MODS.HOME.PARTS_WHEELS",query:"performance wheels",emoji:"\u{1F6DE}"}],ge=(()=>{class e{static{this.MAX_RECOMMENDED_AUTO_RETRIES=2}static{this.RECOMMENDED_RETRY_AFTER_MS=3e4}constructor(t,s,o,f,gt,_t){this.router=t,this.store=s,this.activeVehicle=o,this.analytics=f,this.dialog=gt,this.cdr=_t,this.partsShortcuts=Qt,this.activeCar=null,this.vehicleLabel="",this.currentPlan="FREE",this.quotaUsed=0,this.quotaLimit=0,this.quotaLoaded=!1,this.recommendedMods=[],this.loadingRecommended=!1,this.recommendedError=null,this.recommendedAutoWait=!1,this.generations=[],this.loadingGenerations=!1,this.generationsError=null,this.previewImageUrl=null,this.subs=[],this.landingViewLogged=!1,this.planReady=!1,this.vehicleEmitted=!1,this.lastRecommendedCarId=null,this.recommendedAutoRetries=0,this.recommendedRetryTimer=null}get quotaRemaining(){return Math.max(0,this.quotaLimit-this.quotaUsed)}get currencyLocale(){return F()}ngOnInit(){this.store.dispatch(new mt),this.store.dispatch(new $),this.subs.push(this.store.select(st.currentProduct).subscribe(t=>{t&&(this.currentPlan=at(t.entitlementName),this.planReady=!0,this.logLandingViewOnce()),this.cdr.markForCheck()})),this.subs.push(this.activeVehicle.activeCar$.subscribe(t=>
1{if(this.activeCar=t,this.vehicleLabel=t?`${t.year} ${t.brand} ${t.name}`.trim():"",t&&this.lastRecommendedCarId!==t.id){this.lastRecommendedCarId=t.id,this.resetRecommendedAutoRetry();let s=this.store.selectSnapshot(y.recommended)[t.id];s?this.recommendedMods=s.mods:this.store.dispatch(new j(t.id))}this.vehicleEmitted=!0,this.logLandingViewOnce(),this.cdr.markForCheck()})),this.subs.push(this.store.select(y.quota).subscribe(t=>{t&&(this.quotaUsed=t.used,this.quotaLimit=t.limit,this.quotaLoaded=!0),this.cdr.markForCheck()})),this.subs.push(this.store.select(y.loadingRecommended).subscribe(t=>{this.loadingRecommended=t,this.cdr.markForCheck()})),this.subs.push(this.store.select(y.recommendedError).subscribe(t=>{this.recommendedError=t,this.cdr.markForCheck()})),this.subs.push(this.store.select(y.recommendedTimedOut).subscribe(t=>{t&&this.activeCar&&this.recommendedAutoRetries<e.MAX_RECOMMENDED_AUTO_RETRIES?(this.recommendedAutoRetries++,this.recommendedAutoWait=!0,this.recommendedRetryTimer=setTimeout(()=>{this.recommendedRetryTimer=null,this.activeCar&&this.store.dispatch(new j(this.activeCar.id))},e.RECOMMENDED_RETRY_AFTER_MS)):this.recommendedAutoWait=!1,this.cdr.markForCheck()})),this.subs.push(this.store.select(y.recommended).subscribe(t=>{this.activeCar&&t[this.activeCar.id]&&(this.recommendedMods=t[this.activeCar.id].mods,this.cdr.markForCheck())})),this.subs.push(this.store.select(y.generations).subscribe(t=>{this.generations=t,this.cdr.markForCheck()})),this.subs.push(this.store.select(y.loadingGenerations).subscribe(t=>{this.loadingGenerations=t,this.cdr.markForCheck()})),this.subs.push(this.store.select(y.generationsError).subscribe(t=>{this.generationsError=t,this.cdr.markForCheck()}))}ngOnDestroy(){this.subs.forEach(t=>t.unsubscribe()),this.recommendedRetryTimer!==null&&(clearTimeout(this.recommendedRetryTimer),this.recommendedRetryTimer=null)}logLandingViewOnce(){this.landingViewLogged||!this.planReady||!this.vehicleEmitted||(this.landingViewLogged=!0,this.analytics.logModsLandingView(!!this.activeCar,this.currentPlan))}goBack(){this.router.navigate(["/v2/home"])}goToGenerate(){this.router.navigate(["/v2/mech-mods/generate"])}goToGarage(){this.router.navigate(["/v2/my-garage"])}openModSheet(t){let s={mod:t};this.dialog.open(ht,{data:s,panelClass:"mech-mods-action-sheet",position:{bottom:"0"},width:"100%",maxWidth:"512px",ariaLabelledBy:"mods-action-sheet-title"}).afterClosed().subscribe(o=>{o==="guide"&&this.openGuide(t)})}openGuide(t){this.router.navigate(["/v2/mech-mods/guide",t.slug],{queryParams:{modName:t.name}})}openPartsShortcut(t){this.analytics.logModsPartsClick("shortcut",t.query),this.router.navigate(["/v2/parts-center"],{queryParams:{q:t.query}})}retryRecommended(){this.activeCar&&(this.resetRecommendedAutoRetry(),this.store.dispatch(new j(this.activeCar.id)))}resetRecommendedAutoRetry(){this.recommendedAutoRetries=0,this.recommendedAutoWait=!1,this.recommendedRetryTimer!==null&&(clearTimeout(this.recommendedRetryTimer),this.recommendedRetryTimer=null)}retryGenerations(){this.store.dispatch(new $)}openPreview(t){this.previewImageUrl=t.imageUrl,this.cdr.markForCheck()}closePreview(){this.previewImageUrl=null,this.cdr.markForCheck()}categoryLabelKey(t){return G[t]??t}difficultyLabelKey(t){return U[t]??t}difficultyBadgeClass(t){return K(t)}categoryEmoji(t){return N(t)}styleEmoji(t){return wt(t)}styleLabelKey(t){return pt(t)}formattedDate(t){return dt(t,this.currencyLocale,{month:"short",day:"numeric"})}trackByModSlug(t,s){return s.slug}trackByGenerationId(t,s){return s.id}static{this.\u0275fac=function(s){return new(s||e)(_(et),_(it),_(ct),_(P),_(ot),_(D))}}static{this.\u0275cmp=I({type:e,selectors:[["app-mech-mods-home"]],decls:58,vars:38,consts:[["recommendedFallbackTitle",""],[1,"tw-pb-8"],[1,"tw-flex","tw-items-center","tw-gap-3","tw-mb-6","tw-px-1"],["type","button",1,"lg:tw-hidden","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","tw-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"],[1,"tw-text-[9px]","tw-font-bold","tw-text-mech-text-muted","tw-uppercase","tw-tracking-widest","tw-mt-0.5","tw-block"],[1,"mech-dark-card","tw-relative","tw-overflow-hidden","tw-mb-8"],[1,"tw-absolute","tw--top-20","tw--right-20","tw-w-60","tw-h-60","tw-bg-mech-primary/20","tw-rounded-full","tw-blur-3xl","tw-pointer-events-none"],[1,"tw-w-12","tw-h-12","tw-rounded-2xl","tw-bg-mech-surface/10","tw-flex","tw-items-center","tw-justify-center","tw-mb-4"],["aria-hidden","true","viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round",1,"tw-w-6","tw-h-6","tw-text-mech-text-inverse"],["d","m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z"],["d","M5 3v4"],["d","M19 17v4"],["d","M3 5h4"],["d","M17 19h4"],[1,"tw-text-2xl","tw-font-[800]","tw-text-mech-text-inverse","t
1w-tracking-tight","tw-mb-2"],[1,"tw-text-mech-text-inverse/60","tw-text-sm","tw-mb-4","tw-max-w-lg"],["class","tw-inline-flex tw-items-center tw-gap-1.5 tw-bg-mech-surface/10 tw-text-mech-text-inverse tw-text-xs tw-font-semibold tw-rounded-full tw-px-3 tw-py-1.5 tw-mb-4",4,"ngIf"],[1,"tw-flex","tw-flex-wrap","tw-items-center","tw-gap-3"],["type","button",1,"mech-btn-primary",3,"click"],["class","tw-text-mech-text-inverse/50 tw-text-xs tw-mt-4",4,"ngIf"],[1,"tw-mb-8"],[1,"tw-text-sm","tw-font-bold","tw-text-mech-text","tw-mb-3","tw-px-1"],[4,"ngIf","ngIfElse"],["class","mech-section-card tw-p-5 tw-flex tw-items-center tw-gap-4",4,"ngIf"],["class","tw-space-y-3",4,"ngIf"],["class","mech-section-card tw-p-4 tw-flex tw-items-center tw-justify-between tw-gap-3",4,"ngIf"],[1,"tw-flex","tw-gap-3","tw-overflow-x-auto","mech-scrollbar-hide","tw-pb-1"],["type","button","class","tw-flex-shrink-0 tw-w-28 tw-bg-mech-surface tw-border tw-border-mech-border tw-rounded-[20px] tw-p-3 tw-text-center tw-cursor-pointer hover:tw-border-mech-primary/40 tw-transition-colors",3,"click",4,"ngFor","ngForOf"],["class","tw-flex tw-gap-3 tw-overflow-x-auto mech-scrollbar-hide tw-pb-1",4,"ngIf"],["class","mech-section-card tw-p-5 tw-text-center",4,"ngIf"],["class","tw-fixed tw-inset-0 tw-bg-black/90 tw-z-[1000] tw-flex tw-items-center tw-justify-center tw-p-6",3,"click",4,"ngIf"],[1,"tw-inline-flex","tw-items-center","tw-gap-1.5","tw-bg-mech-surface/10","tw-text-mech-text-inverse","tw-text-xs","tw-font-semibold","tw-rounded-full","tw-px-3","tw-py-1.5","tw-mb-4"],[1,"tw-text-mech-text-inverse/50","tw-text-xs","tw-mt-4"],[1,"mech-section-card","tw-p-5","tw-flex","tw-items-center","tw-gap-4"],[1,"tw-w-11","tw-h-11","tw-rounded-xl","tw-bg-mech-surface-2","tw-flex","tw-items-center","tw-justify-center","tw-shrink-0"],["aria-hidden","true","fill","none","stroke","currentColor","viewBox","0 0 24 24","stroke-width","2",1,"tw-w-5","tw-h-5","tw-text-mech-text-muted"],["stroke-linecap","round","stroke-linejoin","round","d","M5 17h14M5 17a2 2 0 01-2-2V9a2 2 0 012-2h1l2-3h8l2 3h1a2 2 0 012 2v6a2 2 0 01-2 2M5 17a2 2 0 002 2h10a2 2 0 002-2M8 14h.01M16 14h.01"],[1,"tw-flex-1","tw-min-w-0"],[1,"tw-text-sm","tw-font-semibold","tw-text-mech-text","tw-m-0"],[1,"tw-text-xs","tw-text-mech-text-muted","tw-m-0","tw-mt-0.5"],["type","button",1,"mech-btn-secondary","tw-shrink-0","tw-text-sm",3,"click"],[1,"tw-space-y-3"],["role","status",1,"mech-section-card","tw-p-4","tw-flex","tw-items-center","tw-gap-3"],["aria-hidden","true","viewBox","0 0 24 24","fill","none",1,"tw-w-5","tw-h-5","tw-text-mech-primary","tw-shrink-0","tw-animate-spin"],["cx","12","cy","12","r","10","stroke","currentColor","stroke-width","4",1,"tw-opacity-25"],["fill","currentColor","d","M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z",1,"tw-opacity-75"],["class","mech-section-card tw-p-4 tw-flex tw-items-center tw-gap-4 tw-animate-pulse",4,"ngFor","ngForOf"],[1,"mech-section-card","tw-p-4","tw-flex","tw-items-center","tw-gap-4","tw-animate-pulse"],[1,"tw-w-11","tw-h-11","tw-rounded-xl","tw-bg-mech-surface-2","tw-shrink-0"],[1,"tw-flex-1","tw-space-y-2"],[1,"tw-h-3","tw-bg-mech-surface-2","tw-rounded","tw-w-1/2"],[1,"tw-h-2.5","tw-bg-mech-surface-2","tw-rounded","tw-w-3/4"],[1,"mech-section-card","tw-p-4","tw-flex","tw-items-center","tw-justify-between","tw-gap-3"],[1,"tw-text-sm","tw-text-mech-text-muted","tw-m-0"],["type","button",1,"tw-text-sm","tw-font-semibold","tw-text-mech-primary","tw-bg-transparent","tw-border-none","tw-cursor-pointer","tw-p-0",3,"click"],["type","button","class","mech-feature-card tw-w-full tw-text-left tw-p-4 tw-flex tw-items-start tw-gap-3",3,"click",4,"ngFor","ngForOf","ngForTrackBy"],["class","tw-text-sm tw-text-mech-text-muted tw-text-center tw-py-4",4,"ngIf"],["type","button",1,"mech-feature-card","tw-w-full","tw-text-left","tw-p-4","tw-flex","tw-items-start","tw-gap-3",3,"click"],["aria-hidden","true",1,"tw-text-2xl","tw-shrink-0","tw-leading-none","tw-mt-0.5"],[1,"tw-flex","tw-flex-wrap","tw-items-center","tw-gap-2","tw-mb-1"],[1,"tw-text-sm","tw-font-bold","tw-text-mech-text"],[1,"tw-text-[10px]","tw-font-bold","tw-uppercase","tw-tracking-wider","tw-text-mech-text-secondary","tw-bg-mech-surface-2","tw-px-2","tw-py-0.5","tw-rounded-full"],[1,"tw-text-[10px]","tw-font-bold","tw-uppercase","tw-tracking-wider","tw-px-2","tw-py-0.5","tw-rounded-full",3,"ngClass"],[1,"tw-text-xs","tw-text-mech-text-muted","tw-leading-relaxed","tw-mb-1.5"],[1,"tw-flex","tw-flex-wrap","tw-items-center","tw-gap-x-3","tw-gap-y-1","tw-text-xs","tw-text-mech-text-secondary"],[1,"tw-font-semibold"],["class","tw-font-semibold tw-text-mech-primary",4,"ngIf"],["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-faint","tw-shrink-0","tw-mt-1"],["stroke-linecap","round","stroke-linejoin","round","d","M9 5l7 7-7 7"],[1,"tw-font-semibold","tw-text-mech-primary"],[1,"tw-text-sm","tw-text-mech-text-muted","tw-text-center","tw-py-4"],["type","button",1,"tw-flex-shrink-0","tw-w-28","tw-bg-mech-surface","tw-border","t
1w-border-mech-border","tw-rounded-[20px]","tw-p-3","tw-text-center","tw-cursor-pointer","hover:tw-border-mech-primary/40","tw-transition-colors",3,"click"],["aria-hidden","true",1,"tw-text-2xl","tw-block","tw-mb-1.5"],[1,"tw-text-xs","tw-font-semibold","tw-text-mech-text"],["class","tw-flex-shrink-0 tw-w-32 tw-h-32 tw-rounded-2xl tw-bg-mech-surface-2 tw-animate-pulse",4,"ngFor","ngForOf"],[1,"tw-flex-shrink-0","tw-w-32","tw-h-32","tw-rounded-2xl","tw-bg-mech-surface-2","tw-animate-pulse"],[1,"mech-section-card","tw-p-5","tw-text-center"],["type","button","class","tw-flex-shrink-0 tw-w-32 tw-border-none tw-bg-transparent tw-cursor-pointer tw-p-0 tw-text-left",3,"click",4,"ngFor","ngForOf","ngForTrackBy"],["type","button",1,"tw-flex-shrink-0","tw-w-32","tw-border-none","tw-bg-transparent","tw-cursor-pointer","tw-p-0","tw-text-left",3,"click"],["loading","lazy",1,"tw-w-32","tw-h-32","tw-rounded-2xl","tw-object-cover","tw-border","tw-border-mech-border","tw-mb-1.5",3,"src","alt"],[1,"tw-text-[11px]","tw-font-semibold","tw-text-mech-text","tw-truncate","tw-m-0"],["aria-hidden","true"],["class","tw-text-[10px] tw-text-mech-text-secondary tw-truncate tw-m-0",4,"ngIf"],[1,"tw-text-[10px]","tw-text-mech-text-muted","tw-m-0"],[1,"tw-text-[10px]","tw-text-mech-text-secondary","tw-truncate","tw-m-0"],[1,"tw-fixed","tw-inset-0","tw-bg-black/90","tw-z-[1000]","tw-flex","tw-items-center","tw-justify-center","tw-p-6",3,"click"],["type","button",1,"tw-absolute","tw-top-6","tw-right-6","tw-w-11","tw-h-11","tw-rounded-full","tw-bg-white/10","tw-flex","tw-items-center","tw-justify-center","tw-border-none","tw-cursor-pointer",3,"click"],["aria-hidden","true","fill","none","stroke","currentColor","viewBox","0 0 24 24","stroke-width","2",1,"tw-w-5","tw-h-5","tw-text-white"],["stroke-linecap","round","stroke-linejoin","round","d","M6 18L18 6M6 6l12 12"],["alt","",1,"tw-max-w-full","tw-max-h-full","tw-rounded-2xl","tw-object-contain",3,"click","src"]],template:function(s,o){if(s&1&&(n(0,"div",1)(1,"div",2)(2,"button",3),c(3,"translate"),x("click",function(){return o.goBack()}),E(),n(4,"svg",4),g(5,"path",5),r()(),C(),n(6,"div")(7,"h1",6),a(8),c(9,"translate"),r(),n(10,"span",7),a(11),c(12,"translate"),r()()(),n(13,"div",8),g(14,"div",9),n(15,"div",10),E(),n(16,"svg",11),g(17,"path",12)(18,"path",13)(19,"path",14)(20,"path",15)(21,"path",16),r()(),C(),n(22,"h2",17),a(23),c(24,"translate"),r(),n(25,"p",18),a(26),c(27,"translate"),r(),u(28,Ot,3,7,"div",19),n(29,"div",20)(30,"button",21),x("click",function(){return o.goToGenerate()}),a(31),c(32,"translate"),r()(),u(33,Dt,3,3,"p",22),r(),n(34,"div",23)(35,"h2",24),u(36,Rt,3,6,"ng-container",25)(37,Vt,2,3,"ng-template",null,0,J),r(),u(39,Ht,14,9,"div",26)(40,At,13,8,"div",27)(41,Bt,7,6,"div",28)(42,Gt,3,3,"div",27),r(),n(43,"div",23)(44,"h2",24),a(45),c(46,"translate"),r(),n(47,"div",29),u(48,Nt,6,4,"button",30),r()(),n(49,"div")(50,"h2",24),a(51),c(52,"translate"),r(),u(53,Kt,2,2,"div",31)(54,qt,7,6,"div",28)(55,Yt,4,3,"div",32)(56,zt,2,2,"div",31),r(),u(57,Xt,6,4,"div",33),r()),s&2){let f=Q(38);i(2),k("aria-label",l(3,22,"V2.COMMON.BACK")),i(6),d(" ",l(9,24,"V2.NAV.MECH_MODS")," "),i(3),d(" ",l(12,26,"V2.MODS.HOME.TAGLINE")," "),i(12),d(" ",l(24,28,"V2.MODS.HOME.HERO_TITLE")," "),i(3),d(" ",l(27,30,"V2.MODS.HOME.HERO_SUBTITLE")," "),i(2),p("ngIf",o.quotaLoaded),i(3),d(" ",l(32,32,"V2.MODS.HOME.HERO_CTA")," "),i(2),p("ngIf",o.currentPlan==="FREE"),i(3),p("ngIf",o.vehicleLabel)("ngIfElse",f),i(3),p("ngIf",!o.activeCar),i(),p("ngIf",o.activeCar&&(o.loadingRecommended||o.recommendedAutoWait)),i(),p("ngIf",o.activeCar&&!o.loadingRecommended&&!o.recommendedAutoWait&&o.recommendedError),i(),p("ngIf",o.activeCar&&!o.loadingRecommended&&!o.recommendedAutoWait&&!o.recommendedError),i(3),h(l(46,34,"V2.MODS.HOME.SHOP_PARTS_TITLE")),i(3),p("ngForOf",o.partsShortcuts),i(3),h(l(52,36,"V2.MODS.HOME.BUILDS_TITLE")),i(2),p("ngIf",o.loadingGenerations),i(),p("ngIf",!o.loadingGenerations&&o.generationsError),i(),p("ngIf",!o.loadingGenerations&&!o.generationsError&&o.generations.length===0),i(),p("ngIf",!o.loadingGenerations&&!o.generationsError&&o.generations.length>0),i(),p("ngIf",o.previewImageUrl)}},dependencies:[L,R,tt,V,B,H,A],styles:['@charset "UTF-8";[_nghost-%COMP%]{display:block}'],changeDetection:0})}}return e})();
1export{ge as MechModsHomeComponent};

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.