PageSourceSearch

https://www.funnudge.com/_next/static/chunks/1395.0d15cc24cf947122.js

js funnudge.com collected 2026-10-02 01:30:44 UTC 13,090 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1395],{1395:(e,t,r)=>{r.r(t),r.d(t,{default:()=>d});var n=r(5155),l=r(2115),c=r(2932),a=r(1175),u=r(4107),s=r(3557),i=r(2773);let o=[{cells:[[[0,1],[1,1],[2,1],[3,1]],[[2,0],[2,1],[2,2],[2,3]]],hue:190},{cells:[[[1,0],[2,0],[1,1],[2,1]]],hue:50},{cells:[[[1,0],[0,1],[1,1],[2,1]],[[1,0],[1,1],[2,1],[1,2]],[[0,1],[1,1],[2,1],[1,2]],[[1,0],[0,1],[1,1],[1,2]]],hue:280},{cells:[[[1,0],[2,0],[0,1],[1,1]],[[1,0],[1,1],[2,1],[2,2]]],hue:120},{cells:[[[0,0],[1,0],[1,1],[2,1]],[[2,0],[1,1],[2,1],[1,2]]],hue:0},{cells:[[[0,0],[0,1],[1,1],[2,1]],[[1,0],[2,0],[1,1],[1,2]],[[0,1],[1,1],[2,1],[2,2]],[[1,0],[1,1],[0,2],[1,2]]],hue:220},{cells:[[[2,0],[0,1],[1,1],[2,1]],[[1,0],[1,1],[1,2],[2,2]],[[0,1],[1,1],[2,1],[0,2]],[[0,0],[1,0],[1,1],[1,2]]],hue:30}];function d(){let e=(0,l.useRef)(null),[t,r]=(0,l.useState)("idle");(0,i.GL)("running"===t);let[d,f]=(0,l.useState)(0),[h,x]=(0,l.useState)(0),[m,p]=(0,l.useState)(1),{best:b,submit:g}=(0,s.g)("block-drop"),[y,v]=(0,l.useState)([]),w=(0,l.useRef)(0),k=(0,l.useCallback)((e,t)=>{let r=++w.current;v(n=>[...n.slice(-2),{id:r,text:e,cls:t}]),setTimeout(()=>v(e=>e.filter(e=>e.id!==r)),1100)},[]),j=(0,l.useRef)(k);j.current=k;let R=(0,l.useRef)([]),N=(0,l.useRef)(null),S=(0,l.useRef)(0),M=(0,l.useRef)([]),D=(0,l.useRef)(null),E=(0,l.useRef)(!1),C=(0,l.useRef)(0),A=(0,l.useRef)(!1),L=(0,l.useRef)(0),P=(0,l.useRef)(-1),T=(0,l.useRef)([]),_=(0,l.useRef)(0),z=(0,l.useRef)(null),O=(0,l.useRef)(0),B=(0,l.useRef)(0),F=(0,l.useRef)("idle"),I=(0,l.useRef)(0),W=(0,l.useRef)(0),q=(0,l.useRef)(!1);F.current=t;let G=()=>Math.floor(B.current/8)+1,H=()=>{if(0===M.current.length){let e=o.map((e,t)=>t);for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}M.current=e}return M.current.pop()},U=e=>{let t=o[e.type];return t.cells[e.rot%t.cells.length].map(t=>{let[r,n]=t;return{x:e.x+r,y:e.y+n}})},V=e=>U(e).some(e=>e.x<0||e.x>=10||e.y>=18||e.y>=0&&null!==R.current[e.y][e.x]),X=(0,l.useCallback)(()=>{N.current={type:S.current,rot:0,x:3,y:-1},S.current=H(),E.current=!1,V(N.current)&&(N.current=null,(0,a._O)("lose"),L.current=1.2,P.current=0)},[]),Y=(0,l.useCallback)(()=>{let e=N.current;if(e&&!E.current&&"running"===F.current)if(E.current=!0,(0,a._O)("flap"),null===D.current)D.current=e.type,N.current={type:S.current,rot:0,x:3,y:-1},S.current=H();else{let t=D.current;D.current=e.type,N.current={type:t,rot:0,x:3,y:-1}}},[]),J=(0,l.useCallback)(()=>{let e=N.current;if(!e)return;let t=o[e.type].hue;for(let r of U(e))r.y>=0&&r.y<18&&(R.current[r.y][r.x]=t);N.current=null;let r=[];for(let e=0;e<18;e++)R.current[e].every(e=>null!==e)&&r.push(e);if(r.length>0){z.current={rows:r,t:.28},(0,a._O)(r.length>=4?"win":"clear");let e=G(),t=[0,100,300,500,800][r.length]*G();for(let e of r)for(let t=0;t<10;t++){var n;let r=null!=(n=R.current[e][t])?n:200;T.current.push({x:26*t+13,y:26*e+13,vx:(Math.random()-.5)*220,vy:-60-160*Math.random(),life:.5+.3*Math.random(),hue:r})}if(L.current=Math.min(1.2,.3+.25*r.length),C.current+=1,C.current>=2){let e=50*C.current*G();t+=e,j.current("\uD83D\uDD25 COMBO \xd7".concat(C.current," +").concat(e),"text-orange-300")}r.length>=4?(A.current?(t+=400,j.current("⚡ B2B TETRIS +400","text-fuchsia-300")):j.current("\uD83D\uDCA5 TETRIS!","text-cyan-300"),A.current=!0):(3===r.length&&j.current("TRIPLE!","text-sky-300"),A.current=!1),O.current+=t,B.current+=r.length,f(O.current),x(B.current),p(G()),G()>e&&j.current("⬆ LEVEL ".concat(G(),"!"),"text-amber-300"),g(O.current)}else C.current=0,(0,a._O)("tap"),X()},[X,g]),K=(e,t,r)=>{let n=N.current;if(!n)return!1;let l={...n,x:n.x+e,y:n.y+t,rot:n.rot+r};if(!V(l))return N.current=l,!0;if(0!==r)for(let e of[-1,1,-2,2]){let t={...l,x:l.x+e};if(!V(t))return N.current=t,!0}return!1},Q=(0,l.useCallback)(()=>{if(!N.current)return;let e=0;for(;K(0,1,0);)e++;O.current+=2*e,f(O.current),J()},[J]),Z=(0,l.useCallback)(()=>{let t=e.current;if(!t)return;let r=(0,c.c)(t,260,468);if(!r)return;r.fillStyle="#0d0d1a",r.fillRect(0,0,260,468),r.save(),L.current>0&&r.translate((Math.random()-.5)*L.current*8,(Math.random()-.5)*L.current*6),r.strokeStyle="rgba(255,255,255,0.04)",r.lineWidth=1;for(let e=1;e<10;e++)r.beginPath(),r.moveTo(26*e,0),r.lineTo(26*e,468),r.stroke();let n=function(e,t,n){let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r.globalAlpha=l,r.fillStyle="hsl(".concat(n,", 70%, 52%)"),r.beginPath(),r.roundRect(26*e+1.5,26*t+1.5,23,23,4),r.fill(),r.fillStyle="rgba(255,255,255,0.25)",r.fillRect(26*e+3,26*t+3,20,3),r.globalAlpha=1};for(let e=0;e<18;e++){var l,a;let t=null==(l=z.current)?void 0:l.rows.includes(e);for(let l=0;l<10;l++){let c=null==(a=R.current[e])?void 0:a[l];null!=c&&(t&&z.current?(r.fillStyle="rgba(255,255,255,".concat(3*z.current.t,")"),r.fillRect(26*l,26*e,26,26)):n(l,e,c))}}let u=N.current;if(u){let e={...u};for(;!V({...e,y:e.y+1});)e.y+=1;for(let t of U(e))t.y>=0&&n(t.x,t.y,o[u.type].hue,.18);for(let e of U(u))e.y>=0&&n(e.x,e.y,o[u.type].hue)}for(let e of T.current)r.globalAlpha=Math.max(0,2*e.life),r.fillStyle="hsl(".concat(e.hue,", 70%, 60%)"),r.f
1illRect(e.x-3,e.y-3,6,6);r.globalAlpha=1;let s=(e,t,n)=>{if(r.fillStyle="rgba(0,0,0,0.45)",r.beginPath(),r.roundRect(n,6,62,58,8),r.fill(),r.strokeStyle="rgba(255,255,255,0.12)",r.lineWidth=1,r.stroke(),r.fillStyle="rgba(255,255,255,0.55)",r.font="bold 9px system-ui, sans-serif",r.textAlign="center",r.fillText(e,n+31,17),null!==t){let e=o[t],l=e.cells[0],c=Math.min(...l.map(e=>e[0])),a=Math.max(...l.map(e=>e[0])),u=Math.min(...l.map(e=>e[1])),s=Math.max(...l.map(e=>e[1])),i=n+31-(a-c+1)*11/2,d=40-(s-u+1)*11/2+2;for(let[t,n]of(r.fillStyle="hsl(".concat(e.hue,", 70%, 55%)"),l))r.beginPath(),r.roundRect(i+(t-c)*11+.5,d+(n-u)*11+.5,10,10,2),r.fill()}};"running"===F.current&&(s("NEXT",S.current,192),s("HOLD",D.current,6)),r.restore()},[]),$=(0,l.useCallback)(e=>{let t=Math.min((e-W.current)/1e3,.033);for(let r of(W.current=e,L.current>0&&(L.current-=3*t),T.current))r.x+=r.vx*t,r.y+=r.vy*t,r.vy+=900*t,r.life-=t;if(T.current=T.current.filter(e=>e.life>0),P.current>=0&&"running"===F.current&&(P.current+=1e3*t,P.current>600&&(P.current=-1,r("over"),g(O.current),(0,u.q7)("block-drop",O.current))),"running"===F.current&&P.current<0){if(z.current){if(z.current.t-=t,z.current.t<=0){let e=R.current.filter((e,t)=>!z.current.rows.includes(t));for(;e.length<18;)e.unshift(Array(10).fill(null));R.current=e,z.current=null,X()}}else if(N.current){let e=Math.max(.09,.65-(G()-1)*.07);_.current+=t*(q.current?8:1),_.current>=e&&(_.current=0,K(0,1,0)||J())}}Z(),I.current=requestAnimationFrame($)},[Z,J,X,g]);(0,l.useEffect)(()=>(W.current=performance.now(),I.current=requestAnimationFrame($),()=>cancelAnimationFrame(I.current)),[$]);let ee=(0,l.useCallback)(()=>{R.current=Array.from({length:18},()=>Array(10).fill(null)),O.current=0,B.current=0,_.current=0,z.current=null,M.current=[],D.current=null,E.current=!1,C.current=0,A.current=!1,L.current=0,P.current=-1,T.current=[],S.current=H(),f(0),x(0),p(1),r("running"),X()},[X]);(0,l.useEffect)(()=>{let e=e=>{if("running"!==F.current){("Space"===e.code||"Enter"===e.key)&&(e.preventDefault(),ee());return}switch(e.key){case"ArrowLeft":case"a":e.preventDefault(),K(-1,0,0);break;case"ArrowRight":case"d":e.preventDefault(),K(1,0,0);break;case"ArrowUp":case"w":e.preventDefault(),K(0,0,1);break;case"ArrowDown":case"s":e.preventDefault(),q.current=!0;break;case" ":e.preventDefault(),Q();break;case"c":case"C":case"Shift":e.preventDefault(),Y()}},t=e=>{("ArrowDown"===e.key||"s"===e.key)&&(q.current=!1)};return window.addEventListener("keydown",e),window.addEventListener("keyup",t),()=>{window.removeEventListener("keydown",e),window.removeEventListener("keyup",t)}},[ee,Q,Y]);let et=e=>{let{label:t,aria:r,onPress:l}=e;return(0,n.jsx)("button",{"aria-label":r,onPointerDown:e=>{e.preventDefault(),l()},className:"flex h-12 flex-1 items-center justify-center rounded-xl bg-white/10 text-xl font-bold text-white transition active:scale-90 active:bg-white/25",children:t})};return(0,n.jsxs)("div",{className:"select-none",children:[(0,n.jsxs)("div",{className:"mb-4 flex flex-wrap items-center justify-between gap-3",children:[(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsxs)("div",{className:"rounded-xl bg-white/10 px-3 py-2 text-center",children:[(0,n.jsx)("div",{className:"text-xs font-medium uppercase tracking-wide text-zinc-400",children:"Score"}),(0,n.jsx)("div",{className:"text-lg font-bold text-white",children:d})]}),(0,n.jsxs)("div",{className:"rounded-xl bg-white/10 px-3 py-2 text-center",children:[(0,n.jsx)("div",{className:"text-xs font-medium uppercase tracking-wide text-zinc-400",children:"Best"}),(0,n.jsx)("div",{className:"text-lg font-bold text-amber-300",children:b})]}),(0,n.jsxs)("div",{className:"rounded-xl bg-white/10 px-3 py-2 text-center",children:[(0,n.jsx)("div",{className:"text-xs font-medium uppercase tracking-wide text-zinc-400",children:"Lines"}),(0,n.jsx)("div",{className:"text-lg font-bold text-sky-300",children:h})]}),(0,n.jsxs)("div",{className:"hidden rounded-xl bg-white/10 px-3 py-2 text-center sm:block",children:[(0,n.jsx)("div",{className:"text-xs font-medium uppercase tracking-wide text-zinc-400",children:"Level"}),(0,n.jsx)("div",{className:"text-lg font-bold text-emerald-300",children:m})]})]}),(0,n.jsx)("button",{onClick:ee,className:"rounded-xl bg-gradient-to-r from-cyan-500 to-blue-500 px-4 py-2 font-bold text-white transition hover:scale-105",children:"running"===t?"Restart":"Start"})]}),(0,n.jsxs)("div",{"data-board":!0,className:"relative mx-auto w-full overflow-hidden rounded-2xl border border-white/10",style:{maxWidth:"min(100%, calc(74vh * 0.556))"},children:[(0,n.jsx)("canvas",{ref:e,width:260,height:468,className:"block h-auto w-full",role:"application","aria-label":"Block Drop game board"}),(0,n.jsx)("div",{className:"pointer-events-none absolute inset-x-0 top-[16%] z-10 flex flex-col items-center gap-1",children:y.map(e=>(0,n.jsx)("div",{className:"animate-bounce-in text-lg font-extrabold drop-shadow-[0_2px_4px_rgba(0,0,0,0.8)] sm:text-xl ".concat(e.cls),children:e.text},e.id))}),"running"!==t&&(0,n.jsxs)("div",{className:"absolute inset-0 z-10 flex flex-col items-center justify-center gap-3 bg-black/60 backdrop-blur-[2px]",children:["over"===t?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{className:"animate-bounce-in text-2xl font-extrabold text-white",children:"\uD83E\uDDF1 Stacked out!"}),(0,n.jsxs)("p",{className:"text-zinc-200",children:["Score: ",(0,n.jsx)("span",{className:"font-bold text-white",children:d})," ","\xb7 ",h," lines",d>0&&d>=b&&(0,n.jsx)("span",{className:"ml-2 font-bold text-amber-300",children:"New best
1!"})]})]}):(0,n.jsx)("p",{className:"text-5xl","aria-hidden":!0,children:"\uD83E\uDDF1"}),(0,n.jsx)("button",{onClick:e=>{e.stopPropagation(),ee()},className:"rounded-xl bg-gradient-to-r from-cyan-500 to-blue-500 px-6 py-3 font-bold text-white transition hover:scale-105",children:"over"===t?"Play again":"▶ Start game"})]})]}),(0,n.jsxs)("div",{className:"mx-auto mt-4 flex max-w-sm gap-2 sm:hidden",children:[(0,n.jsx)(et,{label:"←",aria:"Move left",onPress:()=>K(-1,0,0)}),(0,n.jsx)(et,{label:"⟳",aria:"Rotate",onPress:()=>K(0,0,1)}),(0,n.jsx)(et,{label:"→",aria:"Move right",onPress:()=>K(1,0,0)}),(0,n.jsx)(et,{label:"⇄",aria:"Hold piece",onPress:Y}),(0,n.jsx)(et,{label:"⬇",aria:"Hard drop",onPress:Q})]}),(0,n.jsx)("p",{className:"mt-4 text-center text-sm text-zinc-500",children:"⌨️ ←/→ move \xb7 ↑ rotate \xb7 ↓ soft drop \xb7 Space hard drop \xb7 C hold \xb7 back-to-back Tetrises pay extra"})]})}},2773:(e,t,r)=>{r.d(t,{GL:()=>o,Gp:()=>u,Nc:()=>a,_y:()=>s,mA:()=>i});var n=r(2115);let l=null,c=new Set;function a(e){if(l!==e)for(let t of(l=e,c))t(e)}function u(e){return c.add(e),()=>c.delete(e)}let s={title:"Leave this game?",body:"You're mid-game — your progress in this round will be lost."},i={title:"Leave the match?",body:"The match is still live — leaving counts as a loss and your opponent takes the win."};function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:s,{title:r,body:l}=t;(0,n.useEffect)(()=>e?(a({title:r,body:l}),()=>a(null)):void a(null),[e,r,l])}},2932:(e,t,r)=>{function n(e,t,r){let n=window.devicePixelRatio||1,l=Math.max(1,Math.min((e.clientWidth||t)*n/t,4)),c=Math.round(t*l),a=Math.round(r*l);(e.width!==c||e.height!==a)&&(e.width=c,e.height=a);let u=e.getContext("2d");return u&&u.setTransform(l,0,0,l,0,0),u}function l(e,t,r,n,l){let c=r.getBoundingClientRect(),a=Math.min(c.width/n,c.height/l)||1,u=c.left+(c.width-n*a)/2,s=c.top+(c.height-l*a)/2;return{x:(e-u)/a,y:(t-s)/a}}r.d(t,{c:()=>n,f:()=>l})},3557:(e,t,r)=>{r.d(t,{g:()=>l});var n=r(2115);function l(e){let[t,r]=(0,n.useState)(0);return(0,n.useEffect)(()=>{try{let t=window.localStorage.getItem("funnudge:".concat(e));t&&r(Number(t)||0)}catch(e){}},[e]),{best:t,submit:(0,n.useCallback)(t=>{r(r=>{if(t<=r)return r;try{window.localStorage.setItem("funnudge:".concat(e),String(t))}catch(e){}return t})},[e])}}}}]);

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.