PageSourceSearch

https://tuforums.com/assets/PassScoreCalculatorPage.BgRG7N7T.js

js tuforums.com collected 2026-09-24 14:19:39 UTC 53,359 bytes, 1 lines download raw bytes

1import{a8 as te,a9 as Rs,aa as Fe,ab as je,ac as Ts,ad as Os,ae as Bs,af as qe,ag as ze,ah as Xe,ai as Vs,aj as Ls,ak as Ke,al as As,a as q,r as ce,j as a,am as Qe,y as Ds,z as Hs,x as xe,an as We,f as $s,s as we,I as Ee,A as me,U as Js,T as Gs,ao as Us,ap as qs,u as zs,e as Xs,b as Ks,aq as Qs,M as Ws,a7 as Ys,B as re}from"./index.CHvzgvcl.js";import{a as Zs,P as ea}from"./PassSubmissionCore.Do4LeK4p.js";import{r as m,d as sa,j as aa,f as ta}from"./reactRouter.DIJDf_PU.js";import{E as ca}from"./EditIcon.BSB6r8jE.js";import{I as Re,C as na}from"./CompareIcon.CQlunJ6Z.js";import{j as Ye,a as Ze,b as la,u as ra,J as oa}from"./usePassCoreForm.CgWndtw9.js";import{g as Se}from"./passJudgementHitCount.6lv25sxp.js";import{u as G}from"./i18n.CnDgzqyN.js";import{A as ia}from"./AdminLevelXaccCurvePopup.D8_ooAmJ.js";import{f as ua}from"./statFormatters.C7Ka2WWu.js";import{R as pa}from"./RatingInput.BHVPPBtm.js";import"./recharts.CxMvZdXo.js";import"./3.G3sZgAWd.js";import"./FetchIcon.v49Yapoe.js";import"./midspinPerfectDecrement.DarpiDhG.js";import"./adofaiVersion.BhaLZNzn.js";import"./useVideoLinkResolver.BxMIYacm.js";import"./resolveVideoUrl.BuIxAj10.js";/* empty css                          */import"./Select.BJwzSgTp.js";/* empty css                        */import"./bilibiliCover.uObpO8ST.js";import"./XaccPassPickerJudgementStrip.Cvx7rgBH.js";import"./useUnsavedClose.DUjXRpwG.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};e.SENTRY_RELEASE={id:"9285efe8a8dce1f690960d89b06301901087e606"},e._sentryModuleMetadata=e._sentryModuleMetadata||{},e._sentryModuleMetadata[new e.Error().stack]=function(c){for(var t=1;t<arguments.length;t++){var r=arguments[t];if(r!=null)for(var n in r)r.hasOwnProperty(n)&&(c[n]=r[n])}return c}({},e._sentryModuleMetadata[new e.Error().stack],{"_sentryBundlerPluginAppKey:tuf-website":!0});var s=new e.Error().stack;s&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[s]="2e5ec62e-b9f0-4844-b78a-57db475cb8db",e._sentryDebugIdIdentifier="sentry-dbid-2e5ec62e-b9f0-4844-b78a-57db475cb8db")}catch{}})();const da=10,Te=20,Oe=.9;function Be(e){if(e==null||e==="")return"";const s=Number(e);return Number.isFinite(s)?String(s):""}function es(e,s={}){if(!e)return{baseScore:"",ppBaseScore:"",tilecount:""};const c=(s==null?void 0:s[e.diffId])||e.difficulty||{},t=Number(e.baseScore)>0?e.baseScore:c.baseScore,r=Se(e.tilecount,e.autoTileCount,e.midspinCount);return{baseScore:Be(t),ppBaseScore:Be(e.ppBaseScore),tilecount:r==null?"":String(r)}}function ma(e,s){return e!=null&&String(e).trim()!==""?e:s??""}function fe(e,s){return!(e==null||String(e).trim()===""||s!==""&&Number(e)===Number(s))}const fa=1,ha=2,ba=.01,xa=36,Sa=.95,ga=2.15;function Na(e=xa,s=Sa,c=ga){const t=Math.max(2,Math.floor(e)),r=1-s,n=1-1e-6,o=[];for(let u=0;u<t-1;u+=1){const f=u/(t-1),i=1-Math.pow(1-f,c);o.push(Math.min(s+r*i,n))}return o.push(1),o}function ja(e=fa,s=ha,c=ba){const t=[],r=Math.max(.01,c);for(let n=e;n<=s+r*.25;n+=r)t.push(Math.round(n*1e3)/1e3);return t[t.length-1]!==s&&t.push(s),t}function ss(e,s={},c={}){const t={},r=s.baseScore!=null&&String(s.baseScore).trim()!==""?s.baseScore:s.difficultyBaseScore;r!==void 0&&r!==""&&Number.isFinite(Number(r))&&(t.baseScore=Number(r)),s.ppBaseScore!==void 0&&s.ppBaseScore!==""&&Number.isFinite(Number(s.ppBaseScore))&&(t.ppBaseScore=Number(s.ppBaseScore)),s.diffId!=null&&s.diffId!==""&&(t.diffId=Number(s.diffId));const n=s.cutoff!=null&&String(s.cutoff).trim()!==""||s.poleOffset!=null&&String(s.poleOffset).trim()!==""||s.topMultiplier!=null&&String(s.topMultiplier).trim()!=="";if(s.xaccCurveMeta||n){const f=te(e||{});t.xaccCurveMeta=s.xaccCurveMeta||{cutoff:s.cutoff!=null&&s.cutoff!==""?Number(s.cutoff):f.cutoff,poleOffset:s.poleOffset!=null&&s.poleOffset!==""?Number(s.poleOffset):f.poleOffset,topMultiplier:s.topMultiplier!=null&&s.topMultiplier!==""?Number(s.topMultiplier):f.topMultiplier}}const o=Number(s.baseScore)||Number(s.difficultyBaseScore)||0,u=e||{baseScore:o||null,ppBaseScore:null,difficulty:{baseScore:o},xaccCurveMeta:null,tilecount:s.tilecount!=null&&s.tilecount!==""?Number(s.tilecount):null,autoTileCount:0,midspinCount:0};return Rs(u,t,c)}function as(e,s={},c={}){if(!(e!=null&&e.id))return!0;const t=s||{},r=es(e,c);if(fe(t.baseScore,r.baseScore)||fe(t.ppBaseScore,r.ppBaseScore)||fe(t.tilecount,r.tilecount)||t.diffId!=null&&String(t.diffId).trim()!==""&&Number(t.diffId)!==Number(e.diffId))return!0;const n=["cutoff","poleOffset","topMultiplier"];for(const o of n)if(t[o]!==void 0&&t[o]!==null&&String(t[o]).trim()!=="")return!0;return!!t.xaccCurveMeta}function Ve(e,s,c){const t=e.judgements,r=Bs(t),n=qe(s,r,c),o=te(s),u=ze(r,n,o),f=Number.isFinite(e.speed)?e.speed:1,i=Ke(f),p=je(Vs(t).earlyDouble,Xe(t)),N=e.isNoHoldTap?.95:1,P=p*N;return{scoreV2:Ls(e,s,c),accuracy:r,base:n,xaccMtp:u,speedMtp:i,missMtp:p,noHoldFactor:N,combinedMissMtp:P}}function he(e,s,c={}){return{speed:e.speed,isNoHoldTap:e.isNoHoldTap,judgements:s,...c}}function ya({accuracy:e,speed:s,hitTiles:c,misses:t=0,isNoHoldTap:r=!1,levelCtx:n,difficultyDict:o}){const u=Number(e)===1?1:Number(e),f=qe(n,u,o),i=te(n),p=ze(u,f,i),N=Ke(Number.isFinite(s)?s:1),P=je(t,c)*(r?.95:1);return f*p*N*P}
1function Le(e,s,c=0){const t=Math.max(0,Math.floor(s)),r=Math.max(0,Math.floor(c)),n=As();if(n.earlyDouble=r,t<=0)return n;const o=Math.min(1,Math.max(0,e)),u=o===1;let f=Math.round(t*(o-.4)/.6);f=Math.min(t,Math.max(0,f));let i=t-f,p=0,N=0,P=0;if(o>=.95&&i>0){const _=Math.min(i,Math.round(i*.7));p=Math.floor(_/2),N=_-p,i-=_}return!u&&t>0&&f>=t&&p===0&&N===0&&i===0&&P===0&&(f=t-1,p=1),n.earlySingle=i,n.ePerfect=p,n.perfect=f,n.lPerfect=N,n.lateSingle=P,n}function Ae(e){return Xe(e)}function _a(e,s,c,t={}){const r=t.countsForRanked!==!1,n=(e||[]).map(h=>({levelId:Number(h.levelId),scoreV2:Number(h.scoreV2)||0})),o=n.filter(h=>h.levelId!==Number(s)),u=n.find(h=>h.levelId===Number(s)),f=(u==null?void 0:u.scoreV2)??0,p=[...n].sort((h,b)=>b.scoreV2-h.scoreV2).slice(0,Te).reduce((h,b,x)=>h+b.scoreV2*Math.pow(Oe,x),0);if(!r)return{beforeRanked:p,afterRanked:p,delta:0,currentBestOnLevel:f,beatsBest:c>f,entersTop20:!1,slotIndex:null,generalDelta:Math.max(0,c-f),countsForRanked:!1};const N=Math.max(c,f),P=[...o,{levelId:Number(s),scoreV2:N}].sort((h,b)=>b.scoreV2-h.scoreV2).slice(0,Te),_=P.reduce((h,b,x)=>h+b.scoreV2*Math.pow(Oe,x),0),R=P.some(h=>h.levelId===Number(s)),M=P.findIndex(h=>h.levelId===Number(s));return{beforeRanked:p,afterRanked:_,delta:_-p,currentBestOnLevel:f,beatsBest:c>f,entersTop20:R,slotIndex:M>=0?M+1:null,generalDelta:Math.max(0,c-f),countsForRanked:!0}}function De(e){var O,B,w;const{form:s,judgements:c,level:t,overrides:r,difficultyDict:n,targetScore:o=null,compareJudgements:u=null,playerContext:f=null}=e,i=ss(t,r,n),p=((B=(O=s.speed)==null?void 0:O.trim)==null?void 0:B.call(O))===""||s.speed==null?1:Number(s.speed),N=Number.isFinite(p)?p:1,P={speed:N,judgements:c,isNoHoldTap:!!s.isNoHold},_=Ve(P,i,n),R=r.tilecount!=null&&r.tilecount!==""?Se(Number(r.tilecount),0,0):t?Se(t.tilecount,t.autoTileCount,t.midspinCount):Ae(c),M=[],h=Math.max(R||Ae(c),1),b=Math.max(_.accuracy,.95);for(let j=0;j<=da;j+=1){const V=Le(b,h,j),{scoreV2:$}=Fe(he(P,V,{isNoHoldTap:!1}),i,{},n),D=je(j,h);if(M.push({misses:j,scoreV2:$,missMtp:D}),j>0&&D<=.5)break}let x=null;if(o!=null&&Number.isFinite(Number(o))&&Number(o)>0){const j=Number(o);let V=.95,$=1,D=null;for(let z=0;z<24;z+=1){const S=(V+$)/2,E=Le(S,h,0),{scoreV2:y}=Fe(he(P,E),i,{},n);D={accuracy:S,scoreV2:y,misses:0},y<j?V=S:$=S}x=D,D&&D.scoreV2<j*.99&&(x={...D,unreachable:!0})}const I=Na(),C=ja(),k={speeds:C,accuracies:I,cells:C.map(j=>I.map(V=>ya({accuracy:V,speed:j,hitTiles:h,misses:0,isNoHoldTap:!1,levelCtx:i,difficultyDict:n})))};let v=null;if(u&&typeof u=="object"){const j=he(P,u),V=Ve(j,i,n);v={primary:_.scoreV2,secondary:V.scoreV2,delta:_.scoreV2-V.scoreV2,secondaryAccuracy:V.accuracy}}let F=null,A=null;if(f&&(t!=null&&t.id)){F={..._a(f.top20||[],t.id,_.scoreV2,{countsForRanked:Ts(t)}),ppDelta:_.accuracy===1?Math.max(0,_.scoreV2-(((w=f.bestOnLevel)==null?void 0:w.scoreV2)||0)):0};const j=f.bestOnLevel;A={hasBest:!!j,bestScore:(j==null?void 0:j.scoreV2)??null,bestPassId:(j==null?void 0:j.id)??null,beatsBest:j?_.scoreV2>Number(j.scoreV2):!0,equalBest:j?Math.abs(_.scoreV2-Number(j.scoreV2))<.005:!1}}return{primary:{..._,speed:N,isNoHoldTap:P.isNoHoldTap,hitTiles:h,zeroMissMultiplier:Os},missBudget:M,inverse:x,speedGrid:k,compare:v,rankedImpact:F,reclear:A,levelCtx:i,customScoring:as(t,r,n)}}function ts(e,s){return la(e,s).judgements}function Ma(e,s,c){if(!e)return null;const t={tooEarly:e.tooEarly??"",early:e.early??"",ePerfect:e.ePerfect??"",perfectMinus:e.perfectMinus??"0",perfect:e.perfect??"",perfectPlus:e.perfectPlus??"0",lPerfect:e.lPerfect??"",late:e.late??"",adofaiVersion:c==null?void 0:c.adofaiVersion,isXPerfectMode:c==null?void 0:c.isXPerfectMode,passMetaFlags:c==null?void 0:c.passMetaFlags},r=Ze(t);return Ye(r)?ts({...c,...t},s):null}function Pa(){const[e,s]=m.useState(null),[c,t]=m.useState(null),[r,n]=m.useState(!1),o=m.useCallback(async({form:f,level:i,overrides:p,difficultyDict:N,targetScore:P,compareForm:_})=>{var R,M;n(!0),t(null);try{const h=ts(f,i);if(!Ye(Ze(f)))throw new Error("Enter all judgement counts as integers");const b=Number(p==null?void 0:p.baseScore)>0||Number(p==null?void 0:p.ppBaseScore)>0||Number(p==null?void 0:p.difficultyBaseScore)>0;if(!i&&!b)throw new Error("Select a level or set sandbox base score values");const x=((M=(R=f.speed)==null?void 0:R.trim)==null?void 0:M.call(R))??"";if(x!==""&&!(Number(x)>=1))throw new Error("Speed must be empty or ≥ 1.0");const I=as(i,p,N),C=Ma(_,i,f);let k=null,v=null;const F=[];if(i!=null&&i.id&&!I){const O=De({form:f,judgements:h,level:i,overrides:p,difficultyDict:N}).primary.scoreV2;F.push(q.get(ce.database.passes.levelPlacement(i.id),{params:{score:O}}).then(B=>{k=B.data}).catch(B=>{console.warn("[passScoreCalculator] placement failed",B)}))}i!=null&&i.id&&f.playerId&&F.push(q.get(ce.database.passes.levelCalculatorPlayer(i.id),{params:{playerId:f.playerId}}).then(O=>{v=O.data}).catch(O=>{console.warn("[passScoreCalculator] player context failed",O)})),await Promise.all(F);const A=De({form:f,judgements:h,level:i,overrides:p,difficultyDict:N,targetScore:P===""||P==null?null:Number(P),compareJudgements:C,playerContext:v});s({...A,placement:k,playerContext:v,calculatedAt:Date.now()})}catch(h){s(null),t((h==null?void 0:h.message)||String(h))}finally{n(!1)}},[]),u=m.useCallback(()=>{s(null),t(null)},[]);return{result:e,error:c,isCalculating:r,run:o,clear:u}}function Ca({result:e,difficultyDict:s}){const{t:c}=G("pages"),[t,r]=m.useState(!1);if(!(e!=null&&e.primary))return null;const n=e.primary;return a.jsxs("div",{className:"psc-panel psc-panel--primary",children:[a.jsx("h3",{children:c("passSubmission.calculator.panels.primary")}),a.jsxs("div",{className:"psc-primary-grid",children:[a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:c("passSubmission.calculator.labels.score")}),a.jsx("span",{className:"psc-stat__value",children:n.scoreV2.toFixed(2)})]}),a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:c("passSubmission.calculator.labels.accuracy")}),a.jsxs("span",{className:"psc-stat__value",children:[(n.accuracy*100).toFixed(4),"%"]})]}),a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:c("passSubmission.calculator.labels.base")}),a.jsx("span",{className:"psc-stat__value",children:n.base.toFixed(2)})]}),a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:c("passSubmission.calculator.labels.xaccMtp")}),a.jsx("span",{className:"psc-stat__value",children:n.xaccMtp.toFixed(4)})]}),a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:c("passSubmission.calculator.labels.speedMtp")}),a.jsx("span",{className:"psc-stat__value",children:n.speedMtp.toFixed(4)})]}),a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:c("passSubmission.calculator.labels.missMtp")}),a.jsx("span",{className:"psc-stat__value",children:n.missMtp.toFixed(4)})]}),a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:c("passSubmission.calculator.labels.noHold")}),a.jsxs("span",{className:"psc-stat__value",children:["×",n.noHoldFactor.toFixed(2)]})]})]}),e.levelCtx&&a.jsxs("div",{className:"psc-graph-wrap",children:[a.jsx("div",{className:"psc-graph-toolbar",children:a.jsxs("label",{className:"psc-pp-toggle",children:[a.jsx("input",{type:"checkbox",checked:t,onChange:o=>r(o.target.checked)}),a.jsx("span",{children:c("levelDetail.scoreGraph.disablePP",{defaultValue:"Disable PP"})})]})}),a.jsx(Qe,{tilecount:n.hitTiles,levelData:e.levelCtx,difficultyDict:s,speed:n.speed,isNoHoldTap:n.isNoHoldTap,disablePP:t})]})]})}function va({result:e}){var c;const{t:s}=G("pages");return(c=e==null?void 0:e.missBudget)!=null&&c.length?a.jsxs("div",{className:"psc-panel psc-panel--miss-budget",children:[a.jsx("h3",{children:s("passSubmission.calculator.panels.missBudget")}),a.jsxs("table",{className:"psc-table",children:[a.jsx("thead",{children:a.jsxs("tr",{children:[a.jsx("th",{children:s("passSubmission.calculator.labels.misses")}),a.jsx("th",{children:s("passSubmission.calculator.labels.missMtp")}),a.jsx("th",{children:s("passSubmission.calculator.labels.score")})]})}),a.jsx("tbody",{children:e.missBudget.map(t=>a.jsxs("tr",{children:[a.jsx("td",{children:t.misses}),a.jsx("td",{children:t.missMtp.toFixed(4)}),a.jsx("td",{children:t.scoreV2.toFixed(2)})]},t.misses))})]})]}):null}function Ia({result:e}){const{t:s}=G("pages");if(!(e!=null&&e.inverse))return a.jsxs("div",{className:"psc-panel psc-panel--inverse",children:[a.jsx("h3",{children:s("passSubmission.calculator.panels.inverse")}),a.jsx("p",{className:"psc-muted",children:s("passSubmission.calculator.inverse.hint")})]});const c=e.inverse;return a.jsxs("div",{className:"psc-panel psc-panel--inverse",children:[a.jsx("h3",{children:s("passSubmission.calculator.panels.inverse")}),c.unreachable?a.jsx("p",{className:"psc-muted",children:s("passSubmission.calculator.inverse.unreachable")}):a.jsxs("div",{className:"psc-primary-grid",children:[a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:s("passSubmission.calculator.labels.accuracy")}),a.jsxs("span",{className:"psc-stat__value",children:[(c.accuracy*100).toFixed(4),"%"]})]}),a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:s("passSubmission.calculator.labels.score")}),a.jsx("span",{className:"psc-stat__value",children:c.scoreV2.toFixed(2)})]})]})]})}function ge(e){return Number(e)===1}function cs(e){if(Number(e)===1)return"100%";const s=Number(e)*100;return s>=99.995?`${s.toFixed(4)}%`:s>=99?`${s.toFixed(2)}%`:`${s.toFixed(1)}%`}function ka(e){return`${Number(e)}×`}function He(e,s,c){const t=e.length-1;if(t<0)return[];const r=[];for(let n=0;n<=t;n+=1)(n===0||n===t||n%s===0)&&r.push({i:n,label:c(e[n])});if(r.length>=2){const n=r[r.length-2];r[r.length-1].i-n.i<s*.75&&r.splice(r.length-2,1)}return r}function $e({label:e,min:s,max:c,variant:t}){return a.jsxs("div",{className:`psc-heatmap-legend psc-heatmap-legend--${t}
1`,"aria-hidden":!0,children:[a.jsx("span",{className:"psc-heatmap-legend__label",children:e}),a.jsx("span",{children:s.toFixed(0)}),a.jsx("div",{className:"psc-heatmap-legend__bar"}),a.jsx("span",{children:c.toFixed(0)})]})}function Je(e,s){let c=e,t=s;return Number.isFinite(c)||(c=0),(!Number.isFinite(t)||t<=c)&&(t=c+1),{min:c,max:t}}function oe(e){const s=String(e||"").trim(),c=s.match(/^#([0-9a-f]{3,8})$/i);if(c){let r=c[1];return r.length===3&&(r=r.split("").map(n=>n+n).join("")),{r:parseInt(r.slice(0,2),16),g:parseInt(r.slice(2,4),16),b:parseInt(r.slice(4,6),16)}}const t=s.match(/rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i);return t?{r:Number(t[1]),g:Number(t[2]),b:Number(t[3])}:{r:74,g:144,b:226}}function Fa(e,s,c){const t=Math.min(1,Math.max(0,c));return{r:Math.round(e.r+(s.r-e.r)*t),g:Math.round(e.g+(s.g-e.g)*t),b:Math.round(e.b+(s.b-e.b)*t)}}function wa({r:e,g:s,b:c}){return`rgb(${e}, ${s}, ${c})`}function Ge(e,s,c){const t=c-s;return t<=1e-9?.5:Math.min(1,Math.max(0,(e-s)/t))}function Ea(){const e=getComputedStyle(document.documentElement);return{primary:oe(e.getPropertyValue("--btn-primary")),success:oe(e.getPropertyValue("--btn-success")),dark:oe(e.getPropertyValue("--color-black")),tick:oe(e.getPropertyValue("--color-gray-2"))}}function Ra({chart:e,speedLabel:s,accuracyLabel:c}){const t=m.useRef(null),r=m.useRef(null),[n,o]=m.useState({w:0,h:0}),[u,f]=m.useState(null),i=m.useRef(null),{speeds:p,accuracies:N,cells:P,meta:_}=e,R=p.length,M=N.length;m.useEffect(()=>{const b=r.current;if(!b)return;const x=()=>{const C=b.getBoundingClientRect(),k=Math.max(1,Math.floor(C.width)),v=Math.max(1,Math.floor(C.height));o(F=>F.w===k&&F.h===v?F:{w:k,h:v})};x();const I=new ResizeObserver(x);return I.observe(b),()=>I.disconnect()},[]),m.useEffect(()=>{i.current=Ea();const b=t.current;if(!b||n.w<2||n.h<2)return;const x=Math.min(2,window.devicePixelRatio||1);b.width=Math.floor(n.w*x),b.height=Math.floor(n.h*x),b.style.width=`${n.w}px`,b.style.height=`${n.h}px`;const I=b.getContext("2d");if(!I)return;I.setTransform(x,0,0,x,0,0);const C=i.current,k=n.w/R,v=n.h/M,{nonPpMin:F,nonPpMax:A,ppMin:O,ppMax:B}=_;I.clearRect(0,0,n.w,n.h);for(let w=0;w<R;w+=1)for(let j=0;j<M;j+=1){const V=P[w][j];if(!Number.isFinite(V))continue;const $=ge(N[j]),D=$?Ge(V,O,B):Ge(V,F,A),z=$?C.success:C.primary,S=Fa(C.dark,z,D);I.fillStyle=wa(S);const E=n.h-(j+1)*v;I.fillRect(w*k,E,k+.5,v+.5)}},[N,P,R,_,M,n.h,n.w]);const h=m.useCallback((b,x)=>{const I=t.current;if(!I||n.w<1||n.h<1)return null;const C=I.getBoundingClientRect(),k=b-C.left,v=x-C.top;if(k<0||v<0||k>=C.width||v>=C.height)return null;const F=Math.min(R-1,Math.max(0,Math.floor(k/C.width*R))),A=Math.min(M-1,Math.max(0,Math.floor((C.height-v)/C.height*M))),O=P[F][A];if(!Number.isFinite(O))return null;const B=N[A];return{si:F,ai:A,score:O,speedLabel:`${p[F]}×`,accLabel:cs(B),isPp:ge(B),left:k,top:v}},[N,P,R,M,n.h,n.w,p]);return a.jsxs("div",{className:"psc-heatmap-plot",children:[a.jsxs("div",{className:"psc-heatmap-yaxis","aria-hidden":!0,children:[a.jsx("span",{className:"psc-heatmap-axis-title psc-heatmap-axis-title--y",children:c}),_.accTicks.map(({i:b,label:x})=>a.jsx("span",{className:"psc-heatmap-tick psc-heatmap-tick--y",style:{bottom:`${(b+.5)/M*100}%`},children:x},`acc-${b}`))]}),a.jsxs("div",{className:"psc-heatmap-main",children:[a.jsxs("div",{ref:r,className:"psc-heatmap-canvas-wrap",onMouseLeave:()=>f(null),onMouseMove:b=>f(h(b.clientX,b.clientY)),children:[a.jsx("canvas",{ref:t,className:"psc-heatmap-canvas"}),u?a.jsxs("div",{className:"psc-heatmap-tooltip",style:{left:u.left+12,top:u.top+12},children:[a.jsxs("div",{children:[u.speedLabel," · ",u.accLabel,u.isPp?" · PP":""]}),a.jsx("div",{className:"psc-heatmap-tooltip__score",children:u.score.toFixed(2)})]}):null]}),a.jsxs("div",{className:"psc-heatmap-xaxis","aria-hidden":!0,children:[_.speedTicks.map(({i:b,label:x})=>a.jsx("span",{className:"psc-heatmap-tick psc-heatmap-tick--x",style:{left:`${(b+.5)/R*100}%`},children:x},`spd-${b}`)),a.jsx("span",{className:"psc-heatmap-axis-title psc-heatmap-axis-title--x",children:s})]})]})]})}function Ta({result:e}){const{t:s}=G("pages"),c=e==null?void 0:e.speedGrid,t=m.useMemo(()=>{var I,C;if(!((I=c==null?void 0:c.speeds)!=null&&I.length)||!((C=c==null?void 0:c.accuracies)!=null&&C.length))return null;const{speeds:r,accuracies:n,cells:o}=c;let u=1/0,f=-1/0,i=1/0,p=-1/0,N=!1,P=!1;for(let k=0;k<r.length;k+=1)for(let v=0;v<n.length;v+=1){const F=o[k][v];Number.isFinite(F)&&(ge(n[v])?(N=!0,i=Math.min(i,F),p=Math.max(p,F)):(P=!0,u=Math.min(u,F),f=Math.max(f,F)))}if(!N&&!P)return null;const _=Je(u,f),R=Je(i,p),M=Math.max(1,Math.ceil(r.length/12)),h=Math.max(1,Math.ceil(n.length/10)),b=He(r,M,ka),x=
1He(n,h,cs);return{speeds:r,accuracies:n,cells:o,hasPp:N,hasNonPp:P,meta:{nonPpMin:_.min,nonPpMax:_.max,ppMin:R.min,ppMax:R.max,speedTicks:b,accTicks:x}}},[c]);return t?a.jsxs("div",{className:"psc-panel psc-panel--speed-grid",children:[a.jsx("h3",{children:s("passSubmission.calculator.panels.speedGrid")}),a.jsxs("div",{className:"psc-heatmap",children:[a.jsx(Ra,{chart:t,speedLabel:s("passSubmission.calculator.labels.speed"),accuracyLabel:s("passSubmission.calculator.labels.accuracy")}),a.jsxs("div",{className:"psc-heatmap-legends",children:[t.hasNonPp?a.jsx($e,{label:s("passSubmission.calculator.speedGrid.legendNonPp"),min:t.meta.nonPpMin,max:t.meta.nonPpMax,variant:"non-pp"}):null,t.hasPp?a.jsx($e,{label:s("passSubmission.calculator.speedGrid.legendPp"),min:t.meta.ppMin,max:t.meta.ppMax,variant:"pp"}):null]})]})]}):null}const Oa=m.memo(Ta);function Ba({result:e}){const{t:s}=G("pages");if(!(e!=null&&e.compare))return a.jsxs("div",{className:"psc-panel psc-panel--compare",children:[a.jsx("h3",{children:s("passSubmission.calculator.panels.compare")}),a.jsx("p",{className:"psc-muted",children:s("passSubmission.calculator.compare.hint")})]});const c=e.compare;return a.jsxs("div",{className:"psc-panel psc-panel--compare",children:[a.jsx("h3",{children:s("passSubmission.calculator.panels.compare")}),a.jsxs("div",{className:"psc-primary-grid",children:[a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:s("passSubmission.calculator.compare.primary")}),a.jsx("span",{className:"psc-stat__value",children:c.primary.toFixed(2)})]}),a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:s("passSubmission.calculator.compare.secondary")}),a.jsx("span",{className:"psc-stat__value",children:c.secondary.toFixed(2)})]}),a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:s("passSubmission.calculator.compare.delta")}),a.jsxs("span",{className:"psc-stat__value",children:[c.delta>=0?"+":"",c.delta.toFixed(2)]})]})]})]})}function Va({result:e}){const{t:s}=G("pages");if(!(e!=null&&e.reclear))return a.jsxs("div",{className:"psc-panel psc-panel--reclear",children:[a.jsx("h3",{children:s("passSubmission.calculator.panels.reclear")}),a.jsx("p",{className:"psc-muted",children:s("passSubmission.calculator.reclear.needPlayer")})]});const c=e.reclear;return a.jsxs("div",{className:"psc-panel psc-panel--reclear",children:[a.jsx("h3",{children:s("passSubmission.calculator.panels.reclear")}),c.hasBest?a.jsxs("div",{className:"psc-primary-grid",children:[a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:s("passSubmission.calculator.reclear.best")}),a.jsx("span",{className:"psc-stat__value",children:Number(c.bestScore).toFixed(2)})]}),a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:s("passSubmission.calculator.reclear.status")}),a.jsx("span",{className:"psc-stat__value",children:c.beatsBest?s("passSubmission.calculator.reclear.beats"):c.equalBest?s("passSubmission.calculator.reclear.equal"):s("passSubmission.calculator.reclear.worse")})]})]}):a.jsx("p",{children:s("passSubmission.calculator.reclear.noPrior")})]})}function La({result:e}){const{t:s}=G("pages");if(e!=null&&e.customScoring)return a.jsxs("div",{className:"psc-panel psc-panel--placement",children:[a.jsx("h3",{children:s("passSubmission.calculator.panels.placement")}),a.jsx("p",{className:"psc-muted",children:s("passSubmission.calculator.placement.customScoring")})]});if(!(e!=null&&e.placement))return a.jsxs("div",{className:"psc-panel psc-panel--placement",children:[a.jsx("h3",{children:s("passSubmission.calculator.panels.placement")}),a.jsx("p",{className:"psc-muted",children:s("passSubmission.calculator.placement.needLevel")})]});const{rank:c,total:t,tied:r}=e.placement;return a.jsxs("div",{className:"psc-panel psc-panel--placement",children:[a.jsx("h3",{children:s("passSubmission.calculator.panels.placement")}),a.jsx("div",{className:"psc-stat",children:a.jsx("span",{className:"psc-stat__value psc-stat__value--lg",children:s("passSubmission.calculator.placement.rankOf",{rank:c,total:t})})}),r>0&&a.jsx("p",{className:"psc-muted",children:s("passSubmission.calculator.placement.tied",{count:r})})]})}function Aa({result:e}){const{t:s}=G("pages");if(!(e!=null&&e.rankedImpact))return a.jsxs("div",{className:"psc-panel psc-panel--ranked",children:[a.jsx("h3",{children:s("passSubmission.calculator.panels.ranked")}),a.jsx("p",{className:"psc-muted",children:s("passSubmission.calculator.ranked.needPlayer")})]});const c=e.rankedImpact;return a.jsxs("div",{className:"psc-panel psc-panel--ranked",children:[a.jsx("h3",{children:s("passSubmission.calculator.panels.ranked")}),a.jsxs("div",{className:"psc-primary-grid",children:[a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:s("passSubmission.calculator.ranked.before")}),a.jsx("span",{className:"psc-stat__value",children:c.beforeRanked.toFixed(2)})]}),a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:s("passSubmission.calculator.ranked.after")}),a.jsx("span",{className:"psc-stat__value",children:c.afterRanked.toFixed(2)})]}),a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:s("passSubmission.calculator.ranked.delta")}),a.jsxs("span",{className:"psc-stat__value",children:[c.delta>=0?"+":"",c.delta.toFixed(2)]})]}),a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:s("passSubmission.calculator.ranked.generalDelta")}),a.jsxs("span",{className:"psc-stat__value",children:["+",c.generalDelta.toFixed(2)]})]}),a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:s("passSubmission.calculator.ranked.ppDelta")}),a.jsxs("span",{className:"psc-stat__value",children:["+",(c.ppDelta||0).toFixed(2)]})]}),c.slotIndex!=null&&a.jsxs("div",{className:"psc-stat",children:[a.jsx("span",{className:"psc-stat__label",children:s("passSubmission.calculator.ranked.slot")}),a.jsxs("span",{className:"psc-stat__value",children:["#",c.slotIndex]})]})]}),c.countsForRanked===!1?a.jsx("p",{className:"psc-muted",children:s("passSubmission.calculator.ranked.missingCdn")}):null]})}const Da=[{id:"primary",slot:"main",component:Ca},{id:"placement",slot:"context",component:La},{id:"ranked",slot:"context",component:Aa},{id:"reclear",slot:"context",component:Va},{id:"missBudget",slot:"tools",component:va},{id:"inverse",slot:"tools",component:Ia},{id:"speedGrid",slot:"tools",component:Oa},{id:"compare",slot:"tools",component:Ba}];function Ha(e){return Da.filter(s=>s.slot===e)}function ns({slot:e,result:s,difficultyDict:c}){return Ha(e).map(({id:t,component:r})=>a.jsx(r,{result:s,difficultyDict:c},t))}function Ue({title:e,slot:s,result:c,difficultyDict:t,defaultOpen:r=!1}){const[n,o]=m.useState(r);return a.jsxs("details",{className:"pass-score-calculator__details",open:n,onToggle:u=>o(u.currentTarget.open),children:[a.jsx("summary",{children:e}),n?a.jsx("div",{className:"pass-score-calculator__details-body",children:a.jsx(ns,{slot:s,result:c,difficultyDict:t})}):null]})}function $a({result:e,difficultyDict:s}){return e?a.jsxs("div",{className:"pass-score-calculator__results",children:[a.jsx("div",{className:"pass-score-calculator__slot pass-score-calculator__slot--main",children:a.jsx(ns,{slot:"main",result:e,difficultyDict:s})}),a.jsx(Ue,{title:"Context",slot:"context",result:e,difficultyDict:s,defaultOpen:!0}),a.jsx(Ue,{title:"Tools",slot:"tools",result:e,difficultyDict:s})]}):null}const Ja=m.memo($a);function Ga(e){try{const s=JSON.stringify(e);return btoa(unescape(encodeURIComponent(s))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}catch{return""}}function Ua(e){if(!e)return null;try{const s=e.replace(/-/g,"+").replace(/_/g,"/"),c=s.length%4===0?"":"=".repeat(4-s.length%4),t=decodeURIComponent(escape(atob(s+c)));return JSON.parse(t)}catch{return null}}function qa({form:e,overrides:s,targetScore:c,compareForm:t}
1){const r=new URLSearchParams,n=(o,u)=>{u==null||u===""||r.set(o,String(u))};if(n("levelId",e==null?void 0:e.levelId),n("speed",e==null?void 0:e.speed),n("playerId",e==null?void 0:e.playerId),n("player",e==null?void 0:e.leaderboardName),e!=null&&e.isNoHold&&r.set("noHold","1"),n("ePerfect",e==null?void 0:e.ePerfect),n("perfectMinus",e==null?void 0:e.perfectMinus),n("perfect",e==null?void 0:e.perfect),n("perfectPlus",e==null?void 0:e.perfectPlus),n("lPerfect",e==null?void 0:e.lPerfect),n("tooEarly",e==null?void 0:e.tooEarly),n("early",e==null?void 0:e.early),n("late",e==null?void 0:e.late),(e==null?void 0:e.adofaiVersion)!=null&&n("adofaiVersion",e.adofaiVersion),e!=null&&e.isXPerfectMode&&r.set("xPerfect","1"),n("baseScore",(s==null?void 0:s.baseScore)||(s==null?void 0:s.difficultyBaseScore)),n("ppBaseScore",s==null?void 0:s.ppBaseScore),n("diffId",s==null?void 0:s.diffId),n("tilecount",s==null?void 0:s.tilecount),n("targetScore",c),s!=null&&s.xaccCurveMeta&&typeof s.xaccCurveMeta=="object"){const o=Ga(s.xaccCurveMeta);o&&r.set("xaccMeta",o)}else n("cutoff",s==null?void 0:s.cutoff),n("poleOffset",s==null?void 0:s.poleOffset),n("topMultiplier",s==null?void 0:s.topMultiplier);return t&&(n("cEPerfect",t.ePerfect),n("cPerfectMinus",t.perfectMinus),n("cPerfect",t.perfect),n("cPerfectPlus",t.perfectPlus),n("cLPerfect",t.lPerfect),n("cTooEarly",t.tooEarly),n("cEarly",t.early),n("cLate",t.late)),r}function za(e){const s=typeof e=="string"?new URLSearchParams(e):e,c={},t={};let r="";const n={},o=i=>s.get(i);o("levelId")&&(c.levelId=o("levelId")),o("speed")!=null&&(c.speed=o("speed")),o("playerId")&&(c.playerId=o("playerId")),o("player")&&(c.leaderboardName=o("player")),c.isNoHold=o("noHold")==="1";for(const i of["ePerfect","perfectMinus","perfect","perfectPlus","lPerfect","tooEarly","early","late"])o(i)!=null&&(c[i]=o(i));o("adofaiVersion")!=null&&(c.adofaiVersion=Number(o("adofaiVersion"))),c.isXPerfectMode=o("xPerfect")==="1",o("baseScore")!=null?t.baseScore=o("baseScore"):o("difficultyBaseScore")!=null&&(t.baseScore=o("difficultyBaseScore"));for(const i of["ppBaseScore","diffId","tilecount"])o(i)!=null&&(t[i]=o(i));const u=Ua(o("xaccMeta"));if(u&&typeof u=="object")t.xaccCurveMeta=u;else for(const i of["cutoff","poleOffset","topMultiplier"])o(i)!=null&&(t[i]=o(i));o("targetScore")!=null&&(r=o("targetScore"));const f={cEPerfect:"ePerfect",cPerfectMinus:"perfectMinus",cPerfect:"perfect",cPerfectPlus:"perfectPlus",cLPerfect:"lPerfect",cTooEarly:"tooEarly",cEarly:"early",cLate:"late"};for(const[i,p]of Object.entries(f))o(i)!=null&&(n[p]=o(i));return{form:c,overrides:t,targetScore:r,compareForm:Object.keys(n).length?n:null}}function ue({title:e,onClose:s,children:c,panelClassName:t=""}){return a.jsxs(Ds,{onClose:s,overlayClassName:"psc-tool-popup",panelClassName:`psc-tool-popup__panel${t?` ${t}`:""}`,ariaLabelledBy:"psc-tool-popup-title",children:[a.jsxs("div",{className:"psc-tool-popup__header",children:[a.jsx("h2",{id:"psc-tool-popup-title",children:e}),a.jsx(Hs,{variant:"inline",onClick:s,"aria-label":"Close"})]}),a.jsx("div",{className:"psc-tool-popup__body",children:c})]})}function Xa(e){var c;if(!e)return null;const s=((c=e.results)==null?void 0:c[0])||e.pass||e;return s!=null&&s.id?s:null}function Ka(e){const s=xe(e),c=We(s);if(c)return parseInt(c,10);const t=String(s).trim();return/^\d+$/.test(t)?parseInt(t,10):null}function Qa(e,s){if(!e)return 0;for(const c of s){const t=parseInt(String(e[c]??""),10);if(Number.isFinite(t))return t}return 0}const Wa=[{keys:["earlyDouble","tooEarly"],color:"#FF0000"},{keys:["earlySingle","early"],color:"#FF6F4D"},{keys:["ePerfect"],color:"#FCFF4D"},{keys:["perfect"],color:"#5FFF4E"},{keys:["lPerfect"],color:"#FCFF4D"},{keys:["lateSingle","late"],color:"#FF6F4D"}];function Ya({difficultyDict:e,onClose:s,onImport:c}){const{t}=G(["pages","common"]),[r,n]=m.useState(""),[o,u]=m.useState([]),[f,i]=m.useState(!1),[p,N]=m.useState(null),[P,_]=m.useState(!1),[R,M]=m.useState(!1),h=m.useRef(null),b=m.useRef(null),x=m.useRef(null),I=m.useRef(null),C=m.useRef(null),k=m.useRef(null),v=m.useCallback(async S=>{var y;const E=xe(S);if(!String(E).trim()){u([]);return}h.current&&h.current.cancel("New search initiated"),h.current=q.CancelToken.source();try{const Z=We(E)||E,W=await q.get(ce.database.passes.root(),{params:{query:Z,limit:50,offset:0,sort:"SCORE_DESC"},cancelToken:h.current.token}),ne=Array.isArray((y=W.data)==null?void 0:y.results)?W.data.results:[];u(ne),ne.length===0&&i(!1)}catch(U){q.isCancel(U)||(console.error("Error searching passes:",U),u([]))}},[]),F=m.useCallback(async S=>{if(!Number.isFinite(S)||S<=0){N(null),M(!1),_(!1);return}b.current&&b.current.cancel("New preview fetch"),b.current=q.CancelToken.source(),_(!0),M(!1);try{const{data:E}=await q.get(ce.database.passes.byId(S),{cancelToken:b.current.token}),y=Xa(E);if(!y){N(null),M(!0),_(!1);return}N(y),M(!1),_(!1)}
1catch(E){if(q.isCancel(E))return;console.error("Error fetching pass preview:",E),N(null),M(!0),_(!1)}},[]),A=m.useCallback(S=>{if(x.current&&clearTimeout(x.current),I.current&&clearTimeout(I.current),!String(S).trim()){u([]),N(null),M(!1),i(!1);return}x.current=setTimeout(()=>{v(S)},500),I.current=setTimeout(()=>{const y=Ka(S);F(y)},500)},[v,F]),O=S=>{const E=xe(S.target.value);n(E),A(E)},B=S=>{S!=null&&S.id&&(n(String(S.id)),N(S),M(!1),i(!1),F(S.id))};m.useEffect(()=>()=>{h.current&&h.current.cancel("Component unmounted"),b.current&&b.current.cancel("Component unmounted"),x.current&&clearTimeout(x.current),I.current&&clearTimeout(I.current)},[]),m.useEffect(()=>{function S(E){C.current&&k.current&&!C.current.contains(E.target)&&!k.current.contains(E.target)&&i(!1)}return document.addEventListener("mousedown",S),()=>document.removeEventListener("mousedown",S)},[]);const w=p==null?void 0:p.level,j=e==null?void 0:e[w==null?void 0:w.diffId],V=Number(p==null?void 0:p.scoreV2),$=Number(p==null?void 0:p.accuracy),D=$s(w),z=D&&D!=="No credits";return a.jsx(ue,{title:t("passSubmission.calculator.loadPass.title"),onClose:s,panelClassName:"psc-tool-popup__panel--wide psc-tool-popup__panel--load-pass",children:a.jsxs("div",{className:"pass-score-calculator__fields",children:[a.jsxs("div",{className:"pass-score-calculator__field",children:[a.jsx("label",{children:t("passSubmission.calculator.loadPass.placeholder")}),a.jsxs("div",{className:"pass-score-calculator__pass-search",ref:k,children:[a.jsx("input",{type:"text",autoComplete:"off",placeholder:t("passSubmission.calculator.loadPass.placeholder"),value:r,onChange:O}),o.length>0&&a.jsx("button",{type:"button",className:`pass-score-calculator__expand-btn btn-fill-primary${f?" is-expanded":""}`,onClick:()=>i(S=>!S),"aria-label":t("passSubmission.calculator.loadPass.title"),"aria-expanded":f,children:a.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:a.jsx("polyline",{points:"6 9 12 15 18 9"})})}),a.jsx("div",{className:`pass-score-calculator__pass-dropdown${f?" is-expanded":""}`,ref:C,children:o.map(S=>{var y,U,Z,W;const E=e==null?void 0:e[(y=S.level)==null?void 0:y.diffId];return a.jsxs("button",{type:"button",className:"pass-score-calculator__pass-option",onClick:()=>B(S),children:[E!=null&&E.icon?a.jsx("img",{src:we(E.icon,Ee.MEDIUM),alt:E.name||"",className:"pass-score-calculator__pass-option-icon"}):null,a.jsxs("span",{className:"pass-score-calculator__pass-option-body",children:[a.jsxs("span",{className:"pass-score-calculator__pass-option-title",children:[((U=S.level)==null?void 0:U.song)||t("passSubmission.calculator.loadPass.unknownLevel")," (ID: ",S.id,")"]}),a.jsxs("span",{className:"pass-score-calculator__pass-option-meta",children:[a.jsx("span",{children:((Z=S.player)==null?void 0:Z.name)||t("passSubmission.calculator.loadPass.unknownPlayer")}),a.jsx("span",{children:((W=S.level)==null?void 0:W.artist)||""})]})]})]},S.id)})})]})]}),a.jsx("div",{className:"pass-score-calculator__pass-preview",children:P&&!p?a.jsx("p",{className:"psc-muted",children:t("passSubmission.calculator.loadPass.fetching")}):p?a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:"pass-score-calculator__pass-preview-main",children:[j!=null&&j.icon?a.jsx("img",{src:we(j.icon,Ee.MEDIUM),alt:j.name||"",className:"pass-score-calculator__pass-preview-diff"}):null,a.jsxs("div",{className:"pass-score-calculator__pass-preview-info",children:[a.jsx("p",{className:"pass-score-calculator__pass-preview-song",children:me((w==null?void 0:w.song)||t("passSubmission.calculator.loadPass.unknownLevel"),36)}),a.jsxs("div",{className:"pass-score-calculator__pass-preview-sub",children:[a.jsx("span",{children:me((w==null?void 0:w.artist)||"",18)}),z?a.jsx("span",{children:me(D,18)}):null]})]}),p.player?a.jsxs("div",{className:"pass-score-calculator__pass-preview-player",children:[a.jsx(Js,{...Gs(p.player),className:"pass-score-calculator__pass-preview-avatar"}),a.jsx("span",{children:p.player.name})]}):null]}),a.jsxs("div",{className:"pass-score-calculator__pass-preview-stats",children:[a.jsxs("span",{children:["#",p.id]}),a.jsx("span",{children:Number.isFinite(V)?Us(V):"—"}),a.jsx("span",{children:Number.isFinite($)?ua($):"—"}),a.jsxs("span",{children:[qs(p.speed,2),"×"]})]}),a.jsx("div",{className:"pass-score-calculator__pass-preview-judgements","aria-hidden":"true",children:Wa.map(S=>a.jsx("span",{style:{color:S.color},children:Qa(p.judgements,S.keys)},S.keys[0]))})]}):a.jsx("p",{className:"psc-muted",children:t(R?"passSubmission.calculator.loadPass.notFound":"passSubmission.calculator.loadPass.previewEmpty")})}),a.jsx("div",{className:"pass-score-calculator__popup-actions",children:a.jsxs("div",{className:"pass-score-calculator__popup-actions-end",children:[a.jsx("button",{type:"button",className:"btn-fill-neutral-dark",onClick:s,children:t("buttons.cancel",{ns:"common"})}),a.jsx("button",{type:"button",className:"btn-fill-primary",onClick:()=>c(p),disabled:!p,children:t("passSubmission.calculator.loadPass.import")})]})})]})})}const Q={baseScore:"",ppBaseScore:"",difficultyBaseScore:"",diffId:"",cutoff:"",poleOffset:"",topMultiplier:"",tilecount:"",xaccCurveMeta:null};function Ne(e){const s={...Q,...e||{}};return(s.baseScore==null||String(s.baseScore).trim()==="")&&s.difficultyBaseScore!=null&&String(s.difficultyBaseScore).trim()!==""&&(s.baseScore=s.difficultyBaseScore),s}function se(e){const s=Ne(e);return{...s,xaccCurveMeta:s.xaccCurveMeta?{...s.xaccCurveMeta}:null}}function Za(e,s){return JSON.stringify(se(e))===JSON.stringify(se(s))}const ls={ePerfect:"",perfectMinus:"",perfect:"",perfectPlus:"",lPerfect:"",tooEarly:"",early:"",late:""};function et({size:e=20,color:s="currentColor"}){return a.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none","aria-hidden":!0,
1children:[a.jsx("circle",{cx:"12",cy:"12",r:"9",stroke:s,strokeWidth:"2"}),a.jsx("circle",{cx:"12",cy:"12",r:"5",stroke:s,strokeWidth:"2"}),a.jsx("circle",{cx:"12",cy:"12",r:"1.5",fill:s})]})}function K(e){if(e==null||e==="")return"";const s=String(e).match(/^\d+/);return s?s[0]:""}function Y(e){const s={...ls,...e||{}};return{ePerfect:K(s.ePerfect),perfectMinus:K(s.perfectMinus),perfect:K(s.perfect),perfectPlus:K(s.perfectPlus),lPerfect:K(s.lPerfect),tooEarly:K(s.tooEarly),early:K(s.early),late:K(s.late)}}function st(e,s){return JSON.stringify(Y(e))===JSON.stringify(Y(s))}function at(e){return Y({ePerfect:(e==null?void 0:e.ePerfect)??"",perfectMinus:(e==null?void 0:e.perfectMinus)??"",perfect:(e==null?void 0:e.perfect)??"",perfectPlus:(e==null?void 0:e.perfectPlus)??"",lPerfect:(e==null?void 0:e.lPerfect)??"",tooEarly:(e==null?void 0:e.tooEarly)??"",early:(e==null?void 0:e.early)??"",late:(e==null?void 0:e.late)??""})}function ie({label:e,active:s,onClick:c,children:t}){return a.jsx("button",{type:"button",className:s?"pass-score-calculator__icon-btn is-active":"pass-score-calculator__icon-btn",onClick:c,"aria-label":e,title:e,children:t})}function be({onCancel:e,onSave:s,children:c=null}){const{t}=G(["pages","common"]);return a.jsxs("div",{className:"pass-score-calculator__popup-actions",children:[c,a.jsxs("div",{className:"pass-score-calculator__popup-actions-end",children:[a.jsx("button",{type:"button",className:"btn-fill-neutral-dark",onClick:e,children:t("buttons.cancel",{ns:"common"})}),a.jsx("button",{type:"button",className:"btn-fill-primary",onClick:s,children:t("buttons.save",{ns:"common"})})]})]})}const vt=()=>{var ke;const{t:e}=G(["pages","common"]),s=sa(),[c]=aa();ta();const{difficultyDict:t,difficulties:r}=zs(),{user:n}=Xs(),o=m.useMemo(()=>Ks({title:e("passSubmission.calculator.title"),description:e("passSubmission.calculator.meta.description"),pathname:s.pathname,noindex:!0}),[e,s.pathname]),[u,f]=m.useState(()=>{var l;return Ne((l=s.state)==null?void 0:l.overrides)}),[i,p]=m.useState(()=>{var l;return((l=s.state)==null?void 0:l.targetScore)??""}),[N,P]=m.useState(()=>{var l;return{...ls,...((l=s.state)==null?void 0:l.compareForm)||{}}}),[_,R]=m.useState(!1),[M,h]=m.useState(null),[b,x]=m.useState(null),[I,C]=m.useState(null),[k,v]=m.useState(null),[F,A]=m.useState(()=>{var l;return((l=s.state)==null?void 0:l.searchInput)||""}),O=m.useRef(!1),{form:B,setForm:w,submitAttempt:j,isFormValid:V,isFormValidDisplay:$,isValidFeelingRating:D,isValidExpectedRating:z,isValidKeyCount:S,isValidSpeed:E,level:y,setLevel:U,levelLoading:Z,videoDetail:W,videoLinkResolving:ne,accuracy:rs,score:os,handleInputChange:is,handleAdofaiVersionChange:us}=ra({mode:"calculator",initialForm:((ke=s.state)==null?void 0:ke.form)||Zs,rejectDeletedLevel:!1,isUDiffLevel:l=>{var d,T,L,H;return((T=(d=t[l==null?void 0:l.diffId])==null?void 0:d.name)==null?void 0:T[0])==="U"||((H=(L=t[l==null?void 0:l.diffId])==null?void 0:L.name)==null?void 0:H[0])==="Q"},isKeyCountRequiredLevel:l=>{var d;return Ys((d=t[l==null?void 0:l.diffId])==null?void 0:d.name)},extraValidation:()=>({}),scoreOverrides:u,allowSandboxScore:!0}),{result:ps,error:ye,isCalculating:_e,run:ds}=Pa();m.useEffect(()=>{if(O.current)return;if(![...c.keys()].length){O.current=!0;return}O.current=!0;const l=za(c);Object.keys(l.form).length&&(w(d=>({...d,...l.form})),l.form.levelId&&A(String(l.form.levelId))),Object.keys(l.overrides).length&&f(d=>Ne({...d,...l.overrides})),l.targetScore&&p(l.targetScore),l.compareForm&&P(d=>({...d,...l.compareForm}))},[c,w]),m.useEffect(()=>{(async()=>{if(!(n!=null&&n.username))return;const{username:d}=n;try{const T=`${ce.playersV3.root()}/search?query=${encodeURIComponent(d)}`,H=(await q.get(T)).data,X=(Array.isArray(H)?H:(H==null?void 0:H.results)??[]).find(J=>(J==null?void 0:J.name)&&J.name.toLowerCase()===(n.nickname||"").toLowerCase());X!=null&&X.id?w(J=>({...J,playerId:J.playerId||X.id,leaderboardName:J.leaderboardName||X.name})):w(J=>({...J,playerId:J.playerId||"",leaderboardName:J.leaderboardName||d}))}catch(T){console.error("[Profile Search] Error searching profiles:",T),w(L=>({...L,playerId:L.playerId||"",leaderboardName:L.leaderboardName||d}))}})()},[n,w]);const ms=()=>{ds({form:B,level:y,overrides:u,difficultyDict:t,targetScore:i,compareForm:N})},fs=async()=>{const l=qa({form:B,overrides:u,targetScore:i,compareForm:N}),d=`${window.location.origin}/submission/pass/calculator?${l.toString()}`;try{await navigator.clipboard.writeText(d),re.success(e("passSubmission.calculator.linkCopied"))}catch{re.error("Failed to copy link")}},ae=m.useMemo(()=>es(y,t),[y,t]);m.useEffect(()=>{if(!y)return;const l=ae.baseScore;l===""||l==null||f(d=>d.baseScore!=null&&String(d.baseScore).trim()!==""?d:{...d,baseScore:l})},[y==null?void 0:y.id,ae.baseScore]);const hs=()=>{x(se({...Q,baseScore:ae.baseScore||null}))},g=b??u,bs=!!(u.xaccCurveMeta||u.cutoff!=null&&String(u.cutoff).trim()!==""||u.poleOffset!=null&&String(u.poleOffset).trim()!==""||u.topMultiplier!=null&&String(u.topMultiplier).trim()!==""),le=!!(g.xaccCurveMeta||g.cutoff!=null&&String(g.cutoff).trim()!==""||g.poleOffset!=null&&String(g.poleOffset).trim()!==""||g.topMultiplier!=null&&String(g.topMultiplier).trim()!==""),xs=m.useMemo(()=>{const l=y?{...y}:{id:null,baseScore:100,ppBaseScore:0,tilecount:100,difficulty:{},xaccCurveMeta:null};if(g.baseScore!=null&&g.baseScore!==""&&Number.isFinite(Number(g.baseScore))&&(l.baseScore=Number(g.baseScore)),g.ppBaseScore!==""&&Number.isFinite(Number(g.ppBaseScore))&&(l.ppBaseScore=Number(g.ppBaseScore)),g.tilecount!==""&&Number.isFinite(Number(g.tilecount))&&(l.tilecount=Number(g.tilecount)),g.xaccCurveMeta)l.xaccCurveMeta=g.xaccCurveMeta;else if(le){const d=te(l);l.xaccCurveMeta={cutoff:g.cutoff!==""&&g.cutoff!=null?Number(g.cutoff):d.cutoff,poleOffset:g.poleOffset!==""&&g.poleOffset!=null?Number(g.poleOffset):d.poleOffset,topMultiplier:g.topMultiplier!==""&&g.topMultiplier!=null?Number(g.topMultiplier):d.topMultiplier}}return l},[y,g,le]),ee=m.useMemo(()=>{try{return ss(y,g,t)}catch{return null}},[y,g,t]),Me=m.useMemo(()=>ee?Qs(ee)||te(ee):null,[ee]),Ss=m.useMemo(()=>{const l=g.tilecount!==""&&Number.isFinite(Number(g.tilecount))?Number(g.tilecount):null,d=(y==null?void 0:y.tilecount)>0?y.tilecount:null;return l||d||100},[g.tilecount,y==null?void 0:y.tilecount]),gs=m.useCallback(l=>{x(d=>({...d||Q,xaccCurveMeta:l||null,cutoff:"",poleOffset:"",topMultiplier:""}))},[]),Ns=()=>{x(l=>({...l||Q,xaccCurveMeta:null,cutoff:"",poleOffset:"",topMultiplier:""}))},js=l=>{var T;if(!(l!=null&&l.id)){re.error(e("passSubmission.calculator.loadPass.failed"));return}const d=l.judgements||{};w(L=>{var H,de,X;return{...L,levelId:String(l.levelId??((H=l.level)==null?void 0:H.id)??""),speed:l.speed!=null?String(l.speed):"",isNoHold:!!l.isNoHoldTap,playerId:l.playerId||((de=l.player)==null?void 0:de.id)||"",leaderboardName:((X=l.player)==null?void 0:X.name)||L.leaderboardName,tooEarly:String(d.earlyDouble??d.tooEarly??0),early:String(d.earlySingle??d.early??0),ePerfect:String(d.ePerfect??0),perfectMinus:String(d.perfectMinus??0),perfect:String(d.perfect??0),perfectPlus:String(d.perfectPlus??0),lPerfect:String(d.lPerfect??0),late:String(d.lateSingle??d.late??0),adofaiVersion:l.adofaiVersion!=null?Number(l.adofaiVersion):l.isAdofaiV2?1:2,isXPerfectMode:!!l.isXPerfectMode,passMetaFlags:l.passMetaFlags??0}}),A(String(l.levelId??((T=l.level)==null?void 0:T.id)??"")),l.level&&U(l.level),h(null),re.success(e("passSubmission.calculator.loadPass.loaded"))},ys=(l,d)=>{x(T=>({...T||Q,[l]:d}))},_s=(l,d)=>{if(d){const T=r==null?void 0:r.find(L=>
1L.name===l);if(T)x(L=>({...L||Q,baseScore:T.baseScore}));else{const L=parseFloat(l);Number.isNaN(L)||x(H=>({...H||Q,baseScore:L}))}}else x(T=>({...T||Q,baseScore:l===""?null:l}))},Pe=m.useCallback(()=>{var T;if(g.baseScore===null||g.baseScore===void 0)return"";const l=parseFloat(g.baseScore),d=r==null?void 0:r.find(L=>L.baseScore===l);return d?d.name:(T=g.baseScore)==null?void 0:T.toString()},[g.baseScore,r]);m.useEffect(()=>{x(M==="overrides"?l=>l??se(u):null),C(M==="target"?l=>l??String(i??""):null),v(M==="compare"?l=>l??Y(N):null)},[M]);const pe=l=>l?window.confirm(e("confirmations.unsavedChanges",{ns:"common"})):!0,Ce=()=>{pe(b&&!Za(b,u))&&(R(!1),x(null),h(null))},Ms=()=>{b&&f(se(b)),R(!1),x(null),h(null)},ve=()=>{pe(I!=null&&String(I)!==String(i??""))&&(C(null),h(null))},Ps=()=>{I!=null&&p(I),C(null),h(null)},Ie=()=>{pe(k&&!st(k,N))&&(v(null),h(null))},Cs=()=>{k&&P(Y(k)),v(null),h(null)},vs=(l,d)=>{d!==""&&!/^\d+$/.test(String(d))||v(T=>({...Y(T),[l]:d}))},Is=()=>{v(at(B))},ks=["baseScore","ppBaseScore","tilecount","diffId"].some(l=>{const d=u[l];if(d==null||String(d).trim()==="")return!1;const T=ae[l];return!(T!==void 0&&T!==""&&Number(d)===Number(T)||l==="diffId"&&(y==null?void 0:y.diffId)!=null&&Number(d)===Number(y.diffId))}),Fs=bs||ks,ws=String(i).trim()!=="",Es=Object.values(N).some(l=>String(l??"").trim()!=="");return a.jsxs("div",{className:"pass-submission-page pass-score-calculator",children:[a.jsx(Ws,{...o}),a.jsxs("div",{className:"form-container",children:[a.jsx("div",{className:"pass-score-calculator__form-shell",children:a.jsx(ea,{mode:"calculator",form:B,setForm:w,isFormValidDisplay:$,isValidSpeed:E,isValidFeelingRating:D,isValidExpectedRating:z,isValidKeyCount:S,submitAttempt:j,isFormValid:V,level:y,setLevel:U,levelLoading:Z,videoDetail:W,videoLinkResolving:ne,accuracy:rs,score:os,handleInputChange:is,handleAdofaiVersionChange:us,difficultyDict:t,searchInput:F,setSearchInput:A,renderLevelInfoActions:()=>a.jsx(ie,{label:e("passSubmission.calculator.overrides.title"),active:Fs,onClick:()=>{x(se(u)),h("overrides")},children:a.jsx(ca,{size:"18px",color:"currentColor"})}),renderJudgementActions:()=>a.jsxs(a.Fragment,{children:[a.jsx(ie,{label:e("passSubmission.calculator.loadPass.title"),onClick:()=>h("loadPass"),children:a.jsx(Re,{size:"18px",color:"currentColor"})}),a.jsx(ie,{label:e("passSubmission.calculator.targetScore"),active:ws,onClick:()=>{C(String(i??"")),h("target")},children:a.jsx(et,{})}),a.jsx(ie,{label:e("passSubmission.calculator.compareInputs.title"),active:Es,onClick:()=>{v(Y(N)),h("compare")},children:a.jsx(na,{size:"18px",color:"currentColor"})})]}),renderSubmitActions:()=>a.jsxs("div",{className:"pass-score-calculator__form-actions",children:[a.jsx("button",{type:"button",className:"btn-fill-primary",onClick:ms,disabled:_e,children:e(_e?"passSubmission.calculator.calculating":"passSubmission.calculator.calculate")}),a.jsx("button",{type:"button",className:"btn-fill-neutral-dark",onClick:()=>void fs(),children:e("passSubmission.calculator.copyLink")})]})})}),ye&&a.jsx("div",{className:"pass-score-calculator__error",role:"alert",children:ye})]}),a.jsx(Ja,{result:ps,difficultyDict:t}),M==="overrides"&&b?a.jsxs(ue,{title:e("passSubmission.calculator.overrides.title"),onClose:Ce,children:[a.jsx("p",{className:"psc-muted",children:e("passSubmission.calculator.overrides.hint")}),a.jsxs("div",{className:"pass-score-calculator__fields",children:[a.jsxs("div",{className:"pass-score-calculator__field-row",children:[a.jsxs("div",{className:"pass-score-calculator__field",children:[a.jsx("label",{children:e("passSubmission.calculator.overrides.baseScore")}),a.jsx(pa,{value:g.baseScore===null||g.baseScore===void 0?"":String(g.baseScore),onChange:_s,difficulties:r,allowCustomInput:!0,placeholder:e("passSubmission.calculator.overrides.baseScore")}),Pe()!==""&&a.jsx("p",{className:"pass-score-calculator__equal-to",children:e("passSubmission.calculator.overrides.equalTo",{name:Pe()})})]}),a.jsxs("div",{className:"pass-score-calculator__field",children:[a.jsx("label",{children:e("passSubmission.calculator.overrides.ppBaseScore")}),a.jsx("input",{value:ma(g.ppBaseScore,ae.ppBaseScore),onChange:l=>ys("ppBaseScore",l.target.value)})]})]}),a.jsxs("div",{className:"pass-score-calculator__curve",children:[a.jsxs("div",{className:"pass-score-calculator__curve-header",children:[a.jsx("label",{children:e("passSubmission.calculator.overrides.curve")}),a.jsx("p",{className:"psc-muted",children:e(le?"passSubmission.calculator.overrides.curveCustom":"passSubmission.calculator.overrides.curveLevel")})]}),a.jsxs("div",{className:"pass-score-calculator__curve-actions",children:[a.jsx("button",{type:"button",className:"btn-fill-neutral-dark",onClick:()=>
1R(!0),children:e("passSubmission.calculator.overrides.editCurve")}),le?a.jsx("button",{type:"button",className:"btn-fill-neutral-dark",onClick:Ns,children:e("passSubmission.calculator.overrides.clearCurve")}):null]}),ee&&Me&&a.jsx("div",{className:"pass-score-calculator__curve-preview",children:a.jsx(Qe,{tilecount:Ss,levelData:ee,difficultyDict:t,xaccCurve:Me,adminXaccEditor:!1})})]}),a.jsx(be,{onCancel:Ce,onSave:Ms,children:a.jsx("button",{type:"button",className:"btn-fill-neutral-dark",onClick:hs,children:e("passSubmission.calculator.overrides.reset")})})]})]}):null,M==="loadPass"?a.jsx(Ya,{difficultyDict:t,onClose:()=>h(null),onImport:js}):null,M==="target"&&I!=null?a.jsx(ue,{title:e("passSubmission.calculator.targetScore"),onClose:ve,children:a.jsxs("div",{className:"pass-score-calculator__fields",children:[a.jsx("div",{className:"pass-score-calculator__field",children:a.jsx("input",{value:I,onChange:l=>C(l.target.value)})}),a.jsx(be,{onCancel:ve,onSave:Ps})]})}):null,M==="compare"&&k?a.jsxs(ue,{title:e("passSubmission.calculator.compareInputs.title"),onClose:Ie,panelClassName:"psc-tool-popup__panel--wide",children:[a.jsx("p",{className:"psc-muted",children:e("passSubmission.calculator.compareInputs.hint")}),a.jsxs("div",{className:"pass-score-calculator__fields",children:[a.jsx(oa,{values:k,onChange:l=>vs(l.target.name,l.target.value),showScore:!1,integerOnly:!0,showXPerfectFields:!!B.isXPerfectMode&&Number(B.adofaiVersion)===3}),a.jsx(be,{onCancel:Ie,onSave:Cs,children:a.jsxs("button",{type:"button",className:"btn-fill-neutral-dark pass-score-calculator__btn--icon",onClick:Is,title:e("passSubmission.calculator.compareInputs.copyJudgementsTooltip"),children:[a.jsx(Re,{size:"16px",color:"currentColor"}),e("passSubmission.calculator.compareInputs.copyJudgements")]})})]})]}):null,_?a.jsx(ia,{level:xs,sandbox:!0,onClose:()=>R(!1),onApply:gs}):null]})};export{vt 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.