PageSourceSearch

https://app.coresportsai.com/_next/static/chunks/12042.eba9fb7166ad225e.js

js coresportsai.com collected 2026-10-09 23:00:39 UTC 14,384 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[12042,39867],{5917:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(71847).A)("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]])},12042:(e,t,r)=>{r.r(t),r.d(t,{AcademyAiReport:()=>L});var a=r(95155),n=r(12115),o=r(35299),s=r(5917),l=r(17181),i=r(39867),c=r(95740),d=r(24033),m=r(1565),u=r(75258),p=r(87978),x=r(98266),h=r(1524),f=r(30814),g=r(35951);let b=["FL","FR","ML","MR","BL","BR"],y={FL:"Front Left",FR:"Front Right",ML:"Mid Left",MR:"Mid Right",BL:"Back Left",BR:"Back Right"},v={FL:"BR",FR:"BL",ML:"MR",MR:"ML",BL:"FR",BR:"FL"};function j(e){let t={FL:0,FR:0,ML:0,MR:0,BL:0,BR:0};for(let[r,a]of Object.entries(v))t[a]=Number(null==e?void 0:e[r])||0;return t}function w(e){let{title:t,icon:r,values:n,tone:o}=e,s=Math.max(1,...b.map(e=>n[e])),l="green"===o?"34,197,94":"red"===o?"239,68,68":"59,130,246",i=b.reduce((e,t)=>n[t]>n[e]?t:e,"FL");return(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:"mb-2 flex items-center gap-1.5",children:[r,(0,a.jsx)("span",{className:"text-xs font-bold text-foreground",children:t})]}),(0,a.jsxs)("div",{className:"relative aspect-[2/3] w-full max-w-[200px] mx-auto overflow-hidden rounded-lg border border-border bg-muted/30",children:[(0,a.jsx)("div",{className:"absolute inset-0 grid grid-rows-3 grid-cols-2 gap-0.5 p-1",children:["FL","FR","ML","MR","BL","BR"].map(e=>{let t=n[e]/s;return(0,a.jsxs)("div",{className:"relative flex flex-col items-center justify-center rounded",style:{backgroundColor:"rgba(".concat(l,",").concat(.12+.68*t,")")},children:[(0,a.jsxs)("span",{className:"text-sm font-black text-white drop-shadow",children:[n[e],"%"]}),(0,a.jsx)("span",{className:"text-[8px] font-semibold text-white/80",children:e})]},e)})}),(0,a.jsx)("div",{className:"pointer-events-none absolute left-1/2 top-1/2 z-10 h-6 w-6 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white/60 bg-cyan-500/70"})]}),(0,a.jsxs)("p",{className:"mt-2 text-center text-[10px] text-muted-foreground",children:["Most from ",(0,a.jsx)("span",{className:"font-bold text-foreground",children:y[i]})]})]})}function N(e){let{matches:t}=e,r=(0,n.useMemo)(()=>(function(e){let t={FL:0,FR:0,ML:0,MR:0,BL:0,BR:0},r={FL:0,FR:0,ML:0,MR:0,BL:0,BR:0},a={FL:0,FR:0,ML:0,MR:0,BL:0,BR:0},n=0,o=!1;for(let m of e||[]){var s,l,i,c,d;let e=null==(l=function(e){var t;return(null==e||null==(t=e.analysisData)?void 0:t._v2Data)||(null==e?void 0:e.analysisData)||(null==e?void 0:e._v2Data)||(null==e?void 0:e.resultData)||{}}(m))||null==(s=l.players)?void 0:s.player_1;if(!e)continue;let u=j((null==(i=e.winners_by_zone)?void 0:i.counts)||{}),p=j((null==(c=e.errors_by_zone)?void 0:c.counts)||{}),x=j((null==(d=e.movement_heatmap)?void 0:d.by_zone_percentage)||{});for(let e of b)t[e]+=u[e],r[e]+=p[e];if((Object.values(u).some(Boolean)||Object.values(p).some(Boolean))&&(o=!0),Object.values(x).some(Boolean)){for(let e of b)a[e]+=x[e];n+=1}}let m={FL:0,FR:0,ML:0,MR:0,BL:0,BR:0};if(n>0)for(let e of b)m[e]=Math.round(a[e]/n);return{winners:t,errors:r,coverage:m,hasWinErr:o,hasCoverage:n>0}})(t||[]),[t]);if(!r.hasWinErr&&!r.hasCoverage)return null;let{winPct:o,errPct:s}=(0,n.useMemo)(()=>{let e={},t={};for(let a of b){let n=r.winners[a]-r.errors[a];e[a]=n>0?n:0,t[a]=n<0?-n:0}let a=b.reduce((t,r)=>t+e[r],0),n=b.reduce((e,r)=>e+t[r],0),o=b.reduce((e,t)=>e+r.winners[t],0)||1,s=b.reduce((e,t)=>e+r.errors[t],0)||1,l={},i={};for(let c of b)l[c]=Math.round((a>0?e[c]/a:r.winners[c]/o)*100),i[c]=Math.round((n>0?t[c]/n:r.errors[c]/s)*100);return{winPct:l,errPct:i}},[r]);return(0,a.jsxs)("div",{className:"min-w-0 border-t border-border/40 pt-6",children:[(0,a.jsxs)("div",{className:"mb-1 flex items-center gap-2",children:[(0,a.jsx)(h.A,{className:"h-4 w-4 text-primary"}),(0,a.jsx)("h3",{className:"text-sm font-black uppercase tracking-wide text-foreground",children:"Court patterns"})]}),(0,a.jsx)("p",{className:"mb-3 text-xs text-muted-foreground",children:"Where your points come from, where they leak, and where you spend your time — across all your matches."}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-3",children:[r.hasWinErr&&(0,a.jsx)(w,{title:"Winners",icon:(0,a.jsx)(h.A,{className:"h-3.5 w-3.5 text-green-500"}),values:o,tone:"green"}),r.hasWinErr&&(0,a.jsx)(w,{title:"Errors",icon:(0,a.jsx)(f.A,{className:"h-3.5 w-3.5 text-red-500"}),values:s,tone:"red"}),r.hasCoverage&&(0,a.jsx)(w,{title:"Court movement",icon:(0,a.jsx)(g.A,{className:"h-3.5 w-3.5 text-blue-500"}),values:r.coverage,tone:"blue"})]})]})}var k=r(21459);async function R(e,t){let r=p.auth.currentUser,a=r?await r.getIdToken():null,n=await fetch(e,{...t,headers:{"Content-Type":"application/json",...a?{Authorization:"Bearer ".concat(a)}:{},...(null==t?void 0:t.headers)||{}}}),o=await n.json().catch(()=>({}));if(!n.ok)throw Error((null==o?void 0:o.error)||"Request failed (".concat(n.status,")"));return o}function L(e){var t;let{slug:r,academy:p,players:h,canAcademyWide:f,canGenerate:g=!0,matches:b}
1=e,y=p.primaryColor||"#10b981",[v,j]=(0,n.useState)(""),w=1===h.length;(0,n.useEffect)(()=>{var e;w&&(null==(e=h[0])?void 0:e.userId)&&v!==h[0].userId&&j(h[0].userId)},[w,h,v]);let[L,M]=(0,n.useState)(null),[C,A]=(0,n.useState)(null),[F,B]=(0,n.useState)(null),[S,I]=(0,n.useState)([]),[_,z]=(0,n.useState)(null),[D,T]=(0,n.useState)({}),[E,O]=(0,n.useState)(null),P=async e=>{if(e){O(e);try{let t=await R("/api/academy/".concat(r,"/ai-report/share"),{method:"POST",body:JSON.stringify({reportId:e})});T(r=>({...r,[e]:t.url}));try{await navigator.clipboard.writeText(t.url)}catch(e){}}catch(e){B((null==e?void 0:e.message)||"Could not create a share link.")}finally{O(null)}}},W=e=>{let{reportId:t,reportText:r,who:n}=e,c=t?D[t]:void 0;return(0,a.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-x-6 gap-y-3",children:[t&&(0,a.jsxs)("button",{onClick:()=>P(t),disabled:E===t,className:"inline-flex items-center gap-1.5 text-sm font-semibold text-muted-foreground transition-colors hover:text-foreground disabled:opacity-40",children:[E===t?(0,a.jsx)(o.A,{className:"h-4 w-4 animate-spin"}):c?(0,a.jsx)(s.A,{className:"h-4 w-4 text-[hsl(var(--level-strong))]"}):(0,a.jsx)(l.A,{className:"h-4 w-4"}),c?"Link copied":"Share"]}),r&&(0,a.jsxs)("button",{onClick:()=>((e,t)=>{let r=(0,u.MM)(e),a=e=>e.replace(/</g,"&lt;").replace(/>/g,"&gt;"),n=r.map(e=>{let t=e.items.map(e=>"<li>".concat(e.label?"<strong>".concat(a(e.label),":</strong> "):"").concat(a(e.text),"</li>")).join(""),r=e.paragraphs.map(e=>"<p>".concat(a(e),"</p>")).join("");return"<section>".concat(e.heading?"<h2>".concat(a(e.heading),"</h2>"):"").concat(r).concat(t?"<ol>".concat(t,"</ol>"):"","</section>")}).join(""),o=window.open("","_blank","width=820,height=1000");o&&(o.document.write("<!doctype html><html><head><title>".concat(a("".concat(p.name," report").concat(t?" — ".concat(t):"")),"</title><style>\n      body{font-family:-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#111;max-width:720px;margin:32px auto;padding:0 24px;line-height:1.6}\n      header{border-bottom:3px solid ").concat(p.primaryColor||"#111",";padding-bottom:10px;margin-bottom:24px}\n      header .b{font-size:20px;font-weight:800;color:").concat(p.primaryColor||"#111","}\n      header .s{font-size:12px;color:#666}\n      h2{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:").concat(p.primaryColor||"#111",';margin:22px 0 6px}\n      p{margin:0 0 8px;font-size:14px}\n      ol{margin:6px 0 8px;padding-left:20px}\n      li{margin:0 0 6px;font-size:14px}\n      @media print{body{margin:0}}\n    </style></head><body>\n      <header><div class="b">').concat(a(p.name),'</div><div class="s">Coaching report').concat(t?" \xb7 ".concat(a(t)):""," \xb7 powered by Core Sports AI</div></header>\n      ").concat(n,"\n      <script>window.onload=function(){setTimeout(function(){window.print();},250);};<\/script>\n    </body></html>")),o.document.close())})(r,n),className:"inline-flex items-center gap-1.5 text-sm font-semibold text-muted-foreground transition-colors hover:text-foreground",children:[(0,a.jsx)(i.A,{className:"h-4 w-4"}),"Download PDF"]}),c&&(0,a.jsx)("input",{readOnly:!0,value:c,onFocus:e=>e.currentTarget.select(),className:"w-full min-w-0 border-0 border-b border-border/60 bg-transparent py-1.5 font-mono text-xs text-muted-foreground focus:outline-none sm:w-auto sm:flex-1"})]})},q=(0,n.useCallback)(async e=>{try{let t=e?"?userId=".concat(encodeURIComponent(e)):"",a=await R("/api/academy/".concat(r,"/ai-report").concat(t));I(a.reports||[])}catch(e){I([])}},[r]);(0,n.useEffect)(()=>{q(v||void 0)},[q,v]);let U=async e=>{B(null),A(null),M(e);try{let t=await R("/api/academy/".concat(r,"/ai-report"),{method:"POST",body:JSON.stringify({scope:e,..."player"===e?{userId:v}:{}})});A(t),"player"===e&&await q(v||void 0)}catch(e){B((null==e?void 0:e.message)||"Could not generate report.")}finally{M(null)}};return(0,a.jsxs)("div",{className:"min-w-0 space-y-8",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(m.YN,{children:g?"AI reports":"From your coach"}),(0,a.jsx)(m.$j,{size:"md",as:"h2",className:"mt-3",children:g?"Write a coaching report":"Your coaching reports"}),g&&(0,a.jsx)(m.hj,{className:"mt-3 text-sm sm:text-base",children:"Generating a player report emails it to that player and adds it to their own reports page."})]}),g&&(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-5 sm:flex-row sm:items-end sm:gap-6",children:[(0,a.jsxs)("label",{className:"block min-w-0 flex-1",children:[(0,a.jsx)("span",{className:"text-xs font-semibold text-muted-foreground sm:text-sm",children:"Player"}),w?(0,a.jsx)("p",{className:"mt-1 truncate border-b border-border py-2 text-base font-bold text-foreground",children:null==(t=h[0])?void 0:t.name}
1):(0,a.jsxs)("select",{value:v,onChange:e=>j(e.target.value),className:"mt-1 w-full min-w-0 cursor-pointer appearance-none truncate border-0 border-b border-border bg-transparent py-2 pr-6 text-base font-bold text-foreground focus:border-foreground focus:outline-none",style:{backgroundImage:"linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%)",backgroundPosition:"calc(100% - 10px) 55%, calc(100% - 5px) 55%",backgroundSize:"5px 5px, 5px 5px",backgroundRepeat:"no-repeat"},children:[(0,a.jsx)("option",{value:"",children:"Select a player…"}),h.map(e=>(0,a.jsx)("option",{value:e.userId,children:e.name},e.userId))]})]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-x-6 gap-y-3",children:[(0,a.jsxs)("button",{onClick:()=>U("player"),disabled:!v||null!==L,className:"inline-flex items-center gap-2 rounded-full bg-foreground px-6 py-3.5 text-sm font-bold text-background transition-transform active:scale-[0.98] disabled:opacity-40",children:["player"===L?(0,a.jsx)(o.A,{className:"h-4 w-4 animate-spin"}):(0,a.jsx)(c.A,{className:"h-4 w-4"}),"Player report"]}),f&&(0,a.jsxs)("button",{onClick:()=>U("academy"),disabled:null!==L,className:"inline-flex items-center gap-1.5 text-sm font-semibold text-muted-foreground transition-colors hover:text-foreground disabled:opacity-40",children:["academy"===L?(0,a.jsx)(o.A,{className:"h-4 w-4 animate-spin"}):(0,a.jsx)(c.A,{className:"h-4 w-4"}),"Academy-wide report"]})]})]}),F&&(0,a.jsx)("p",{className:"text-sm font-semibold text-[hsl(var(--level-weak))]",children:F}),b&&b.length>0&&(0,a.jsx)(N,{matches:b}),C&&(0,a.jsxs)("div",{className:"min-w-0 space-y-6 border-t border-border/40 pt-8",children:[(0,a.jsx)(x.L,{report:C.report,primary:y}),(0,a.jsx)(W,{reportId:C.reportId,reportText:C.report}),(0,a.jsx)(k.m,{progress:C.progress,timeline:C.timeline,primary:y}),(0,a.jsx)(k._,{movement:C.movement}),C.playerNotified&&(0,a.jsx)("p",{className:"text-sm font-semibold text-[hsl(var(--level-strong))]",children:"The player has been emailed and can now read this in their own reports."})]}),S.length>0&&(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("p",{className:"text-xs font-semibold text-muted-foreground sm:text-sm",children:[g?"Previous reports":"Reports from your coach"," \xb7 ",S.length]}),(0,a.jsx)("ul",{className:"mt-3 border-b border-border/40",children:S.map(e=>{let t=_===e.id;return(0,a.jsxs)("li",{className:"border-t border-border/40",children:[(0,a.jsxs)("button",{onClick:()=>z(t?null:e.id),"aria-expanded":t,className:"flex w-full min-w-0 items-baseline gap-4 py-4 text-left",children:[(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate text-base font-bold text-foreground",children:e.playerName||p.name}),(0,a.jsx)("span",{className:"flex-shrink-0 text-sm font-semibold tabular-nums text-muted-foreground",children:function(e){let t=new Date(e);return Number.isNaN(t.getTime())?"":t.toLocaleDateString(void 0,{day:"numeric",month:"short",year:"numeric"})}(e.createdAt)}),(0,a.jsx)(d.A,{className:"h-4 w-4 flex-shrink-0 self-center text-muted-foreground transition-transform ".concat(t?"rotate-180":"")})]}),t&&(0,a.jsxs)("div",{className:"min-w-0 space-y-6 pb-8",children:[(0,a.jsx)(x.L,{report:e.report,primary:y}),(0,a.jsx)(W,{reportId:e.id,reportText:e.report,who:e.playerName||void 0}),(0,a.jsx)(k.m,{progress:e.progress,timeline:e.timeline,primary:y})]})]},e.id)})})]})]})}},17181:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(71847).A)("Share2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]])},24033:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(71847).A)("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]])},35951:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(71847).A)("Footprints",[["path",{d:"M4 16v-2.38C4 11.5 2.97 10.5 3 8c.03-2.72 1.49-6 4.5-6C9.37 2 10 3.8 10 5.5c0 3.11-2 5.66-2 8.68V16a2 2 0 1 1-4 0Z",key:"1dudjm"}],["path",{d:"M20 20v-2.38c0-2.12 1.03-3.12 1-5.62-.03-2.72-1.49-6-4.5-6C14.63 6 14 7.8 14 9.5c0 3.11 2 5.66 2 8.68V20a2 2 0 1 0 4 0Z",key:"l2t8xc"}],["path",{d:"M16 17h4",key:"1dejxt"}],["path",{d:"M4 13h4",key:"1bwh8b"}]])},39867:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(71847).A)("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]])}}]);

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.