1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/venue-map-D2QbkUUa.js","assets/index-DPvlhSbR.js","assets/index-DB-DjVx-.css","assets/leaflet-4TOEcdFm.js","assets/leaflet-CIGW-MKW.css"])))=>i.map(i=>d[i]); 2import{j as e,J as P,b as j,M as S,aj as R,c as q,gT as V,r as u,a as E,L as y,S as v,B as O,i as T,A as G,V as w,_ as I,gU as D}from"./index-DPvlhSbR.js";import{B as H}from"./breadcrumbs-DTLw04lH.js";import{F as z}from"./faq-section-CeFhW6zY.js";import{z as K}from"./builders-BQdscFNn.js";import{i as U,C as W}from"./city-load-error-BKiBxDAj.js";import{I as J}from"./info-h0bJasGz.js";import{A as M}from"./arrow-left-BTh5i4r5.js";import"./operator-profiles-CoCD50mO.js";import"./refresh-cw-C0ECjCk7.js";function Q(s){return s==null||!Number.isFinite(s)?null:`About ${s.toFixed(1)} mi straight-line from the nearest listed Topgolf`}function Z({row:s,local:d}){const r=[];s.numBays!=null&&r.push(["Bays",String(s.numBays)]),s.setting&&r.push(["Setting",s.setting.replace(/_/g," ")]),s.tech.length&&r.push(["Simulator",s.tech.join(", ")]),s.services.length&&r.push(["Services",s.services.join(", ")]),s.amenities.length&&r.push(["Amenities",s.amenities.join(", ")]);const a=Q(s.distanceMiles);return e.jsxs("li",{className:"rounded-xl border bg-card p-5","data-testid":`tg-alt-${s.slug}`,children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-2",children:[e.jsx("h4",{className:"text-base font-bold",children:e.jsx(j,{href:`/venues/${s.slug}/`,className:"hover:text-primary hover:underline",children:s.name})}),e.jsx("span",{className:"rounded-full border bg-background px-2.5 py-0.5 text-xs font-medium",children:d?"Same city":"Nearby city"})]}),e.jsxs("p",{className:"mt-1 flex items-center gap-1.5 text-sm text-muted-foreground",children:[e.jsx(S,{className:"h-4 w-4 shrink-0 text-primary","aria-hidden":"true"}),s.city,", ",s.state]}),a&&e.jsxs("p",{className:"mt-1 flex items-center gap-1.5 text-sm text-muted-foreground",children:[e.jsx(R,{className:"h-4 w-4 shrink-0 text-primary","aria-hidden":"true"}),a]}),r.length>0?e.jsx("dl",{className:"mt-3 grid gap-y-1.5 text-sm",children:r.map(([c,k])=>e.jsxs("div",{className:"flex flex-col gap-0.5 sm:flex-row sm:gap-4",children:[e.jsx("dt",{className:"shrink-0 text-muted-foreground sm:w-24",children:c}),e.jsx("dd",{className:"font-medium",children:k})]},c))}):e.jsx("p",{className:"mt-3 text-sm text-muted-foreground",children:"No bays, technology or services listed with us yet."})]})}function L({id:s,heading:d,rows:r,local:a}){return r.length===0?null:e.jsxs("div",{className:"mt-6",children:[e.jsx("h3",{id:s,className:"text-lg font-bold mb-3",children:d}),e.jsx("ul",{"aria-labelledby":s,className:"grid gap-4 md:grid-cols-2",children:r.map(c=>e.jsx(Z,{row:c,local:a},c.slug))})]})}function X({comparison:s,cityName:d}){const r=s.localAlternatives.length+s.nearbyAlternatives.length;return e.jsxs("div",{className:"container mx-auto px-4 py-12 max-w-5xl",children:[e.jsxs("section",{"aria-labelledby":"tg-facts",className:"mb-10 rounded-2xl border bg-card p-6",children:[e.jsx("h2",{id:"tg-facts",className:"text-xl font-bold mb-3",children:"What to know about Topgolf here"}),e.jsx("ul",{className:"space-y-2",children:s.topgolfFacts.map(a=>e.jsxs("li",{className:"flex gap-3 text-sm text-muted-foreground leading-relaxed",children:[e.jsx(J,{className:"mt-0.5 h-4 w-4 shrink-0 text-primary","aria-hidden":"true"}),e.jsx("span",{children:a})]},a))})]}),e.jsxs("section",{"aria-labelledby":"tg-compare",className:"mb-10",children:[e.jsx("h2",{id:"tg-compare",className:"text-2xl font-bold tracking-tight mb-4",children:"Topgolf vs. a golf simulator"}),e.jsx("div",{className:"grid gap-4 md:grid-cols-3",children:s.comparisonPoints.map(a=>e.jsxs("div",{className:"rounded-xl border p-5",children:[e.jsx("h3",{className:"font-bold",children:a.heading}),e.jsx("p",{className:"mt-2 text-sm text-muted-foreground leading-relaxed",children:a.body})]},a.heading))})]}),e.jsxs("section",{"aria-labelledby":"tg-alts",className:"mb-10",children:[e.jsxs("h2",{id:"tg-alts",className:"text-2xl font-bold tracking-tight mb-1",children:["Simulator alternatives in and near ",d]}),r===0?e.jsxs("p",{className:"text-sm text-muted-foreground",children:["No simulator alternatives in ",d," or within 25 miles are listed yet."]}):e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Order is not a quality ranking. Distances are approximate straight-line miles, not driving distance."}),e.jsx(L,{id:"tg-local",heading:`In ${d}`,rows:s.localAlternatives,local:!0}),e.jsx(L,{id:"tg-nearby",heading:"Nearby cities (within 25 mi)",rows:s.nearbyAlternatives,local:!1})]})]}),e.jsxs("section",{"aria-labelledby":"tg-method",className:"rounded-2xl border bg-card p-6",children:[e.jsx("h2",{id:"tg-method",className:"text-lg font-bold mb-2",children:"How this comparison is built"}),e.jsxs("p",{className:"flex gap-3 text-sm text-muted-foreground leading-relaxed",children:[e.jsx(P,{className:"mt-0.5 h-5 w-5 shrink-0 text-primary","aria-hidden":"true"}),e.jsx("span",{children:s.methodology})]})]})]})}const Y=u.lazy(()=>I(()=>import("./venue-map-D2QbkUUa.js"),__vite__mapDeps([0,1,2,3,4])));function de(){const[,s]=q("/cities/:citySlug/brands/:brandSlug"),d=s?.citySlug||"",r=s?.brandSlug||"",{data:a,isLoading:c,isFetching:k,error:h,refetch:_}=V(d,r,{query:{enabled:!!d&&!!r,queryKey:D(d,r)}}),l=u.useMemo(()=>a?.venues??[],[a]),i=a?.brand.name??null,g=a?.brand.slug??r,m=g==="topgolf"&&l.length>0?a?.topgolfComparison??null:null,B=u.useMemo(()=>(a?.cityBrands??[]).filter(t=>t.slug!==g),[a,g]),b=u.useMemo(()=>l.filter(t=>t.lat!=null&&t.lng!=null),[l]),p=u.useMemo(()=>(a?.courses??[]).filter(t=>t.lat!=null&&t.lng!=null),[a]),x=u.useMemo(()=>a&&i?K({city:{name:a.city.name,state:a.city.state,slug:a.city.slug},brand:{name:i,slug:g},venues:l,origin:window.location.origin,comparison:m}):null,[a,i,g,l,m]),$=x?.faqs??[],o=x?.stats??null,f=x?.retail??null,N=l.length>0,F=U(h);
2if(E({title:x?.title??(c?"Loading | Golf Sim Finder":h&&!F?"Page Temporarily Unavailable | Golf Sim Finder":"Not Found | Golf Sim Finder"),description:x?.description??"",url:x?.canonical,type:x?.ogType,jsonLd:x?.jsonLd,robots:c?null:h||!a||!N?"noindex, follow":void 0}),c)return e.jsx(y,{children:e.jsxs("div",{className:"container mx-auto px-4 py-8",children:[e.jsx(v,{className:"h-8 w-64 mb-4"}),e.jsx(v,{className:"h-6 w-96 mb-12"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:[1,2,3].map(t=>e.jsx(v,{className:"aspect-[4/3] rounded-xl"},t))})]})});if(h&&!F)return e.jsx(y,{children:e.jsx(W,{error:h,onRetry:()=>{_()},isRetrying:k})});if(h||!a)return e.jsx(y,{children:e.jsxs("div",{className:"container mx-auto px-4 py-20 text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"City Not Found"}),e.jsx("p",{className:"text-muted-foreground mb-8",children:"We couldn't find the city you're looking for."}),e.jsxs(j,{href:"/",className:"inline-flex items-center text-primary font-medium hover:underline",children:[e.jsx(M,{className:"w-4 h-4 mr-2"})," Back to Home"]})]})});const n=a.city,C=l.filter(t=>t.premium||t.featured),A=l.filter(t=>!t.premium&&!t.featured);return e.jsxs(y,{children:[e.jsx("div",{className:"bg-card border-b",children:e.jsxs("div",{className:"container mx-auto px-4 py-16",children:[e.jsx("div",{className:"mb-4",children:e.jsx(H,{items:[{name:"Home",href:"/"},{name:`${n.name}, ${n.state}`,href:`/cities/${n.slug}`},{name:i||"Brand"}]})}),e.jsxs(j,{href:`/cities/${n.slug}`,className:"inline-flex items-center text-sm text-muted-foreground hover:text-foreground mb-6 transition-colors",children:[e.jsx(M,{className:"w-4 h-4 mr-1.5"})," All venues in ",n.name]}),e.jsxs("div",{className:"flex items-center gap-4 mb-4",children:[e.jsx("div",{className:"w-14 h-14 rounded-xl bg-primary/10 text-primary flex items-center justify-center shrink-0",children:e.jsx(O,{className:"w-7 h-7"})}),e.jsx("h1",{className:"text-4xl md:text-5xl font-bold tracking-tight",children:m?`Topgolf ${n.name} and Nearby Simulator Alternatives`:`${i||"Brand"} Locations in ${n.name}, ${n.state}`})]}),e.jsxs("p",{className:"text-lg text-muted-foreground flex items-center gap-2",children:[e.jsx(S,{className:"w-5 h-5 text-primary"}),l.length," ",l.length===1?"location":"locations"," in"," ",n.name]}),m&&e.jsx("p",{className:"mt-4 max-w-3xl text-muted-foreground leading-relaxed",children:m.intro}),f&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"mt-4 max-w-3xl text-muted-foreground leading-relaxed",children:f.intro}),f.note&&e.jsxs("p",{className:"mt-3 max-w-3xl text-sm text-muted-foreground",children:[f.note," ",e.jsx("a",{href:f.source,target:"_blank",rel:"noopener noreferrer",className:"underline",children:"Official practice-center information"})]})]}),o&&N&&e.jsxs("div",{className:"mt-6 flex flex-wrap gap-2",children:[e.jsxs("span",{className:"inline-flex items-center rounded-full bg-background border px-3 py-1.5 text-sm font-medium",children:[l.length," ",l.length===1?"location":"locations"]}),o.technologies.length>0&&e.jsxs("span",{className:"inline-flex items-center rounded-full bg-background border px-3 py-1.5 text-sm font-medium",children:[o.technologies.length," ",o.technologies.length===1?"simulator brand":"simulator brands"]}),o.minPrice!=null&&e.jsx("span",{className:"inline-flex items-center rounded-full bg-background border px-3 py-1.5 text-sm font-medium",children:o.minPrice===o.maxPrice?`~${T(o.minPrice,o.priceCurrency)}/hr`:`From ${T(o.minPrice,o.priceCurrency)}/hr`}),o.totalBays!=null&&e.jsxs("span",{className:"inline-flex items-center rounded-full bg-background border px-3 py-1.5 text-sm font-medium",children:[o.totalBays," total ",o.totalBays===1?"bay":"bays"]})]}),i&&e.jsx("div",{className:"mt-6",children:e.jsxs(j,{href:`/brands/${g}`,className:"inline-flex items-center text-sm font-medium text-primary hover:underline",children:["See ",i," locations everywhere",e.jsx(G,{className:"w-3.5 h-3.5 ml-1"})]})})]})}),b.length>0&&e.jsxs("div",{className:"container mx-auto px-4 pt-12",children:[e.jsxs("h2",{className:"text-lg font-bold mb-1",children:[i||"Locations"," in ",n.name," on the map"]}),e.jsxs("p",{className:"text-sm text-muted-foreground mb-4",children:[m?"Topgolf locations":f?`${i||"Brand"} golf store locations`:`${i||"Brand"} indoor golf simulator locations`,p.length>0?" and nearby golf courses":"","."]}),e.jsx("div",{className:"relative h-[400px] min-h-[300px] w-full overflow-hidden rounded-xl border bg-muted",children:e.jsx(u.Suspense,{fallback:e.jsx(v,{className:"h-full w-full"}),children:e.jsx(Y,{venues:b,courses:p,fitToVenues:!0,clickToZoom:!0})})}),e.jsxs("p",{className:"mt-2 text-xs text-muted-foreground flex flex-wrap items-center gap-1.5",children:[e.jsx(S,{className:"w-3.5 h-3.5 text-primary/70","aria-hidden":"true"}),"Showing ",b.length," ",b.length===1?"location":"locations",p.length>0?` and ${p.length} nearby ${p.length===1?"course":"courses"}`:"",". Map data ©"," ",e.jsx("a",{href:"https://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer",className:"underline hover:text-foreground",children:"OpenStreetMap"})," ","contributors, tiles ©"," ",e.jsx("a",{href:"https://carto.com/attributions",target:"_blank",rel:"noopener noreferrer",className:"underline hover:text-foreground",children:"CARTO"}),"."]})]}),e.jsxs("div",{className:"container mx-auto px-4 py-12",children:[l.length===0?e.jsxs("div",{className:"text-center py-20 bg-card rounded-xl border border-dashed",children:[e.jsx("h3",{className:"text-lg font-medium",children:"No locations yet"}),e.jsxs("p",{className:"text-muted-foreground",children:["No ",i||"brand"," locations in ",n.name," are listed yet."]})]}):m?e.jsxs(e.Fragment,{children:[e.jsxs("h2",{className:"text-2xl font-bold mb-6",children:["Topgolf locations in ",n.name]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:l.map(t=>e.jsx(w,{venue:t},t.id))})]}):C.length>0?e.jsxs(e.Fragment,{children:[e.jsxs("h2",{className:"text-2xl font-bold mb-6",children:["Featured ",i," locations in ",n.name]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:C.map(t=>e.jsx(w,{venue:t},t.id))}),A.length>0&&e.jsxs(e.Fragment,{children:[e.jsxs("h2",{className:"text-2xl font-bold mt-12 mb-6",children:["More ",i," locations in ",n.name]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:A.map(t=>e.jsx(w,{venue:t},t.id))})]})]}):e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:l.map(t=>e.jsx(w,{venue:t},t.id))}),N&&B.length>0&&e.jsxs("div",{className:"mt-12 bg-card border rounded-xl p-6",children:[e.jsxs("h2",{className:"text-lg font-bold mb-1",children:["Other brands in ",n.name]}),e.jsxs("p",{className:"text-sm text-muted-foreground mb-4",children:["Browse ",n.name," indoor golf by franchise brand."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:B.map(t=>e.jsxs(j,{href:`/cities/${n.slug}/brands/${t.slug}`,className:"inline-flex items-center gap-2 rounded-full bg-background border px-3 py-1.5 text-sm font-medium hover:border-primary/40 transition-colors",children:[e.jsx("span",{children:t.name}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[t.venueCount," ",t.venueCount===1?"location":"locations"]})]},t.slug))})]})]}),m&&e.jsx(X,{comparison:m,cityName:n.name}),N&&$.length>0&&e.jsx(z,{heading:`${i} in ${n.name}: frequently asked questions`,faqs:$})]})}
2export{de as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.