PageSourceSearch

https://coffeefirst.games/_nuxt/DffW2pdE.js

js coffeefirst.games collected 2026-10-09 03:06:54 UTC 13,999 bytes, 2 lines download raw bytes

1import{f as qe,u as We,r as h,m as y,g as ce,aT as Ye,n as W,l as Je,M as Qe,q as me,k as Xe,c,a as l,b as g,z as Y,i as _,h as s,F as $,y as B,B as b,t as k,d as C,aU as et,j as tt,o,A as at,_ as rt}from"./DD0aD5kh.js";import{u as st,_ as lt,a as nt}from"./BzzYChTd.js";import{_ as ot}from"./D3TO2xF6.js";import{_ as it}from"./CmNtUq9b.js";import{H as ut}from"./C_cGgULd.js";import{S as dt}from"./CMW7-8Mb.js";import{u as ct}from"./BvacP8Fp.js";import{u as mt}from"./CcTT_sct.js";import{s as vt}from"./Cuft3K88.js";import"./DQKSStaa.js";import"./CI_G67b-.js";import"./ClZ7KHU2.js";import"./CzF-T3hR.js";import"./DPS5c5NS.js";import"./DGQ6n8Ze.js";import"./Ku_Ectlm.js";import"./TWURvC36.js";import"./0pUWFN2R.js";import"./LvnuPp0A.js";import"./DDXfviS9.js";import"./DYNtGFyk.js";const xt={class:"min-h-screen dark:bg-stone-950 flex flex-col overflow-hidden"},bt={class:"sticky top-0 z-50"},ft={key:0,class:"flex-grow flex flex-col items-center justify-start md:mt-10 gap-4 px-2 py-4"},pt={class:"flex gap-2"},kt=["onClick"],gt={class:"flex flex-col"},ht={class:"flex items-center gap-2 dark:text-slate-200"},yt=["onClick"],_t={class:"flex items-center gap-1"},wt={class:"rounded-lg border border-slate-300 dark:border-slate-700 bg-white/60 dark:bg-slate-900/60 px-4 py-3"},Ct={class:"flex items-center justify-between mb-2"},St={class:"flex gap-1"},It=["onClick"],$t={class:"space-y-1"},Tt={class:"w-16 text-right font-medium text-slate-600 dark:text-slate-400 shrink-0 text-xs"},zt={class:"flex-1 h-5 rounded overflow-hidden"},Et={key:0,class:"mt-2 text-center"},jt={key:1,class:"mt-2 text-center"},Mt={class:"flex justify-center mt-3 gap-2"},Nt={class:"flex justify-center gap-2"},At={class:"flex justify-center gap-2"},Bt={key:1,class:"flex-grow flex items-center justify-center text-red-800 dark:text-red-500"},Rt=qe({__name:"index",setup(Dt){const{openFriendsLeaderboard:ve,openAllUsersLeaderboard:xe}=st();We(dt.NURIKABE);const{nuPuzzleNo:n,nuSize:i,ensureNurikabe:be,getGrid:fe,isIslandOrigin:J,toggleCell:pe,clearGrid:ke,isSolved:ge,detectErrors:he,startGame:R,pauseGame:T,finishGame:ye,getFormattedTime:z,upsertUserGame:_e,clampPuzzleNo:we,nuTimes:S,nuIsTimerRunning:I,nuDisplayTotal:Ce,nuGameOver:u,SIZE_LABELS:Q,SIZE_ORDER:X,SIZE_DIMENSIONS:ee}=ct(),Se=Ye(),te=h(null),Ie=y(()=>fe(n.value)),$e=(e,t)=>{const r=Ie.value[e]?.[t],m=J(n.value,e,t);return!I.value&&!u.value?"bg-white dark:bg-black":m?"bg-white dark:bg-slate-100":r==="island"?"bg-white dark:bg-slate-100 cursor-pointer":"bg-stone-400 dark:bg-stone-950"+(u.value?"":" cursor-pointer")},ae=(e,t)=>J(n.value,e,t)?.size||null,E=h([]),D=h(!1),Te=y(()=>E.value.length>0),j=y(()=>
1{if(!D.value||E.value.length===0)return new Set;const e=new Set;for(const t of E.value)for(const r of t.cells)e.add(`${r.row},${r.col}`);return e}),ze=(e,t)=>{if(!j.value.has(`${e},${t}`))return"";const r=[];return j.value.has(`${e-1},${t}`)||r.push("error-border-top"),j.value.has(`${e+1},${t}`)||r.push("error-border-bottom"),j.value.has(`${e},${t-1}`)||r.push("error-border-left"),j.value.has(`${e},${t+1}`)||r.push("error-border-right"),r.join(" ")},Ee=()=>{D.value=!0},L=()=>{D.value=!1,E.value=[]},je=(e,t)=>{u.value||(I.value||R(n.value),D.value&&L(),pe(n.value,e,t),setTimeout(()=>re(),50))},re=()=>{ge(n.value)?(T(n.value),ye(n.value),L(),setTimeout(()=>_e(),50)):E.value=he(n.value)},Me=()=>{u.value||(I.value?T(n.value):R(n.value))};ce(async()=>{we(+Se.params.id),document.addEventListener("visibilitychange",Ne),await se()});const se=async()=>{const e=await be(n.value);if(!e){W("/nurikabe");return}te.value=e,!I.value&&!u.value&&(R(n.value),re())},Ne=()=>{u.value||(document.hidden||!document.hasFocus()?T(n.value):R(n.value))},M=async e=>{e!==i.value&&(T(n.value),L(),i.value=e,v.value=e,await se())},Ae=()=>{i.value=="small"?M("medium"):i.value=="medium"?M("large"):(i.value="small",v.value="small")},N=h(!1),A=h(3);let G=null;const le=()=>{N.value=!1,A.value=3,G&&(clearInterval(G),G=null)},Be=()=>{if(!u.value){if(!N.value){N.value=!0,A.value=3,G=vt(()=>{A.value--,A.value<=0&&le()},1e3);return}le(),L(),ke(n.value)}};Je(()=>{T(n.value)});const P=h(!1),H=()=>{const e=navigator.userAgent||navigator.vendor||window.opera||"",t=/android|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(e),r=window.innerWidth<=768;P.value=t||r};ce(()=>{H(),window.addEventListener("resize",H)}),Qe(()=>{window.removeEventListener("resize",H)});const{share:Re}=et(),U=h(!1),De=async()=>{try{const e=S.value[n.value],t=e?.[0]||0,r=e?.[1]||0,m=e?.[2]||0,p=e?.[3]===1,x=e?.[4]===1,f=e?.[5]===1;let a=[`Nurikabe #${n.value}`];p&&a.push(`5×5 - ${z(t)}`),x&&a.push(`7×7 - ${z(r)}`),f&&a.push(`9×9 - ${z(m)}`),a.push("#coffeefirstgames #nurikabe"),a.push(""),a.push("https://coffeefirst.games/nurikabe ☕");const d=a.join(`
2`);P.value?await Re({text:d}):(await navigator.clipboard.writeText(d),U.value=!0,setTimeout(()=>U.value=!1,2e3))}catch(e){console.log("Copy/Share error: ",e)}},Z=h(!1),{activeGame:Le,leaderboard:O}=mt();me(u,e=>{e&&(Le.value="Nurikabe")},{immediate:!0});const{authUser:Ge}=Xe();me(O,e=>{if(!u.value||!e||!Object.keys(e).length)return;const t=S.value[n.value];if(!t||!t.length||t[0]<=0&&t[1]<=0&&t[2]<=0)return;const r=Ge.value?.uid,m=t[0].toString(),p=r||m;e[p]||(O.value={...e,[p]:t})});const v=h(i.value),Pe=e=>{v.value=e;const t=S.value[n.value];if(!t)return;const r=V(e);t[r]===1&&M(e)},Ue={small:[{label:"0:00–0:05",min:0,max:5},{label:"0:05–0:10",min:5,max:10},{label:"0:10–0:20",min:10,max:20},{label:"0:20–0:30",min:20,max:30},{label:"0:30–1:00",min:30,max:60},{label:"1:00–2:00",min:60,max:120},{label:"2:00+",min:120,max:1/0}],medium:[{label:"0:00–0:15",min:0,max:15},{label:"0:15–0:30",min:15,max:30},{label:"0:30–0:45",min:30,max:45},{label:"0:45–1:00",min:45,max:60},{label:"1:00–1:30",min:60,max:90},{label:"1:30–2:00",min:90,max:120},{label:"2:00+",min:120,max:1/0}],large:[{label:"0:00–0:30",min:0,max:30},{label:"0:30–1:00",min:30,max:60},{label:"1:00–1:30",min:60,max:90},{label:"1:30–2:00",min:90,max:120},{label:"2:00–3:00",min:120,max:180},{label:"3:00–5:00",min:180,max:300},{label:"5:00+",min:300,max:1/0}]},ne=y(()=>Ue[v.value]),K=e=>e==="small"?0:e==="medium"?1:2,V=e=>e==="small"?3:e==="medium"?4:5,q=y(()=>{const e=ne.value,t=e.map(()=>0),r=Object.values(O.value||{});if(!r.length)return{buckets:[],total:0,maxPct:1};const m=K(v.value),p=V(v.value);let x=0;for(const d of r){if(!Array.isArray(d)||d.length<6||d[p]!==1)continue;const w=d[m]/1e3;if(!w||w<=0)continue;const de=e.findIndex(Ke=>w<Ke.max);t[de===-1?t.length-1:de]++,x++}if(!x)return{buckets:[],total:0,maxPct:1};const f=e.map((d,w)=>({label:d.label,count:t[w],pct:Math.round(t[w]/x*100)})),a=Math.max(...f.map(d=>d.pct),1);return{buckets:f,total:x,maxPct:a}}),oe=y(()=>{const e=S.value[n.value];if(!e||e.length<6)return"";const t=K(v.value),r=V(v.value);if(e[r]!==1)return"";const m=e[t]/1e3;return!m||m<=0?"":ne.value.find(x=>m<x.max)?.label??""}),ie=y(()=>{const e=S.value[n.value];if(!e||e.length<6)return 0;const t=K(v.value),r=V(v.value);if(e[r]!==1)return 0;const m=e[t];if(!m||m<=0)return 0;const p=Object.values(O.value||{});let x=1;for(const f of p)!Array.isArray(f)||f.length<6||f[r]===1&&f[t]>0&&f[t]<m&&x++;return x}),Oe=e=>
2{const t=["th","st","nd","rd"],r=e%100;return e+(t[(r-20)%10]||t[r]||t[0])},ue={small:"5×5",medium:"7×7",large:"9×9"},Ve=y(()=>i.value==="small"?0:i.value==="medium"?1:2),Fe=y(()=>S.value[n.value]?.[Ve.value]||0),He=e=>({"grid-cols-5 grid-rows-5 w-[85vw] h-[85vw] md:max-w-[400px] md:max-h-[400px]":e==="small","grid-cols-7 grid-rows-7 w-[90vw] h-[90vw] md:max-w-[450px] md:max-h-[450px]":e==="medium","grid-cols-9 grid-rows-9 w-[95vw] h-[95vw] md:max-w-[500px] md:max-h-[500px]":e==="large"}),F=e=>({"w-[85vw] md:max-w-[400px]":e==="small","w-[90vw] md:max-w-[450px]":e==="medium","w-[95vw] md:max-w-[500px]":e==="large"}),Ze=e=>{const t=e==="small"?"text-4xl":e==="medium"?"text-3xl":"text-2xl",r=!I.value&&!u.value?"text-white dark:text-black":"";return`${t} ${r}`};return(e,t)=>{const r=tt,m=nt,p=ot,x=it,f=lt;return o(),c($,null,[l("div",xt,[l("div",bt,[g(ut,{"game-name":"Nurikabe #"+s(n),"header-collapsed":!0},null,8,["game-name"])]),te.value?(o(),c("div",ft,[l("div",pt,[(o(!0),c($,null,B(s(X),a=>(o(),c("div",{key:a,class:b(["text-xl rounded border border-2 border-black dark:border-slate-500 p-2 cursor-pointer dark:text-slate-200 px-2",{"opacity-60 dark:opacity-70 border-gray-800":s(i)!=a}]),onClick:d=>M(a)},k(s(Q)[a]),11,kt))),128))]),l("div",gt,[l("div",{class:b(["flex items-center justify-between px-2 mb-2",F(s(i))])},[l("div",ht,[l("div",{class:b(["text-xl",{"font-bold":s(u)}])},k(s(u)?s(z)(Fe.value):s(z)(s(Ce))),3),s(u)?_("",!0):(o(),Y(r,{key:0,name:s(I)?"mi:pause":"mi:play",size:"1.75rem",class:"cursor-pointer",onClick:Me},null,8,["name"]))]),s(u)?_("",!0):(o(),c("button",{key:0,class:"text-sm font-medium text-stone-900 dark:text-stone-200 bg-stone-200 dark:bg-stone-800 rounded-full px-3 md:py-1 py-[2px] flex items-center gap-1",onClick:Be,"aria-label":"Restart the puzzle"},[g(r,{name:"mdi:restart",size:"1.25rem",class:b(["transition-transform duration-300",{"rotate-[-180deg]":N.value}])},null,8,["class"]),C(" "+k(N.value?`Confirm ${A.value}`:"Reset Grid"),1)]))],2),l("div",{class:b(["grid gap-[2px] p-1 bg-black dark:bg-slate-400 rounded",He(s(i))])},[(o(!0),c($,null,B(s(ee)[s(i)],a=>(o(),c("div",{key:"row-"+a,class:"contents"},[(o(!0),c($,null,B(s(ee)[s(i)],d=>(o(),c("div",{key:"cell-"+a+"-"+d,onClick:w=>je(a-1,d-1),class:b(["nurikabe-cell flex items-center justify-center",[$e(a-1,d-1),ze(a-1,d-1)]])},[ae(a-1,d-1)?(o(),c("span",{key:0,class:b(Ze(s(i)))},k(ae(a-1,d-1)),3)):_("",!0)],10,yt))),128))]))),128))],2)]),Te.value&&!s(u)?(o(),c("div",{key:0,class:b(["rounded-lg px-3 py-2 bg-red-100/70 dark:bg-red-900/30 border border-red-300/60 dark:border-red-700/50 text-red-900 dark:text-red-200 text-sm flex justify-between items-center mt-2",F(s(i))])},[t[9]||(t[9]=l("span",null,"Some cells are incorrect.",-1)),l("span",{onClick:Ee,class:"underline cursor-pointer hover:text-red-700 dark:hover:text-red-100"},"Reveal errors")],2)):_("",!0),s(u)?(o(),c("div",{key:1,class:b(["rounded-lg px-3 py-2 bg-red-100/70 dark:bg-red-900/30 border border-red-300/60 dark:border-red-700/50 text-red-900 dark:text-red-200 text-sm flex gap-1 justify-between items-center mt-2",F(s(i))])},[l("span",_t,[C(k(s(Q)[s(i)])+" puzzle complete ",1),g(r,{name:"carbon:checkmark-filled",size:"1.25rem"})]),l("span",{class:"underline cursor-pointer",onClick:t[0]||(t[0]=a=>Ae())},"Go to "+k(s(i)=="small"?"7x7":s(i)=="medium"?"9x9":"5x5"),1)],2)):_("",!0),s(u)?(o(),Y(m,{key:2})):_("",!0),s(u)&&q.value.total?(o(),c("div",{key:3,class:b(F(s(i)))},[l("div",wt,[l("div",Ct,[t[10]||(t[10]=l("h3",{class:"text-sm font-semibold text-slate-700 dark:text-slate-300"},"Time Distribution",-1)),l("div",St,[(o(!0),c($,null,B(s(X),a=>(o(),c("button",{key:"dist-"+a,class:b(["text-xs px-2 py-0.5 rounded-full border transition-colors",v.value===a?"bg-red-700 dark:bg-red-600 text-white border-red-700 dark:border-red-600":"border-red-400 dark:border-red-600 text-red-600 dark:text-red-400"]),onClick:d=>Pe(a)},k(ue[a]),11,It))),128))])]),l("div",$t,[(o(!0),c($,null,B(q.value.buckets,a=>(o(),c("div",{key:a.label,class:"flex items-center gap-2 text-sm"},[l("span",Tt,k(a.label),1),l("div",zt,[l("div",{class:b(["h-full rounded transition-all duration-500",oe.value===a.label?"bg-red-600 dark:bg-red-500":"bg-red-400/70 dark:bg-red-800/60"]),style:at({width:a.count?Math.max(Math.round(a.pct/q.value.maxPct*100),1)+"%":"0%"})},null,6)])]))),128))]),ie.value?(o(),c("div",Et,[l("span",{class:"text-sm font-semibold text-red-600 dark:text-red-400 cursor-pointer underline",onClick:t[1]||(t[1]=a=>{i.value=v.value,s(xe)(`/nurikabe/${s(n)}/leaderboard`)})},"You're "+k(Oe(ie.value))+" on the leaderboard",1)])):oe.value?_("",!0):(o(),c("div",jt,[l("span",{class:"text-sm font-semibold text-red-600 dark:text-red-400 cursor-pointer underline",onClick:t[2]||(t[2]=a=>M(v.value))},"Play "+k(ue[v.value]),1)]))])],2)):_("",!0),l("div",{class:b(["flex flex-col justify-center items-center gap-3 mb-20 pb-20 lg:mb-3 lg:pb-0",{hidden:!s(u)}])},[l("div",Mt,[l("button",{onClick:t[3]||(t[3]=a=>s(ve)(`/nurikabe/${s(n)}/leaderboard`)),class:"flex justify-center items-center gap-1 border border-2 border-black dark:border-slate-500 dark:text-slate-200"}
2,[t[11]||(t[11]=C("Friends ",-1)),g(r,{name:"fa7-solid:user-friends",size:"1.5rem"})]),l("button",{class:"btn-nurikabe relative rounded-xl px-4 py-2",style:{"border-radius":"5px"},onClick:t[4]||(t[4]=a=>Z.value=!0)},[g(p,{class:"-top-5"}),t[12]||(t[12]=C(" More Games ",-1))])]),l("div",Nt,[l("button",{onClick:De,class:"flex justify-center items-center gap-1 border border-2 border-black dark:border-slate-500 dark:text-slate-200"},[C(k(P.value?"Share":U.value?"Copied":"Copy")+" Results",1),g(r,{name:P.value?"mdi:share-variant":U.value?"line-md:confirm-square":"mdi:content-copy",size:"1.5rem"},null,8,["name"])]),l("button",{onClick:t[5]||(t[5]=a=>("navigateTo"in e?e.navigateTo:s(W))("/nurikabe/archive")),class:"flex justify-center items-center gap-1 border border-2 border-black dark:border-slate-500 dark:text-slate-200"},[t[13]||(t[13]=C("Archive ",-1)),g(r,{name:"mdi:calendar",size:"1.5rem"})])]),l("div",At,[l("button",{onClick:t[6]||(t[6]=a=>("navigateTo"in e?e.navigateTo:s(W))("/")),class:"flex justify-center items-center gap-1 border border-2 border-black dark:border-slate-500 dark:text-slate-200"},[t[14]||(t[14]=C("Home ",-1)),g(r,{name:"mdi:home",size:"1.5rem"})])])],2)])):(o(),c("div",Bt,[g(r,{name:"svg-spinners:blocks-shuffle-3",size:"4rem"})])),s(u)?(o(),Y(x,{key:2,"desktop-only":"",class:"mx-auto mb-44 w-[calc(100%_-_2rem)] max-w-3xl xl:max-w-4xl"})):_("",!0)]),g(f,{modelValue:Z.value,"onUpdate:modelValue":t[7]||(t[7]=a=>Z.value=a),"played-today":["nurikabe"],onNavigate:t[8]||(t[8]=a=>{})},null,8,["modelValue"])],64)}}}),la=rt(Rt,[["__scopeId","data-v-1f1b4d9e"]]);export{la 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.