1import{b as ge,c as ue,d as fe,f as _e,g as he,i as Ce,j as ye,l as Se,m as be,o as we,q as Me}from"./chunk-IRVXRWZD.js";import{d as ae,e as re,g as le}from"./chunk-OASEBQL4.js";import{a as ce}from"./chunk-M2SDBECC.js";import{b as pe}from"./chunk-H3ZOHFO7.js";import"./chunk-CIKJJUSN.js";import"./chunk-RRZRS5BZ.js";import"./chunk-LY7WOQZN.js";import"./chunk-Q4V6AKYI.js";import"./chunk-T3PLPHIG.js";import{c as D}from"./chunk-2JW6ZMWV.js";import"./chunk-NIP74ZKI.js";import"./chunk-QNUNLKYK.js";import{r as me}from"./chunk-RE4JJFV5.js";import"./chunk-COEKBYWO.js";import"./chunk-E2K2LIS4.js";import{a as se}from"./chunk-KJKRX6VS.js";import"./chunk-2CRWMDGS.js";import"./chunk-4WMDX4SQ.js";import"./chunk-IQLKO45Z.js";import"./chunk-V6KBZVCY.js";import"./chunk-6FQQM4CE.js";import"./chunk-VTTO24NQ.js";import"./chunk-Y5VOXWTF.js";import{n as te,q as ne}from"./chunk-YWHNFDXQ.js";import{l as de}from"./chunk-FCTHY2PU.js";import"./chunk-DPVJW3LI.js";import"./chunk-GW33KQPR.js";import{T as ie,U as oe,x as ee}from"./chunk-TUEKBDZZ.js";import"./chunk-RLPOKPIS.js";import"./chunk-TPES7EAS.js";import{C as Z,G as $,b as V,c as U,h as K,m as G,o as j,u as X,v as Y,w as J}from"./chunk-QXJM3TTT.js";import{F as q,r as Q}from"./chunk-TMOIAHHX.js";import{$a as S,Fa as b,Fb as F,Ib as a,Jb as u,Kb as H,Lb as B,Rb as m,Sb as p,Tb as c,Wa as h,Xa as C,Za as I,_a as y,aa as z,ab as _,bb as e,cb as t,db as L,dc as N,ga as l,hb as x,ib as P,kb as v,o as w,p as M,qb as E,sa as O,tb as f,za as A}from"./chunk-DJNWGYMM.js";import{ea as W,f as R}from"./chunk-VOZAGDK7.js";import"./chunk-E5QWB6YB.js";var xe=r=>({width:r}),T=(r,s)=>s.key,Pe=(r,s)=>s.site,ve=(r,s)=>s.value,We=(r,s)=>s.repo+s.path;function Ee(r,s){if(r&1){let o=v();e(0,"p",5),a(1," The lists of existing sites and clubs could not be loaded, so the Parent site, Club and Stripe key pickers below are empty. Reload the page before creating a site \u2014 otherwise you cannot set those, and a site that needs a parent or club will be created without one. "),e(2,"button",49),E("click",function(){w(o);let n=f();return M(n.loadOptions())}),a(3,"Try again"),t()()}}function Oe(r,s){if(r&1&&(e(0,"option",20),a(1),t()),r&2){let o=s.$implicit;_("value",o.key),l(),B("",o.key,"",o.name?" \u2014 "+o.name:"")}}function ke(r,s){if(r&1&&(e(0,"option",20),a(1),t()),r&2){let o=s.$implicit;_("value",o.key),l(),u(o.name)}}function Te(r,s){if(r&1&&(e(0,"optgroup",21),y(1,ke,2,2,"option",20,T),t()),r&2){let o=s.$implicit;_("label",o.site),l(),S(o.clubs)}}function ze(r,s){if(r&1&&(e(0,"option",20),a(1),t()),r&2){let o=s.$implicit;_("value",o.key),l(),u(o.key)}}function Ie(r,s){r&1&&a(0," Left empty, a key is requested from logster when the site is created. Paste one here to use it instead. ")}function Le(r,s){r&1&&a(0," Automatic key creation is switched off, so paste a key here or the site runs without logging. ")}function Fe(r,s){if(r&1&&(e(0,"small"),a(1),t()),r&2){let o=f().$implicit;l(),u(o.hint)}}function De(r,s){if(r&1){let o=v();e(0,"label",30)(1,"input",42),c("ngModelChange",function(n){let d=w(o).$implicit,i=f();return p(i.apiFlags[d.key],n)||(i.apiFlags[d.key]=n),M(n)}),t(),e(2,"span")(3,"strong"),a(4),t(),h(5,Fe,2,1,"small"),t()()}if(r&2){let o=s.$implicit,g=f();l(),m("ngModel",g.apiFlags[o.key]),l(3),u(o.label),l(),C(o.hint?5:-1)}}function Re(r,s){if(r&1&&(e(0,"small"),a(1),t()),r&2){let o=f().$implicit;l(),u(o.hint)}}function Ae(r,s){if(r&1){let o=v();e(0,"label",30)(1,"input",42),c("ngModelChange",function(n){let d=w(o).$implicit,i=f();return p(i.frontFlags[d.key],n)||(i.frontFlags[d.key]=n),M(n)}),t(),e(2,"span")(3,"strong"),a(4),t(),h(5,Re,2,1,"small"),t()()}if(r&2){let o=s.$implicit,g=f();l(),m("ngModel",g.frontFlags[o.key]),l(3),u(o.label),l(),C(o.hint?5:-1)}}function He(r,s){if(r&1){let o=v();e(0,"label",30)(1,"input",42),c("ngModelChange",function(n){let d=w(o).$implicit,i=f();return p(i.compliance[d.key],n)||(i.compliance[d.key]=n),M(n)}),t(),e(2,"span")(3,"strong"),a(4),t()()()}if(r&2){let o=s.$implicit,g=f();l(),m("ngModel",g.compliance[o.key]),l(3),u(o.label)}}function Be(r,s){if(r&1&&(e(0,"option",20),a(1),t()),r&2){let o=s.$implicit;_("value",o.value),l(),u(o.label)}}function Ne(r,s){if(r&1){let o=v();e(0,"button",50),E("click",function(){w(o);
1let n=f();return M(n.createSite())}),e(1,"mat-icon"),a(2,"rocket_launch"),t(),e(3,"span",45),a(4),t()()}if(r&2){let o=f();_("disabled",o.previewing||o.creating),l(4),u(o.actionLabel)}}function Qe(r,s){if(r&1&&(e(0,"p",5),a(1),t()),r&2){let o=s.$implicit;l(),u(o)}}function qe(r,s){r&1&&(e(0,"span",56),a(1,"copied unchanged"),t())}function Ve(r,s){if(r&1&&(e(0,"pre",52),a(1),t()),r&2){let o=f().$implicit;l(),u(o.content)}}function Ue(r,s){if(r&1){let o=v();e(0,"div",51)(1,"button",53),E("click",function(){let n=w(o).$implicit;return M(n.open=!n.open)}),e(2,"mat-icon"),a(3),t(),e(4,"span",54),a(5),t(),e(6,"span",55),a(7),t(),h(8,qe,2,0,"span",56),t(),h(9,Ve,2,1,"pre",52),t()}if(r&2){let o=s.$implicit;l(),_("disabled",o.binaryCopyFromTemplate),l(2),u(o.open?"expand_less":"expand_more"),l(),F("api",o.repo==="api"),l(),u(o.repo),l(2),u(o.path),l(),C(o.binaryCopyFromTemplate?8:-1),l(),C(o.open&&o.content?9:-1)}}function Ke(r,s){if(r&1&&(e(0,"section",6)(1,"h2"),a(2,"Files that will be created"),t(),y(3,Qe,2,1,"p",5,I),y(5,Ue,10,8,"div",51,We),e(7,"h3"),a(8,"Site record"),t(),e(9,"pre",52),a(10),t()()),r&2){let o=f();l(3),S(o.preview.warnings),l(2),S(o.preview.files),l(5),u(o.siteDocJson)}}function Ge(r,s){if(r&1&&(e(0,"h2"),a(1),t()),r&2){let o=f(2);l(),u(o.form.updateExisting?"Site updated":"Site created")}}function je(r,s){if(r&1&&(e(0,"h2"),a(1),t(),e(2,"p",58),a(3," Some steps did not finish. Nothing is broken: press "),e(4,"strong"),a(5,"Create site"),t(),a(6," again and the wizard picks up where it stopped. "),t()),r&2){let o=f(2);l(),H("",o.form.updateExisting?"Site partly updated":"Site partly created"," \u2014 needs another run")}}function Xe(r,s){if(r&1&&(a(0," Two draft pull requests are ready for review on branch "),e(1,"code"),a(2),t(),a(3,": "),e(4,"a",59),a(5,"front pull request"),t(),a(6," \xB7 "),e(7,"a",59),a(8,"api pull request"),t()),r&2){let o=f(2);l(2),u(o.result.branch),l(2),_("href",o.result.frontPrUrl,z),l(3),_("href",o.result.apiPrUrl,z)}}function Ye(r,s){if(r&1&&(e(0,"a",59),a(1,"front pull request"),t()),r&2){let o=f(3);_("href",o.result.frontPrUrl,z)}}function Je(r,s){r&1&&(e(0,"span",57),a(1,"front pull request not created"),t())}function Ze(r,s){if(r&1&&(e(0,"a",59),a(1,"api pull request"),t()),r&2){let o=f(3);_("href",o.result.apiPrUrl,z)}}function $e(r,s){r&1&&(e(0,"span",57),a(1,"api pull request not created"),t())}function et(r,s){if(r&1&&(a(0," Branch "),e(1,"code"),a(2),t(),a(3,": "),h(4,Ye,2,1,"a",59)(5,Je,2,0,"span",57),a(6," \xB7 "),h(7,Ze,2,1,"a",59)(8,$e,2,0,"span",57)),r&2){let o=f(2);l(2),u(o.result.branch),l(2),C(o.result.frontPrUrl?4:5),l(3),C(o.result.apiPrUrl?7:8)}}function tt(r,s){r&1&&(e(0,"p",57),a(1,"The site record was not saved, so the site will not work until it is."),t())}function nt(r,s){if(r&1&&(e(0,"p",5),a(1),t()),r&2){let o=s.$implicit;l(),u(o)}}function it(r,s){if(r&1&&(e(0,"li"),a(1),t()),r&2){let o=s.$implicit;l(),u(o)}}function ot(r,s){if(r&1&&(e(0,"section",6),h(1,Ge,2,1,"h2")(2,je,7,1),e(3,"p"),h(4,Xe,9,3)(5,et,9,3),t(),h(6,tt,2,0,"p",57),y(7,nt,2,1,"p",5,I),e(9,"h3"),a(10,"What happens next"),t(),e(11,"ol"),y(12,it,2,1,"li",null,I),t()()),r&2){let o=f();F("result-panel",o.result.complete)("incomplete-panel",!o.result.complete),l(),C(o.result.complete?1:2),l(3),C(o.result.frontPrUrl&&o.result.apiPrUrl?4:5),l(2),C(o.result.siteDocCreated?-1:6),l(),S(o.result.warnings),l(5),S(o.result.nextSteps)}}function at(r,s){r&1&&(e(0,"p"),a(1,"Checking both repos, this takes a moment\u2026"),t())}function rt(r,s){if(r&1&&(e(0,"p",5),a(1),t()),r&2){let o=s.$implicit;l(),u(o)}}function lt(r,s){r&1&&(e(0,"th",75),a(1,"Site"),t())}function st(r,s){if(r&1&&(e(0,"td",76),a(1),t()),r&2){let o=s.$implicit;l(),u(o.siteKey)}}function dt(r,s){r&1&&(e(0,"th",75),a(1,"Front files"),t())}function mt(r,s){if(r&1&&(e(0,"td",76),a(1),t()),r&2){let o=s.$implicit;l(),u(o.frontOverlay?"\u2713":"\u2014")}}function pt(r,s){r&1&&(e(0,"th",75),a(1,"API files"),t())}function ct(r,s){if(r&1&&(e(0,"td",76),a(1),t()),r&2){let o=s.$implicit;l(),u(o.apiOverlay?"\u2713":"\u2014")}}function gt(r,s){r&1&&(e(0,"th",75),a(1,"Front build"),t())}function ut(r,s){if(r&1&&(e(0,"td",76),a(1),t()),r&2){let o=s.$implicit;l(),u(o.frontWorkflow?"\u2713":"\u2014")}}function ft(r,s){r&1&&(e(0,"th",75),a(1,"API build"),t())}function _t(r,s){if(r&1&&(e(0,"td",76),a(1),t()),r&2){let o=s.$implicit;l(),u(o.apiWorkflow?"\u2713":"\u2014")}}function ht(r,s){r&1&&(e(0,"th",75),a(1,"Site record"),t())}function Ct(r,s){if(r&1&&(e(0,"td",76),a(1),t()),r&2){let o=s.$implicit;l(),u(o.siteDoc?"\u2713":o.siteDocRemoved?"removed":"\u2014")}}function yt(r,s){r&1&&(e(0,"th",75),a(1,"Status"),t())}function St(r,s){if(r&1&&(e(0,"td",76),a(1),t()),r&2){let o=s.$implicit;F("status-problem",o.status!=="ok"),l(),u(o.status)}}function bt(r,s){r&1&&L(0,"tr",77)}function wt(r,s){r&1&&L(0,"tr",78)}function Mt(r,s){if(r&1){let o=v();e(0,"label",60)(1,"input",42),c("ngModelChange",function(n){w(o);let d=f(2);return p(d.onlyProblems,n)||(d.onlyProblems=n),M(n)}),t(),a(2," Show only sites with problems "),t(),e(3,"div",61)(4,"table",62),x(5,63),b(6,lt,2,0,"th",64)(7,st,2,1,"td",65),P(),x(8,66),b(9,dt,2,0,"th",64)(10,mt,2,1,"td",65),P(),x(11,67),b(12,pt,2,0,"th",64)(13,ct,2,1,"td",65),P(),x(14,68),b(15,gt,2,0,"th",64)(16,ut,2,1,"td",65),P(),x(17,69),b(18,ft,2,0,"th",64)(19,_t,2,1,"td",65),P(),x(20,70),b(21,ht,2,0,"th",64)(22,Ct,2,1,"td",65),P(),x(23,71),b(24,yt,2,0,"th",64)(25,St,2,3,"td",72),P(),b(26,bt,1,0,"tr",73)(27,wt,1,0,"tr",74),t()()}if(r&2){let o=f(2);l(),m("ngModel",o.onlyProblems),l(3),_("dataSource",o.visibleInventoryRows),l(22),_("matHeaderRowDef",o.inventoryColumns),l(),_("matRowDefColumns",o.inventoryColumns)}}function xt(r,s){if(r&1&&(e(0,"p",28),a(1," Every site key seen in the repos or the database, and what it is missing. Fix these by hand \u2014 this page never deletes or repairs anything on its own. "),t(),h(2,at,2,0,"p"),y(3,rt,2,1,"p",5,I),h(5,Mt,28,4)),r&2){let o=f();l(2),C(o.inventoryLoading?2:-1),l(),S(o.inventoryWarnings),l(2),C(o.inventoryLoaded?5:-1)}}var k="loader-site-wizard",Kt=(()=>{class r{api;notify;ngxLoader;_fuseConfigService;breakpointObserver;fuseConfig;isMobile=!1;form={siteKey:"",displayName:"",association:"",domain:"",legalName:"",stateCode:"",stateName:"",siteStatesText:"",asn:null,region:"",primaryColor:"#1a3668",accentColor:"#d42131",ownerFirst:"",ownerLast:"",ownerEmail:"",deploymentFile:"k8s-deployment.yml",templateRef:"",updateExisting:!1,parentSite:"",clubID:"",stripeAccount:"",stripeKeysFromSite:"",feeTeamRegistration:10,feeSchedule:8,feeIndividualRegistration:2.5,feeIndividualEventEntry:5,gaKey:"",ga4PropertyID:null,logsterKey:"",mbcIdentifier:"",umpireSeasonOverride:"",clubsPageName:"",whatsappGroupName:"",whatsappGroupURL:"",eventSearchDisplayMode:"",isYouth1stEnvironmentVisible:""};deploymentFiles=[{value:"k8s-deployment.yml",label:"Standard"},{value:"k8s-deployment-medium.yml",label:"Medium"},{value:"k8s-deployment-large.yml",label:"Large"},{value:"k8s-deployment-xlarge.yml",label:"Extra large"}];
1apiFlagDefs=[{key:"eventSearchThisSiteOnly",label:"Event search shows this site only",hint:"Visitors do not see events from other sites."},{key:"OnePlayerOneRosterPerClassGroupCheck",label:"One roster per class group",hint:"A player can only be on one roster within a class group."},{key:"guestPlayerActive",label:"Guest players",hint:"Teams can invite guest players for events."},{key:"teamCommAllowed",label:"Team communication",hint:"Coaches can email their teams from the site."},{key:"approvalNotRequired",label:"No approval step",hint:"Registrations are accepted without an admin approving them."},{key:"logoGeneratorEnabled",label:"Logo Studio",hint:"Teams can design logos with the AI logo tool."},{key:"limitPlayerSearch2Site",label:"Player search on this site only",hint:"Player search does not look across other sites."},{key:"hideMetroStates",label:"Hide metro states",hint:"Hides metro-area entries in state dropdowns."},{key:"hidePublicRoster",label:"Hide public rosters",hint:"Rosters are not visible to visitors."},{key:"sendMoney2SelectedState",label:"Send money to the selected state",hint:"Fees go to the state association chosen at registration."},{key:"spRegistrationSite",label:"Single-player registration site"},{key:"guestPlayerAllowedWhenRosterFrozen",label:"Guest players after roster freeze"},{key:"defaultStateSort",label:"Sort by state by default"},{key:"sequentialTeamID",label:"Sequential team IDs"},{key:"sequentialPlayerID",label:"Sequential player IDs"},{key:"hidePlayerRatingWithNoPicture",label:"Hide ratings for players with no photo"},{key:"disableOutputCache",label:"Turn off page caching",hint:"Only for sites that need always-fresh pages."}];frontFlagDefs=[{key:"BGCheckIntegration",label:"Background check integration",hint:"Coaches complete background checks through the site."},{key:"clubIndvRegSetupAllowed",label:"Clubs can set up individual registration"},{key:"IRConversationAllowed",label:"Messaging on individual registration"},{key:"umpirePricingHidden",label:"Hide umpire pricing"},{key:"hideStateEventSearch",label:"Hide state filter in event search"},{key:"hideFacilityNameOnGMapUrl",label:"Leave facility name out of map links"},{key:"appReviewMode",label:"App review mode",hint:"For app store review builds."},{key:"requireWaiver4Invites",label:"Require a waiver before invites"},{key:"showJoinLeague",label:"Show Join League"},{key:"leagueGameHostSettingsEnabled",label:"League game host settings"},{key:"leagueTeamEntryPrePay4Players",label:"League teams pre-pay for players"},{key:"hideTeamCompliance",label:"Hide team compliance"},{key:"teamPlusHidden",label:"Hide Team Plus"},{key:"umpireRegistrationNotAllowed",label:"No umpire registration"},{key:"hideAIChatbot",label:"Hide the AI chat helper"},{key:"teamCreationNotAllowed",label:"Teams cannot be created"},{key:"boardMembersOnlyAllowed",label:"Board members only"},{key:"requireIDNo4Waiver",label:"Require an ID number on waivers"},{key:"showOldCMS",label:"Show the old page editor"}];complianceDefs=[{key:"discardConcussion",label:"Skip concussion certificate",on:!0},{key:"discardACE",label:"Skip ACE certificate",on:!0},{key:"discardSafeSport",label:"Skip SafeSport",on:!0},{key:"discardBackground",label:"Skip background check",on:!1},{key:"discardBirthCertificate",label:"Skip birth certificate",on:!1},{key:"discardInsurance",label:"Skip proof of insurance",on:!1},{key:"discardCompliance",label:"Skip all compliance checks",on:!1},{key:"requireDriverLicense",label:"Require driver license",on:!1},{key:"requireACE",label:"Require ACE certificate",on:!1},{key:"requireTribalCredential",label:"Require tribal credential",on:!1}];apiFlags={};frontFlags={};compliance={};siteOptions=[];clubSites=[];logsterMintConfigured=!0;optionsFailed=!1;previewing=!1;creating=!1;preview=null;siteDocJson="";result=null;inventoryLoading=!1;inventoryRows=[];inventoryWarnings=[];inventoryLoaded=!1;showInventory=!1;inventoryColumns=["siteKey","frontOverlay","apiOverlay","frontWorkflow","apiWorkflow","siteDoc","status"];onlyProblems=!0;_unsubscribeAll=new R;constructor(o,g,n,d,i){this.api=o,this.notify=g,this.ngxLoader=n,this._fuseConfigService=d,this.breakpointObserver=i}
1ngOnInit(){this.complianceDefs.forEach(o=>this.compliance[o.key]=o.on),this.loadOptions(),this._fuseConfigService.config.pipe(W(this._unsubscribeAll)).subscribe(o=>{this.fuseConfig=o}),this.breakpointObserver.observe(["(max-width: 599px)"]).pipe(W(this._unsubscribeAll)).subscribe(o=>{this.isMobile=o.matches==!0})}ngOnDestroy(){this._unsubscribeAll.next(!0),this._unsubscribeAll.complete()}get visibleInventoryRows(){return this.onlyProblems?this.inventoryRows.filter(o=>o.status!=="ok"):this.inventoryRows}loadOptions(){this.api.get("SiteWizard/options",!0).pipe(W(this._unsubscribeAll)).subscribe({next:o=>{this.optionsFailed=!1,this.siteOptions=o?.sites??[],this.logsterMintConfigured=o?.logsterMintConfigured!==!1;let g={};(o?.clubs??[]).forEach(n=>{(g[n.site||"other"]=g[n.site||"other"]||[]).push(n)}),this.clubSites=Object.keys(g).sort().map(n=>({site:n,clubs:g[n]}))},error:()=>{this.optionsFailed=!0,this.siteOptions=[],this.clubSites=[]}})}normalizeKey(){this.form.siteKey=(this.form.siteKey||"").toLowerCase().replace(/[^a-z0-9-]/g,"")}buildRequest(){let o=(this.form.siteStatesText||"").split(",").map(g=>g.trim().toUpperCase()).filter(g=>g.length>0);return{siteKey:this.form.siteKey.trim(),displayName:this.form.displayName,association:this.form.association,domain:this.form.domain.trim(),legalName:this.form.legalName,stateCode:this.form.stateCode,stateName:this.form.stateName,siteStates:o,asn:this.form.asn,region:this.form.region,primaryColor:this.form.primaryColor,accentColor:this.form.accentColor,ownerFirst:this.form.ownerFirst,ownerLast:this.form.ownerLast,ownerEmail:this.form.ownerEmail,deploymentFile:this.form.deploymentFile,templateRef:this.form.templateRef.trim(),updateExisting:this.form.updateExisting,parentSite:this.form.parentSite,clubID:this.form.clubID,stripeAccount:this.form.stripeAccount.trim(),stripeKeysFromSite:this.form.stripeKeysFromSite,feeTeamRegistration:this.form.feeTeamRegistration,feeSchedule:this.form.feeSchedule,feeIndividualRegistration:this.form.feeIndividualRegistration,feeIndividualEventEntry:this.form.feeIndividualEventEntry,gaKey:this.form.gaKey.trim(),ga4PropertyID:this.form.ga4PropertyID,logsterKey:this.form.logsterKey.trim(),mbcIdentifier:this.form.mbcIdentifier.trim(),umpireSeasonOverride:this.form.umpireSeasonOverride.trim(),clubsPageName:this.form.clubsPageName.trim(),whatsappGroupName:this.form.whatsappGroupName.trim(),whatsappGroupURL:this.form.whatsappGroupURL.trim(),eventSearchDisplayMode:this.form.eventSearchDisplayMode,isYouth1stEnvironmentVisible:this.form.isYouth1stEnvironmentVisible,compliance:this.compliance,apiFlags:this.apiFlags,frontFlags:this.frontFlags}}loadPreview(){this.previewing=!0,this.result=null,this.ngxLoader.startLoader(k),this.api.post("SiteWizard/preview",this.buildRequest(),!0).pipe(W(this._unsubscribeAll)).subscribe({next:o=>{this.preview=o,this.siteDocJson=JSON.stringify(o?.siteDoc,null,2),this.previewing=!1,this.ngxLoader.stopLoader(k)},error:o=>{this.previewing=!1,this.preview=null,this.ngxLoader.stopLoader(k),this.notify.openAlertModal(o?.error?o.error:"An error has occurred",D.ERROR)}})}get actionLabel(){return this.form.updateExisting?"Update site":"Create site"}createSite(){let o=this.form.updateExisting?`This will rewrite the files for '${this.form.siteKey}' from this form and open a draft pull request in both repos. Settings the form does not cover are kept in the API file, but the website file is rebuilt \u2014 check the preview for anything listed as being removed. Nothing changes on the live site until the pull requests are merged and the build is run. Continue?`:`This will open a draft pull request in both repos for '${this.form.siteKey}' and save the new site record. Nothing deploys until the pull requests are merged and the build is run. Continue?`;this.notify.openConfirmModal(o,g=>{g&&this.executeCreate()})}executeCreate(){this.creating=!0,this.ngxLoader.startLoader(k),this.api.post("SiteWizard/create",this.buildRequest(),!0).pipe(W(this._unsubscribeAll)).subscribe({next:o=>{this.result=o,this.creating=!1,this.ngxLoader.stopLoader(k)},error:o=>{this.creating=!1,this.ngxLoader.stopLoader(k),this.notify.openAlertModal(o?.error?o.error:"An error has occurred",D.ERROR)}})}toggleInventory(){this.showInventory=!this.showInventory,this.showInventory&&!this.inventoryLoaded&&this.loadInventory()}loadInventory(){this.inventoryLoading=!0,this.api.get("SiteWizard/inventory",!0).pipe(W(this._unsubscribeAll)).subscribe({next:o=>{this.inventoryRows=o?.rows??[],this.inventoryWarnings=o?.warnings??[],this.inventoryLoaded=!0,this.inventoryLoading=!1},error:o=>{this.inventoryLoading=!1,this.notify.openAlertModal(o?.error?o.error:"An error has occurred",D.ERROR)}})}static \u0275fac=function(g){return new(g||r)(O(se),O(me),O(ae),O(de),O(ee))};static \u0275cmp=A({type:r,selectors:[["site-wizard"]],decls:308,vars:53,consts:[["id","HQPage","fusePerfectScrollbar","",1,"page-layout","simple","fullwidth"],["title","Site Wizard","matIcon","add_business",3,"hideBanner"],[1,"content","p-24",2,"min-height","800px",3,"ngStyle"],[3,"loaderId","fgsSize"],[1,"intro"],[1,"warning"],[1,"panel"],[1,"form-grid"],["type","text","placeholder","wvbb","maxlength","30",3,"ngModelChange","input","ngModel"],["type","text","placeholder","WV Baseball",3,"ngModelChange","ngModel"],["type","text","placeholder","wvbb",3,"ngModelChange","ngModel"],["type","text","placeholder","https://wvbaseball.
1net",3,"ngModelChange","ngModel"],["type","text","placeholder","West Virginia Baseball Inc.",3,"ngModelChange","ngModel"],["type","text","placeholder","WV","maxlength","2",3,"ngModelChange","ngModel"],["type","text","placeholder","West Virginia",3,"ngModelChange","ngModel"],["type","text","placeholder","WV, OH",3,"ngModelChange","ngModel"],["type","number",3,"ngModelChange","ngModel"],["type","text",3,"ngModelChange","ngModel"],[3,"ngModelChange","ngModel"],["value",""],[3,"value"],[3,"label"],["type","text","placeholder","acct_",3,"ngModelChange","ngModel"],["type","number","step","0.5",3,"ngModelChange","ngModel"],["type","text","placeholder","G-XXXXXXXXXX",3,"ngModelChange","ngModel"],["type","number","placeholder","123456789",3,"ngModelChange","ngModel"],["type","text","placeholder","Created automatically",3,"ngModelChange","ngModel"],["type","text","placeholder","2026","maxlength","4",3,"ngModelChange","ngModel"],[1,"hint"],[1,"toggle-grid"],[1,"toggle"],["type","text","placeholder","Clubs",3,"ngModelChange","ngModel"],["value","grid"],["value","list"],["value","card"],["value","true"],["value","false"],[1,"color-row"],["type","color",3,"ngModelChange","ngModel"],["type","text","maxlength","7",3,"ngModelChange","ngModel"],["type","email","placeholder","[email protected]",3,"ngModelChange","ngModel"],["type","text","placeholder","Default branch",3,"ngModelChange","ngModel"],["type","checkbox",3,"ngModelChange","ngModel"],[1,"action-bar"],["mat-flat-button","","color","primary",3,"click","disabled"],[1,"ml-4"],["mat-flat-button","",1,"create-btn",3,"disabled"],[1,"panel",3,"result-panel","incomplete-panel"],["mat-stroked-button","",3,"click","disabled"],["mat-stroked-button","",1,"ml-8",3,"click"],["mat-flat-button","",1,"create-btn",3,"click","disabled"],[1,"file-row"],[1,"file-content"],[1,"file-toggle",3,"click","disabled"],[1,"repo-chip"],[1,"file-path"],[1,"file-note"],[1,"missing-step"],[1,"incomplete-lead"],["target","_blank","rel","noopener",3,"href"],[1,"problems-toggle"],[1,"table-shell"],["mat-table","",1,"inventory-table",3,"dataSource"],["matColumnDef","siteKey"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","frontOverlay"],["matColumnDef","apiOverlay"],["matColumnDef","frontWorkflow"],["matColumnDef","apiWorkflow"],["matColumnDef","siteDoc"],["matColumnDef","status"],["mat-cell","",3,"status-problem",4,"matCellDef"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],["mat-cell",""],["mat-header-row",""],["mat-row",""]],template:function(g,n){g&1&&(e(0,"div",0),L(1,"page-header",1),e(2,"div",2),L(3,"ngx-ui-loader",3),e(4,"p",4),a(5," Creates everything a new website needs: the site files in both repos, the build workflows, and the site record. You will get a draft pull request in each repo to review \u2014 nothing goes live until the pull requests are merged and the site is deployed. "),t(),h(6,Ee,4,0,"p",5),e(7,"section",6)(8,"h2"),a(9,"1. Site details"),t(),e(10,"div",7)(11,"label")(12,"span"),a(13,"Site key "),e(14,"em"),a(15,"required"),t()(),e(16,"input",8),c("ngModelChange",function(i){return p(n.form.siteKey,i)||(n.form.siteKey=i),i}),E("input",function(){return n.normalizeKey()}),t(),e(17,"small"),a(18,"Short name used for folders, workflows and web addresses. Lowercase letters, numbers and dashes only. Cannot be changed later."),t()(),e(19,"label")(20,"span"),a(21,"Display name "),e(22,"em"),a(23,"required"),t()(),e(24,"input",9),c("ngModelChange",function(i){return p(n.form.displayName,i)||(n.form.displayName=i),i}),t(),e(25,"small"),a(26,"Shown in the browser tab, emails and footers."),t()(),e(27,"label")(28,"span"),a(29,"Association "),e(30,"em"),a(31,"required"),t()(),e(32,"input",10),c("ngModelChange",function(i){return p(n.form.association,i)||(n.form.association=i),i}),t(),e(33,"small"),a(34,"Groups sites for cross-site reports. Use an existing association to join one."),t()(),e(35,"label")(36,"span"),a(37,"Website address "),e(38,"em"),a(39,"required"),t()(),e(40,"input",11),c("ngModelChange",function(i){return p(n.form.domain,i)||
1(n.form.domain=i),i}),t(),e(41,"small"),a(42,"The full https:// address. Used for links, emails and search listings."),t()(),e(43,"label")(44,"span"),a(45,"Legal name "),e(46,"em"),a(47,"required"),t()(),e(48,"input",12),c("ngModelChange",function(i){return p(n.form.legalName,i)||(n.form.legalName=i),i}),t(),e(49,"small"),a(50,"Used in terms, privacy and printed documents."),t()(),e(51,"label")(52,"span"),a(53,"State code "),e(54,"em"),a(55,"required"),t()(),e(56,"input",13),c("ngModelChange",function(i){return p(n.form.stateCode,i)||(n.form.stateCode=i),i}),t()(),e(57,"label")(58,"span"),a(59,"State name "),e(60,"em"),a(61,"required"),t()(),e(62,"input",14),c("ngModelChange",function(i){return p(n.form.stateName,i)||(n.form.stateName=i),i}),t()(),e(63,"label")(64,"span"),a(65,"Event search states"),t(),e(66,"input",15),c("ngModelChange",function(i){return p(n.form.siteStatesText,i)||(n.form.siteStatesText=i),i}),t(),e(67,"small"),a(68,"Comma separated. Leave empty to use just the state code."),t()(),e(69,"label")(70,"span"),a(71,"Association number (asn)"),t(),e(72,"input",16),c("ngModelChange",function(i){return p(n.form.asn,i)||(n.form.asn=i),i}),t(),e(73,"small"),a(74,"Only for USA Softball sites. Used to match teams in bulk imports."),t()(),e(75,"label")(76,"span"),a(77,"Region"),t(),e(78,"input",17),c("ngModelChange",function(i){return p(n.form.region,i)||(n.form.region=i),i}),t(),e(79,"small"),a(80,"Only for USA Softball sites."),t()()()(),e(81,"section",6)(82,"h2"),a(83,"1.a Site settings"),t(),e(84,"h3"),a(85,"Relationships"),t(),e(86,"div",7)(87,"label")(88,"span"),a(89,"Parent site"),t(),e(90,"select",18),c("ngModelChange",function(i){return p(n.form.parentSite,i)||(n.form.parentSite=i),i}),e(91,"option",19),a(92,"None"),t(),y(93,Oe,2,3,"option",20,T),t(),e(95,"small"),a(96,"For sites that belong under another site. The parent's settings file gets this site added to its child list in the same pull request."),t()(),e(97,"label")(98,"span"),a(99,"Club"),t(),e(100,"select",18),c("ngModelChange",function(i){return p(n.form.clubID,i)||(n.form.clubID=i),i}),e(101,"option",19),a(102,"None"),t(),y(103,Te,3,1,"optgroup",21,Pe),t(),e(105,"small"),a(106,"Only for club sites. Picking a club also marks this as a club site on both the website and the API."),t()()(),e(107,"h3"),a(108,"Payments"),t(),e(109,"div",7)(110,"label")(111,"span"),a(112,"Stripe account"),t(),e(113,"input",22),c("ngModelChange",function(i){return p(n.form.stripeAccount,i)||(n.form.stripeAccount=i),i}),t(),e(114,"small"),a(115,"The site's own Stripe account. Leave empty if it is not connected yet."),t()(),e(116,"label")(117,"span"),a(118,"Copy Stripe keys from"),t(),e(119,"select",18),c("ngModelChange",function(i){return p(n.form.stripeKeysFromSite,i)||(n.form.stripeKeysFromSite=i),i}),e(120,"option",19),a(121,"Default site"),t(),y(122,ze,2,2,"option",20,T),t(),e(124,"small"),a(125,"The platform keys are copied as a matched pair from an existing site, so the website and API always agree."),t()(),e(126,"label")(127,"span"),a(128,"Team registration fee"),t(),e(129,"input",23),c("ngModelChange",function(i){return p(n.form.feeTeamRegistration,i)||(n.form.feeTeamRegistration=i),i}),t()(),e(130,"label")(131,"span"),a(132,"Schedule fee"),t(),e(133,"input",23),c("ngModelChange",function(i){return p(n.form.feeSchedule,i)||(n.form.feeSchedule=i),i}),t()(),e(134,"label")(135,"span"),a(136,"Individual registration fee"),t(),e(137,"input",23),c("ngModelChange",function(i){return p(n.form.feeIndividualRegistration,i)||(n.form.feeIndividualRegistration=i),i}),t()(),e(138,"label")(139,"span"),a(140,"Individual event entry fee"),t(),e(141,"input",23),c("ngModelChange",function(i){return p(n.form.feeIndividualEventEntry,i)||(n.form.feeIndividualEventEntry=i),i}),t()()(),e(142,"h3"),a(143,"Analytics & logging"),t(),e(144,"div",7)(145,"label")(146,"span"),a(147,"Google Analytics measurement ID"),t(),e(148,"input",24),c("ngModelChange",function(i){return p(n.form.gaKey,i)||(n.form.gaKey=i),i}),t(),e(149,"small"),a(150,"Used by the website. Leave empty if the site does not have one yet."),t()(),e(151,"label")(152,"span"),a(153,"Google Analytics property ID"),t(),e(154,"input",25),c("ngModelChange",function(i){return p(n.form.ga4PropertyID,i)||(n.form.ga4PropertyID=i),i}),t(),e(155,"small"),a(156,"The numeric ID the API uses to read visitor stats. Different from the measurement ID above."),t()(),e(157,"label")(158,"span"),a(159,"Logster key"),t(),e(160,"input",26),c("ngModelChange",function(i){return p(n.form.logsterKey,i)||(n.form.logsterKey=i),i}),t(),e(161,"small"),h(162,Ie,1,0)(163,Le,1,0),t()(),e(164,"label")(165,"span"),a(166,"Umpire season override"),t(),e(167,"input",27),c("ngModelChange",function(i){return p(n.form.umpireSeasonOverride,i)||(n.form.umpireSeasonOverride=i),i}),t(),e(168,"small"),a(169,"Only when umpire registration should use a different season year."),t()(),e(170,"label")(171,"span"),a(172,"MBC i
1dentifier"),t(),e(173,"input",17),c("ngModelChange",function(i){return p(n.form.mbcIdentifier,i)||(n.form.mbcIdentifier=i),i}),t(),e(174,"small"),a(175,"Only for sites that use the MBC integration."),t()()(),e(176,"h3"),a(177,"Site settings"),t(),e(178,"p",28),a(179,"These go in the API settings file. Only the ones you switch on are written."),t(),e(180,"div",29),y(181,De,6,3,"label",30,T),t(),e(183,"h3"),a(184,"Website settings"),t(),e(185,"p",28),a(186,"These go in the website's environment file."),t(),e(187,"div",7)(188,"label")(189,"span"),a(190,"Clubs page name"),t(),e(191,"input",31),c("ngModelChange",function(i){return p(n.form.clubsPageName,i)||(n.form.clubsPageName=i),i}),t(),e(192,"small"),a(193,"What clubs are called on this site, e.g. Organizations or Associations."),t()(),e(194,"label")(195,"span"),a(196,"Event search layout"),t(),e(197,"select",18),c("ngModelChange",function(i){return p(n.form.eventSearchDisplayMode,i)||(n.form.eventSearchDisplayMode=i),i}),e(198,"option",19),a(199,"Default"),t(),e(200,"option",32),a(201,"Grid"),t(),e(202,"option",33),a(203,"List"),t(),e(204,"option",34),a(205,"Cards"),t()()(),e(206,"label")(207,"span"),a(208,"Youth1st section"),t(),e(209,"select",18),c("ngModelChange",function(i){return p(n.form.isYouth1stEnvironmentVisible,i)||(n.form.isYouth1stEnvironmentVisible=i),i}),e(210,"option",19),a(211,"Default"),t(),e(212,"option",35),a(213,"Show"),t(),e(214,"option",36),a(215,"Hide"),t()()(),e(216,"label")(217,"span"),a(218,"WhatsApp group name"),t(),e(219,"input",17),c("ngModelChange",function(i){return p(n.form.whatsappGroupName,i)||(n.form.whatsappGroupName=i),i}),t()(),e(220,"label")(221,"span"),a(222,"WhatsApp group link"),t(),e(223,"input",17),c("ngModelChange",function(i){return p(n.form.whatsappGroupURL,i)||(n.form.whatsappGroupURL=i),i}),t()()(),e(224,"div",29),y(225,Ae,6,3,"label",30,T),t(),e(227,"h3"),a(228,"Compliance"),t(),e(229,"div",29),y(230,He,5,2,"label",30,T),t()(),e(232,"section",6)(233,"h2"),a(234,"2. Branding"),t(),e(235,"div",7)(236,"label")(237,"span"),a(238,"Primary color"),t(),e(239,"span",37)(240,"input",38),c("ngModelChange",function(i){return p(n.form.primaryColor,i)||(n.form.primaryColor=i),i}),t(),e(241,"input",39),c("ngModelChange",function(i){return p(n.form.primaryColor,i)||(n.form.primaryColor=i),i}),t()(),e(242,"small"),a(243,"Main color for menus, buttons and emails. All shades are generated from it."),t()(),e(244,"label")(245,"span"),a(246,"Accent color"),t(),e(247,"span",37)(248,"input",38),c("ngModelChange",function(i){return p(n.form.accentColor,i)||(n.form.accentColor=i),i}),t(),e(249,"input",39),c("ngModelChange",function(i){return p(n.form.accentColor,i)||(n.form.accentColor=i),i}),t()()()(),e(250,"p",28),a(251,"The favicon starts as the standard one \u2014 replace it later in the pull request or a follow-up change."),t()(),e(252,"section",6)(253,"h2"),a(254,"3. Contact & server size"),t(),e(255,"div",7)(256,"label")(257,"span"),a(258,"Owner first name"),t(),e(259,"input",17),c("ngModelChange",function(i){return p(n.form.ownerFirst,i)||(n.form.ownerFirst=i),i}),t()(),e(260,"label")(261,"span"),a(262,"Owner last name"),t(),e(263,"input",17),c("ngModelChange",function(i){return p(n.form.ownerLast,i)||(n.form.ownerLast=i),i}),t()(),e(264,"label")(265,"span"),a(266,"Owner email "),e(267,"em"),a(268,"required"),t()(),e(269,"input",40),c("ngModelChange",function(i){return p(n.form.ownerEmail,i)||(n.form.ownerEmail=i),i}),t()(),e(270,"label")(271,"span"),a(272,"API server size"),t(),e(273,"select",18),c("ngModelChange",function(i){return p(n.form.deploymentFile,i)||(n.form.deploymentFile=i),i}),y(274,Be,2,2,"option",20,ve),t(),e(276,"small"),a(277,"Standard fits most new sites. Pick a bigger size only for high-traffic associations."),t()(),e(278,"label")(279,"span"),a(280,"Template branch"),t(),e(281,"input",41),c("ngModelChange",function(i){return p(n.form.templateRef,i)||(n.form.templateRef=i),i}),t(),e(282,"small"),a(283,"For testing only. Leave empty to use the live templates; set a branch name to try a template change before it is merged."),t()()(),e(284,"div",29)(285,"label",30)(286,"input",42),c("ngModelChange",function(i){return p(n.form.updateExisting,i)||(n.form.updateExisting=i),i}),t(),e(287,"span")(288,"strong"),a(289,"Update the site that already exists"),t(),e(290,"small"),a(291," Use this to change a site you created before. Its files are rebuilt from this form \u2014 fill in every field the way the site should end up, not just what you are changing. Settings this form does not cover are kept in the API file; the website file is rebuilt, and the preview lists anything that would be removed. "),t()()()()(),e(292,"div",43)(293,"button",44),E("click",function(){return n.loadPreview()}),e(294,"mat-icon"),a(295,"preview"),t(),e(296,"span",45),a(297,"Preview files"),t()(),h(298,Ne,5,2,"button",46),t(),h(299,Ke,11,1,"section",6),h(300,ot,14,7,"section",47),e(301,"section",6)(302,"button",48),E("click",function(){return n.toggleInventory()}),e(303,"mat-icon"),a(304,"fact_check"),t(),e(305,"span",45),a(306),t()(),h(307,xt,6,2),t()()()),g&2&&(l(),_("hideBanner",!0),l(),_("ngStyle",N(51,xe,n.fuseConfig.pageWidth&&!n.isMobile?n.fuseConfig.pageWidth+"%":"
1100%")),l(),_("loaderId","loader-site-wizard")("fgsSize",75),l(3),C(n.optionsFailed?6:-1),l(10),m("ngModel",n.form.siteKey),l(8),m("ngModel",n.form.displayName),l(8),m("ngModel",n.form.association),l(8),m("ngModel",n.form.domain),l(8),m("ngModel",n.form.legalName),l(8),m("ngModel",n.form.stateCode),l(6),m("ngModel",n.form.stateName),l(4),m("ngModel",n.form.siteStatesText),l(6),m("ngModel",n.form.asn),l(6),m("ngModel",n.form.region),l(12),m("ngModel",n.form.parentSite),l(3),S(n.siteOptions),l(7),m("ngModel",n.form.clubID),l(3),S(n.clubSites),l(10),m("ngModel",n.form.stripeAccount),l(6),m("ngModel",n.form.stripeKeysFromSite),l(3),S(n.siteOptions),l(7),m("ngModel",n.form.feeTeamRegistration),l(4),m("ngModel",n.form.feeSchedule),l(4),m("ngModel",n.form.feeIndividualRegistration),l(4),m("ngModel",n.form.feeIndividualEventEntry),l(7),m("ngModel",n.form.gaKey),l(6),m("ngModel",n.form.ga4PropertyID),l(6),m("ngModel",n.form.logsterKey),l(2),C(n.logsterMintConfigured?162:163),l(5),m("ngModel",n.form.umpireSeasonOverride),l(6),m("ngModel",n.form.mbcIdentifier),l(8),S(n.apiFlagDefs),l(10),m("ngModel",n.form.clubsPageName),l(6),m("ngModel",n.form.eventSearchDisplayMode),l(12),m("ngModel",n.form.isYouth1stEnvironmentVisible),l(10),m("ngModel",n.form.whatsappGroupName),l(4),m("ngModel",n.form.whatsappGroupURL),l(2),S(n.frontFlagDefs),l(5),S(n.complianceDefs),l(10),m("ngModel",n.form.primaryColor),l(),m("ngModel",n.form.primaryColor),l(7),m("ngModel",n.form.accentColor),l(),m("ngModel",n.form.accentColor),l(10),m("ngModel",n.form.ownerFirst),l(4),m("ngModel",n.form.ownerLast),l(6),m("ngModel",n.form.ownerEmail),l(4),m("ngModel",n.form.deploymentFile),l(),S(n.deploymentFiles),l(7),m("ngModel",n.form.templateRef),l(5),m("ngModel",n.form.updateExisting),l(7),_("disabled",n.previewing||n.creating),l(5),C(n.preview?298:-1),l(),C(n.preview?299:-1),l(),C(n.result?300:-1),l(2),_("disabled",n.inventoryLoading),l(4),u(n.showInventory?"Hide site health check":"Site health check"),l(),C(n.showInventory?307:-1))},dependencies:[q,Q,$,Y,J,U,j,V,X,K,Z,G,le,re,ce,pe,ne,te,oe,ie,Me,ge,fe,ye,_e,ue,Se,he,Ce,be,we],styles:["#HQPage[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%]{max-width:900px;color:#475569;margin:0 0 16px}#HQPage[_ngcontent-%COMP%] .panel[_ngcontent-%COMP%]{background:#fff;border:1px solid #e3e8ef;border-radius:10px;padding:16px 20px;margin:0 0 16px}#HQPage[_ngcontent-%COMP%] .panel[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:16px;font-weight:600;margin:0 0 12px}#HQPage[_ngcontent-%COMP%] .panel[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:14px;font-weight:600;margin:16px 0 8px}#HQPage[_ngcontent-%COMP%] .form-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px 18px}#HQPage[_ngcontent-%COMP%] .form-grid[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}#HQPage[_ngcontent-%COMP%] .form-grid[_ngcontent-%COMP%] label[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]:first-child{font-weight:600;font-size:12px}#HQPage[_ngcontent-%COMP%] .form-grid[_ngcontent-%COMP%] label[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]:first-child em[_ngcontent-%COMP%]{color:#dc2626;font-style:normal;font-weight:400;margin-left:4px}#HQPage[_ngcontent-%COMP%] .form-grid[_ngcontent-%COMP%] label[_ngcontent-%COMP%] input[_ngcontent-%COMP%], #HQPage[_ngcontent-%COMP%] .form-grid[_ngcontent-%COMP%] label[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{border:1px solid #cbd5e1;border-radius:6px;padding:7px 10px;font-size:13px}#HQPage[_ngcontent-%COMP%] .form-grid[_ngcontent-%COMP%] label[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{color:#64748b;font-size:11px;line-height:1.35}#HQPage[_ngcontent-%COMP%] .form-grid[_ngcontent-%COMP%] .color-row[_ngcontent-%COMP%]{display:flex;gap:8px;align-items:center}#HQPage[_ngcontent-%COMP%] .form-grid[_ngcontent-%COMP%] .color-row[_ngcontent-%COMP%] input[type=color][_ngcontent-%COMP%]{width:44px;height:34px;padding:2px}#HQPage[_ngcontent-%COMP%] .form-grid[_ngcontent-%COMP%] .color-row[_ngcontent-%COMP%] input[type=text][_ngcontent-%COMP%]{width:100px}#HQPage[_ngcontent-%COMP%] .toggle-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:8px 18px}#HQPage[_ngcontent-%COMP%] .toggle-grid[_ngcontent-%COMP%] .toggle[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:8px;font-size:13px;
1cursor:pointer}#HQPage[_ngcontent-%COMP%] .toggle-grid[_ngcontent-%COMP%] .toggle[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{margin-top:3px}#HQPage[_ngcontent-%COMP%] .toggle-grid[_ngcontent-%COMP%] .toggle[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-weight:600;display:block}#HQPage[_ngcontent-%COMP%] .toggle-grid[_ngcontent-%COMP%] .toggle[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{color:#64748b;font-size:11px;line-height:1.35;display:block}#HQPage[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{color:#64748b;font-size:12px;margin:10px 0 0}#HQPage[_ngcontent-%COMP%] .action-bar[_ngcontent-%COMP%]{display:flex;gap:10px;margin:0 0 16px}#HQPage[_ngcontent-%COMP%] .action-bar[_ngcontent-%COMP%] .create-btn[_ngcontent-%COMP%]{background:#16a34a;color:#fff}#HQPage[_ngcontent-%COMP%] .warning[_ngcontent-%COMP%]{--mat-button-outlined-outline-color: var(--rp-navy-600);background:#fef3c7;border:1px solid #fcd34d;border-radius:6px;padding:8px 12px;font-size:13px;margin:0 0 8px}#HQPage[_ngcontent-%COMP%] .file-row[_ngcontent-%COMP%]{border-bottom:1px solid #f1f5f9}#HQPage[_ngcontent-%COMP%] .file-row[_ngcontent-%COMP%] .file-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;background:none;border:none;padding:6px 0;cursor:pointer;text-align:left;font-size:13px}#HQPage[_ngcontent-%COMP%] .file-row[_ngcontent-%COMP%] .file-toggle[_ngcontent-%COMP%]:disabled{cursor:default}#HQPage[_ngcontent-%COMP%] .file-row[_ngcontent-%COMP%] .repo-chip[_ngcontent-%COMP%]{background:#1a3668;color:#fff;border-radius:4px;padding:1px 8px;font-size:11px}#HQPage[_ngcontent-%COMP%] .file-row[_ngcontent-%COMP%] .repo-chip.api[_ngcontent-%COMP%]{background:#6d28d9}#HQPage[_ngcontent-%COMP%] .file-row[_ngcontent-%COMP%] .file-path[_ngcontent-%COMP%]{font-family:monospace}#HQPage[_ngcontent-%COMP%] .file-row[_ngcontent-%COMP%] .file-note[_ngcontent-%COMP%]{color:#94a3b8;font-size:11px}#HQPage[_ngcontent-%COMP%] .file-content[_ngcontent-%COMP%]{background:#0f172a;color:#e2e8f0;border-radius:8px;padding:12px 16px;font-size:12px;overflow-x:auto;max-height:420px;overflow-y:auto}#HQPage[_ngcontent-%COMP%] .incomplete-panel[_ngcontent-%COMP%]{border-color:#fcd34d;background:#fffbeb}#HQPage[_ngcontent-%COMP%] .incomplete-panel[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{background:#fef3c7;padding:1px 6px;border-radius:4px}#HQPage[_ngcontent-%COMP%] .incomplete-lead[_ngcontent-%COMP%]{margin:0 0 10px}#HQPage[_ngcontent-%COMP%] .missing-step[_ngcontent-%COMP%]{color:#b45309;font-weight:600}#HQPage[_ngcontent-%COMP%] .result-panel[_ngcontent-%COMP%]{border-color:#86efac;background:#f0fdf4}#HQPage[_ngcontent-%COMP%] .result-panel[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{background:#dcfce7;padding:1px 6px;border-radius:4px}#HQPage[_ngcontent-%COMP%] .problems-toggle[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;font-size:13px;margin:10px 0}#HQPage[_ngcontent-%COMP%] .table-shell[_ngcontent-%COMP%]{border:1px solid #e3e8ef;border-radius:10px;overflow:auto}#HQPage[_ngcontent-%COMP%] table.mat-mdc-table[_ngcontent-%COMP%]{width:100%;background:#fff}#HQPage[_ngcontent-%COMP%] table.mat-mdc-table[_ngcontent-%COMP%] th.mat-mdc-header-cell[_ngcontent-%COMP%]{background:#0a2540;color:#fff;font-weight:600}#HQPage[_ngcontent-%COMP%] .status-problem[_ngcontent-%COMP%]{color:#b45309;font-weight:600}"]})}return r})();export{Kt as SiteWizardComponent};
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.