most-box 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -26
- package/electron/main.js +366 -30
- package/electron/preload.js +16 -1
- package/electron/updateChecker.js +18 -11
- package/electron/updateChecker.test.js +23 -7
- package/out/admin/index.html +0 -0
- package/out/app/index.html +0 -0
- package/out/assets/AppShell-oF8wPXde.js +1 -0
- package/out/assets/FilePreviewOverlay-DTBZt89J.js +1 -0
- package/out/assets/LanguageToggle-HAJ3D6Ne.js +1 -0
- package/out/assets/MarketingHeader-B3vYocUz.js +1 -0
- package/out/assets/MarketingLayout-CapVVXTP.js +1 -0
- package/out/assets/{MarketingThemeToggle-DHVvLtms.js → MarketingThemeToggle-B47H68ro.js} +1 -1
- package/out/assets/{MilkdownEditor-WdGJyEa8.js → MilkdownEditor-CRA9oxMp.js} +1 -1
- package/out/assets/{OpenSidebarButton-CtsDYSq0.js → OpenSidebarButton-D3JRO-Hh.js} +1 -1
- package/out/assets/{SidebarAccount-4NFTcAF7.js → SidebarAccount-8_hQAYXx.js} +1 -1
- package/out/assets/arrow-right-mNO53HQi.js +1 -0
- package/out/assets/{circle-alert-BQoSDxUe.js → circle-alert-CofRTRHr.js} +1 -1
- package/out/assets/cloud-DAGFCFIp.js +1 -0
- package/out/assets/{copy-BtJHJnqH.js → copy-5aEv78Eq.js} +1 -1
- package/out/assets/{download-Bg-OdoxM.js → download-Bhqn6hL1.js} +1 -1
- package/out/assets/{downloadValidation-DS9_BV-n.js → downloadValidation-eInMiVSX.js} +1 -1
- package/out/assets/{external-link-m8ZIQe4p.js → external-link-CNR21yFA.js} +1 -1
- package/out/assets/{file-text-DG1orIkZ.js → file-text-CFfvvCnM.js} +1 -1
- package/out/assets/folder-BGJCjyba.js +1 -0
- package/out/assets/{hard-drive-BB-sllXA.js → hard-drive-4vHpA5kz.js} +1 -1
- package/out/assets/index--p9MKNEl.js +31 -0
- package/out/assets/index-DEu4udaa.css +1 -0
- package/out/assets/index.lazy-2K3f5PZe.js +1 -0
- package/out/assets/index.lazy-B-2etVwK.js +1 -0
- package/out/assets/index.lazy-B4WTQF5E.js +1 -0
- package/out/assets/index.lazy-BFfsQrRe.js +1 -0
- package/out/assets/index.lazy-C5udBnrO.js +1 -0
- package/out/assets/{index.lazy-DwKnzBXo.js → index.lazy-C84HrZpm.js} +1 -1
- package/out/assets/index.lazy-CBC2N5p_.js +3 -0
- package/out/assets/index.lazy-CzANViGX.js +1 -0
- package/out/assets/index.lazy-D3cw7yyA.js +2 -0
- package/out/assets/{index.lazy-C3z-lGsL.js → index.lazy-DVVZzbCN.js} +1 -1
- package/out/assets/index.lazy-DxZgywoV.js +1 -0
- package/out/assets/{index.lazy-DSjaivix.js → index.lazy-RBLN4SE9.js} +1 -1
- package/out/assets/index.lazy-s4E2z9AY.js +2 -0
- package/out/assets/{key-round-DIQ3Xt5F.js → key-round-BpSdpOHi.js} +1 -1
- package/out/assets/loader-ByMmV2_4.js +1 -0
- package/out/assets/{lock-tf1t2yuy.js → lock-C0pdaery.js} +1 -1
- package/out/assets/{message-square-DaQH7q-P.js → message-square-Eu86zZup.js} +1 -1
- package/out/assets/{mp-DYPYks13.js → mp-CJWipckT.js} +1 -1
- package/out/assets/{music-DaFvU2DL.js → music-Btrhub6z.js} +1 -1
- package/out/assets/{notebook-pen-CqEFOHKx.js → notebook-pen-CfdFgaDE.js} +1 -1
- package/out/assets/play-D5r9Yvbq.js +1 -0
- package/out/assets/plus-Mlh7r_bm.js +1 -0
- package/out/assets/{refresh-cw-roxAhABl.js → refresh-cw--JB8k6mH.js} +1 -1
- package/out/assets/{save-DR0O9ReR.js → save-DN4eprSt.js} +1 -1
- package/out/assets/search-CbzMyENy.js +1 -0
- package/out/assets/{send-m1XCcuPn.js → send-D8p6f8OD.js} +1 -1
- package/out/assets/{shield-check-BwcvTU4U.js → shield-check-c0labdRH.js} +1 -1
- package/out/assets/{trash-2-CNpsqYc1.js → trash-2-zdhWec_U.js} +1 -1
- package/out/assets/triangle-alert-CO_5uXy2.js +1 -0
- package/out/assets/upload-BD23c5Pz.js +1 -0
- package/out/assets/{useChannelMessages-qJTlBnzX.js → useChannelMessages-D_306Ymv.js} +2 -2
- package/out/assets/useGameRoom-CURx56m6.js +1 -0
- package/out/assets/userProfile-oeBvU6ch.js +1 -0
- package/out/assets/{userStore-C4vdYsQp.js → userStore-q0BBZsIV.js} +1 -1
- package/out/assets/{wallet-CozFU6yK.js → wallet-DmZMdK9A.js} +1 -1
- package/out/assets/{wifi-DIR3g_8A.js → wifi-CVqaPDcv.js} +1 -1
- package/out/chat/index.html +0 -0
- package/out/chat/join/index.html +0 -0
- package/out/download/index.html +2 -2
- package/out/game/gandengyan/index.html +0 -0
- package/out/game/index.html +0 -0
- package/out/game/zhajinhua/index.html +0 -0
- package/out/index.html +2 -2
- package/out/note/index.html +0 -0
- package/out/ping/index.html +2 -2
- package/out/profile/index.html +0 -0
- package/out/web3/index.html +0 -0
- package/package.json +8 -1
- package/server/index.js +2 -2
- package/server/src/core/syncTimestamp.js +10 -0
- package/server/src/http/nodeStatus.js +16 -16
- package/server/src/http/routePolicy.js +2 -2
- package/server/src/http/routes/nodeRoutes.js +21 -19
- package/server/src/index.js +578 -960
- package/server/src/utils/accountBackup.js +134 -0
- package/server/src/utils/api.js +149 -9
- package/out/assets/AppShell-B1U4lDqV.js +0 -1
- package/out/assets/FilePreviewOverlay-Cme4vUhr.js +0 -1
- package/out/assets/LanguageToggle-CBpXWdO9.js +0 -1
- package/out/assets/MarketingHeader-CkcBATx2.js +0 -1
- package/out/assets/MarketingLayout-mQV6ciYc.js +0 -1
- package/out/assets/arrow-right-RldN7Rwi.js +0 -1
- package/out/assets/cloud-DHoTMeZY.js +0 -1
- package/out/assets/index-BJ7E8LJN.js +0 -31
- package/out/assets/index-C0xqKeu-.css +0 -1
- package/out/assets/index.lazy-B5hOQuoO.js +0 -2
- package/out/assets/index.lazy-B9ligvAg.js +0 -1
- package/out/assets/index.lazy-BZ7nMBcY.js +0 -3
- package/out/assets/index.lazy-C-2BI6Ew.js +0 -1
- package/out/assets/index.lazy-Cda9sU_h.js +0 -1
- package/out/assets/index.lazy-D5ybxeOu.js +0 -1
- package/out/assets/index.lazy-DMZi3gid.js +0 -1
- package/out/assets/index.lazy-Dvgt53xN.js +0 -1
- package/out/assets/index.lazy-Dvo4Ncqe.js +0 -2
- package/out/assets/index.lazy-GQILyi6o.js +0 -1
- package/out/assets/play-B7q6F75-.js +0 -1
- package/out/assets/plus-H2i2mspM.js +0 -1
- package/out/assets/search-ncblG-zw.js +0 -1
- package/out/assets/triangle-alert-DP9EP7IM.js +0 -1
- package/out/assets/upload-V--8p13l.js +0 -1
- package/out/assets/useGameRoom-C9hu7Cez.js +0 -1
- package/server/src/core/userSyncKeys.js +0 -36
- package/server/src/utils/noteBackup.js +0 -116
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{t as r,x as i,y as a}from"./userStore-C4vdYsQp.js";import{n as o,r as s}from"./LanguageToggle-CBpXWdO9.js";import{t as c}from"./copy-BtJHJnqH.js";import{t as ee}from"./AppShell-B1U4lDqV.js";import{t as l}from"./play-B7q6F75-.js";import{t as te}from"./send-m1XCcuPn.js";import{i as ne,n as re,r as ie,t as ae}from"./useGameRoom-C9hu7Cez.js";import{B as oe,_ as u,c as d}from"./index-BJ7E8LJN.js";var se=a(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),f=t(e(),1),p=[`S`,`H`,`C`,`D`],m=[`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`J`,`Q`,`K`,`A`,`2`],h=m.filter(e=>e!==`2`),g=new Map(m.map((e,t)=>[e,t+3])),ce=5,_=20,v=1e3;function le({roomCode:e,ownerAddress:t,ownerName:n,players:r=[],random:i=Math.random}){let a=E(r);return a.some(e=>e.address===q(t))||a.unshift({address:q(t),name:J(n),avatar:``}),y({id:String(e||``).toUpperCase(),ownerAddress:q(t),status:`lobby`,seq:1,players:a.slice(0,6).map((e,t)=>({address:e.address,name:J(e.name),avatar:Y(e.avatar),seat:t,hand:[],handCount:0,score:v,playedCards:0})),deck:[],discard:[],table:null,currentSeat:0,lastWinnerSeat:null,previousWinnerSeat:null,passSeats:[],baseScore:1,bombCount:0,diceRolls:[],roundResult:null,log:[`房间已创建`],winnerSeat:null,random:i})}function ue(e,t=[]){let n=b(e);if(!n||n.status!==`lobby`)return n;let r=new Map(n.players.map(e=>[e.address,e.score]));return n.players=E(t).slice(0,6).map((e,t)=>({address:e.address,name:J(e.name),avatar:Y(e.avatar),seat:t,hand:[],handCount:0,score:r.get(e.address)??v,playedCards:0})),n.seq+=1,y(n)}function de(e,t=Math.random){let n=b(e);if(!n||n.players.length<2)throw Error(`至少需要 2 名玩家`);n.deck=N(M(),t),n.discard=[],n.table=null,n.passSeats=[],n.winnerSeat=null,n.roundResult=null,n.baseScore=1,n.bombCount=0,n.status=`playing`;for(let e of R(n))e.hand=P(n,ce),e.handCount=e.hand.length,e.playedCards=0,F(e.hand);let r=k(n,t);return n.currentSeat=r.seat,n.lastWinnerSeat=null,n.log=[`新一局开始,${r.name} 先出牌`],n.diceRolls.length>0&&n.log.unshift(`骰子结果:${n.diceRolls.map(e=>`${e.name} ${e.value}`).join(`,`)}`),n.seq+=1,y(n)}function fe(e,t,n){let r=b(e),i=I(r),a=q(t);if(!i||i.address!==a)return{ok:!1,error:`还没轮到你`,state:y(r)};let o=n.map(e=>i.hand.find(t=>t.id===e));if(o.length===0||o.some(e=>!e))return{ok:!1,error:`手牌不存在`,state:y(r)};let s=he(o);return s?T(s,r.table?.combo)?(o.sort(H),i.hand=i.hand.filter(e=>!n.includes(e.id)),i.handCount=i.hand.length,i.playedCards+=o.length,r.discard.push(...o),r.table={seat:i.seat,playerName:i.name,cards:o,combo:s},r.passSeats=[],r.lastWinnerSeat=i.seat,s.type===`bomb`&&(r.bombCount+=1,r.baseScore*=2),r.log.unshift(`${i.name} 出 ${s.label} ${o.map(K).join(` `)}${s.type===`bomb`?`,底分 ${r.baseScore}`:``}`),i.hand.length===0?A(r,i):z(r),r.seq+=1,{ok:!0,state:y(r)}):{ok:!1,error:`出的牌压不过上一手`,state:y(r)}:{ok:!1,error:`这个牌型不合法`,state:y(r)}}function pe(e,t){let n=b(e),r=I(n),i=q(t);return!r||r.address!==i?{ok:!1,error:`还没轮到你`,state:y(n)}:n.table?(n.passSeats.includes(r.seat)||n.passSeats.push(r.seat),n.log.unshift(`${r.name} 不要`),L(n).map(e=>e.seat).filter(e=>e!==n.lastWinnerSeat).every(e=>n.passSeats.includes(e))?(j(n),n.currentSeat=n.lastWinnerSeat,n.table=null,n.passSeats=[],n.log.unshift(`本轮结束,所有玩家各补 1 张,重新领出`)):z(n),n.seq+=1,{ok:!0,state:y(n)}):{ok:!1,error:`领出时不能不要`,state:y(n)}}function me(e,t){let n=b(e);if(!n)return null;let r=q(t),i=n.players.findIndex(e=>e.address===r);if(i===-1)return y(n);let a=n.players[i],o=n.currentSeat===a.seat,s=n.lastWinnerSeat===a.seat;n.players.splice(i,1),n.passSeats=n.passSeats.filter(e=>e!==a.seat),n.log.unshift(`${a.name} 已退出房间`);let c=R(n);if(n.status===`playing`)if(c.length<=1)c.length===1?A(n,c[0]):(n.status=`finished`,n.log.unshift(`玩家不足,本局结束`));else{if(o){let e=L(n);if(e.length>0){let t=e.findIndex(e=>e.seat>a.seat);n.currentSeat=e[t>=0?t:0].seat}}s&&n.table&&(n.table=null,n.passSeats=[])}return n.seq+=1,y(n)}function y(e){return e?{id:e.id,ownerAddress:e.ownerAddress,status:e.status,seq:Number(e.seq||1),deck:Array.isArray(e.deck)?e.deck.map(G):[],deckCount:e.deck?.length||Number(e.deckCount||0),discard:Array.isArray(e.discard)?e.discard.map(G):[],discardCount:e.discard?.length||Number(e.discardCount||0),currentSeat:Number(e.currentSeat||0),lastWinnerSeat:e.lastWinnerSeat===null||e.lastWinnerSeat===void 0?null:Number(e.lastWinnerSeat),previousWinnerSeat:e.previousWinnerSeat===null||e.previousWinnerSeat===void 0?null:Number(e.previousWinnerSeat),baseScore:Number(e.baseScore||1),bombCount:Number(e.bombCount||0),diceRolls:Array.isArray(e.diceRolls)?e.diceRolls:[],roundResult:e.roundResult||null,table:e.table?{...e.table,cards:e.table.cards.map(G)}:null,passSeats:Array.isArray(e.passSeats)?e.passSeats:[],winnerSeat:e.winnerSeat===null||e.winnerSeat===void 0?null:Number(e.winnerSeat),log:Array.isArray(e.log)?e.log.slice(0,18):[],players:R(e).map(e=>({address:e.address,name:e.name,avatar:Y(e.avatar),seat:e.seat,handCount:e.hand?.length??e.handCount??0,score:Number(e.score??v),playedCards:Number(e.playedCards||0),hand:Array.isArray(e.hand)?e.hand.map(G):[]}))}:null}function b(e){return!e||typeof e!=`object`?null:{id:String(e.id||``).toUpperCase(),ownerAddress:q(e.ownerAddress),status:e.status===`playing`||e.status===`finished`?e.status:`lobby`,seq:Number(e.seq||1),players:Array.isArray(e.players)?e.players.map(D).filter(Boolean):[],deck:Array.isArray(e.deck)?e.deck.map(_e).filter(Boolean):[],discard:Array.isArray(e.discard)?e.discard.map(O).filter(Boolean):[],table:e.table&&typeof e.table==`object`?{...e.table,cards:Array.isArray(e.table.cards)?e.table.cards.map(O).filter(Boolean):[]}:null,currentSeat:Number(e.currentSeat||0),lastWinnerSeat:e.lastWinnerSeat===null||e.lastWinnerSeat===void 0?null:Number(e.lastWinnerSeat),previousWinnerSeat:e.previousWinnerSeat===null||e.previousWinnerSeat===void 0?null:Number(e.previousWinnerSeat),passSeats:Array.isArray(e.passSeats)?e.passSeats.map(Number):[],baseScore:Number(e.baseScore||1),bombCount:Number(e.bombCount||0),diceRolls:Array.isArray(e.diceRolls)?e.diceRolls:[],roundResult:e.roundResult||null,log:Array.isArray(e.log)?e.log.map(String):[],winnerSeat:e.winnerSeat===null||e.winnerSeat===void 0?null:Number(e.winnerSeat)}}function he(e){if(!e?.length)return null;e=[...e].sort(H);let t=e.filter(W).length,n=e.filter(e=>!W(e));if(n.length===0)return null;let r=x(e,n,t);if(r)return r;if(e.length===1&&t===0)return w(`single`,U(e[0]),1,[U(e[0])]);if(e.length===2&&B(n,t)){let e=V(n);return w(`pair`,e,2,[e,e])}return S(e)||C(e)}function x(e,t,n){if(e.length<3||!B(t,n))return null;let r=V(t);return w(`bomb`,r,e.length,Array(e.length).fill(r),n===0)}function S(e){if(e.length<3)return null;let t=e.filter(W).length,n=e.filter(e=>!W(e));for(let r=0;r<=h.length-e.length;r+=1){let i=h.slice(r,r+e.length).map(e=>g.get(e)),a=[...i],o=0;for(let e of n){let t=a.indexOf(U(e));t!==-1&&(a.splice(t,1),o+=1)}if(o+t===e.length&&a.length===t)return w(`straight`,i.at(-1),e.length,i)}return null}function C(e){if(e.length<4||e.length%2!=0)return null;let t=e.length/2,n=e.filter(W).length,r=e.filter(e=>!W(e));for(let i=0;i<=h.length-t;i+=1){let a=h.slice(i,i+t).map(e=>g.get(e)),o=a.flatMap(e=>[e,e]),s=0;for(let e of r){let t=o.indexOf(U(e));t!==-1&&(o.splice(t,1),s+=1)}if(s+n===e.length&&o.length===n){let t=a.flatMap(e=>[e,e]);return w(`pairStraight`,a.at(-1),e.length,t)}}return null}function w(e,t,n,r,i=!0){return{type:e,value:t,length:n,resolvedValues:r,pure:i,label:be({type:e,value:t,length:n,resolvedValues:r,pure:i})}}function T(e,t){return e?!t||e.type===`bomb`&&t.type!==`bomb`?!0:e.type===t.type?e.type===`bomb`?e.length===t.length?e.value===t.value?e.pure&&!t.pure:e.value>t.value:e.length>t.length:e.length===t.length?e.type===`single`||e.type===`pair`?e.value===Se(t.value)||e.value===g.get(`2`)&&t.value!==g.get(`2`):e.value===Se(t.value):!1:!1:!1}function E(e){let t=new Set;return e.map(e=>({address:q(e.address),name:J(e.name),avatar:Y(e.avatar),publicKey:String(e.publicKey||``)})).filter(e=>!e.address||t.has(e.address)?!1:(t.add(e.address),!0))}function D(e){let t=q(e.address);return t?{address:t,name:J(e.name),avatar:Y(e.avatar),seat:Number(e.seat||0),hand:Array.isArray(e.hand)?e.hand.map(O).filter(Boolean):[],handCount:Number(e.handCount||0),score:Number(e.score??v),playedCards:Number(e.playedCards||0)}:null}function O(e){if(!e||typeof e!=`object`)return null;let t=String(e.rank||``),n=String(e.suit||``);return!g.has(t)&&t!==`SJ`&&t!==`BJ`||!p.includes(n)&&n!==`Joker`?null:{id:String(e.id||`${n}-${t}`),suit:n,rank:t,label:e.label||K({suit:n,rank:t}),color:e.color||ye({suit:n,rank:t})}}function k(e,t){if(e.previousWinnerSeat!==null)return e.diceRolls=[],R(e).find(t=>t.seat===e.previousWinnerSeat)||R(e)[0];let n=R(e),r=[];for(;n.length>1;){r=n.map(e=>({seat:e.seat,name:e.name,value:Ce(t)}));let i=Math.max(...r.map(e=>e.value)),a=r.filter(e=>e.value===i);if(a.length===1)return e.diceRolls=r,n.find(e=>e.seat===a[0].seat);n=n.filter(e=>a.some(t=>t.seat===e.seat))}return e.diceRolls=r,n[0]}function A(e,t){e.status=`finished`,e.winnerSeat=t.seat,e.previousWinnerSeat=t.seat;let n=[],r=0;for(let i of R(e)){if(i.seat===t.seat)continue;let a=i.playedCards===0,o=a?_:i.hand.length*e.baseScore*.5;i.score-=o,r+=o,n.push({seat:i.seat,name:i.name,loss:o,sealed:a,cardsLeft:i.hand.length})}t.score+=r,e.roundResult={winnerSeat:t.seat,winnerName:t.name,winnerGain:r,baseScore:e.baseScore,bombCount:e.bombCount,losers:n},e.log.unshift(`${t.name} 获胜,赢 ${r} 分`)}function j(e){for(let t of L(e)){if(e.deck.length===0)break;t.hand.push(...P(e,1)),t.handCount=t.hand.length,F(t.hand)}}function M(){let e=[];for(let t of p)for(let n of m)e.push({id:`${t}-${n}`,suit:t,rank:n});return e.push({id:`SJ`,suit:`Joker`,rank:`SJ`}),e.push({id:`BJ`,suit:`Joker`,rank:`BJ`}),e.map(G)}function N(e,t){let n=[...e];for(let e=n.length-1;e>0;--e){let r=Math.floor(t()*(e+1));[n[e],n[r]]=[n[r],n[e]]}return n}function P(e,t){return e.deck.splice(0,t)}function F(e){e.sort(H)}function I(e){return e.players.find(t=>t.seat===e.currentSeat)}function L(e){return R(e).filter(e=>e.hand.length>0)}function R(e){return[...e?.players||[]].sort((e,t)=>e.seat-t.seat)}function z(e){let t=L(e).map(e=>e.seat);e.currentSeat=t[(t.indexOf(e.currentSeat)+1)%t.length]}function B(e,t=0){if(e.length===0)return!1;let n=e[0].rank;return e.every(e=>e.rank===n)&&e.length+t>=2}function V(e){return U(e[0])}function H(e,t){return U(e)-U(t)||ge(e.suit)-ge(t.suit)}function U(e){return g.get(e.rank)||99}function W(e){return e.rank===`SJ`||e.rank===`BJ`}function ge(e){return{D:0,C:1,H:2,S:3,Joker:4}[e]||0}function _e(e){if(typeof e==`string`){let[t,n]=e.split(`-`);return O({id:e,suit:t,rank:n})}return O(e)}function G(e){return{id:e.id,suit:e.suit,rank:e.rank,label:K(e),color:ye(e)}}function K(e){return e.rank===`SJ`?`小王`:e.rank===`BJ`?`大王`:`${ve(e.suit)}${e.rank}`}function ve(e){return{S:`♠`,H:`♥`,C:`♣`,D:`♦`}[e]||``}function ye(e){return e.suit===`H`||e.suit===`D`||e.rank===`BJ`?`red`:`black`}function be(e){let t=e.resolvedValues?.length?`(${e.resolvedValues.map(xe).join(` `)})`:``;return`${{single:`单张`,pair:`对子`,straight:`顺子`,pairStraight:`连对`,bomb:e.pure?`纯炸弹`:`带王炸弹`}[e.type]}${t}`}function xe(e){return m.find(t=>g.get(t)===e)||String(e)}function Se(e){let t=m.findIndex(t=>g.get(t)===e);return t===-1||t>=m.length-1?null:g.get(m[t+1])}function Ce(e){return Math.floor(e()*6)+1}function q(e){let t=String(e||``).trim();return/^0x[a-fA-F0-9]{40}$/.test(t)?t.toLowerCase():``}function J(e){return String(e||`玩家`).trim().slice(0,16)||`玩家`}function Y(e){return String(e||``).trim().slice(0,4096)}var X={page:`_page_p7qf6_1`,headerActions:`_headerActions_p7qf6_7`,entry:`_entry_p7qf6_13`,entryBrand:`_entryBrand_p7qf6_23`,cardMark:`_cardMark_p7qf6_29`,entryPanel:`_entryPanel_p7qf6_59`,panel:`_panel_p7qf6_60`,handPanel:`_handPanel_p7qf6_61`,accountLine:`_accountLine_p7qf6_74`,scoreMeta:`_scoreMeta_p7qf6_75`,roomBar:`_roomBar_p7qf6_76`,badges:`_badges_p7qf6_77`,actions:`_actions_p7qf6_78`,joinForm:`_joinForm_p7qf6_98`,status:`_status_p7qf6_119`,gameGrid:`_gameGrid_p7qf6_125`,tablePanel:`_tablePanel_p7qf6_136`,seats:`_seats_p7qf6_170`,player:`_player_p7qf6_176`,active:`_active_p7qf6_193`,winner:`_winner_p7qf6_197`,avatar:`_avatar_p7qf6_201`,centerTable:`_centerTable_p7qf6_235`,deckBox:`_deckBox_p7qf6_242`,playedBox:`_playedBox_p7qf6_243`,playedCards:`_playedCards_p7qf6_271`,notice:`_notice_p7qf6_279`,resultDetail:`_resultDetail_p7qf6_287`,sidePanel:`_sidePanel_p7qf6_298`,scoreRow:`_scoreRow_p7qf6_323`,logPanel:`_logPanel_p7qf6_331`,hand:`_hand_p7qf6_61`,cardButton:`_cardButton_p7qf6_358`,picked:`_picked_p7qf6_368`,card:`_card_p7qf6_29`,red:`_red_p7qf6_399`,black:`_black_p7qf6_403`,small:`_small_p7qf6_407`,preview:`_preview_p7qf6_425`,valid:`_valid_p7qf6_448`},Z=n(),Q=`gandengyan`;function $(...e){return e.filter(Boolean).join(` `)}function we(e,t){return String(e||``).toLowerCase()===String(t||``).toLowerCase()}function Te(e,t){if(typeof window>`u`||!(`speechSynthesis`in window)||!e)return;window.speechSynthesis.cancel();let n=new SpeechSynthesisUtterance(e);n.lang=t,n.rate=1.1,window.speechSynthesis.speak(n)}function Ee(){let{t:e,locale:t}=oe(),n=u(e=>e.isDarkMode),i=u(e=>e.setIsDarkMode),a=u(e=>e.addToast),d=r(e=>e.initializeUser),[p,m]=(0,f.useState)(``),[h,g]=(0,f.useState)([]),[ce,_]=(0,f.useState)(!1),v=(0,f.useRef)(``),y=(0,f.useRef)(!1),b=ae({gameId:Q,onError:e=>a(e,`error`)});(0,f.useEffect)(()=>{d()},[d]),(0,f.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get(`room`)?.toUpperCase();e&&(m(e),v.current=e)},[]),(0,f.useEffect)(()=>{let t=v.current;!t||y.current||!b.isBackendReady||!b.userIdentity||(y.current=!0,v.current=``,b.joinRoom(t).then(t=>{t&&a(e(`game.toast.joinedRoom`),`success`)}))},[b.isBackendReady,b.userIdentity,b.joinRoom,a,e]),(0,f.useEffect)(()=>{if(!b.roomCode)return;let e=`/game/gandengyan?room=${b.roomCode}`;`${window.location.pathname}${window.location.search}`!==e&&window.history.replaceState(null,``,e)},[b.roomCode]);let x=(0,f.useMemo)(()=>re(b.messages,b.roomCode?{gameId:Q,roomCode:b.roomCode}:{gameId:Q}),[b.messages,b.roomCode]),S=(0,f.useMemo)(()=>ie(b.messages,{gameId:Q,roomCode:b.roomCode}),[b.messages,b.roomCode]),C=S?.payload?.state,w=C?.players.find(e=>we(e.address,b.userIdentity?.address)),T=we(C?.ownerAddress||x.hostAddress,b.userIdentity?.address),E=C?.status===`playing`&&C.currentSeat===w?.seat,D=(0,f.useMemo)(()=>h.map(e=>w?.hand.find(t=>t.id===e)).filter(Boolean),[h,w]),O=(0,f.useMemo)(()=>he(D),[D]),k=b.roomCode&&typeof window<`u`?`${window.location.origin}/game/gandengyan?room=${b.roomCode}`:``,A=(0,f.useRef)(-1),j=(0,f.useRef)(!1);(0,f.useEffect)(()=>{g([])},[C?.seq]),(0,f.useEffect)(()=>{if(!C)return;let n=C.seq;if(A.current<0){A.current=n;return}if(n!==A.current&&(A.current=n,C.status!==`finished`&&(j.current=!1),C.status===`finished`&&C.winnerSeat!==null)){j.current||(j.current=!0,Te(e(`game.gandengyan.speech.gameOver`),t));return}},[t,C?.seq,e]),(0,f.useEffect)(()=>{if(!T||!b.roomCode||!b.userIdentity||S||x.players.length===0)return;let e=le({roomCode:b.roomCode,ownerAddress:b.userIdentity.address,ownerName:b.userIdentity.displayName||b.userIdentity.username,players:x.players});b.sendRoomEvent(`room:state`,{state:e,seq:e.seq})},[b,T,S,x.players]),(0,f.useEffect)(()=>{if(!C||!T||C.status!==`lobby`)return;let e=ue(C,x.players);e&&e.players.length!==C.players.length&&b.sendRoomEvent(`room:state`,{state:e,seq:e.seq})},[b,T,x.players,C]);let M=(0,f.useRef)(0),N=(0,f.useMemo)(()=>b.roomEvents.filter(e=>e.event?.event===`player:leave`),[b.roomEvents]);(0,f.useEffect)(()=>{if(N.length<=M.current)return;let t=N.slice(M.current);M.current=N.length;for(let n of t)a(e(`game.toast.playerLeft`,{player:n.event?.payload?.player?.name||e(`game.player`)}),`info`)},[N,a,e]),(0,f.useEffect)(()=>{if(!C||!T||C.status!==`playing`)return;let e=new Set(x.players.map(e=>e.address.toLowerCase())),t=C.players.find(t=>!e.has(t.address.toLowerCase()));if(!t)return;let n=me(C,t.address);n&&L(n)},[b,T,x.players,C]);async function P(){await b.createRoom()&&a(e(`game.toast.roomCreated`),`success`)}async function F(t){t.preventDefault(),await b.joinRoom(p)&&a(e(`game.toast.joinedRoom`),`success`)}async function I(){k&&(await navigator.clipboard.writeText(k),_(!0),setTimeout(()=>_(!1),1400))}async function L(e){await b.sendRoomEvent(`room:state`,{state:e,seq:e.seq})}async function R(){if(!(!C||!T))try{await L(de(C))}catch(t){a(t instanceof Error?t.message:e(`game.zhajinhua.error.startFailed`),`error`)}}async function z(){await R()}async function B(){if(!C||!b.userIdentity)return;let t=fe(C,b.userIdentity.address,h);if(!t.ok){a(t.error||e(`game.gandengyan.error.playFailed`),`error`);return}await L(t.state)}async function V(){if(!C||!b.userIdentity)return;let t=pe(C,b.userIdentity.address);if(!t.ok){a(t.error||e(`game.gandengyan.error.actionFailed`),`error`);return}await L(t.state)}function H(e){g(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])}return(0,Z.jsx)(ee,{sidebar:({closeSidebar:e})=>(0,Z.jsx)(ne,{activeGame:`gandengyan`,closeSidebar:e}),headerTitle:(0,Z.jsx)(`h2`,{className:`header-title`,children:e(`game.gandengyan.title`)}),headerRight:(0,Z.jsxs)(`div`,{className:X.headerActions,children:[C&&(0,Z.jsxs)(`button`,{className:`btn btn-sm`,onClick:I,children:[(0,Z.jsx)(c,{size:14}),e(ce?`common.copied`:`game.action.shareRoom`)]}),(0,Z.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>i(!n),title:e(`common.theme.toggle`),children:n?(0,Z.jsx)(o,{size:16}):(0,Z.jsx)(s,{size:16})})]}),children:(0,Z.jsx)(`main`,{className:X.page,children:C?(0,Z.jsxs)(`section`,{className:X.gameGrid,children:[(0,Z.jsxs)(`div`,{className:X.tablePanel,children:[(0,Z.jsxs)(`div`,{className:X.roomBar,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`strong`,{translate:`no`,children:e(`game.roomLabel`,{room:C.id})}),(0,Z.jsx)(`span`,{children:C.status===`lobby`?e(`game.status.waitingStart`):C.status===`finished`?e(`game.status.finished`):e(`game.status.playing`)})]}),(0,Z.jsx)(`div`,{className:X.badges,children:(0,Z.jsx)(`span`,{children:b.connected?e(`game.status.online`):e(`game.status.offline`)})})]}),(0,Z.jsx)(`div`,{className:X.seats,children:C.players.map(t=>(0,Z.jsx)(De,{player:t,active:C.currentSeat===t.seat,winner:C.winnerSeat===t.seat,relation:ke(w,t,C.players.length,e)},t.seat))}),(0,Z.jsxs)(`div`,{className:X.centerTable,children:[(0,Z.jsxs)(`div`,{className:X.deckBox,children:[(0,Z.jsx)(`span`,{children:e(`game.gandengyan.deck`)}),(0,Z.jsx)(`strong`,{children:C.deckCount})]}),(0,Z.jsx)(`div`,{className:X.playedBox,children:C.table?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`strong`,{children:e(`game.gandengyan.tablePlay`,{player:C.table.playerName,combo:C.table.combo?.label||e(`game.card`)})}),(0,Z.jsx)(`div`,{className:X.playedCards,children:C.table.cards.map(e=>(0,Z.jsx)(Oe,{card:e,small:!0},e.id))})]}):(0,Z.jsx)(`span`,{children:e(`game.gandengyan.waitingLead`)})}),(0,Z.jsxs)(`div`,{className:X.deckBox,children:[(0,Z.jsx)(`span`,{children:e(`game.gandengyan.baseScore`)}),(0,Z.jsx)(`strong`,{children:C.baseScore})]})]}),(0,Z.jsx)(`div`,{className:X.notice,children:C.status===`finished`?C.roundResult?(0,Z.jsxs)(`div`,{className:X.resultDetail,children:[(0,Z.jsxs)(`p`,{children:[e(`game.gandengyan.result.winnerGain`,{player:C.roundResult.winnerName,score:C.roundResult.winnerGain}),C.roundResult.bombCount>0&&e(`game.gandengyan.result.bombCount`,{count:C.roundResult.bombCount})]}),C.roundResult.losers.map(t=>(0,Z.jsx)(`p`,{children:t.sealed?e(`game.gandengyan.result.sealedLoss`,{player:t.name,loss:20}):e(`game.gandengyan.result.cardsLeftLoss`,{player:t.name,cards:t.cardsLeft,loss:t.loss})},t.seat))]}):e(`game.gandengyan.result.winner`,{player:C.players.find(e=>e.seat===C.winnerSeat)?.name||e(`game.player`)}):E?e(`game.gandengyan.status.yourTurn`):e(`game.zhajinhua.status.waitingPlayer`,{player:C.players.find(e=>e.seat===C.currentSeat)?.name||e(`game.player`)})})]}),(0,Z.jsxs)(`aside`,{className:X.sidePanel,children:[(0,Z.jsxs)(`section`,{className:X.panel,children:[(0,Z.jsx)(`h3`,{children:e(`game.gandengyan.roundPanel`)}),T&&C.status===`lobby`&&(0,Z.jsxs)(`button`,{className:`btn btn-primary`,disabled:C.players.length<2,onClick:R,children:[(0,Z.jsx)(l,{size:16}),e(`game.action.startRound`)]}),T&&C.status===`finished`&&(0,Z.jsxs)(`button`,{className:`btn btn-primary`,onClick:z,children:[(0,Z.jsx)(se,{size:16}),e(`game.action.nextRound`)]}),!T&&(0,Z.jsx)(`p`,{className:X.status,children:e(`game.waitingHost`)})]}),(0,Z.jsxs)(`section`,{className:X.panel,children:[(0,Z.jsx)(`h3`,{children:e(`game.gandengyan.score`)}),(0,Z.jsxs)(`div`,{className:X.scoreMeta,children:[(0,Z.jsx)(`span`,{children:e(`game.gandengyan.bombCount`,{count:C.bombCount})}),(0,Z.jsx)(`span`,{children:e(`game.gandengyan.discardCount`,{count:C.discardCount})})]}),C.players.map(e=>(0,Z.jsxs)(`div`,{className:X.scoreRow,children:[(0,Z.jsx)(`span`,{translate:`no`,children:e.name}),(0,Z.jsx)(`strong`,{children:e.score})]},e.seat))]}),(0,Z.jsxs)(`section`,{className:$(X.panel,X.logPanel),children:[(0,Z.jsx)(`h3`,{children:e(`game.gandengyan.log`)}),C.log.map((e,t)=>(0,Z.jsx)(`p`,{translate:`no`,children:e},`${e}-${t}`))]})]}),(0,Z.jsxs)(`div`,{className:X.handPanel,children:[(0,Z.jsx)(De,{player:w,active:E,winner:C.winnerSeat===w?.seat}),(0,Z.jsx)(`div`,{className:X.hand,children:w?.hand.map(e=>(0,Z.jsx)(`button`,{className:$(X.cardButton,h.includes(e.id)&&X.picked),onClick:()=>H(e.id),children:(0,Z.jsx)(Oe,{card:e})},e.id))}),(0,Z.jsxs)(`div`,{className:X.actions,children:[(0,Z.jsxs)(`div`,{className:$(X.preview,O&&X.valid),children:[(0,Z.jsx)(`strong`,{children:O?O.label:h.length?e(`game.gandengyan.invalidCombo`):e(`game.gandengyan.selectCards`)}),(0,Z.jsx)(`span`,{children:D.map(e=>e.label).join(` `)||e(`game.gandengyan.jokerOrderHint`)})]}),(0,Z.jsxs)(`button`,{className:`btn btn-primary`,disabled:!E||h.length===0||!O,onClick:B,children:[(0,Z.jsx)(te,{size:16}),e(`game.gandengyan.action.play`)]}),(0,Z.jsx)(`button`,{className:`btn`,disabled:!E||!C.table,onClick:V,children:e(`game.gandengyan.action.pass`)})]})]})]}):(0,Z.jsxs)(`section`,{className:X.entry,children:[(0,Z.jsxs)(`div`,{className:X.entryBrand,children:[(0,Z.jsx)(`div`,{className:X.cardMark,children:e(`game.gandengyan.mark`)}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h1`,{children:e(`game.gandengyan.hero.title`)}),(0,Z.jsx)(`p`,{children:e(`game.hero.desc`)})]})]}),(0,Z.jsxs)(`div`,{className:X.entryPanel,children:[(0,Z.jsxs)(`div`,{className:X.accountLine,children:[(0,Z.jsx)(`span`,{children:e(`game.currentAccount`)}),(0,Z.jsx)(`strong`,{translate:`no`,children:b.userIdentity?.displayName||e(`web3.notSignedIn`)})]}),(0,Z.jsxs)(`button`,{className:`btn btn-primary`,disabled:b.joining,onClick:P,children:[(0,Z.jsx)(l,{size:16}),e(`game.action.createRoom`)]}),(0,Z.jsxs)(`form`,{onSubmit:F,className:X.joinForm,children:[(0,Z.jsxs)(`label`,{children:[e(`game.roomCode`),(0,Z.jsx)(`input`,{value:p,maxLength:8,onChange:e=>m(e.target.value.toUpperCase()),placeholder:e(`game.roomCode.placeholder`)})]}),(0,Z.jsx)(`button`,{className:`btn`,disabled:b.joining||!p,children:e(`game.action.joinRoom`)})]}),(0,Z.jsx)(`p`,{className:X.status,children:b.isBackendReady?e(`game.status.nodeConnected`):e(`game.status.nodeConnecting`)})]})]})})})}function De({player:e,active:t,winner:n,relation:r=``}){let{t:i}=oe();return e?(0,Z.jsxs)(`div`,{className:$(X.player,t&&X.active,n&&X.winner),children:[(0,Z.jsx)(`div`,{className:X.avatar,translate:`no`,children:(0,Z.jsx)(`img`,{src:d(e.address,e.avatar),alt:``})}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`strong`,{translate:`no`,children:e.name}),(0,Z.jsxs)(`span`,{children:[r,r?` · `:``,i(`game.gandengyan.handCount`,{count:e.handCount})]})]})]}):null}function Oe({card:e,small:t=!1}){return(0,Z.jsxs)(`div`,{className:$(X.card,X[e.color],t&&X.small),children:[(0,Z.jsx)(`span`,{children:e.label}),(0,Z.jsx)(`i`,{children:e.suit===`Joker`?`*`:e.label.slice(0,1)})]})}function ke(e,t,n,r){if(!e)return r(`game.gandengyan.position.seat`,{seat:t.seat+1});let i=(t.seat-e.seat+n)%n;return i===0?r(`game.gandengyan.position.me`):n===2?r(`game.gandengyan.position.opponent`):n===3?r(i===1?`game.gandengyan.position.nextOpponent`:`game.gandengyan.position.prevOpponent`):n===4?r(i===1?`game.gandengyan.position.nextOpponent`:i===2?`game.gandengyan.position.partner`:`game.gandengyan.position.prevOpponent`):i%2==0?r(`game.gandengyan.position.seatPartner`,{seat:t.seat+1}):r(`game.gandengyan.position.seatOpponent`,{seat:t.seat+1})}var Ae=i(`/game/gandengyan/`)({component:Ee});export{Ae as Route};
|
|
1
|
+
import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{g as r,t as i,v as a}from"./userStore-q0BBZsIV.js";import{i as o,r as s}from"./LanguageToggle-HAJ3D6Ne.js";import{t as c}from"./copy-5aEv78Eq.js";import{t as ee}from"./AppShell-oF8wPXde.js";import{t as l}from"./play-D5r9Yvbq.js";import{t as te}from"./send-D8p6f8OD.js";import{i as ne,n as re,r as ie,t as ae}from"./useGameRoom-CURx56m6.js";import{R as oe,i as u,m as d}from"./index--p9MKNEl.js";var se=r(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),f=t(e(),1),p=[`S`,`H`,`C`,`D`],m=[`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`J`,`Q`,`K`,`A`,`2`],h=m.filter(e=>e!==`2`),g=new Map(m.map((e,t)=>[e,t+3])),ce=5,_=20,v=1e3;function le({roomCode:e,ownerAddress:t,ownerName:n,players:r=[],random:i=Math.random}){let a=E(r);return a.some(e=>e.address===q(t))||a.unshift({address:q(t),name:J(n),avatar:``}),y({id:String(e||``).toUpperCase(),ownerAddress:q(t),status:`lobby`,seq:1,players:a.slice(0,6).map((e,t)=>({address:e.address,name:J(e.name),avatar:Y(e.avatar),seat:t,hand:[],handCount:0,score:v,playedCards:0})),deck:[],discard:[],table:null,currentSeat:0,lastWinnerSeat:null,previousWinnerSeat:null,passSeats:[],baseScore:1,bombCount:0,diceRolls:[],roundResult:null,log:[`房间已创建`],winnerSeat:null,random:i})}function ue(e,t=[]){let n=b(e);if(!n||n.status!==`lobby`)return n;let r=new Map(n.players.map(e=>[e.address,e.score]));return n.players=E(t).slice(0,6).map((e,t)=>({address:e.address,name:J(e.name),avatar:Y(e.avatar),seat:t,hand:[],handCount:0,score:r.get(e.address)??v,playedCards:0})),n.seq+=1,y(n)}function de(e,t=Math.random){let n=b(e);if(!n||n.players.length<2)throw Error(`至少需要 2 名玩家`);n.deck=N(M(),t),n.discard=[],n.table=null,n.passSeats=[],n.winnerSeat=null,n.roundResult=null,n.baseScore=1,n.bombCount=0,n.status=`playing`;for(let e of R(n))e.hand=P(n,ce),e.handCount=e.hand.length,e.playedCards=0,F(e.hand);let r=k(n,t);return n.currentSeat=r.seat,n.lastWinnerSeat=null,n.log=[`新一局开始,${r.name} 先出牌`],n.diceRolls.length>0&&n.log.unshift(`骰子结果:${n.diceRolls.map(e=>`${e.name} ${e.value}`).join(`,`)}`),n.seq+=1,y(n)}function fe(e,t,n){let r=b(e),i=I(r),a=q(t);if(!i||i.address!==a)return{ok:!1,error:`还没轮到你`,state:y(r)};let o=n.map(e=>i.hand.find(t=>t.id===e));if(o.length===0||o.some(e=>!e))return{ok:!1,error:`手牌不存在`,state:y(r)};let s=he(o);return s?T(s,r.table?.combo)?(o.sort(H),i.hand=i.hand.filter(e=>!n.includes(e.id)),i.handCount=i.hand.length,i.playedCards+=o.length,r.discard.push(...o),r.table={seat:i.seat,playerName:i.name,cards:o,combo:s},r.passSeats=[],r.lastWinnerSeat=i.seat,s.type===`bomb`&&(r.bombCount+=1,r.baseScore*=2),r.log.unshift(`${i.name} 出 ${s.label} ${o.map(K).join(` `)}${s.type===`bomb`?`,底分 ${r.baseScore}`:``}`),i.hand.length===0?A(r,i):z(r),r.seq+=1,{ok:!0,state:y(r)}):{ok:!1,error:`出的牌压不过上一手`,state:y(r)}:{ok:!1,error:`这个牌型不合法`,state:y(r)}}function pe(e,t){let n=b(e),r=I(n),i=q(t);return!r||r.address!==i?{ok:!1,error:`还没轮到你`,state:y(n)}:n.table?(n.passSeats.includes(r.seat)||n.passSeats.push(r.seat),n.log.unshift(`${r.name} 不要`),L(n).map(e=>e.seat).filter(e=>e!==n.lastWinnerSeat).every(e=>n.passSeats.includes(e))?(j(n),n.currentSeat=n.lastWinnerSeat,n.table=null,n.passSeats=[],n.log.unshift(`本轮结束,所有玩家各补 1 张,重新领出`)):z(n),n.seq+=1,{ok:!0,state:y(n)}):{ok:!1,error:`领出时不能不要`,state:y(n)}}function me(e,t){let n=b(e);if(!n)return null;let r=q(t),i=n.players.findIndex(e=>e.address===r);if(i===-1)return y(n);let a=n.players[i],o=n.currentSeat===a.seat,s=n.lastWinnerSeat===a.seat;n.players.splice(i,1),n.passSeats=n.passSeats.filter(e=>e!==a.seat),n.log.unshift(`${a.name} 已退出房间`);let c=R(n);if(n.status===`playing`)if(c.length<=1)c.length===1?A(n,c[0]):(n.status=`finished`,n.log.unshift(`玩家不足,本局结束`));else{if(o){let e=L(n);if(e.length>0){let t=e.findIndex(e=>e.seat>a.seat);n.currentSeat=e[t>=0?t:0].seat}}s&&n.table&&(n.table=null,n.passSeats=[])}return n.seq+=1,y(n)}function y(e){return e?{id:e.id,ownerAddress:e.ownerAddress,status:e.status,seq:Number(e.seq||1),deck:Array.isArray(e.deck)?e.deck.map(G):[],deckCount:e.deck?.length||Number(e.deckCount||0),discard:Array.isArray(e.discard)?e.discard.map(G):[],discardCount:e.discard?.length||Number(e.discardCount||0),currentSeat:Number(e.currentSeat||0),lastWinnerSeat:e.lastWinnerSeat===null||e.lastWinnerSeat===void 0?null:Number(e.lastWinnerSeat),previousWinnerSeat:e.previousWinnerSeat===null||e.previousWinnerSeat===void 0?null:Number(e.previousWinnerSeat),baseScore:Number(e.baseScore||1),bombCount:Number(e.bombCount||0),diceRolls:Array.isArray(e.diceRolls)?e.diceRolls:[],roundResult:e.roundResult||null,table:e.table?{...e.table,cards:e.table.cards.map(G)}:null,passSeats:Array.isArray(e.passSeats)?e.passSeats:[],winnerSeat:e.winnerSeat===null||e.winnerSeat===void 0?null:Number(e.winnerSeat),log:Array.isArray(e.log)?e.log.slice(0,18):[],players:R(e).map(e=>({address:e.address,name:e.name,avatar:Y(e.avatar),seat:e.seat,handCount:e.hand?.length??e.handCount??0,score:Number(e.score??v),playedCards:Number(e.playedCards||0),hand:Array.isArray(e.hand)?e.hand.map(G):[]}))}:null}function b(e){return!e||typeof e!=`object`?null:{id:String(e.id||``).toUpperCase(),ownerAddress:q(e.ownerAddress),status:e.status===`playing`||e.status===`finished`?e.status:`lobby`,seq:Number(e.seq||1),players:Array.isArray(e.players)?e.players.map(D).filter(Boolean):[],deck:Array.isArray(e.deck)?e.deck.map(_e).filter(Boolean):[],discard:Array.isArray(e.discard)?e.discard.map(O).filter(Boolean):[],table:e.table&&typeof e.table==`object`?{...e.table,cards:Array.isArray(e.table.cards)?e.table.cards.map(O).filter(Boolean):[]}:null,currentSeat:Number(e.currentSeat||0),lastWinnerSeat:e.lastWinnerSeat===null||e.lastWinnerSeat===void 0?null:Number(e.lastWinnerSeat),previousWinnerSeat:e.previousWinnerSeat===null||e.previousWinnerSeat===void 0?null:Number(e.previousWinnerSeat),passSeats:Array.isArray(e.passSeats)?e.passSeats.map(Number):[],baseScore:Number(e.baseScore||1),bombCount:Number(e.bombCount||0),diceRolls:Array.isArray(e.diceRolls)?e.diceRolls:[],roundResult:e.roundResult||null,log:Array.isArray(e.log)?e.log.map(String):[],winnerSeat:e.winnerSeat===null||e.winnerSeat===void 0?null:Number(e.winnerSeat)}}function he(e){if(!e?.length)return null;e=[...e].sort(H);let t=e.filter(W).length,n=e.filter(e=>!W(e));if(n.length===0)return null;let r=x(e,n,t);if(r)return r;if(e.length===1&&t===0)return w(`single`,U(e[0]),1,[U(e[0])]);if(e.length===2&&B(n,t)){let e=V(n);return w(`pair`,e,2,[e,e])}return S(e)||C(e)}function x(e,t,n){if(e.length<3||!B(t,n))return null;let r=V(t);return w(`bomb`,r,e.length,Array(e.length).fill(r),n===0)}function S(e){if(e.length<3)return null;let t=e.filter(W).length,n=e.filter(e=>!W(e));for(let r=0;r<=h.length-e.length;r+=1){let i=h.slice(r,r+e.length).map(e=>g.get(e)),a=[...i],o=0;for(let e of n){let t=a.indexOf(U(e));t!==-1&&(a.splice(t,1),o+=1)}if(o+t===e.length&&a.length===t)return w(`straight`,i.at(-1),e.length,i)}return null}function C(e){if(e.length<4||e.length%2!=0)return null;let t=e.length/2,n=e.filter(W).length,r=e.filter(e=>!W(e));for(let i=0;i<=h.length-t;i+=1){let a=h.slice(i,i+t).map(e=>g.get(e)),o=a.flatMap(e=>[e,e]),s=0;for(let e of r){let t=o.indexOf(U(e));t!==-1&&(o.splice(t,1),s+=1)}if(s+n===e.length&&o.length===n){let t=a.flatMap(e=>[e,e]);return w(`pairStraight`,a.at(-1),e.length,t)}}return null}function w(e,t,n,r,i=!0){return{type:e,value:t,length:n,resolvedValues:r,pure:i,label:be({type:e,value:t,length:n,resolvedValues:r,pure:i})}}function T(e,t){return e?!t||e.type===`bomb`&&t.type!==`bomb`?!0:e.type===t.type?e.type===`bomb`?e.length===t.length?e.value===t.value?e.pure&&!t.pure:e.value>t.value:e.length>t.length:e.length===t.length?e.type===`single`||e.type===`pair`?e.value===Se(t.value)||e.value===g.get(`2`)&&t.value!==g.get(`2`):e.value===Se(t.value):!1:!1:!1}function E(e){let t=new Set;return e.map(e=>({address:q(e.address),name:J(e.name),avatar:Y(e.avatar),publicKey:String(e.publicKey||``)})).filter(e=>!e.address||t.has(e.address)?!1:(t.add(e.address),!0))}function D(e){let t=q(e.address);return t?{address:t,name:J(e.name),avatar:Y(e.avatar),seat:Number(e.seat||0),hand:Array.isArray(e.hand)?e.hand.map(O).filter(Boolean):[],handCount:Number(e.handCount||0),score:Number(e.score??v),playedCards:Number(e.playedCards||0)}:null}function O(e){if(!e||typeof e!=`object`)return null;let t=String(e.rank||``),n=String(e.suit||``);return!g.has(t)&&t!==`SJ`&&t!==`BJ`||!p.includes(n)&&n!==`Joker`?null:{id:String(e.id||`${n}-${t}`),suit:n,rank:t,label:e.label||K({suit:n,rank:t}),color:e.color||ye({suit:n,rank:t})}}function k(e,t){if(e.previousWinnerSeat!==null)return e.diceRolls=[],R(e).find(t=>t.seat===e.previousWinnerSeat)||R(e)[0];let n=R(e),r=[];for(;n.length>1;){r=n.map(e=>({seat:e.seat,name:e.name,value:Ce(t)}));let i=Math.max(...r.map(e=>e.value)),a=r.filter(e=>e.value===i);if(a.length===1)return e.diceRolls=r,n.find(e=>e.seat===a[0].seat);n=n.filter(e=>a.some(t=>t.seat===e.seat))}return e.diceRolls=r,n[0]}function A(e,t){e.status=`finished`,e.winnerSeat=t.seat,e.previousWinnerSeat=t.seat;let n=[],r=0;for(let i of R(e)){if(i.seat===t.seat)continue;let a=i.playedCards===0,o=a?_:i.hand.length*e.baseScore*.5;i.score-=o,r+=o,n.push({seat:i.seat,name:i.name,loss:o,sealed:a,cardsLeft:i.hand.length})}t.score+=r,e.roundResult={winnerSeat:t.seat,winnerName:t.name,winnerGain:r,baseScore:e.baseScore,bombCount:e.bombCount,losers:n},e.log.unshift(`${t.name} 获胜,赢 ${r} 分`)}function j(e){for(let t of L(e)){if(e.deck.length===0)break;t.hand.push(...P(e,1)),t.handCount=t.hand.length,F(t.hand)}}function M(){let e=[];for(let t of p)for(let n of m)e.push({id:`${t}-${n}`,suit:t,rank:n});return e.push({id:`SJ`,suit:`Joker`,rank:`SJ`}),e.push({id:`BJ`,suit:`Joker`,rank:`BJ`}),e.map(G)}function N(e,t){let n=[...e];for(let e=n.length-1;e>0;--e){let r=Math.floor(t()*(e+1));[n[e],n[r]]=[n[r],n[e]]}return n}function P(e,t){return e.deck.splice(0,t)}function F(e){e.sort(H)}function I(e){return e.players.find(t=>t.seat===e.currentSeat)}function L(e){return R(e).filter(e=>e.hand.length>0)}function R(e){return[...e?.players||[]].sort((e,t)=>e.seat-t.seat)}function z(e){let t=L(e).map(e=>e.seat);e.currentSeat=t[(t.indexOf(e.currentSeat)+1)%t.length]}function B(e,t=0){if(e.length===0)return!1;let n=e[0].rank;return e.every(e=>e.rank===n)&&e.length+t>=2}function V(e){return U(e[0])}function H(e,t){return U(e)-U(t)||ge(e.suit)-ge(t.suit)}function U(e){return g.get(e.rank)||99}function W(e){return e.rank===`SJ`||e.rank===`BJ`}function ge(e){return{D:0,C:1,H:2,S:3,Joker:4}[e]||0}function _e(e){if(typeof e==`string`){let[t,n]=e.split(`-`);return O({id:e,suit:t,rank:n})}return O(e)}function G(e){return{id:e.id,suit:e.suit,rank:e.rank,label:K(e),color:ye(e)}}function K(e){return e.rank===`SJ`?`小王`:e.rank===`BJ`?`大王`:`${ve(e.suit)}${e.rank}`}function ve(e){return{S:`♠`,H:`♥`,C:`♣`,D:`♦`}[e]||``}function ye(e){return e.suit===`H`||e.suit===`D`||e.rank===`BJ`?`red`:`black`}function be(e){let t=e.resolvedValues?.length?`(${e.resolvedValues.map(xe).join(` `)})`:``;return`${{single:`单张`,pair:`对子`,straight:`顺子`,pairStraight:`连对`,bomb:e.pure?`纯炸弹`:`带王炸弹`}[e.type]}${t}`}function xe(e){return m.find(t=>g.get(t)===e)||String(e)}function Se(e){let t=m.findIndex(t=>g.get(t)===e);return t===-1||t>=m.length-1?null:g.get(m[t+1])}function Ce(e){return Math.floor(e()*6)+1}function q(e){let t=String(e||``).trim();return/^0x[a-fA-F0-9]{40}$/.test(t)?t.toLowerCase():``}function J(e){return String(e||`玩家`).trim().slice(0,16)||`玩家`}function Y(e){return String(e||``).trim().slice(0,4096)}var X={page:`_page_p7qf6_1`,headerActions:`_headerActions_p7qf6_7`,entry:`_entry_p7qf6_13`,entryBrand:`_entryBrand_p7qf6_23`,cardMark:`_cardMark_p7qf6_29`,entryPanel:`_entryPanel_p7qf6_59`,panel:`_panel_p7qf6_60`,handPanel:`_handPanel_p7qf6_61`,accountLine:`_accountLine_p7qf6_74`,scoreMeta:`_scoreMeta_p7qf6_75`,roomBar:`_roomBar_p7qf6_76`,badges:`_badges_p7qf6_77`,actions:`_actions_p7qf6_78`,joinForm:`_joinForm_p7qf6_98`,status:`_status_p7qf6_119`,gameGrid:`_gameGrid_p7qf6_125`,tablePanel:`_tablePanel_p7qf6_136`,seats:`_seats_p7qf6_170`,player:`_player_p7qf6_176`,active:`_active_p7qf6_193`,winner:`_winner_p7qf6_197`,avatar:`_avatar_p7qf6_201`,centerTable:`_centerTable_p7qf6_235`,deckBox:`_deckBox_p7qf6_242`,playedBox:`_playedBox_p7qf6_243`,playedCards:`_playedCards_p7qf6_271`,notice:`_notice_p7qf6_279`,resultDetail:`_resultDetail_p7qf6_287`,sidePanel:`_sidePanel_p7qf6_298`,scoreRow:`_scoreRow_p7qf6_323`,logPanel:`_logPanel_p7qf6_331`,hand:`_hand_p7qf6_61`,cardButton:`_cardButton_p7qf6_358`,picked:`_picked_p7qf6_368`,card:`_card_p7qf6_29`,red:`_red_p7qf6_399`,black:`_black_p7qf6_403`,small:`_small_p7qf6_407`,preview:`_preview_p7qf6_425`,valid:`_valid_p7qf6_448`},Z=n(),Q=`gandengyan`;function $(...e){return e.filter(Boolean).join(` `)}function we(e,t){return String(e||``).toLowerCase()===String(t||``).toLowerCase()}function Te(e,t){if(typeof window>`u`||!(`speechSynthesis`in window)||!e)return;window.speechSynthesis.cancel();let n=new SpeechSynthesisUtterance(e);n.lang=t,n.rate=1.1,window.speechSynthesis.speak(n)}function Ee(){let{t:e,locale:t}=oe(),n=d(e=>e.isDarkMode),r=d(e=>e.setIsDarkMode),a=d(e=>e.addToast),u=i(e=>e.initializeUser),[p,m]=(0,f.useState)(``),[h,g]=(0,f.useState)([]),[ce,_]=(0,f.useState)(!1),v=(0,f.useRef)(``),y=(0,f.useRef)(!1),b=ae({gameId:Q,onError:e=>a(e,`error`)});(0,f.useEffect)(()=>{u()},[u]),(0,f.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get(`room`)?.toUpperCase();e&&(m(e),v.current=e)},[]),(0,f.useEffect)(()=>{let t=v.current;!t||y.current||!b.isBackendReady||!b.userIdentity||(y.current=!0,v.current=``,b.joinRoom(t).then(t=>{t&&a(e(`game.toast.joinedRoom`),`success`)}))},[b.isBackendReady,b.userIdentity,b.joinRoom,a,e]),(0,f.useEffect)(()=>{if(!b.roomCode)return;let e=`/game/gandengyan?room=${b.roomCode}`;`${window.location.pathname}${window.location.search}`!==e&&window.history.replaceState(null,``,e)},[b.roomCode]);let x=(0,f.useMemo)(()=>re(b.messages,b.roomCode?{gameId:Q,roomCode:b.roomCode}:{gameId:Q}),[b.messages,b.roomCode]),S=(0,f.useMemo)(()=>ie(b.messages,{gameId:Q,roomCode:b.roomCode}),[b.messages,b.roomCode]),C=S?.payload?.state,w=C?.players.find(e=>we(e.address,b.userIdentity?.address)),T=we(C?.ownerAddress||x.hostAddress,b.userIdentity?.address),E=C?.status===`playing`&&C.currentSeat===w?.seat,D=(0,f.useMemo)(()=>h.map(e=>w?.hand.find(t=>t.id===e)).filter(Boolean),[h,w]),O=(0,f.useMemo)(()=>he(D),[D]),k=b.roomCode&&typeof window<`u`?`${window.location.origin}/game/gandengyan?room=${b.roomCode}`:``,A=(0,f.useRef)(-1),j=(0,f.useRef)(!1);(0,f.useEffect)(()=>{g([])},[C?.seq]),(0,f.useEffect)(()=>{if(!C)return;let n=C.seq;if(A.current<0){A.current=n;return}if(n!==A.current&&(A.current=n,C.status!==`finished`&&(j.current=!1),C.status===`finished`&&C.winnerSeat!==null)){j.current||(j.current=!0,Te(e(`game.gandengyan.speech.gameOver`),t));return}},[t,C?.seq,e]),(0,f.useEffect)(()=>{if(!T||!b.roomCode||!b.userIdentity||S||x.players.length===0)return;let e=le({roomCode:b.roomCode,ownerAddress:b.userIdentity.address,ownerName:b.userIdentity.displayName||b.userIdentity.username,players:x.players});b.sendRoomEvent(`room:state`,{state:e,seq:e.seq})},[b,T,S,x.players]),(0,f.useEffect)(()=>{if(!C||!T||C.status!==`lobby`)return;let e=ue(C,x.players);e&&e.players.length!==C.players.length&&b.sendRoomEvent(`room:state`,{state:e,seq:e.seq})},[b,T,x.players,C]);let M=(0,f.useRef)(0),N=(0,f.useMemo)(()=>b.roomEvents.filter(e=>e.event?.event===`player:leave`),[b.roomEvents]);(0,f.useEffect)(()=>{if(N.length<=M.current)return;let t=N.slice(M.current);M.current=N.length;for(let n of t)a(e(`game.toast.playerLeft`,{player:n.event?.payload?.player?.name||e(`game.player`)}),`info`)},[N,a,e]),(0,f.useEffect)(()=>{if(!C||!T||C.status!==`playing`)return;let e=new Set(x.players.map(e=>e.address.toLowerCase())),t=C.players.find(t=>!e.has(t.address.toLowerCase()));if(!t)return;let n=me(C,t.address);n&&L(n)},[b,T,x.players,C]);async function P(){await b.createRoom()&&a(e(`game.toast.roomCreated`),`success`)}async function F(t){t.preventDefault(),await b.joinRoom(p)&&a(e(`game.toast.joinedRoom`),`success`)}async function I(){k&&(await navigator.clipboard.writeText(k),_(!0),setTimeout(()=>_(!1),1400))}async function L(e){await b.sendRoomEvent(`room:state`,{state:e,seq:e.seq})}async function R(){if(!(!C||!T))try{await L(de(C))}catch(t){a(t instanceof Error?t.message:e(`game.zhajinhua.error.startFailed`),`error`)}}async function z(){await R()}async function B(){if(!C||!b.userIdentity)return;let t=fe(C,b.userIdentity.address,h);if(!t.ok){a(t.error||e(`game.gandengyan.error.playFailed`),`error`);return}await L(t.state)}async function V(){if(!C||!b.userIdentity)return;let t=pe(C,b.userIdentity.address);if(!t.ok){a(t.error||e(`game.gandengyan.error.actionFailed`),`error`);return}await L(t.state)}function H(e){g(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])}return(0,Z.jsx)(ee,{sidebar:({closeSidebar:e})=>(0,Z.jsx)(ne,{activeGame:`gandengyan`,closeSidebar:e}),headerTitle:(0,Z.jsx)(`h2`,{className:`header-title`,children:e(`game.gandengyan.title`)}),headerRight:(0,Z.jsxs)(`div`,{className:X.headerActions,children:[C&&(0,Z.jsxs)(`button`,{className:`btn btn-sm`,onClick:I,children:[(0,Z.jsx)(c,{size:14}),e(ce?`common.copied`:`game.action.shareRoom`)]}),(0,Z.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>r(!n),title:e(`common.theme.toggle`),children:n?(0,Z.jsx)(s,{size:16}):(0,Z.jsx)(o,{size:16})})]}),children:(0,Z.jsx)(`main`,{className:X.page,children:C?(0,Z.jsxs)(`section`,{className:X.gameGrid,children:[(0,Z.jsxs)(`div`,{className:X.tablePanel,children:[(0,Z.jsxs)(`div`,{className:X.roomBar,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`strong`,{translate:`no`,children:e(`game.roomLabel`,{room:C.id})}),(0,Z.jsx)(`span`,{children:C.status===`lobby`?e(`game.status.waitingStart`):C.status===`finished`?e(`game.status.finished`):e(`game.status.playing`)})]}),(0,Z.jsx)(`div`,{className:X.badges,children:(0,Z.jsx)(`span`,{children:b.connected?e(`game.status.online`):e(`game.status.offline`)})})]}),(0,Z.jsx)(`div`,{className:X.seats,children:C.players.map(t=>(0,Z.jsx)(De,{player:t,active:C.currentSeat===t.seat,winner:C.winnerSeat===t.seat,relation:ke(w,t,C.players.length,e)},t.seat))}),(0,Z.jsxs)(`div`,{className:X.centerTable,children:[(0,Z.jsxs)(`div`,{className:X.deckBox,children:[(0,Z.jsx)(`span`,{children:e(`game.gandengyan.deck`)}),(0,Z.jsx)(`strong`,{children:C.deckCount})]}),(0,Z.jsx)(`div`,{className:X.playedBox,children:C.table?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`strong`,{children:e(`game.gandengyan.tablePlay`,{player:C.table.playerName,combo:C.table.combo?.label||e(`game.card`)})}),(0,Z.jsx)(`div`,{className:X.playedCards,children:C.table.cards.map(e=>(0,Z.jsx)(Oe,{card:e,small:!0},e.id))})]}):(0,Z.jsx)(`span`,{children:e(`game.gandengyan.waitingLead`)})}),(0,Z.jsxs)(`div`,{className:X.deckBox,children:[(0,Z.jsx)(`span`,{children:e(`game.gandengyan.baseScore`)}),(0,Z.jsx)(`strong`,{children:C.baseScore})]})]}),(0,Z.jsx)(`div`,{className:X.notice,children:C.status===`finished`?C.roundResult?(0,Z.jsxs)(`div`,{className:X.resultDetail,children:[(0,Z.jsxs)(`p`,{children:[e(`game.gandengyan.result.winnerGain`,{player:C.roundResult.winnerName,score:C.roundResult.winnerGain}),C.roundResult.bombCount>0&&e(`game.gandengyan.result.bombCount`,{count:C.roundResult.bombCount})]}),C.roundResult.losers.map(t=>(0,Z.jsx)(`p`,{children:t.sealed?e(`game.gandengyan.result.sealedLoss`,{player:t.name,loss:20}):e(`game.gandengyan.result.cardsLeftLoss`,{player:t.name,cards:t.cardsLeft,loss:t.loss})},t.seat))]}):e(`game.gandengyan.result.winner`,{player:C.players.find(e=>e.seat===C.winnerSeat)?.name||e(`game.player`)}):E?e(`game.gandengyan.status.yourTurn`):e(`game.zhajinhua.status.waitingPlayer`,{player:C.players.find(e=>e.seat===C.currentSeat)?.name||e(`game.player`)})})]}),(0,Z.jsxs)(`aside`,{className:X.sidePanel,children:[(0,Z.jsxs)(`section`,{className:X.panel,children:[(0,Z.jsx)(`h3`,{children:e(`game.gandengyan.roundPanel`)}),T&&C.status===`lobby`&&(0,Z.jsxs)(`button`,{className:`btn btn-primary`,disabled:C.players.length<2,onClick:R,children:[(0,Z.jsx)(l,{size:16}),e(`game.action.startRound`)]}),T&&C.status===`finished`&&(0,Z.jsxs)(`button`,{className:`btn btn-primary`,onClick:z,children:[(0,Z.jsx)(se,{size:16}),e(`game.action.nextRound`)]}),!T&&(0,Z.jsx)(`p`,{className:X.status,children:e(`game.waitingHost`)})]}),(0,Z.jsxs)(`section`,{className:X.panel,children:[(0,Z.jsx)(`h3`,{children:e(`game.gandengyan.score`)}),(0,Z.jsxs)(`div`,{className:X.scoreMeta,children:[(0,Z.jsx)(`span`,{children:e(`game.gandengyan.bombCount`,{count:C.bombCount})}),(0,Z.jsx)(`span`,{children:e(`game.gandengyan.discardCount`,{count:C.discardCount})})]}),C.players.map(e=>(0,Z.jsxs)(`div`,{className:X.scoreRow,children:[(0,Z.jsx)(`span`,{translate:`no`,children:e.name}),(0,Z.jsx)(`strong`,{children:e.score})]},e.seat))]}),(0,Z.jsxs)(`section`,{className:$(X.panel,X.logPanel),children:[(0,Z.jsx)(`h3`,{children:e(`game.gandengyan.log`)}),C.log.map((e,t)=>(0,Z.jsx)(`p`,{translate:`no`,children:e},`${e}-${t}`))]})]}),(0,Z.jsxs)(`div`,{className:X.handPanel,children:[(0,Z.jsx)(De,{player:w,active:E,winner:C.winnerSeat===w?.seat}),(0,Z.jsx)(`div`,{className:X.hand,children:w?.hand.map(e=>(0,Z.jsx)(`button`,{className:$(X.cardButton,h.includes(e.id)&&X.picked),onClick:()=>H(e.id),children:(0,Z.jsx)(Oe,{card:e})},e.id))}),(0,Z.jsxs)(`div`,{className:X.actions,children:[(0,Z.jsxs)(`div`,{className:$(X.preview,O&&X.valid),children:[(0,Z.jsx)(`strong`,{children:O?O.label:h.length?e(`game.gandengyan.invalidCombo`):e(`game.gandengyan.selectCards`)}),(0,Z.jsx)(`span`,{children:D.map(e=>e.label).join(` `)||e(`game.gandengyan.jokerOrderHint`)})]}),(0,Z.jsxs)(`button`,{className:`btn btn-primary`,disabled:!E||h.length===0||!O,onClick:B,children:[(0,Z.jsx)(te,{size:16}),e(`game.gandengyan.action.play`)]}),(0,Z.jsx)(`button`,{className:`btn`,disabled:!E||!C.table,onClick:V,children:e(`game.gandengyan.action.pass`)})]})]})]}):(0,Z.jsxs)(`section`,{className:X.entry,children:[(0,Z.jsxs)(`div`,{className:X.entryBrand,children:[(0,Z.jsx)(`div`,{className:X.cardMark,children:e(`game.gandengyan.mark`)}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h1`,{children:e(`game.gandengyan.hero.title`)}),(0,Z.jsx)(`p`,{children:e(`game.hero.desc`)})]})]}),(0,Z.jsxs)(`div`,{className:X.entryPanel,children:[(0,Z.jsxs)(`div`,{className:X.accountLine,children:[(0,Z.jsx)(`span`,{children:e(`game.currentAccount`)}),(0,Z.jsx)(`strong`,{translate:`no`,children:b.userIdentity?.displayName||e(`web3.notSignedIn`)})]}),(0,Z.jsxs)(`button`,{className:`btn btn-primary`,disabled:b.joining,onClick:P,children:[(0,Z.jsx)(l,{size:16}),e(`game.action.createRoom`)]}),(0,Z.jsxs)(`form`,{onSubmit:F,className:X.joinForm,children:[(0,Z.jsxs)(`label`,{children:[e(`game.roomCode`),(0,Z.jsx)(`input`,{value:p,maxLength:8,onChange:e=>m(e.target.value.toUpperCase()),placeholder:e(`game.roomCode.placeholder`)})]}),(0,Z.jsx)(`button`,{className:`btn`,disabled:b.joining||!p,children:e(`game.action.joinRoom`)})]}),(0,Z.jsx)(`p`,{className:X.status,children:b.isBackendReady?e(`game.status.nodeConnected`):e(`game.status.nodeConnecting`)})]})]})})})}function De({player:e,active:t,winner:n,relation:r=``}){let{t:i}=oe();return e?(0,Z.jsxs)(`div`,{className:$(X.player,t&&X.active,n&&X.winner),children:[(0,Z.jsx)(`div`,{className:X.avatar,translate:`no`,children:(0,Z.jsx)(`img`,{src:u(e.address,e.avatar),alt:``})}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`strong`,{translate:`no`,children:e.name}),(0,Z.jsxs)(`span`,{children:[r,r?` · `:``,i(`game.gandengyan.handCount`,{count:e.handCount})]})]})]}):null}function Oe({card:e,small:t=!1}){return(0,Z.jsxs)(`div`,{className:$(X.card,X[e.color],t&&X.small),children:[(0,Z.jsx)(`span`,{children:e.label}),(0,Z.jsx)(`i`,{children:e.suit===`Joker`?`*`:e.label.slice(0,1)})]})}function ke(e,t,n,r){if(!e)return r(`game.gandengyan.position.seat`,{seat:t.seat+1});let i=(t.seat-e.seat+n)%n;return i===0?r(`game.gandengyan.position.me`):n===2?r(`game.gandengyan.position.opponent`):n===3?r(i===1?`game.gandengyan.position.nextOpponent`:`game.gandengyan.position.prevOpponent`):n===4?r(i===1?`game.gandengyan.position.nextOpponent`:i===2?`game.gandengyan.position.partner`:`game.gandengyan.position.prevOpponent`):i%2==0?r(`game.gandengyan.position.seatPartner`,{seat:t.seat+1}):r(`game.gandengyan.position.seatOpponent`,{seat:t.seat+1})}var Ae=a(`/game/gandengyan/`)({component:Ee});export{Ae as Route};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{g as r,t as i,v as a}from"./userStore-q0BBZsIV.js";import{a as o,i as s,r as ee}from"./LanguageToggle-HAJ3D6Ne.js";import{n as c,t as l}from"./folder-BGJCjyba.js";import{t as te}from"./copy-5aEv78Eq.js";import{t as u}from"./download-Bhqn6hL1.js";import{t as d}from"./file-text-CFfvvCnM.js";import{a as f,i as ne,n as p,r as re,t as ie}from"./FilePreviewOverlay-DTBZt89J.js";import{t as ae}from"./loader-ByMmV2_4.js";import{r as oe,t as se}from"./AppShell-oF8wPXde.js";import{t as m}from"./music-Btrhub6z.js";import{t as ce}from"./OpenSidebarButton-D3JRO-Hh.js";import{t as le}from"./search-CbzMyENy.js";import{t as ue}from"./trash-2-zdhWec_U.js";import{t as de}from"./upload-BD23c5Pz.js";import{A as h,F as fe,R as pe,S as me,b as he,d as g,k as ge,l as _e,m as _,u as ve,v}from"./index--p9MKNEl.js";import{t as ye}from"./format-CR8oUWq6.js";import{t as be}from"./SidebarAccount-8_hQAYXx.js";import{n as y,r as xe,t as Se}from"./downloadValidation-eInMiVSX.js";var Ce=r(`arrow-up-down`,[[`path`,{d:`m21 16-4 4-4-4`,key:`f6ql7i`}],[`path`,{d:`M17 20V4`,key:`1ejh1v`}],[`path`,{d:`m3 8 4-4 4 4`,key:`11wl7u`}],[`path`,{d:`M7 4v16`,key:`1glfcx`}]]),we=r(`files`,[[`path`,{d:`M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8`,key:`14sh0y`}],[`path`,{d:`M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706z`,key:`1970lx`}],[`path`,{d:`M5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1`,key:`l4dndm`}]]),Te=r(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),Ee=r(`star`,[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]),b=t(e(),1);function De(e={}){let t=e.timeout??2e3,[n,r]=(0,b.useState)(null),[i,a]=(0,b.useState)(!1),o=(0,b.useRef)(null);(0,b.useEffect)(()=>()=>{window.clearTimeout(o.current)},[]);let s=e=>{window.clearTimeout(o.current),o.current=window.setTimeout(()=>a(!1),t),a(e)};return{copy:e=>{`clipboard`in navigator?navigator.clipboard.writeText(e).then(()=>{r(null),s(!0)}).catch(e=>r(e)):r(Error(`useClipboard: navigator.clipboard is not supported`))},reset:()=>{a(!1),r(null),window.clearTimeout(o.current)},error:n,copied:i}}var x=n();function S(e){let t=e.lastIndexOf(`/`);return t===-1?{folder:``,name:e}:{folder:e.substring(0,t),name:e.substring(t+1)}}function Oe({file:e,isSelected:t,onSelect:n,onPreview:r}){let i=p(e.fileName),a=(0,x.jsx)(d,{size:24,color:`#fff`});return i===`image`?a=(0,x.jsx)(ne,{size:24,color:`#fff`}):i===`video`?a=(0,x.jsx)(f,{size:24,color:`#fff`}):i===`audio`&&(a=(0,x.jsx)(m,{size:24,color:`#fff`})),(0,x.jsxs)(`div`,{"data-id":e.cid,onClick:()=>n(e.cid),onDoubleClick:()=>r(e),className:`card ${t?`selected`:``}`,children:[(0,x.jsx)(`div`,{className:`card-icon ${e.starred?`starred`:`file`}`,children:a}),(0,x.jsx)(`p`,{className:`card-name`,translate:`no`,children:S(e.fileName).name})]})}function ke({folder:e,onClick:t}){return(0,x.jsxs)(`div`,{onClick:t,className:`card`,children:[(0,x.jsx)(`div`,{className:`card-icon folder`,children:(0,x.jsx)(l,{size:28,color:`#fff`})}),(0,x.jsx)(`p`,{className:`card-name`,translate:`no`,children:e.name})]})}function Ae(e,t){return e?[{path:``,name:t},...e.split(`/`).filter(Boolean).map((e,t,n)=>({path:n.slice(0,t+1).join(`/`),name:e}))]:[]}function je({items:e,allFolders:t,currentPath:n,onMove:r,onClose:i}){let[a,o]=(0,b.useState)(``),[s,ee]=(0,b.useState)(n),{t:c}=pe(),te=Ae(a,c(`move.root`));function u(){r(a||s.trim())}let d=t.filter(e=>{if(a===``)return!e.path.includes(`/`);let t=a+`/`;return e.path.startsWith(t)?!e.path.substring(t.length).includes(`/`):!1});return(0,x.jsx)(g,{onClose:i,children:(0,x.jsxs)(`div`,{className:`move-modal`,onClick:e=>e.stopPropagation(),children:[(0,x.jsxs)(`div`,{className:`modal-header`,children:[(0,x.jsx)(`h3`,{children:c(`move.title`)}),(0,x.jsx)(`button`,{type:`button`,onClick:i,className:`btn btn-icon`,children:(0,x.jsx)(h,{size:18})})]}),(0,x.jsx)(`p`,{className:`move-modal-desc`,children:c(`move.selectedCount`,{count:e.length})}),(0,x.jsx)(`div`,{className:`move-new-folder`,children:(0,x.jsx)(`input`,{type:`text`,className:`input`,value:s,onChange:e=>ee(e.target.value),placeholder:c(`move.pathPlaceholder`),translate:`no`})}),(0,x.jsx)(`p`,{className:`move-modal-hint`,children:c(`move.pathExample`)}),(0,x.jsx)(`div`,{className:`move-breadcrumb`,children:te.map((e,t)=>(0,x.jsxs)(b.Fragment,{children:[t>0&&(0,x.jsx)(`span`,{className:`breadcrumb-separator`,children:`/`}),(0,x.jsx)(`button`,{type:`button`,onClick:()=>{o(e.path),ee(e.path)},className:`move-breadcrumb-btn ${a===e.path&&!s?`active`:``}`,children:(0,x.jsx)(`span`,{translate:e.path?`no`:`yes`,children:e.name})})]},e.path))}),(0,x.jsxs)(`div`,{className:`move-folder-list`,children:[d.length===0&&(0,x.jsx)(`p`,{className:`move-modal-empty`,children:c(`move.noSubfolders`)}),d.map(e=>(0,x.jsxs)(`button`,{type:`button`,onClick:()=>o(e.path),className:`move-folder-item ${a===e.path&&!s?`selected`:``}`,children:[(0,x.jsx)(l,{size:16}),(0,x.jsx)(`span`,{translate:`no`,children:e.name})]},e.path))]}),(0,x.jsxs)(`div`,{className:`modal-actions`,children:[(0,x.jsx)(`button`,{type:`button`,onClick:i,className:`btn btn-secondary`,children:c(`common.cancel`)}),(0,x.jsx)(`button`,{type:`button`,onClick:u,className:`btn btn-primary`,children:c(`move.action`)})]})]})})}function C(e){return S(e)}function Me(e){let t=new Set;return e.forEach(e=>{let{folder:n}=C(e.fileName),r=n.split(`/`).filter(Boolean),i=``;for(let e of r)i+=(i?`/`:``)+e,t.add(i)}),[...t].sort()}function w(e,t){let n=t?t+`/`:``;return e.filter(e=>{let t=e.toLowerCase().startsWith(n.toLowerCase()),r=e.substring(n.length);return t&&!r.includes(`/`)}).map(e=>({name:e.substring(n.length),path:e}))}function Ne(e,t,n){return{folders:w(t,n),files:e.filter(e=>C(e.fileName).folder===n)}}function Pe(e,t){return e?[{path:``,name:t},...e.split(`/`).filter(Boolean).map((e,t,n)=>({path:n.slice(0,t+1).join(`/`),name:e}))]:[]}function Fe(){let e=_(e=>e.isDarkMode),t=_(e=>e.setIsDarkMode),n=_(e=>e.addToast),r=_(e=>e.hasBackend),a=_(e=>e.openConnectModal),l=i(e=>e.identity),f=i(e=>e.openLoginModal),ne=ge(),[m,S]=(0,b.useState)([]),[Ae,w]=(0,b.useState)([]),[Fe,T]=(0,b.useState)(null),[E,Ie]=(0,b.useState)(`all`),[Le,Re]=(0,b.useState)(!1),[D,O]=(0,b.useState)([]),[ze,k]=(0,b.useState)(null),[A,j]=(0,b.useState)(null),[Be,Ve]=oe(!1),[He,Ue]=(0,b.useState)(``),[M,N]=(0,b.useState)(null),[P,We]=(0,b.useState)(!1),[Ge,F]=(0,b.useState)([]),[Ke,I]=oe(!1),[L,R]=(0,b.useState)(``),{copy:qe,copied:Je}=De({timeout:2e3}),[Ye,Xe]=oe(!1),[z,B]=(0,b.useState)(null),[V,Ze]=(0,b.useState)(null),[Qe,$e]=(0,b.useState)(!1),{t:H,formatDate:et}=pe(),U=r===!0,tt=e=>e?et(e):``,W=Fe||``,nt=Me(m),{folders:rt,files:it}=Ne(m,nt,W);function G(){return U?!0:(a(),!1)}function K(){return l?!0:(f(),!1)}let at=L?m.filter(e=>C(e.fileName).name.toLowerCase().includes(L.toLowerCase())):it,q=async()=>{if(!U||!l){S([]);return}try{S(await y.listPublishedFiles()||[])}catch{S([])}},J=async()=>{if(!U||!l){w([]);return}try{w(await y.listTrashFiles()||[])}catch{w([])}},ot=e=>{O(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},st=async e=>{if(K()&&G())try{await y.restoreTrashFile(e),n(H(`app.toast.restored`),`success`),q(),J()}catch(e){n(await v(e,H(`app.toast.restoreFailed`)),`error`)}},ct=async()=>{K()&&G()&&B({title:H(`app.clearTrash.title`),message:H(`app.clearTrash.message`),confirmText:H(`app.clear`),danger:!0,onConfirm:async()=>{B(null);try{await y.emptyTrash(),n(H(`app.toast.trashEmptied`),`success`),J()}catch(e){n(await v(e,H(`app.toast.emptyFailed`)),`error`)}}})},lt=async e=>{if(K()&&G())try{let t=await y.toggleStar(e);S(n=>n.map(n=>n.cid===e?{...n,starred:t.starred}:n)),n(t.starred?H(`app.toast.favorited`):H(`app.toast.unfavorited`),`success`)}catch(e){n(await v(e,H(`app.toast.actionFailed`)),`error`)}},ut=async()=>{if(!K()||!G())return;let e=E===`trash`;B({title:H(e?`app.permanentDelete`:`app.batchDelete`),message:H(e?`app.deleteSelectedPermanent`:`app.deleteSelected`,{count:D.length}),confirmText:H(e?`app.permanentDelete`:`app.delete`),danger:!0,onConfirm:async()=>{B(null);try{for(let t of D)e?await y.permanentDeleteTrashFile(t):t.startsWith(`__`)||await y.deletePublishedFile(t);O([]),n(H(e?`app.toast.deletedPermanently`:`app.toast.deleted`),`success`),q(),J()}catch(e){n(await v(e,H(`app.toast.deleteFailed`)),`error`)}}})},dt=async e=>{if(K()&&G())try{for(let t of D){let n=m.find(e=>e.cid===t);if(!n)continue;let{name:r}=C(n.fileName),i=e?`${e}/${r}`:r;n.fileName!==i&&await y.moveFile(t,i)}O([]),Xe.close(),n(H(`app.toast.moved`),`success`),q()}catch(e){n(await v(e,H(`app.toast.moveFailed`)),`error`)}},ft=e=>{let t=!!e.path,r=t?e.name:C(e.fileName).name;Ze({title:H(t?`app.renameFolder`:`app.renameFile`),placeholder:H(`app.enterNewName`),defaultValue:r,confirmText:H(`app.rename`),onConfirm:async i=>{if(i!==r&&K()&&G()){$e(!0);try{if(t){let t=e.path.lastIndexOf(`/`),r=t===-1?``:e.path.substring(0,t),a=r?`${r}/${i}`:i;await y.renameFolder(e.path,a),n(H(`app.toast.renamed`),`success`),q(),Q(a)}else{let{folder:t}=C(e.fileName),r=t?`${t}/${i}`:i;await y.moveFile(e.cid,r),n(H(`app.toast.renamed`),`success`),q()}Ze(null)}catch(e){n(await v(e,H(`app.toast.renameFailed`)),`error`)}finally{$e(!1)}}}})},pt=async e=>{if(!l){f(),n(H(`app.toast.signInBeforePublish`),`warning`);return}if(!G())return;let t=W?W+`/`:``,r=[];for(let i of Array.from(e)){let e=t+i.name;if(m.some(t=>t.fileName===e)){n(H(`app.fileAlreadyExists`,{fileName:i.name}),`warning`);continue}let a=`upload_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,o={id:a,fileName:i.name,progress:0,type:`upload`,status:`uploading`};r.push(o),F(e=>[...e,o]),r.length>0&&I.open();try{(await y.publishFile(i,e)).alreadyExists?(F(e=>e.map(e=>e.id===a?{...e,status:`completed`}:e)),n(H(`app.fileAlreadyExists`,{fileName:i.name}),`warning`)):(F(e=>e.map(e=>e.id===a?{...e,progress:100,status:`completed`}:e)),n(H(`app.fileAddedLocal`,{fileName:i.name}),`success`))}catch(e){F(e=>e.map(e=>e.id===a?{...e,status:`error`}:e)),n(await v(e,H(`app.publishFailedWithFile`,{fileName:i.name})),`error`)}}setTimeout(()=>{F(e=>e.filter(e=>e.status!==`completed`&&e.status!==`error`&&e.status!==`cancelled`))},3e3),q()},mt=()=>{qe(`most://${A.cid}?filename=${encodeURIComponent(A.fileName)}`)},[Y,ht]=(0,b.useState)(!1),X=He.trim(),Z=M?.status===`success`&&M.link===X,gt=()=>{Ve.close(),N(null)},_t=e=>{Ue(e.target.value),N(null)},vt=async()=>{let e=Se(X,H);if(e){N({status:`error`,link:X,message:e}),n(e,`warning`);return}if(!(P||Y)&&K()&&G()){We(!0),N(null);try{let e=await y.checkDownload(X);N({status:`success`,link:X,message:e.alreadyExists?H(`app.fileAlreadyLocal`,{fileName:e.fileName}):H(`app.fileAvailable`,{fileName:e.fileName})}),n(e.alreadyExists?H(`app.fileAlreadyExists`,{fileName:e.fileName}):H(`app.toast.checkPassed`),e.alreadyExists?`warning`:`success`)}catch(e){let t=await xe(e);N({status:`error`,link:X,message:t}),n(t,`error`)}finally{We(!1)}}},yt=async()=>{if(!l){f(),n(H(`app.toast.signInBeforeDownload`),`warning`);return}if(!G())return;let e=Se(X,H);if(e){n(e,`warning`);return}if(!Z){n(H(`app.toast.checkLinkFirst`),`warning`);return}if(!Y){ht(!0);try{let e=await y.downloadFile(X);if(Ue(``),N(null),gt(),e.alreadyExists)n(H(`app.fileAlreadyExists`,{fileName:e.fileName}),`warning`);else{let t={id:e.taskId,fileName:H(`app.downloadFallbackName`),progress:0,type:`download`,status:`downloading`};F(e=>[...e,t]),I.open(),n(H(`app.toast.downloadStarted`),`info`)}}catch(e){n(await v(e,H(`app.toast.downloadFailed`)),`error`)}finally{ht(!1)}}},bt=async e=>{if(K()&&G()&&e.type===`download`&&e.status===`downloading`){F(t=>t.map(t=>t.id===e.id?{...t,status:`cancelling`}:t));try{await y.cancelDownload(e.id)}catch(t){F(t=>t.map(t=>t.id===e.id?{...t,status:`downloading`}:t)),n(await v(t,H(`app.toast.cancelFailed`)),`error`)}}},xt=async e=>{if(K()&&G()){if(e.localAvailable===!1){n(H(`app.toast.fileNotLocal`),`warning`);return}try{let t=await fetch(y.getFileDownloadUrl(e.cid),{headers:await he(`GET`,`/api/files/${e.cid}/download`)});if(!t.ok)throw Error(H(`app.toast.getFileFailed`));let r=await t.blob(),i=window.showSaveFilePicker;if(i){let t=await(await i({suggestedName:e.fileName})).createWritable();await t.write(r),await t.close(),n(H(`app.toast.fileSaved`),`success`)}else{let t=URL.createObjectURL(r),i=document.createElement(`a`);i.href=t,i.download=e.fileName,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(t),n(H(`app.toast.fileDownloaded`),`success`)}}catch(e){e.name!==`AbortError`&&n(H(`app.saveFailedWithError`,{error:e.message}),`error`)}}},St=async e=>{if(K()&&G())try{n(H(`app.toast.startPullLocal`),`info`),await y.cacheFile(e.cid),n(H(`app.toast.pulledAndSeeding`),`success`),q()}catch(e){n(await v(e,H(`app.toast.pullFailed`)),`error`)}},Q=e=>{T(e||null),O([])};(0,b.useEffect)(()=>{if(r!==!0)return;let e=null,t=!1;return(async()=>{if(e=new WebSocket(await me(`/ws`)),t){e.close();return}e.onmessage=e=>{try{let{event:t,data:r}=JSON.parse(e.data);if(t===`publish:success`||t===`download:success`){q();let e=r.taskId||r.fileName;F(t=>t.map(t=>t.id===e||t.fileName===r.fileName?{...t,progress:100,status:`completed`}:t)),t===`download:success`&&(r.alreadyExists?n(H(`app.fileAlreadyExists`,{fileName:r.fileName}),`warning`):n(H(`app.fileDownloadCompleted`,{fileName:r.fileName}),`success`),setTimeout(()=>{F(t=>t.filter(t=>!(t.id===e&&t.status===`completed`)))},3e3))}t===`publish:progress`&&F(e=>e.map(e=>{if(r.file&&e.fileName===r.file&&e.type===`upload`){let t=50;return r.stage===`calculating-cid`?t=25:r.stage===`uploading`?t=75:r.stage===`complete`&&(t=100),{...e,progress:t}}return e})),t===`download:progress`&&F(e=>e.map(e=>e.id===r.taskId?{...e,progress:r.percent||0,loaded:r.loaded,total:r.total}:e)),t===`download:error`&&(F(e=>e.map(e=>e.id===r.taskId?{...e,status:`error`}:e)),n(H(`app.downloadFailedWithError`,{error:r.error}),`error`)),t===`download:status`&&F(e=>e.map(e=>e.id===r.taskId?{...e,fileName:r.file||e.fileName}:e)),t===`download:cancelled`&&(F(e=>e.map(e=>e.id===r.taskId?{...e,status:`cancelled`}:e)),n(H(`app.toast.downloadCancelled`),`warning`)),t===`user:metadata:updated`&&(q(),J())}catch(e){console.warn(`[App WS] Failed to parse message:`,e.message)}}})(),()=>{t=!0,e?.close()}},[r,l?.address]),(0,b.useEffect)(()=>{if(r===!0&&l){q(),J();return}r===!1&&(S([]),w([]))},[r,l?.address]),(0,b.useEffect)(()=>{l||(O([]),k(null),j(null),Ue(``),N(null),F([]),R(``),T(null),Ie(`all`))},[l?.address]);let Ct=H(E===`all`?`app.nav.local`:E===`starred`?`app.nav.favorites`:`app.nav.trash`),$=E===`all`?at:E===`starred`?m.filter(e=>e.starred&&C(e.fileName).name.toLowerCase().includes(L.toLowerCase())):Ae.filter(e=>C(e.fileName).name.toLowerCase().includes(L.toLowerCase())),wt=E===`starred`?[]:rt.filter(e=>e.name.toLowerCase().includes(L.toLowerCase())),Tt=Pe(W,H(`app.allContent`));return(0,x.jsxs)(se,{sidebar:({closeSidebar:e})=>(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`button`,{type:`button`,className:`sidebar-header sidebar-header-link`,onClick:ne,children:[(0,x.jsx)(fe,{size:18}),(0,x.jsx)(`h1`,{children:`MOST PEOPLE`})]}),(0,x.jsx)(`nav`,{className:`sidebar-nav`,children:[{id:`all`,icon:(0,x.jsx)(we,{size:18}),label:H(`app.nav.local`)},{id:`starred`,icon:(0,x.jsx)(Ee,{size:18}),label:H(`app.nav.favorites`)},{id:`trash`,icon:(0,x.jsx)(ue,{size:18}),label:H(`app.nav.trash`)}].map(t=>(0,x.jsxs)(`button`,{onClick:()=>{Ie(t.id),T(null),O([]),R(``),e()},className:`sidebar-nav-btn ${E===t.id?`active`:``}`,children:[t.icon,(0,x.jsx)(`span`,{children:t.label})]},t.id))}),(0,x.jsx)(be,{})]}),headerTitle:(0,x.jsx)(`h2`,{className:`header-title`,children:Ct}),headerRight:(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`search-box`,children:[(0,x.jsx)(le,{size:14}),(0,x.jsx)(`input`,{type:`text`,value:L,onChange:e=>R(e.target.value),placeholder:H(`app.search.placeholder`)}),L&&(0,x.jsx)(`button`,{onClick:()=>R(``),children:(0,x.jsx)(h,{size:12})})]}),E===`trash`&&Ae.length>0&&(0,x.jsx)(`button`,{onClick:ct,className:`btn btn-sm btn-empty-trash`,children:H(`app.emptyTrash`)}),(0,x.jsx)(`button`,{onClick:()=>I.open(),className:`btn btn-icon`,children:(0,x.jsx)(Ce,{size:16})}),(0,x.jsx)(`button`,{onClick:()=>t(!e),className:`btn btn-icon`,children:e?(0,x.jsx)(ee,{size:16}):(0,x.jsx)(s,{size:16})})]}),children:[E===`all`&&(0,x.jsxs)(`div`,{className:`action-grid`,children:[(0,x.jsxs)(`div`,{className:`action-card upload ${Le?`drag-over`:``}`,onDragOver:e=>{e.preventDefault(),Re(!0)},onDragLeave:()=>Re(!1),onDrop:e=>{e.preventDefault(),Re(!1),!(!K()||!G())&&pt(e.dataTransfer.files)},children:[(0,x.jsx)(`input`,{type:`file`,multiple:!0,onClick:e=>{(!K()||!G())&&e.preventDefault()},onChange:e=>pt(e.target.files),className:`action-card-input`}),(0,x.jsx)(de,{size:20,className:`action-grid-icon`}),(0,x.jsx)(`p`,{children:H(`app.publishFile`)})]}),(0,x.jsxs)(`div`,{className:`action-card action-card-download`,onClick:()=>{!K()||!G()||Ve.open()},children:[(0,x.jsx)(u,{size:20,className:`action-grid-icon`}),(0,x.jsx)(`p`,{children:H(`app.downloadFile`)})]})]}),E===`all`&&(0,x.jsx)(`div`,{className:`breadcrumb`,children:W?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`button`,{onClick:()=>Q(``),children:H(`app.allContent`)}),Tt.slice(1).map((e,t)=>(0,x.jsxs)(b.Fragment,{children:[(0,x.jsx)(c,{size:12}),(0,x.jsx)(`button`,{onClick:()=>Q(e.path),className:t===Tt.length-2?`current`:``,children:(0,x.jsx)(`span`,{translate:`no`,children:e.name})}),t===Tt.length-2&&(0,x.jsx)(`button`,{onClick:()=>ft(e),className:`breadcrumb-edit-btn`,children:(0,x.jsx)(re,{size:12})})]},e.path))]}):null}),(0,x.jsxs)(`div`,{className:`content-grid`,children:[E===`trash`&&($.length===0?(0,x.jsxs)(`div`,{className:`empty-state app-empty-state`,children:[(0,x.jsx)(`p`,{children:H(L?`app.noMatches`:`app.trashEmpty`)}),(0,x.jsx)(ce,{label:H(`app.openFileNavigation`)})]}):(0,x.jsx)(`div`,{className:`file-grid`,children:$.map(e=>(0,x.jsxs)(`div`,{onClick:()=>O(t=>t.includes(e.cid)?t.filter(t=>t!==e.cid):[...t,e.cid]),onDoubleClick:()=>st(e.cid),className:`card ${D.includes(e.cid)?`selected`:``}`,children:[(0,x.jsx)(`div`,{className:`card-icon trash`,children:(0,x.jsx)(d,{size:24,color:`#fff`})}),(0,x.jsx)(`p`,{className:`card-name`,translate:`no`,children:C(e.fileName).name}),(0,x.jsx)(`p`,{className:`card-date`,children:H(`app.deletedOn`,{date:tt(e.deletedAt)})})]},e.cid))})),E!==`trash`&&($.length===0&&wt.length===0?(0,x.jsxs)(`div`,{className:`empty-state app-empty-state`,children:[(0,x.jsx)(`p`,{children:H(L?`app.noMatches`:E===`starred`?`app.noFavorites`:`app.noLocalFiles`)}),(0,x.jsx)(ce,{label:H(`app.openFileNavigation`)})]}):(0,x.jsxs)(`div`,{className:`file-grid`,children:[wt.map(e=>(0,x.jsx)(ke,{folder:e,onClick:()=>Q(e.path)},e.path)),$.map(e=>(0,x.jsx)(Oe,{file:e,isSelected:D.includes(e.cid),onSelect:ot,onPreview:e=>{if(e.localAvailable===!1){n(H(`app.toast.fileNotLocal`),`warning`);return}k({...e,subtype:p(e.fileName)})}},e.cid))]}))]}),z&&(0,x.jsx)(ve,{title:z.title,message:z.message,confirmText:z.confirmText,danger:z.danger,onConfirm:z.onConfirm,onClose:()=>B(null)}),V&&(0,x.jsx)(_e,{title:V.title,placeholder:V.placeholder,defaultValue:V.defaultValue,confirmText:V.confirmText,isLoading:Qe,onConfirm:V.onConfirm,onClose:()=>Ze(null)}),Ye&&(0,x.jsx)(je,{items:D.map(e=>m.find(t=>t.cid===e)).filter(Boolean),allFolders:nt.map(e=>({path:e,name:e.split(`/`).pop()})),currentPath:W,onMove:dt,onClose:()=>Xe.close()}),A&&(0,x.jsx)(g,{onClose:()=>j(null),children:(0,x.jsxs)(`div`,{className:`share-modal`,onClick:e=>e.stopPropagation(),children:[(0,x.jsxs)(`div`,{className:`modal-header`,children:[(0,x.jsx)(`h3`,{children:H(`app.shareLink`)}),(0,x.jsx)(`button`,{onClick:()=>j(null),className:`btn btn-icon`,children:(0,x.jsx)(h,{size:18})})]}),(0,x.jsxs)(`div`,{className:`share-link-box`,children:[(0,x.jsx)(`div`,{className:`share-link-text`,translate:`no`,children:`most://${A.cid}?filename=${encodeURIComponent(A.fileName)}`}),(0,x.jsx)(`button`,{onClick:mt,className:`btn btn-circle btn-primary ${Je?`copied`:``}`,children:Je?(0,x.jsx)(o,{size:18}):(0,x.jsx)(te,{size:18})})]}),(0,x.jsx)(`div`,{className:`share-storage-note`,children:(0,x.jsx)(`span`,{children:H(`app.shareSeedNote`)})})]})}),Be&&(0,x.jsx)(g,{onClose:gt,children:(0,x.jsxs)(`div`,{className:`download-modal`,onClick:e=>e.stopPropagation(),children:[(0,x.jsxs)(`div`,{className:`modal-header`,children:[(0,x.jsx)(`h3`,{children:H(`app.downloadFile`)}),(0,x.jsx)(`button`,{onClick:gt,className:`btn btn-icon`,children:(0,x.jsx)(h,{size:18})})]}),(0,x.jsxs)(`div`,{className:`download-link-row`,children:[(0,x.jsx)(`input`,{type:`text`,className:`input`,value:He,onChange:_t,placeholder:H(`app.downloadLink.placeholder`)}),(0,x.jsxs)(`button`,{type:`button`,onClick:vt,disabled:!X||P||Y,className:`btn btn-secondary download-check-btn`,children:[P?(0,x.jsx)(ae,{size:14,className:`spin`}):Z?(0,x.jsx)(o,{size:14}):(0,x.jsx)(le,{size:14}),H(P?`app.checking`:Z?`app.passed`:`app.check`)]})]}),M&&(0,x.jsxs)(`div`,{className:`download-check-status ${M.status}`,children:[M.status===`success`?(0,x.jsx)(o,{size:14}):(0,x.jsx)(Te,{size:14}),(0,x.jsx)(`span`,{children:M.message})]}),(0,x.jsxs)(`button`,{onClick:yt,disabled:!Z||Y||P,className:`btn btn-info btn-full`,children:[Y?(0,x.jsx)(ae,{size:14,className:`spin`}):(0,x.jsx)(u,{size:14}),H(Y?`app.downloading`:`app.startDownload`)]})]})}),ze&&(0,x.jsx)(ie,{item:ze,isBackendReady:U,getFileDownloadUrl:y.getFileDownloadUrl,onClose:()=>k(null)}),D.length>0&&(0,x.jsxs)(`div`,{className:`batch-bar`,children:[(0,x.jsx)(`span`,{className:`batch-info`,children:H(`app.selectedItems`,{count:D.length})}),(0,x.jsx)(`button`,{onClick:()=>O([]),className:`batch-dismiss`,children:(0,x.jsx)(h,{size:16})}),(0,x.jsx)(`div`,{className:`batch-divider`}),E===`trash`?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`button`,{onClick:async()=>{K()&&G()&&(await Promise.all(D.map(e=>y.restoreTrashFile(e))),O([]),n(H(`app.toast.restored`),`success`),q(),J())},className:`btn btn-sm`,children:H(`app.restore`)}),(0,x.jsx)(`button`,{onClick:ut,className:`btn btn-sm btn-danger`,children:H(`app.permanentDelete`)})]}):(0,x.jsxs)(x.Fragment,{children:[D.length===1&&(()=>{let e=m.find(e=>e.cid===D[0]);return e&&p(e.fileName)!==`file`})()&&(0,x.jsx)(`button`,{onClick:()=>{let e=m.find(e=>e.cid===D[0]);if(e){if(e.localAvailable===!1){n(H(`app.toast.fileNotLocal`),`warning`);return}let t=p(e.fileName);k({...e,subtype:t})}},className:`btn btn-sm`,children:H(`app.preview`)}),(0,x.jsx)(`button`,{onClick:()=>{let e=D.some(e=>{let t=m.find(t=>t.cid===e);return t&&!t.starred});D.forEach(t=>{let n=m.find(e=>e.cid===t);n&&(e?!n.starred:n.starred)&<(t)})},className:`btn btn-sm btn-star`,children:H(`app.favorite`)}),D.length===1&&(0,x.jsx)(`button`,{onClick:()=>{let e=m.find(e=>e.cid===D[0]);e&&ft(e)},className:`btn btn-sm`,children:H(`app.rename`)}),(0,x.jsx)(`button`,{onClick:()=>Xe.open(),className:`btn btn-sm btn-move`,children:H(`app.move`)}),(0,x.jsx)(`button`,{onClick:ut,className:`btn btn-sm btn-danger`,children:H(`app.delete`)}),D.length===1&&(()=>{let e=m.find(e=>e.cid===D[0]);return e&&e.localAvailable===!1})()&&(0,x.jsx)(`button`,{onClick:()=>{let e=m.find(e=>e.cid===D[0]);e&&St(e)},className:`btn btn-sm`,children:H(`app.pullToLocal`)}),D.length===1&&(0,x.jsx)(`button`,{onClick:()=>j(m.find(e=>e.cid===D[0])),className:`btn btn-sm`,children:H(`app.share`)}),D.length===1&&(0,x.jsx)(`button`,{onClick:()=>{let e=m.find(e=>e.cid===D[0]);e&&xt(e)},className:`btn btn-sm`,children:H(`app.saveAs`)})]})]}),Ke&&(0,x.jsx)(g,{onClose:()=>I.close(),children:(0,x.jsxs)(`div`,{className:`transfer-modal`,onClick:e=>e.stopPropagation(),children:[(0,x.jsxs)(`div`,{className:`modal-header`,children:[(0,x.jsx)(`h3`,{children:H(`app.transfers`)}),(0,x.jsx)(`button`,{onClick:()=>I.close(),className:`btn btn-icon`,children:(0,x.jsx)(h,{size:18})})]}),Ge.length===0?(0,x.jsx)(`div`,{className:`empty-transfer`,children:H(`app.noTransfers`)}):Ge.map(e=>(0,x.jsxs)(`div`,{className:`transfer-item`,children:[(0,x.jsxs)(`div`,{className:`transfer-item-header`,children:[e.type===`upload`?(0,x.jsx)(de,{size:14}):(0,x.jsx)(u,{size:14}),(0,x.jsx)(`span`,{className:`transfer-item-name`,translate:`no`,children:e.fileName}),e.status===`downloading`&&e.type===`download`&&(0,x.jsx)(`button`,{onClick:()=>bt(e),className:`transfer-item-cancel`,children:(0,x.jsx)(h,{size:14})})]}),(0,x.jsxs)(`div`,{className:`transfer-progress-row`,children:[(0,x.jsx)(`progress`,{className:`transfer-progress-meter ${e.type===`download`?`download`:``} ${e.status===`error`?`error`:``} ${e.status===`cancelled`?`cancelled`:``}`,value:Math.max(0,Math.min(100,e.progress)),max:100,"aria-label":H(`app.transferProgress`,{fileName:e.fileName})}),(0,x.jsx)(`span`,{className:`transfer-progress-text`,children:e.status===`completed`?H(`app.completed`):e.status===`error`?H(`app.failed`):e.status===`cancelled`?H(`app.cancelled`):e.status===`cancelling`?H(`app.cancelling`):e.loaded&&e.total?`${ye(e.loaded)}/${ye(e.total)}`:`${e.progress}%`})]})]},e.id))]})})]})}var T=a(`/app/`)({component:Fe});export{T as Route};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{
|
|
1
|
+
import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{b as r,g as i,v as a}from"./userStore-q0BBZsIV.js";import{t as o}from"./arrow-right-mNO53HQi.js";import{a as s}from"./LanguageToggle-HAJ3D6Ne.js";import{t as c}from"./download-Bhqn6hL1.js";import{t as l}from"./external-link-CNR21yFA.js";import{t as u}from"./hard-drive-4vHpA5kz.js";import{t as d}from"./message-square-Eu86zZup.js";import{t as f}from"./notebook-pen-CfdFgaDE.js";import{t as p}from"./wallet-DmZMdK9A.js";import{R as m,f as h,j as g,m as _}from"./index--p9MKNEl.js";import{t as v}from"./MarketingLayout-CapVVXTP.js";var y=i(`arrow-up-right`,[[`path`,{d:`M7 7h10v10`,key:`1tivn9`}],[`path`,{d:`M7 17 17 7`,key:`1vkiza`}]]),b=i(`folder-open`,[[`path`,{d:`m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2`,key:`usdka0`}]]),x=i(`gamepad-2`,[[`line`,{x1:`6`,x2:`10`,y1:`11`,y2:`11`,key:`1gktln`}],[`line`,{x1:`8`,x2:`8`,y1:`9`,y2:`13`,key:`qnk9ow`}],[`line`,{x1:`15`,x2:`15.01`,y1:`12`,y2:`12`,key:`krot7o`}],[`line`,{x1:`18`,x2:`18.01`,y1:`10`,y2:`10`,key:`1lcuu1`}],[`path`,{d:`M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z`,key:`mfqc10`}]]),S=t(e(),1),C=n(),w=[{id:`app`,titleKey:`portal.feature.app.title`,subtitleKey:`portal.feature.app.subtitle`,icon:(0,C.jsx)(b,{size:28}),path:`/app/`,requiresBackend:!0,heroKey:`portal.feature.app.hero`,descKey:`portal.feature.app.desc`,featureKeys:[`portal.feature.app.bullet.localIdentity`,`portal.feature.app.bullet.hyperswarm`,`portal.feature.app.bullet.largeFiles`,`portal.feature.app.bullet.cid`,`portal.feature.app.bullet.seedAfterDownload`,`portal.feature.app.bullet.noCloud`,`portal.feature.app.bullet.desktop`,`portal.feature.app.bullet.openSource`],steps:[{num:`1`,titleKey:`portal.feature.app.step.download.title`,descKey:`portal.feature.app.step.download.desc`,link:`/download/`,linkTextKey:`portal.feature.app.step.download.link`,hideInDesktopClient:!0},{num:`2`,titleKey:`portal.feature.app.step.install.title`,descKey:`portal.feature.app.step.install.desc`,hideInDesktopClient:!0},{num:`3`,titleKey:`portal.feature.app.step.share.title`,descKey:`portal.feature.app.step.share.desc`}]},{id:`chat`,titleKey:`portal.feature.chat.title`,subtitleKey:`portal.feature.chat.subtitle`,icon:(0,C.jsx)(d,{size:28}),path:`/chat/`,requiresBackend:!0,heroKey:`portal.feature.chat.hero`,descKey:`portal.feature.chat.desc`,featureKeys:[`portal.feature.chat.bullet.encrypted`,`portal.feature.chat.bullet.identity`,`portal.feature.chat.bullet.sync`,`portal.feature.chat.bullet.offline`,`portal.feature.chat.bullet.noAccount`],steps:[{num:`1`,titleKey:`portal.feature.chat.step.download.title`,descKey:`portal.feature.chat.step.download.desc`,link:`/download/`,linkTextKey:`portal.feature.chat.step.download.link`,hideInDesktopClient:!0},{num:`2`,titleKey:`portal.feature.chat.step.create.title`,descKey:`portal.feature.chat.step.create.desc`},{num:`3`,titleKey:`portal.feature.chat.step.send.title`,descKey:`portal.feature.chat.step.send.desc`}]},{id:`note`,titleKey:`portal.feature.note.title`,subtitleKey:`portal.feature.note.subtitle`,icon:(0,C.jsx)(f,{size:28}),path:`/note/`,requiresBackend:!1,heroKey:`portal.feature.note.hero`,descKey:`portal.feature.note.desc`,featureKeys:[`portal.feature.note.bullet.markdown`,`portal.feature.note.bullet.privacy`,`portal.feature.note.bullet.folders`,`portal.feature.note.bullet.web3`,`portal.feature.note.bullet.backup`,`portal.feature.note.bullet.independent`],steps:[{num:`1`,titleKey:`portal.feature.note.step.account.title`,descKey:`portal.feature.note.step.account.desc`},{num:`2`,titleKey:`portal.feature.note.step.create.title`,descKey:`portal.feature.note.step.create.desc`},{num:`3`,titleKey:`portal.feature.note.step.backup.title`,descKey:`portal.feature.note.step.backup.desc`}]},{id:`gandengyan`,titleKey:`portal.feature.game.title`,subtitleKey:`portal.feature.game.subtitle`,icon:(0,C.jsx)(x,{size:28}),path:`/game/gandengyan/`,requiresBackend:!0,heroKey:`portal.feature.game.hero`,descKey:`portal.feature.game.desc`,featureKeys:[`portal.feature.game.bullet.account`,`portal.feature.game.bullet.channel`,`portal.feature.game.bullet.link`,`portal.feature.game.bullet.rules`,`portal.feature.game.bullet.maintain`],steps:[{num:`1`,titleKey:`portal.feature.game.step.login.title`,descKey:`portal.feature.game.step.login.desc`},{num:`2`,titleKey:`portal.feature.game.step.create.title`,descKey:`portal.feature.game.step.create.desc`},{num:`3`,titleKey:`portal.feature.game.step.test.title`,descKey:`portal.feature.game.step.test.desc`}]},{id:`web3`,titleKey:`portal.feature.web3.title`,subtitleKey:`portal.feature.web3.subtitle`,icon:(0,C.jsx)(p,{size:28}),path:`/web3/`,requiresBackend:!1,heroKey:`portal.feature.web3.hero`,descKey:`portal.feature.web3.desc`,featureKeys:[`portal.feature.web3.bullet.frontend`,`portal.feature.web3.bullet.keys`,`portal.feature.web3.bullet.mnemonic`,`portal.feature.web3.bullet.eth`,`portal.feature.web3.bullet.pem`,`portal.feature.web3.bullet.qr`],steps:[{num:`1`,titleKey:`portal.feature.web3.step.username.title`,descKey:`portal.feature.web3.step.username.desc`},{num:`2`,titleKey:`portal.feature.web3.step.keys.title`,descKey:`portal.feature.web3.step.keys.desc`},{num:`3`,titleKey:`portal.feature.web3.step.export.title`,descKey:`portal.feature.web3.step.export.desc`}]}];function T(){let e=_(e=>e.hasBackend),t=_(e=>e.openConnectModal),[n,i]=(0,S.useState)(`app`),{t:a}=m(),d=h(),f=w.find(e=>e.id===n)||w[0],p=a(f.titleKey),v=f.steps.filter(e=>!(d&&e.hideInDesktopClient));return(0,C.jsxs)(`div`,{className:`portal-page`,children:[(0,C.jsx)(`section`,{className:`portal-hero`,children:(0,C.jsxs)(`div`,{className:`mkt-container`,children:[(0,C.jsx)(`h1`,{className:`portal-hero-title`,children:a(`common.brand`)}),(0,C.jsx)(`p`,{className:`portal-hero-subtitle`,children:a(`portal.hero.subtitle`)})]})}),(0,C.jsx)(`section`,{className:`portal-cards-section`,children:(0,C.jsxs)(`div`,{className:`mkt-container`,children:[(0,C.jsx)(`div`,{className:`portal-cards`,children:w.map(t=>{let o=n===t.id,s=t.requiresBackend,c=s?e===!0?`connected`:e===!1?`disconnected`:`checking`:`none`,l=a(t.titleKey);return(0,C.jsxs)(`button`,{className:`portal-card ${o?`active`:``}`,onClick:()=>i(t.id),children:[(0,C.jsx)(r,{to:t.path,className:`btn btn-icon portal-card-open-btn`,onClick:e=>e.stopPropagation(),title:a(`portal.openFeature`,{title:l}),children:(0,C.jsx)(y,{size:16})}),(0,C.jsx)(`div`,{className:`portal-card-icon`,children:t.icon}),(0,C.jsx)(`div`,{className:`portal-card-title`,children:l}),(0,C.jsx)(`div`,{className:`portal-card-subtitle`,children:a(t.subtitleKey)}),s?(0,C.jsxs)(`div`,{className:`ui-badge portal-card-status ${c}`,children:[c===`checking`&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`span`,{className:`status-dot checking`}),a(`common.status.checking`)]}),c===`connected`&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`span`,{className:`status-dot connected`}),a(`common.status.connected`)]}),c===`disconnected`&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`span`,{className:`status-dot disconnected`}),a(`common.status.needsConnection`)]})]}):(0,C.jsxs)(`div`,{className:`ui-badge portal-card-status ready`,children:[(0,C.jsx)(`span`,{className:`status-dot ready`}),a(`common.status.ready`)]})]},t.id)})}),(0,C.jsxs)(`div`,{className:`portal-node-actions`,"aria-label":a(`portal.nodeEntry`),children:[(0,C.jsxs)(`button`,{onClick:t,className:`btn btn-secondary`,children:[(0,C.jsx)(g,{size:16}),a(`portal.webConnectNode`)]}),(0,C.jsxs)(r,{to:`/admin/`,className:`btn btn-secondary`,children:[(0,C.jsx)(u,{size:16}),a(`portal.nodeAdmin`)]})]})]})}),(0,C.jsx)(`section`,{className:`portal-marketing`,children:(0,C.jsx)(`div`,{className:`mkt-container`,children:(0,C.jsxs)(`div`,{className:`portal-marketing-inner`,children:[(0,C.jsxs)(`div`,{className:`portal-marketing-header`,children:[(0,C.jsx)(`h2`,{children:a(f.heroKey)}),(0,C.jsx)(`p`,{children:a(f.descKey)})]}),(0,C.jsx)(`div`,{className:`portal-marketing-features`,children:f.featureKeys.map(e=>(0,C.jsxs)(`div`,{className:`portal-feature-item`,children:[(0,C.jsx)(`span`,{className:`portal-feature-icon`,children:(0,C.jsx)(s,{size:14,strokeWidth:3})}),(0,C.jsx)(`span`,{children:a(e)})]},e))}),(0,C.jsx)(`div`,{className:`portal-marketing-steps`,children:v.map((e,t)=>(0,C.jsxs)(`div`,{className:`portal-step`,children:[(0,C.jsx)(`span`,{className:`portal-step-num`,children:t+1}),(0,C.jsxs)(`div`,{className:`portal-step-content`,children:[(0,C.jsx)(`strong`,{children:a(e.titleKey)}),(0,C.jsx)(`p`,{children:a(e.descKey)}),e.code&&(0,C.jsx)(`code`,{className:`portal-step-code`,translate:`no`,children:e.code}),e.link&&e.linkTextKey&&(0,C.jsx)(`p`,{className:`portal-step-link`,children:(0,C.jsxs)(r,{to:e.link,children:[a(e.linkTextKey),` `,(0,C.jsx)(l,{size:12})]})})]})]},e.num))}),(0,C.jsxs)(`div`,{className:`portal-actions`,children:[(0,C.jsxs)(r,{to:f.path,className:`btn btn-primary`,children:[a(`portal.enterFeature`,{title:p}),(0,C.jsx)(o,{size:16})]}),f.requiresBackend&&e===!1&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`button`,{onClick:t,className:`btn btn-secondary`,children:[(0,C.jsx)(g,{size:16}),a(`portal.webConnectNode`)]}),!d&&(0,C.jsxs)(r,{to:`/download/`,className:`btn btn-secondary`,children:[(0,C.jsx)(c,{size:16}),a(`nav.downloadClient`)]})]})]})]})})})]})}function E(){return(0,C.jsx)(v,{children:(0,C.jsx)(T,{})})}var D=a(`/`)({component:E});export{D as Route};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{n as e,o as t,r as n,t as r}from"./jsx-runtime-Bt-cYkS5.js";import{g as i,v as a}from"./userStore-q0BBZsIV.js";import{t as o}from"./download-Bhqn6hL1.js";import{t as s}from"./file-text-CFfvvCnM.js";import{t as c}from"./hard-drive-4vHpA5kz.js";import{t as l}from"./refresh-cw--JB8k6mH.js";import{t as u}from"./save-DN4eprSt.js";import{t as d}from"./shield-check-c0labdRH.js";import{t as f}from"./trash-2-zdhWec_U.js";import{t as p}from"./triangle-alert-CO_5uXy2.js";import{t as m}from"./wifi-CVqaPDcv.js";import{C as h,P as g,R as _,S as v,h as y,j as b,m as x,v as S}from"./index--p9MKNEl.js";import{t as C}from"./dayjs.min-Dcc0B6Je.js";import{t as ee}from"./MarketingHeader-B3vYocUz.js";import{t as w}from"./format-CR8oUWq6.js";var te=i(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),ne=i(`clipboard`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}]]),T=i(`database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]),E=n(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_relativeTime=r()})(e,(function(){return function(e,t,n){e||={};var r=t.prototype,i={future:`in %s`,past:`%s ago`,s:`a few seconds`,m:`a minute`,mm:`%d minutes`,h:`an hour`,hh:`%d hours`,d:`a day`,dd:`%d days`,M:`a month`,MM:`%d months`,y:`a year`,yy:`%d years`};function a(e,t,n,i){return r.fromToBase(e,t,n,i)}n.en.relativeTime=i,r.fromToBase=function(t,r,a,o,s){for(var c,l,u,d=a.$locale().relativeTime||i,f=e.thresholds||[{l:`s`,r:44,d:`second`},{l:`m`,r:89},{l:`mm`,r:44,d:`minute`},{l:`h`,r:89},{l:`hh`,r:21,d:`hour`},{l:`d`,r:35},{l:`dd`,r:25,d:`day`},{l:`M`,r:45},{l:`MM`,r:10,d:`month`},{l:`y`,r:17},{l:`yy`,d:`year`}],p=f.length,m=0;m<p;m+=1){var h=f[m];h.d&&(c=o?n(t).diff(a,h.d,!0):a.diff(t,h.d,!0));var g=(e.rounding||Math.round)(Math.abs(c));if(u=c>0,g<=h.r||!h.r){g<=1&&m>0&&(h=f[m-1]);var _=d[h.l];s&&(g=s(``+g)),l=typeof _==`string`?_.replace(`%d`,g):_(g,r,h.l,u);break}}if(r)return l;var v=u?d.future:d.past;return typeof v==`function`?v(l):v.replace(`%s`,l)},r.to=function(e,t){return a(e,t,this,!0)},r.from=function(e,t){return a(e,t,this)};var o=function(e){return e.$u?n.utc():n()};r.toNow=function(e){return this.to(o(this),e)},r.fromNow=function(e){return this.from(o(this),e)}}}))})),D=n(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r(C()):typeof define==`function`&&define.amd?define([`dayjs`],r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_locale_zh_cn=r(n.dayjs)})(e,(function(e){function t(e){return e&&typeof e==`object`&&`default`in e?e:{default:e}}var n=t(e),r={name:`zh-cn`,weekdays:`星期日_星期一_星期二_星期三_星期四_星期五_星期六`.split(`_`),weekdaysShort:`周日_周一_周二_周三_周四_周五_周六`.split(`_`),weekdaysMin:`日_一_二_三_四_五_六`.split(`_`),months:`一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月`.split(`_`),monthsShort:`1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月`.split(`_`),ordinal:function(e,t){return t===`W`?e+`周`:e+`日`},weekStart:1,yearStart:4,formats:{LT:`HH:mm`,LTS:`HH:mm:ss`,L:`YYYY/MM/DD`,LL:`YYYY年M月D日`,LLL:`YYYY年M月D日Ah点mm分`,LLLL:`YYYY年M月D日ddddAh点mm分`,l:`YYYY/M/D`,ll:`YYYY年M月D日`,lll:`YYYY年M月D日 HH:mm`,llll:`YYYY年M月D日dddd HH:mm`},relativeTime:{future:`%s内`,past:`%s前`,s:`几秒`,m:`1 分钟`,mm:`%d 分钟`,h:`1 小时`,hh:`%d 小时`,d:`1 天`,dd:`%d 天`,M:`1 个月`,MM:`%d 个月`,y:`1 年`,yy:`%d 年`},meridiem:function(e,t){var n=100*e+t;return n<600?`凌晨`:n<900?`早上`:n<1100?`上午`:n<1300?`中午`:n<1800?`下午`:`晚上`}};return n.default.locale(r,null,!0),r}))})),O=n(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r(C()):typeof define==`function`&&define.amd?define([`dayjs`],r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_locale_zh_tw=r(n.dayjs)})(e,(function(e){function t(e){return e&&typeof e==`object`&&`default`in e?e:{default:e}}var n=t(e),r={name:`zh-tw`,weekdays:`星期日_星期一_星期二_星期三_星期四_星期五_星期六`.split(`_`),weekdaysShort:`週日_週一_週二_週三_週四_週五_週六`.split(`_`),weekdaysMin:`日_一_二_三_四_五_六`.split(`_`),months:`一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月`.split(`_`),monthsShort:`1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月`.split(`_`),ordinal:function(e,t){return t===`W`?e+`週`:e+`日`},formats:{LT:`HH:mm`,LTS:`HH:mm:ss`,L:`YYYY/MM/DD`,LL:`YYYY年M月D日`,LLL:`YYYY年M月D日 HH:mm`,LLLL:`YYYY年M月D日dddd HH:mm`,l:`YYYY/M/D`,ll:`YYYY年M月D日`,lll:`YYYY年M月D日 HH:mm`,llll:`YYYY年M月D日dddd HH:mm`},relativeTime:{future:`%s內`,past:`%s前`,s:`幾秒`,m:`1 分鐘`,mm:`%d 分鐘`,h:`1 小時`,hh:`%d 小時`,d:`1 天`,dd:`%d 天`,M:`1 個月`,MM:`%d 個月`,y:`1 年`,yy:`%d 年`},meridiem:function(e,t){var n=100*e+t;return n<600?`凌晨`:n<900?`早上`:n<1100?`上午`:n<1300?`中午`:n<1800?`下午`:`晚上`}};return n.default.locale(r,null,!0),r}))})),k=t(e(),1),A=t(C(),1),j=t(E(),1);D(),O();var M=r();A.default.extend(j.default);var re=null;function ie(e,t){let n=Math.max(0,Number(e)||0),r=Math.floor(n/86400),i=Math.floor(n%86400/3600),a=Math.floor(n%3600/60);return r>0?t(`admin.uptime.daysHours`,{days:r,hours:i}):i>0?t(`admin.uptime.hoursMinutes`,{hours:i,minutes:a}):t(`admin.uptime.minutes`,{minutes:a})}function N(e){return Number.isFinite(e)?String(Math.round(e/(1024*1024*1024)*100)/100):`0`}function P(e){let t=Number(e);return!Number.isFinite(t)||t<0?0:Math.round(t*1024*1024*1024)}function ae(e){return Array.from(new Set(String(e||``).split(/[\n,]/).map(e=>e.trim()).filter(Boolean)))}function F(e,t=12,n=8){return e?e.length<=t+n+3?e:`${e.slice(0,t)}...${e.slice(-n)}`:`-`}function oe(e,t){switch(e.seedStatus){case`queued`:return t(`admin.seedStatus.queued`);case`joining`:return t(`admin.seedStatus.joining`);case`active`:return t(`admin.seedStatus.active`);case`paused`:return t(`admin.seedStatus.paused`);case`error`:return e.seedError?t(`admin.seedStatus.errorWithMessage`,{message:e.seedError}):t(`admin.seedStatus.error`);default:return e.joined?t(`admin.seedStatus.active`):t(`admin.seedStatus.notJoined`)}}function I(e){return{"zh-CN":`zh-cn`,"zh-TW":`zh-tw`,en:`en`}[e]}function se(e,t,n){if(!e)return t(`admin.time.never`);let r=(0,A.default)(e);if(!r.isValid())return t(`admin.time.never`);if(r.isAfter((0,A.default)()))return t(`admin.time.justNow`);let i=I(n);return r.locale(i).from((0,A.default)().locale(i))}var ce=[{labelKey:`admin.seedHelp.active.label`,tone:`active`,descKey:`admin.seedHelp.active.desc`},{labelKey:`admin.seedHelp.pending.label`,tone:`pending`,descKey:`admin.seedHelp.pending.desc`},{labelKey:`admin.seedHelp.paused.label`,tone:`muted`,descKey:`admin.seedHelp.paused.desc`},{labelKey:`admin.seedHelp.error.label`,tone:`error`,descKey:`admin.seedHelp.error.desc`}],le=[{value:`all`,labelKey:`admin.logFilter.all`},{value:`join`,labelKey:`admin.logFilter.join`},{value:`pull`,labelKey:`admin.logFilter.pull`},{value:`verify`,labelKey:`admin.logFilter.verify`},{value:`serve`,labelKey:`admin.logFilter.serve`},{value:`error`,labelKey:`admin.logFilter.error`}],L={join:[`join`,`joined`,`topic`],pull:[`pull`,`p2p`],verify:[`verify`,`verified`,`integrity`,`download:success`],serve:[`seed`,`seeding`,`holding`,`publish:success`,`topic:joined`],error:[`error`,`failed`,`fail`]};function R(e){let t=``;try{t=JSON.stringify(e.data||{})}catch{}return[e.level,e.event,e.message,t].map(e=>String(e||``).toLowerCase()).join(` `)}function ue(e,t){let n=String(t||`all`).trim().toLowerCase();if(!n||n===`all`)return!0;let r=R(e);return n===`error`?e.level===`error`||L.error.some(e=>r.includes(e)):(L[n]||[n]).some(e=>r.includes(e))}function z(){let{t:e,locale:t,formatNumber:n,formatTime:r}=_(),i=x(e=>e.hasBackend),a=x(e=>e.addToast),[C,E]=(0,k.useState)(re),[D,O]=(0,k.useState)([]),[A,j]=(0,k.useState)(``),[I,L]=(0,k.useState)(!1),[R,z]=(0,k.useState)(!1),[B,V]=(0,k.useState)(!1),[H,de]=(0,k.useState)(`all`),[U,fe]=(0,k.useState)([]),[pe,W]=(0,k.useState)(``),[G,K]=(0,k.useState)({dataPath:``,capacityGiB:`100`,maxFileSizeGiB:`10`,remoteInvites:``}),q=i===!0;function J(){return q?!0:(a(e(i===null?`admin.toast.backendChecking`:`admin.toast.backendDisconnected`),`warning`),!1)}let me=(0,k.useMemo)(()=>!C||C.capacity.configuredBytes<=0?0:Math.min(100,Math.round(C.capacity.usedBytes/C.capacity.configuredBytes*100)),[C]),he=(0,k.useMemo)(()=>(C?.holdings||[]).slice(0,100),[C]),ge=Math.max(0,(C?.holdings.length||0)-100),Y=h(),X=!!Y&&!Y.includes(`localhost`)&&!Y.includes(`127.0.0.1`),Z=async()=>{if(!q)return!1;try{let e=await y.get(`/api/node/status`).json(),t=await y.get(`/api/node/config`).json();return E(e),K({dataPath:t.dataPath||e.dataPath||``,capacityGiB:N(t.capacityBytes),maxFileSizeGiB:N(t.maxFileSizeBytes),remoteInvites:(t.remoteInvites||[]).join(`
|
|
2
|
+
`)}),j(``),!0}catch(t){let n=await S(t,e(`admin.error.readStatus`));return j(n),a(n,`error`),!1}},_e=async()=>{J()&&await Z()&&a(e(`admin.toast.statusRefreshed`),`success`)},Q=async(e=H)=>{if(q)try{let t=new URLSearchParams({limit:`80`,filter:e});O((await y.get(`/api/node/logs?${t.toString()}`).json()).logs||[])}catch{}},$=async()=>{if(q)try{fe((await y.get(`/api/admin/users`).json()).users||[])}catch{}},ve=async()=>{if(J()){L(!0);try{await y.post(`/api/node/config`,{json:{dataPath:G.dataPath,capacityBytes:P(G.capacityGiB),maxFileSizeBytes:P(G.maxFileSizeGiB),remoteInvites:ae(G.remoteInvites)}}).json(),a(G.dataPath===(C?.dataPath||``)?e(`admin.toast.configSaved`):e(`admin.toast.configSavedRestart`),`success`),await Z(),await Q()}catch(t){let n=await S(t,e(`admin.error.saveConfig`));a(n,`error`),j(n)}finally{L(!1)}}},ye=async()=>{C?.nodeId&&(await navigator.clipboard.writeText(C.nodeId),a(e(`admin.toast.nodeIdCopied`),`success`))},be=async()=>{if(J()){z(!0);try{await y.delete(`/api/node/logs`).json(),O([]),a(e(`admin.toast.logsCleared`),`success`)}catch(t){let n=await S(t,e(`admin.error.clearLogs`));a(n,`error`),j(n)}finally{z(!1)}}},xe=async()=>{if(J()){V(!0);try{let t=await y.get(`/api/node/diagnostics`).json(),n=new Blob([JSON.stringify(t,null,2)],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`),o=new Date().toISOString().replace(/[:.]/g,`-`);i.href=r,i.download=`mostbox-diagnostics-${o}.json`,document.body.appendChild(i),i.click(),i.remove(),URL.revokeObjectURL(r),a(e(`admin.toast.diagnosticsExported`),`success`)}catch(t){let n=await S(t,e(`admin.error.exportDiagnostics`));a(n,`error`),j(n)}finally{V(!1)}}},Se=async t=>{if(J()&&window.confirm(e(`admin.confirm.clearUserData`,{address:`${t.slice(0,6)}...${t.slice(-4)}`}))){W(t);try{await y.delete(`/api/admin/users/${t}/data`).json(),a(e(`admin.toast.userDataCleared`),`success`),await $(),await Z()}catch(t){let n=await S(t,e(`admin.error.clearUserData`));a(n,`error`),j(n)}finally{W(``)}}};return(0,k.useEffect)(()=>{if(!q||X)return;Z(),Q(),$();let e=null,t=!1;return(async()=>{if(e=new WebSocket(await v(`/ws`)),t){e.close();return}e.onmessage=e=>{try{let t=JSON.parse(e.data);t.event===`node:status`&&E(t.data),t.event===`node:log`&&ue(t.data,H)&&O(e=>[t.data,...e].slice(0,80)),t.event===`node:logs:cleared`&&O([]),(t.event===`publish:success`||t.event===`download:success`||t.event===`network:status`)&&Z()}catch{}}})(),()=>{t=!0,e?.close()}},[q,X,H]),(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(ee,{}),(0,M.jsxs)(`main`,{className:`admin-page`,children:[(0,M.jsxs)(`header`,{className:`admin-topbar`,children:[(0,M.jsx)(`div`,{className:`admin-title-group`,children:(0,M.jsx)(`h1`,{children:e(`admin.title`)})}),(0,M.jsxs)(`div`,{className:`admin-topbar-actions`,children:[(0,M.jsxs)(`span`,{className:`admin-status-pill ${C?.status===`online`?`online`:``}`,children:[(0,M.jsx)(te,{size:14}),C?.status===`online`?e(`admin.status.online`):e(`admin.status.waiting`)]}),(0,M.jsxs)(`button`,{className:`btn btn-secondary`,onClick:_e,children:[(0,M.jsx)(l,{size:16}),e(`admin.action.refresh`)]})]})]}),i===!1&&(0,M.jsxs)(`section`,{className:`admin-panel admin-error`,children:[(0,M.jsx)(b,{size:20}),(0,M.jsx)(`span`,{children:e(`admin.error.localDaemonDisconnected`)})]}),X&&(0,M.jsxs)(`section`,{className:`admin-panel admin-error`,children:[(0,M.jsx)(p,{size:18}),(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`h2`,{children:e(`admin.remoteUnavailable.title`)}),(0,M.jsx)(`p`,{children:e(`admin.remoteUnavailable.desc`)})]})]}),!X&&A&&(0,M.jsxs)(`section`,{className:`admin-panel admin-error`,children:[(0,M.jsx)(s,{size:20}),(0,M.jsx)(`span`,{children:A})]}),!X&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`section`,{className:`admin-overview`,children:[(0,M.jsxs)(`div`,{className:`admin-metric`,children:[(0,M.jsx)(`div`,{className:`admin-metric-icon`,children:(0,M.jsx)(d,{size:18})}),(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`span`,{children:e(`admin.metric.nodeId`)}),(0,M.jsx)(`strong`,{translate:`no`,children:F(C?.nodeId||``)})]}),(0,M.jsx)(`button`,{className:`btn btn-icon admin-metric-action`,onClick:ye,"aria-label":e(`admin.action.copyNodeId`),children:(0,M.jsx)(ne,{size:15})})]}),(0,M.jsxs)(`div`,{className:`admin-metric`,children:[(0,M.jsx)(`div`,{className:`admin-metric-icon`,children:(0,M.jsx)(m,{size:18})}),(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`span`,{children:e(`admin.metric.connections`)}),(0,M.jsx)(`strong`,{children:C?e(`admin.metric.peers`,{count:C.network.peers}):`-`})]})]}),(0,M.jsxs)(`div`,{className:`admin-metric`,children:[(0,M.jsx)(`div`,{className:`admin-metric-icon`,children:(0,M.jsx)(c,{size:18})}),(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`span`,{children:e(`admin.metric.capacity`)}),(0,M.jsxs)(`strong`,{children:[me,`%`]})]})]}),(0,M.jsxs)(`div`,{className:`admin-metric`,children:[(0,M.jsx)(`div`,{className:`admin-metric-icon`,children:(0,M.jsx)(b,{size:18})}),(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`span`,{children:e(`admin.metric.uptime`)}),(0,M.jsx)(`strong`,{children:C?ie(C.uptimeSeconds,e):`-`})]})]})]}),(0,M.jsxs)(`section`,{className:`admin-grid`,children:[(0,M.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,M.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,M.jsx)(`div`,{children:(0,M.jsx)(`h2`,{children:e(`admin.nodeStatus.title`)})}),(0,M.jsx)(g,{size:18})]}),(0,M.jsxs)(`div`,{className:`admin-status-grid`,children:[(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`span`,{children:e(`admin.nodeStatus.version`)}),(0,M.jsx)(`strong`,{translate:`no`,children:C?.version||`-`})]}),(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`span`,{children:e(`admin.nodeStatus.listen`)}),(0,M.jsx)(`strong`,{translate:`no`,children:C?`${C.host}:${C.port}`:`-`})]}),(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`span`,{children:e(`admin.nodeStatus.dataPath`)}),(0,M.jsx)(`strong`,{translate:`no`,children:C?.dataPath||`-`})]})]}),(0,M.jsx)(`div`,{className:`admin-address-list`,children:(C?.listen.addresses||[]).map(e=>(0,M.jsxs)(`span`,{translate:`no`,children:[e.label,`: `,e.ip,`:`,C?.port]},`${e.type}-${e.ip}`))})]}),(0,M.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,M.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,M.jsx)(`div`,{children:(0,M.jsx)(`h2`,{children:e(`admin.userData.title`)})}),(0,M.jsx)(T,{size:18})]}),(0,M.jsxs)(`div`,{className:`admin-table`,children:[(0,M.jsxs)(`div`,{className:`admin-table-row admin-table-head`,children:[(0,M.jsx)(`span`,{children:e(`admin.userData.user`)}),(0,M.jsx)(`span`,{children:e(`admin.userData.files`)}),(0,M.jsx)(`span`,{children:e(`admin.userData.trash`)}),(0,M.jsx)(`span`,{children:e(`admin.userData.actions`)})]}),U.map(t=>(0,M.jsxs)(`div`,{className:`admin-table-row`,children:[(0,M.jsx)(`span`,{title:t.address,translate:`no`,children:F(t.address)}),(0,M.jsx)(`span`,{children:n(t.fileCount)}),(0,M.jsx)(`span`,{children:n(t.trashCount)}),(0,M.jsx)(`span`,{children:(0,M.jsxs)(`button`,{className:`btn btn-ghost`,onClick:()=>Se(t.address),disabled:pe===t.address,children:[(0,M.jsx)(f,{size:16}),e(`admin.action.clear`)]})})]},t.address)),U.length===0&&(0,M.jsx)(`div`,{className:`admin-empty-row`,children:e(`admin.userData.empty`)})]})]}),(0,M.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,M.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,M.jsx)(`div`,{children:(0,M.jsx)(`h2`,{children:e(`admin.settings.title`)})}),(0,M.jsx)(T,{size:18})]}),(0,M.jsxs)(`div`,{className:`admin-settings-fields`,children:[(0,M.jsxs)(`label`,{className:`admin-field admin-field-wide`,children:[(0,M.jsx)(`span`,{children:e(`admin.settings.dataPath`)}),(0,M.jsx)(`input`,{className:`input`,value:G.dataPath,onChange:e=>K(t=>({...t,dataPath:e.target.value}))})]}),(0,M.jsxs)(`label`,{className:`admin-field`,children:[(0,M.jsx)(`span`,{children:e(`admin.settings.capacityGiB`)}),(0,M.jsx)(`input`,{className:`input`,type:`number`,min:`0`,step:`1`,value:G.capacityGiB,onChange:e=>K(t=>({...t,capacityGiB:e.target.value}))})]}),(0,M.jsxs)(`label`,{className:`admin-field`,children:[(0,M.jsx)(`span`,{children:e(`admin.settings.maxFileSizeGiB`)}),(0,M.jsx)(`input`,{className:`input`,type:`number`,min:`0`,step:`1`,value:G.maxFileSizeGiB,onChange:e=>K(t=>({...t,maxFileSizeGiB:e.target.value}))})]}),(0,M.jsxs)(`label`,{className:`admin-field admin-field-wide`,children:[(0,M.jsx)(`span`,{children:e(`admin.settings.remoteInvites`)}),(0,M.jsx)(`textarea`,{className:`input admin-textarea`,value:G.remoteInvites,placeholder:e(`admin.settings.remoteInvitesPlaceholder`),onChange:e=>K(t=>({...t,remoteInvites:e.target.value}))})]})]}),(0,M.jsx)(`p`,{className:`admin-field-hint`,children:e(`admin.settings.hint`)}),(0,M.jsxs)(`button`,{className:`btn btn-primary btn-full`,onClick:ve,disabled:I,children:[(0,M.jsx)(u,{size:16}),e(`admin.action.saveConfig`)]})]}),(0,M.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,M.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,M.jsx)(`div`,{children:(0,M.jsx)(`h2`,{children:e(`admin.holdings.title`)})}),(0,M.jsx)(c,{size:18})]}),(0,M.jsxs)(`div`,{className:`admin-capacity-row`,children:[(0,M.jsx)(`progress`,{value:me,max:`100`}),(0,M.jsxs)(`span`,{children:[w(C?.capacity.usedBytes||0),` /`,` `,w(C?.capacity.configuredBytes||0)]})]}),(0,M.jsx)(`div`,{className:`admin-seed-help`,"aria-label":e(`admin.seedHelp.label`),children:ce.map(t=>(0,M.jsxs)(`div`,{className:`admin-seed-help-item`,children:[(0,M.jsx)(`span`,{className:`admin-seed-dot ${t.tone}`}),(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`strong`,{children:e(t.labelKey)}),(0,M.jsx)(`span`,{children:e(t.descKey)})]})]},t.labelKey))}),ge>0&&(0,M.jsx)(`p`,{className:`admin-table-note`,children:e(`admin.holdings.hiddenCount`,{count:n(ge)})}),(0,M.jsxs)(`div`,{className:`admin-table`,children:[(0,M.jsxs)(`div`,{className:`admin-table-row admin-table-head`,children:[(0,M.jsx)(`span`,{children:e(`admin.holdings.file`)}),(0,M.jsx)(`span`,{children:`CID`}),(0,M.jsx)(`span`,{children:e(`admin.holdings.size`)}),(0,M.jsx)(`span`,{children:`Peer`}),(0,M.jsx)(`span`,{children:e(`admin.holdings.lastServed`)}),(0,M.jsx)(`span`,{children:e(`admin.holdings.status`)})]}),he.map(n=>(0,M.jsxs)(`div`,{className:`admin-table-row`,children:[(0,M.jsx)(`span`,{translate:`no`,children:n.fileName||`-`}),(0,M.jsx)(`span`,{title:n.cid,translate:`no`,children:F(n.cid)}),(0,M.jsx)(`span`,{children:w(n.size)}),(0,M.jsx)(`span`,{children:n.peerCount??0}),(0,M.jsx)(`span`,{title:n.lastServedAt||``,children:se(n.lastServedAt,e,t)}),(0,M.jsx)(`span`,{className:`admin-seed-pill ${n.seedStatus===`error`?`error`:n.seedStatus===`active`||n.joined?`active`:``}`,children:oe(n,e)})]},n.cid)),(!C||C.holdings.length===0)&&(0,M.jsx)(`div`,{className:`admin-empty-row`,children:e(`admin.holdings.empty`)})]})]}),(0,M.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,M.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,M.jsx)(`div`,{children:(0,M.jsx)(`h2`,{children:e(`admin.logs.title`)})}),(0,M.jsxs)(`div`,{className:`admin-panel-actions`,children:[(0,M.jsxs)(`button`,{className:`btn btn-secondary`,onClick:xe,disabled:B,children:[(0,M.jsx)(o,{size:16}),e(`admin.action.exportDiagnostics`)]}),(0,M.jsxs)(`button`,{className:`btn btn-ghost`,onClick:be,disabled:R||D.length===0,children:[(0,M.jsx)(f,{size:16}),e(`admin.action.clearLogs`)]}),(0,M.jsx)(s,{size:18})]})]}),(0,M.jsx)(`div`,{className:`admin-log-filter`,"aria-label":e(`admin.logs.filterLabel`),children:le.map(t=>(0,M.jsx)(`button`,{type:`button`,className:H===t.value?`active`:``,onClick:()=>{de(t.value),Q(t.value)},children:e(t.labelKey)},t.value))}),(0,M.jsxs)(`div`,{className:`admin-log-list`,children:[D.map(e=>(0,M.jsxs)(`div`,{className:`admin-log-row`,children:[(0,M.jsx)(`time`,{children:r(e.ts)}),(0,M.jsx)(`span`,{className:`admin-log-level ${e.level}`,translate:`no`,children:e.level}),(0,M.jsx)(`strong`,{translate:`no`,children:e.event}),(0,M.jsx)(`span`,{translate:`no`,children:e.message})]},e.id)),D.length===0&&(0,M.jsx)(`div`,{className:`admin-empty-row`,children:e(`admin.logs.empty`)})]})]})]})]})]})]})}var B=a(`/admin/`)({component:z});export{B as Route};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`loader`,[[`path`,{d:`M12 2v4`,key:`3427ic`}],[`path`,{d:`m16.2 7.8 2.9-2.9`,key:`r700ao`}],[`path`,{d:`M18 12h4`,key:`wj9ykh`}],[`path`,{d:`m16.2 16.2 2.9 2.9`,key:`1bxg5t`}],[`path`,{d:`M12 18v4`,key:`jadmvz`}],[`path`,{d:`m4.9 19.1 2.9-2.9`,key:`bwix9q`}],[`path`,{d:`M2 12h4`,key:`j09sii`}],[`path`,{d:`m4.9 4.9 2.9 2.9`,key:`giyufr`}]]);export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),n=e(`lock`,[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]);export{t as n,n as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`message-square`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}]]);export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{
|
|
1
|
+
import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{f as r,g as i,m as a}from"./userStore-q0BBZsIV.js";import{a as o}from"./LanguageToggle-HAJ3D6Ne.js";import{t as s}from"./copy-5aEv78Eq.js";import{R as c}from"./index--p9MKNEl.js";import{t as l}from"./dayjs.min-Dcc0B6Je.js";var u=i(`fingerprint-pattern`,[[`path`,{d:`M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4`,key:`1nerag`}],[`path`,{d:`M14 13.12c0 2.38 0 6.38-1 8.88`,key:`o46ks0`}],[`path`,{d:`M17.29 21.02c.12-.6.43-2.3.5-3.02`,key:`ptglia`}],[`path`,{d:`M2 12a10 10 0 0 1 18-6`,key:`ydlgp0`}],[`path`,{d:`M2 16h.01`,key:`1gqxmh`}],[`path`,{d:`M21.8 16c.2-2 .131-5.354 0-6`,key:`drycrb`}],[`path`,{d:`M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2`,key:`1tidbn`}],[`path`,{d:`M8.65 22c.21-.66.45-1.32.57-2`,key:`13wd9y`}],[`path`,{d:`M9 6.8a6 6 0 0 1 9 5.2v2`,key:`1fr1j5`}]]),d=i(`user`,[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`,key:`975kel`}],[`circle`,{cx:`12`,cy:`7`,r:`4`,key:`17ys0d`}]]),f=t(e(),1),p=n();function m({text:e,label:t,copiedLabel:n,className:r=`btn btn-icon`,iconSize:i=14}){let{t:a}=c(),[l,u]=(0,f.useState)(!1),d=n||a(`common.copied`),m=t||a(`common.copy`);async function h(){try{await navigator.clipboard.writeText(e),u(!0),setTimeout(()=>u(!1),1500)}catch{}}return(0,p.jsxs)(`button`,{type:`button`,className:r,onClick:h,title:l?d:m,children:[l?(0,p.jsx)(o,{size:i}):(0,p.jsx)(s,{size:i}),t?l?d:t:null]})}var h=t(r(),1);l();var g=`0123456789abcdefghijklmnopqrstuvwxyz`,_=e=>{let t=[];for(;e>=128;)t.push(e&127|128),e>>=7;return t.push(e),t},v=e=>{let t=new Uint8Array([8,1,18,..._(e.length)]),n=new Uint8Array(t.length+e.length);return n.set(t,0),n.set(e,t.length),n},y=(e,t)=>{if(e.length===0)return``;let n=t.length,r=0;for(;r<e.length&&e[r]===0;)r++;let i=[0];for(let t=r;t<e.length;t++){let r=e[t];for(let e=0;e<i.length;e++){let t=i[e]*256+r;i[e]=t%n,r=Math.floor(t/n)}for(;r>0;)i.push(r%n),r=Math.floor(r/n)}let a=``;for(let e=0;e<r;e++)a+=t[0];for(let e=i.length-1;e>=0;e--)a+=t[i[e]];return a},b=(e,t)=>{let n=t.slice(2),r=new Uint8Array(a(e+n));return h.default.sign.keyPair.fromSecretKey(r)},x=(e,t)=>{let n=v(b(e,t).publicKey),r=new Uint8Array(2+n.length);r[0]=0,r[1]=36,r.set(n,2);let i=new Uint8Array([1,114]),a=new Uint8Array(i.length+r.length);return a.set(i,0),a.set(r,i.length),`k`+y(a,g)};export{u as a,d as i,x as n,m as r,b as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`music`,[[`path`,{d:`M9 18V5l12-2v13`,key:`1jmyc2`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}],[`circle`,{cx:`18`,cy:`16`,r:`3`,key:`1hluhg`}]]);export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`notebook-pen`,[[`path`,{d:`M13.4 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7.4`,key:`re6nr2`}],[`path`,{d:`M2 6h4`,key:`aawbzj`}],[`path`,{d:`M2 10h4`,key:`l0bgd4`}],[`path`,{d:`M2 14h4`,key:`1gsvsf`}],[`path`,{d:`M2 18h4`,key:`1bu2t1`}],[`path`,{d:`M21.378 5.626a1 1 0 1 0-3.004-3.004l-5.01 5.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z`,key:`pqwjuv`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]);export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]);export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`save`,[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]);export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]);export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]);export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as e}from"./userStore-q0BBZsIV.js";var t=e(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]);export{t};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{n as e,o as t}from"./jsx-runtime-Bt-cYkS5.js";import{t as n}from"./userStore-
|
|
1
|
+
import{n as e,o as t}from"./jsx-runtime-Bt-cYkS5.js";import{t as n}from"./userStore-q0BBZsIV.js";import{S as r}from"./index--p9MKNEl.js";import{i,r as a}from"./userProfile-oeBvU6ch.js";var o=t(e(),1);function s(e=``,t=[]){let n=[e,...t];return[...new Set(n.filter(Boolean))]}function c(e=[]){return s(``,e).join(`
|
|
2
2
|
`)}function l(e,t){let n=new Set(e),r=new Set(t);return{subscribe:[...r].filter(e=>!n.has(e)),unsubscribe:[...n].filter(e=>!r.has(e))}}function u(e){return String(e.id||`${e.author||``}-${e.timestamp||``}-${e.content||``}`)}function d(e){let t=Number(e.timestamp);return Number.isFinite(t)?t:0}function f(e){return e.map((e,t)=>({message:e,index:t})).sort((e,t)=>{let n=d(e.message)-d(t.message);return n===0?e.index-t.index:n}).map(e=>e.message)}function p({isReady:e,enabled:t=!0,channelName:d=``,extraSubscribedChannelNames:p=[],peerId:m=``,waitForPeerId:h=!1,limit:g=100,reconnectBaseDelay:_=2500,acceptMessage:v,getMessageKey:y=u,onSyncError:b,onSocketEvent:x,onReconnect:S}){let C=n(e=>e.identity),[w,T]=(0,o.useState)([]),[E,D]=(0,o.useState)(!1),O=(0,o.useMemo)(()=>c(p),[p]),k=(0,o.useRef)(null),A=(0,o.useRef)(d),j=(0,o.useRef)(p),M=(0,o.useRef)(null),N=(0,o.useRef)(0),P=(0,o.useRef)(v),F=(0,o.useRef)(y),I=(0,o.useRef)(x),L=(0,o.useRef)(b),R=(0,o.useRef)(S),z=(0,o.useRef)(m),B=(0,o.useRef)(new Set);(0,o.useEffect)(()=>{j.current=O?O.split(`
|
|
3
|
-
`):[]},[O]),(0,o.useEffect)(()=>{P.current=v},[v]),(0,o.useEffect)(()=>{F.current=y},[y]),(0,o.useEffect)(()=>{I.current=x},[x]),(0,o.useEffect)(()=>{L.current=b},[b]),(0,o.useEffect)(()=>{R.current=S},[S]);let V=(0,o.useCallback)(e=>{let t=P.current;return t?e.filter(t):e},[]),H=(0,o.useCallback)((e,t,n=!0)=>{let r=[...e];for(let e of V(t)){let t=F.current(e);if(n){let n=r.findIndex(t=>t.pending&&t.author?.toLowerCase()===e.author?.toLowerCase()&&t.content===e.content);if(n!==-1){r[n]={...e,id:e.id||t};continue}}r.some(e=>F.current(e)===t)||r.push({...e,id:e.id||t})}return f(r)},[V]),U=(0,o.useCallback)((e,t)=>{k.current?.readyState===WebSocket.OPEN&&k.current.send(JSON.stringify({event:e,data:t}))},[]),W=(0,o.useCallback)(e=>{let t=new Set(e.filter(Boolean)),n=l(B.current,t);for(let e of n.unsubscribe)U(`channel:unsubscribe`,{channel:e});for(let e of n.subscribe)U(`channel:subscribe`,{channel:e});B.current=t},[U]),G=(0,o.useCallback)(()=>s(A.current,j.current),[]),K=(0,o.useCallback)(async(t=A.current,n={})=>{if(!t||!e)return[];try{let e=V(await
|
|
3
|
+
`):[]},[O]),(0,o.useEffect)(()=>{P.current=v},[v]),(0,o.useEffect)(()=>{F.current=y},[y]),(0,o.useEffect)(()=>{I.current=x},[x]),(0,o.useEffect)(()=>{L.current=b},[b]),(0,o.useEffect)(()=>{R.current=S},[S]);let V=(0,o.useCallback)(e=>{let t=P.current;return t?e.filter(t):e},[]),H=(0,o.useCallback)((e,t,n=!0)=>{let r=[...e];for(let e of V(t)){let t=F.current(e);if(n){let n=r.findIndex(t=>t.pending&&t.author?.toLowerCase()===e.author?.toLowerCase()&&t.content===e.content);if(n!==-1){r[n]={...e,id:e.id||t};continue}}r.some(e=>F.current(e)===t)||r.push({...e,id:e.id||t})}return f(r)},[V]),U=(0,o.useCallback)((e,t)=>{k.current?.readyState===WebSocket.OPEN&&k.current.send(JSON.stringify({event:e,data:t}))},[]),W=(0,o.useCallback)(e=>{let t=new Set(e.filter(Boolean)),n=l(B.current,t);for(let e of n.unsubscribe)U(`channel:unsubscribe`,{channel:e});for(let e of n.subscribe)U(`channel:subscribe`,{channel:e});B.current=t},[U]),G=(0,o.useCallback)(()=>s(A.current,j.current),[]),K=(0,o.useCallback)(async(t=A.current,n={})=>{if(!t||!e)return[];try{let e=V(await i.getChannelMessages(t,g));return T(t=>n.replace?f(e):H(t,e,!1)),e}catch(e){return n.replace&&T([]),await L.current?.(e),[]}},[V,e,g,H]);(0,o.useEffect)(()=>{z.current=m,m&&(U(`register`,{peerId:m}),h&&(W(G()),A.current&&K(A.current,{replace:!0})))},[G,m,W,K,h,U]);let q=(0,o.useCallback)(()=>{T([])},[]),J=(0,o.useCallback)(async({channelName:e=A.current,content:t,attachment:n,optimisticId:r})=>{let o=t.trim();if(!e||!o||!C)return null;let s=a(C),c={id:r||`${s.author}-${Date.now()}-${Math.random().toString(36).slice(2)}`,...s,content:o,timestamp:Date.now(),pending:!0,attachment:n};T(e=>f([...e,c]));try{let t=await i.sendChannelMessage({channelName:e,content:o,...s,attachment:n});return T(e=>f(e.map(e=>e.id===c.id?{...t.message,id:t.message.id||F.current(t.message)}:e))),t.message}catch(e){throw T(e=>e.filter(e=>e.id!==c.id)),e}},[C]);return(0,o.useEffect)(()=>{A.current=d,!(!e||!t)&&(d&&K(d,{replace:!0}),(!h||z.current)&&W(G()))},[d,t,O,G,e,W,K,h]),(0,o.useEffect)(()=>{!e||!t||h&&!z.current||W(G())},[t,G,e,W,h]),(0,o.useEffect)(()=>{if(!e||!t){D(!1);return}let n=!1;N.current=0;async function i(){let e=new WebSocket(await r(`/ws`));if(n){e.close();return}e.onopen=()=>{D(!0),N.current=0,z.current&&e.send(JSON.stringify({event:`register`,data:{peerId:z.current}})),(!h||z.current)&&(B.current.clear(),W(G()),A.current&&K(A.current,{replace:!0}),R.current?.())},e.onmessage=e=>{try{let t=JSON.parse(e.data);I.current?.(t.event,t.data),t.event===`channel:message`&&t.data?.channel===A.current&&t.data?.message&&T(e=>H(e,[t.data.message])),t.event===`user:metadata:updated`&&t.data?.scope===`channels`&&A.current&&K(A.current,{replace:!0})}catch{}},e.onclose=()=>{if(D(!1),n)return;let e=N.current;if(e>=20)return;let t=Math.min(_*2**e,3e4);N.current=e+1,M.current=setTimeout(i,t)},e.onerror=()=>e.close(),k.current=e}return i(),()=>{n=!0,M.current&&clearTimeout(M.current),k.current?.close(),k.current=null,B.current.clear()}},[t,G,e,H,_,W,K,h]),{clearMessages:q,connected:E,messages:w,sendMessage:J,setMessages:T,syncMessages:K}}export{p as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{b as r,g as i,t as a}from"./userStore-q0BBZsIV.js";import{F as o,R as s,k as c,m as l,v as u}from"./index--p9MKNEl.js";import{t as d}from"./SidebarAccount-8_hQAYXx.js";import{i as f,n as p,r as m,t as h}from"./userProfile-oeBvU6ch.js";import{t as g}from"./useChannelMessages-D_306Ymv.js";var _=i(`spade`,[[`path`,{d:`M12 18v4`,key:`jadmvz`}],[`path`,{d:`M2 14.499a5.5 5.5 0 0 0 9.591 3.675.6.6 0 0 1 .818.001A5.5 5.5 0 0 0 22 14.5c0-2.29-1.5-4-3-5.5l-5.492-5.312a2 2 0 0 0-3-.02L5 8.999c-1.5 1.5-3 3.2-3 5.5`,key:`1aw2pz`}]]),v=i(`swords`,[[`polyline`,{points:`14.5 17.5 3 6 3 3 6 3 17.5 14.5`,key:`1hfsw2`}],[`line`,{x1:`13`,x2:`19`,y1:`19`,y2:`13`,key:`1vrmhu`}],[`line`,{x1:`16`,x2:`20`,y1:`16`,y2:`20`,key:`1bron3`}],[`line`,{x1:`19`,x2:`21`,y1:`21`,y2:`19`,key:`13pww6`}],[`polyline`,{points:`14.5 6.5 18 3 21 3 21 6 17.5 9.5`,key:`hbey2j`}],[`line`,{x1:`5`,x2:`9`,y1:`14`,y2:`18`,key:`1hf58s`}],[`line`,{x1:`7`,x2:`4`,y1:`17`,y2:`20`,key:`pidxm4`}],[`line`,{x1:`3`,x2:`5`,y1:`19`,y2:`21`,key:`1pehsh`}]]),y=n(),b=[{id:`gandengyan`,labelKey:`game.gandengyan.title`,href:`/game/gandengyan/`,icon:(0,y.jsx)(v,{size:16})},{id:`zhajinhua`,labelKey:`game.zhajinhua.title`,href:`/game/zhajinhua/`,icon:(0,y.jsx)(_,{size:16})}];function x({activeGame:e,closeSidebar:t}){let{t:n}=s();return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(`button`,{type:`button`,className:`sidebar-header sidebar-header-link`,onClick:c(),children:[(0,y.jsx)(o,{size:18}),(0,y.jsx)(`h1`,{children:`MOST PEOPLE`})]}),(0,y.jsx)(`nav`,{className:`sidebar-nav`,children:b.map(i=>(0,y.jsxs)(r,{to:i.href,className:`sidebar-nav-btn ${e===i.id?`active`:``}`,onClick:t,children:[i.icon,(0,y.jsx)(`span`,{children:n(i.labelKey)})]},i.id))}),(0,y.jsx)(d,{})]})}var S=t(e(),1),C=`game`,w=`mostbox.game.event`,T=[`gandengyan`,`zhajinhua`],E=`ABCDEFGHJKLMNPQRSTUVWXYZ23456789`;function D(e){let t=String(e||``).trim().toLowerCase();return T.includes(t)?t:``}function O(e){return String(e||``).trim().toUpperCase().replace(/[^A-Z0-9]/g,``).slice(0,8)}function k(e){return/^[A-Z0-9]{4,8}$/.test(String(e||``))}function A(){let e=``;for(let t=0;t<6;t++)e+=E[V(32)];return e}function j(e,t){let n=D(e),r=O(t);return!n||!k(r)?``:`game.${n}.${r.toLowerCase()}`}function M({gameId:e,roomCode:t,event:n,payload:r}){let i=D(e);return{kind:w,version:1,gameId:i,roomCode:O(t),event:String(n||``),eventId:B(i||`game`),payload:r||{}}}function N(e,t={}){try{let n=JSON.parse(String(e||``));if(!n||n.kind!==`mostbox.game.event`||n.version!==1||typeof n.event!=`string`||typeof n.eventId!=`string`)return null;let r=D(n.gameId),i=O(n.roomCode);return!r||!k(i)||t.gameId&&r!==D(t.gameId)||t.roomCode&&i!==O(t.roomCode)?null:{...n,gameId:r,roomCode:i,payload:n.payload&&typeof n.payload==`object`?n.payload:{}}}catch{return null}}function P(e=[],t={}){let n=[],r=new Map,i=``;for(let a of z(e)){let e=N(a.content,t);if(e){if(e.event===`room:create`){let t=I(e.payload?.player,a);if(!t)continue;i||=t.address,R(n,r,t);continue}if(e.event===`player:join`){let t=I(e.payload?.player,a);t&&R(n,r,t);continue}if(e.event===`player:leave`){let t=L(e.payload?.player?.address||a.author);if(t){let e=n.findIndex(e=>e.address===t);e!==-1&&(n.splice(e,1),r.delete(t))}}}}return{gameId:D(t.gameId),roomCode:O(t.roomCode),hostAddress:i,players:n}}function F(e=[],t={}){let n=null;for(let r of z(e)){let e=N(r.content,t);if(!e||e.event!==`room:state`)continue;let i=Number(e.payload?.seq||0);(!n||i>=Number(n.payload?.seq||0))&&(n=e)}return n}function I(e,t){if(!e||typeof e!=`object`)return null;let n=t&&typeof t==`object`?t:{author:t},r=n.author,i=L(e.address||r);if(!i||L(r)!==i)return null;let a=String(n.authorName||e.name||``).trim().slice(0,50)||U(i),o=String(n.avatar||e.avatar||``).trim(),s={address:i,name:a,publicKey:String(e.publicKey||``).trim(),joinedAt:Number(e.joinedAt||Date.now())};return o&&(s.avatar=o.slice(0,4096)),s}function L(e){let t=String(e||``).trim();return/^0x[a-fA-F0-9]{40}$/.test(t)?t.toLowerCase():``}function R(e,t,n){let r=t.get(n.address);if(r){Object.assign(r,n);return}e.push(n),t.set(n.address,n)}function z(e){return[...e].sort((e,t)=>Number(e.timestamp||0)-Number(t.timestamp||0))}function B(e){return`${e}_${Date.now()}_${H(4)}`}function V(e){if(globalThis.crypto?.getRandomValues){let t=new Uint32Array(1);return globalThis.crypto.getRandomValues(t),t[0]%e}return Math.floor(Math.random()*e)}function H(e){let t=new Uint8Array(e);if(globalThis.crypto?.getRandomValues)globalThis.crypto.getRandomValues(t);else for(let e=0;e<t.length;e++)t[e]=Math.floor(Math.random()*256);return[...t].map(e=>e.toString(16).padStart(2,`0`)).join(``)}function U(e){return e?`${e.slice(0,6)}...${e.slice(-4)}`:``}function W({gameId:e,onError:t,getPlayerPayload:n}){let{t:r}=s(),i=l(e=>e.hasBackend),o=l(e=>e.checkBackend),c=l(e=>e.openConnectModal),d=a(e=>e.identity),p=a(e=>e.openLoginModal),[m,_]=(0,S.useState)(``),[v,y]=(0,S.useState)(``),[b,x]=(0,S.useState)(!1),w=i===!0,T=(0,S.useCallback)(async(e,n)=>{let r=await u(e,n);t&&t(r)},[t]),E=(0,S.useCallback)(t=>!!N(t.content,{gameId:e,roomCode:m}),[e,m]),D=(0,S.useCallback)(t=>{let n=N(t.content,{gameId:e,roomCode:m});return n?`${t.author}-${n.eventId}`:`${t.author}-${t.timestamp}-${t.content}`},[e,m]),{clearMessages:k,connected:P,messages:F,sendMessage:I,syncMessages:L}=g({isReady:w,enabled:!!d,channelName:v,limit:500,acceptMessage:E,getMessageKey:D,onSyncError:e=>T(e,r(`game.room.error.readLog`))}),R=(0,S.useMemo)(()=>F.map(t=>({message:t,event:N(t.content,{gameId:e,roomCode:m})})).filter(e=>e.event),[e,F,m]),z=(0,S.useCallback)(()=>d?w?!0:(c(),!1):(p(),!1),[w,c,p,d]);(0,S.useEffect)(()=>{i===null&&o()},[o,i]);let B=(0,S.useCallback)(async(i,a=!1)=>{if(!z()||!d)return!1;let o=a?A():O(i),s=j(e,o);if(!s)return t&&t(r(`game.room.error.invalidCode`)),!1;x(!0);try{let t=await f.createChannel(s,C,h(d)),r=t.channelKey||t.key||s;return await G(r,d,e,o,a?`room:create`:`player:join`,{player:q(d,n?.(d))}),_(o),y(r),k(),!0}catch(e){return await T(e,r(a?`game.room.error.createFailed`:`game.room.error.joinFailed`)),!1}finally{x(!1)}},[z,e,n,t,T,k,r,d]);return{channelName:v,connected:P,createRoom:(0,S.useCallback)(()=>B(``,!0),[B]),ensureReady:z,isBackendReady:w,joinRoom:(0,S.useCallback)(e=>B(e),[B]),joining:b,messages:F,roomCode:m,roomEvents:R,sendRoomEvent:(0,S.useCallback)(async(t,n={})=>{if(!z()||!d||!v||!m)return!1;let i=M({gameId:e,roomCode:m,event:t,payload:n}),a=JSON.stringify(i);try{return await I({channelName:v,content:a,optimisticId:`${d.address}-${i.eventId}`}),!0}catch(e){return await T(e,r(`game.room.error.sendEventFailed`)),!1}},[v,z,e,T,m,I,r,d]),setRoomCode:_,syncMessages:L,userIdentity:d}}async function G(e,t,n,r,i,a){let o=M({gameId:n,roomCode:r,event:i,payload:a});await f.sendChannelMessage({channelName:e,content:JSON.stringify(o),...m(t)})}function K(e){return{address:e.address,name:p(e),avatar:e.avatar||``,publicKey:``,joinedAt:Date.now()}}function q(e,t={}){let n=K(e),r={...n,...t};return Object.prototype.hasOwnProperty.call(t,`avatar`)||(r.avatar=n.avatar),r}export{_ as a,x as i,P as n,F as r,W as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h as e,x as t}from"./index--p9MKNEl.js";var n={getChannels(t={}){let n=new URLSearchParams;t.type&&n.set(`type`,t.type);let r=n.toString();return e.get(r?`/api/channels?${r}`:`/api/channels`).json()},createChannel(t,n=`personal`,r={}){return e.post(`/api/channels`,{json:{name:t,type:n,...r}}).json()},leaveChannel(t){return e.delete(`/api/channels`,{json:{channelKey:t}}).json()},getChannelMessages(t,n=100,r=0){return e.get(`/api/channels/${encodeURIComponent(t)}/messages?limit=${n}&offset=${r}`).json()},sendChannelMessage({channelName:t,content:n,author:r,authorName:i,avatar:a,attachment:o}){return e.post(`/api/channels/${encodeURIComponent(t)}/messages`,{json:o?{content:n,author:r,authorName:i,avatar:a,attachment:o}:{content:n,author:r,authorName:i,avatar:a}}).json()},getChannelMembers(t){return e.get(`/api/channels/${encodeURIComponent(t)}/members`).json()},getChannelPeers(t){return e.get(`/api/channels/${encodeURIComponent(t)}/peers`).json()},setChannelRemark(t,n){return e.put(`/api/channels/${encodeURIComponent(t)}/remark`,{json:{remark:n}}).json()},setChannelPinned(t,n){return e.put(`/api/channels/${encodeURIComponent(t)}/pin`,{json:{pinned:n}}).json()},getFileDownloadUrl(e){return t(`/api/files/${e}/download`)}};function r(e){return e.displayName||e.username}function i(e){return{displayName:r(e),avatar:e.avatar||``}}function a(e){return{author:e.address,authorName:r(e),avatar:e.avatar||``}}export{n as i,r as n,a as r,i as t};
|