most-box 0.2.8 → 0.3.0

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.
Files changed (54) hide show
  1. package/out/admin/index.html +0 -0
  2. package/out/app/index.html +0 -0
  3. package/out/assets/{FilePreviewOverlay-D8H61qbp.js → FilePreviewOverlay-CM5IqnZD.js} +1 -1
  4. package/out/assets/{MarketingHeader-CrYsQsQ5.js → MarketingHeader-B45AaM29.js} +1 -1
  5. package/out/assets/{MarketingLayout-CQurMOSD.js → MarketingLayout-A00pEOa2.js} +1 -1
  6. package/out/assets/{MilkdownEditor-DrsyaR4h.js → MilkdownEditor-BTq9bDAf.js} +1 -1
  7. package/out/assets/{OpenSidebarButton-DnEgqP0S.js → OpenSidebarButton-D8qfUGzU.js} +1 -1
  8. package/out/assets/{SidebarAccount-B4OAl0as.js → SidebarAccount-_RBE5K_o.js} +1 -1
  9. package/out/assets/{SidebarHomeLink-BdsUM4Kt.js → SidebarHomeLink-qMFEGjZt.js} +1 -1
  10. package/out/assets/{downloadValidation-DbVOwdmC.js → downloadValidation-CSXwoQKW.js} +1 -1
  11. package/out/assets/index-BHZhApbo.css +1 -0
  12. package/out/assets/index-BRhsWNj1.css +1 -0
  13. package/out/assets/{index-BZ-f0CZd.js → index-C-_ZwxuN.js} +2 -2
  14. package/out/assets/index-CYVRmppz.css +1 -0
  15. package/out/assets/index.lazy-0YYV0CR3.js +1 -0
  16. package/out/assets/index.lazy-BTYGr9Vb.js +1 -0
  17. package/out/assets/{index.lazy-B7AbDiMU.js → index.lazy-BVAtQtTa.js} +1 -1
  18. package/out/assets/{index.lazy-oFaoa4qT.js → index.lazy-BbdLA2L-.js} +1 -1
  19. package/out/assets/{index.lazy-DVeqmqaA.js → index.lazy-CbiLtziY.js} +1 -1
  20. package/out/assets/{index.lazy-CvKEcWlH.js → index.lazy-CcEdBg3i.js} +2 -2
  21. package/out/assets/index.lazy-CePHsLXG.js +1 -0
  22. package/out/assets/{index.lazy-rfgjFZNH.js → index.lazy-DG_3_VdF.js} +1 -1
  23. package/out/assets/{index.lazy-zpQXhgmn.js → index.lazy-DR0rWEWZ.js} +1 -1
  24. package/out/assets/{index.lazy-hF807bh0.js → index.lazy-DSyTSCJD.js} +1 -1
  25. package/out/assets/{index.lazy-DB9Ht9LJ.js → index.lazy-DUhsuPLv.js} +1 -1
  26. package/out/assets/{index.lazy-BsciBHf_.js → index.lazy-DVnhWbzH.js} +1 -1
  27. package/out/assets/{index.lazy-CgKPe02l.js → index.lazy-DZpkg1DJ.js} +1 -1
  28. package/out/assets/useChannelMessages-DOaWHdAP.js +4 -0
  29. package/out/assets/{useGameRoom-CRJL0kcm.js → useGameRoom-hHkV65ii.js} +1 -1
  30. package/out/assets/{userProfile-DBkH4s29.js → userProfile-DwZip0Dt.js} +1 -1
  31. package/out/chat/index.html +0 -0
  32. package/out/chat/join/index.html +0 -0
  33. package/out/download/index.html +2 -2
  34. package/out/game/gandengyan/index.html +0 -0
  35. package/out/game/index.html +0 -0
  36. package/out/game/zhajinhua/index.html +0 -0
  37. package/out/index.html +2 -2
  38. package/out/note/index.html +0 -0
  39. package/out/ping/index.html +2 -2
  40. package/out/profile/index.html +0 -0
  41. package/out/web3/index.html +0 -0
  42. package/package.json +1 -1
  43. package/server/index.js +59 -2
  44. package/server/src/http/app.js +7 -1
  45. package/server/src/http/nodeStatus.js +6 -0
  46. package/server/src/http/routes/channelRoutes.js +12 -0
  47. package/server/src/index.js +510 -5
  48. package/out/assets/index-3OD3Chi9.css +0 -1
  49. package/out/assets/index-BSOvFG3o.css +0 -1
  50. package/out/assets/index-Cde4g_dk.css +0 -1
  51. package/out/assets/index.lazy-BxoGfWEW.js +0 -1
  52. package/out/assets/index.lazy-CKbrHko5.js +0 -1
  53. package/out/assets/index.lazy-Citucq1G.js +0 -1
  54. package/out/assets/useChannelMessages-B6RMaNDH.js +0 -3
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{C as r,T as i,d as a,l as o,s,u as c}from"./ui-BpDGD3IR.js";import{a as l}from"./i18n-NjvOSuV6.js";import{n as u,r as d}from"./LanguageToggle-CSQtRZ3A.js";import{t as f}from"./copy-DEzFUzeX.js";import{n as p}from"./SidebarHomeLink-BdsUM4Kt.js";import{t as m}from"./play-B-BjsTZz.js";import{a as h,i as g,n as _,r as ee,t as te}from"./useGameRoom-CRJL0kcm.js";import{E as v,N as ne,S as y,b as re,c as b,i as ie,w as x,x as S}from"./index-BZ-f0CZd.js";var ae=r(`refresh-ccw`,[[`path`,{d:`M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`14sxne`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}],[`path`,{d:`M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16`,key:`1hlbsb`}],[`path`,{d:`M16 16h5v5`,key:`ccwih5`}]]),C=t(e(),1),oe=[10,20,50,100],w=[`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`J`,`Q`,`K`,`A`],T=[`D`,`C`,`H`,`S`],E=new Map(w.map((e,t)=>[e,t+2])),D=new Map(T.map((e,t)=>[e,t+1])),O={high:1,pair:2,straight:3,flush:4,straightFlush:5,triple:6},se={[O.high]:`散牌`,[O.pair]:`对子`,[O.straight]:`顺子`,[O.flush]:`金花`,[O.straightFlush]:`顺金`,[O.triple]:`豹子`};function k(e){return x(e)}function ce(e=`zhajinhua`){return re(e)}function le(){return ce(`round`)}function ue(){let e=[];for(let t of T)for(let n of w)e.push(`${n}${t}`);return e}function A(e=ue(),t=Math.random){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 j(e){let t=String(e||``).trim().toUpperCase(),n=t.slice(-1),r=t.slice(0,-1);if(!E.has(r)||!D.has(n))throw Error(`Invalid card: ${e}`);return{id:`${r}${n}`,rank:r,suit:n,rankValue:E.get(r),suitValue:D.get(n)}}function M(e,t){let n=Math.max(e.length,t.length);for(let r=0;r<n;r++){let n=e[r]||0,i=t[r]||0;if(n!==i)return n-i}return 0}function N(e){let t=[...new Set(e)].sort((e,t)=>e-t);return t.length===3?t[0]===2&&t[1]===3&&t[2]===14?3:t[0]+1===t[1]&&t[1]+1===t[2]?t[2]:0:0}function P(e){if(!Array.isArray(e)||e.length!==3)throw Error(`炸金花手牌必须是 3 张牌`);let t=e.map(j),n=t.map(e=>e.rankValue),r=new Map;for(let e of n)r.set(e,(r.get(e)||0)+1);let i=new Set(t.map(e=>e.suit)).size===1,a=N(n),o=[...n].sort((e,t)=>t-e),s=Math.max(...t.map(e=>e.suitValue)),c=O.high,l=o;return r.size===1?(c=O.triple,l=[o[0]]):a&&i?(c=O.straightFlush,l=[a]):i?(c=O.flush,l=o):a?(c=O.straight,l=[a]):r.size===2&&(c=O.pair,l=[[...r.entries()].find(([,e])=>e===2)[0],[...r.entries()].find(([,e])=>e===1)[0]]),{category:c,label:se[c],tiebreakers:l,tieSuit:s,cards:t.map(e=>e.id)}}function F(e,t){let n=P(e),r=P(t);if(n.category!==r.category)return n.category-r.category;let i=M(n.tiebreakers,r.tiebreakers);return i===0?n.tieSuit-r.tieSuit:i}function de(e){return P(e).label}function I({roundId:e,action:t,amount:n,target:r}){return{roundId:e,eventId:ce(`action`),action:t,amount:n,target:r}}function fe(e=[]){let t=e.filter(e=>Number(e.chips)>=10);return t.length>=2&&t.length<=5}function pe({roomCode:e,players:t,hostAddress:n,previousSeq:r=0,previousWinner:i=``,roundId:a=le(),random:o=Math.random}){let s=t.filter(e=>Number(e.chips)>=10).slice(0,5);if(s.length<2)throw Error(`至少需要 2 名有足够筹码的玩家`);let c=A(ue(),o),l={},u=s.map((e,t)=>{let n=c.slice(t*3,t*3+3);return l[e.address]=n,{address:e.address,name:e.name,avatar:y(e.avatar),publicKey:e.publicKey,chips:Number(e.chips)-10,status:`active`,looked:!1,bet:10}}),d,f=S(i),p=f?u.findIndex(e=>S(e.address)===f):-1;return d=p>=0?u[p].address:u[Math.floor(o()*u.length)].address,{roomCode:k(e),roundId:a,status:`playing`,host:S(n),seq:r+1,startedAt:Date.now(),ante:10,pot:10*u.length,currentBet:10,turnAddress:d,players:u,lastAction:`本局开始`,winner:null,showdown:null,appliedEventIds:[],hands:l,actionCounts:{},compareReveal:{}}}function me(e){if(!e)return null;let t={...e};return delete t.hands,K(t)}function he(e,t){let n=L(e);return!n||!t||typeof t!=`object`?null:{...n,hands:K(t)}}function L(e){return!e||typeof e!=`object`||!e.roundId||!Array.isArray(e.players)?null:{roomCode:k(e.roomCode),roundId:String(e.roundId),status:e.status===`finished`?`finished`:`playing`,host:S(e.host),seq:Number(e.seq)||1,startedAt:Number(e.startedAt)||Date.now(),ante:Number(e.ante)||10,pot:Math.max(0,Number(e.pot)||0),currentBet:Math.max(0,Number(e.currentBet)||10),turnAddress:S(e.turnAddress),players:e.players.map(ve).filter(Boolean),lastAction:String(e.lastAction||``),winner:e.winner?S(e.winner):null,showdown:e.showdown&&typeof e.showdown==`object`?K(e.showdown):null,appliedEventIds:Array.isArray(e.appliedEventIds)?e.appliedEventIds.map(String):[],actionCounts:e.actionCounts&&typeof e.actionCounts==`object`?K(e.actionCounts):{},compareReveal:e.compareReveal&&typeof e.compareReveal==`object`?K(e.compareReveal):{},lastCompare:e.lastCompare&&typeof e.lastCompare==`object`?K(e.lastCompare):null,finishedAt:e.finishedAt?Number(e.finishedAt):null}}function R(e,t,n){let r=L(e);if(!r||r.status!==`playing`)return{ok:!1,error:`当前没有进行中的牌局`};let i=S(n),a=r.players.find(e=>e.address===i);if(!a||a.status!==`active`)return{ok:!1,error:`玩家不在本轮牌局中`};if(r.turnAddress!==i)return{ok:!1,error:`还没有轮到你操作`};let o=t?.action;if(![`look`,`call`,`raise`,`compare`,`fold`].includes(o))return{ok:!1,error:`未知操作`};if(o===`look`)return a.looked?{ok:!1,error:`已经看过牌`}:{ok:!0};if(o===`call`)return a.chips>=10?{ok:!0}:{ok:!1,error:`筹码不足,不能跟注`};if(o===`raise`){let e=Number(t.amount);if(!oe.includes(e))return{ok:!1,error:`加注档位无效`};let n=r.currentBet+e-a.bet;return a.chips>=n?{ok:!0}:{ok:!1,error:`筹码不足,不能加注`}}if(o===`compare`){let e=S(t.target),n=r.players.find(t=>t.address===e);if(!e||e===i||!n||n.status!==`active`)return{ok:!1,error:`请选择有效的比牌对象`};if(!r.players.filter(e=>e.status===`active`).every(e=>(r.actionCounts?.[e.address]||0)>=1))return{ok:!1,error:`第一轮不能比牌,请先跟注或加注`};let o=Math.max(0,r.currentBet-a.bet);return a.chips>=o?{ok:!0}:{ok:!1,error:`筹码不足,不能比牌`}}return{ok:!0}}function z(e,t,n){let r=R(e,t,n);if(!r.ok)return{ok:!1,error:r.error,state:e};let i=K(e),a=S(n),o=i.players.find(e=>e.address===a),s=String(t.eventId);if(i.appliedEventIds?.includes(s))return{ok:!0,state:i,duplicate:!0};if(Array.isArray(i.appliedEventIds)||(i.appliedEventIds=[]),i.appliedEventIds.push(s),t.action===`look`)return o.looked=!0,i.lastAction=`${o.name} 看牌`,G(i);if(t.action===`fold`)return o.status=`folded`,i.lastAction=`${o.name} 弃牌`,H(i,a),U(i,a);if(t.action===`call`)return o.chips-=10,o.bet+=10,i.pot+=10,i.lastAction=`${o.name} 跟注`,H(i,a),U(i,a);if(t.action===`raise`){let e=Number(t.amount);return i.currentBet+=e,V(i,o),i.lastAction=`${o.name} 加注 ${e}`,H(i,a),U(i,a)}if(t.action===`compare`){V(i,o);let e=S(t.target),n=i.players.find(t=>t.address===e),r=o.looked,s=n.looked,c=F(i.hands?.[a]||[],i.hands?.[e]||[]),l=c>=0?o:n,u=c>=0?n:o;u.status=`folded`,u.looked=!0,i.compareReveal||={};let d=r&&s,f=!r&&!s;if(d)i.compareReveal[a]=i.hands?.[e]||[],i.compareReveal[e]=i.hands?.[a]||[];else if(f)i.compareReveal[u.address]=i.hands?.[l.address]||[];else{let e=r?o:n,t=r?n:o;i.compareReveal[e.address]=i.hands?.[t.address]||[],i.compareReveal[u.address]=i.hands?.[l.address]||[]}return i.lastCompare={initiator:a,target:e,winner:l.address,loser:u.address,initiatorLooked:r,targetLooked:s,timestamp:Date.now()},i.lastAction=`${o.name} 与 ${n.name} 比牌,${u.name} 出局`,H(i,a),U(i,a)}return{ok:!1,error:`未知操作`,state:e}}function B(e){return(e?.players||[]).filter(e=>e.status===`active`)}function ge(e,t){let n=(e?.players||[]).find(e=>e.address===S(t));if(!e||e.status!==`playing`||!n||n.status!==`active`||e.turnAddress!==n.address)return[];let r=[];return n.looked||r.push(`look`),R(e,{action:`call`},n.address).ok&&r.push(`call`),oe.some(t=>R(e,{action:`raise`,amount:t},n.address).ok)&&r.push(`raise`),B(e).length>1&&e.players.filter(e=>e.status===`active`).every(t=>(e.actionCounts?.[t.address]||0)>=1)&&r.push(`compare`),r.push(`fold`),r}function V(e,t){let n=Math.max(0,e.currentBet-t.bet);t.chips-=n,t.bet+=n,e.pot+=n}function H(e,t){e.actionCounts||={},e.actionCounts[t]=(e.actionCounts[t]||0)+1}function U(e,t){let n=B(e);return n.length===1?_e(e,n[0].address):(e.turnAddress=W(e,t),G(e))}function _e(e,t){let n=e.players.find(e=>e.address===t),r=e.pot;return n&&(n.chips+=e.pot),e.status=`finished`,e.winner=t,e.winAmount=r,e.turnAddress=``,e.showdown=e.hands?K(e.hands):null,e.lastAction=n?`${n.name} 赢得 ${r} 筹码`:`本局结束`,e.pot=0,e.finishedAt=Date.now(),G(e)}function W(e,t){let n=e.players,r=Math.max(0,n.findIndex(e=>e.address===S(t)));for(let e=1;e<=n.length;e++){let t=n[(r+e)%n.length];if(t.status===`active`)return t.address}return``}function G(e){return e.seq=Number(e.seq||0)+1,{ok:!0,state:e}}function ve(e){if(!e||typeof e!=`object`)return null;let t=S(e.address);return t?{address:t,name:String(e.name||v(t)).slice(0,50),avatar:y(e.avatar),publicKey:String(e.publicKey||``),chips:Math.max(0,Number(e.chips)||0),status:e.status===`folded`?`folded`:`active`,looked:e.looked===!0,bet:Math.max(0,Number(e.bet)||0)}:null}function K(e){return JSON.parse(JSON.stringify(e))}var q={page:`_page_1yyew_1`,headerActions:`_headerActions_1yyew_12`,entry:`_entry_1yyew_18`,entryBrand:`_entryBrand_1yyew_28`,cardMark:`_cardMark_1yyew_34`,entryPanel:`_entryPanel_1yyew_62`,accountLine:`_accountLine_1yyew_72`,joinForm:`_joinForm_1yyew_89`,status:`_status_1yyew_110`,board:`_board_1yyew_116`,table:`_table_1yyew_123`,tableCenter:`_tableCenter_1yyew_144`,finishBanner:`_finishBanner_1yyew_173`,finishBannerIcon:`_finishBannerIcon_1yyew_192`,seats:`_seats_1yyew_196`,seat:`_seat_1yyew_196`,seatTurn:`_seatTurn_1yyew_218`,seatWinner:`_seatWinner_1yyew_223`,seatFolded:`_seatFolded_1yyew_228`,seatAvatar:`_seatAvatar_1yyew_232`,seatMain:`_seatMain_1yyew_251`,seatMeta:`_seatMeta_1yyew_252`,panel:`_panel_1yyew_283`,panelSection:`_panelSection_1yyew_290`,panelTitle:`_panelTitle_1yyew_300`,hand:`_hand_1yyew_310`,card:`_card_1yyew_34`,red:`_red_1yyew_344`,black:`_black_1yyew_348`,cardBack:`_cardBack_1yyew_352`,handLabel:`_handLabel_1yyew_373`,actionGrid:`_actionGrid_1yyew_380`,raiseRow:`_raiseRow_1yyew_381`,statusGrid:`_statusGrid_1yyew_392`,muted:`_muted_1yyew_410`,compareOverlay:`_compareOverlay_1yyew_417`,compareBox:`_compareBox_1yyew_429`,compareTitle:`_compareTitle_1yyew_443`,comparePlayers:`_comparePlayers_1yyew_449`,compareSide:`_compareSide_1yyew_456`,compareWinner:`_compareWinner_1yyew_468`,compareName:`_compareName_1yyew_473`,compareCards:`_compareCards_1yyew_484`,compareLabel:`_compareLabel_1yyew_509`,compareVs:`_compareVs_1yyew_515`,compareResult:`_compareResult_1yyew_522`},J=n(),ye=`zhajinhua`;function Y(...e){return e.filter(Boolean).join(` `)}function X(e,t){return String(e||``).toLowerCase()===String(t||``).toLowerCase()}function be(e=``){return e?`${e.slice(0,6)}...${e.slice(-4)}`:``}function xe(e){return e.displayName||e.username}function Se(e){let t=String(e||``),n=t.slice(-1);return{rank:t.slice(0,-1),suit:{S:`♠`,H:`♥`,C:`♣`,D:`♦`}[n]||n,color:n===`H`||n===`D`?`red`:`black`}}function Z(){let{t:e}=l(),t=b(e=>e.isDarkMode),n=b(e=>e.setIsDarkMode),r=b(e=>e.addToast),i=s(e=>e.initializeUser),[v,y]=(0,C.useState)(``),[re,x]=(0,C.useState)(!1),S=(0,C.useRef)(``),w=(0,C.useRef)(!1),[T,E]=(0,C.useState)(20),[D,O]=(0,C.useState)(``),[se,k]=(0,C.useState)({}),[ce,le]=(0,C.useState)(!0),[ue,A]=(0,C.useState)(!1),j=(0,C.useRef)(null),M=(0,C.useRef)(new Set),N=te({gameId:ye,onError:e=>r(e,`error`),getPlayerPayload:e=>{let t=o(e.danger);return{address:e.address,name:xe(e),avatar:e.avatar||``,publicKey:t.public_key,joinedAt:Date.now()}}}),P=(0,C.useMemo)(()=>N.userIdentity?.danger?o(N.userIdentity.danger):null,[N.userIdentity?.danger]);(0,C.useEffect)(()=>{i()},[i]),(0,C.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get(`room`)?.toUpperCase();e&&(y(e),S.current=e)},[]),(0,C.useEffect)(()=>{let t=S.current;!t||w.current||!N.isBackendReady||!N.userIdentity||(w.current=!0,S.current=``,N.joinRoom(t).then(t=>{t&&r(e(`game.toast.joinedRoom`),`success`)}))},[N.isBackendReady,N.userIdentity,N.joinRoom,r,e]),(0,C.useEffect)(()=>{if(!N.roomCode)return;let e=`/game/zhajinhua?room=${N.roomCode}`;`${window.location.pathname}${window.location.search}`!==e&&window.history.replaceState(null,``,e)},[N.roomCode]);let F=(0,C.useMemo)(()=>_(N.messages,{gameId:ye,roomCode:N.roomCode}),[N.messages,N.roomCode]),L=(0,C.useMemo)(()=>ee(N.messages,{gameId:ye,roomCode:N.roomCode}),[N.messages,N.roomCode])?.payload?.round||null,R=L?.host||F.hostAddress,V=X(R,N.userIdentity?.address),H=N.userIdentity?.address?.toLowerCase()||``,U=L?.players.find(e=>X(e.address,H)),_e=U||F.players.find(e=>X(e.address,H)),W=se[L?.roundId||``]||null,G=L?.showdown&&H?L.showdown[H]:null,ve=L?.compareReveal&&H?L.compareReveal[H]:null,K=G||ve||(U?.looked?W:null),Z=ge(L,H),we=B(L),Te=V&&fe(F.players.map(e=>({...e,chips:L?.players.find(t=>X(t.address,e.address))?.chips??1e3}))),Ee=N.roomCode&&typeof window<`u`?`${window.location.origin}/game/zhajinhua?room=${N.roomCode}`:``;(0,C.useEffect)(()=>{if(!(!L||!N.userIdentity||!P||!R))for(let e of N.roomEvents){let t=e.event;if(!t||t.event!==`deal:private`)continue;let n=t.payload;if(n.roundId!==L.roundId||!X(n.recipient,N.userIdentity.address))continue;let r=c(n.encrypted||``,{senderPublicKey:n.senderPublicKey||``,recipientPrivateKey:P.private_key});if(r)try{let e=JSON.parse(r);Array.isArray(e)&&k(t=>({...t,[L.roundId]:e.map(String)}))}catch{}}},[L?.roundId,N.roomEvents,N.userIdentity,R,P?.private_key]),(0,C.useEffect)(()=>{if(L?.status===`finished`&&L.winner){le(!0);let e=setTimeout(()=>le(!1),5e3);return()=>clearTimeout(e)}},[L?.finishedAt,L?.status,L?.winner]),(0,C.useEffect)(()=>{if(L?.lastCompare?.timestamp){A(!0);let e=setTimeout(()=>A(!1),5e3);return()=>clearTimeout(e)}else A(!1)},[L?.lastCompare?.timestamp,L?.roundId]),(0,C.useEffect)(()=>{if(!V||!L||L.status!==`playing`)return;let e=j.current;if(!e)return;let t=N.roomEvents.filter(e=>{let t=e.event;if(!t||t.event!==`player:action`)return!1;let n=t.payload.actionEvent;return!(!n||n.roundId!==L.roundId||M.current.has(n.eventId)||L.appliedEventIds?.includes(n.eventId))});if(t.length===0)return;let n=!1;async function r(){let r=he(L,e);if(r)for(let e of t){if(n)return;let t=(e.event?.payload).actionEvent,i=z(r,t,e.message.author);if(!i.ok){let n=e.message.author;if(!X(n,N.userIdentity?.address)&&r.status===`playing`&&X(r.turnAddress,n)){let e=z(r,I({roundId:r.roundId,action:`call`,amount:void 0,target:void 0}),n);if(e.ok)i=e;else{let e=z(r,I({roundId:r.roundId,action:`fold`,amount:void 0,target:void 0}),n);e.ok&&(i=e)}}if(!i.ok){M.current.add(t.eventId);continue}}if(r=i.state,j.current=i.state.hands,await Ae(i.state)&&M.current.add(t.eventId),i.state.status===`finished`)break}}return r(),()=>{n=!0}},[L?.roundId,L?.seq,L?.status,N.roomEvents,V]);async function De(){await N.createRoom()&&r(e(`game.toast.roomCreated`),`success`)}async function Oe(t){t.preventDefault(),await N.joinRoom(v)&&r(e(`game.toast.joinedRoom`),`success`)}async function ke(){Ee&&(await navigator.clipboard.writeText(Ee),x(!0),setTimeout(()=>x(!1),1400))}async function Ae(e){return N.sendRoomEvent(`room:state`,{round:me(e),seq:e.seq})}async function je(){if(!N.userIdentity||!P||!Te){r(e(`game.zhajinhua.error.notEnoughPlayers`),`error`);return}try{let t=F.players.map(e=>({...e,chips:L?.players.find(t=>X(t.address,e.address))?.chips??1e3})),n=pe({roomCode:N.roomCode,players:t,hostAddress:N.userIdentity.address,previousSeq:L?.seq||0,previousWinner:L?.winner||``});j.current=n.hands,M.current.clear(),await Ae(n);for(let e of n.players){let t=a(JSON.stringify(n.hands[e.address]),{senderPrivateKey:P.private_key,recipientPublicKey:e.publicKey});await N.sendRoomEvent(`deal:private`,{roundId:n.roundId,recipient:e.address,senderPublicKey:P.public_key,encrypted:t})}k(e=>({...e,[n.roundId]:n.hands[N.userIdentity.address.toLowerCase()]})),r(e(`game.zhajinhua.toast.roundStarted`),`success`)}catch(t){r(t instanceof Error?t.message:e(`game.zhajinhua.error.startFailed`),`error`)}}async function $(e,t={}){if(!L||!N.userIdentity)return;let n=I({roundId:L.roundId,action:e,amount:t.amount,target:t.target});await N.sendRoomEvent(`player:action`,{actionEvent:n})}let Me=L?.status===`playing`?X(L.turnAddress,H)?e(`game.zhajinhua.status.yourTurn`):L.turnAddress?e(`game.zhajinhua.status.waitingPlayer`,{player:Q(L.turnAddress,F.players)}):e(`game.status.playing`):L?.status===`finished`?e(`game.status.finished`):e(`game.status.waitingStart`),Ne=we.filter(e=>!X(e.address,H));return(0,J.jsx)(p,{sidebar:({closeSidebar:e})=>(0,J.jsx)(g,{activeGame:`zhajinhua`,closeSidebar:e}),headerTitle:(0,J.jsx)(`h2`,{className:`header-title`,children:e(`game.zhajinhua.title`)}),headerRight:(0,J.jsxs)(`div`,{className:q.headerActions,children:[N.roomCode&&(0,J.jsxs)(`button`,{className:`btn btn-sm`,onClick:ke,children:[(0,J.jsx)(f,{size:14}),e(re?`common.copied`:`game.action.shareRoom`)]}),(0,J.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>n(!t),title:e(`common.theme.toggle`),children:t?(0,J.jsx)(u,{size:16}):(0,J.jsx)(d,{size:16})})]}),children:(0,J.jsx)(`main`,{className:q.page,children:N.roomCode?(0,J.jsxs)(`div`,{className:q.board,children:[(0,J.jsxs)(`section`,{className:q.table,children:[L?.status===`finished`&&L.winner&&ce&&(0,J.jsxs)(`div`,{className:q.finishBanner,children:[(0,J.jsx)(`span`,{className:q.finishBannerIcon,children:`🏆`}),(0,J.jsx)(`span`,{children:e(`game.zhajinhua.result.winChips`,{player:Q(L.winner,F.players),amount:L.winAmount??0})})]}),L?.lastCompare&&ue&&(0,J.jsx)(Ce,{lastCompare:L.lastCompare,compareReveal:L.compareReveal||{},myAddress:H,myDealtHand:W,lobbyPlayers:F.players,onClose:()=>A(!1)}),(0,J.jsxs)(`div`,{className:q.tableCenter,children:[(0,J.jsx)(`span`,{children:e(`game.zhajinhua.pot`)}),(0,J.jsx)(`strong`,{children:L?.pot||0}),(0,J.jsx)(`small`,{children:e(`game.zhajinhua.currentBet`,{amount:L?.currentBet||0})})]}),(0,J.jsx)(`div`,{className:q.seats,children:F.players.map(t=>{let n=L?.players.find(e=>X(e.address,t.address)),r=L?.turnAddress===t.address,i=L?.winner===t.address,a=n?.status===`folded`;return(0,J.jsxs)(`div`,{className:Y(q.seat,r&&q.seatTurn,i&&q.seatWinner,a&&q.seatFolded),children:[(0,J.jsx)(`div`,{className:q.seatAvatar,children:(0,J.jsx)(`img`,{src:ie(t.address,t.avatar),alt:``})}),(0,J.jsxs)(`div`,{className:q.seatMain,children:[(0,J.jsx)(`strong`,{translate:`no`,children:t.name}),(0,J.jsx)(`span`,{translate:`no`,children:be(t.address)})]}),(0,J.jsxs)(`div`,{className:q.seatMeta,children:[(0,J.jsx)(`span`,{children:e(`game.zhajinhua.chips`,{amount:n?.chips??1e3})}),(0,J.jsx)(`span`,{children:n?.status===`folded`?e(`game.zhajinhua.player.folded`):n?.looked?e(`game.zhajinhua.player.looked`):e(L?`game.zhajinhua.player.inRound`:`game.status.waitingStart`)})]})]},t.address)})})]}),(0,J.jsxs)(`aside`,{className:q.panel,children:[(0,J.jsxs)(`div`,{className:q.panelSection,children:[(0,J.jsxs)(`div`,{className:q.panelTitle,children:[(0,J.jsx)(h,{size:16}),(0,J.jsx)(`span`,{children:e(`game.zhajinhua.myHand`)})]}),(0,J.jsx)(`div`,{className:q.hand,children:K?K.map(e=>{let t=Se(e),n=`${t.suit}${t.rank}`;return(0,J.jsxs)(`div`,{className:Y(q.card,q[t.color]),children:[(0,J.jsx)(`span`,{children:n}),(0,J.jsx)(`i`,{children:t.suit})]},e)}):[0,1,2].map(e=>(0,J.jsx)(`div`,{className:q.cardBack,children:(0,J.jsx)(h,{size:18})},e))}),(0,J.jsx)(`p`,{className:q.handLabel,children:K?de(K):e(W?`game.zhajinhua.hand.unlooked`:`game.zhajinhua.hand.waitingDeal`)})]}),(0,J.jsxs)(`div`,{className:q.panelSection,children:[(0,J.jsxs)(`div`,{className:q.panelTitle,children:[(0,J.jsx)(m,{size:16}),(0,J.jsx)(`span`,{children:e(`game.actions`)})]}),V?(0,J.jsxs)(`button`,{className:`btn btn-primary btn-full`,onClick:je,disabled:!Te||L?.status===`playing`,children:[(0,J.jsx)(ae,{size:16}),L?.status===`finished`?e(`game.action.nextRound`):e(`game.action.startRound`)]}):(0,J.jsx)(`p`,{className:q.muted,children:e(`game.waitingHost`)}),V&&L?.status===`finished`&&!Te&&(0,J.jsx)(`p`,{className:q.muted,children:e(`game.zhajinhua.error.tooManyLowChips`)}),(0,J.jsxs)(`div`,{className:q.actionGrid,children:[(0,J.jsxs)(`button`,{className:`btn btn-secondary`,disabled:!Z.includes(`look`),onClick:()=>$(`look`),children:[(0,J.jsx)(ne,{size:16}),e(`game.zhajinhua.action.look`)]}),(0,J.jsx)(`button`,{className:`btn btn-secondary`,disabled:!Z.includes(`call`),onClick:()=>$(`call`),children:e(`game.zhajinhua.action.call`)}),(0,J.jsx)(`button`,{className:`btn btn-secondary`,disabled:!Z.includes(`fold`),onClick:()=>$(`fold`),children:e(`game.zhajinhua.action.fold`)})]}),(0,J.jsxs)(`div`,{className:q.raiseRow,children:[(0,J.jsx)(`select`,{className:`input input-compact`,value:T,onChange:e=>E(Number(e.target.value)),children:oe.map(t=>(0,J.jsx)(`option`,{value:t,children:e(`game.zhajinhua.action.raiseOption`,{amount:t})},t))}),(0,J.jsx)(`button`,{className:`btn btn-secondary`,disabled:!Z.includes(`raise`),onClick:()=>$(`raise`,{amount:T}),children:e(`game.zhajinhua.action.raise`)})]}),(0,J.jsxs)(`div`,{className:q.raiseRow,children:[(0,J.jsxs)(`select`,{className:`input input-compact`,value:D,onChange:e=>O(e.target.value),children:[(0,J.jsx)(`option`,{value:``,children:e(`game.zhajinhua.action.comparePlaceholder`)}),Ne.map(e=>(0,J.jsx)(`option`,{value:e.address,children:e.name},e.address))]}),(0,J.jsx)(`button`,{className:`btn btn-secondary`,disabled:!Z.includes(`compare`)||!D,onClick:()=>$(`compare`,{target:D}),children:e(`game.zhajinhua.action.compare`)})]})]}),(0,J.jsxs)(`div`,{className:q.panelSection,children:[(0,J.jsx)(`div`,{className:q.panelTitle,children:e(`game.status.title`)}),(0,J.jsxs)(`div`,{className:q.statusGrid,children:[(0,J.jsx)(`span`,{children:e(`game.host`)}),(0,J.jsx)(`strong`,{children:R?be(R):`-`}),(0,J.jsx)(`span`,{children:e(`game.zhajinhua.myChips`)}),(0,J.jsx)(`strong`,{children:_e?.chips??1e3}),(0,J.jsx)(`span`,{children:e(`game.round`)}),(0,J.jsx)(`strong`,{children:Me}),(0,J.jsx)(`span`,{children:e(`game.hint`)}),(0,J.jsx)(`strong`,{children:L?.lastAction||e(`game.waitingPlayers`)})]})]})]})]}):(0,J.jsxs)(`section`,{className:q.entry,children:[(0,J.jsxs)(`div`,{className:q.entryBrand,children:[(0,J.jsx)(`div`,{className:q.cardMark,children:(0,J.jsx)(h,{size:48})}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h1`,{children:e(`game.zhajinhua.hero.title`)}),(0,J.jsx)(`p`,{children:e(`game.hero.desc`)})]})]}),(0,J.jsxs)(`div`,{className:q.entryPanel,children:[(0,J.jsxs)(`div`,{className:q.accountLine,children:[(0,J.jsx)(`span`,{children:e(`game.currentAccount`)}),(0,J.jsx)(`strong`,{translate:`no`,children:N.userIdentity?.displayName||e(`web3.notSignedIn`)})]}),(0,J.jsxs)(`button`,{className:`btn btn-primary`,disabled:N.joining,onClick:De,children:[(0,J.jsx)(m,{size:16}),e(`game.action.createRoom`)]}),(0,J.jsxs)(`form`,{onSubmit:Oe,className:q.joinForm,children:[(0,J.jsxs)(`label`,{children:[e(`game.roomCode`),(0,J.jsx)(`input`,{value:v,maxLength:8,onChange:e=>y(e.target.value.toUpperCase()),placeholder:e(`game.roomCode.placeholder`)})]}),(0,J.jsx)(`button`,{className:`btn`,disabled:N.joining||!v,children:e(`game.action.joinRoom`)})]}),(0,J.jsx)(`p`,{className:q.status,children:N.isBackendReady?e(`game.status.nodeConnected`):e(`game.status.nodeConnecting`)})]})]})})})}function Ce({lastCompare:e,compareReveal:t,myAddress:n,myDealtHand:r,lobbyPlayers:i,onClose:a}){let{t:o}=l(),s=Q(e.initiator,i),c=Q(e.target,i),u=Q(e.winner,i),d=X(n,e.initiator),f=X(n,e.target),p=d||f;function m(e,i){return t[e]||(p&&X(e,n)&&i&&r?r:null)}let g=m(e.initiator,e.initiatorLooked),_=m(e.target,e.targetLooked);return(0,J.jsx)(`div`,{className:q.compareOverlay,onClick:a,children:(0,J.jsxs)(`div`,{className:q.compareBox,onClick:e=>e.stopPropagation(),children:[(0,J.jsx)(`div`,{className:q.compareTitle,children:o(`game.zhajinhua.compareResult`)}),(0,J.jsxs)(`div`,{className:q.comparePlayers,children:[(0,J.jsxs)(`div`,{className:Y(q.compareSide,X(e.winner,e.initiator)&&q.compareWinner),children:[(0,J.jsx)(`div`,{className:q.compareName,children:s}),(0,J.jsx)(`div`,{className:q.compareCards,children:g?g.map(e=>{let t=Se(e);return(0,J.jsxs)(`div`,{className:Y(q.card,q[t.color]),children:[(0,J.jsx)(`span`,{children:t.rank}),(0,J.jsx)(`i`,{children:t.suit})]},e)}):[0,1,2].map(e=>(0,J.jsx)(`div`,{className:q.cardBack,children:(0,J.jsx)(h,{size:18})},e))}),g&&(0,J.jsx)(`div`,{className:q.compareLabel,children:de(g)})]}),(0,J.jsx)(`div`,{className:q.compareVs,children:`VS`}),(0,J.jsxs)(`div`,{className:Y(q.compareSide,X(e.winner,e.target)&&q.compareWinner),children:[(0,J.jsx)(`div`,{className:q.compareName,children:c}),(0,J.jsx)(`div`,{className:q.compareCards,children:_?_.map(e=>{let t=Se(e);return(0,J.jsxs)(`div`,{className:Y(q.card,q[t.color]),children:[(0,J.jsx)(`span`,{children:t.rank}),(0,J.jsx)(`i`,{children:t.suit})]},e)}):[0,1,2].map(e=>(0,J.jsx)(`div`,{className:q.cardBack,children:(0,J.jsx)(h,{size:18})},e))}),_&&(0,J.jsx)(`div`,{className:q.compareLabel,children:de(_)})]})]}),(0,J.jsx)(`div`,{className:q.compareResult,children:o(`game.zhajinhua.result.winner`,{player:u})}),(0,J.jsx)(`button`,{className:`btn btn-sm`,onClick:a,children:o(`common.close`)})]})})}function Q(e,t){let n=e.toLowerCase();return t.find(e=>e.address===n)?.name||be(e)}var we=i(`/game/zhajinhua/`)({component:Z});export{we as Route};
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{C as r,S as i,T as a,a as o,n as s,r as c,s as l,t as u}from"./ui-BpDGD3IR.js";import{a as d}from"./i18n-NjvOSuV6.js";import{t as ee}from"./arrow-right-BU9c_SL4.js";import{n as te,r as ne}from"./LanguageToggle-CSQtRZ3A.js";import{t as f}from"./circle-alert-iuHzciph.js";import{t as p}from"./download-jEPn2njL.js";import{t as m}from"./file-text-DPA1riJ_.js";import{a as h,i as g,n as re,r as ie,t as ae}from"./FilePreviewOverlay-D8H61qbp.js";import{t as oe}from"./loader-BXQtdens.js";import{i as se,n as ce,t as le}from"./SidebarHomeLink-BdsUM4Kt.js";import{t as ue}from"./message-square-Dp09WY1I.js";import{t as _}from"./music-B19Tg557.js";import{t as de}from"./OpenSidebarButton-DnEgqP0S.js";import{t as fe}from"./plus-4hygj-1Z.js";import{t as pe}from"./search-DSkiWdvX.js";import{t as me}from"./trash-2-V12tJ8lI.js";import{N as v,c as y,f as he,i as ge,l as _e}from"./index-BZ-f0CZd.js";import{t as ve}from"./format-CR8oUWq6.js";import{t as ye}from"./SidebarAccount-B4OAl0as.js";import{n as b,r as be,t as xe}from"./downloadValidation-DbVOwdmC.js";import{t as Se}from"./LogoIcon-B2fFe0l1.js";import{i as x,t as Ce}from"./userProfile-DBkH4s29.js";import{t as we}from"./useChannelMessages-B6RMaNDH.js";var Te=r(`calendar`,[[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`,key:`1hopcy`}],[`path`,{d:`M3 10h18`,key:`8toen8`}]]),Ee=r(`ellipsis`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]]),De=r(`hash`,[[`line`,{x1:`4`,x2:`20`,y1:`9`,y2:`9`,key:`4lhtct`}],[`line`,{x1:`4`,x2:`20`,y1:`15`,y2:`15`,key:`vyu0kd`}],[`line`,{x1:`10`,x2:`8`,y1:`3`,y2:`21`,key:`1ggp8o`}],[`line`,{x1:`16`,x2:`14`,y1:`3`,y2:`21`,key:`weycgp`}]]),Oe=r(`pin`,[[`path`,{d:`M12 17v5`,key:`bb1du9`}],[`path`,{d:`M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z`,key:`1nkz8b`}]]),S=r(`pin-off`,[[`path`,{d:`M12 17v5`,key:`bb1du9`}],[`path`,{d:`M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89`,key:`znwnzq`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11`,key:`c9qhm2`}]]),ke=r(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),C=t(e(),1),w=n();function Ae(e){return String(e||``).split(`/`).pop()||e}function je(e){return e===`image`?(0,w.jsx)(g,{size:20}):e===`video`?(0,w.jsx)(h,{size:20}):e===`audio`?(0,w.jsx)(_,{size:20}):(0,w.jsx)(m,{size:20})}function Me({attachment:e,status:t=`idle`,pending:n=!1,onOpen:r}){let{t:i}=d(),a=t===`checking`,o=`ui-file-action chat-attachment-action ${t===`error`?`error`:t===`available`?`available`:``}`.trim(),s=Number.isFinite(e.size)&&e.size>0?ve(e.size):i(`chat.mostboxFile`);return(0,w.jsxs)(`button`,{type:`button`,className:`ui-file-card chat-attachment-card`,onClick:()=>r?.(e),disabled:n||a,title:e.link,translate:`no`,children:[(0,w.jsx)(`span`,{className:`ui-file-icon chat-attachment-icon ${e.kind}`,children:a?(0,w.jsx)(oe,{size:20,className:`ui-spinner chat-attachment-spinner`}):je(e.kind)}),(0,w.jsxs)(`span`,{className:`ui-file-info chat-attachment-info`,children:[(0,w.jsx)(`span`,{className:`ui-file-name chat-attachment-name`,translate:`no`,children:Ae(e.fileName)}),(0,w.jsx)(`span`,{className:`ui-file-meta chat-attachment-meta`,translate:`yes`,children:n?i(`chat.sending`):s})]}),(0,w.jsx)(`span`,{className:o,translate:`yes`,children:a?i(`chat.checking`):t===`available`?(0,w.jsx)(v,{size:16}):t===`error`?(0,w.jsx)(f,{size:17}):(0,w.jsx)(p,{size:16})})]})}var T=[{key:`image`,labelKey:`chat.attachment.image`,accept:`image/*`,icon:g},{key:`video`,labelKey:`chat.attachment.video`,accept:`video/*`,icon:h},{key:`file`,labelKey:`chat.attachment.file`,accept:``,icon:m}],Ne=T.map(e=>e.accept).join(`,`);function Pe({children:e}){return(0,w.jsx)(`div`,{className:`message-bubble`,translate:`no`,children:e})}function Fe({children:e}){return(0,w.jsx)(`div`,{className:`message-bubble has-attachment`,children:e})}function Ie({variant:e,pending:t=!1,avatarSrc:n,author:r,time:i,children:a}){return(0,w.jsxs)(`div`,{className:[`chat-message`,e,t?`pending`:``].filter(Boolean).join(` `),children:[(0,w.jsx)(`img`,{className:`msg-avatar`,src:n,alt:`avatar`}),(0,w.jsxs)(`div`,{className:`msg-content`,children:[(0,w.jsx)(`span`,{className:`message-author`,translate:`no`,children:r}),a,(0,w.jsx)(`span`,{className:`message-time`,children:i})]})]})}function Le({active:e=!1,pinned:t=!1,unread:n=!1,title:r,onSelect:i,onTogglePin:a,onRename:o,onLeave:s}){let{t:c}=d(),l=!!(a||o||s);return(0,w.jsxs)(`div`,{className:[`sidebar-nav-btn`,e?`active`:``,t?`pinned`:``,n?`unread`:``].filter(Boolean).join(` `),onClick:i,role:`button`,tabIndex:0,onKeyDown:e=>{e.target===e.currentTarget&&e.key===`Enter`&&i?.()},children:[(0,w.jsxs)(`span`,{className:`chat-channel-icon-wrap`,children:[(0,w.jsx)(ue,{size:16}),n&&(0,w.jsx)(`span`,{className:`chat-channel-unread-dot`,title:c(`chat.unread`),"aria-hidden":`true`})]}),(0,w.jsx)(`span`,{className:`chat-channel-title`,children:(0,w.jsx)(`span`,{className:`chat-channel-title-text`,translate:`no`,children:r})}),l&&(0,w.jsx)(u,{ariaLabel:c(`chat.channelActions`),className:`channel-actions-anchor`,placement:`bottom-end`,items:[{key:`pin`,label:c(t?`chat.unpin`:`chat.pin`),icon:t?(0,w.jsx)(S,{size:16}):(0,w.jsx)(Oe,{size:16}),onSelect:()=>a?.()},{key:`rename`,label:c(`chat.rename`),icon:(0,w.jsx)(ie,{size:16}),onSelect:()=>o?.()},{key:`delete`,label:c(`chat.delete`),icon:(0,w.jsx)(me,{size:16}),onSelect:()=>s?.()}],renderTrigger:e=>(0,w.jsx)(`button`,{...e,className:`leave-channel-btn channel-actions-trigger`,title:c(`common.moreActions`),"aria-label":c(`common.moreActions`),children:(0,w.jsx)(Ee,{size:16})})})]})}function Re({members:e}){let{t}=d();return e.length===0?(0,w.jsx)(`div`,{className:`ui-empty-inline channel-members-empty`,children:t(`chat.noMembers`)}):(0,w.jsx)(`div`,{className:`channel-members-grid`,children:e.map(e=>(0,w.jsxs)(`div`,{className:`channel-member`,children:[(0,w.jsx)(`img`,{className:`channel-member-avatar`,src:e.avatarSrc,alt:`avatar`}),(0,w.jsx)(`span`,{className:`channel-member-name`,translate:`no`,children:e.name})]},e.id))})}function ze({message:e,placeholder:t,disabled:n=!1,isPublishingAttachment:r=!1,attachmentButtonTitle:i,attachmentInputRef:a,onMessageChange:o,onSend:s,onSelectAttachmentFiles:c}){let{t:l}=d(),te=n||r,ne=n||!e.trim(),f=i||l(`chat.attachment.add`);function p(e,t){t?.(e.currentTarget.files),e.currentTarget.value=``}function m(t){t.key===`Enter`&&e.trim()&&s()}function h(e){if(te)return;let t=a?.current;t&&(t.accept=e,t.click())}return(0,w.jsxs)(`div`,{className:`chat-input-area`,children:[(0,w.jsx)(`input`,{ref:a,type:`file`,accept:Ne,className:`chat-file-input`,onChange:e=>p(e,c)}),(0,w.jsx)(u,{ariaLabel:l(`chat.attachmentType`),placement:`top-start`,disabled:te,items:T.map(e=>{let t=e.icon;return{key:e.key,label:l(e.labelKey),icon:(0,w.jsx)(t,{size:16}),onSelect:()=>h(e.accept)}}),renderTrigger:e=>(0,w.jsx)(`button`,{...e,className:`btn btn-circle chat-tool-btn`,"aria-label":f,children:r?(0,w.jsx)(oe,{size:18,className:`ui-spinner chat-attachment-spinner`}):(0,w.jsx)(fe,{size:18})})}),(0,w.jsx)(`input`,{type:`text`,className:`input input-pill`,placeholder:t,value:e,disabled:n,onChange:e=>o(e.target.value),onKeyDown:m}),(0,w.jsx)(`button`,{type:`button`,className:`btn btn-circle btn-primary send-btn`,onClick:s,disabled:ne,title:l(`chat.sendMessage`),children:(0,w.jsx)(ee,{size:18})})]})}var E=`mostbox.chat.lastReadAt`;function D(e){return Date.parse(e?.lastMessageAt||``)||Date.parse(e?.createdAt||``)||0}function Be(e){let t=String(e||``).trim().toLowerCase();return t?`${E}:${t}`:``}function O(e,t=Date.now()){let n=Number(e);return Math.max(0,Math.floor(Number.isFinite(n)&&n>0?n:t))}function Ve(e,t=k()){if(!e||!t)return{};try{let n=t.getItem(e);if(!n)return{};let r=JSON.parse(n);return!r||typeof r!=`object`?{}:Object.entries(r).reduce((e,[t,n])=>{let r=Number(n);return t&&Number.isFinite(r)&&r>=0&&(e[t]=r),e},{})}catch{return{}}}function He(e,t,n=k()){if(!(!e||!n))try{n.setItem(e,JSON.stringify(t))}catch{}}function Ue(e,t,n=Date.now(),r=Date.now()){if(!t)return{changed:!1,value:e};let i=O(n,r);return(e[t]||0)>=i?{changed:!1,value:e}:{changed:!0,value:{...e,[t]:i}}}function We(e,t,n=Date.now()){let r=!1,i={...e};for(let e of t){let t=e?.channelKey||e?.name;!t||i[t]!==void 0||(i[t]=O(D(e),n),r=!0)}return{changed:r,value:r?i:e}}function Ge(e,{channelName:t,messageTime:n,activeChannelName:r=``,messageAuthor:i=``,userAddress:a=``,now:o=Date.now()}){if(!t)return{changed:!1,notify:!1,value:e};let s=O(n,o),c=t===r,l=String(i||``).toLowerCase()===String(a||``).toLowerCase();if(c||l)return{...Ue(e,t,s,o),notify:!1};let u=e[t]||0;if(u<s)return{changed:!1,notify:!0,value:e};let d=Math.max(0,s-1);return u===d?{changed:!1,notify:!0,value:e}:{changed:!0,notify:!0,value:{...e,[t]:d}}}function Ke(e,t){let n=e?.channelKey||e?.name;return D(e)>(t[n]||0)}function k(){if(!(typeof window>`u`))return window.localStorage}var qe=3,Je=30,Ye=/^[a-zA-Z0-9_-]+$/,Xe=1e4,Ze=12e3,Qe=1200;function A(e){return e?.channelKey||e?.name||``}function j(e){return e?.channelId||e?.name||``}function M(e){return e?.remark||j(e)}function $e(){return typeof window>`u`?``:(new URLSearchParams(window.location.search).get(`channel`)||``).trim()}var et=`chat-file`;function tt(e,t){return e.type.startsWith(`image/`)?`image`:e.type.startsWith(`video/`)?`video`:e.type.startsWith(`audio/`)?`audio`:e.type.startsWith(`text/`)?`text`:re(t)}function nt(e){return e?`${e.slice(0,6)}...${e.slice(-4)}`:`Unknown`}function rt(e){return/#[a-fA-F0-9]{4}$/.test(String(e||``).trim())}function it(){if(typeof window>`u`)return;let e=window;return e.AudioContext||e.webkitAudioContext}function at(){let e=y(e=>e.isDarkMode),t=y(e=>e.setIsDarkMode),n=y(e=>e.hasBackend),r=y(e=>e.addToast),a=y(e=>e.openConnectModal),u=l(e=>e.identity),ee=l(e=>e.openLoginModal),[f,p]=(0,C.useState)([]),[m,h]=(0,C.useState)(null),[g,_]=(0,C.useState)(``),[me,v]=(0,C.useState)(!1),[ve,Ee]=(0,C.useState)(``),[Oe,S]=(0,C.useState)(``),[je,T]=se(!1),[Ne,E]=(0,C.useState)(``),[O,k]=(0,C.useState)(!1),[at,ot]=(0,C.useState)(!1),[st,ct]=se(!1),[lt,N]=(0,C.useState)(null),[ut,dt]=(0,C.useState)(null),[ft,P]=(0,C.useState)(!1),[pt,mt]=(0,C.useState)(``),[ht,gt]=(0,C.useState)(!1),[_t,vt]=(0,C.useState)(null),[yt,bt]=(0,C.useState)(!1),[F,I]=(0,C.useState)({}),[L,R]=(0,C.useState)(null),[xt,St]=(0,C.useState)(!1),[Ct,wt]=(0,C.useState)(!1),[Tt,z]=(0,C.useState)({}),B=u?.identity===`user`,Et=B&&!Ct?u.logo:``,Dt=(0,C.useRef)(null),Ot=(0,C.useRef)(null),kt=(0,C.useRef)(``),At=(0,C.useRef)(new Set),jt=(0,C.useRef)(new Set),V=(0,C.useRef)(null),H=(0,C.useRef)(!1),Mt=(0,C.useRef)(0),U=(0,C.useRef)(new Map),W=(0,C.useRef)(new Set),G=n===!0,{t:K,compareStrings:Nt,formatDate:Pt,formatTime:Ft}=d(),q=(0,C.useCallback)(async(e,t)=>{r(await he(e,t),`error`)},[r]),J=(0,C.useMemo)(()=>Be(u?.address),[u?.address]),It=(0,C.useCallback)((e,t=Date.now())=>{e&&z(n=>{let r=Ue(n,e,t);return r.changed?(He(J,r.value),r.value):n})},[J]),Y=(0,C.useCallback)(()=>{if(H.current||typeof window>`u`)return;let e=it();if(e)try{let t=V.current||new e;V.current=t,t.state===`suspended`&&t.resume().catch(()=>{}),H.current=!0}catch{}},[]),Lt=(0,C.useCallback)(()=>{if(!H.current)return;let e=Date.now();if(e-Mt.current<Qe)return;Mt.current=e;let t=it();if(t)try{let e=V.current||new t;if(V.current=e,e.state===`suspended`){e.resume().catch(()=>{});return}let n=e.createGain();n.gain.setValueAtTime(1e-4,e.currentTime),n.gain.exponentialRampToValueAtTime(.08,e.currentTime+.015),n.gain.exponentialRampToValueAtTime(1e-4,e.currentTime+.18),n.connect(e.destination),[740,980].forEach((t,r)=>{let i=e.createOscillator();i.type=`sine`,i.frequency.setValueAtTime(t,e.currentTime),i.connect(n),i.start(e.currentTime+r*.035),i.stop(e.currentTime+.16+r*.035)})}catch{}},[]);function Rt(e,t){switch(e){case`channel:message`:{let e=t?.channelKey||t?.channel,n=t?.message,r=Number(n?.timestamp)||Date.now();if(e){p(t=>t.map(t=>A(t)===e?{...t,lastMessageAt:new Date(r).toISOString()}:t));let t=e===kt.current;z(i=>{let a=Ge(i,{channelName:e,messageTime:r,activeChannelName:t?e:``,messageAuthor:n?.author,userAddress:u?.address});return a.changed&&He(J,a.value),a.notify&&Lt(),a.changed?a.value:i})}break}case`channel:peer:online`:case`channel:peer:offline`:m&&x.getChannelPeers(A(m)).catch(e=>{console.warn(`[Chat] Failed to fetch peers on event:`,e.message)});break;case`channel:joined`:case`channel:left`:$();break;case`user:metadata:updated`:t?.scope===`channels`&&$();break;case`download:success`:{let e=U.current.get(t.taskId);e&&(U.current.delete(t.taskId),W.current.delete(e.cid),I(t=>({...t,[e.cid]:{status:`available`}})),r(K(`chat.attachment.downloadCompleted`,{fileName:t.fileName||Ae(e.fileName)}),`success`),Gt(e,t.fileName||e.fileName));break}case`download:error`:case`download:cancelled`:{let n=U.current.get(t.taskId);n&&(U.current.delete(t.taskId),W.current.delete(n.cid),I(r=>({...r,[n.cid]:{status:`error`,message:e===`download:cancelled`?K(`chat.attachment.downloadCancelled`):t.error||K(`chat.attachment.downloadFailed`)}})),r(e===`download:cancelled`?K(`chat.attachment.downloadCancelled`):t.error||K(`chat.attachment.downloadFailed`),`error`));break}}}let zt=(0,C.useMemo)(()=>f.map(e=>A(e)),[f]),{clearMessages:Bt,messages:X,sendMessage:Vt,syncMessages:Ht}=we({isReady:G,enabled:!!u,channelName:A(m),extraSubscribedChannelNames:zt,peerId:Ne,waitForPeerId:!0,onSyncError:e=>q(e,K(`chat.error.messages`)),onSocketEvent:Rt,onReconnect:$}),Ut=(0,C.useMemo)(()=>{let e=new Map;return X.forEach((t,n)=>{let r=String(t.author||``).trim();if(!r)return;let i=r.toLowerCase(),a=Number(t.timestamp)||0,o=String(t.authorName||``).trim(),s=String(t.avatar||``).trim(),c=e.get(i);if(!c){e.set(i,{address:r,displayName:o,...s?{avatar:s}:{},firstSeenAt:a,lastSeenAt:a,index:n});return}a>=c.lastSeenAt&&(c.lastSeenAt=a,o&&(c.displayName=o),s&&(c.avatar=s))}),[...e.values()].sort((e,t)=>e.firstSeenAt-t.firstSeenAt||e.index-t.index)},[X]);function Z(){return G?!0:(a(),!1)}function Q(){return u?!0:(ee(),!1)}(0,C.useEffect)(()=>{let e=()=>{_($e())};return e(),window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[]),(0,C.useEffect)(()=>{u&&_($e())},[u?.address]),(0,C.useEffect)(()=>{wt(!1)},[u?.logo]),(0,C.useEffect)(()=>{kt.current=A(m)},[m]),(0,C.useEffect)(()=>{z(Ve(J))},[J]),(0,C.useEffect)(()=>{!J||f.length===0||z(e=>{let t=We(e,f);return t.changed&&He(J,t.value),t.changed?t.value:e})},[J,f]),(0,C.useEffect)(()=>(window.addEventListener(`pointerdown`,Y,{passive:!0}),window.addEventListener(`keydown`,Y),()=>{window.removeEventListener(`pointerdown`,Y),window.removeEventListener(`keydown`,Y)}),[Y]),(0,C.useEffect)(()=>()=>{V.current?.close().catch(()=>{}),V.current=null,H.current=!1},[]),(0,C.useEffect)(()=>{Dt.current?.scrollIntoView({behavior:`smooth`})},[X]),(0,C.useEffect)(()=>{if(!G){E(``);return}_e.get(`/api/node-id`).json().then(e=>E(e.id)).catch(e=>{console.warn(`[Chat] Failed to fetch node ID:`,e.message),q(e,K(`chat.error.nodeId`))})},[G,q,K]),(0,C.useEffect)(()=>{G&&u?(v(!1),$()):v(!1)},[n,G,u?.address]),(0,C.useEffect)(()=>{if(m&&G){let e=A(m);Ht(e,{replace:!0}),x.getChannelPeers(e).catch(()=>{})}},[m,n,G,Ht]),(0,C.useEffect)(()=>{if(!g)return;if(!u){jt.current.has(g)||(jt.current.add(g),ee());return}if(!G||!me)return;let e=f.find(e=>A(e)===g)||f.find(e=>j(e)===g);if(e&&(!m||A(m)!==A(e))){Yt(e);return}if(e&&m&&A(m)===A(e)&&(m.createdAt!==e.createdAt||m.coreKey!==e.coreKey||m.lastMessageAt!==e.lastMessageAt||m.pinned!==e.pinned||m.remark!==e.remark||m.type!==e.type)){h(e);return}if(e)return;let t=`${u.address}:${g}`;if(At.current.has(t)||O)return;let n=Wt(g);if(At.current.add(t),n){r(n,`error`);return}Qt(g)},[f,m,g,me,G,O,u?.address]),(0,C.useEffect)(()=>{u||(p([]),v(!1),h(null),_($e()),dt(null),Bt(),S(``),E(``),P(!1),vt(null),I({}),z({}),W.current.clear(),U.current.clear())},[Bt,u?.address]);function Wt(e){return e.length<qe?K(`chat.validation.nameMin`,{count:qe}):e.length>Je?K(`chat.validation.nameMax`,{count:Je}):e.includes(`.`)?K(`chat.validation.dotReserved`):Ye.test(e)?``:K(`chat.validation.allowedChars`)}async function $(){if(!G){v(!1);return}try{p(await x.getChannels()),v(!0)}catch(e){p([]),v(!1),await q(e,K(`chat.error.channelList`))}}function Gt(e,t=e.fileName){let n=re(t);vt({cid:e.cid,fileName:t,subtype:n===`file`?e.kind:n})}async function Kt(e){let t=xe(e.link,K);if(t)return I(n=>({...n,[e.cid]:{status:`error`,message:t}})),!1;try{I(t=>({...t,[e.cid]:{status:`checking`}}));let t=await b.checkDownload(e.link,{timeout:Xe,requestTimeout:Ze});return I(n=>({...n,[e.cid]:{status:`available`,message:t.alreadyExists?K(`chat.attachment.localAvailable`):K(`chat.attachment.previewAvailable`)}})),!0}catch(t){let n=await be(t);return I(t=>({...t,[e.cid]:{status:`error`,message:n}})),!1}}async function qt(e){R(null),await Kt(e)&&await Jt(e)}async function Jt(e){if(!W.current.has(e.cid)){W.current.add(e.cid),I(t=>({...t,[e.cid]:{status:`available`}}));try{let t=await b.downloadFile(e.link);if(t.alreadyExists||t.fileName){W.current.delete(e.cid),I(t=>({...t,[e.cid]:{status:`available`}})),Gt({...e,fileName:t.fileName||e.fileName},t.fileName||e.fileName);return}t.taskId&&(U.current.set(t.taskId,e),r(K(`chat.attachment.downloadStarted`),`success`))}catch(t){let n=await be(t);W.current.delete(e.cid),I(t=>({...t,[e.cid]:{status:`error`,message:n}}))}}}async function Yt(e){if(!Q()||!Z())return;let t=A(e);It(t,Math.max(D(e),Date.now())),h(e),_(t),window.history.pushState({},``,`?channel=${encodeURIComponent(t)}`)}async function Xt(e,t){if(t&&t.stopPropagation(),Q()&&Z()&&!at){ot(!0);try{if(await x.leaveChannel(e),A(m)===e){h(null),_(``),Bt();let e=new URL(window.location.href);e.searchParams.delete(`channel`),window.history.pushState({},``,e.pathname)}$(),ct.close(),N(null)}catch(e){await q(e,K(`chat.error.leave`))}finally{ot(!1)}}}async function Zt(e){if(!Q()||!Z())return;let t=!e.pinned,n=A(e);try{let e=await x.setChannelPinned(n,t);p(t=>t.map(t=>A(t)===n?{...t,pinned:e.pinned}:t)),h(t=>t&&A(t)===n?{...t,pinned:e.pinned}:t)}catch(e){await q(e,K(t?`chat.error.pin`:`chat.error.unpin`))}}async function Qt(e){let t=e.trim();if(!t||O)return;let n=Wt(t);if(n){r(n,`error`);return}if(Q()&&Z()){k(!0);try{let e=await x.createChannel(t,`public`,Ce(u)),n=e.channelKey||e.key||e.name||t,r=f.find(e=>A(e)===n),i={...r,name:e.name||t,channelId:e.channelId||e.name||t,channelKey:e.channelKey||e.key||r?.channelKey,type:e.type||r?.type||`public`,createdAt:e.createdAt||r?.createdAt,coreKey:e.coreKey||e.key||r?.coreKey,localWriterCoreKey:e.localWriterCoreKey||r?.localWriterCoreKey,writerCoreKeys:e.writerCoreKeys||r?.writerCoreKeys,remark:e.remark||r?.remark},a=A(i);p(e=>e.some(e=>A(e)===a)?e.map(e=>A(e)===a?{...e,...i}:e):[...e,i]),T.close(),await Yt(i),$()}catch(e){await q(e,K(`chat.error.join`))}finally{k(!1)}}}async function $t(e,t){if(!e.trim()||!m||!Q()||!Z())return!1;let n=e.trim(),r=A(m);try{let e=await Vt({channelName:r,content:n,attachment:t});return p(t=>t.map(t=>A(t)===r?{...t,lastMessageAt:new Date(Number(e?.timestamp)||Date.now()).toISOString()}:t)),e&&It(r,Number(e.timestamp)||Date.now()),!0}catch(e){return await q(e,K(`chat.error.send`)),!1}}async function en(){if(!Oe.trim())return;let e=Oe.trim();S(``),await $t(e)}function tn(e,t){return`${et}/${e}/${t}`}async function nn(e){if(!(!e||e.length===0||!m)&&Q()&&Z()&&!yt){bt(!0);try{for(let t of Array.from(e)){let e=tn(j(m),t.name),n=await b.publishFile(t,e),i=n.fileName||e,a=n.link||`most://${n.cid}?filename=${encodeURIComponent(i)}`;await $t(a,{kind:tt(t,i),cid:n.cid,fileName:i,link:a,mimeType:t.type||void 0,size:t.size})&&r(K(`chat.attachment.published`,{fileName:Ae(i)}),`success`)}}catch(e){await q(e,K(`chat.error.attachmentSend`))}finally{bt(!1)}}}async function rn(e){if(!Q()||!Z())return;let t=F[e.cid];if(t?.status!==`checking`){if(t?.status===`error`){R(e);return}if(t?.status!==`available`){await Kt(e)&&await Jt(e);return}await Jt(e)}}async function an(e,t){if(!Q()||!Z())return;let n=A(e),r=await x.setChannelRemark(n,t);return p(e=>e.map(e=>A(e)===n?{...e,remark:r.remark}:e)),h(e=>e&&A(e)===n?{...e,remark:r.remark}:e),r.remark}async function on(){if(m)try{await an(m,pt)}catch(e){await q(e,K(`chat.error.remark`))}}async function sn(e){if(!(!ut||ht)){gt(!0);try{await an(ut,e),dt(null)}catch(e){await q(e,K(`chat.error.rename`))}finally{gt(!1)}}}function cn(e){if(!e.attachment)return(0,w.jsx)(Pe,{children:e.content});let t=e.attachment,n=F[t.cid]?.status;return(0,w.jsx)(Fe,{children:(0,w.jsx)(Me,{attachment:t,status:n,pending:e.pending,onOpen:rn})})}function ln(e,t){let n=String(e||``).trim();return n?xt?rt(n)?n:t?`${n}#${t.slice(-4).toUpperCase()}`:n:n.replace(/#[a-fA-F0-9]{4}$/,``):nt(t)}function un(){return(0,w.jsx)(Re,{members:Ut.map(e=>({id:e.address,name:ln(e.displayName,e.address),avatarSrc:ge(e.address,e.avatar)}))})}let dn=B&&!!g&&!m,fn=m?(0,w.jsx)(`h2`,{className:`header-title`,translate:`no`,children:M(m)}):(0,w.jsx)(`h2`,{className:`header-title`,children:K(`chat.title`)}),pn=ve.trim().toLowerCase(),mn=(0,C.useMemo)(()=>[...f].sort((e,t)=>{let n=Number(!!t.pinned)-Number(!!e.pinned);if(n!==0)return n;let r=D(t)-D(e);return r===0?Nt(M(e),M(t)):r}),[f,Nt]),hn=pn?mn.filter(e=>[M(e),j(e),A(e)].some(e=>e.toLowerCase().includes(pn))):mn;return(0,w.jsxs)(ce,{className:`chat-app-layout`,defaultHide:B,sidebar:({closeSidebar:e})=>(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(le,{onNavigate:e}),(0,w.jsx)(`div`,{className:`chat-channel-search`,children:(0,w.jsxs)(`div`,{className:`ui-input-control`,children:[(0,w.jsx)(pe,{className:`ui-input-icon`,size:15}),(0,w.jsx)(`input`,{type:`search`,className:`input input-compact`,placeholder:K(`chat.search.placeholder`),value:ve,onChange:e=>Ee(e.target.value),"aria-label":K(`chat.search.placeholder`)})]})}),(0,w.jsx)(`nav`,{className:`sidebar-nav`,children:f.length===0?(0,w.jsx)(`div`,{className:`sidebar-empty-state`,children:(0,w.jsx)(`p`,{children:K(`chat.empty.noChannels`)})}):hn.length===0?(0,w.jsx)(`div`,{className:`sidebar-empty-state`,children:(0,w.jsx)(`p`,{children:K(`chat.empty.noMatches`)})}):hn.map(t=>(0,w.jsx)(Le,{active:A(m)===A(t),pinned:!!t.pinned,unread:Ke(t,Tt),title:M(t),onSelect:()=>{Yt(t),e()},onTogglePin:()=>void Zt(t),onRename:()=>dt(t),onLeave:()=>{N(t),ct.open()}},A(t)))}),(0,w.jsxs)(`button`,{className:`ui-action-dashed create-channel-btn`,onClick:()=>{!Q()||!Z()||T.open()},children:[(0,w.jsx)(fe,{size:16}),K(`chat.joinChannel`)]}),(0,w.jsx)(ye,{})]}),headerTitle:fn,sidebarToggleReplacement:B?(0,w.jsx)(`span`,{className:`sidebar-toggle-static-logo`,"aria-hidden":`true`,children:Et?(0,w.jsx)(`img`,{className:`sidebar-toggle-static-logo-img`,src:Et,alt:``,onError:()=>wt(!0)}):(0,w.jsx)(Se,{size:18})}):void 0,headerRight:(0,w.jsxs)(`div`,{className:`header-right-actions`,children:[(0,w.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>t(!e),title:K(`common.theme.toggle`),children:e?(0,w.jsx)(te,{size:16}):(0,w.jsx)(ne,{size:16})}),m&&(0,w.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>P(!0),title:K(`chat.channelSettings`),children:(0,w.jsx)(ke,{size:16})})]}),children:[m?(0,w.jsxs)(w.Fragment,{children:[(0,w.jsxs)(`div`,{className:`chat-messages`,children:[X.length===0?(0,w.jsxs)(`div`,{className:`ui-empty-state chat-messages-empty`,children:[(0,w.jsx)(`div`,{className:`ui-empty-icon empty-icon`,children:(0,w.jsx)(ue,{size:28})}),(0,w.jsx)(`p`,{children:K(`chat.empty.noMessages`)})]}):X.map(e=>{let t=e.author?.toLowerCase()===u?.address.toLowerCase();return(0,w.jsx)(Ie,{variant:t?`self`:`other`,pending:e.pending,avatarSrc:ge(e.author,e.avatar||(t?u.avatar:void 0)),author:ln(e.authorName,e.author),time:Ft(e.timestamp),children:cn(e)},e.id||`${e.author}-${e.timestamp}`)}),(0,w.jsx)(`div`,{ref:Dt})]}),(0,w.jsx)(ze,{message:Oe,placeholder:K(u?`chat.composer.placeholder`:`chat.composer.signInPlaceholder`),disabled:!u,isPublishingAttachment:yt,attachmentInputRef:Ot,onMessageChange:S,onSend:en,onSelectAttachmentFiles:e=>{nn(e)}})]}):dn?(0,w.jsxs)(`div`,{className:`ui-empty-state chat-welcome`,children:[(0,w.jsx)(`div`,{className:`ui-empty-icon ui-empty-icon-lg welcome-icon`,children:(0,w.jsx)(oe,{size:36,className:`ui-spinner`})}),(0,w.jsx)(`h2`,{className:`ui-empty-title`,children:K(`chat.restoring.title`)}),(0,w.jsx)(`p`,{className:`ui-empty-desc`,children:K(`chat.restoring.desc`)})]}):(0,w.jsx)(w.Fragment,{children:(0,w.jsxs)(`div`,{className:`ui-empty-state chat-welcome`,children:[(0,w.jsx)(`div`,{className:`ui-empty-icon ui-empty-icon-lg welcome-icon`,children:(0,w.jsx)(ue,{size:36})}),(0,w.jsx)(`h2`,{className:`ui-empty-title`,children:K(`chat.select.title`)}),(0,w.jsx)(`p`,{className:`ui-empty-desc`,children:K(`chat.select.desc`)}),(0,w.jsx)(de,{label:K(`chat.openChannelList`)})]})}),je&&(0,w.jsx)(s,{title:K(`chat.joinChannel`),placeholder:K(`chat.join.placeholder`),confirmText:K(`chat.join.confirm`),validate:Wt,onConfirm:Qt,onClose:()=>T.close(),isLoading:O,loadingText:K(`chat.join.joining`)}),ut&&(0,w.jsx)(s,{title:K(`chat.renameChannel`),placeholder:K(`chat.remark.placeholder`),defaultValue:ut.remark||``,confirmText:K(`chat.remark.save`),onConfirm:sn,onClose:()=>{ht||dt(null)},isLoading:ht,loadingText:K(`chat.remark.saving`),allowEmpty:!0,validate:e=>e.length>50?K(`chat.remark.tooLong`):``}),st&&lt&&(0,w.jsx)(c,{title:K(`chat.leaveChannel`),message:K(`chat.leaveConfirm`,{channel:M(lt)}),confirmText:K(at?`chat.leaving`:`chat.leaveChannel`),onConfirm:()=>Xt(A(lt),void 0),danger:!0,onClose:()=>{ct.close(),N(null)}}),L&&(0,w.jsx)(o,{onClose:()=>R(null),children:(0,w.jsxs)(`div`,{className:`confirm-modal`,onClick:e=>e.stopPropagation(),children:[(0,w.jsxs)(`div`,{className:`modal-header`,children:[(0,w.jsx)(`h3`,{children:K(`chat.attachment.noSeedsTitle`)}),(0,w.jsx)(`button`,{type:`button`,className:`btn btn-icon`,onClick:()=>R(null),"aria-label":K(`common.close`),children:(0,w.jsx)(i,{size:18})})]}),(0,w.jsx)(`p`,{children:F[L.cid]?.message||K(`chat.attachment.noSeedsFallback`)}),(0,w.jsxs)(`div`,{className:`modal-actions`,children:[(0,w.jsx)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:()=>R(null),children:K(`common.cancel`)}),(0,w.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>qt(L),disabled:F[L.cid]?.status===`checking`,children:F[L.cid]?.status===`checking`?K(`app.checking`):K(`chat.attachment.retryCheck`)})]})]})}),_t&&(0,w.jsx)(ae,{item:_t,isBackendReady:G,getFileDownloadUrl:b.getFileDownloadUrl,onClose:()=>vt(null)}),ft&&m&&(0,w.jsx)(`div`,{className:`channel-detail-overlay`,onClick:()=>P(!1),children:(0,w.jsxs)(`div`,{className:`channel-detail-drawer`,onClick:e=>e.stopPropagation(),children:[(0,w.jsxs)(`div`,{className:`channel-detail-header`,children:[(0,w.jsx)(`h3`,{children:K(`chat.details.title`)}),(0,w.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>P(!1),children:(0,w.jsx)(i,{size:18})})]}),(0,w.jsxs)(`div`,{className:`channel-detail-body`,children:[(0,w.jsxs)(`div`,{className:`channel-detail-section channel-members-section`,children:[(0,w.jsx)(`div`,{className:`channel-detail-label`,children:(0,w.jsx)(`span`,{children:K(`chat.details.members`,{count:Ut.length})})}),un()]}),!B&&(0,w.jsx)(`div`,{className:`channel-detail-section`,children:(0,w.jsxs)(`label`,{className:`setting-switch`,children:[(0,w.jsx)(`span`,{children:K(`chat.details.showAddressSuffix`)}),(0,w.jsx)(`input`,{type:`checkbox`,checked:xt,onChange:e=>St(e.target.checked)})]})}),!B&&(0,w.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,w.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,w.jsx)(De,{size:14}),(0,w.jsx)(`span`,{children:K(`chat.details.channelId`)})]}),(0,w.jsx)(`div`,{className:`ui-meta-box channel-detail-value channel-detail-mono`,translate:`no`,children:j(m)})]}),(0,w.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,w.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,w.jsx)(ie,{size:14}),(0,w.jsx)(`span`,{children:K(`chat.remark.placeholder`)})]}),(0,w.jsx)(`input`,{type:`text`,className:`input input-compact`,placeholder:K(`chat.remark.placeholder`),value:pt,onChange:e=>mt(e.target.value),onFocus:()=>mt(m.remark||``),onBlur:()=>on(),onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur()},maxLength:50})]}),(0,w.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,w.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,w.jsx)(Te,{size:14}),(0,w.jsx)(`span`,{children:K(`chat.channel.createdAt`)})]}),(0,w.jsx)(`div`,{className:`ui-meta-box channel-detail-value`,children:m.createdAt?Pt(m.createdAt):`-`})]})]}),!B&&(0,w.jsx)(`div`,{className:`channel-detail-footer`,children:(0,w.jsx)(`button`,{className:`btn btn-secondary btn-block`,onClick:()=>{P(!1),N(m),ct.open()},children:K(`chat.leaveChannel`)})})]})})]})}var ot=a(`/chat/`)({component:at});export{ot as Route};
@@ -1,3 +0,0 @@
1
- import{n as e,o as t}from"./jsx-runtime-Bt-cYkS5.js";import{s as n}from"./ui-BpDGD3IR.js";import{g as r}from"./index-BZ-f0CZd.js";import{i,r as a}from"./userProfile-DBkH4s29.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
- `)}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 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};