PageSourceSearch

https://golfsim.co/assets/club-gapping-calculator-l_aej92i.js

js golfsim.co collected 2026-10-01 23:43:50 UTC 16,798 bytes, 1 lines download raw bytes

1import{r as j,a as F,j as e,L as q,b as M,A as R}from"./index-DPvlhSbR.js";import{B as W}from"./breadcrumbs-DTLw04lH.js";import{T as B}from"./trash-2-BtWwPzog.js";import{P as U}from"./plus-Cxirf-vY.js";import"./builders-BQdscFNn.js";import"./operator-profiles-CoCD50mO.js";const D="/club-gapping-calculator",S="Club Gapping & Carry Distance Calculator",O="Club Gapping Calculator",H="Turn your launch-monitor carry numbers into a club-by-club gap analysis: spot yardage gaps and overlaps in your bag and see where a fitting could help.",A=10,T=15;function G(r){return Number.isFinite(r)?r:0}function p(r){return Math.round(G(r))}function Q(r){const t=Math.max(0,G(r.targetMinGap)),i=Math.max(0,G(r.targetMaxGap)),c=Math.min(t,i),l=Math.max(t,i),n=r.clubs.map(s=>({label:s.label.trim(),carryYards:s.carryYards==null?Number.NaN:G(s.carryYards)})).filter(s=>s.label.length>0&&s.carryYards>0).map(s=>({label:s.label,carryYards:s.carryYards})),u=[];let m=0,N=0,v=0,f=0;for(let s=0;s<n.length-1;s++){const g=n[s],Y=n[s+1],w=g.carryYards-Y.carryYards;let y;w<=0?(y="overlap",f++):w<c?(y="tight",v++):w>l?(y="large",N++):(y="on_target",m++),u.push({fromLabel:g.label,toLabel:Y.label,fromCarry:g.carryYards,toCarry:Y.carryYards,gapYards:w,status:y})}const o=n.map(s=>s.carryYards),b=o.length>0?Math.max(...o):null,x=o.length>0?Math.min(...o):null,h=b!=null&&x!=null?b-x:null,a=h!=null&&u.length>0?h/u.length:null,d=z(u,c,l);return{analyzedClubs:n,gaps:u,longestCarry:b,shortestCarry:x,totalSpread:h,averageGap:a,onTargetCount:m,largeCount:N,tightCount:v,overlapCount:f,suggestions:d}}function z(r,t,i){if(r.length===0)return[];const c=`${p(t)}–${p(i)} yd`,l=[];for(const n of r)n.status==="large"?l.push(`The ${p(n.gapYards)}-yard gap between ${n.fromLabel} and ${n.toLabel} is wider than your ${c} target — a fitting might add or re-loft a club to fill it.`):n.status==="tight"?l.push(`${n.fromLabel} and ${n.toLabel} are only ${p(n.gapYards)} yards apart, tighter than your ${c} target — they may overlap in use.`):n.status==="overlap"&&l.push(`${n.toLabel} carries the same as or farther than ${n.fromLabel}. Sim numbers vary shot to shot, so average a few swings and re-check these clubs before re-gapping.`);return l.length===0&&l.push(`Every gap is within your ${c} target — your set looks evenly spaced across the numbers you entered.`),l}const X={clubs:[{label:"Driver",carryYards:230},{label:"3 Wood",carryYards:210},{label:"5 Wood",carryYards:195},{label:"4 Hybrid",carryYards:183},{label:"5 Iron",carryYards:172},{label:"6 Iron",carryYards:161},{label:"7 Iron",carryYards:150},{label:"8 Iron",carryYards:138},{label:"9 Iron",carryYards:126},{label:"Pitching Wedge",carryYards:113},{label:"Gap Wedge",carryYards:100},{label:"Sand Wedge",carryYards:85},{label:"Lob Wedge",carryYards:70}]};function k(r){const t=p(r);return`${t.toLocaleString("en-US")} yd${Math.abs(t)===1?"":"s"}`}function J(r){const t=p(r);return`${t<0?"−":""}${Math.abs(t).toLocaleString("en-US")} yd${Math.abs(t)===1?"":"s"}`}const K={on_target:"On target",large:"Large gap",tight:"Tight",overlap:"Overlap"};function V(){return[{question:"How do I get my carry distances?",answer:"From a launch monitor or simulator session. This tool does not measure anything — you enter the average carry you saw for each club, then it does the gap maths. Book a bay, hit a few shots with every club, and bring the numbers back here after your session."},{question:"What is a good gap between clubs?",answer:"Many fitters aim for roughly 10 to 15 yards between clubs, but there is no single correct number for everyone — it depends on your swing, the clubs you carry and how you score. We pre-fill that range as an editable target you can change; we never assert a specific 'right' gap for you. Longer clubs often gap wider than wedges."},{question:"Is this a substitute for a professional fitting?",answer:"No — it is not a substitute for a professional fitting. This is a self-guided gap check built only from the averages you enter. It flags patterns worth a closer look, but it cannot measure spin, launch, dispersion or fit you for the right shafts and lofts. For that, see a qualified club fitter — treat this as a starting point, not a guarantee."},{question:"Why does the tool say a shorter club carries farther?",answer:"If a club lower in your bag shows a longer carry than the club above it, we flag it as an overlap rather than hiding it. Simulator numbers vary shot to shot, so average several swings and double-check any clubs that look out of order before making a change."},{question:"How is the average gap calculated?",answer:"It is the difference between your longest and shortest entered carry, divided by the number of gaps between your clubs. Everything is computed from the numbers you type in — nothing is pulled from outside data or from other golfers."}]}const $="/".replace(/\/$/,""),L=V();let E=0;function P(){return X.clubs.map(r=>({id:E++,label:r.label,carry:r.carryYards==null?"":String(r.carryYards)}))}function Z(r){if(r.trim()==="")return null;const t=Number.parseFloat(r);return Number.isFinite(t)?t:null}function _(r){const t=Number.parseFloat(r);return Number.isFinite(t)?t:0}const ee={on_target:"border-emerald-300 bg-emerald-50 text-emerald-800 dark:border-emerald-800 dark:bg-emerald-950/40 dark:text-emerald-300",large:"border-amber-300 bg-amber-50 text-amber-800 dark:border-amber-700 dark:bg-amber-950/40 dark:text-amber-300",tight:"border-sky-300 bg-sky-50 text-sky-800 dark:border-sky-800 dark:bg-sky-950/40 dark:text-sky-300",overlap:"border-red-300 bg-red-50 text-red-800 dark:border-red-800 dark:bg-red-950/40 dark:text-red-300"};function re({status:r}){return e.jsx("span",{className:`inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold ${ee[r]}`,children:K[r]})}function I({id:r,label:t,value:i,onChange:c,suffix:l,step:n,hint:u}){return e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{htmlFor:r,className:"text-sm font-semibold text-foreground",children:t}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{id:r,type:"number",inputMode:"decimal",min:"0",step:n??"1",value:i,onChange:m=>c(m.target.value),className:"w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-foreground focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary"}),l&&e.jsx("span",{className:"whitespace-nowrap text-sm text-muted-foreground",children:l})]}),u&&e.jsx("p",{className:"text-xs text-muted-foreground",children:u})]})}function C({label:r,value:t}){return e.jsxs("div",{className:"rounded-xl border bg-card p-4",children:[e.jsx("div",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:r}),e.jsx("div",{className:"mt-1 text-2xl font-extrabold text-foreground",children:t})]})}function de(){const[r,t]=j.useState(P),[i,c]=j.useState(String(A)),[l,n]=j.useState(String(T)),u=(a,d)=>t(s=>s.map(g=>g.id===a?{...g,...d}:g)),m=()=>t(a=>[...a,{id:E++,label:"",carry:""}]),N=a=>t(d=>d.filter(s=>s.id!==a)),v=()=>{t(P()),c(String(A)),n(String(T))},f=j.useMemo(()=>({clubs:r.map(a=>({label:a.label,carryYards:Z(a.carry)})),targetMinGap:_(i),targetMaxGap:_(l)}),[r,i,l]),o=j.useMemo(()=>Q(f),[f]),b=o.gaps.length>0,x=typeof window<"u"?window.location.origin:"",h=`${x}${$}${D}`;return F({title:S,description:H,url:h,jsonLd:{"@context":"https://schema.org","@graph":[{"@type":"WebPage",name:S,url:h,inLanguage:"en",isPartOf:{"@type":"WebSite",name:"Golf Sim Finder",url:`${x}${$}/`}},{"@type":"FAQPage",mainEntity:L.map(a=>
1({"@type":"Question",name:a.question,acceptedAnswer:{"@type":"Answer",text:a.answer}}))}]}}),e.jsxs(q,{children:[e.jsx("div",{className:"border-b bg-primary/5",children:e.jsxs("div",{className:"container mx-auto max-w-5xl px-4 pt-8 pb-10",children:[e.jsx(W,{items:[{name:"Home",href:"/"},{name:O}]}),e.jsxs("div",{className:"mt-6 max-w-2xl",children:[e.jsx("h1",{className:"text-4xl font-extrabold tracking-tight text-foreground md:text-5xl",children:"Club Gapping & Carry Distance Calculator"}),e.jsx("p",{className:"mt-4 text-muted-foreground leading-relaxed",children:"Enter the carry distances you saw for each club in your last simulator or launch-monitor session and get a club-by-club gap analysis — where your yardages are evenly spaced, where they bunch up, and where a gap is wide enough to be worth a fitter's attention. Every number here comes from you; we invent nothing."})]})]})}),e.jsxs("div",{className:"container mx-auto max-w-5xl px-4 py-10",children:[e.jsxs("div",{className:"grid gap-8 lg:grid-cols-[minmax(0,1fr)_minmax(0,22rem)]",children:[e.jsxs("section",{"aria-labelledby":"calc-inputs",className:"space-y-6 rounded-2xl border bg-card p-5 sm:p-6",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h2",{id:"calc-inputs",className:"text-xl font-bold text-foreground",children:"Your bag"}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"The clubs below are an editable example — replace the carry numbers with your own averages from the sim."})]}),e.jsx("button",{type:"button",onClick:v,className:"whitespace-nowrap rounded-lg border border-border bg-background px-3 py-1.5 text-xs font-semibold text-foreground hover:bg-muted",children:"Reset example"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"grid grid-cols-[1fr_7rem_2.25rem] items-center gap-2 px-1 text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:[e.jsx("span",{children:"Club"}),e.jsx("span",{children:"Carry"}),e.jsx("span",{className:"sr-only",children:"Remove"})]}),r.map((a,d)=>e.jsxs("div",{className:"grid grid-cols-[1fr_7rem_2.25rem] items-center gap-2",children:[e.jsx("input",{type:"text","aria-label":`Club ${d+1} name`,value:a.label,placeholder:"Club name",onChange:s=>u(a.id,{label:s.target.value}),className:"w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-foreground focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary"}),e.jsx("div",{className:"flex items-center gap-1.5",children:e.jsx("input",{type:"number",inputMode:"decimal",min:"0",step:"1","aria-label":`${a.label||`Club ${d+1}`} carry in yards`,value:a.carry,placeholder:"yds",onChange:s=>u(a.id,{carry:s.target.value}),className:"w-full rounded-lg border border-border bg-background px-2.5 py-2 text-sm text-foreground focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary"})}),e.jsx("button",{type:"button",onClick:()=>N(a.id),disabled:r.length<=2,"aria-label":`Remove ${a.label||`club ${d+1}`}`,className:"inline-flex h-9 w-9 items-center justify-center rounded-lg border border-border bg-background text-muted-foreground hover:bg-muted disabled:cursor-not-allowed disabled:opacity-40",children:e.jsx(B,{className:"h-4 w-4","aria-hidden":"true"})})]},a.id)),e.jsxs("button",{type:"button",onClick:m,className:"mt-1 inline-flex items-center gap-1.5 rounded-lg border border-dashed border-border bg-background px-3 py-2 text-sm font-semibold text-foreground hover:bg-muted",children:[e.jsx(U,{className:"h-4 w-4","aria-hidden":"true"}),"Add a club"]})]}),e.jsxs("fieldset",{className:"space-y-3 rounded-xl border border-dashed bg-muted/20 p-4",children:[e.jsx("legend",{className:"px-1 text-sm font-semibold text-foreground",children:"Target gap range"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"A common fitting rule of thumb is about 10–15 yards between clubs, but there is no single right number — set the window that suits your game."}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsx(I,{id:"target-min",label:"Minimum gap",value:i,onChange:c,suffix:"yds"}
1),e.jsx(I,{id:"target-max",label:"Maximum gap",value:l,onChange:n,suffix:"yds"})]})]})]}),e.jsxs("section",{"aria-labelledby":"calc-results",className:"space-y-4",children:[e.jsx("h2",{id:"calc-results",className:"text-xl font-bold text-foreground",children:"Your gapping"}),b?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(C,{label:"Clubs analyzed",value:o.analyzedClubs.length}),e.jsx(C,{label:"Average gap",value:o.averageGap==null?"—":k(o.averageGap)}),e.jsx(C,{label:"Total spread",value:o.totalSpread==null?"—":k(o.totalSpread)}),e.jsx(C,{label:"On target",value:o.onTargetCount})]}),e.jsx("div",{className:"rounded-xl border bg-card p-4 text-sm text-muted-foreground",children:e.jsxs("div",{className:"flex flex-wrap gap-x-4 gap-y-1",children:[e.jsxs("span",{children:[e.jsx("strong",{className:"text-foreground",children:o.largeCount})," ","large"]}),e.jsxs("span",{children:[e.jsx("strong",{className:"text-foreground",children:o.tightCount})," ","tight"]}),e.jsxs("span",{children:[e.jsx("strong",{className:"text-foreground",children:o.overlapCount})," ","overlap"]})]})})]}):e.jsx("div",{className:"rounded-2xl border border-dashed bg-card p-6 text-sm text-muted-foreground",children:"Enter a carry distance for at least two clubs to see your club-by-club gaps."})]})]}),b&&e.jsxs("section",{"aria-labelledby":"gap-table",className:"mt-10",children:[e.jsx("h2",{id:"gap-table",className:"text-xl font-bold text-foreground",children:"Gap between each club"}),e.jsx("div",{className:"mt-4 overflow-hidden rounded-2xl border bg-card",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{className:"bg-muted/40 text-left text-xs uppercase tracking-wide text-muted-foreground",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-4 py-3 font-semibold",children:"From → To"}),e.jsx("th",{className:"px-4 py-3 text-right font-semibold",children:"Carries"}),e.jsx("th",{className:"px-4 py-3 text-right font-semibold",children:"Gap"}),e.jsx("th",{className:"px-4 py-3 text-right font-semibold",children:"Status"})]})}),e.jsx("tbody",{children:o.gaps.map((a,d)=>e.jsxs("tr",{className:"border-t",children:[e.jsxs("td",{className:"px-4 py-3 font-medium text-foreground",children:[a.fromLabel," → ",a.toLabel]}),e.jsxs("td",{className:"px-4 py-3 text-right text-muted-foreground",children:[k(a.fromCarry)," → ",k(a.toCarry)]}),e.jsx("td",{className:"px-4 py-3 text-right font-semibold text-foreground",children:J(a.gapYards)}),e.jsx("td",{className:"px-4 py-3 text-right",children:e.jsx(re,{status:a.status})})]},d))})]})})]}),o.suggestions.length>0&&e.jsxs("section",{"aria-labelledby":"gap-suggestions",className:"mt-10",children:[e.jsx("h2",{id:"gap-suggestions",className:"text-xl font-bold text-foreground",children:"What to look at"}),e.jsx("ul",{className:"mt-4 space-y-3",children:o.suggestions.map((a,d)=>e.jsx("li",{className:"rounded-xl border bg-card p-4 text-sm leading-relaxed text-muted-foreground",children:a},d))}),e.jsx("p",{className:"mt-4 rounded-xl border-l-4 border-amber-400 bg-amber-50 p-3 text-xs leading-relaxed text-muted-foreground dark:border-amber-600 dark:bg-amber-950/30",children:"This is a self-guided gap check built from the averages you entered, not a professional fitting. It cannot measure spin, launch or dispersion — treat it as a starting point and see a qualified club fitter before changing your set."})]}),e.jsxs("section",{"aria-labelledby":"gap-cta",className:"mt-12 rounded-2xl border bg-primary/5 p-6 sm:p-8",children:[e.jsx("h2",{id:"gap-cta",className:"text-xl font-bold text-foreground sm:text-2xl",children:"Need your carry numbers?"}),e.jsx("p",{className:"mt-3 max-w-3xl text-sm leading-relaxed text-muted-foreground",children:"This tool works from real launch-monitor data. Book a simulator session, hit a handful of shots with every club, and note the average carry for each — then come back and map your gaps."}),e.jsxs("div",{className:"mt-5 flex flex-wrap gap-3",children:[e.jsxs(M,{href:"/near-me",className:"inline-flex items-center gap-1.5 rounded-lg bg-primary px-4 py-2 text-sm font-semibold text-primary-foreground hover:opacity-90",children:["Find a simulator near you",e.jsx(R,{className:"h-4 w-4","aria-hidden":"true"})]}),e.jsx(M,{href:"/launch-monitor-finder",className:"inline-flex items-center gap-1.5 rounded-lg border border-border bg-background px-4 py-2 text-sm font-semibold text-foreground hover:bg-muted",children:"Compare launch monitors"})]})]}),e.jsxs("section",{"aria-labelledby":"gap-faq",className:"mt-12 space-y-4",children:[e.jsx("h2",{id:"gap-faq",className:"text-xl font-bold text-foreground",children:"Frequently asked questions"}),e.jsx("dl",{className:"space-y-4",children:L.map(a=>e.jsxs("div",{className:"rounded-2xl border bg-card p-5",children:[e.jsx("dt",{className:"font-semibold text-foreground",children:a.question}),e.jsx("dd",{className:"mt-1.5 text-sm leading-relaxed text-muted-foreground",children:a.answer})]},a.question))})]})]})]})}export{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.