most-box 0.2.6 → 0.2.7

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 (106) hide show
  1. package/README.md +6 -0
  2. package/electron/updateChecker.js +10 -31
  3. package/electron/updateChecker.test.js +43 -0
  4. package/out/admin/index.html +0 -0
  5. package/out/app/index.html +0 -0
  6. package/out/assets/{FilePreviewOverlay-DqH7uKb7.js → FilePreviewOverlay-CW8lKJCw.js} +1 -1
  7. package/out/assets/{LanguageToggle-BoBNesNU.js → LanguageToggle-Cfh33R2h.js} +1 -1
  8. package/out/assets/{MarketingHeader-Derv67Vs.js → MarketingHeader-BKBngzf5.js} +1 -1
  9. package/out/assets/MarketingLayout-C3xrXmfU.js +1 -0
  10. package/out/assets/{MarketingThemeToggle-BLuQ_uE-.js → MarketingThemeToggle-Cl7PhFgv.js} +1 -1
  11. package/out/assets/{MilkdownEditor-f2vRIY21.js → MilkdownEditor-B5SKAyjg.js} +1 -1
  12. package/out/assets/{OpenSidebarButton-BKX4B_yG.js → OpenSidebarButton-Bdx86oG8.js} +1 -1
  13. package/out/assets/{SidebarAccount-D6wj_ijc.js → SidebarAccount-c8jirEMF.js} +1 -1
  14. package/out/assets/{SidebarHomeLink-ByOHwlH8.js → SidebarHomeLink-LzYXrJRr.js} +1 -1
  15. package/out/assets/arrow-right-BC_GWahx.js +1 -0
  16. package/out/assets/{circle-alert-Dyc-4wje.js → circle-alert-Dkgyw_GE.js} +1 -1
  17. package/out/assets/{copy-D8HSH5Ki.js → copy-KIwotKoP.js} +1 -1
  18. package/out/assets/{download-Q6jKMPIG.js → download-DPA-3LpR.js} +1 -1
  19. package/out/assets/{downloadValidation-B-w8D_0W.js → downloadValidation-CH8BeY7_.js} +1 -1
  20. package/out/assets/{external-link-GQcZwDTT.js → external-link-BmR2rZ80.js} +1 -1
  21. package/out/assets/{file-text-CVl5SZPJ.js → file-text-BJQfDW9r.js} +1 -1
  22. package/out/assets/{folder-BtIdk-YN.js → folder-Gb80aQnO.js} +1 -1
  23. package/out/assets/{hard-drive-Cew_LD0N.js → hard-drive-P2dGA7FX.js} +1 -1
  24. package/out/assets/i18n-Cqyi6NZb.js +1 -0
  25. package/out/assets/index-CSBg7dZN.css +1 -0
  26. package/out/assets/index-CiHRnvMj.js +31 -0
  27. package/out/assets/index.lazy-B7u3Ztoe.js +1 -0
  28. package/out/assets/index.lazy-BdOfbfjo.js +2 -0
  29. package/out/assets/index.lazy-Bh4jDrUl.js +1 -0
  30. package/out/assets/{index.lazy-Bn4kDToA.js → index.lazy-Bo6McUf1.js} +1 -1
  31. package/out/assets/index.lazy-BxUje7fk.js +1 -0
  32. package/out/assets/{index.lazy-WXDn5r_l.js → index.lazy-CIqPn0cy.js} +1 -1
  33. package/out/assets/index.lazy-CfuoMz6P.js +1 -0
  34. package/out/assets/{index.lazy-DujygWms.js → index.lazy-DAKkwnV2.js} +1 -1
  35. package/out/assets/index.lazy-DRaxm9OS.js +1 -0
  36. package/out/assets/index.lazy-DkrwcEBu.js +2 -0
  37. package/out/assets/{index.lazy-DxAGUwlf.js → index.lazy-K6IB-5kb.js} +1 -1
  38. package/out/assets/{index.lazy-CLYRM_kh.js → index.lazy-Uu9DCtrI.js} +1 -1
  39. package/out/assets/{index.lazy-BqHgW5fE.js → index.lazy-mXESMo49.js} +1 -1
  40. package/out/assets/{key-round-D1zfZzvP.js → key-round-DvpIlAJY.js} +1 -1
  41. package/out/assets/{loader-BSclU8WE.js → loader-8eVY8_SD.js} +1 -1
  42. package/out/assets/{lock-C9VP0ezG.js → lock-Cvtl60UJ.js} +1 -1
  43. package/out/assets/{message-square-Dg3YjjmO.js → message-square-JK7ABH3O.js} +1 -1
  44. package/out/assets/{mp-FQvFEcYM.js → mp-CMvgV1-c.js} +1 -1
  45. package/out/assets/{music-BeCPak70.js → music-YRSH1Jq6.js} +1 -1
  46. package/out/assets/{notebook-pen-DO1CJiqn.js → notebook-pen-BjGx0coX.js} +1 -1
  47. package/out/assets/play-Ds19moWN.js +1 -0
  48. package/out/assets/plus-CvGkRhJV.js +1 -0
  49. package/out/assets/{save-BVeMjaW1.js → save-BcI68ZgS.js} +1 -1
  50. package/out/assets/search-BIa4RSPA.js +1 -0
  51. package/out/assets/{send-C1J-eGNs.js → send-_ups0_3f.js} +1 -1
  52. package/out/assets/{shield-check-CZYDVJoh.js → shield-check-Dzw5rdPe.js} +1 -1
  53. package/out/assets/smartphone-DSQ5L_sr.js +1 -0
  54. package/out/assets/{trash-2-C_LtCiNh.js → trash-2-BIrBn6Ce.js} +1 -1
  55. package/out/assets/{triangle-alert-DOwc-41Y.js → triangle-alert-CgWIEl4u.js} +1 -1
  56. package/out/assets/{ui-PnUvY9zL.js → ui-u9yJHkb-.js} +1 -1
  57. package/out/assets/{upload-DgxxldtV.js → upload-1jmNeGjH.js} +1 -1
  58. package/out/assets/{useChannelMessages-CZHmH5n-.js → useChannelMessages-DNxfCew-.js} +1 -1
  59. package/out/assets/useGameRoom-Du07VEgb.js +1 -0
  60. package/out/assets/userProfile-CL1Ev2GK.js +1 -0
  61. package/out/assets/{wallet-DBTWBi6K.js → wallet-BvM_X5nW.js} +1 -1
  62. package/out/assets/{wifi-pP6SJLcu.js → wifi-66t1dsgC.js} +1 -1
  63. package/out/chat/index.html +0 -0
  64. package/out/chat/join/index.html +0 -0
  65. package/out/download/index.html +2 -2
  66. package/out/game/gandengyan/index.html +0 -0
  67. package/out/game/index.html +0 -0
  68. package/out/game/zhajinhua/index.html +0 -0
  69. package/out/index.html +2 -2
  70. package/out/note/index.html +0 -0
  71. package/out/ping/index.html +2 -2
  72. package/out/profile/index.html +0 -0
  73. package/out/web3/index.html +0 -0
  74. package/package.json +5 -1
  75. package/server/src/core/channelIdentity.js +3 -5
  76. package/server/src/core/gameRoom.js +18 -43
  77. package/server/src/core/ownerMetadata.js +3 -4
  78. package/server/src/core/releaseManifest.js +108 -0
  79. package/server/src/core/shared.js +50 -0
  80. package/server/src/core/zhajinhua.js +12 -33
  81. package/server/src/games/gandengyan.js +7 -14
  82. package/server/src/http/nodeStatus.js +0 -6
  83. package/server/src/http/routes/channelRoutes.js +1 -13
  84. package/server/src/http/routes/nodeRoutes.js +1 -1
  85. package/server/src/index.js +44 -14
  86. package/server/src/utils/api.js +47 -0
  87. package/server/src/utils/auth.js +2 -5
  88. package/server/src/utils/dateTime.js +1 -3
  89. package/out/assets/MarketingLayout-fc2mymJm.js +0 -1
  90. package/out/assets/arrow-right-BCi9KXDX.js +0 -1
  91. package/out/assets/cloud-DfaFxhLj.js +0 -1
  92. package/out/assets/i18n--maTEG0d.js +0 -1
  93. package/out/assets/index-B2-kpfu5.css +0 -1
  94. package/out/assets/index-Cg4kEvx8.js +0 -31
  95. package/out/assets/index.lazy-BAq__8ON.js +0 -2
  96. package/out/assets/index.lazy-BPh8D_H9.js +0 -1
  97. package/out/assets/index.lazy-CMSCQucz.js +0 -1
  98. package/out/assets/index.lazy-Cut4XkPH.js +0 -1
  99. package/out/assets/index.lazy-DKOSJyaQ.js +0 -2
  100. package/out/assets/index.lazy-DjPbRI_L.js +0 -1
  101. package/out/assets/index.lazy-ghLI7p1x.js +0 -1
  102. package/out/assets/play-CnhsLC5C.js +0 -1
  103. package/out/assets/plus-BpjwXzbO.js +0 -1
  104. package/out/assets/search-CsAnnJyH.js +0 -1
  105. package/out/assets/useGameRoom-B8Ds_PKe.js +0 -1
  106. package/out/assets/userProfile-CRGZ8PUF.js +0 -1
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MilkdownEditor-f2vRIY21.js","assets/jsx-runtime-Bt-cYkS5.js","assets/index-Cg4kEvx8.js","assets/ui-PnUvY9zL.js","assets/useNavigate-DWlBD_-b.js","assets/i18n--maTEG0d.js","assets/index-B2-kpfu5.css","assets/dist-zyJb88Zz.js","assets/dist-CbTzBiwL.js"])))=>i.map(i=>d[i]);
2
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{C as r,E as i,a as ee,c as a,m as o,n as s,p as c,r as l,w as u}from"./ui-PnUvY9zL.js";import{n as d}from"./useNavigate-DWlBD_-b.js";import{a as f}from"./i18n--maTEG0d.js";import{a as te,r as p}from"./LanguageToggle-BoBNesNU.js";import{n as m,t as h}from"./lock-C9VP0ezG.js";import{n as g,t as ne}from"./folder-BtIdk-YN.js";import{t as re}from"./file-text-CVl5SZPJ.js";import{n as _,t as v}from"./SidebarHomeLink-ByOHwlH8.js";import{t as y}from"./notebook-pen-DO1CJiqn.js";import{t as ie}from"./OpenSidebarButton-BKX4B_yG.js";import{t as ae}from"./plus-BpjwXzbO.js";import{t as b}from"./save-BVeMjaW1.js";import{t as oe}from"./search-CsAnnJyH.js";import{t as se}from"./trash-2-C_LtCiNh.js";import{A as ce,E as le,S as x,b as ue,c as S,t as de,x as fe}from"./index-Cg4kEvx8.js";import{t as C}from"./SidebarAccount-D6wj_ijc.js";var pe=u(`move`,[[`path`,{d:`M12 2v20`,key:`t6zp3m`}],[`path`,{d:`m15 19-3 3-3-3`,key:`11eu04`}],[`path`,{d:`m19 9 3 3-3 3`,key:`1mg7y2`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}],[`path`,{d:`m5 9-3 3 3 3`,key:`j64kie`}],[`path`,{d:`m9 5 3-3 3 3`,key:`l8vdw6`}]]),me=u(`pencil-ruler`,[[`path`,{d:`M13 7 8.7 2.7a2.41 2.41 0 0 0-3.4 0L2.7 5.3a2.41 2.41 0 0 0 0 3.4L7 13`,key:`orapub`}],[`path`,{d:`m8 6 2-2`,key:`115y1s`}],[`path`,{d:`m18 16 2-2`,key:`ee94s4`}],[`path`,{d:`m17 11 4.3 4.3c.94.94.94 2.46 0 3.4l-2.6 2.6c-.94.94-2.46.94-3.4 0L11 17`,key:`cfq27r`}],[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]),w=t(e(),1),T=n();function he(e){return e.type===`directory`?x(e.path?`${e.path}/${e.name}`:e.name):fe(e)}function ge({target:e,directories:t,onMove:n,onClose:i}){let{t:a}=f(),o=x(e.path||``),s=he(e),c=t.filter(t=>e.type===`directory`?t.path!==s&&!t.path.startsWith(`${s}/`):!0),[l,u]=(0,w.useState)(o),[d,te]=(0,w.useState)(``),[p,h]=(0,w.useState)(new Set),re=x(d),_=d.trim()?re:l,v=x(_)===o,y=new Map;for(let e of c){let t=y.get(e.parentPath)||[];t.push(e),y.set(e.parentPath,t)}let ie=c.filter(e=>{if(!e.parentPath)return!0;let t=e.parentPath.split(`/`).filter(Boolean);return t.every((e,n)=>p.has(t.slice(0,n+1).join(`/`)))}),ae=[{label:a(`note.root`),path:``},...l.split(`/`).filter(Boolean).map((e,t,n)=>({label:e,path:n.slice(0,t+1).join(`/`)}))];function b(e){u(x(e)),te(``)}function oe(e){b(e),y.has(e)&&h(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}function se(){v||n(_)}return(0,T.jsx)(ee,{onClose:i,children:(0,T.jsxs)(`div`,{className:`note-move-modal`,onClick:e=>e.stopPropagation(),children:[(0,T.jsxs)(`div`,{className:`modal-header`,children:[(0,T.jsx)(`h3`,{children:a(`note.move.title`)}),(0,T.jsx)(`button`,{className:`btn btn-icon`,onClick:i,children:(0,T.jsx)(r,{size:18})})]}),(0,T.jsxs)(`div`,{className:`note-move-target`,children:[(0,T.jsx)(`span`,{children:a(`note.move.moving`)}),(0,T.jsx)(`strong`,{translate:`no`,children:e.name})]}),(0,T.jsx)(`div`,{className:`note-move-path`,children:ae.map((e,t)=>(0,T.jsxs)(w.Fragment,{children:[t>0&&(0,T.jsx)(`span`,{children:`/`}),(0,T.jsx)(`button`,{type:`button`,onClick:()=>b(e.path),children:(0,T.jsx)(`span`,{translate:e.path?`no`:`yes`,children:e.label})})]},e.path||`root`))}),(0,T.jsxs)(`div`,{className:`note-move-folder-list`,children:[(0,T.jsxs)(`button`,{type:`button`,className:`note-move-folder-item ${l===``?`selected`:``}`,onClick:()=>b(``),children:[(0,T.jsx)(`span`,{className:`note-move-folder-spacer`}),(0,T.jsx)(ne,{className:`note-move-folder-icon`,size:16}),(0,T.jsx)(`span`,{children:a(`note.root`)})]}),c.length===0?(0,T.jsx)(`p`,{className:`note-move-empty`,children:a(`note.move.noFolders`)}):ie.map(e=>{let t=y.has(e.path),n=p.has(e.path);return(0,T.jsxs)(`button`,{type:`button`,className:`note-move-folder-item note-move-depth-${Math.min(e.depth,4)} ${l===e.path?`selected`:``}`,onClick:()=>oe(e.path),children:[t?n?(0,T.jsx)(m,{className:`note-move-expander`,size:14}):(0,T.jsx)(g,{className:`note-move-expander`,size:14}):(0,T.jsx)(`span`,{className:`note-move-folder-spacer`}),(0,T.jsx)(ne,{className:`note-move-folder-icon`,size:16}),(0,T.jsx)(`span`,{translate:`no`,children:e.name}),e.parentPath&&(0,T.jsx)(`small`,{translate:`no`,children:e.parentPath})]},e.path)})]}),(0,T.jsx)(`input`,{className:`input input-compact`,value:d,onChange:e=>te(e.target.value),placeholder:a(`note.move.pathPlaceholder`),translate:`no`}),(0,T.jsxs)(`div`,{className:`note-move-destination`,children:[(0,T.jsx)(`span`,{children:a(`note.move.destinationLabel`)}),(0,T.jsx)(`span`,{translate:_?`no`:`yes`,children:_||a(`note.root`)})]}),(0,T.jsxs)(`div`,{className:`modal-actions`,children:[(0,T.jsx)(`button`,{className:`btn btn-secondary`,onClick:i,children:a(`common.cancel`)}),(0,T.jsx)(`button`,{className:`btn btn-primary`,onClick:se,disabled:v,children:a(`note.action.move`)})]})]})})}function _e({children:e}){return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(v,{}),e,(0,T.jsx)(C,{})]})}var ve=(0,w.lazy)(async()=>({default:(await de(()=>import(`./MilkdownEditor-f2vRIY21.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8]))).MilkdownEditor}));function ye(e){let t=new URLSearchParams(e),n=t.get(`mode`);return{cid:t.get(`cid`)||void 0,mode:n===`edit`?`edit`:void 0}}function be(e={}){let t=new URLSearchParams;e.cid&&t.set(`cid`,e.cid),e.mode&&t.set(`mode`,e.mode);let n=t.toString();return n?`/note/?${n}`:`/note/`}function xe(e,t){return e.isSecret||e.content.startsWith(`mp://1`)?t(`note.preview.encrypted`):String(e.content||``).replace(/```[\s\S]*?```/g,` `).replace(/!\[[^\]]*]\([^)]*\)/g,` `).replace(/\[([^\]]+)]\([^)]*\)/g,`$1`).replace(/[#>*_`~|-]/g,` `).replace(/\s+/g,` `).trim()||t(`note.preview.empty`)}var E={"note.error.nameRequired":`note.error.nameRequired`,"note.error.nameNoSlash":`note.error.nameNoSlash`,"note.error.nameNoBackslash":`note.error.nameNoBackslash`,"note.error.nameInvalid":`note.error.nameInvalid`,"note.error.nameConflict":`note.error.nameConflict`,"note.error.moveIntoSelf":`note.error.moveIntoSelf`};function D(e,t,n){let r=e instanceof Error?e.message:``,i=E[r];return i?n(i):r||t}function Se(e){return e.type===`directory`?x(e.path?`${e.path}/${e.name}`:e.name):fe(e)}function Ce(e,t){let n=new Set;for(let t of e){let e=x(t.path).split(`/`).filter(Boolean);for(let t=0;t<e.length;t+=1)n.add(e.slice(0,t+1).join(`/`))}return Array.from(n).sort(t).map(e=>{let t=e.split(`/`);return{path:e,name:t[t.length-1]||e,parentPath:t.slice(0,-1).join(`/`),depth:Math.max(t.length-1,0)}})}function O(){let{t:e,formatDate:t,compareStrings:n}=f(),i=d(),ee=ce({select:e=>e.searchStr}),u=(0,w.useMemo)(()=>ye(ee),[ee]),m=(0,w.useRef)(null),g=S(e=>e.addToast),v=S(e=>e.isDarkMode),de=S(e=>e.setIsDarkMode),C=a(e=>e.wallet),he=a(e=>e.openLoginModal),E=S(e=>e.notes),O=S(e=>e.notesPath),k=S(e=>e.setNotesPath),A=S(e=>e.saveNote),we=S(e=>e.deleteNote),Te=S(e=>e.renameNote),j=S(e=>e.localDataReady),M=u.cid||``,N=E.find(e=>e.cid===M),P=!!M,F=P&&u.mode===`edit`,[I,Ee]=(0,w.useState)(``),[L,R]=(0,w.useState)(null),[z,B]=(0,w.useState)(null),[V,H]=(0,w.useState)(null),[De,U]=(0,w.useState)(``),[W,G]=(0,w.useState)(``),[Oe,K]=(0,w.useState)(``),[q,J]=(0,w.useState)(``),[ke,Ae]=(0,w.useState)(``),[je,Y]=(0,w.useState)(``),[X,Me]=(0,w.useState)(!1),[Ne,Z]=(0,w.useState)(``),[Pe,Fe]=(0,w.useState)(!1);(0,w.useEffect)(()=>{if(!M){U(``),G(``);return}if(!N){U(``),G(j?e(`note.error.notFound`):``);return}if(N.content.startsWith(`mp://1`)){if(!C){U(``),G(e(`note.error.loginToDecrypt`));return}let t=c(N.content,C.danger);if(!t){U(``),G(e(`note.error.decryptFailed`));return}U(t),G(``);return}U(N.content||``),G(``)},[M,j,N,e,C]),(0,w.useEffect)(()=>{if(!F){Fe(!1);return}if(!M||!N){J(``),Ae(``),Y(``),Me(!1),Z(j?e(`note.error.notFound`):``);return}if(J(N.name),Ae(N.path||``),Me(N.isSecret===!0||N.content.startsWith(`mp://1`)),N.content.startsWith(`mp://1`)){if(!C){Y(``),Z(e(`note.error.loginToDecrypt`));return}let t=c(N.content,C.danger);if(!t){Y(``),Z(e(`note.error.decryptFailed`));return}Y(t),Z(``);return}Y(N.content||``),Z(``)},[M,F,j,N,e,C]),(0,w.useEffect)(()=>{K(N?.name||``)},[N?.cid,N?.name]);let Ie=(0,w.useMemo)(()=>ue(E,O,I),[E,O,I]),Le=Ie.filter(e=>e.type===`file`).length,Re=N?.isSecret===!0||N?.content.startsWith(`mp://1`)===!0,ze=e(F?X?`note.privacy.secret`:`note.privacy.public`:Re?`note.privacy.secret`:`note.privacy.public`),Be=(0,w.useMemo)(()=>{let t=O.split(`/`).filter(Boolean);return[{label:e(`note.root`),path:``},...t.map((e,n)=>({label:e,path:t.slice(0,n+1).join(`/`)}))]},[O,e]),Ve=(0,w.useMemo)(()=>Ce(E,n),[n,E]);function Q(e={},t=!1){i({href:be(e),replace:t})}function He(e){Q({cid:e.cid})}function Ue(e){Q({cid:e.cid,mode:`edit`})}function $(){return C?!0:(he(),!1)}function We(){Q(N?{cid:N.cid}:{})}async function Ge(){if($()){if(!N){g(e(`note.toast.notFound`),`error`);return}if(!q.trim()){g(e(`note.toast.nameRequired`),`warning`);return}Fe(!0);try{let t=m.current?.getMarkdown()??je,n=X?o(t,C.danger):t,r=await A({cid:N.cid,name:q,path:ke,content:n,isSecret:X});Y(t),Q({cid:r},!0),g(e(`note.toast.saved`),`success`)}catch(t){g(D(t,e(`note.toast.saveFailed`),e),`error`)}finally{Fe(!1)}}}function Ke(){$()&&R({title:e(`note.create.title`),placeholder:e(`note.namePlaceholder`),confirmText:e(`note.create.action`),onConfirm:async t=>{if($())try{let n=await A({name:t,path:O,content:``,isSecret:!1});R(null),g(e(`note.toast.created`),`success`),Q({cid:n,mode:`edit`})}catch(t){g(D(t,e(`note.toast.createFailed`),e),`error`)}}})}async function qe(){if(!$()||!N)return;let t=Oe.trim();if(!t){K(N.name),g(e(`note.toast.nameRequired`),`warning`);return}if(t!==N.name)try{Te(fe(N),N.path,t),g(e(`note.toast.renamed`),`success`)}catch(t){K(N.name),g(D(t,e(`note.toast.renameFailed`),e),`error`)}}function Je(e){$()&&H(e)}async function Ye(t){if(V)try{Te(Se(V),t,V.name),H(null),g(e(`note.toast.moved`),`success`)}catch(t){g(D(t,e(`note.toast.moveFailed`),e),`error`)}}function Xe(t){if(!$())return;let n=t.type===`directory`;B({title:e(n?`note.delete.folderTitle`:`note.delete.noteTitle`),message:e(`note.delete.message`,{name:t.name}),confirmText:e(`note.action.delete`),onConfirm:async()=>{we(n?void 0:t.cid,t.path,t.name),B(null),g(e(`note.toast.deleted`),`success`),t.type===`file`&&t.cid===M&&Q()}})}let Ze=(0,T.jsxs)(`div`,{className:`note-header-title`,children:[(0,T.jsx)(`h2`,{className:`header-title`,children:e(`note.title`)}),(0,T.jsx)(`span`,{children:e(`note.count`,{count:E.length})})]}),Qe=(0,T.jsx)(`div`,{className:`note-theme-wrap`,children:(0,T.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>de(!v),title:e(`common.theme.toggle`),"aria-label":e(`common.theme.toggle`),children:v?(0,T.jsx)(p,{size:16}):(0,T.jsx)(te,{size:16})})}),$e=(0,T.jsxs)(`section`,{className:`note-list-panel note-sidebar-list`,"aria-label":e(`note.listLabel`),children:[(0,T.jsxs)(`div`,{className:`note-list-header`,children:[(0,T.jsx)(`div`,{className:`note-current-location`,children:(0,T.jsx)(`div`,{className:`note-breadcrumbs`,children:Be.map((e,t)=>(0,T.jsxs)(w.Fragment,{children:[t>0&&(0,T.jsx)(`span`,{children:`/`}),(0,T.jsx)(`button`,{onClick:()=>k(e.path),children:(0,T.jsx)(`span`,{translate:e.path?`no`:`yes`,children:e.label})})]},e.path||`root`))})}),(0,T.jsx)(`span`,{className:`note-count`,children:e(`note.count`,{count:Le})})]}),(0,T.jsxs)(`div`,{className:`note-search`,children:[(0,T.jsx)(oe,{size:16}),(0,T.jsx)(`input`,{className:`input input-flex`,value:I,onChange:e=>Ee(e.target.value),placeholder:e(`note.search.placeholder`)})]}),Ie.length===0?(0,T.jsxs)(`div`,{className:`ui-empty-state note-empty-state`,children:[(0,T.jsx)(y,{size:32}),(0,T.jsx)(`p`,{children:e(I?`note.empty.noMatches`:`note.empty.noNotes`)})]}):(0,T.jsx)(`div`,{className:`note-list`,children:Ie.map(n=>(0,T.jsx)(`article`,{className:`ui-list-item note-list-item ${n.type===`file`&&n.cid===M?`active`:``}`,children:(0,T.jsxs)(`button`,{className:`ui-list-item-main note-list-item-main ${n.type===`directory`?`folder`:``}`,onClick:()=>{n.type===`directory`?k(x(n.path?`${n.path}/${n.name}`:n.name)):He(n)},children:[(0,T.jsx)(`span`,{className:`ui-list-icon note-list-icon ${n.type===`directory`?`warning`:``}`,children:n.type===`directory`?(0,T.jsx)(ne,{size:18}):n.isSecret?(0,T.jsx)(h,{size:18}):(0,T.jsx)(re,{size:18})}),(0,T.jsxs)(`span`,{className:`ui-list-copy note-list-copy`,children:[(0,T.jsx)(`span`,{className:`ui-list-title note-list-name`,translate:`no`,children:n.name}),n.type===`file`?(0,T.jsx)(`span`,{className:`ui-list-desc note-list-preview`,translate:`no`,children:xe(n,e)}):(0,T.jsx)(`span`,{className:`ui-list-desc note-list-preview`,children:e(`note.folder`)})]}),n.type===`file`&&(0,T.jsx)(`span`,{className:`ui-list-meta note-list-date`,children:t(n.updated_at)})]})},`${n.cid}:${n.path}:${n.name}`))}),(0,T.jsx)(`div`,{className:`note-create-btn`,children:(0,T.jsxs)(`button`,{className:`btn`,onClick:Ke,children:[(0,T.jsx)(ae,{size:16}),e(`note.newNote`)]})})]});return(0,T.jsxs)(_,{sidebar:()=>(0,T.jsx)(_e,{children:$e}),headerTitle:Ze,headerRight:Qe,children:[(0,T.jsx)(`main`,{className:`note-page note-browser-page ${P?`has-editor`:``}`,children:(0,T.jsx)(`section`,{className:`note-workspace`,children:(0,T.jsx)(`section`,{className:`note-editor-panel`,"aria-label":e(F?`note.editorLabel.edit`:`note.editorLabel.read`),children:P?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsxs)(`div`,{className:`note-editor-panel-header`,children:[(0,T.jsxs)(`div`,{className:`note-editor-title-area`,children:[F?(0,T.jsx)(`input`,{className:`note-title-input`,value:q,onChange:e=>J(e.target.value),placeholder:e(`note.namePlaceholder`),translate:`no`,disabled:!N}):N?(0,T.jsx)(`input`,{className:`note-title-input`,value:Oe,onBlur:qe,onChange:e=>K(e.target.value),onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur(),e.key===`Escape`&&(K(N.name),e.currentTarget.blur())},placeholder:e(`note.namePlaceholder`),title:e(`app.rename`),translate:`no`}):(0,T.jsx)(`h3`,{children:e(`note.untitled`)}),N&&(0,T.jsxs)(`div`,{className:`note-editor-info`,children:[(0,T.jsx)(`span`,{children:e(F?`note.mode.edit`:`note.mode.read`)}),(0,T.jsx)(`span`,{children:ze}),(0,T.jsx)(`span`,{children:t(N.updated_at)})]})]}),(0,T.jsxs)(`div`,{className:`note-editor-actions`,children:[(0,T.jsx)(`button`,{type:`button`,className:`btn btn-icon`,onClick:F?We:()=>Q(),title:e(F?`common.cancel`:`common.close`),"aria-label":e(F?`common.cancel`:`common.close`),children:(0,T.jsx)(r,{size:16})}),F?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsxs)(`button`,{className:`btn btn-sm ${X?`btn-warning`:`btn-secondary`}`,onClick:()=>Me(!X),disabled:!N,children:[X?(0,T.jsx)(h,{size:16}):(0,T.jsx)(le,{size:16}),e(X?`note.privacy.secret`:`note.privacy.public`)]}),(0,T.jsxs)(`button`,{className:`btn btn-sm btn-primary`,onClick:Ge,disabled:Pe||!!Ne||!N,children:[(0,T.jsx)(b,{size:16}),e(Pe?`note.action.saving`:`note.action.save`)]})]}):N&&(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`button`,{type:`button`,className:`btn btn-icon`,onClick:()=>Je(N),title:e(`note.action.move`),"aria-label":e(`note.action.move`),children:(0,T.jsx)(pe,{size:16})}),(0,T.jsx)(`button`,{type:`button`,className:`btn btn-icon note-editor-action-danger`,onClick:()=>Xe(N),title:e(`note.action.delete`),"aria-label":e(`note.action.delete`),children:(0,T.jsx)(se,{size:16})}),(0,T.jsxs)(`button`,{type:`button`,className:`btn btn-sm btn-primary`,onClick:()=>Ue(N),disabled:!!W,title:e(`note.action.edit`),"aria-label":e(`note.action.edit`),children:[(0,T.jsx)(me,{size:16}),e(`note.action.edit`)]})]})]})]}),F?Ne?(0,T.jsxs)(`div`,{className:`note-empty-state editor-error`,children:[(0,T.jsx)(h,{size:36}),(0,T.jsx)(`p`,{children:Ne})]}):N?(0,T.jsx)(`div`,{className:`note-editor-frame editing`,children:(0,T.jsx)(ve,{ref:m,content:je,onChange:Y,className:`milkdown-editor`})}):(0,T.jsxs)(`div`,{className:`note-empty-state editor-error`,children:[(0,T.jsx)(y,{size:36}),(0,T.jsx)(`p`,{children:e(j?`note.error.notFound`:`note.loading`)})]}):W?(0,T.jsxs)(`div`,{className:`ui-empty-state note-empty-state editor-error`,children:[(0,T.jsx)(h,{size:36}),(0,T.jsx)(`p`,{children:W})]}):N?(0,T.jsx)(`div`,{className:`note-editor-frame reading`,children:(0,T.jsx)(ve,{content:De,readOnly:!0,className:`milkdown-editor`})}):(0,T.jsxs)(`div`,{className:`ui-empty-state note-empty-state editor-error`,children:[(0,T.jsx)(y,{size:36}),(0,T.jsx)(`p`,{children:e(j?`note.error.notFound`:`note.loading`)})]})]}):(0,T.jsxs)(`div`,{className:`ui-empty-state note-editor-empty`,children:[(0,T.jsx)(`div`,{className:`ui-empty-icon note-editor-empty-icon`,children:(0,T.jsx)(y,{size:32})}),(0,T.jsx)(`h3`,{className:`ui-empty-title`,children:e(`note.noOpen.title`)}),(0,T.jsx)(`p`,{className:`ui-empty-desc`,children:E.length>0?e(`note.noOpen.select`):e(`note.noOpen.createFirst`)}),(0,T.jsx)(ie,{label:e(`note.openList`),variant:`default`})]})})})}),L&&(0,T.jsx)(s,{title:L.title,placeholder:L.placeholder,defaultValue:L.defaultValue,confirmText:L.confirmText,onConfirm:L.onConfirm,onClose:()=>R(null)}),z&&(0,T.jsx)(l,{title:z.title,message:z.message,confirmText:z.confirmText,danger:!0,onConfirm:z.onConfirm,onClose:()=>B(null)}),V&&(0,T.jsx)(ge,{target:V,directories:Ve,onMove:Ye,onClose:()=>H(null)})]})}function k(){let{t:e}=f();return(0,T.jsx)(w.Suspense,{fallback:(0,T.jsx)(`div`,{className:`note-editor-loading`,children:e(`note.loading`)}),children:(0,T.jsx)(O,{})})}var A=i(`/note/`)({component:k});export{A as Route};
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{E as r,O as i,w as a}from"./ui-PnUvY9zL.js";import{a as o}from"./i18n--maTEG0d.js";import{t as s}from"./cloud-DfaFxhLj.js";import{t as c}from"./download-Q6jKMPIG.js";import"./index-Cg4kEvx8.js";import{t as l}from"./MarketingHeader-Derv67Vs.js";import{n as u}from"./format-CR8oUWq6.js";var d=a(`apple`,[[`path`,{d:`M12 6.528V3a1 1 0 0 1 1-1h0`,key:`11qiee`}],[`path`,{d:`M18.237 21A15 15 0 0 0 22 11a6 6 0 0 0-10-4.472A6 6 0 0 0 2 11a15.1 15.1 0 0 0 3.763 10 3 3 0 0 0 3.648.648 5.5 5.5 0 0 1 5.178 0A3 3 0 0 0 18.237 21`,key:`110c12`}]]),f=a(`code`,[[`path`,{d:`m16 18 6-6-6-6`,key:`eg8j8`}],[`path`,{d:`m8 6-6 6 6 6`,key:`ppft3o`}]]),p=a(`laptop`,[[`path`,{d:`M18 5a2 2 0 0 1 2 2v8.526a2 2 0 0 0 .212.897l1.068 2.127a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45l1.068-2.127A2 2 0 0 0 4 15.526V7a2 2 0 0 1 2-2z`,key:`1pdavp`}],[`path`,{d:`M20.054 15.987H3.946`,key:`14rxg9`}]]),m=a(`monitor`,[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`,key:`48i651`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`,key:`1svkeh`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`,key:`vw1qmm`}]]),h=t(e(),1),g=n(),_=`https://github.com/most-people/most/releases/latest`,v=`${`https://download.most.box`.replace(/\/+$/,``)}/releases/latest.json`,y=[{platform:`windows`,arch:`x64`,kind:`installer`,filename:`GitHub Releases`,githubUrl:_},{platform:`windows`,arch:`arm64`,kind:`installer`,filename:`GitHub Releases`,githubUrl:_},{platform:`macos`,arch:`x64`,kind:`installer`,filename:`GitHub Releases`,githubUrl:_},{platform:`macos`,arch:`arm64`,kind:`installer`,filename:`GitHub Releases`,githubUrl:_},{platform:`linux`,arch:`x64`,kind:`installer`,filename:`GitHub Releases`,githubUrl:_},{platform:`linux`,arch:`arm64`,kind:`installer`,filename:`GitHub Releases`,githubUrl:_}],b={windows:{name:`Windows`,ext:`.exe`,descKey:`download.platform.windows.desc`,icon:m},macos:{name:`macOS`,ext:`.dmg`,descKey:`download.platform.macos.desc`,icon:d},linux:{name:`Linux`,ext:`.AppImage`,descKey:`download.platform.linux.desc`,icon:p}};function x(e){return typeof e==`object`&&!!e}function S(e){return x(e)?[`windows`,`macos`,`linux`].includes(String(e.platform))&&[`x64`,`arm64`].includes(String(e.arch))&&(e.kind===`installer`||e.kind===`updater`)&&typeof e.filename==`string`&&typeof e.githubUrl==`string`&&(typeof e.r2Url==`string`||e.r2Url===void 0):!1}function C(e){return!x(e)||typeof e.version!=`string`||typeof e.publishedAt!=`string`||!Array.isArray(e.assets)?!1:e.assets.every(S)}function w(){return[navigator.userAgentData?.platform,navigator.platform,navigator.userAgent].filter(Boolean).join(` `).toLowerCase()}function T(){if(typeof navigator>`u`)return`windows:x64`;let e=w(),t=/arm|aarch64/.test(e)?`arm64`:`x64`;return/mac|darwin/.test(e)?`macos:${t}`:/linux/.test(e)?`linux:${t}`:`windows:${t}`}function E(){let{t:e}=o(),[t,n]=(0,h.useState)(null),[r,i]=(0,h.useState)(v?`loading`:`fallback`),[a,l]=(0,h.useState)(`windows:x64`),[d,p]=(0,h.useState)(`r2`);(0,h.useEffect)(()=>{l(T())},[]),(0,h.useEffect)(()=>{if(!v)return;let e=new AbortController;return fetch(v,{cache:`no-store`,signal:e.signal}).then(e=>{if(!e.ok)throw Error(`Manifest request failed: ${e.status}`);return e.json()}).then(e=>{if(!C(e))throw Error(`Invalid download manifest`);n(e),i(`ready`)}).catch(e=>{e instanceof DOMException&&e.name===`AbortError`||(n(null),i(`fallback`))}),()=>e.abort()},[]),(0,h.useEffect)(()=>{r===`fallback`&&p(`github`)},[r]);let m=t?.assets.filter(e=>e.kind===`installer`)||[],_=m.length?m:y,x=_.some(e=>e.r2Url),S=d===`r2`&&x?`r2`:`github`;return(0,g.jsxs)(`div`,{className:`download-options`,children:[(0,g.jsxs)(`div`,{className:`ui-segmented-control download-source-tabs`,role:`tablist`,"aria-label":e(`download.source.label`),children:[(0,g.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":S===`r2`,disabled:!x,className:S===`r2`?`ui-segmented-option download-source-tab is-active`:`ui-segmented-option download-source-tab`,onClick:()=>p(`r2`),children:[(0,g.jsx)(s,{size:15}),`Cloudflare R2`]}),(0,g.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":S===`github`,className:S===`github`?`ui-segmented-option download-source-tab is-active`:`ui-segmented-option download-source-tab`,onClick:()=>p(`github`),children:[(0,g.jsx)(f,{size:15}),`GitHub Releases`]})]}),(0,g.jsx)(`p`,{className:`download-source-note`,children:r===`loading`?e(`download.source.loading`):r===`ready`&&t?e(`download.source.ready`,{version:t.version}):e(`download.source.fallback`)}),(0,g.jsx)(`div`,{className:`download-platform-grid`,children:_.map(t=>{let n=b[t.platform],r=n.icon,i=`${t.platform}:${t.arch}`,o=S===`r2`&&t.r2Url?t.r2Url:t.githubUrl,s=i===a;return(0,g.jsxs)(`article`,{className:s?`download-platform-card is-recommended`:`download-platform-card`,children:[(0,g.jsx)(`div`,{className:`download-platform-icon`,children:(0,g.jsx)(r,{size:32})}),(0,g.jsxs)(`div`,{className:`download-platform-content`,children:[(0,g.jsxs)(`div`,{className:`download-platform-heading`,children:[(0,g.jsx)(`h3`,{children:n.name}),(0,g.jsx)(`span`,{children:t.arch})]}),(0,g.jsx)(`p`,{children:e(n.descKey)}),(0,g.jsxs)(`dl`,{className:`download-platform-meta`,children:[(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`dt`,{children:e(`download.platform.source`)}),(0,g.jsx)(`dd`,{children:S===`r2`&&t.r2Url?e(`download.source.r2Mirror`):`GitHub Releases`})]}),t.size?(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`dt`,{children:e(`download.platform.size`)}),(0,g.jsx)(`dd`,{children:u(t.size)})]}):null,t.cid?(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`dt`,{children:`CID`}),(0,g.jsx)(`dd`,{children:t.cid.slice(0,12)})]}):null]}),(0,g.jsx)(`div`,{className:`download-platform-actions`,children:(0,g.jsxs)(`a`,{href:o,className:`btn btn-primary`,children:[(0,g.jsx)(c,{size:16}),e(`download.platform.action`,{ext:n.ext})]})})]}),s?(0,g.jsx)(`span`,{className:`download-recommended-badge`,children:e(`download.platform.current`)}):null]},i)})})]})}var D=[{featureKey:`download.comparison.node`,webKey:`download.comparison.webConnectsNode`,desktopKey:`download.comparison.desktopBuiltinNode`},{featureKey:`download.comparison.fileSharing`,webKey:`download.comparison.webDependsNode`,desktopKey:`download.comparison.desktopFull`},{featureKey:`download.comparison.verification`,webKey:`download.comparison.webDependsNode`,desktopKey:`download.comparison.desktopFull`},{featureKey:`download.comparison.seeding`,webKey:`download.comparison.webDependsNode`,desktopKey:`download.comparison.desktopDefaultOn`},{featureKey:`download.comparison.largeFiles`,webKey:`download.comparison.webDependsNode`,desktopKey:`download.comparison.desktop10gb`}];function O(){let{t:e}=o();return(0,h.useEffect)(()=>{document.title=e(`download.meta.title`)},[e]),(0,g.jsxs)(`div`,{className:`download-page`,children:[(0,g.jsx)(l,{}),(0,g.jsx)(`section`,{className:`download-hero`,children:(0,g.jsxs)(`div`,{className:`mkt-container`,children:[(0,g.jsx)(`div`,{className:`download-hero-icon`,children:(0,g.jsx)(c,{size:40})}),(0,g.jsx)(`h1`,{className:`download-hero-title`,children:e(`download.hero.title`)}),(0,g.jsx)(`p`,{className:`download-hero-desc`,children:e(`download.hero.desc`)})]})}),(0,g.jsx)(`section`,{className:`download-platforms`,children:(0,g.jsxs)(`div`,{className:`mkt-container`,children:[(0,g.jsx)(`h2`,{className:`download-section-title`,children:e(`download.platforms.title`)}),(0,g.jsx)(E,{})]})}),(0,g.jsx)(`section`,{className:`download-comparison`,children:(0,g.jsxs)(`div`,{className:`mkt-container`,children:[(0,g.jsx)(`h2`,{className:`download-section-title`,children:e(`download.comparison.title`)}),(0,g.jsx)(`div`,{className:`download-table-wrap`,children:(0,g.jsxs)(`table`,{className:`download-table`,children:[(0,g.jsx)(`thead`,{children:(0,g.jsxs)(`tr`,{children:[(0,g.jsx)(`th`,{children:e(`download.comparison.feature`)}),(0,g.jsx)(`th`,{children:e(`download.comparison.web`)}),(0,g.jsx)(`th`,{children:e(`download.comparison.desktop`)})]})}),(0,g.jsx)(`tbody`,{children:D.map(t=>(0,g.jsxs)(`tr`,{children:[(0,g.jsx)(`td`,{children:e(t.featureKey)}),(0,g.jsx)(`td`,{className:`col-web`,children:e(t.webKey)}),(0,g.jsx)(`td`,{className:`col-desktop`,children:e(t.desktopKey)})]},t.featureKey))})]})})]})}),(0,g.jsx)(`section`,{className:`download-cta`,children:(0,g.jsx)(`div`,{className:`mkt-container`,children:(0,g.jsx)(`p`,{className:`download-hero-desc`,children:e(`download.npmNote`)})})}),(0,g.jsx)(`section`,{className:`download-cta`,children:(0,g.jsx)(`div`,{className:`mkt-container`,children:(0,g.jsx)(i,{to:`/`,className:`btn btn-primary`,children:e(`common.backHome`)})})}),(0,g.jsx)(`footer`,{className:`mkt-footer`,children:(0,g.jsx)(`div`,{className:`mkt-container`,children:(0,g.jsx)(`div`,{className:`mkt-footer-inner`,children:(0,g.jsx)(`p`,{className:`mkt-footer-copy`,children:`MostBox`})})})})]})}var k=r(`/download/`)({component:O});export{k 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,E as i,a,c as o,n as s,r as c,t as l,w as u}from"./ui-PnUvY9zL.js";import{a as d}from"./i18n--maTEG0d.js";import{t as ee}from"./arrow-right-BCi9KXDX.js";import{a as te,r as ne}from"./LanguageToggle-BoBNesNU.js";import{t as f}from"./circle-alert-Dyc-4wje.js";import{t as p}from"./download-Q6jKMPIG.js";import{t as m}from"./file-text-CVl5SZPJ.js";import{a as h,i as g,n as re,r as ie,t as ae}from"./FilePreviewOverlay-DqH7uKb7.js";import{t as oe}from"./loader-BSclU8WE.js";import{i as se,n as ce,t as le}from"./SidebarHomeLink-ByOHwlH8.js";import{t as ue}from"./message-square-Dg3YjjmO.js";import{t as _}from"./music-BeCPak70.js";import{t as de}from"./OpenSidebarButton-BKX4B_yG.js";import{t as fe}from"./plus-BpjwXzbO.js";import{t as pe}from"./search-CsAnnJyH.js";import{t as me}from"./trash-2-C_LtCiNh.js";import{E as he,c as v,f as ge,i as _e,l as ve}from"./index-Cg4kEvx8.js";import{t as ye}from"./SidebarAccount-D6wj_ijc.js";import{n as be,r as xe,t as Se}from"./downloadValidation-B-w8D_0W.js";import{t as Ce}from"./LogoIcon-B2fFe0l1.js";import{i as y,t as we}from"./userProfile-CRGZ8PUF.js";import{t as Te}from"./useChannelMessages-CZHmH5n-.js";var Ee=u(`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`}]]),b=u(`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=u(`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`}]]),x=u(`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`}]]),Oe=u(`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=u(`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`}]]),S=t(e(),1),C=n();function Ae(e){return!e||e<=0?``:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(2)} GB`}function je(e){let t=String(e||``).split(`/`);return t[t.length-1]||e}function Me(e){return e===`image`?(0,C.jsx)(g,{size:20}):e===`video`?(0,C.jsx)(h,{size:20}):e===`audio`?(0,C.jsx)(_,{size:20}):(0,C.jsx)(m,{size:20})}function Ne({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`:``].filter(Boolean).join(` `),s=Ae(e.size)||i(`chat.mostboxFile`);return(0,C.jsxs)(`button`,{type:`button`,className:`ui-file-card chat-attachment-card`,onClick:()=>r?.(e),disabled:n||a,title:e.link,translate:`no`,children:[(0,C.jsx)(`span`,{className:`ui-file-icon chat-attachment-icon ${e.kind}`,children:a?(0,C.jsx)(oe,{size:20,className:`ui-spinner chat-attachment-spinner`}):Me(e.kind)}),(0,C.jsxs)(`span`,{className:`ui-file-info chat-attachment-info`,children:[(0,C.jsx)(`span`,{className:`ui-file-name chat-attachment-name`,translate:`no`,children:je(e.fileName)}),(0,C.jsx)(`span`,{className:`ui-file-meta chat-attachment-meta`,translate:`yes`,children:n?i(`chat.sending`):s})]}),(0,C.jsx)(`span`,{className:o,translate:`yes`,children:a?i(`chat.checking`):t===`available`?(0,C.jsx)(he,{size:16}):t===`error`?(0,C.jsx)(f,{size:17}):(0,C.jsx)(p,{size:16})})]})}var w=[{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}],Pe=w.map(e=>e.accept).join(`,`);function Fe({children:e}){return(0,C.jsx)(`div`,{className:`message-bubble`,translate:`no`,children:e})}function Ie({children:e}){return(0,C.jsx)(`div`,{className:`message-bubble has-attachment`,children:e})}function Le({variant:e,pending:t=!1,avatarSrc:n,author:r,time:i,children:a}){return(0,C.jsxs)(`div`,{className:[`chat-message`,e,t?`pending`:``].filter(Boolean).join(` `),children:[(0,C.jsx)(`img`,{className:`msg-avatar`,src:n,alt:`avatar`}),(0,C.jsxs)(`div`,{className:`msg-content`,children:[(0,C.jsx)(`span`,{className:`message-author`,translate:`no`,children:r}),a,(0,C.jsx)(`span`,{className:`message-time`,children:i})]})]})}function Re({active:e=!1,pinned:t=!1,unread:n=!1,title:r,onSelect:i,onTogglePin:a,onRename:o,onLeave:s}){let{t:c}=d(),u=!!(a||o||s);return(0,C.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,C.jsxs)(`span`,{className:`chat-channel-icon-wrap`,children:[(0,C.jsx)(ue,{size:16}),n&&(0,C.jsx)(`span`,{className:`chat-channel-unread-dot`,title:c(`chat.unread`),"aria-hidden":`true`})]}),(0,C.jsx)(`span`,{className:`chat-channel-title`,children:(0,C.jsx)(`span`,{className:`chat-channel-title-text`,translate:`no`,children:r})}),u&&(0,C.jsx)(l,{ariaLabel:c(`chat.channelActions`),className:`channel-actions-anchor`,placement:`bottom-end`,items:[{key:`pin`,label:c(t?`chat.unpin`:`chat.pin`),icon:t?(0,C.jsx)(Oe,{size:16}):(0,C.jsx)(x,{size:16}),onSelect:()=>a?.()},{key:`rename`,label:c(`chat.rename`),icon:(0,C.jsx)(ie,{size:16}),onSelect:()=>o?.()},{key:`delete`,label:c(`chat.delete`),icon:(0,C.jsx)(me,{size:16}),onSelect:()=>s?.()}],renderTrigger:e=>(0,C.jsx)(`button`,{...e,className:`leave-channel-btn channel-actions-trigger`,title:c(`common.moreActions`),"aria-label":c(`common.moreActions`),children:(0,C.jsx)(b,{size:16})})})]})}function ze({members:e,isLoading:t=!1}){let{t:n}=d();return t&&e.length===0?(0,C.jsx)(`div`,{className:`ui-empty-inline channel-members-empty`,children:n(`chat.loadingMembers`)}):e.length===0?(0,C.jsx)(`div`,{className:`ui-empty-inline channel-members-empty`,children:n(`chat.noMembers`)}):(0,C.jsx)(`div`,{className:`channel-members-grid`,children:e.map(e=>(0,C.jsxs)(`div`,{className:`channel-member`,children:[(0,C.jsx)(`img`,{className:`channel-member-avatar`,src:e.avatarSrc,alt:`avatar`}),(0,C.jsx)(`span`,{className:`channel-member-name`,translate:`no`,children:e.name})]},e.id))})}function Be({message:e,placeholder:t,disabled:n=!1,isPublishingAttachment:r=!1,attachmentButtonTitle:i,attachmentInputRef:a,onMessageChange:o,onSend:s,onSelectAttachmentFiles:c}){let{t:u}=d(),te=n||r,ne=n||!e.trim(),f=i||u(`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,C.jsxs)(`div`,{className:`chat-input-area`,children:[(0,C.jsx)(`input`,{ref:a,type:`file`,accept:Pe,className:`chat-file-input`,onChange:e=>p(e,c)}),(0,C.jsx)(l,{ariaLabel:u(`chat.attachmentType`),placement:`top-start`,disabled:te,items:w.map(e=>{let t=e.icon;return{key:e.key,label:u(e.labelKey),icon:(0,C.jsx)(t,{size:16}),onSelect:()=>h(e.accept)}}),renderTrigger:e=>(0,C.jsx)(`button`,{...e,className:`btn btn-circle chat-tool-btn`,"aria-label":f,children:r?(0,C.jsx)(oe,{size:18,className:`ui-spinner chat-attachment-spinner`}):(0,C.jsx)(fe,{size:18})})}),(0,C.jsx)(`input`,{type:`text`,className:`input input-pill`,placeholder:t,value:e,disabled:n,onChange:e=>o(e.target.value),onKeyDown:m}),(0,C.jsx)(`button`,{type:`button`,className:`btn btn-circle btn-primary send-btn`,onClick:s,disabled:ne,title:u(`chat.sendMessage`),children:(0,C.jsx)(ee,{size:18})})]})}var Ve=`mostbox.chat.lastReadAt`;function T(e){return Date.parse(e?.lastMessageAt||``)||Date.parse(e?.createdAt||``)||0}function He(e){let t=String(e||``).trim().toLowerCase();return t?`${Ve}:${t}`:``}function E(e,t=Date.now()){let n=Number(e);return Math.max(0,Math.floor(Number.isFinite(n)&&n>0?n:t))}function Ue(e,t=D()){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 We(e,t,n=D()){if(!(!e||!n))try{n.setItem(e,JSON.stringify(t))}catch{}}function Ge(e,t,n=Date.now(),r=Date.now()){if(!t)return{changed:!1,value:e};let i=E(n,r);return(e[t]||0)>=i?{changed:!1,value:e}:{changed:!0,value:{...e,[t]:i}}}function Ke(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]=E(T(e),n),r=!0)}return{changed:r,value:r?i:e}}function qe(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=E(n,o),c=t===r,l=String(i||``).toLowerCase()===String(a||``).toLowerCase();if(c||l)return{...Ge(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 Je(e,t){let n=e?.channelKey||e?.name;return T(e)>(t[n]||0)}function D(){if(!(typeof window>`u`))return window.localStorage}var Ye=3,Xe=30,Ze=/^[a-zA-Z0-9_-]+$/,Qe=1e4,$e=12e3,et=1200;function O(e){return e?.channelKey||e?.name||``}function k(e){return e?.channelId||e?.name||``}function A(e){return e?.remark||k(e)}var tt=`chat-file`;function nt(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 rt(e){return e?`${e.slice(0,6)}...${e.slice(-4)}`:`Unknown`}function it(e){return/#[a-fA-F0-9]{4}$/.test(String(e||``).trim())}function at(){if(typeof window>`u`)return;let e=window;return e.AudioContext||e.webkitAudioContext}function ot(){let e=v(e=>e.isDarkMode),t=v(e=>e.setIsDarkMode),n=v(e=>e.hasBackend),i=v(e=>e.addToast),l=v(e=>e.openConnectModal),u=o(e=>e.identity),ee=o(e=>e.openLoginModal),[f,p]=(0,S.useState)([]),[m,h]=(0,S.useState)(null),[g,_]=(0,S.useState)(``),[me,he]=(0,S.useState)(``),[b,x]=(0,S.useState)(``),[Oe,Ae]=se(!1),[Me,w]=(0,S.useState)(``),[Pe,Ve]=(0,S.useState)(!1),[E,D]=(0,S.useState)(!1),[ot,j]=se(!1),[st,ct]=(0,S.useState)(null),[lt,M]=(0,S.useState)(null),[ut,N]=(0,S.useState)(!1),[dt,ft]=(0,S.useState)(``),[pt,mt]=(0,S.useState)(!1),[ht,gt]=(0,S.useState)(null),[_t,vt]=(0,S.useState)(!1),[P,F]=(0,S.useState)({}),[I,L]=(0,S.useState)(null),[yt,R]=(0,S.useState)([]),[bt,xt]=(0,S.useState)(!1),[St,Ct]=(0,S.useState)(!1),[wt,Tt]=(0,S.useState)(!1),[Et,z]=(0,S.useState)({}),B=u?.identity===`user`,Dt=B&&!wt?u.logo:``,Ot=(0,S.useRef)(null),kt=(0,S.useRef)(null),At=(0,S.useRef)(``),V=(0,S.useRef)(null),H=(0,S.useRef)(!1),jt=(0,S.useRef)(0),U=(0,S.useRef)(new Map),W=(0,S.useRef)(new Set),G=n===!0,{t:K,compareStrings:Mt,formatDate:Nt,formatTime:Pt}=d(),q=(0,S.useCallback)(async(e,t)=>{i(await ge(e,t),`error`)},[i]),J=(0,S.useMemo)(()=>He(u?.address),[u?.address]),Ft=(0,S.useCallback)((e,t=Date.now())=>{e&&z(n=>{let r=Ge(n,e,t);return r.changed?(We(J,r.value),r.value):n})},[J]),Y=(0,S.useCallback)(()=>{if(H.current||typeof window>`u`)return;let e=at();if(e)try{let t=V.current||new e;V.current=t,t.state===`suspended`&&t.resume().catch(()=>{}),H.current=!0}catch{}},[]),It=(0,S.useCallback)(()=>{if(!H.current)return;let e=Date.now();if(e-jt.current<et)return;jt.current=e;let t=at();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{}},[]),X=(0,S.useCallback)(async(e=O(m))=>{if(!e||!G||!u){R([]);return}xt(!0);try{R(await y.getChannelMembers(e))}catch(e){R([]),await q(e,K(`chat.error.members`))}finally{xt(!1)}},[m,G,q,K,u]);function Lt(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=>O(t)===e?{...t,lastMessageAt:new Date(r).toISOString()}:t));let t=e===At.current;z(i=>{let a=qe(i,{channelName:e,messageTime:r,activeChannelName:t?e:``,messageAuthor:n?.author,userAddress:u?.address});return a.changed&&We(J,a.value),a.notify&&It(),a.changed?a.value:i})}break}case`channel:peer:online`:case`channel:peer:offline`:m&&y.getChannelPeers(O(m)).catch(e=>{console.warn(`[Chat] Failed to fetch peers on event:`,e.message)});break;case`channel:joined`:case`channel:left`:$(),X();break;case`user:metadata:updated`:t?.scope===`channels`&&($(),X(At.current));break;case`download:success`:{let e=U.current.get(t.taskId);e&&(U.current.delete(t.taskId),W.current.delete(e.cid),F(t=>({...t,[e.cid]:{status:`available`}})),i(K(`chat.attachment.downloadCompleted`,{fileName:t.fileName||je(e.fileName)}),`success`),Wt(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),F(r=>({...r,[n.cid]:{status:`error`,message:e===`download:cancelled`?K(`chat.attachment.downloadCancelled`):t.error||K(`chat.attachment.downloadFailed`)}})),i(e===`download:cancelled`?K(`chat.attachment.downloadCancelled`):t.error||K(`chat.attachment.downloadFailed`),`error`));break}}}let Rt=(0,S.useMemo)(()=>f.map(e=>O(e)),[f]),{clearMessages:zt,messages:Bt,sendMessage:Vt,syncMessages:Ht}=Te({isReady:G,enabled:!!u,channelName:O(m),extraSubscribedChannelNames:Rt,peerId:Me,waitForPeerId:!0,onSyncError:e=>q(e,K(`chat.error.messages`)),onSocketEvent:Lt,onReconnect:$});function Z(){return G?!0:(l(),!1)}function Q(){return u?!0:(ee(),!1)}(0,S.useEffect)(()=>{let e=()=>{_(new URLSearchParams(window.location.search).get(`channel`)||``)};return e(),window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[]),(0,S.useEffect)(()=>{u&&_(new URLSearchParams(window.location.search).get(`channel`)||``)},[u?.address]),(0,S.useEffect)(()=>{Tt(!1)},[u?.logo]),(0,S.useEffect)(()=>{At.current=O(m)},[m]),(0,S.useEffect)(()=>{z(Ue(J))},[J]),(0,S.useEffect)(()=>{!J||f.length===0||z(e=>{let t=Ke(e,f);return t.changed&&We(J,t.value),t.changed?t.value:e})},[J,f]),(0,S.useEffect)(()=>(window.addEventListener(`pointerdown`,Y,{passive:!0}),window.addEventListener(`keydown`,Y),()=>{window.removeEventListener(`pointerdown`,Y),window.removeEventListener(`keydown`,Y)}),[Y]),(0,S.useEffect)(()=>()=>{V.current?.close().catch(()=>{}),V.current=null,H.current=!1},[]),(0,S.useEffect)(()=>{Ot.current?.scrollIntoView({behavior:`smooth`})},[Bt]),(0,S.useEffect)(()=>{if(!G){w(``);return}ve.get(`/api/node-id`).json().then(e=>w(e.id)).catch(e=>{console.warn(`[Chat] Failed to fetch node ID:`,e.message),q(e,K(`chat.error.nodeId`))})},[G,q,K]),(0,S.useEffect)(()=>{G&&u&&$()},[n,G,u?.address]),(0,S.useEffect)(()=>{if(m&&G){let e=O(m);Ht(e,{replace:!0}),y.getChannelPeers(e).catch(()=>{}),X(e)}},[m,n,G,X,Ht]),(0,S.useEffect)(()=>{!ut||!m||X(O(m))},[m,X,ut]),(0,S.useEffect)(()=>{if(g&&f.length>0){let e=f.find(e=>O(e)===g)||f.find(e=>k(e)===g);e&&(!m||O(m)!==O(e))?Jt(e):e&&m&&O(m)===O(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)}},[f,m,g]),(0,S.useEffect)(()=>{u||(p([]),h(null),_(``),M(null),zt(),x(``),w(``),N(!1),gt(null),R([]),F({}),z({}),W.current.clear(),U.current.clear())},[zt,u?.address]);function Ut(e){return e.length<Ye?K(`chat.validation.nameMin`,{count:Ye}):e.length>Xe?K(`chat.validation.nameMax`,{count:Xe}):e.includes(`.`)?K(`chat.validation.dotReserved`):Ze.test(e)?``:K(`chat.validation.allowedChars`)}async function $(){if(G)try{p(await y.getChannels())}catch(e){p([]),await q(e,K(`chat.error.channelList`))}}function Wt(e,t=e.fileName){let n=re(t);gt({cid:e.cid,fileName:t,subtype:n===`file`?e.kind:n})}async function Gt(e){let t=Se(e.link,K);if(t)return F(n=>({...n,[e.cid]:{status:`error`,message:t}})),!1;try{F(t=>({...t,[e.cid]:{status:`checking`}}));let t=await be.checkDownload(e.link,{timeout:Qe,requestTimeout:$e});return F(n=>({...n,[e.cid]:{status:`available`,message:t.alreadyExists?K(`chat.attachment.localAvailable`):K(`chat.attachment.previewAvailable`)}})),!0}catch(t){let n=await xe(t);return F(t=>({...t,[e.cid]:{status:`error`,message:n}})),!1}}async function Kt(e){L(null),await Gt(e)&&await qt(e)}async function qt(e){if(!W.current.has(e.cid)){W.current.add(e.cid),F(t=>({...t,[e.cid]:{status:`available`}}));try{let t=await be.downloadFile(e.link);if(t.alreadyExists||t.fileName){W.current.delete(e.cid),F(t=>({...t,[e.cid]:{status:`available`}})),Wt({...e,fileName:t.fileName||e.fileName},t.fileName||e.fileName);return}t.taskId&&(U.current.set(t.taskId,e),i(K(`chat.attachment.downloadStarted`),`success`))}catch(t){let n=await xe(t);W.current.delete(e.cid),F(t=>({...t,[e.cid]:{status:`error`,message:n}}))}}}async function Jt(e){if(!Q()||!Z())return;let t=O(e);Ft(t,Math.max(T(e),Date.now())),h(e),_(t),window.history.pushState({},``,`?channel=${encodeURIComponent(t)}`)}async function Yt(e,t){if(t&&t.stopPropagation(),Q()&&Z()&&!E){D(!0);try{if(await y.leaveChannel(e),O(m)===e){h(null),_(``),zt();let e=new URL(window.location.href);e.searchParams.delete(`channel`),window.history.pushState({},``,e.pathname)}$(),j.close(),ct(null)}catch(e){await q(e,K(`chat.error.leave`))}finally{D(!1)}}}async function Xt(e){if(!Q()||!Z())return;let t=!e.pinned,n=O(e);try{let e=await y.setChannelPinned(n,t);p(t=>t.map(t=>O(t)===n?{...t,pinned:e.pinned}:t)),h(t=>t&&O(t)===n?{...t,pinned:e.pinned}:t)}catch(e){await q(e,K(t?`chat.error.pin`:`chat.error.unpin`))}}async function Zt(e){let t=e.trim();if(!t||Pe)return;let n=Ut(t);if(n){i(n,`error`);return}if(Q()&&Z()){Ve(!0);try{let e=await y.createChannel(t,`public`,we(u)),n=e.channelKey||e.key||e.name||t,r=f.find(e=>O(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=O(i);p(e=>e.some(e=>O(e)===a)?e.map(e=>O(e)===a?{...e,...i}:e):[...e,i]),Ae.close(),await Jt(i),X(a),$()}catch(e){await q(e,K(`chat.error.join`))}finally{Ve(!1)}}}async function Qt(e,t){if(!e.trim()||!m||!Q()||!Z())return!1;let n=e.trim(),r=O(m);try{let e=await Vt({channelName:r,content:n,attachment:t});return p(t=>t.map(t=>O(t)===r?{...t,lastMessageAt:new Date(Number(e?.timestamp)||Date.now()).toISOString()}:t)),e&&Ft(r,Number(e.timestamp)||Date.now()),X(r),!0}catch(e){return await q(e,K(`chat.error.send`)),!1}}async function $t(){if(!b.trim())return;let e=b.trim();x(``),await Qt(e)}function en(e,t){return`${tt}/${e}/${t}`}async function tn(e){if(!(!e||e.length===0||!m)&&Q()&&Z()&&!_t){vt(!0);try{for(let t of Array.from(e)){let e=en(k(m),t.name),n=await be.publishFile(t,e),r=n.fileName||e,a=n.link||`most://${n.cid}?filename=${encodeURIComponent(r)}`;await Qt(a,{kind:nt(t,r),cid:n.cid,fileName:r,link:a,mimeType:t.type||void 0,size:t.size})&&i(K(`chat.attachment.published`,{fileName:je(r)}),`success`)}}catch(e){await q(e,K(`chat.error.attachmentSend`))}finally{vt(!1)}}}async function nn(e){if(!Q()||!Z())return;let t=P[e.cid];if(t?.status!==`checking`){if(t?.status===`error`){L(e);return}if(t?.status!==`available`){await Gt(e)&&await qt(e);return}await qt(e)}}async function rn(e,t){if(!Q()||!Z())return;let n=O(e),r=await y.setChannelRemark(n,t);return p(e=>e.map(e=>O(e)===n?{...e,remark:r.remark}:e)),h(e=>e&&O(e)===n?{...e,remark:r.remark}:e),r.remark}async function an(){if(m)try{await rn(m,dt)}catch(e){await q(e,K(`chat.error.remark`))}}async function on(e){if(!(!lt||pt)){mt(!0);try{await rn(lt,e),M(null)}catch(e){await q(e,K(`chat.error.rename`))}finally{mt(!1)}}}function sn(e){if(!e.attachment)return(0,C.jsx)(Fe,{children:e.content});let t=e.attachment,n=P[t.cid]?.status;return(0,C.jsx)(Ie,{children:(0,C.jsx)(Ne,{attachment:t,status:n,pending:e.pending,onOpen:nn})})}function cn(e,t){let n=String(e||``).trim();return n?St?it(n)?n:t?`${n}#${t.slice(-4).toUpperCase()}`:n:n.replace(/#[a-fA-F0-9]{4}$/,``):rt(t)}function ln(){return(0,C.jsx)(ze,{isLoading:bt,members:yt.map(e=>({id:e.address,name:cn(e.displayName,e.address),avatarSrc:_e(e.address,e.avatar)}))})}let un=B&&!!g&&!m,dn=m?(0,C.jsx)(`h2`,{className:`header-title`,translate:`no`,children:A(m)}):(0,C.jsx)(`h2`,{className:`header-title`,children:K(`chat.title`)}),fn=me.trim().toLowerCase(),pn=(0,S.useMemo)(()=>[...f].sort((e,t)=>{let n=Number(!!t.pinned)-Number(!!e.pinned);if(n!==0)return n;let r=T(t)-T(e);return r===0?Mt(A(e),A(t)):r}),[f,Mt]),mn=fn?pn.filter(e=>[A(e),k(e),O(e)].some(e=>e.toLowerCase().includes(fn))):pn;return(0,C.jsxs)(ce,{className:`chat-app-layout`,defaultHide:B,sidebar:({closeSidebar:e})=>(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(le,{onNavigate:e}),(0,C.jsx)(`div`,{className:`chat-channel-search`,children:(0,C.jsxs)(`div`,{className:`ui-input-control`,children:[(0,C.jsx)(pe,{className:`ui-input-icon`,size:15}),(0,C.jsx)(`input`,{type:`search`,className:`input input-compact`,placeholder:K(`chat.search.placeholder`),value:me,onChange:e=>he(e.target.value),"aria-label":K(`chat.search.placeholder`)})]})}),(0,C.jsx)(`nav`,{className:`sidebar-nav`,children:f.length===0?(0,C.jsx)(`div`,{className:`sidebar-empty-state`,children:(0,C.jsx)(`p`,{children:K(`chat.empty.noChannels`)})}):mn.length===0?(0,C.jsx)(`div`,{className:`sidebar-empty-state`,children:(0,C.jsx)(`p`,{children:K(`chat.empty.noMatches`)})}):mn.map(t=>(0,C.jsx)(Re,{active:O(m)===O(t),pinned:!!t.pinned,unread:Je(t,Et),title:A(t),onSelect:()=>{Jt(t),e()},onTogglePin:()=>void Xt(t),onRename:()=>M(t),onLeave:()=>{ct(t),j.open()}},O(t)))}),(0,C.jsxs)(`button`,{className:`ui-action-dashed create-channel-btn`,onClick:()=>{!Q()||!Z()||Ae.open()},children:[(0,C.jsx)(fe,{size:16}),K(`chat.joinChannel`)]}),(0,C.jsx)(ye,{})]}),headerTitle:dn,sidebarToggleReplacement:B?(0,C.jsx)(`span`,{className:`sidebar-toggle-static-logo`,"aria-hidden":`true`,children:Dt?(0,C.jsx)(`img`,{className:`sidebar-toggle-static-logo-img`,src:Dt,alt:``,onError:()=>Tt(!0)}):(0,C.jsx)(Ce,{size:18})}):void 0,headerRight:(0,C.jsxs)(`div`,{className:`header-right-actions`,children:[(0,C.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>t(!e),title:K(`common.theme.toggle`),children:e?(0,C.jsx)(ne,{size:16}):(0,C.jsx)(te,{size:16})}),m&&(0,C.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>N(!0),title:K(`chat.channelSettings`),children:(0,C.jsx)(ke,{size:16})})]}),children:[m?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`div`,{className:`chat-messages`,children:[Bt.length===0?(0,C.jsxs)(`div`,{className:`ui-empty-state chat-messages-empty`,children:[(0,C.jsx)(`div`,{className:`ui-empty-icon empty-icon`,children:(0,C.jsx)(ue,{size:28})}),(0,C.jsx)(`p`,{children:K(`chat.empty.noMessages`)})]}):Bt.map(e=>{let t=e.author?.toLowerCase()===u?.address.toLowerCase();return(0,C.jsx)(Le,{variant:t?`self`:`other`,pending:e.pending,avatarSrc:_e(e.author,e.avatar||(t?u.avatar:void 0)),author:cn(e.authorName,e.author),time:Pt(e.timestamp),children:sn(e)},e.id||`${e.author}-${e.timestamp}`)}),(0,C.jsx)(`div`,{ref:Ot})]}),(0,C.jsx)(Be,{message:b,placeholder:K(u?`chat.composer.placeholder`:`chat.composer.signInPlaceholder`),disabled:!u,isPublishingAttachment:_t,attachmentInputRef:kt,onMessageChange:x,onSend:$t,onSelectAttachmentFiles:e=>{tn(e)}})]}):un?(0,C.jsxs)(`div`,{className:`ui-empty-state chat-welcome`,children:[(0,C.jsx)(`div`,{className:`ui-empty-icon ui-empty-icon-lg welcome-icon`,children:(0,C.jsx)(oe,{size:36,className:`ui-spinner`})}),(0,C.jsx)(`h2`,{className:`ui-empty-title`,children:K(`chat.restoring.title`)}),(0,C.jsx)(`p`,{className:`ui-empty-desc`,children:K(`chat.restoring.desc`)})]}):(0,C.jsx)(C.Fragment,{children:(0,C.jsxs)(`div`,{className:`ui-empty-state chat-welcome`,children:[(0,C.jsx)(`div`,{className:`ui-empty-icon ui-empty-icon-lg welcome-icon`,children:(0,C.jsx)(ue,{size:36})}),(0,C.jsx)(`h2`,{className:`ui-empty-title`,children:K(`chat.select.title`)}),(0,C.jsx)(`p`,{className:`ui-empty-desc`,children:K(`chat.select.desc`)}),(0,C.jsx)(de,{label:K(`chat.openChannelList`)})]})}),Oe&&(0,C.jsx)(s,{title:K(`chat.joinChannel`),placeholder:K(`chat.join.placeholder`),confirmText:K(`chat.join.confirm`),validate:Ut,onConfirm:Zt,onClose:()=>Ae.close(),isLoading:Pe,loadingText:K(`chat.join.joining`)}),lt&&(0,C.jsx)(s,{title:K(`chat.renameChannel`),placeholder:K(`chat.remark.placeholder`),defaultValue:lt.remark||``,confirmText:K(`chat.remark.save`),onConfirm:on,onClose:()=>{pt||M(null)},isLoading:pt,loadingText:K(`chat.remark.saving`),allowEmpty:!0,validate:e=>e.length>50?K(`chat.remark.tooLong`):``}),ot&&st&&(0,C.jsx)(c,{title:K(`chat.leaveChannel`),message:K(`chat.leaveConfirm`,{channel:A(st)}),confirmText:K(E?`chat.leaving`:`chat.leaveChannel`),onConfirm:()=>Yt(O(st),void 0),danger:!0,onClose:()=>{j.close(),ct(null)}}),I&&(0,C.jsx)(a,{onClose:()=>L(null),children:(0,C.jsxs)(`div`,{className:`confirm-modal`,onClick:e=>e.stopPropagation(),children:[(0,C.jsxs)(`div`,{className:`modal-header`,children:[(0,C.jsx)(`h3`,{children:K(`chat.attachment.noSeedsTitle`)}),(0,C.jsx)(`button`,{type:`button`,className:`btn btn-icon`,onClick:()=>L(null),"aria-label":K(`common.close`),children:(0,C.jsx)(r,{size:18})})]}),(0,C.jsx)(`p`,{children:P[I.cid]?.message||K(`chat.attachment.noSeedsFallback`)}),(0,C.jsxs)(`div`,{className:`modal-actions`,children:[(0,C.jsx)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:()=>L(null),children:K(`common.cancel`)}),(0,C.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>Kt(I),disabled:P[I.cid]?.status===`checking`,children:P[I.cid]?.status===`checking`?K(`app.checking`):K(`chat.attachment.retryCheck`)})]})]})}),ht&&(0,C.jsx)(ae,{item:ht,isBackendReady:G,getFileDownloadUrl:be.getFileDownloadUrl,onClose:()=>gt(null)}),ut&&m&&(0,C.jsx)(`div`,{className:`channel-detail-overlay`,onClick:()=>N(!1),children:(0,C.jsxs)(`div`,{className:`channel-detail-drawer`,onClick:e=>e.stopPropagation(),children:[(0,C.jsxs)(`div`,{className:`channel-detail-header`,children:[(0,C.jsx)(`h3`,{children:K(`chat.details.title`)}),(0,C.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>N(!1),children:(0,C.jsx)(r,{size:18})})]}),(0,C.jsxs)(`div`,{className:`channel-detail-body`,children:[(0,C.jsxs)(`div`,{className:`channel-detail-section channel-members-section`,children:[(0,C.jsx)(`div`,{className:`channel-detail-label`,children:(0,C.jsx)(`span`,{children:K(`chat.details.members`,{count:yt.length})})}),ln()]}),!B&&(0,C.jsx)(`div`,{className:`channel-detail-section`,children:(0,C.jsxs)(`label`,{className:`setting-switch`,children:[(0,C.jsx)(`span`,{children:K(`chat.details.showAddressSuffix`)}),(0,C.jsx)(`input`,{type:`checkbox`,checked:St,onChange:e=>Ct(e.target.checked)})]})}),!B&&(0,C.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,C.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,C.jsx)(De,{size:14}),(0,C.jsx)(`span`,{children:K(`chat.details.channelId`)})]}),(0,C.jsx)(`div`,{className:`ui-meta-box channel-detail-value channel-detail-mono`,translate:`no`,children:k(m)})]}),(0,C.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,C.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,C.jsx)(ie,{size:14}),(0,C.jsx)(`span`,{children:K(`chat.remark.placeholder`)})]}),(0,C.jsx)(`input`,{type:`text`,className:`input input-compact`,placeholder:K(`chat.remark.placeholder`),value:dt,onChange:e=>ft(e.target.value),onFocus:()=>ft(m.remark||``),onBlur:()=>an(),onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur()},maxLength:50})]}),(0,C.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,C.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,C.jsx)(Ee,{size:14}),(0,C.jsx)(`span`,{children:K(`chat.channel.createdAt`)})]}),(0,C.jsx)(`div`,{className:`ui-meta-box channel-detail-value`,children:m.createdAt?Nt(m.createdAt):`-`})]})]}),!B&&(0,C.jsx)(`div`,{className:`channel-detail-footer`,children:(0,C.jsx)(`button`,{className:`btn btn-secondary btn-block`,onClick:()=>{N(!1),ct(m),j.open()},children:K(`chat.leaveChannel`)})})]})})]})}var j=i(`/chat/`)({component:ot});export{j as Route};
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{E as r,w as i}from"./ui-PnUvY9zL.js";import{a}from"./i18n--maTEG0d.js";import{t as o}from"./cloud-DfaFxhLj.js";import{t as s}from"./message-square-Dg3YjjmO.js";import{t as c}from"./music-BeCPak70.js";import{t as l}from"./play-CnhsLC5C.js";import{t as u}from"./search-CsAnnJyH.js";import{t as d}from"./send-C1J-eGNs.js";import{t as f}from"./wifi-pP6SJLcu.js";import{t as p}from"./MarketingLayout-fc2mymJm.js";var m=i(`at-sign`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8`,key:`7n84p3`}]]),h=i(`book-open`,[[`path`,{d:`M12 7v14`,key:`1akyts`}],[`path`,{d:`M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z`,key:`ruj8y`}]]),g=i(`bot`,[[`path`,{d:`M12 8V4H8`,key:`hb8ula`}],[`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`,key:`enze0r`}],[`path`,{d:`M2 14h2`,key:`vft8re`}],[`path`,{d:`M20 14h2`,key:`4cs60a`}],[`path`,{d:`M15 13v2`,key:`1xurst`}],[`path`,{d:`M9 13v2`,key:`rq6x2g`}]]),_=i(`camera`,[[`path`,{d:`M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z`,key:`18u6gg`}],[`circle`,{cx:`12`,cy:`13`,r:`3`,key:`1vg3eu`}]]),v=i(`messages-square`,[[`path`,{d:`M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z`,key:`1n2ejm`}],[`path`,{d:`M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1`,key:`1qfcsi`}]]),y=i(`package`,[[`path`,{d:`M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z`,key:`1a0edw`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}]]),b=i(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),x=i(`smartphone`,[[`rect`,{width:`14`,height:`20`,x:`5`,y:`2`,rx:`2`,ry:`2`,key:`1yt0o3`}],[`path`,{d:`M12 18h.01`,key:`mhygvu`}]]),ee=i(`terminal`,[[`path`,{d:`M12 19h8`,key:`baeox8`}],[`path`,{d:`m4 17 6-6-6-6`,key:`1yngyt`}]]),te=i(`triangle`,[[`path`,{d:`M13.73 4a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z`,key:`14u9p9`}]]),S=t(e(),1);function ne(e,t){let n=e.icons,r=e.aliases||Object.create(null),i=Object.create(null);function a(e){if(n[e])return i[e]=[];if(!(e in i)){i[e]=null;let t=r[e]&&r[e].parent,n=t&&a(t);n&&(i[e]=[t].concat(n))}return i[e]}return Object.keys(n).concat(Object.keys(r)).forEach(a),i}var re=Object.freeze({left:0,top:0,width:16,height:16}),C=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),w=Object.freeze({...re,...C}),T=Object.freeze({...w,body:``,hidden:!1});function ie(e,t){let n={};!e.hFlip!=!t.hFlip&&(n.hFlip=!0),!e.vFlip!=!t.vFlip&&(n.vFlip=!0);let r=((e.rotate||0)+(t.rotate||0))%4;return r&&(n.rotate=r),n}function E(e,t){let n=ie(e,t);for(let r in T)r in C?r in e&&!(r in n)&&(n[r]=C[r]):r in t?n[r]=t[r]:r in e&&(n[r]=e[r]);return n}function ae(e,t,n){let r=e.icons,i=e.aliases||Object.create(null),a={};function o(e){a=E(r[e]||i[e],a)}return o(t),n.forEach(o),E(e,a)}function D(e,t){let n=[];if(typeof e!=`object`||typeof e.icons!=`object`)return n;e.not_found instanceof Array&&e.not_found.forEach(e=>{t(e,null),n.push(e)});let r=ne(e);for(let i in r){let a=r[i];a&&(t(i,ae(e,i,a)),n.push(i))}return n}var oe={provider:``,aliases:{},not_found:{},...re};function O(e,t){for(let n in t)if(n in e&&typeof e[n]!=typeof t[n])return!1;return!0}function k(e){if(typeof e!=`object`||!e)return null;let t=e;if(typeof t.prefix!=`string`||!e.icons||typeof e.icons!=`object`||!O(e,oe))return null;let n=t.icons;for(let e in n){let t=n[e];if(!e||typeof t.body!=`string`||!O(t,T))return null}let r=t.aliases||Object.create(null);for(let e in r){let t=r[e],i=t.parent;if(!e||typeof i!=`string`||!n[i]&&!r[i]||!O(t,T))return null}return t}var A=Object.create(null);function se(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:new Set}}function j(e,t){let n=A[e]||(A[e]=Object.create(null));return n[t]||(n[t]=se(e,t))}function ce(e,t){return k(t)?D(t,(t,n)=>{n?e.icons[t]=n:e.missing.add(t)}):[]}function le(e,t,n){try{if(typeof n.body==`string`)return e.icons[t]={...n},!0}catch{}return!1}var ue=/^[a-z0-9]+(-[a-z0-9]+)*$/,M=(e,t,n,r=``)=>{let i=e.split(`:`);if(e.slice(0,1)===`@`){if(i.length<2||i.length>3)return null;r=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){let e=i.pop(),n=i.pop(),a={provider:i.length>0?i[0]:r,prefix:n,name:e};return t&&!N(a)?null:a}let a=i[0],o=a.split(`-`);if(o.length>1){let e={provider:r,prefix:o.shift(),name:o.join(`-`)};return t&&!N(e)?null:e}if(n&&r===``){let e={provider:r,prefix:``,name:a};return t&&!N(e,n)?null:e}return null},N=(e,t)=>e?!!((t&&e.prefix===``||e.prefix)&&e.name):!1,P=!1;function F(e){return typeof e==`boolean`&&(P=e),P}function I(e){let t=typeof e==`string`?M(e,!0,P):e;if(t){let e=j(t.provider,t.prefix),n=t.name;return e.icons[n]||(e.missing.has(n)?null:void 0)}}function de(e,t){let n=M(e,!0,P);if(!n)return!1;let r=j(n.provider,n.prefix);return t?le(r,n.name,t):(r.missing.add(n.name),!0)}function fe(e,t){if(typeof e!=`object`)return!1;if(typeof t!=`string`&&(t=e.provider||``),P&&!t&&!e.prefix){let t=!1;return k(e)&&(e.prefix=``,D(e,(e,n)=>{de(e,n)&&(t=!0)})),t}let n=e.prefix;return N({prefix:n,name:`a`})?!!ce(j(t,n),e):!1}var L=Object.freeze({width:null,height:null}),R=Object.freeze({...L,...C}),pe=/(-?[0-9.]*[0-9]+[0-9.]*)/g,me=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function z(e,t,n){if(t===1)return e;if(n||=100,typeof e==`number`)return Math.ceil(e*t*n)/n;if(typeof e!=`string`)return e;let r=e.split(pe);if(r===null||!r.length)return e;let i=[],a=r.shift(),o=me.test(a);for(;;){if(o){let e=parseFloat(a);isNaN(e)?i.push(a):i.push(Math.ceil(e*t*n)/n)}else i.push(a);if(a=r.shift(),a===void 0)return i.join(``);o=!o}}function he(e,t=`defs`){let n=``,r=e.indexOf(`<`+t);for(;r>=0;){let i=e.indexOf(`>`,r),a=e.indexOf(`</`+t);if(i===-1||a===-1)break;let o=e.indexOf(`>`,a);if(o===-1)break;n+=e.slice(i+1,a).trim(),e=e.slice(0,r).trim()+e.slice(o+1)}return{defs:n,content:e}}function ge(e,t){return e?`<defs>`+e+`</defs>`+t:t}function _e(e,t,n){let r=he(e);return ge(r.defs,t+r.content+n)}var ve=e=>e===`unset`||e===`undefined`||e===`none`;function ye(e,t){let n={...w,...e},r={...R,...t},i={left:n.left,top:n.top,width:n.width,height:n.height},a=n.body;[n,r].forEach(e=>{let t=[],n=e.hFlip,r=e.vFlip,o=e.rotate;n?r?o+=2:(t.push(`translate(`+(i.width+i.left).toString()+` `+(0-i.top).toString()+`)`),t.push(`scale(-1 1)`),i.top=i.left=0):r&&(t.push(`translate(`+(0-i.left).toString()+` `+(i.height+i.top).toString()+`)`),t.push(`scale(1 -1)`),i.top=i.left=0);let s;switch(o<0&&(o-=Math.floor(o/4)*4),o%=4,o){case 1:s=i.height/2+i.top,t.unshift(`rotate(90 `+s.toString()+` `+s.toString()+`)`);break;case 2:t.unshift(`rotate(180 `+(i.width/2+i.left).toString()+` `+(i.height/2+i.top).toString()+`)`);break;case 3:s=i.width/2+i.left,t.unshift(`rotate(-90 `+s.toString()+` `+s.toString()+`)`);break}o%2==1&&(i.left!==i.top&&(s=i.left,i.left=i.top,i.top=s),i.width!==i.height&&(s=i.width,i.width=i.height,i.height=s)),t.length&&(a=_e(a,`<g transform="`+t.join(` `)+`">`,`</g>`))});let o=r.width,s=r.height,c=i.width,l=i.height,u,d;o===null?(d=s===null?`1em`:s===`auto`?l:s,u=z(d,c/l)):(u=o===`auto`?c:o,d=s===null?z(u,l/c):s===`auto`?l:s);let f={},p=(e,t)=>{ve(t)||(f[e]=t.toString())};p(`width`,u),p(`height`,d);let m=[i.left,i.top,c,l];return f.viewBox=m.join(` `),{attributes:f,viewBox:m,body:a}}var be=/\sid="(\S+)"/g,xe=`IconifyId`+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),Se=0;function Ce(e,t=xe){let n=[],r;for(;r=be.exec(e);)n.push(r[1]);if(!n.length)return e;let i=`suffix`+(Math.random()*16777216|Date.now()).toString(16);return n.forEach(n=>{let r=typeof t==`function`?t(n):t+(Se++).toString(),a=n.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);e=e.replace(RegExp(`([#;"])(`+a+`)([")]|\\.[a-z])`,`g`),`$1`+r+i+`$3`)}),e=e.replace(new RegExp(i,`g`),``),e}var B=Object.create(null);function we(e,t){B[e]=t}function V(e){return B[e]||B[``]}function H(e){let t;if(typeof e.resources==`string`)t=[e.resources];else if(t=e.resources,!(t instanceof Array)||!t.length)return null;return{resources:t,path:e.path||`/`,maxURL:e.maxURL||500,rotate:e.rotate||750,timeout:e.timeout||5e3,random:e.random===!0,index:e.index||0,dataAfterTimeout:e.dataAfterTimeout!==!1}}for(var U=Object.create(null),W=[`https://api.simplesvg.com`,`https://api.unisvg.com`],G=[];W.length>0;)W.length===1||Math.random()>.5?G.push(W.shift()):G.push(W.pop());U[``]=H({resources:[`https://api.iconify.design`].concat(G)});function Te(e,t){let n=H(t);return n===null?!1:(U[e]=n,!0)}function K(e){return U[e]}var q=(()=>{let e;try{if(e=fetch,typeof e==`function`)return e}catch{}})();function Ee(e,t){let n=K(e);if(!n)return 0;let r;if(!n.maxURL)r=0;else{let e=0;n.resources.forEach(t=>{e=Math.max(e,t.length)});let i=t+`.json?icons=`;r=n.maxURL-e-n.path.length-i.length}return r}function De(e){return e===404}var Oe=(e,t,n)=>{let r=[],i=Ee(e,t),a=`icons`,o={type:a,provider:e,prefix:t,icons:[]},s=0;return n.forEach((n,c)=>{s+=n.length+1,s>=i&&c>0&&(r.push(o),o={type:a,provider:e,prefix:t,icons:[]},s=n.length),o.icons.push(n)}),r.push(o),r};function ke(e){if(typeof e==`string`){let t=K(e);if(t)return t.path}return`/`}var Ae={prepare:Oe,send:(e,t,n)=>{if(!q){n(`abort`,424);return}let r=ke(t.provider);switch(t.type){case`icons`:{let e=t.prefix,n=t.icons.join(`,`),i=new URLSearchParams({icons:n});r+=e+`.json?`+i.toString();break}case`custom`:{let e=t.uri;r+=e.slice(0,1)===`/`?e.slice(1):e;break}default:n(`abort`,400);return}let i=503;q(e+r).then(e=>{let t=e.status;if(t!==200){setTimeout(()=>{n(De(t)?`abort`:`next`,t)});return}return i=501,e.json()}).then(e=>{if(typeof e!=`object`||!e){setTimeout(()=>{e===404?n(`abort`,e):n(`next`,i)});return}setTimeout(()=>{n(`success`,e)})}).catch(()=>{n(`next`,i)})}};function je(e,t){e.forEach(e=>{let n=e.loaderCallbacks;n&&(e.loaderCallbacks=n.filter(e=>e.id!==t))})}function Me(e){e.pendingCallbacksFlag||(e.pendingCallbacksFlag=!0,setTimeout(()=>{e.pendingCallbacksFlag=!1;let t=e.loaderCallbacks?e.loaderCallbacks.slice(0):[];if(!t.length)return;let n=!1,r=e.provider,i=e.prefix;t.forEach(t=>{let a=t.icons,o=a.pending.length;a.pending=a.pending.filter(t=>{if(t.prefix!==i)return!0;let o=t.name;if(e.icons[o])a.loaded.push({provider:r,prefix:i,name:o});else if(e.missing.has(o))a.missing.push({provider:r,prefix:i,name:o});else return n=!0,!0;return!1}),a.pending.length!==o&&(n||je([e],t.id),t.callback(a.loaded.slice(0),a.missing.slice(0),a.pending.slice(0),t.abort))})}))}var Ne=0;function Pe(e,t,n){let r=Ne++,i=je.bind(null,n,r);if(!t.pending.length)return i;let a={id:r,icons:t,callback:e,abort:i};return n.forEach(e=>{(e.loaderCallbacks||=[]).push(a)}),i}function Fe(e){let t={loaded:[],missing:[],pending:[]},n=Object.create(null);e.sort((e,t)=>e.provider===t.provider?e.prefix===t.prefix?e.name.localeCompare(t.name):e.prefix.localeCompare(t.prefix):e.provider.localeCompare(t.provider));let r={provider:``,prefix:``,name:``};return e.forEach(e=>{if(r.name===e.name&&r.prefix===e.prefix&&r.provider===e.provider)return;r=e;let i=e.provider,a=e.prefix,o=e.name,s=n[i]||(n[i]=Object.create(null)),c=s[a]||(s[a]=j(i,a)),l;l=o in c.icons?t.loaded:a===``||c.missing.has(o)?t.missing:t.pending;let u={provider:i,prefix:a,name:o};l.push(u)}),t}function Ie(e,t=!0,n=!1){let r=[];return e.forEach(e=>{let i=typeof e==`string`?M(e,t,n):e;i&&r.push(i)}),r}var Le={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function Re(e,t,n,r){let i=e.resources.length,a=e.random?Math.floor(Math.random()*i):e.index,o;if(e.random){let t=e.resources.slice(0);for(o=[];t.length>1;){let e=Math.floor(Math.random()*t.length);o.push(t[e]),t=t.slice(0,e).concat(t.slice(e+1))}o=o.concat(t)}else o=e.resources.slice(a).concat(e.resources.slice(0,a));let s=Date.now(),c=`pending`,l=0,u,d=null,f=[],p=[];typeof r==`function`&&p.push(r);function m(){d&&=(clearTimeout(d),null)}function h(){c===`pending`&&(c=`aborted`),m(),f.forEach(e=>{e.status===`pending`&&(e.status=`aborted`)}),f=[]}function g(e,t){t&&(p=[]),typeof e==`function`&&p.push(e)}function _(){return{startTime:s,payload:t,status:c,queriesSent:l,queriesPending:f.length,subscribe:g,abort:h}}function v(){c=`failed`,p.forEach(e=>{e(void 0,u)})}function y(){f.forEach(e=>{e.status===`pending`&&(e.status=`aborted`)}),f=[]}function b(t,n,r){let i=n!==`success`;switch(f=f.filter(e=>e!==t),c){case`pending`:break;case`failed`:if(i||!e.dataAfterTimeout)return;break;default:return}if(n===`abort`){u=r,v();return}if(i){u=r,f.length||(o.length?x():v());return}if(m(),y(),!e.random){let n=e.resources.indexOf(t.resource);n!==-1&&n!==e.index&&(e.index=n)}c=`completed`,p.forEach(e=>{e(r)})}function x(){if(c!==`pending`)return;m();let r=o.shift();if(r===void 0){if(f.length){d=setTimeout(()=>{m(),c===`pending`&&(y(),v())},e.timeout);return}v();return}let i={status:`pending`,resource:r,callback:(e,t)=>{b(i,e,t)}};f.push(i),l++,d=setTimeout(x,e.rotate),n(r,t,i.callback)}return setTimeout(x),_}function ze(e){let t={...Le,...e},n=[];function r(){n=n.filter(e=>e().status===`pending`)}function i(e,i,a){let o=Re(t,e,i,(e,t)=>{r(),a&&a(e,t)});return n.push(o),o}function a(e){return n.find(t=>e(t))||null}return{query:i,find:a,setIndex:e=>{t.index=e},getIndex:()=>t.index,cleanup:r}}function Be(){}var J=Object.create(null);function Ve(e){if(!J[e]){let t=K(e);if(!t)return;J[e]={config:t,redundancy:ze(t)}}return J[e]}function He(e,t,n){let r,i;if(typeof e==`string`){let t=V(e);if(!t)return n(void 0,424),Be;i=t.send;let a=Ve(e);a&&(r=a.redundancy)}else{let t=H(e);if(t){r=ze(t);let n=V(e.resources?e.resources[0]:``);n&&(i=n.send)}}return!r||!i?(n(void 0,424),Be):r.query(t,i,n)().abort}function Ue(){}function We(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout(()=>{e.iconsLoaderFlag=!1,Me(e)}))}function Ge(e){let t=[],n=[];return e.forEach(e=>{(e.match(ue)?t:n).push(e)}),{valid:t,invalid:n}}function Y(e,t,n){function r(){let n=e.pendingIcons;t.forEach(t=>{n&&n.delete(t),e.icons[t]||e.missing.add(t)})}if(n&&typeof n==`object`)try{if(!ce(e,n).length){r();return}}catch(e){console.error(e)}r(),We(e)}function Ke(e,t){e instanceof Promise?e.then(e=>{t(e)}).catch(()=>{t(null)}):t(e)}function qe(e,t){e.iconsToLoad?e.iconsToLoad=e.iconsToLoad.concat(t).sort():e.iconsToLoad=t,e.iconsQueueFlag||(e.iconsQueueFlag=!0,setTimeout(()=>{e.iconsQueueFlag=!1;let{provider:t,prefix:n}=e,r=e.iconsToLoad;if(delete e.iconsToLoad,!r||!r.length)return;let i=e.loadIcon;if(e.loadIcons&&(r.length>1||!i)){Ke(e.loadIcons(r,n,t),t=>{Y(e,r,t)});return}if(i){r.forEach(r=>{Ke(i(r,n,t),t=>{Y(e,[r],t?{prefix:n,icons:{[r]:t}}:null)})});return}let{valid:a,invalid:o}=Ge(r);if(o.length&&Y(e,o,null),!a.length)return;let s=n.match(ue)?V(t):null;if(!s){Y(e,a,null);return}s.prepare(t,n,a).forEach(n=>{He(t,n,t=>{Y(e,n.icons,t)})})}))}var Je=(e,t)=>{let n=Fe(Ie(e,!0,F()));if(!n.pending.length){let e=!0;return t&&setTimeout(()=>{e&&t(n.loaded,n.missing,n.pending,Ue)}),()=>{e=!1}}let r=Object.create(null),i=[],a,o;return n.pending.forEach(e=>{let{provider:t,prefix:n}=e;if(n===o&&t===a)return;a=t,o=n,i.push(j(t,n));let s=r[t]||(r[t]=Object.create(null));s[n]||(s[n]=[])}),n.pending.forEach(e=>{let{provider:t,prefix:n,name:i}=e,a=j(t,n),o=a.pendingIcons||=new Set;o.has(i)||(o.add(i),r[t][n].push(i))}),i.forEach(e=>{let t=r[e.provider][e.prefix];t.length&&qe(e,t)}),t?Pe(t,n,i):Ue};function Ye(e,t){let n={...e};for(let e in t){let r=t[e],i=typeof r;e in L?(r===null||r&&(i===`string`||i===`number`))&&(n[e]=r):i===typeof n[e]&&(n[e]=e===`rotate`?r%4:r)}return n}var Xe=/[\s,]+/;function Ze(e,t){t.split(Xe).forEach(t=>{switch(t.trim()){case`horizontal`:e.hFlip=!0;break;case`vertical`:e.vFlip=!0;break}})}function Qe(e,t=0){let n=e.replace(/^-?[0-9.]*/,``);function r(e){for(;e<0;)e+=4;return e%4}if(n===``){let t=parseInt(e);return isNaN(t)?0:r(t)}else if(n!==e){let t=0;switch(n){case`%`:t=25;break;case`deg`:t=90}if(t){let i=parseFloat(e.slice(0,e.length-n.length));return isNaN(i)?0:(i/=t,i%1==0?r(i):0)}}return t}function $e(e,t){let n=e.indexOf(`xlink:`)===-1?``:` xmlns:xlink="http://www.w3.org/1999/xlink"`;for(let e in t)n+=` `+e+`="`+t[e]+`"`;return`<svg xmlns="http://www.w3.org/2000/svg"`+n+`>`+e+`</svg>`}function et(e){return e.replace(/"/g,`'`).replace(/%/g,`%25`).replace(/#/g,`%23`).replace(/</g,`%3C`).replace(/>/g,`%3E`).replace(/\s+/g,` `)}function tt(e){return`data:image/svg+xml,`+et(e)}function nt(e){return`url("`+tt(e)+`")`}var X;function rt(){try{X=window.trustedTypes.createPolicy(`iconify`,{createHTML:e=>e})}catch{X=null}}function it(e){return X===void 0&&rt(),X?X.createHTML(e):e}var at={...R,inline:!1},ot={xmlns:`http://www.w3.org/2000/svg`,xmlnsXlink:`http://www.w3.org/1999/xlink`,"aria-hidden":!0,role:`img`},st={display:`inline-block`},Z={backgroundColor:`currentColor`},ct={backgroundColor:`transparent`},lt={Image:`var(--svg)`,Repeat:`no-repeat`,Size:`100% 100%`},ut={WebkitMask:Z,mask:Z,background:ct};for(let e in ut){let t=ut[e];for(let n in lt)t[e+n]=lt[n]}var dt={...at,inline:!0};function ft(e){return e+(e.match(/^[-0-9.]+$/)?`px`:``)}var pt=(e,t,n)=>{let r=t.inline?dt:at,i=Ye(r,t),a=t.mode||`svg`,o={},s=t.style||{},c={...a===`svg`?ot:{}};if(n){let e=M(n,!1,!0);if(e){let t=[`iconify`];for(let n of[`provider`,`prefix`])e[n]&&t.push(`iconify--`+e[n]);c.className=t.join(` `)}}for(let e in t){let n=t[e];if(n!==void 0)switch(e){case`icon`:case`style`:case`children`:case`onLoad`:case`mode`:case`ssr`:case`fallback`:break;case`_ref`:c.ref=n;break;case`className`:c[e]=(c[e]?c[e]+` `:``)+n;break;case`inline`:case`hFlip`:case`vFlip`:i[e]=n===!0||n===`true`||n===1;break;case`flip`:typeof n==`string`&&Ze(i,n);break;case`color`:o.color=n;break;case`rotate`:typeof n==`string`?i[e]=Qe(n):typeof n==`number`&&(i[e]=n);break;case`ariaHidden`:case`aria-hidden`:n!==!0&&n!==`true`&&delete c[`aria-hidden`];break;default:r[e]===void 0&&(c[e]=n)}}let l=ye(e,i),u=l.attributes;if(i.inline&&(o.verticalAlign=`-0.125em`),a===`svg`){c.style={...o,...s},Object.assign(c,u);let e=0,n=t.id;return typeof n==`string`&&(n=n.replace(/-/g,`_`)),c.dangerouslySetInnerHTML={__html:it(Ce(l.body,n?()=>n+`ID`+ e++:`iconifyReact`))},(0,S.createElement)(`svg`,c)}let{body:d,width:f,height:p}=e,m=a===`mask`||(a===`bg`?!1:d.indexOf(`currentColor`)!==-1),h=$e(d,{...u,width:f+``,height:p+``});return c.style={...o,"--svg":nt(h),width:ft(u.width),height:ft(u.height),...st,...m?Z:ct,...s},(0,S.createElement)(`span`,c)};if(F(!0),we(``,Ae),typeof document<`u`&&typeof window<`u`){let e=window;if(e.IconifyPreload!==void 0){let t=e.IconifyPreload,n=`Invalid IconifyPreload syntax.`;typeof t==`object`&&t&&(t instanceof Array?t:[t]).forEach(e=>{try{(typeof e!=`object`||!e||e instanceof Array||typeof e.icons!=`object`||typeof e.prefix!=`string`||!fe(e))&&console.error(n)}catch{console.error(n)}})}if(e.IconifyProviders!==void 0){let t=e.IconifyProviders;if(typeof t==`object`&&t)for(let e in t){let n=`IconifyProviders[`+e+`] is invalid.`;try{let r=t[e];if(typeof r!=`object`||!r||r.resources===void 0)continue;Te(e,r)||console.error(n)}catch{console.error(n)}}}}function mt(e){let[t,n]=(0,S.useState)(!!e.ssr),[r,i]=(0,S.useState)({});function a(t){if(t){let t=e.icon;if(typeof t==`object`)return{name:``,data:t};let n=I(t);if(n)return{name:t,data:n}}return{name:``}}let[o,s]=(0,S.useState)(a(!!e.ssr));function c(){let e=r.callback;e&&(e(),i({}))}function l(e){if(JSON.stringify(o)!==JSON.stringify(e))return c(),s(e),!0}function u(){var t;let n=e.icon;if(typeof n==`object`){l({name:``,data:n});return}let r=I(n);l({name:n,data:r})&&(r===void 0?i({callback:Je([n],u)}):r&&((t=e.onLoad)==null||t.call(e,n)))}(0,S.useEffect)(()=>(n(!0),c),[]),(0,S.useEffect)(()=>{t&&u()},[e.icon,t]);let{name:d,data:f}=o;return f?pt({...w,...f},e,d):e.children?e.children:e.fallback?e.fallback:(0,S.createElement)(`span`,{})}var ht=(0,S.forwardRef)((e,t)=>mt({...e,_ref:t}));(0,S.forwardRef)((e,t)=>mt({inline:!0,...e,_ref:t}));var Q=n(),$=[{name:`Google`,host:`google.com`,icon:`simple-icons:google`,fallback:(0,Q.jsx)(u,{size:20})},{name:`Cloudflare`,host:`cloudflare.com`,icon:`simple-icons:cloudflare`,fallback:(0,Q.jsx)(o,{size:20})},{name:`YouTube`,host:`youtube.com`,icon:`simple-icons:youtube`,fallback:(0,Q.jsx)(l,{size:20})},{name:`GitHub`,host:`github.com`,icon:`simple-icons:github`,fallback:(0,Q.jsx)(ee,{size:20})},{name:`ChatGPT`,host:`chatgpt.com`,icon:`simple-icons:openai`,fallback:(0,Q.jsx)(g,{size:20})},{name:`X`,host:`x.com`,icon:`simple-icons:x`,fallback:(0,Q.jsx)(m,{size:20})},{name:`Instagram`,host:`instagram.com`,icon:`simple-icons:instagram`,fallback:(0,Q.jsx)(_,{size:20})},{name:`Reddit`,host:`reddit.com`,icon:`simple-icons:reddit`,fallback:(0,Q.jsx)(s,{size:20})},{name:`Wikipedia`,host:`wikipedia.org`,icon:`simple-icons:wikipedia`,fallback:(0,Q.jsx)(h,{size:20})},{name:`Apple`,host:`apple.com`,icon:`simple-icons:apple`,fallback:(0,Q.jsx)(x,{size:20})},{name:`Telegram`,host:`telegram.org`,icon:`simple-icons:telegram`,fallback:(0,Q.jsx)(d,{size:20})},{name:`Discord`,host:`discord.com`,icon:`simple-icons:discord`,fallback:(0,Q.jsx)(v,{size:20})},{name:`TikTok`,host:`tiktok.com`,icon:`simple-icons:tiktok`,fallback:(0,Q.jsx)(c,{size:20})},{name:`npm`,host:`npmjs.com`,icon:`simple-icons:npm`,fallback:(0,Q.jsx)(y,{size:20})},{name:`Vercel`,host:`vercel.com`,icon:`simple-icons:vercel`,fallback:(0,Q.jsx)(te,{size:20})}],gt=5e3;function _t({icon:e,fallback:t}){let[n,r]=(0,S.useState)(!1);return(0,S.useEffect)(()=>{let t=new Image;t.onload=()=>r(!0),t.onerror=()=>r(!1),t.src=`https://api.iconify.design/${e.replace(`:`,`/`)}.svg`},[e]),(0,Q.jsxs)(`span`,{className:`brand-icon-wrap`,children:[(0,Q.jsx)(`span`,{className:`brand-icon-fallback ${n?`hidden`:``}`,children:t}),(0,Q.jsx)(`span`,{className:`brand-icon-real ${n?`visible`:``}`,children:(0,Q.jsx)(ht,{icon:e,width:20,height:20})})]})}function vt(){let{t:e,formatNumber:t}=a(),[n,r]=(0,S.useState)(new Map),[i,o]=(0,S.useState)(!1),s=(0,S.useRef)(new Map);(0,S.useEffect)(()=>{document.title=e(`ping.meta.title`)},[e]);let c=(0,S.useCallback)(e=>{r(t=>{let n=new Map(t);return n.set(e,{status:`pending`,latency:0}),n});let t=new AbortController;s.current.set(e,t);let n=performance.now(),i=(t,n)=>{r(r=>{let i=new Map(r);return i.set(e,{status:t,latency:n}),i})},a=setTimeout(()=>{t.abort()},gt);fetch(`https://${e}/`,{method:`HEAD`,mode:`no-cors`,cache:`no-store`,signal:t.signal}).then(()=>{clearTimeout(a),i(`ok`,Math.round(performance.now()-n))}).catch(()=>{clearTimeout(a),i(`timeout`,0)})},[]),l=(0,S.useCallback)(()=>{o(!0);let e=new Map;$.forEach(t=>{e.set(t.host,{status:`pending`,latency:0})}),r(e);let t=new Set($.map(e=>e.host));$.forEach(e=>{let n=new AbortController;s.current.set(e.host,n);let i=performance.now(),a=(n,i)=>{t.has(e.host)&&(t.delete(e.host),r(t=>{let r=new Map(t);return r.set(e.host,{status:n,latency:i}),r}),t.size===0&&o(!1))},c=setTimeout(()=>{n.abort()},gt);fetch(`https://${e.host}/`,{method:`HEAD`,mode:`no-cors`,cache:`no-store`,signal:n.signal}).then(()=>{clearTimeout(c),a(`ok`,Math.round(performance.now()-i))}).catch(()=>{clearTimeout(c),a(`timeout`,0)})})},[]);return(0,S.useEffect)(()=>(l(),()=>{s.current.forEach(e=>e.abort()),s.current.clear()}),[l]),(0,Q.jsxs)(`div`,{className:`ping-page`,children:[(0,Q.jsxs)(`div`,{className:`ping-header`,children:[(0,Q.jsxs)(`div`,{className:`ping-title-wrap`,children:[(0,Q.jsx)(f,{size:28,className:`ping-title-icon`}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`h1`,{className:`ping-title`,children:e(`ping.title`)}),(0,Q.jsx)(`p`,{className:`ping-subtitle`,children:e(`ping.subtitle`)})]})]}),(0,Q.jsx)(`button`,{className:`btn btn-icon`,onClick:l,disabled:i,"aria-label":e(`ping.retryAll`),title:e(`ping.retryAll`),children:(0,Q.jsx)(b,{size:18,className:i?`ping-spin`:``})})]}),(0,Q.jsx)(`div`,{className:`ping-grid`,children:$.map(r=>{let i=n.get(r.host),a=!i||i.status===`pending`,o=i?.status===`timeout`;return(0,Q.jsxs)(`div`,{className:`ping-card ${a?`pending`:``}`,children:[(0,Q.jsxs)(`div`,{className:`ping-card-top`,children:[(0,Q.jsx)(`span`,{className:`ping-card-icon`,children:(0,Q.jsx)(_t,{icon:r.icon,fallback:r.fallback})}),(0,Q.jsx)(`a`,{href:`https://${r.host}`,target:`_blank`,rel:`noreferrer`,className:`ping-card-name`,children:r.name}),(0,Q.jsx)(`button`,{className:`ping-card-refresh`,onClick:()=>c(r.host),disabled:a,"aria-label":e(`ping.retryOne`,{name:r.name}),title:e(`ping.retry`),children:(0,Q.jsx)(b,{size:13,className:a?`ping-spin`:``})})]}),(0,Q.jsxs)(`div`,{className:`ping-card-bottom`,children:[a?(0,Q.jsx)(`span`,{className:`ping-pulse-dot`}):(0,Q.jsx)(`span`,{className:`ping-status-label ${o?`is-error`:`is-success`}`,children:e(o?`ping.unavailable`:`ping.available`)}),(0,Q.jsx)(`span`,{className:`ping-latency ${a?`is-muted`:o?`is-error`:`is-success`}`,children:a?`--`:o?e(`ping.timeout`):`${t(i.latency)} ms`})]})]},r.host)})})]})}function yt(){return(0,Q.jsx)(p,{children:(0,Q.jsx)(vt,{})})}var bt=r(`/ping/`)({component:yt});export{bt as Route};
@@ -1,2 +0,0 @@
1
- import{n as e,o as t,r as n,t as r}from"./jsx-runtime-Bt-cYkS5.js";import{E as i,w as a}from"./ui-PnUvY9zL.js";import{a as o}from"./i18n--maTEG0d.js";import{i as s}from"./LanguageToggle-BoBNesNU.js";import{t as c}from"./download-Q6jKMPIG.js";import{t as l}from"./file-text-CVl5SZPJ.js";import{t as u}from"./hard-drive-Cew_LD0N.js";import{t as d}from"./save-BVeMjaW1.js";import{t as f}from"./shield-check-CZYDVJoh.js";import{t as p}from"./trash-2-C_LtCiNh.js";import{t as m}from"./triangle-alert-DOwc-41Y.js";import{t as h}from"./wifi-pP6SJLcu.js";import{O as g,T as _,_ as v,c as y,f as b,g as ee,l as x}from"./index-Cg4kEvx8.js";import{t as S}from"./dayjs.min-Dcc0B6Je.js";import{t as te}from"./MarketingHeader-Derv67Vs.js";import{t as C}from"./format-CR8oUWq6.js";var ne=a(`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`}]]),re=a(`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`}]]),ie=a(`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`}]]),w=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)}}}))})),T=n(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r(S()):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}))})),E=n(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r(S()):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}))})),D=t(e(),1),O=t(S(),1),k=t(w(),1);T(),E();var A=r();O.default.extend(k.default);var ae=null;function oe(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 j(e){return Number.isFinite(e)?String(Math.round(e/(1024*1024*1024)*100)/100):`0`}function M(e){let t=Number(e);return!Number.isFinite(t)||t<0?0:Math.round(t*1024*1024*1024)}function se(e){return Array.from(new Set(String(e||``).split(/[\n,]/).map(e=>e.trim()).filter(Boolean)))}function N(e,t=12,n=8){return e?e.length<=t+n+3?e:`${e.slice(0,t)}...${e.slice(-n)}`:`-`}function ce(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 P(e){return{"zh-CN":`zh-cn`,"zh-TW":`zh-tw`,en:`en`}[e]}function le(e,t,n){if(!e)return t(`admin.time.never`);let r=(0,O.default)(e);if(!r.isValid())return t(`admin.time.never`);if(r.isAfter((0,O.default)()))return t(`admin.time.justNow`);let i=P(n);return r.locale(i).from((0,O.default)().locale(i))}var ue=[{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`}],de=[{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`}],F={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 I(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 fe(e,t){let n=String(t||`all`).trim().toLowerCase();if(!n||n===`all`)return!0;let r=I(e);return n===`error`?e.level===`error`||F.error.some(e=>r.includes(e)):(F[n]||[n]).some(e=>r.includes(e))}function L(){let{t:e,locale:t,formatNumber:n,formatTime:r}=o(),i=y(e=>e.hasBackend),a=y(e=>e.addToast),[S,w]=(0,D.useState)(ae),[T,E]=(0,D.useState)([]),[O,k]=(0,D.useState)(``),[P,F]=(0,D.useState)(!1),[I,L]=(0,D.useState)(!1),[R,z]=(0,D.useState)(!1),[B,pe]=(0,D.useState)(`all`),[V,me]=(0,D.useState)([]),[he,H]=(0,D.useState)(``),[U,W]=(0,D.useState)({dataPath:``,capacityGiB:`100`,maxFileSizeGiB:`10`,remoteInvites:``}),G=i===!0;function K(){return G?!0:(a(e(i===null?`admin.toast.backendChecking`:`admin.toast.backendDisconnected`),`warning`),!1)}let q=(0,D.useMemo)(()=>!S||S.capacity.configuredBytes<=0?0:Math.min(100,Math.round(S.capacity.usedBytes/S.capacity.configuredBytes*100)),[S]),ge=(0,D.useMemo)(()=>(S?.holdings||[]).slice(0,100),[S]),J=Math.max(0,(S?.holdings.length||0)-100),Y=v(),X=!!Y&&!Y.includes(`localhost`)&&!Y.includes(`127.0.0.1`),Z=async()=>{if(!G)return!1;try{let e=await x.get(`/api/node/status`).json(),t=await x.get(`/api/node/config`).json();return w(e),W({dataPath:t.dataPath||e.dataPath||``,capacityGiB:j(t.capacityBytes),maxFileSizeGiB:j(t.maxFileSizeBytes),remoteInvites:(t.remoteInvites||[]).join(`
2
- `)}),k(``),!0}catch(t){let n=await b(t,e(`admin.error.readStatus`));return k(n),a(n,`error`),!1}},_e=async()=>{K()&&await Z()&&a(e(`admin.toast.statusRefreshed`),`success`)},Q=async(e=B)=>{if(G)try{let t=new URLSearchParams({limit:`80`,filter:e});E((await x.get(`/api/node/logs?${t.toString()}`).json()).logs||[])}catch{}},$=async()=>{if(G)try{me((await x.get(`/api/admin/users`).json()).users||[])}catch{}},ve=async()=>{if(K()){F(!0);try{await x.post(`/api/node/config`,{json:{dataPath:U.dataPath,capacityBytes:M(U.capacityGiB),maxFileSizeBytes:M(U.maxFileSizeGiB),remoteInvites:se(U.remoteInvites)}}).json(),a(U.dataPath===(S?.dataPath||``)?e(`admin.toast.configSaved`):e(`admin.toast.configSavedRestart`),`success`),await Z(),await Q()}catch(t){let n=await b(t,e(`admin.error.saveConfig`));a(n,`error`),k(n)}finally{F(!1)}}},ye=async()=>{S?.nodeId&&(await navigator.clipboard.writeText(S.nodeId),a(e(`admin.toast.nodeIdCopied`),`success`))},be=async()=>{if(K()){L(!0);try{await x.delete(`/api/node/logs`).json(),E([]),a(e(`admin.toast.logsCleared`),`success`)}catch(t){let n=await b(t,e(`admin.error.clearLogs`));a(n,`error`),k(n)}finally{L(!1)}}},xe=async()=>{if(K()){z(!0);try{let t=await x.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 b(t,e(`admin.error.exportDiagnostics`));a(n,`error`),k(n)}finally{z(!1)}}},Se=async t=>{if(K()&&window.confirm(e(`admin.confirm.clearUserData`,{address:`${t.slice(0,6)}...${t.slice(-4)}`}))){H(t);try{await x.delete(`/api/admin/users/${t}/data`).json(),a(e(`admin.toast.userDataCleared`),`success`),await $(),await Z()}catch(t){let n=await b(t,e(`admin.error.clearUserData`));a(n,`error`),k(n)}finally{H(``)}}};return(0,D.useEffect)(()=>{if(!G||X)return;Z(),Q(),$();let e=null,t=!1;return(async()=>{if(e=new WebSocket(await ee(`/ws`)),t){e.close();return}e.onmessage=e=>{try{let t=JSON.parse(e.data);t.event===`node:status`&&w(t.data),t.event===`node:log`&&fe(t.data,B)&&E(e=>[t.data,...e].slice(0,80)),t.event===`node:logs:cleared`&&E([]),(t.event===`publish:success`||t.event===`download:success`||t.event===`network:status`)&&Z()}catch{}}})(),()=>{t=!0,e?.close()}},[G,X,B]),(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(te,{}),(0,A.jsxs)(`main`,{className:`admin-page`,children:[(0,A.jsxs)(`header`,{className:`admin-topbar`,children:[(0,A.jsx)(`div`,{className:`admin-title-group`,children:(0,A.jsx)(`h1`,{children:e(`admin.title`)})}),(0,A.jsxs)(`div`,{className:`admin-topbar-actions`,children:[(0,A.jsxs)(`span`,{className:`admin-status-pill ${S?.status===`online`?`online`:``}`,children:[(0,A.jsx)(ne,{size:14}),S?.status===`online`?e(`admin.status.online`):e(`admin.status.waiting`)]}),(0,A.jsxs)(`button`,{className:`btn btn-secondary`,onClick:_e,children:[(0,A.jsx)(s,{size:16}),e(`admin.action.refresh`)]})]})]}),i===!1&&(0,A.jsxs)(`section`,{className:`admin-panel admin-error`,children:[(0,A.jsx)(_,{size:20}),(0,A.jsx)(`span`,{children:e(`admin.error.localDaemonDisconnected`)})]}),X&&(0,A.jsxs)(`section`,{className:`admin-panel admin-error`,children:[(0,A.jsx)(m,{size:18}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h2`,{children:e(`admin.remoteUnavailable.title`)}),(0,A.jsx)(`p`,{children:e(`admin.remoteUnavailable.desc`)})]})]}),!X&&O&&(0,A.jsxs)(`section`,{className:`admin-panel admin-error`,children:[(0,A.jsx)(l,{size:20}),(0,A.jsx)(`span`,{children:O})]}),!X&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`section`,{className:`admin-overview`,children:[(0,A.jsxs)(`div`,{className:`admin-metric`,children:[(0,A.jsx)(`div`,{className:`admin-metric-icon`,children:(0,A.jsx)(f,{size:18})}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`span`,{children:e(`admin.metric.nodeId`)}),(0,A.jsx)(`strong`,{translate:`no`,children:N(S?.nodeId||``)})]}),(0,A.jsx)(`button`,{className:`btn btn-icon admin-metric-action`,onClick:ye,"aria-label":e(`admin.action.copyNodeId`),children:(0,A.jsx)(re,{size:15})})]}),(0,A.jsxs)(`div`,{className:`admin-metric`,children:[(0,A.jsx)(`div`,{className:`admin-metric-icon`,children:(0,A.jsx)(h,{size:18})}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`span`,{children:e(`admin.metric.connections`)}),(0,A.jsx)(`strong`,{children:S?e(`admin.metric.peers`,{count:S.network.peers}):`-`})]})]}),(0,A.jsxs)(`div`,{className:`admin-metric`,children:[(0,A.jsx)(`div`,{className:`admin-metric-icon`,children:(0,A.jsx)(u,{size:18})}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`span`,{children:e(`admin.metric.capacity`)}),(0,A.jsxs)(`strong`,{children:[q,`%`]})]})]}),(0,A.jsxs)(`div`,{className:`admin-metric`,children:[(0,A.jsx)(`div`,{className:`admin-metric-icon`,children:(0,A.jsx)(_,{size:18})}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`span`,{children:e(`admin.metric.uptime`)}),(0,A.jsx)(`strong`,{children:S?oe(S.uptimeSeconds,e):`-`})]})]})]}),(0,A.jsxs)(`section`,{className:`admin-grid`,children:[(0,A.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,A.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,A.jsx)(`div`,{children:(0,A.jsx)(`h2`,{children:e(`admin.nodeStatus.title`)})}),(0,A.jsx)(g,{size:18})]}),(0,A.jsxs)(`div`,{className:`admin-status-grid`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`span`,{children:e(`admin.nodeStatus.version`)}),(0,A.jsx)(`strong`,{translate:`no`,children:S?.version||`-`})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`span`,{children:e(`admin.nodeStatus.listen`)}),(0,A.jsx)(`strong`,{translate:`no`,children:S?`${S.host}:${S.port}`:`-`})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`span`,{children:e(`admin.nodeStatus.dataPath`)}),(0,A.jsx)(`strong`,{translate:`no`,children:S?.dataPath||`-`})]})]}),(0,A.jsx)(`div`,{className:`admin-address-list`,children:(S?.listen.addresses||[]).map(e=>(0,A.jsxs)(`span`,{translate:`no`,children:[e.label,`: `,e.ip,`:`,S?.port]},`${e.type}-${e.ip}`))})]}),(0,A.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,A.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,A.jsx)(`div`,{children:(0,A.jsx)(`h2`,{children:e(`admin.userData.title`)})}),(0,A.jsx)(ie,{size:18})]}),(0,A.jsxs)(`div`,{className:`admin-table`,children:[(0,A.jsxs)(`div`,{className:`admin-table-row admin-table-head`,children:[(0,A.jsx)(`span`,{children:e(`admin.userData.user`)}),(0,A.jsx)(`span`,{children:e(`admin.userData.files`)}),(0,A.jsx)(`span`,{children:e(`admin.userData.trash`)}),(0,A.jsx)(`span`,{children:e(`admin.userData.actions`)})]}),V.map(t=>(0,A.jsxs)(`div`,{className:`admin-table-row`,children:[(0,A.jsx)(`span`,{title:t.address,translate:`no`,children:N(t.address)}),(0,A.jsx)(`span`,{children:n(t.fileCount)}),(0,A.jsx)(`span`,{children:n(t.trashCount)}),(0,A.jsx)(`span`,{children:(0,A.jsxs)(`button`,{className:`btn btn-ghost`,onClick:()=>Se(t.address),disabled:he===t.address,children:[(0,A.jsx)(p,{size:16}),e(`admin.action.clear`)]})})]},t.address)),V.length===0&&(0,A.jsx)(`div`,{className:`admin-empty-row`,children:e(`admin.userData.empty`)})]})]}),(0,A.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,A.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,A.jsx)(`div`,{children:(0,A.jsx)(`h2`,{children:e(`admin.settings.title`)})}),(0,A.jsx)(ie,{size:18})]}),(0,A.jsxs)(`div`,{className:`admin-settings-fields`,children:[(0,A.jsxs)(`label`,{className:`admin-field admin-field-wide`,children:[(0,A.jsx)(`span`,{children:e(`admin.settings.dataPath`)}),(0,A.jsx)(`input`,{className:`input`,value:U.dataPath,onChange:e=>W(t=>({...t,dataPath:e.target.value}))})]}),(0,A.jsxs)(`label`,{className:`admin-field`,children:[(0,A.jsx)(`span`,{children:e(`admin.settings.capacityGiB`)}),(0,A.jsx)(`input`,{className:`input`,type:`number`,min:`0`,step:`1`,value:U.capacityGiB,onChange:e=>W(t=>({...t,capacityGiB:e.target.value}))})]}),(0,A.jsxs)(`label`,{className:`admin-field`,children:[(0,A.jsx)(`span`,{children:e(`admin.settings.maxFileSizeGiB`)}),(0,A.jsx)(`input`,{className:`input`,type:`number`,min:`0`,step:`1`,value:U.maxFileSizeGiB,onChange:e=>W(t=>({...t,maxFileSizeGiB:e.target.value}))})]}),(0,A.jsxs)(`label`,{className:`admin-field admin-field-wide`,children:[(0,A.jsx)(`span`,{children:e(`admin.settings.remoteInvites`)}),(0,A.jsx)(`textarea`,{className:`input admin-textarea`,value:U.remoteInvites,placeholder:e(`admin.settings.remoteInvitesPlaceholder`),onChange:e=>W(t=>({...t,remoteInvites:e.target.value}))})]})]}),(0,A.jsx)(`p`,{className:`admin-field-hint`,children:e(`admin.settings.hint`)}),(0,A.jsxs)(`button`,{className:`btn btn-primary btn-full`,onClick:ve,disabled:P,children:[(0,A.jsx)(d,{size:16}),e(`admin.action.saveConfig`)]})]}),(0,A.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,A.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,A.jsx)(`div`,{children:(0,A.jsx)(`h2`,{children:e(`admin.holdings.title`)})}),(0,A.jsx)(u,{size:18})]}),(0,A.jsxs)(`div`,{className:`admin-capacity-row`,children:[(0,A.jsx)(`progress`,{value:q,max:`100`}),(0,A.jsxs)(`span`,{children:[C(S?.capacity.usedBytes||0),` /`,` `,C(S?.capacity.configuredBytes||0)]})]}),(0,A.jsx)(`div`,{className:`admin-seed-help`,"aria-label":e(`admin.seedHelp.label`),children:ue.map(t=>(0,A.jsxs)(`div`,{className:`admin-seed-help-item`,children:[(0,A.jsx)(`span`,{className:`admin-seed-dot ${t.tone}`}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`strong`,{children:e(t.labelKey)}),(0,A.jsx)(`span`,{children:e(t.descKey)})]})]},t.labelKey))}),J>0&&(0,A.jsx)(`p`,{className:`admin-table-note`,children:e(`admin.holdings.hiddenCount`,{count:n(J)})}),(0,A.jsxs)(`div`,{className:`admin-table`,children:[(0,A.jsxs)(`div`,{className:`admin-table-row admin-table-head`,children:[(0,A.jsx)(`span`,{children:e(`admin.holdings.file`)}),(0,A.jsx)(`span`,{children:`CID`}),(0,A.jsx)(`span`,{children:e(`admin.holdings.size`)}),(0,A.jsx)(`span`,{children:`Peer`}),(0,A.jsx)(`span`,{children:e(`admin.holdings.lastServed`)}),(0,A.jsx)(`span`,{children:e(`admin.holdings.status`)})]}),ge.map(n=>(0,A.jsxs)(`div`,{className:`admin-table-row`,children:[(0,A.jsx)(`span`,{translate:`no`,children:n.fileName||`-`}),(0,A.jsx)(`span`,{title:n.cid,translate:`no`,children:N(n.cid)}),(0,A.jsx)(`span`,{children:C(n.size)}),(0,A.jsx)(`span`,{children:n.peerCount??0}),(0,A.jsx)(`span`,{title:n.lastServedAt||``,children:le(n.lastServedAt,e,t)}),(0,A.jsx)(`span`,{className:`admin-seed-pill ${n.seedStatus===`error`?`error`:n.seedStatus===`active`||n.joined?`active`:``}`,children:ce(n,e)})]},n.cid)),(!S||S.holdings.length===0)&&(0,A.jsx)(`div`,{className:`admin-empty-row`,children:e(`admin.holdings.empty`)})]})]}),(0,A.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,A.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,A.jsx)(`div`,{children:(0,A.jsx)(`h2`,{children:e(`admin.logs.title`)})}),(0,A.jsxs)(`div`,{className:`admin-panel-actions`,children:[(0,A.jsxs)(`button`,{className:`btn btn-secondary`,onClick:xe,disabled:R,children:[(0,A.jsx)(c,{size:16}),e(`admin.action.exportDiagnostics`)]}),(0,A.jsxs)(`button`,{className:`btn btn-ghost`,onClick:be,disabled:I||T.length===0,children:[(0,A.jsx)(p,{size:16}),e(`admin.action.clearLogs`)]}),(0,A.jsx)(l,{size:18})]})]}),(0,A.jsx)(`div`,{className:`admin-log-filter`,"aria-label":e(`admin.logs.filterLabel`),children:de.map(t=>(0,A.jsx)(`button`,{type:`button`,className:B===t.value?`active`:``,onClick:()=>{pe(t.value),Q(t.value)},children:e(t.labelKey)},t.value))}),(0,A.jsxs)(`div`,{className:`admin-log-list`,children:[T.map(e=>(0,A.jsxs)(`div`,{className:`admin-log-row`,children:[(0,A.jsx)(`time`,{children:r(e.ts)}),(0,A.jsx)(`span`,{className:`admin-log-level ${e.level}`,translate:`no`,children:e.level}),(0,A.jsx)(`strong`,{translate:`no`,children:e.event}),(0,A.jsx)(`span`,{translate:`no`,children:e.message})]},e.id)),T.length===0&&(0,A.jsx)(`div`,{className:`admin-empty-row`,children:e(`admin.logs.empty`)})]})]})]})]})]})]})}var R=i(`/admin/`)({component:L});export{R as Route};
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{E as r,c as i,d as a,f as o,u as s,w as c}from"./ui-PnUvY9zL.js";import{a as l}from"./i18n--maTEG0d.js";import{a as u,r as d}from"./LanguageToggle-BoBNesNU.js";import{t as f}from"./copy-D8HSH5Ki.js";import{n as p}from"./SidebarHomeLink-ByOHwlH8.js";import{t as m}from"./play-CnhsLC5C.js";import{a as h,i as g,n as _,r as ee,t as te}from"./useGameRoom-B8Ds_PKe.js";import{E as ne,c as v,i as re}from"./index-Cg4kEvx8.js";var ie=c(`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`}]]),y=t(e(),1),ae=[10,20,50,100],b=[`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`J`,`Q`,`K`,`A`],x=[`D`,`C`,`H`,`S`],S=new Map(b.map((e,t)=>[e,t+2])),C=new Map(x.map((e,t)=>[e,t+1])),w={high:1,pair:2,straight:3,flush:4,straightFlush:5,triple:6},T={[w.high]:`散牌`,[w.pair]:`对子`,[w.straight]:`顺子`,[w.flush]:`金花`,[w.straightFlush]:`顺金`,[w.triple]:`豹子`};function E(e){return String(e||``).trim().toUpperCase().replace(/[^A-Z0-9]/g,``).slice(0,8)}function D(e=`zhajinhua`){return`${e}_${Date.now()}_${ve(4)}`}function O(){return D(`round`)}function k(){let e=[];for(let t of x)for(let n of b)e.push(`${n}${t}`);return e}function oe(e=k(),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 se(e){let t=String(e||``).trim().toUpperCase(),n=t.slice(-1),r=t.slice(0,-1);if(!S.has(r)||!C.has(n))throw Error(`Invalid card: ${e}`);return{id:`${r}${n}`,rank:r,suit:n,rankValue:S.get(r),suitValue:C.get(n)}}function ce(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 le(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 A(e){if(!Array.isArray(e)||e.length!==3)throw Error(`炸金花手牌必须是 3 张牌`);let t=e.map(se),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=le(n),o=[...n].sort((e,t)=>t-e),s=Math.max(...t.map(e=>e.suitValue)),c=w.high,l=o;return r.size===1?(c=w.triple,l=[o[0]]):a&&i?(c=w.straightFlush,l=[a]):i?(c=w.flush,l=o):a?(c=w.straight,l=[a]):r.size===2&&(c=w.pair,l=[[...r.entries()].find(([,e])=>e===2)[0],[...r.entries()].find(([,e])=>e===1)[0]]),{category:c,label:T[c],tiebreakers:l,tieSuit:s,cards:t.map(e=>e.id)}}function j(e,t){let n=A(e),r=A(t);if(n.category!==r.category)return n.category-r.category;let i=ce(n.tiebreakers,r.tiebreakers);return i===0?n.tieSuit-r.tieSuit:i}function ue(e){return A(e).label}function de({roundId:e,action:t,amount:n,target:r}){return{roundId:e,eventId:D(`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=O(),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=oe(k(),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:W(e.avatar),publicKey:e.publicKey,chips:Number(e.chips)-10,status:`active`,looked:!1,bet:10}}),d,f=U(i),p=f?u.findIndex(e=>U(e.address)===f):-1;return d=p>=0?u[p].address:u[Math.floor(o()*u.length)].address,{roomCode:E(e),roundId:a,status:`playing`,host:U(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,G(t)}function he(e,t){let n=M(e);return!n||!t||typeof t!=`object`?null:{...n,hands:G(t)}}function M(e){return!e||typeof e!=`object`||!e.roundId||!Array.isArray(e.players)?null:{roomCode:E(e.roomCode),roundId:String(e.roundId),status:e.status===`finished`?`finished`:`playing`,host:U(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:U(e.turnAddress),players:e.players.map(H).filter(Boolean),lastAction:String(e.lastAction||``),winner:e.winner?U(e.winner):null,showdown:e.showdown&&typeof e.showdown==`object`?G(e.showdown):null,appliedEventIds:Array.isArray(e.appliedEventIds)?e.appliedEventIds.map(String):[],actionCounts:e.actionCounts&&typeof e.actionCounts==`object`?G(e.actionCounts):{},compareReveal:e.compareReveal&&typeof e.compareReveal==`object`?G(e.compareReveal):{},lastCompare:e.lastCompare&&typeof e.lastCompare==`object`?G(e.lastCompare):null,finishedAt:e.finishedAt?Number(e.finishedAt):null}}function N(e,t,n){let r=M(e);if(!r||r.status!==`playing`)return{ok:!1,error:`当前没有进行中的牌局`};let i=U(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(!ae.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=U(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 P(e,t,n){let r=N(e,t,n);if(!r.ok)return{ok:!1,error:r.error,state:e};let i=G(e),a=U(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} 看牌`,V(i);if(t.action===`fold`)return o.status=`folded`,i.lastAction=`${o.name} 弃牌`,L(i,a),R(i,a);if(t.action===`call`)return o.chips-=10,o.bet+=10,i.pot+=10,i.lastAction=`${o.name} 跟注`,L(i,a),R(i,a);if(t.action===`raise`){let e=Number(t.amount);return i.currentBet+=e,I(i,o),i.lastAction=`${o.name} 加注 ${e}`,L(i,a),R(i,a)}if(t.action===`compare`){I(i,o);let e=U(t.target),n=i.players.find(t=>t.address===e),r=o.looked,s=n.looked,c=j(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} 出局`,L(i,a),R(i,a)}return{ok:!1,error:`未知操作`,state:e}}function F(e){return(e?.players||[]).filter(e=>e.status===`active`)}function ge(e,t){let n=(e?.players||[]).find(e=>e.address===U(t));if(!e||e.status!==`playing`||!n||n.status!==`active`||e.turnAddress!==n.address)return[];let r=[];return n.looked||r.push(`look`),N(e,{action:`call`},n.address).ok&&r.push(`call`),ae.some(t=>N(e,{action:`raise`,amount:t},n.address).ok)&&r.push(`raise`),F(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 I(e,t){let n=Math.max(0,e.currentBet-t.bet);t.chips-=n,t.bet+=n,e.pot+=n}function L(e,t){e.actionCounts||={},e.actionCounts[t]=(e.actionCounts[t]||0)+1}function R(e,t){let n=F(e);return n.length===1?z(e,n[0].address):(e.turnAddress=B(e,t),V(e))}function z(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?G(e.hands):null,e.lastAction=n?`${n.name} 赢得 ${r} 筹码`:`本局结束`,e.pot=0,e.finishedAt=Date.now(),V(e)}function B(e,t){let n=e.players,r=Math.max(0,n.findIndex(e=>e.address===U(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 V(e){return e.seq=Number(e.seq||0)+1,{ok:!0,state:e}}function H(e){if(!e||typeof e!=`object`)return null;let t=U(e.address);return t?{address:t,name:String(e.name||_e(t)).slice(0,50),avatar:W(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 U(e){let t=String(e||``).trim();return/^0x[a-fA-F0-9]{40}$/.test(t)?t.toLowerCase():``}function _e(e){return e?`${e.slice(0,6)}...${e.slice(-4)}`:``}function W(e){return String(e||``).trim().slice(0,4096)}function G(e){return JSON.parse(JSON.stringify(e))}function ve(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(``)}var K={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`},q=n(),ye=`zhajinhua`;function J(...e){return e.filter(Boolean).join(` `)}function Y(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 X(){let{t:e}=l(),t=v(e=>e.isDarkMode),n=v(e=>e.setIsDarkMode),r=v(e=>e.addToast),c=i(e=>e.initializeUser),[b,x]=(0,y.useState)(``),[S,C]=(0,y.useState)(!1),w=(0,y.useRef)(``),T=(0,y.useRef)(!1),[E,D]=(0,y.useState)(20),[O,k]=(0,y.useState)(``),[oe,se]=(0,y.useState)({}),[ce,le]=(0,y.useState)(!0),[A,j]=(0,y.useState)(!1),M=(0,y.useRef)(null),N=(0,y.useRef)(new Set),I=te({gameId:ye,onError:e=>r(e,`error`),getPlayerPayload:e=>{let t=s(e.danger);return{address:e.address,name:xe(e),avatar:e.avatar||``,publicKey:t.public_key,joinedAt:Date.now()}}}),L=(0,y.useMemo)(()=>I.userIdentity?.danger?s(I.userIdentity.danger):null,[I.userIdentity?.danger]);(0,y.useEffect)(()=>{c()},[c]),(0,y.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get(`room`)?.toUpperCase();e&&(x(e),w.current=e)},[]),(0,y.useEffect)(()=>{let t=w.current;!t||T.current||!I.isBackendReady||!I.userIdentity||(T.current=!0,w.current=``,I.joinRoom(t).then(t=>{t&&r(e(`game.toast.joinedRoom`),`success`)}))},[I.isBackendReady,I.userIdentity,I.joinRoom,r,e]),(0,y.useEffect)(()=>{if(!I.roomCode)return;let e=`/game/zhajinhua?room=${I.roomCode}`;`${window.location.pathname}${window.location.search}`!==e&&window.history.replaceState(null,``,e)},[I.roomCode]);let R=(0,y.useMemo)(()=>_(I.messages,{gameId:ye,roomCode:I.roomCode}),[I.messages,I.roomCode]),z=(0,y.useMemo)(()=>ee(I.messages,{gameId:ye,roomCode:I.roomCode}),[I.messages,I.roomCode])?.payload?.round||null,B=z?.host||R.hostAddress,V=Y(B,I.userIdentity?.address),H=I.userIdentity?.address?.toLowerCase()||``,U=z?.players.find(e=>Y(e.address,H)),_e=U||R.players.find(e=>Y(e.address,H)),W=oe[z?.roundId||``]||null,G=z?.showdown&&H?z.showdown[H]:null,ve=z?.compareReveal&&H?z.compareReveal[H]:null,X=G||ve||(U?.looked?W:null),Q=ge(z,H),we=F(z),Te=V&&fe(R.players.map(e=>({...e,chips:z?.players.find(t=>Y(t.address,e.address))?.chips??1e3}))),Ee=I.roomCode&&typeof window<`u`?`${window.location.origin}/game/zhajinhua?room=${I.roomCode}`:``;(0,y.useEffect)(()=>{if(!(!z||!I.userIdentity||!L||!B))for(let e of I.roomEvents){let t=e.event;if(!t||t.event!==`deal:private`)continue;let n=t.payload;if(n.roundId!==z.roundId||!Y(n.recipient,I.userIdentity.address))continue;let r=a(n.encrypted||``,{senderPublicKey:n.senderPublicKey||``,recipientPrivateKey:L.private_key});if(r)try{let e=JSON.parse(r);Array.isArray(e)&&se(t=>({...t,[z.roundId]:e.map(String)}))}catch{}}},[z?.roundId,I.roomEvents,I.userIdentity,B,L?.private_key]),(0,y.useEffect)(()=>{if(z?.status===`finished`&&z.winner){le(!0);let e=setTimeout(()=>le(!1),5e3);return()=>clearTimeout(e)}},[z?.finishedAt,z?.status,z?.winner]),(0,y.useEffect)(()=>{if(z?.lastCompare?.timestamp){j(!0);let e=setTimeout(()=>j(!1),5e3);return()=>clearTimeout(e)}else j(!1)},[z?.lastCompare?.timestamp,z?.roundId]),(0,y.useEffect)(()=>{if(!V||!z||z.status!==`playing`)return;let e=M.current;if(!e)return;let t=I.roomEvents.filter(e=>{let t=e.event;if(!t||t.event!==`player:action`)return!1;let n=t.payload.actionEvent;return!(!n||n.roundId!==z.roundId||N.current.has(n.eventId)||z.appliedEventIds?.includes(n.eventId))});if(t.length===0)return;let n=!1;async function r(){let r=he(z,e);if(r)for(let e of t){if(n)return;let t=(e.event?.payload).actionEvent,i=P(r,t,e.message.author);if(!i.ok){let n=e.message.author;if(!Y(n,I.userIdentity?.address)&&r.status===`playing`&&Y(r.turnAddress,n)){let e=P(r,de({roundId:r.roundId,action:`call`,amount:void 0,target:void 0}),n);if(e.ok)i=e;else{let e=P(r,de({roundId:r.roundId,action:`fold`,amount:void 0,target:void 0}),n);e.ok&&(i=e)}}if(!i.ok){N.current.add(t.eventId);continue}}if(r=i.state,M.current=i.state.hands,await Ae(i.state)&&N.current.add(t.eventId),i.state.status===`finished`)break}}return r(),()=>{n=!0}},[z?.roundId,z?.seq,z?.status,I.roomEvents,V]);async function De(){await I.createRoom()&&r(e(`game.toast.roomCreated`),`success`)}async function Oe(t){t.preventDefault(),await I.joinRoom(b)&&r(e(`game.toast.joinedRoom`),`success`)}async function ke(){Ee&&(await navigator.clipboard.writeText(Ee),C(!0),setTimeout(()=>C(!1),1400))}async function Ae(e){return I.sendRoomEvent(`room:state`,{round:me(e),seq:e.seq})}async function je(){if(!I.userIdentity||!L||!Te){r(e(`game.zhajinhua.error.notEnoughPlayers`),`error`);return}try{let t=R.players.map(e=>({...e,chips:z?.players.find(t=>Y(t.address,e.address))?.chips??1e3})),n=pe({roomCode:I.roomCode,players:t,hostAddress:I.userIdentity.address,previousSeq:z?.seq||0,previousWinner:z?.winner||``});M.current=n.hands,N.current.clear(),await Ae(n);for(let e of n.players){let t=o(JSON.stringify(n.hands[e.address]),{senderPrivateKey:L.private_key,recipientPublicKey:e.publicKey});await I.sendRoomEvent(`deal:private`,{roundId:n.roundId,recipient:e.address,senderPublicKey:L.public_key,encrypted:t})}se(e=>({...e,[n.roundId]:n.hands[I.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(!z||!I.userIdentity)return;let n=de({roundId:z.roundId,action:e,amount:t.amount,target:t.target});await I.sendRoomEvent(`player:action`,{actionEvent:n})}let Me=z?.status===`playing`?Y(z.turnAddress,H)?e(`game.zhajinhua.status.yourTurn`):z.turnAddress?e(`game.zhajinhua.status.waitingPlayer`,{player:Z(z.turnAddress,R.players)}):e(`game.status.playing`):z?.status===`finished`?e(`game.status.finished`):e(`game.status.waitingStart`),Ne=we.filter(e=>!Y(e.address,H));return(0,q.jsx)(p,{sidebar:({closeSidebar:e})=>(0,q.jsx)(g,{activeGame:`zhajinhua`,closeSidebar:e}),headerTitle:(0,q.jsx)(`h2`,{className:`header-title`,children:e(`game.zhajinhua.title`)}),headerRight:(0,q.jsxs)(`div`,{className:K.headerActions,children:[I.roomCode&&(0,q.jsxs)(`button`,{className:`btn btn-sm`,onClick:ke,children:[(0,q.jsx)(f,{size:14}),e(S?`common.copied`:`game.action.shareRoom`)]}),(0,q.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>n(!t),title:e(`common.theme.toggle`),children:t?(0,q.jsx)(d,{size:16}):(0,q.jsx)(u,{size:16})})]}),children:(0,q.jsx)(`main`,{className:K.page,children:I.roomCode?(0,q.jsxs)(`div`,{className:K.board,children:[(0,q.jsxs)(`section`,{className:K.table,children:[z?.status===`finished`&&z.winner&&ce&&(0,q.jsxs)(`div`,{className:K.finishBanner,children:[(0,q.jsx)(`span`,{className:K.finishBannerIcon,children:`🏆`}),(0,q.jsx)(`span`,{children:e(`game.zhajinhua.result.winChips`,{player:Z(z.winner,R.players),amount:z.winAmount??0})})]}),z?.lastCompare&&A&&(0,q.jsx)(Ce,{lastCompare:z.lastCompare,compareReveal:z.compareReveal||{},myAddress:H,myDealtHand:W,lobbyPlayers:R.players,onClose:()=>j(!1)}),(0,q.jsxs)(`div`,{className:K.tableCenter,children:[(0,q.jsx)(`span`,{children:e(`game.zhajinhua.pot`)}),(0,q.jsx)(`strong`,{children:z?.pot||0}),(0,q.jsx)(`small`,{children:e(`game.zhajinhua.currentBet`,{amount:z?.currentBet||0})})]}),(0,q.jsx)(`div`,{className:K.seats,children:R.players.map(t=>{let n=z?.players.find(e=>Y(e.address,t.address)),r=z?.turnAddress===t.address,i=z?.winner===t.address,a=n?.status===`folded`;return(0,q.jsxs)(`div`,{className:J(K.seat,r&&K.seatTurn,i&&K.seatWinner,a&&K.seatFolded),children:[(0,q.jsx)(`div`,{className:K.seatAvatar,children:(0,q.jsx)(`img`,{src:re(t.address,t.avatar),alt:``})}),(0,q.jsxs)(`div`,{className:K.seatMain,children:[(0,q.jsx)(`strong`,{translate:`no`,children:t.name}),(0,q.jsx)(`span`,{translate:`no`,children:be(t.address)})]}),(0,q.jsxs)(`div`,{className:K.seatMeta,children:[(0,q.jsx)(`span`,{children:e(`game.zhajinhua.chips`,{amount:n?.chips??1e3})}),(0,q.jsx)(`span`,{children:n?.status===`folded`?e(`game.zhajinhua.player.folded`):n?.looked?e(`game.zhajinhua.player.looked`):e(z?`game.zhajinhua.player.inRound`:`game.status.waitingStart`)})]})]},t.address)})})]}),(0,q.jsxs)(`aside`,{className:K.panel,children:[(0,q.jsxs)(`div`,{className:K.panelSection,children:[(0,q.jsxs)(`div`,{className:K.panelTitle,children:[(0,q.jsx)(h,{size:16}),(0,q.jsx)(`span`,{children:e(`game.zhajinhua.myHand`)})]}),(0,q.jsx)(`div`,{className:K.hand,children:X?X.map(e=>{let t=Se(e),n=`${t.suit}${t.rank}`;return(0,q.jsxs)(`div`,{className:J(K.card,K[t.color]),children:[(0,q.jsx)(`span`,{children:n}),(0,q.jsx)(`i`,{children:t.suit})]},e)}):[0,1,2].map(e=>(0,q.jsx)(`div`,{className:K.cardBack,children:(0,q.jsx)(h,{size:18})},e))}),(0,q.jsx)(`p`,{className:K.handLabel,children:X?ue(X):e(W?`game.zhajinhua.hand.unlooked`:`game.zhajinhua.hand.waitingDeal`)})]}),(0,q.jsxs)(`div`,{className:K.panelSection,children:[(0,q.jsxs)(`div`,{className:K.panelTitle,children:[(0,q.jsx)(m,{size:16}),(0,q.jsx)(`span`,{children:e(`game.actions`)})]}),V?(0,q.jsxs)(`button`,{className:`btn btn-primary btn-full`,onClick:je,disabled:!Te||z?.status===`playing`,children:[(0,q.jsx)(ie,{size:16}),z?.status===`finished`?e(`game.action.nextRound`):e(`game.action.startRound`)]}):(0,q.jsx)(`p`,{className:K.muted,children:e(`game.waitingHost`)}),V&&z?.status===`finished`&&!Te&&(0,q.jsx)(`p`,{className:K.muted,children:e(`game.zhajinhua.error.tooManyLowChips`)}),(0,q.jsxs)(`div`,{className:K.actionGrid,children:[(0,q.jsxs)(`button`,{className:`btn btn-secondary`,disabled:!Q.includes(`look`),onClick:()=>$(`look`),children:[(0,q.jsx)(ne,{size:16}),e(`game.zhajinhua.action.look`)]}),(0,q.jsx)(`button`,{className:`btn btn-secondary`,disabled:!Q.includes(`call`),onClick:()=>$(`call`),children:e(`game.zhajinhua.action.call`)}),(0,q.jsx)(`button`,{className:`btn btn-secondary`,disabled:!Q.includes(`fold`),onClick:()=>$(`fold`),children:e(`game.zhajinhua.action.fold`)})]}),(0,q.jsxs)(`div`,{className:K.raiseRow,children:[(0,q.jsx)(`select`,{className:`input input-compact`,value:E,onChange:e=>D(Number(e.target.value)),children:ae.map(t=>(0,q.jsx)(`option`,{value:t,children:e(`game.zhajinhua.action.raiseOption`,{amount:t})},t))}),(0,q.jsx)(`button`,{className:`btn btn-secondary`,disabled:!Q.includes(`raise`),onClick:()=>$(`raise`,{amount:E}),children:e(`game.zhajinhua.action.raise`)})]}),(0,q.jsxs)(`div`,{className:K.raiseRow,children:[(0,q.jsxs)(`select`,{className:`input input-compact`,value:O,onChange:e=>k(e.target.value),children:[(0,q.jsx)(`option`,{value:``,children:e(`game.zhajinhua.action.comparePlaceholder`)}),Ne.map(e=>(0,q.jsx)(`option`,{value:e.address,children:e.name},e.address))]}),(0,q.jsx)(`button`,{className:`btn btn-secondary`,disabled:!Q.includes(`compare`)||!O,onClick:()=>$(`compare`,{target:O}),children:e(`game.zhajinhua.action.compare`)})]})]}),(0,q.jsxs)(`div`,{className:K.panelSection,children:[(0,q.jsx)(`div`,{className:K.panelTitle,children:e(`game.status.title`)}),(0,q.jsxs)(`div`,{className:K.statusGrid,children:[(0,q.jsx)(`span`,{children:e(`game.host`)}),(0,q.jsx)(`strong`,{children:B?be(B):`-`}),(0,q.jsx)(`span`,{children:e(`game.zhajinhua.myChips`)}),(0,q.jsx)(`strong`,{children:_e?.chips??1e3}),(0,q.jsx)(`span`,{children:e(`game.round`)}),(0,q.jsx)(`strong`,{children:Me}),(0,q.jsx)(`span`,{children:e(`game.hint`)}),(0,q.jsx)(`strong`,{children:z?.lastAction||e(`game.waitingPlayers`)})]})]})]})]}):(0,q.jsxs)(`section`,{className:K.entry,children:[(0,q.jsxs)(`div`,{className:K.entryBrand,children:[(0,q.jsx)(`div`,{className:K.cardMark,children:(0,q.jsx)(h,{size:48})}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h1`,{children:e(`game.zhajinhua.hero.title`)}),(0,q.jsx)(`p`,{children:e(`game.hero.desc`)})]})]}),(0,q.jsxs)(`div`,{className:K.entryPanel,children:[(0,q.jsxs)(`div`,{className:K.accountLine,children:[(0,q.jsx)(`span`,{children:e(`game.currentAccount`)}),(0,q.jsx)(`strong`,{translate:`no`,children:I.userIdentity?.displayName||e(`web3.notSignedIn`)})]}),(0,q.jsxs)(`button`,{className:`btn btn-primary`,disabled:I.joining,onClick:De,children:[(0,q.jsx)(m,{size:16}),e(`game.action.createRoom`)]}),(0,q.jsxs)(`form`,{onSubmit:Oe,className:K.joinForm,children:[(0,q.jsxs)(`label`,{children:[e(`game.roomCode`),(0,q.jsx)(`input`,{value:b,maxLength:8,onChange:e=>x(e.target.value.toUpperCase()),placeholder:e(`game.roomCode.placeholder`)})]}),(0,q.jsx)(`button`,{className:`btn`,disabled:I.joining||!b,children:e(`game.action.joinRoom`)})]}),(0,q.jsx)(`p`,{className:K.status,children:I.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=Z(e.initiator,i),c=Z(e.target,i),u=Z(e.winner,i),d=Y(n,e.initiator),f=Y(n,e.target),p=d||f;function m(e,i){return t[e]||(p&&Y(e,n)&&i&&r?r:null)}let g=m(e.initiator,e.initiatorLooked),_=m(e.target,e.targetLooked);return(0,q.jsx)(`div`,{className:K.compareOverlay,onClick:a,children:(0,q.jsxs)(`div`,{className:K.compareBox,onClick:e=>e.stopPropagation(),children:[(0,q.jsx)(`div`,{className:K.compareTitle,children:o(`game.zhajinhua.compareResult`)}),(0,q.jsxs)(`div`,{className:K.comparePlayers,children:[(0,q.jsxs)(`div`,{className:J(K.compareSide,Y(e.winner,e.initiator)&&K.compareWinner),children:[(0,q.jsx)(`div`,{className:K.compareName,children:s}),(0,q.jsx)(`div`,{className:K.compareCards,children:g?g.map(e=>{let t=Se(e);return(0,q.jsxs)(`div`,{className:J(K.card,K[t.color]),children:[(0,q.jsx)(`span`,{children:t.rank}),(0,q.jsx)(`i`,{children:t.suit})]},e)}):[0,1,2].map(e=>(0,q.jsx)(`div`,{className:K.cardBack,children:(0,q.jsx)(h,{size:18})},e))}),g&&(0,q.jsx)(`div`,{className:K.compareLabel,children:ue(g)})]}),(0,q.jsx)(`div`,{className:K.compareVs,children:`VS`}),(0,q.jsxs)(`div`,{className:J(K.compareSide,Y(e.winner,e.target)&&K.compareWinner),children:[(0,q.jsx)(`div`,{className:K.compareName,children:c}),(0,q.jsx)(`div`,{className:K.compareCards,children:_?_.map(e=>{let t=Se(e);return(0,q.jsxs)(`div`,{className:J(K.card,K[t.color]),children:[(0,q.jsx)(`span`,{children:t.rank}),(0,q.jsx)(`i`,{children:t.suit})]},e)}):[0,1,2].map(e=>(0,q.jsx)(`div`,{className:K.cardBack,children:(0,q.jsx)(h,{size:18})},e))}),_&&(0,q.jsx)(`div`,{className:K.compareLabel,children:ue(_)})]})]}),(0,q.jsx)(`div`,{className:K.compareResult,children:o(`game.zhajinhua.result.winner`,{player:u})}),(0,q.jsx)(`button`,{className:`btn btn-sm`,onClick:a,children:o(`common.close`)})]})})}function Z(e,t){let n=e.toLowerCase();return t.find(e=>e.address===n)?.name||be(e)}var Q=r(`/game/zhajinhua/`)({component:X});export{Q as Route};
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{E as r,c as i,w as a}from"./ui-PnUvY9zL.js";import{a as o}from"./i18n--maTEG0d.js";import{a as s,r as c}from"./LanguageToggle-BoBNesNU.js";import{t as ee}from"./copy-D8HSH5Ki.js";import{n as te}from"./SidebarHomeLink-ByOHwlH8.js";import{t as ne}from"./play-CnhsLC5C.js";import{t as re}from"./send-C1J-eGNs.js";import{i as ie,n as ae,r as oe,t as se}from"./useGameRoom-B8Ds_PKe.js";import{c as l,i as u}from"./index-Cg4kEvx8.js";var ce=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`}]]),d=t(e(),1),f=[`S`,`H`,`C`,`D`],p=[`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`J`,`Q`,`K`,`A`,`2`],m=p.filter(e=>e!==`2`),h=new Map(p.map((e,t)=>[e,t+3])),le=5,g=20,_=1e3;function ue({roomCode:e,ownerAddress:t,ownerName:n,players:r=[],random:i=Math.random}){let a=T(r);return a.some(e=>e.address===K(t))||a.unshift({address:K(t),name:q(n),avatar:``}),v({id:String(e||``).toUpperCase(),ownerAddress:K(t),status:`lobby`,seq:1,players:a.slice(0,6).map((e,t)=>({address:e.address,name:q(e.name),avatar:J(e.avatar),seat:t,hand:[],handCount:0,score:_,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 de(e,t=[]){let n=y(e);if(!n||n.status!==`lobby`)return n;let r=new Map(n.players.map(e=>[e.address,e.score]));return n.players=T(t).slice(0,6).map((e,t)=>({address:e.address,name:q(e.name),avatar:J(e.avatar),seat:t,hand:[],handCount:0,score:r.get(e.address)??_,playedCards:0})),n.seq+=1,v(n)}function fe(e,t=Math.random){let n=y(e);if(!n||n.players.length<2)throw Error(`至少需要 2 名玩家`);n.deck=M(j(),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 L(n))e.hand=N(n,le),e.handCount=e.hand.length,e.playedCards=0,P(e.hand);let r=O(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,v(n)}function pe(e,t,n){let r=y(e),i=F(r),a=K(t);if(!i||i.address!==a)return{ok:!1,error:`还没轮到你`,state:v(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:v(r)};let s=ge(o);return s?w(s,r.table?.combo)?(o.sort(V),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(G).join(` `)}${s.type===`bomb`?`,底分 ${r.baseScore}`:``}`),i.hand.length===0?k(r,i):R(r),r.seq+=1,{ok:!0,state:v(r)}):{ok:!1,error:`出的牌压不过上一手`,state:v(r)}:{ok:!1,error:`这个牌型不合法`,state:v(r)}}function me(e,t){let n=y(e),r=F(n),i=K(t);return!r||r.address!==i?{ok:!1,error:`还没轮到你`,state:v(n)}:n.table?(n.passSeats.includes(r.seat)||n.passSeats.push(r.seat),n.log.unshift(`${r.name} 不要`),I(n).map(e=>e.seat).filter(e=>e!==n.lastWinnerSeat).every(e=>n.passSeats.includes(e))?(A(n),n.currentSeat=n.lastWinnerSeat,n.table=null,n.passSeats=[],n.log.unshift(`本轮结束,所有玩家各补 1 张,重新领出`)):R(n),n.seq+=1,{ok:!0,state:v(n)}):{ok:!1,error:`领出时不能不要`,state:v(n)}}function he(e,t){let n=y(e);if(!n)return null;let r=K(t),i=n.players.findIndex(e=>e.address===r);if(i===-1)return v(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=L(n);if(n.status===`playing`)if(c.length<=1)c.length===1?k(n,c[0]):(n.status=`finished`,n.log.unshift(`玩家不足,本局结束`));else{if(o){let e=I(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,v(n)}function v(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(W):[],deckCount:e.deck?.length||Number(e.deckCount||0),discard:Array.isArray(e.discard)?e.discard.map(W):[],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(W)}: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:L(e).map(e=>({address:e.address,name:e.name,avatar:J(e.avatar),seat:e.seat,handCount:e.hand?.length??e.handCount??0,score:Number(e.score??_),playedCards:Number(e.playedCards||0),hand:Array.isArray(e.hand)?e.hand.map(W):[]}))}:null}function y(e){return!e||typeof e!=`object`?null:{id:String(e.id||``).toUpperCase(),ownerAddress:K(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(E).filter(Boolean):[],deck:Array.isArray(e.deck)?e.deck.map(ve).filter(Boolean):[],discard:Array.isArray(e.discard)?e.discard.map(D).filter(Boolean):[],table:e.table&&typeof e.table==`object`?{...e.table,cards:Array.isArray(e.table.cards)?e.table.cards.map(D).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 ge(e){if(!e?.length)return null;e=[...e].sort(V);let t=e.filter(U).length,n=e.filter(e=>!U(e));if(n.length===0)return null;let r=b(e,n,t);if(r)return r;if(e.length===1&&t===0)return C(`single`,H(e[0]),1,[H(e[0])]);if(e.length===2&&z(n,t)){let e=B(n);return C(`pair`,e,2,[e,e])}return x(e)||S(e)}function b(e,t,n){if(e.length<3||!z(t,n))return null;let r=B(t);return C(`bomb`,r,e.length,Array(e.length).fill(r),n===0)}function x(e){if(e.length<3)return null;let t=e.filter(U).length,n=e.filter(e=>!U(e));for(let r=0;r<=m.length-e.length;r+=1){let i=m.slice(r,r+e.length).map(e=>h.get(e)),a=[...i],o=0;for(let e of n){let t=a.indexOf(H(e));t!==-1&&(a.splice(t,1),o+=1)}if(o+t===e.length&&a.length===t)return C(`straight`,i.at(-1),e.length,i)}return null}function S(e){if(e.length<4||e.length%2!=0)return null;let t=e.length/2,n=e.filter(U).length,r=e.filter(e=>!U(e));for(let i=0;i<=m.length-t;i+=1){let a=m.slice(i,i+t).map(e=>h.get(e)),o=a.flatMap(e=>[e,e]),s=0;for(let e of r){let t=o.indexOf(H(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 C(`pairStraight`,a.at(-1),e.length,t)}}return null}function C(e,t,n,r,i=!0){return{type:e,value:t,length:n,resolvedValues:r,pure:i,label:xe({type:e,value:t,length:n,resolvedValues:r,pure:i})}}function w(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===Ce(t.value)||e.value===h.get(`2`)&&t.value!==h.get(`2`):e.value===Ce(t.value):!1:!1:!1}function T(e){let t=new Set;return e.map(e=>({address:K(e.address),name:q(e.name),avatar:J(e.avatar),publicKey:String(e.publicKey||``)})).filter(e=>!e.address||t.has(e.address)?!1:(t.add(e.address),!0))}function E(e){let t=K(e.address);return t?{address:t,name:q(e.name),avatar:J(e.avatar),seat:Number(e.seat||0),hand:Array.isArray(e.hand)?e.hand.map(D).filter(Boolean):[],handCount:Number(e.handCount||0),score:Number(e.score??_),playedCards:Number(e.playedCards||0)}:null}function D(e){if(!e||typeof e!=`object`)return null;let t=String(e.rank||``),n=String(e.suit||``);return!h.has(t)&&t!==`SJ`&&t!==`BJ`||!f.includes(n)&&n!==`Joker`?null:{id:String(e.id||`${n}-${t}`),suit:n,rank:t,label:e.label||G({suit:n,rank:t}),color:e.color||be({suit:n,rank:t})}}function O(e,t){if(e.previousWinnerSeat!==null)return e.diceRolls=[],L(e).find(t=>t.seat===e.previousWinnerSeat)||L(e)[0];let n=L(e),r=[];for(;n.length>1;){r=n.map(e=>({seat:e.seat,name:e.name,value:we(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 k(e,t){e.status=`finished`,e.winnerSeat=t.seat,e.previousWinnerSeat=t.seat;let n=[],r=0;for(let i of L(e)){if(i.seat===t.seat)continue;let a=i.playedCards===0,o=a?g: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 A(e){for(let t of I(e)){if(e.deck.length===0)break;t.hand.push(...N(e,1)),t.handCount=t.hand.length,P(t.hand)}}function j(){let e=[];for(let t of f)for(let n of p)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(W)}function M(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 N(e,t){return e.deck.splice(0,t)}function P(e){e.sort(V)}function F(e){return e.players.find(t=>t.seat===e.currentSeat)}function I(e){return L(e).filter(e=>e.hand.length>0)}function L(e){return[...e?.players||[]].sort((e,t)=>e.seat-t.seat)}function R(e){let t=I(e).map(e=>e.seat);e.currentSeat=t[(t.indexOf(e.currentSeat)+1)%t.length]}function z(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 B(e){return H(e[0])}function V(e,t){return H(e)-H(t)||_e(e.suit)-_e(t.suit)}function H(e){return h.get(e.rank)||99}function U(e){return e.rank===`SJ`||e.rank===`BJ`}function _e(e){return{D:0,C:1,H:2,S:3,Joker:4}[e]||0}function ve(e){if(typeof e==`string`){let[t,n]=e.split(`-`);return D({id:e,suit:t,rank:n})}return D(e)}function W(e){return{id:e.id,suit:e.suit,rank:e.rank,label:G(e),color:be(e)}}function G(e){return e.rank===`SJ`?`小王`:e.rank===`BJ`?`大王`:`${ye(e.suit)}${e.rank}`}function ye(e){return{S:`♠`,H:`♥`,C:`♣`,D:`♦`}[e]||``}function be(e){return e.suit===`H`||e.suit===`D`||e.rank===`BJ`?`red`:`black`}function xe(e){let t=e.resolvedValues?.length?`(${e.resolvedValues.map(Se).join(` `)})`:``;return`${{single:`单张`,pair:`对子`,straight:`顺子`,pairStraight:`连对`,bomb:e.pure?`纯炸弹`:`带王炸弹`}[e.type]}${t}`}function Se(e){return p.find(t=>h.get(t)===e)||String(e)}function Ce(e){let t=p.findIndex(t=>h.get(t)===e);return t===-1||t>=p.length-1?null:h.get(p[t+1])}function we(e){return Math.floor(e()*6)+1}function K(e){let t=String(e||``).trim();return/^0x[a-fA-F0-9]{40}$/.test(t)?t.toLowerCase():``}function q(e){return String(e||`玩家`).trim().slice(0,16)||`玩家`}function J(e){return String(e||``).trim().slice(0,4096)}var Y={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`},X=n(),Z=`gandengyan`;function Q(...e){return e.filter(Boolean).join(` `)}function Te(e,t){return String(e||``).toLowerCase()===String(t||``).toLowerCase()}function Ee(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 De(){let{t:e,locale:t}=o(),n=l(e=>e.isDarkMode),r=l(e=>e.setIsDarkMode),a=l(e=>e.addToast),u=i(e=>e.initializeUser),[f,p]=(0,d.useState)(``),[m,h]=(0,d.useState)([]),[le,g]=(0,d.useState)(!1),_=(0,d.useRef)(``),v=(0,d.useRef)(!1),y=se({gameId:Z,onError:e=>a(e,`error`)});(0,d.useEffect)(()=>{u()},[u]),(0,d.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get(`room`)?.toUpperCase();e&&(p(e),_.current=e)},[]),(0,d.useEffect)(()=>{let t=_.current;!t||v.current||!y.isBackendReady||!y.userIdentity||(v.current=!0,_.current=``,y.joinRoom(t).then(t=>{t&&a(e(`game.toast.joinedRoom`),`success`)}))},[y.isBackendReady,y.userIdentity,y.joinRoom,a,e]),(0,d.useEffect)(()=>{if(!y.roomCode)return;let e=`/game/gandengyan?room=${y.roomCode}`;`${window.location.pathname}${window.location.search}`!==e&&window.history.replaceState(null,``,e)},[y.roomCode]);let b=(0,d.useMemo)(()=>ae(y.messages,y.roomCode?{gameId:Z,roomCode:y.roomCode}:{gameId:Z}),[y.messages,y.roomCode]),x=(0,d.useMemo)(()=>oe(y.messages,{gameId:Z,roomCode:y.roomCode}),[y.messages,y.roomCode]),S=x?.payload?.state,C=S?.players.find(e=>Te(e.address,y.userIdentity?.address)),w=Te(S?.ownerAddress||b.hostAddress,y.userIdentity?.address),T=S?.status===`playing`&&S.currentSeat===C?.seat,E=(0,d.useMemo)(()=>m.map(e=>C?.hand.find(t=>t.id===e)).filter(Boolean),[m,C]),D=(0,d.useMemo)(()=>ge(E),[E]),O=y.roomCode&&typeof window<`u`?`${window.location.origin}/game/gandengyan?room=${y.roomCode}`:``,k=(0,d.useRef)(-1),A=(0,d.useRef)(!1);(0,d.useEffect)(()=>{h([])},[S?.seq]),(0,d.useEffect)(()=>{if(!S)return;let n=S.seq;if(k.current<0){k.current=n;return}if(n!==k.current&&(k.current=n,S.status!==`finished`&&(A.current=!1),S.status===`finished`&&S.winnerSeat!==null)){A.current||(A.current=!0,Ee(e(`game.gandengyan.speech.gameOver`),t));return}},[t,S?.seq,e]),(0,d.useEffect)(()=>{if(!w||!y.roomCode||!y.userIdentity||x||b.players.length===0)return;let e=ue({roomCode:y.roomCode,ownerAddress:y.userIdentity.address,ownerName:y.userIdentity.displayName||y.userIdentity.username,players:b.players});y.sendRoomEvent(`room:state`,{state:e,seq:e.seq})},[y,w,x,b.players]),(0,d.useEffect)(()=>{if(!S||!w||S.status!==`lobby`)return;let e=de(S,b.players);e&&e.players.length!==S.players.length&&y.sendRoomEvent(`room:state`,{state:e,seq:e.seq})},[y,w,b.players,S]);let j=(0,d.useRef)(0),M=(0,d.useMemo)(()=>y.roomEvents.filter(e=>e.event?.event===`player:leave`),[y.roomEvents]);(0,d.useEffect)(()=>{if(M.length<=j.current)return;let t=M.slice(j.current);j.current=M.length;for(let n of t)a(e(`game.toast.playerLeft`,{player:n.event?.payload?.player?.name||e(`game.player`)}),`info`)},[M,a,e]),(0,d.useEffect)(()=>{if(!S||!w||S.status!==`playing`)return;let e=new Set(b.players.map(e=>e.address.toLowerCase())),t=S.players.find(t=>!e.has(t.address.toLowerCase()));if(!t)return;let n=he(S,t.address);n&&I(n)},[y,w,b.players,S]);async function N(){await y.createRoom()&&a(e(`game.toast.roomCreated`),`success`)}async function P(t){t.preventDefault(),await y.joinRoom(f)&&a(e(`game.toast.joinedRoom`),`success`)}async function F(){O&&(await navigator.clipboard.writeText(O),g(!0),setTimeout(()=>g(!1),1400))}async function I(e){await y.sendRoomEvent(`room:state`,{state:e,seq:e.seq})}async function L(){if(!(!S||!w))try{await I(fe(S))}catch(t){a(t instanceof Error?t.message:e(`game.zhajinhua.error.startFailed`),`error`)}}async function R(){await L()}async function z(){if(!S||!y.userIdentity)return;let t=pe(S,y.userIdentity.address,m);if(!t.ok){a(t.error||e(`game.gandengyan.error.playFailed`),`error`);return}await I(t.state)}async function B(){if(!S||!y.userIdentity)return;let t=me(S,y.userIdentity.address);if(!t.ok){a(t.error||e(`game.gandengyan.error.actionFailed`),`error`);return}await I(t.state)}function V(e){h(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])}return(0,X.jsx)(te,{sidebar:({closeSidebar:e})=>(0,X.jsx)(ie,{activeGame:`gandengyan`,closeSidebar:e}),headerTitle:(0,X.jsx)(`h2`,{className:`header-title`,children:e(`game.gandengyan.title`)}),headerRight:(0,X.jsxs)(`div`,{className:Y.headerActions,children:[S&&(0,X.jsxs)(`button`,{className:`btn btn-sm`,onClick:F,children:[(0,X.jsx)(ee,{size:14}),e(le?`common.copied`:`game.action.shareRoom`)]}),(0,X.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>r(!n),title:e(`common.theme.toggle`),children:n?(0,X.jsx)(c,{size:16}):(0,X.jsx)(s,{size:16})})]}),children:(0,X.jsx)(`main`,{className:Y.page,children:S?(0,X.jsxs)(`section`,{className:Y.gameGrid,children:[(0,X.jsxs)(`div`,{className:Y.tablePanel,children:[(0,X.jsxs)(`div`,{className:Y.roomBar,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`strong`,{translate:`no`,children:e(`game.roomLabel`,{room:S.id})}),(0,X.jsx)(`span`,{children:S.status===`lobby`?e(`game.status.waitingStart`):S.status===`finished`?e(`game.status.finished`):e(`game.status.playing`)})]}),(0,X.jsx)(`div`,{className:Y.badges,children:(0,X.jsx)(`span`,{children:y.connected?e(`game.status.online`):e(`game.status.offline`)})})]}),(0,X.jsx)(`div`,{className:Y.seats,children:S.players.map(t=>(0,X.jsx)(Oe,{player:t,active:S.currentSeat===t.seat,winner:S.winnerSeat===t.seat,relation:ke(C,t,S.players.length,e)},t.seat))}),(0,X.jsxs)(`div`,{className:Y.centerTable,children:[(0,X.jsxs)(`div`,{className:Y.deckBox,children:[(0,X.jsx)(`span`,{children:e(`game.gandengyan.deck`)}),(0,X.jsx)(`strong`,{children:S.deckCount})]}),(0,X.jsx)(`div`,{className:Y.playedBox,children:S.table?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`strong`,{children:e(`game.gandengyan.tablePlay`,{player:S.table.playerName,combo:S.table.combo?.label||e(`game.card`)})}),(0,X.jsx)(`div`,{className:Y.playedCards,children:S.table.cards.map(e=>(0,X.jsx)($,{card:e,small:!0},e.id))})]}):(0,X.jsx)(`span`,{children:e(`game.gandengyan.waitingLead`)})}),(0,X.jsxs)(`div`,{className:Y.deckBox,children:[(0,X.jsx)(`span`,{children:e(`game.gandengyan.baseScore`)}),(0,X.jsx)(`strong`,{children:S.baseScore})]})]}),(0,X.jsx)(`div`,{className:Y.notice,children:S.status===`finished`?S.roundResult?(0,X.jsxs)(`div`,{className:Y.resultDetail,children:[(0,X.jsxs)(`p`,{children:[e(`game.gandengyan.result.winnerGain`,{player:S.roundResult.winnerName,score:S.roundResult.winnerGain}),S.roundResult.bombCount>0&&e(`game.gandengyan.result.bombCount`,{count:S.roundResult.bombCount})]}),S.roundResult.losers.map(t=>(0,X.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:S.players.find(e=>e.seat===S.winnerSeat)?.name||e(`game.player`)}):T?e(`game.gandengyan.status.yourTurn`):e(`game.zhajinhua.status.waitingPlayer`,{player:S.players.find(e=>e.seat===S.currentSeat)?.name||e(`game.player`)})})]}),(0,X.jsxs)(`aside`,{className:Y.sidePanel,children:[(0,X.jsxs)(`section`,{className:Y.panel,children:[(0,X.jsx)(`h3`,{children:e(`game.gandengyan.roundPanel`)}),w&&S.status===`lobby`&&(0,X.jsxs)(`button`,{className:`btn btn-primary`,disabled:S.players.length<2,onClick:L,children:[(0,X.jsx)(ne,{size:16}),e(`game.action.startRound`)]}),w&&S.status===`finished`&&(0,X.jsxs)(`button`,{className:`btn btn-primary`,onClick:R,children:[(0,X.jsx)(ce,{size:16}),e(`game.action.nextRound`)]}),!w&&(0,X.jsx)(`p`,{className:Y.status,children:e(`game.waitingHost`)})]}),(0,X.jsxs)(`section`,{className:Y.panel,children:[(0,X.jsx)(`h3`,{children:e(`game.gandengyan.score`)}),(0,X.jsxs)(`div`,{className:Y.scoreMeta,children:[(0,X.jsx)(`span`,{children:e(`game.gandengyan.bombCount`,{count:S.bombCount})}),(0,X.jsx)(`span`,{children:e(`game.gandengyan.discardCount`,{count:S.discardCount})})]}),S.players.map(e=>(0,X.jsxs)(`div`,{className:Y.scoreRow,children:[(0,X.jsx)(`span`,{translate:`no`,children:e.name}),(0,X.jsx)(`strong`,{children:e.score})]},e.seat))]}),(0,X.jsxs)(`section`,{className:Q(Y.panel,Y.logPanel),children:[(0,X.jsx)(`h3`,{children:e(`game.gandengyan.log`)}),S.log.map((e,t)=>(0,X.jsx)(`p`,{translate:`no`,children:e},`${e}-${t}`))]})]}),(0,X.jsxs)(`div`,{className:Y.handPanel,children:[(0,X.jsx)(Oe,{player:C,active:T,winner:S.winnerSeat===C?.seat}),(0,X.jsx)(`div`,{className:Y.hand,children:C?.hand.map(e=>(0,X.jsx)(`button`,{className:Q(Y.cardButton,m.includes(e.id)&&Y.picked),onClick:()=>V(e.id),children:(0,X.jsx)($,{card:e})},e.id))}),(0,X.jsxs)(`div`,{className:Y.actions,children:[(0,X.jsxs)(`div`,{className:Q(Y.preview,D&&Y.valid),children:[(0,X.jsx)(`strong`,{children:D?D.label:m.length?e(`game.gandengyan.invalidCombo`):e(`game.gandengyan.selectCards`)}),(0,X.jsx)(`span`,{children:E.map(e=>e.label).join(` `)||e(`game.gandengyan.jokerOrderHint`)})]}),(0,X.jsxs)(`button`,{className:`btn btn-primary`,disabled:!T||m.length===0||!D,onClick:z,children:[(0,X.jsx)(re,{size:16}),e(`game.gandengyan.action.play`)]}),(0,X.jsx)(`button`,{className:`btn`,disabled:!T||!S.table,onClick:B,children:e(`game.gandengyan.action.pass`)})]})]})]}):(0,X.jsxs)(`section`,{className:Y.entry,children:[(0,X.jsxs)(`div`,{className:Y.entryBrand,children:[(0,X.jsx)(`div`,{className:Y.cardMark,children:e(`game.gandengyan.mark`)}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h1`,{children:e(`game.gandengyan.hero.title`)}),(0,X.jsx)(`p`,{children:e(`game.hero.desc`)})]})]}),(0,X.jsxs)(`div`,{className:Y.entryPanel,children:[(0,X.jsxs)(`div`,{className:Y.accountLine,children:[(0,X.jsx)(`span`,{children:e(`game.currentAccount`)}),(0,X.jsx)(`strong`,{translate:`no`,children:y.userIdentity?.displayName||e(`web3.notSignedIn`)})]}),(0,X.jsxs)(`button`,{className:`btn btn-primary`,disabled:y.joining,onClick:N,children:[(0,X.jsx)(ne,{size:16}),e(`game.action.createRoom`)]}),(0,X.jsxs)(`form`,{onSubmit:P,className:Y.joinForm,children:[(0,X.jsxs)(`label`,{children:[e(`game.roomCode`),(0,X.jsx)(`input`,{value:f,maxLength:8,onChange:e=>p(e.target.value.toUpperCase()),placeholder:e(`game.roomCode.placeholder`)})]}),(0,X.jsx)(`button`,{className:`btn`,disabled:y.joining||!f,children:e(`game.action.joinRoom`)})]}),(0,X.jsx)(`p`,{className:Y.status,children:y.isBackendReady?e(`game.status.nodeConnected`):e(`game.status.nodeConnecting`)})]})]})})})}function Oe({player:e,active:t,winner:n,relation:r=``}){let{t:i}=o();return e?(0,X.jsxs)(`div`,{className:Q(Y.player,t&&Y.active,n&&Y.winner),children:[(0,X.jsx)(`div`,{className:Y.avatar,translate:`no`,children:(0,X.jsx)(`img`,{src:u(e.address,e.avatar),alt:``})}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`strong`,{translate:`no`,children:e.name}),(0,X.jsxs)(`span`,{children:[r,r?` · `:``,i(`game.gandengyan.handCount`,{count:e.handCount})]})]})]}):null}function $({card:e,small:t=!1}){return(0,X.jsxs)(`div`,{className:Q(Y.card,Y[e.color],t&&Y.small),children:[(0,X.jsx)(`span`,{children:e.label}),(0,X.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=r(`/game/gandengyan/`)({component:De});export{Ae as Route};
@@ -1 +0,0 @@
1
- import{w as e}from"./ui-PnUvY9zL.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};
@@ -1 +0,0 @@
1
- import{w as e}from"./ui-PnUvY9zL.js";var t=e(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]);export{t};
@@ -1 +0,0 @@
1
- import{w as e}from"./ui-PnUvY9zL.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 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{O as r,c as i,w as a}from"./ui-PnUvY9zL.js";import{a as o}from"./i18n--maTEG0d.js";import{t as s}from"./SidebarHomeLink-ByOHwlH8.js";import{c,f as l}from"./index-Cg4kEvx8.js";import{t as u}from"./SidebarAccount-D6wj_ijc.js";import{i as d,n as f,r as p,t as m}from"./userProfile-CRGZ8PUF.js";import{t as h}from"./useChannelMessages-CZHmH5n-.js";var g=a(`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`}]]),_=a(`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`}]]),v=n(),y=[{id:`gandengyan`,labelKey:`game.gandengyan.title`,href:`/game/gandengyan/`,icon:(0,v.jsx)(_,{size:16})},{id:`zhajinhua`,labelKey:`game.zhajinhua.title`,href:`/game/zhajinhua/`,icon:(0,v.jsx)(g,{size:16})}];function b({activeGame:e,closeSidebar:t}){let{t:n}=o();return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(s,{onNavigate:t}),(0,v.jsx)(`nav`,{className:`sidebar-nav`,children:y.map(i=>(0,v.jsxs)(r,{to:i.href,className:`sidebar-nav-btn ${e===i.id?`active`:``}`,onClick:t,children:[i.icon,(0,v.jsx)(`span`,{children:n(i.labelKey)})]},i.id))}),(0,v.jsx)(u,{})]})}var x=t(e(),1),S=`game`,C=`mostbox.game.event`,w=[`gandengyan`,`zhajinhua`],T=`ABCDEFGHJKLMNPQRSTUVWXYZ23456789`;function E(e){let t=String(e||``).trim().toLowerCase();return w.includes(t)?t:``}function D(e){return String(e||``).trim().toUpperCase().replace(/[^A-Z0-9]/g,``).slice(0,8)}function O(e){return/^[A-Z0-9]{4,8}$/.test(String(e||``))}function k(){let e=``;for(let t=0;t<6;t++)e+=T[B(32)];return e}function A(e,t){let n=E(e),r=D(t);return!n||!O(r)?``:`game.${n}.${r.toLowerCase()}`}function j({gameId:e,roomCode:t,event:n,payload:r}){let i=E(e);return{kind:C,version:1,gameId:i,roomCode:D(t),event:String(n||``),eventId:z(i||`game`),payload:r||{}}}function M(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=E(n.gameId),i=D(n.roomCode);return!r||!O(i)||t.gameId&&r!==E(t.gameId)||t.roomCode&&i!==D(t.roomCode)?null:{...n,gameId:r,roomCode:i,payload:n.payload&&typeof n.payload==`object`?n.payload:{}}}catch{return null}}function N(e=[],t={}){let n=[],r=new Map,i=``;for(let a of R(e)){let e=M(a.content,t);if(e){if(e.event===`room:create`){let t=F(e.payload?.player,a);if(!t)continue;i||=t.address,L(n,r,t);continue}if(e.event===`player:join`){let t=F(e.payload?.player,a);t&&L(n,r,t);continue}if(e.event===`player:leave`){let t=I(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:E(t.gameId),roomCode:D(t.roomCode),hostAddress:i,players:n}}function P(e=[],t={}){let n=null;for(let r of R(e)){let e=M(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 F(e,t){if(!e||typeof e!=`object`)return null;let n=t&&typeof t==`object`?t:{author:t},r=n.author,i=I(e.address||r);if(!i||I(r)!==i)return null;let a=String(n.authorName||e.name||``).trim().slice(0,50)||H(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 I(e){let t=String(e||``).trim();return/^0x[a-fA-F0-9]{40}$/.test(t)?t.toLowerCase():``}function L(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 R(e){return[...e].sort((e,t)=>Number(e.timestamp||0)-Number(t.timestamp||0))}function z(e){return`${e}_${Date.now()}_${V(4)}`}function B(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 V(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 H(e){return e?`${e.slice(0,6)}...${e.slice(-4)}`:``}function U({gameId:e,onError:t,getPlayerPayload:n}){let{t:r}=o(),a=c(e=>e.hasBackend),s=c(e=>e.checkBackend),u=c(e=>e.openConnectModal),f=i(e=>e.identity),p=i(e=>e.openLoginModal),[g,_]=(0,x.useState)(``),[v,y]=(0,x.useState)(``),[b,C]=(0,x.useState)(!1),w=a===!0,T=(0,x.useCallback)(async(e,n)=>{let r=await l(e,n);t&&t(r)},[t]),E=(0,x.useCallback)(t=>!!M(t.content,{gameId:e,roomCode:g}),[e,g]),O=(0,x.useCallback)(t=>{let n=M(t.content,{gameId:e,roomCode:g});return n?`${t.author}-${n.eventId}`:`${t.author}-${t.timestamp}-${t.content}`},[e,g]),{clearMessages:N,connected:P,messages:F,sendMessage:I,syncMessages:L}=h({isReady:w,enabled:!!f,channelName:v,limit:500,acceptMessage:E,getMessageKey:O,onSyncError:e=>T(e,r(`game.room.error.readLog`))}),R=(0,x.useMemo)(()=>F.map(t=>({message:t,event:M(t.content,{gameId:e,roomCode:g})})).filter(e=>e.event),[e,F,g]),z=(0,x.useCallback)(()=>f?w?!0:(u(),!1):(p(),!1),[w,u,p,f]);(0,x.useEffect)(()=>{a===null&&s()},[s,a]);let B=(0,x.useCallback)(async(i,a=!1)=>{if(!z()||!f)return!1;let o=a?k():D(i),s=A(e,o);if(!s)return t&&t(r(`game.room.error.invalidCode`)),!1;C(!0);try{let t=await d.createChannel(s,S,m(f)),r=t.channelKey||t.key||s;return await W(r,f,e,o,a?`room:create`:`player:join`,{player:K(f,n?.(f))}),_(o),y(r),N(),!0}catch(e){return await T(e,r(a?`game.room.error.createFailed`:`game.room.error.joinFailed`)),!1}finally{C(!1)}},[z,e,n,t,T,N,r,f]);return{channelName:v,connected:P,createRoom:(0,x.useCallback)(()=>B(``,!0),[B]),ensureReady:z,isBackendReady:w,joinRoom:(0,x.useCallback)(e=>B(e),[B]),joining:b,messages:F,roomCode:g,roomEvents:R,sendRoomEvent:(0,x.useCallback)(async(t,n={})=>{if(!z()||!f||!v||!g)return!1;let i=j({gameId:e,roomCode:g,event:t,payload:n}),a=JSON.stringify(i);try{return await I({channelName:v,content:a,optimisticId:`${f.address}-${i.eventId}`}),!0}catch(e){return await T(e,r(`game.room.error.sendEventFailed`)),!1}},[v,z,e,T,g,I,r,f]),setRoomCode:_,syncMessages:L,userIdentity:f}}async function W(e,t,n,r,i,a){let o=j({gameId:n,roomCode:r,event:i,payload:a});await d.sendChannelMessage({channelName:e,content:JSON.stringify(o),...p(t)})}function G(e){return{address:e.address,name:f(e),avatar:e.avatar||``,publicKey:``,joinedAt:Date.now()}}function K(e,t={}){let n=G(e),r={...n,...t};return Object.prototype.hasOwnProperty.call(t,`avatar`)||(r.avatar=n.avatar),r}export{g as a,b as i,N as n,P as r,U as t};
@@ -1 +0,0 @@
1
- import{h as e,l as t}from"./index-Cg4kEvx8.js";var n={getChannels(e={}){let n=new URLSearchParams;e.type&&n.set(`type`,e.type);let r=n.toString();return t.get(r?`/api/channels?${r}`:`/api/channels`).json()},createChannel(e,n=`personal`,r={}){return t.post(`/api/channels`,{json:{name:e,type:n,...r}}).json()},leaveChannel(e){return t.delete(`/api/channels`,{json:{channelKey:e}}).json()},getChannelMessages(e,n=100,r=0){return t.get(`/api/channels/${encodeURIComponent(e)}/messages?limit=${n}&offset=${r}`).json()},sendChannelMessage({channelName:e,content:n,author:r,authorName:i,avatar:a,attachment:o}){return t.post(`/api/channels/${encodeURIComponent(e)}/messages`,{json:o?{content:n,author:r,authorName:i,avatar:a,attachment:o}:{content:n,author:r,authorName:i,avatar:a}}).json()},getChannelMembers(e){return t.get(`/api/channels/${encodeURIComponent(e)}/members`).json()},getChannelPeers(e){return t.get(`/api/channels/${encodeURIComponent(e)}/peers`).json()},setChannelRemark(e,n){return t.put(`/api/channels/${encodeURIComponent(e)}/remark`,{json:{remark:n}}).json()},setChannelPinned(e,n){return t.put(`/api/channels/${encodeURIComponent(e)}/pin`,{json:{pinned:n}}).json()},getFileDownloadUrl(t){return e(`/api/files/${t}/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};