most-box 0.3.7 → 0.3.8

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 (82) hide show
  1. package/README.md +1 -1
  2. package/out/about/index.html +6 -5
  3. package/out/admin/index.html +0 -0
  4. package/out/app/index.html +0 -0
  5. package/out/assets/AccountMenu-C3wvcWtn.js +1 -0
  6. package/out/assets/{AppShell-CKP_dglR.js → AppShell-BN1uaxn1.js} +1 -1
  7. package/out/assets/{AppTop-C03PsDr_.js → AppTop-iPNi3cv5.js} +1 -1
  8. package/out/assets/{CopyButton-ClwBN6Iy.js → CopyButton-BfQ-TOoR.js} +1 -1
  9. package/out/assets/{MarketingHeader-ChTIIzXG.js → MarketingHeader-Bh6LcQOj.js} +1 -1
  10. package/out/assets/{MarketingLayout-hkPAtieL.js → MarketingLayout-9X-D6xx4.js} +1 -1
  11. package/out/assets/{MilkdownEditor-X9MUH_0q.js → MilkdownEditor-4FuwE6Td.js} +1 -1
  12. package/out/assets/{OpenSidebarButton-CXBAjjCE.js → OpenSidebarButton-09yeNDLa.js} +1 -1
  13. package/out/assets/arrow-right-DcTPIyLV.js +1 -0
  14. package/out/assets/{arrow-up-down-DvLSz6Ma.js → arrow-up-down-gcWLrYup.js} +1 -1
  15. package/out/assets/{channelApi-C5eHetoJ.js → channelApi-DA2GY-k4.js} +1 -1
  16. package/out/assets/{chatNoteDraft-DTy6In5R.js → chatNoteDraft-D6FEmSXK.js} +1 -1
  17. package/out/assets/{circle-alert-DXVkx8p8.js → circle-alert-Dg9cBJgj.js} +1 -1
  18. package/out/assets/{copy-OwXDsstV.js → copy-BofKiKH_.js} +1 -1
  19. package/out/assets/{download-Cy2BlfKM.js → download-nQ9X-v0q.js} +1 -1
  20. package/out/assets/{downloadValidation-Dd43i9_9.js → downloadValidation-C0PecvKC.js} +1 -1
  21. package/out/assets/{external-link-D_AQSgxW.js → external-link-LcGMVTLE.js} +1 -1
  22. package/out/assets/{file-text-zvTER2mN.js → file-text-f1ij7Al1.js} +1 -1
  23. package/out/assets/{fingerprint-pattern-BT73ASEB.js → fingerprint-pattern-Z6NfIcxC.js} +1 -1
  24. package/out/assets/{folder-6pYYnS2-.js → folder-DGTODlX0.js} +1 -1
  25. package/out/assets/{folder-open-DOJ4bB58.js → folder-open-BKTeAP5z.js} +1 -1
  26. package/out/assets/{gamepad-2-BYqNgCQr.js → gamepad-2-q3ssU_CE.js} +1 -1
  27. package/out/assets/{hard-drive-DL1KJHmG.js → hard-drive-CMNAmPI5.js} +1 -1
  28. package/out/assets/{index-DJzLHA0V.js → index-CCU5Z4K-.js} +7 -6
  29. package/out/assets/{index.lazy-BQ_Dyw5C.js → index.lazy-1YPf8Ys8.js} +1 -1
  30. package/out/assets/{index.lazy-b811JgFg.js → index.lazy-7EjTGodD.js} +1 -1
  31. package/out/assets/{index.lazy-CT5TGyGl.js → index.lazy-B2-v2OGR.js} +1 -1
  32. package/out/assets/{index.lazy-CnpeKB4C.js → index.lazy-BBsa7aDt.js} +1 -1
  33. package/out/assets/{index.lazy-DYhpVW5B.js → index.lazy-BJh0zxMI.js} +1 -1
  34. package/out/assets/{index.lazy-C8luNCxY.js → index.lazy-BMh0Oy3C.js} +1 -1
  35. package/out/assets/{index.lazy-Cy249kq1.js → index.lazy-Bi5tHgok.js} +1 -1
  36. package/out/assets/{index.lazy-DA98XQ0Q.js → index.lazy-CbtY_wql.js} +1 -1
  37. package/out/assets/{index.lazy-psYKmxdW.js → index.lazy-CsgZmOLX.js} +1 -1
  38. package/out/assets/{index.lazy-Cgrv1NmQ.js → index.lazy-D9zm7DgW.js} +1 -1
  39. package/out/assets/{index.lazy-B8ud1tpC.js → index.lazy-DH1bcYry.js} +1 -1
  40. package/out/assets/{index.lazy-BEDWJZPP.js → index.lazy-DQA4yE6c.js} +1 -1
  41. package/out/assets/{index.lazy-CTLlLPjy.js → index.lazy-DhhSG0Me.js} +1 -1
  42. package/out/assets/{index.lazy-C0L9TDqK.js → index.lazy-Dl8LX4dH.js} +1 -1
  43. package/out/assets/{index.lazy-CwAN1t6l.js → index.lazy-Q-Lr-abQ.js} +2 -2
  44. package/out/assets/{loader-C4pED_QP.js → loader-DAMqAKH7.js} +1 -1
  45. package/out/assets/{lock-yG7M7GkB.js → lock-Cigqt_VP.js} +1 -1
  46. package/out/assets/{message-square-CfApq8Ou.js → message-square-0kQmuMcd.js} +1 -1
  47. package/out/assets/{mp-cEQteKUC.js → mp-CFhRibX9.js} +1 -1
  48. package/out/assets/{music-Br2x8TKX.js → music-U7NZcQ6S.js} +1 -1
  49. package/out/assets/{notebook-pen-Bcd3MrtD.js → notebook-pen-CMRWy6ni.js} +1 -1
  50. package/out/assets/play-B6IGTGxm.js +1 -0
  51. package/out/assets/{refresh-cw-CfkUlTK9.js → refresh-cw-Bxmcm8cn.js} +1 -1
  52. package/out/assets/{save-CfYzXcxH.js → save-CQyJvrmI.js} +1 -1
  53. package/out/assets/{saveLocalFile-DTgdBgO9.js → saveLocalFile-DkrpR5WS.js} +1 -1
  54. package/out/assets/search-CURHlVZZ.js +1 -0
  55. package/out/assets/{send-Bie9hgHI.js → send-yxXCy-t8.js} +1 -1
  56. package/out/assets/{shield-check-2-h_eEXp.js → shield-check-Cq1PKT30.js} +1 -1
  57. package/out/assets/{smartphone-CrsocYJo.js → smartphone-D9j5h2Pg.js} +1 -1
  58. package/out/assets/{trash-2-B9gno5q6.js → trash-2-DQI0V0Rl.js} +1 -1
  59. package/out/assets/{triangle-alert-BhNtjKm2.js → triangle-alert-D8P4Ikwc.js} +1 -1
  60. package/out/assets/{upload-BmufnMFu.js → upload-PpzkqJnf.js} +1 -1
  61. package/out/assets/{useAppStore-DNhyhD20.js → useAppStore-Pjif7nCR.js} +1 -1
  62. package/out/assets/{useChannelMessages-BrqZa2SG.js → useChannelMessages-Ea1I0HsF.js} +1 -1
  63. package/out/assets/{useGameRoom-B3wvUICl.js → useGameRoom-CqeouPP_.js} +1 -1
  64. package/out/assets/{wallet-D6HZocla.js → wallet-Ts6jdQzi.js} +1 -1
  65. package/out/assets/{wifi-CILQyKk0.js → wifi-B1v_i_dr.js} +1 -1
  66. package/out/chat/index.html +0 -0
  67. package/out/chat/join/demo/index.html +0 -0
  68. package/out/chat/join/index.html +0 -0
  69. package/out/download/index.html +6 -5
  70. package/out/game/gandengyan/index.html +0 -0
  71. package/out/game/index.html +0 -0
  72. package/out/game/zhajinhua/index.html +0 -0
  73. package/out/index.html +6 -5
  74. package/out/note/index.html +0 -0
  75. package/out/ping/index.html +6 -5
  76. package/out/profile/index.html +0 -0
  77. package/out/web3/index.html +0 -0
  78. package/package.json +1 -1
  79. package/out/assets/AccountMenu-D_rcXDZr.js +0 -1
  80. package/out/assets/arrow-right-BsHzC0ZL.js +0 -1
  81. package/out/assets/play-DSHtNcOe.js +0 -1
  82. package/out/assets/search-DLBOUfny.js +0 -1
@@ -1 +1 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r,E as i,H as a,O as ee,W as o,n as te,o as ne,t as s}from"./useAppStore-DNhyhD20.js";import{a as c}from"./i18n-DKsg67mH.js";import{t as l}from"./fingerprint-pattern-BT73ASEB.js";import{t as u}from"./circle-alert-DXVkx8p8.js";import{a as d,i as f}from"./AccountMenu-D_rcXDZr.js";import{t as re}from"./download-Cy2BlfKM.js";import{t as ie}from"./external-link-D_AQSgxW.js";import{n as ae,t as p}from"./CopyButton-ClwBN6Iy.js";import{t as m}from"./loader-C4pED_QP.js";import{t as h}from"./save-CfYzXcxH.js";import{t as g}from"./shield-check-2-h_eEXp.js";import{t as _}from"./upload-BmufnMFu.js";import{I as v,O as y,T as b,_ as x,g as S,h as C,o as oe,v as w,w as se,y as T}from"./index-DJzLHA0V.js";import{t as E}from"./MarketingLayout-hkPAtieL.js";import{t as ce}from"./MarketingHeader-ChTIIzXG.js";import{n as le}from"./mp-cEQteKUC.js";var ue=r(`cloud-download`,[[`path`,{d:`M12 13v8l-4-4`,key:`1f5nwf`}],[`path`,{d:`m12 21 4-4`,key:`1lfcce`}],[`path`,{d:`M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284`,key:`ui1hmy`}]]),de=r(`cloud-upload`,[[`path`,{d:`M12 13v8`,key:`1l5pq0`}],[`path`,{d:`M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242`,key:`1pljnt`}],[`path`,{d:`m8 17 4-4 4 4`,key:`1quai1`}]]),fe=r(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),pe=r(`wallet-cards`,[[`path`,{d:`M3 11h3.75a2 2 0 0 1 1.6.8l.45.6a4 4 0 0 0 6.4 0l.45-.6a2 2 0 0 1 1.6-.8H21`,key:`1vwh6y`}],[`path`,{d:`M3 7h18`,key:`1uiuf2`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}]]),D=t(e(),1),O=n(),k=[{value:``,labelKey:`profile.avatar.address`},...C.map(e=>({value:x(e),labelKey:`profile.avatar.${e}`}))];function A(e){if(w(e))return!0;try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}}function j(e){return e===`disabled`?`is-disabled`:e===`working`?`is-working`:e===`synced`?`is-synced`:e===`error`?`is-error`:`is-idle`}function M({status:e,busy:t}){return t||e===`working`?(0,O.jsx)(m,{size:16,className:`ui-spinner`}):e===`synced`?(0,O.jsx)(v,{size:16}):e===`error`?(0,O.jsx)(u,{size:16}):(0,O.jsx)(g,{size:16})}function N(){let{formatNumber:e,t}=c(),n=s(e=>e.addToast),r=s(e=>e.hasBackend),a=i(e=>e.identity),u=i(e=>e.openLoginModal),v=i(e=>e.setUserIdentity),x=i(e=>e.logoutUser),C=oe(),[w,N]=(0,D.useState)(``),[I,L]=(0,D.useState)(``),[R,z]=(0,D.useState)(``),[B,V]=(0,D.useState)(!1),[H,U]=(0,D.useState)(null),W=(0,O.jsx)(ce,{});(0,D.useEffect)(()=>{if(!a){N(``),L(``),z(``);return}N(a.displayName||a.username),L(T(a.avatar)||a.avatar||``),z(``)},[a]),(0,D.useEffect)(()=>{a&&C.refreshBackupSummary()},[C.refreshBackupSummary,r,a]);let G=(0,D.useMemo)(()=>a?ee(a.danger):null,[a]),me=(0,D.useMemo)(()=>G?le(G.private_key,G.ed_public_key):``,[G]);if(!a)return(0,O.jsx)(E,{header:W,children:(0,O.jsx)(`section`,{className:`profile-page`,children:(0,O.jsx)(`div`,{className:`profile-container narrow`,children:(0,O.jsxs)(`div`,{className:`profile-empty glass`,children:[(0,O.jsx)(`div`,{className:`profile-empty-icon`,children:(0,O.jsx)(f,{size:34})}),(0,O.jsx)(`h1`,{children:t(`profile.signedOut.title`)}),(0,O.jsx)(`p`,{children:t(`profile.signedOut.desc`)}),(0,O.jsxs)(`button`,{type:`button`,className:`btn btn-primary`,onClick:u,children:[(0,O.jsx)(f,{size:16}),t(`account.signIn`)]})]})})})});let he=T(a.avatar)||a.avatar||``,ge=S(a.address,a.avatar),K=a.address.toLowerCase(),_e=I.trim().length>0,ve=j(C.status),q=C.action===`backup`,J=C.action===`restore`,Y=C.action===`export`,X=C.action===`import`,ye=[{key:`notes`,label:t(`profile.backup.summary.notes`),value:C.notesCount},{key:`files`,label:t(`profile.backup.summary.files`),value:C.backupSummary.filesCount},{key:`trash`,label:t(`profile.backup.summary.trash`),value:C.backupSummary.trashFilesCount},{key:`channels`,label:t(`profile.backup.summary.channels`),value:C.backupSummary.channelsCount}];function be(){U({title:t(`profile.backup.confirm.backupTitle`),message:t(`profile.backup.confirm.backupMessage`),confirmText:t(`profile.backup.action.cloudBackup`),onConfirm:async()=>{U(null),await C.backupToCloud()}})}function xe(){U({title:t(`profile.backup.confirm.restoreTitle`),message:t(`profile.backup.confirm.restoreMessage`),confirmText:t(`profile.backup.action.cloudRestore`),onConfirm:async()=>{U(null),await C.restoreFromCloud({confirm:!1})}})}function Se(){return new Promise(e=>{let n=t=>{U(null),e(t)};U({title:t(`profile.backup.confirm.importTitle`),message:t(`profile.backup.confirm.restore`),confirmText:t(`profile.backup.action.importLocal`),onConfirm:()=>n(!0),onClose:()=>n(!1)})})}function Z(){C.importLocalBackup({requestConfirm:Se})}let Ce=[{key:`cloud-backup`,tone:`cloud-backup`,label:t(q?`profile.backup.status.backingUp`:`profile.backup.action.cloudBackup`),icon:q?(0,O.jsx)(m,{size:16,className:`ui-spinner`}):(0,O.jsx)(de,{size:16}),onClick:be},{key:`cloud-restore`,tone:`cloud-restore`,label:t(J?`profile.backup.status.restoring`:`profile.backup.action.cloudRestore`),icon:J?(0,O.jsx)(m,{size:16,className:`ui-spinner`}):(0,O.jsx)(ue,{size:16}),onClick:xe},{key:`export-local`,tone:`export-local`,label:t(Y?`profile.backup.status.exporting`:`profile.backup.action.exportLocal`),icon:Y?(0,O.jsx)(m,{size:16,className:`ui-spinner`}):(0,O.jsx)(re,{size:16}),onClick:C.exportLocalBackup},{key:`import-local`,tone:`import-local`,label:t(X?`profile.backup.status.importing`:`profile.backup.action.importLocal`),icon:X?(0,O.jsx)(m,{size:16,className:`ui-spinner`}):(0,O.jsx)(_,{size:16}),onClick:Z}];async function Q(e){if(r===!0)try{await te.put(`/api/user/profile`,{json:{displayName:e.displayName||e.username,avatar:e.avatar||``,updatedAt:e.profileUpdatedAt||Date.now()}}).json()}catch(e){n(await ne(e,t(`profile.backup.error.profileSaveFailed`)),`error`)}}function $(e){if(!a)return;let r={...a,avatar:e||void 0,profileUpdatedAt:Date.now()};v(r),Q(r),z(``),n(t(`profile.toast.avatarUpdated`),`success`)}function we(){if(!a)return;let e=w.trim()||a.username,r={...a,displayName:e,profileUpdatedAt:Date.now()};v(r),Q(r),N(e),n(t(`profile.toast.saved`),`success`)}function Te(){let e=I.trim();if(!e){$(void 0);return}if(!A(e)){z(t(`nav.avatarUrlInvalid`));return}$(e)}function Ee(){x(),V(!1)}return(0,O.jsxs)(E,{header:W,children:[(0,O.jsx)(`section`,{className:`profile-page`,children:(0,O.jsxs)(`div`,{className:`profile-container`,children:[(0,O.jsxs)(`section`,{className:`profile-panel profile-backup-card`,children:[(0,O.jsxs)(`div`,{className:`profile-panel-header profile-backup-header`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`h2`,{children:t(`profile.section.backup`)}),(0,O.jsx)(`p`,{children:t(`profile.section.backup.desc`)})]}),(0,O.jsxs)(`span`,{className:`profile-backup-status ${ve}`,children:[(0,O.jsx)(M,{status:C.status,busy:C.busy}),C.statusLabel]})]}),(0,O.jsx)(`div`,{className:`profile-backup-summary`,"aria-label":t(`profile.backup.summary.label`),children:ye.map(t=>(0,O.jsxs)(`div`,{className:`profile-backup-stat`,children:[(0,O.jsx)(`span`,{className:`profile-backup-stat-value`,children:t.value===null?C.backupSummary.loading?`...`:`-`:e(t.value)}),(0,O.jsx)(`span`,{className:`profile-backup-stat-label`,children:t.label})]},t.key))}),(0,O.jsx)(`div`,{className:`profile-backup-actions`,children:Ce.map(e=>(0,O.jsxs)(`button`,{type:`button`,className:[`btn`,`profile-backup-action`,`is-${e.tone}`].join(` `),disabled:C.busy,onClick:e.onClick,children:[e.icon,e.label]},e.key))})]}),(0,O.jsxs)(`header`,{className:`profile-header`,children:[(0,O.jsx)(`img`,{className:`profile-avatar-large`,src:ge,alt:``}),(0,O.jsxs)(`div`,{className:`profile-heading`,children:[(0,O.jsx)(`p`,{className:`profile-kicker`,children:t(`profile.kicker`)}),(0,O.jsx)(`h1`,{children:a.displayName||a.username}),(0,O.jsxs)(`div`,{className:`profile-address-line`,children:[(0,O.jsx)(`code`,{translate:`no`,children:K}),(0,O.jsx)(p,{text:K}),(0,O.jsxs)(`a`,{href:`https://debank.com/profile/${a.address}`,target:`_blank`,rel:`noopener noreferrer`,className:`btn btn-secondary btn-sm`,children:[(0,O.jsx)(ie,{size:14}),t(`web3.action.view`)]})]})]}),(0,O.jsxs)(`button`,{type:`button`,className:`btn btn-secondary profile-logout-btn`,onClick:()=>V(!0),children:[(0,O.jsx)(fe,{size:16}),t(`account.logout`)]})]}),(0,O.jsxs)(`div`,{className:`profile-grid`,children:[(0,O.jsxs)(`section`,{className:`profile-panel`,children:[(0,O.jsx)(`div`,{className:`profile-panel-header`,children:(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`h2`,{children:t(`profile.section.account`)}),(0,O.jsx)(`p`,{children:t(`profile.section.account.desc`)})]})}),(0,O.jsxs)(`label`,{className:`profile-field`,children:[(0,O.jsx)(`span`,{children:t(`profile.label.displayName`)}),(0,O.jsxs)(`div`,{className:`profile-field-row`,children:[(0,O.jsx)(`input`,{className:`input`,value:w,onChange:e=>N(e.target.value),placeholder:t(`nav.displayNamePlaceholder`)}),(0,O.jsxs)(`button`,{type:`button`,className:`btn btn-primary`,onClick:we,children:[(0,O.jsx)(h,{size:16}),t(`profile.action.save`)]})]})]}),(0,O.jsx)(`div`,{className:`profile-facts`,children:(0,O.jsx)(P,{label:t(`profile.label.username`),value:a.username})})]}),(0,O.jsxs)(`section`,{className:`profile-panel`,children:[(0,O.jsx)(`div`,{className:`profile-panel-header`,children:(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`h2`,{children:t(`profile.section.avatar`)}),(0,O.jsx)(`p`,{children:t(`profile.section.avatar.desc`)})]})}),(0,O.jsx)(`div`,{className:`profile-avatar-grid`,role:`list`,children:k.map(e=>{let n=he===e.value;return(0,O.jsxs)(`button`,{type:`button`,className:[`profile-avatar-option`,n?`selected`:``].filter(Boolean).join(` `),onClick:()=>$(e.value),"aria-pressed":n,title:t(e.labelKey),children:[(0,O.jsx)(`img`,{src:S(a.address,e.value),alt:``,"aria-hidden":`true`}),(0,O.jsx)(`span`,{children:t(e.labelKey)}),n&&(0,O.jsx)(`span`,{className:`profile-avatar-check`,children:(0,O.jsx)(d,{size:14})})]},e.value||`address`)})}),(0,O.jsxs)(`div`,{className:`profile-avatar-url`,children:[(0,O.jsxs)(`label`,{className:`profile-field`,htmlFor:`profile-avatar-url`,children:[(0,O.jsx)(`span`,{children:t(`profile.label.customAvatar`)}),(0,O.jsxs)(`div`,{className:`profile-field-row`,children:[(0,O.jsx)(`input`,{id:`profile-avatar-url`,className:`input`,value:I,onChange:e=>{L(e.target.value),z(``)},placeholder:t(`nav.avatarUrlPlaceholder`)}),(0,O.jsxs)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:Te,disabled:!_e,children:[(0,O.jsx)(h,{size:16}),t(`profile.action.save`)]})]})]}),R&&(0,O.jsx)(`p`,{className:`profile-error`,children:R})]})]})]}),(0,O.jsxs)(`section`,{className:`profile-panel profile-identity-panel`,children:[(0,O.jsxs)(`div`,{className:`profile-panel-header`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`h2`,{children:t(`profile.section.identity`)}),(0,O.jsx)(`p`,{children:t(`profile.section.identity.desc`)})]}),(0,O.jsxs)(o,{to:`/web3/`,hash:`wallet`,className:`btn btn-secondary`,children:[(0,O.jsx)(pe,{size:16}),t(`profile.action.openWallet`)]})]}),(0,O.jsxs)(`div`,{className:`profile-key-grid`,children:[G&&(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(F,{title:t(`web3.label.ed25519Public`),icon:(0,O.jsx)(l,{size:18}),value:G.ed_public_key}),(0,O.jsx)(F,{title:t(`web3.label.x25519Public`),icon:(0,O.jsx)(ae,{size:18}),value:G.public_key})]}),(0,O.jsx)(F,{title:`IPNS ID`,icon:(0,O.jsx)(g,{size:18}),value:me||`-`})]})]})]})}),H&&(0,O.jsx)(se,{title:H.title,message:H.message,confirmText:H.confirmText,danger:H.danger,onConfirm:H.onConfirm,onClose:H.onClose||(()=>U(null))}),B&&(0,O.jsx)(b,{className:`profile-logout-overlay`,onClose:()=>V(!1),children:(0,O.jsxs)(`div`,{className:`confirm-modal profile-logout-modal`,onClick:e=>e.stopPropagation(),children:[(0,O.jsxs)(`div`,{className:`modal-header`,children:[(0,O.jsx)(`h3`,{children:t(`account.logoutTitle`)}),(0,O.jsx)(`button`,{type:`button`,className:`btn btn-icon`,onClick:()=>V(!1),"aria-label":t(`common.close`),children:(0,O.jsx)(y,{size:18})})]}),(0,O.jsx)(`p`,{className:`profile-logout-reminder`,children:t(`profile.logout.backupReminder`)}),(0,O.jsxs)(`div`,{className:`profile-logout-backup-actions`,children:[(0,O.jsx)(`button`,{type:`button`,className:`btn btn-secondary`,disabled:C.busy,onClick:()=>void C.backupToCloud(),children:t(`profile.backup.action.cloudBackup`)}),(0,O.jsx)(`button`,{type:`button`,className:`btn btn-secondary`,disabled:C.busy,onClick:()=>void C.exportLocalBackup(),children:t(`profile.backup.action.exportLocal`)})]}),(0,O.jsxs)(`div`,{className:`modal-actions`,children:[(0,O.jsx)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:()=>V(!1),children:t(`common.cancel`)}),(0,O.jsx)(`button`,{type:`button`,className:`btn btn-danger`,onClick:Ee,children:t(`account.logout`)})]})]})})]})}function P({label:e,value:t,copy:n=!1}){return(0,O.jsxs)(`div`,{className:`profile-fact`,children:[(0,O.jsx)(`span`,{children:e}),(0,O.jsxs)(`div`,{className:`profile-fact-value`,children:[(0,O.jsx)(`code`,{translate:`no`,children:t}),n&&(0,O.jsx)(p,{text:t})]})]})}function F({title:e,icon:t,value:n}){return(0,O.jsxs)(`div`,{className:`profile-key-card`,children:[(0,O.jsxs)(`div`,{className:`profile-key-card-header`,children:[(0,O.jsx)(`span`,{className:`profile-key-card-icon`,children:t}),(0,O.jsx)(`span`,{children:e})]}),(0,O.jsxs)(`div`,{className:`mono-row`,children:[(0,O.jsx)(`code`,{className:`mono`,translate:`no`,children:n}),(0,O.jsx)(p,{text:n})]})]})}var I=a(`/profile/`)({component:N});export{I as Route};
1
+ import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r,E as i,H as a,O as ee,W as o,n as te,o as ne,t as s}from"./useAppStore-Pjif7nCR.js";import{a as c}from"./i18n-DKsg67mH.js";import{t as l}from"./fingerprint-pattern-Z6NfIcxC.js";import{t as u}from"./circle-alert-Dg9cBJgj.js";import{a as d,i as f}from"./AccountMenu-C3wvcWtn.js";import{t as re}from"./download-nQ9X-v0q.js";import{t as ie}from"./external-link-LcGMVTLE.js";import{n as ae,t as p}from"./CopyButton-BfQ-TOoR.js";import{t as m}from"./loader-DAMqAKH7.js";import{t as h}from"./save-CQyJvrmI.js";import{t as g}from"./shield-check-Cq1PKT30.js";import{t as _}from"./upload-PpzkqJnf.js";import{I as v,O as y,T as b,_ as x,g as S,h as C,o as oe,v as w,w as se,y as T}from"./index-CCU5Z4K-.js";import{t as E}from"./MarketingLayout-9X-D6xx4.js";import{t as ce}from"./MarketingHeader-Bh6LcQOj.js";import{n as le}from"./mp-CFhRibX9.js";var ue=r(`cloud-download`,[[`path`,{d:`M12 13v8l-4-4`,key:`1f5nwf`}],[`path`,{d:`m12 21 4-4`,key:`1lfcce`}],[`path`,{d:`M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284`,key:`ui1hmy`}]]),de=r(`cloud-upload`,[[`path`,{d:`M12 13v8`,key:`1l5pq0`}],[`path`,{d:`M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242`,key:`1pljnt`}],[`path`,{d:`m8 17 4-4 4 4`,key:`1quai1`}]]),fe=r(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),pe=r(`wallet-cards`,[[`path`,{d:`M3 11h3.75a2 2 0 0 1 1.6.8l.45.6a4 4 0 0 0 6.4 0l.45-.6a2 2 0 0 1 1.6-.8H21`,key:`1vwh6y`}],[`path`,{d:`M3 7h18`,key:`1uiuf2`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}]]),D=t(e(),1),O=n(),k=[{value:``,labelKey:`profile.avatar.address`},...C.map(e=>({value:x(e),labelKey:`profile.avatar.${e}`}))];function A(e){if(w(e))return!0;try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}}function j(e){return e===`disabled`?`is-disabled`:e===`working`?`is-working`:e===`synced`?`is-synced`:e===`error`?`is-error`:`is-idle`}function M({status:e,busy:t}){return t||e===`working`?(0,O.jsx)(m,{size:16,className:`ui-spinner`}):e===`synced`?(0,O.jsx)(v,{size:16}):e===`error`?(0,O.jsx)(u,{size:16}):(0,O.jsx)(g,{size:16})}function N(){let{formatNumber:e,t}=c(),n=s(e=>e.addToast),r=s(e=>e.hasBackend),a=i(e=>e.identity),u=i(e=>e.openLoginModal),v=i(e=>e.setUserIdentity),x=i(e=>e.logoutUser),C=oe(),[w,N]=(0,D.useState)(``),[I,L]=(0,D.useState)(``),[R,z]=(0,D.useState)(``),[B,V]=(0,D.useState)(!1),[H,U]=(0,D.useState)(null),W=(0,O.jsx)(ce,{});(0,D.useEffect)(()=>{if(!a){N(``),L(``),z(``);return}N(a.displayName||a.username),L(T(a.avatar)||a.avatar||``),z(``)},[a]),(0,D.useEffect)(()=>{a&&C.refreshBackupSummary()},[C.refreshBackupSummary,r,a]);let G=(0,D.useMemo)(()=>a?ee(a.danger):null,[a]),me=(0,D.useMemo)(()=>G?le(G.private_key,G.ed_public_key):``,[G]);if(!a)return(0,O.jsx)(E,{header:W,children:(0,O.jsx)(`section`,{className:`profile-page`,children:(0,O.jsx)(`div`,{className:`profile-container narrow`,children:(0,O.jsxs)(`div`,{className:`profile-empty glass`,children:[(0,O.jsx)(`div`,{className:`profile-empty-icon`,children:(0,O.jsx)(f,{size:34})}),(0,O.jsx)(`h1`,{children:t(`profile.signedOut.title`)}),(0,O.jsx)(`p`,{children:t(`profile.signedOut.desc`)}),(0,O.jsxs)(`button`,{type:`button`,className:`btn btn-primary`,onClick:u,children:[(0,O.jsx)(f,{size:16}),t(`account.signIn`)]})]})})})});let he=T(a.avatar)||a.avatar||``,ge=S(a.address,a.avatar),K=a.address.toLowerCase(),_e=I.trim().length>0,ve=j(C.status),q=C.action===`backup`,J=C.action===`restore`,Y=C.action===`export`,X=C.action===`import`,ye=[{key:`notes`,label:t(`profile.backup.summary.notes`),value:C.notesCount},{key:`files`,label:t(`profile.backup.summary.files`),value:C.backupSummary.filesCount},{key:`trash`,label:t(`profile.backup.summary.trash`),value:C.backupSummary.trashFilesCount},{key:`channels`,label:t(`profile.backup.summary.channels`),value:C.backupSummary.channelsCount}];function be(){U({title:t(`profile.backup.confirm.backupTitle`),message:t(`profile.backup.confirm.backupMessage`),confirmText:t(`profile.backup.action.cloudBackup`),onConfirm:async()=>{U(null),await C.backupToCloud()}})}function xe(){U({title:t(`profile.backup.confirm.restoreTitle`),message:t(`profile.backup.confirm.restoreMessage`),confirmText:t(`profile.backup.action.cloudRestore`),onConfirm:async()=>{U(null),await C.restoreFromCloud({confirm:!1})}})}function Se(){return new Promise(e=>{let n=t=>{U(null),e(t)};U({title:t(`profile.backup.confirm.importTitle`),message:t(`profile.backup.confirm.restore`),confirmText:t(`profile.backup.action.importLocal`),onConfirm:()=>n(!0),onClose:()=>n(!1)})})}function Z(){C.importLocalBackup({requestConfirm:Se})}let Ce=[{key:`cloud-backup`,tone:`cloud-backup`,label:t(q?`profile.backup.status.backingUp`:`profile.backup.action.cloudBackup`),icon:q?(0,O.jsx)(m,{size:16,className:`ui-spinner`}):(0,O.jsx)(de,{size:16}),onClick:be},{key:`cloud-restore`,tone:`cloud-restore`,label:t(J?`profile.backup.status.restoring`:`profile.backup.action.cloudRestore`),icon:J?(0,O.jsx)(m,{size:16,className:`ui-spinner`}):(0,O.jsx)(ue,{size:16}),onClick:xe},{key:`export-local`,tone:`export-local`,label:t(Y?`profile.backup.status.exporting`:`profile.backup.action.exportLocal`),icon:Y?(0,O.jsx)(m,{size:16,className:`ui-spinner`}):(0,O.jsx)(re,{size:16}),onClick:C.exportLocalBackup},{key:`import-local`,tone:`import-local`,label:t(X?`profile.backup.status.importing`:`profile.backup.action.importLocal`),icon:X?(0,O.jsx)(m,{size:16,className:`ui-spinner`}):(0,O.jsx)(_,{size:16}),onClick:Z}];async function Q(e){if(r===!0)try{await te.put(`/api/user/profile`,{json:{displayName:e.displayName||e.username,avatar:e.avatar||``,updatedAt:e.profileUpdatedAt||Date.now()}}).json()}catch(e){n(await ne(e,t(`profile.backup.error.profileSaveFailed`)),`error`)}}function $(e){if(!a)return;let r={...a,avatar:e||void 0,profileUpdatedAt:Date.now()};v(r),Q(r),z(``),n(t(`profile.toast.avatarUpdated`),`success`)}function we(){if(!a)return;let e=w.trim()||a.username,r={...a,displayName:e,profileUpdatedAt:Date.now()};v(r),Q(r),N(e),n(t(`profile.toast.saved`),`success`)}function Te(){let e=I.trim();if(!e){$(void 0);return}if(!A(e)){z(t(`nav.avatarUrlInvalid`));return}$(e)}function Ee(){x(),V(!1)}return(0,O.jsxs)(E,{header:W,children:[(0,O.jsx)(`section`,{className:`profile-page`,children:(0,O.jsxs)(`div`,{className:`profile-container`,children:[(0,O.jsxs)(`section`,{className:`profile-panel profile-backup-card`,children:[(0,O.jsxs)(`div`,{className:`profile-panel-header profile-backup-header`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`h2`,{children:t(`profile.section.backup`)}),(0,O.jsx)(`p`,{children:t(`profile.section.backup.desc`)})]}),(0,O.jsxs)(`span`,{className:`profile-backup-status ${ve}`,children:[(0,O.jsx)(M,{status:C.status,busy:C.busy}),C.statusLabel]})]}),(0,O.jsx)(`div`,{className:`profile-backup-summary`,"aria-label":t(`profile.backup.summary.label`),children:ye.map(t=>(0,O.jsxs)(`div`,{className:`profile-backup-stat`,children:[(0,O.jsx)(`span`,{className:`profile-backup-stat-value`,children:t.value===null?C.backupSummary.loading?`...`:`-`:e(t.value)}),(0,O.jsx)(`span`,{className:`profile-backup-stat-label`,children:t.label})]},t.key))}),(0,O.jsx)(`div`,{className:`profile-backup-actions`,children:Ce.map(e=>(0,O.jsxs)(`button`,{type:`button`,className:[`btn`,`profile-backup-action`,`is-${e.tone}`].join(` `),disabled:C.busy,onClick:e.onClick,children:[e.icon,e.label]},e.key))})]}),(0,O.jsxs)(`header`,{className:`profile-header`,children:[(0,O.jsx)(`img`,{className:`profile-avatar-large`,src:ge,alt:``}),(0,O.jsxs)(`div`,{className:`profile-heading`,children:[(0,O.jsx)(`p`,{className:`profile-kicker`,children:t(`profile.kicker`)}),(0,O.jsx)(`h1`,{children:a.displayName||a.username}),(0,O.jsxs)(`div`,{className:`profile-address-line`,children:[(0,O.jsx)(`code`,{translate:`no`,children:K}),(0,O.jsx)(p,{text:K}),(0,O.jsxs)(`a`,{href:`https://debank.com/profile/${a.address}`,target:`_blank`,rel:`noopener noreferrer`,className:`btn btn-secondary btn-sm`,children:[(0,O.jsx)(ie,{size:14}),t(`web3.action.view`)]})]})]}),(0,O.jsxs)(`button`,{type:`button`,className:`btn btn-secondary profile-logout-btn`,onClick:()=>V(!0),children:[(0,O.jsx)(fe,{size:16}),t(`account.logout`)]})]}),(0,O.jsxs)(`div`,{className:`profile-grid`,children:[(0,O.jsxs)(`section`,{className:`profile-panel`,children:[(0,O.jsx)(`div`,{className:`profile-panel-header`,children:(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`h2`,{children:t(`profile.section.account`)}),(0,O.jsx)(`p`,{children:t(`profile.section.account.desc`)})]})}),(0,O.jsxs)(`label`,{className:`profile-field`,children:[(0,O.jsx)(`span`,{children:t(`profile.label.displayName`)}),(0,O.jsxs)(`div`,{className:`profile-field-row`,children:[(0,O.jsx)(`input`,{className:`input`,value:w,onChange:e=>N(e.target.value),placeholder:t(`nav.displayNamePlaceholder`)}),(0,O.jsxs)(`button`,{type:`button`,className:`btn btn-primary`,onClick:we,children:[(0,O.jsx)(h,{size:16}),t(`profile.action.save`)]})]})]}),(0,O.jsx)(`div`,{className:`profile-facts`,children:(0,O.jsx)(P,{label:t(`profile.label.username`),value:a.username})})]}),(0,O.jsxs)(`section`,{className:`profile-panel`,children:[(0,O.jsx)(`div`,{className:`profile-panel-header`,children:(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`h2`,{children:t(`profile.section.avatar`)}),(0,O.jsx)(`p`,{children:t(`profile.section.avatar.desc`)})]})}),(0,O.jsx)(`div`,{className:`profile-avatar-grid`,role:`list`,children:k.map(e=>{let n=he===e.value;return(0,O.jsxs)(`button`,{type:`button`,className:[`profile-avatar-option`,n?`selected`:``].filter(Boolean).join(` `),onClick:()=>$(e.value),"aria-pressed":n,title:t(e.labelKey),children:[(0,O.jsx)(`img`,{src:S(a.address,e.value),alt:``,"aria-hidden":`true`}),(0,O.jsx)(`span`,{children:t(e.labelKey)}),n&&(0,O.jsx)(`span`,{className:`profile-avatar-check`,children:(0,O.jsx)(d,{size:14})})]},e.value||`address`)})}),(0,O.jsxs)(`div`,{className:`profile-avatar-url`,children:[(0,O.jsxs)(`label`,{className:`profile-field`,htmlFor:`profile-avatar-url`,children:[(0,O.jsx)(`span`,{children:t(`profile.label.customAvatar`)}),(0,O.jsxs)(`div`,{className:`profile-field-row`,children:[(0,O.jsx)(`input`,{id:`profile-avatar-url`,className:`input`,value:I,onChange:e=>{L(e.target.value),z(``)},placeholder:t(`nav.avatarUrlPlaceholder`)}),(0,O.jsxs)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:Te,disabled:!_e,children:[(0,O.jsx)(h,{size:16}),t(`profile.action.save`)]})]})]}),R&&(0,O.jsx)(`p`,{className:`profile-error`,children:R})]})]})]}),(0,O.jsxs)(`section`,{className:`profile-panel profile-identity-panel`,children:[(0,O.jsxs)(`div`,{className:`profile-panel-header`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`h2`,{children:t(`profile.section.identity`)}),(0,O.jsx)(`p`,{children:t(`profile.section.identity.desc`)})]}),(0,O.jsxs)(o,{to:`/web3/`,hash:`wallet`,className:`btn btn-secondary`,children:[(0,O.jsx)(pe,{size:16}),t(`profile.action.openWallet`)]})]}),(0,O.jsxs)(`div`,{className:`profile-key-grid`,children:[G&&(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(F,{title:t(`web3.label.ed25519Public`),icon:(0,O.jsx)(l,{size:18}),value:G.ed_public_key}),(0,O.jsx)(F,{title:t(`web3.label.x25519Public`),icon:(0,O.jsx)(ae,{size:18}),value:G.public_key})]}),(0,O.jsx)(F,{title:`IPNS ID`,icon:(0,O.jsx)(g,{size:18}),value:me||`-`})]})]})]})}),H&&(0,O.jsx)(se,{title:H.title,message:H.message,confirmText:H.confirmText,danger:H.danger,onConfirm:H.onConfirm,onClose:H.onClose||(()=>U(null))}),B&&(0,O.jsx)(b,{className:`profile-logout-overlay`,onClose:()=>V(!1),children:(0,O.jsxs)(`div`,{className:`confirm-modal profile-logout-modal`,onClick:e=>e.stopPropagation(),children:[(0,O.jsxs)(`div`,{className:`modal-header`,children:[(0,O.jsx)(`h3`,{children:t(`account.logoutTitle`)}),(0,O.jsx)(`button`,{type:`button`,className:`btn btn-icon`,onClick:()=>V(!1),"aria-label":t(`common.close`),children:(0,O.jsx)(y,{size:18})})]}),(0,O.jsx)(`p`,{className:`profile-logout-reminder`,children:t(`profile.logout.backupReminder`)}),(0,O.jsxs)(`div`,{className:`profile-logout-backup-actions`,children:[(0,O.jsx)(`button`,{type:`button`,className:`btn btn-secondary`,disabled:C.busy,onClick:()=>void C.backupToCloud(),children:t(`profile.backup.action.cloudBackup`)}),(0,O.jsx)(`button`,{type:`button`,className:`btn btn-secondary`,disabled:C.busy,onClick:()=>void C.exportLocalBackup(),children:t(`profile.backup.action.exportLocal`)})]}),(0,O.jsxs)(`div`,{className:`modal-actions`,children:[(0,O.jsx)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:()=>V(!1),children:t(`common.cancel`)}),(0,O.jsx)(`button`,{type:`button`,className:`btn btn-danger`,onClick:Ee,children:t(`account.logout`)})]})]})})]})}function P({label:e,value:t,copy:n=!1}){return(0,O.jsxs)(`div`,{className:`profile-fact`,children:[(0,O.jsx)(`span`,{children:e}),(0,O.jsxs)(`div`,{className:`profile-fact-value`,children:[(0,O.jsx)(`code`,{translate:`no`,children:t}),n&&(0,O.jsx)(p,{text:t})]})]})}function F({title:e,icon:t,value:n}){return(0,O.jsxs)(`div`,{className:`profile-key-card`,children:[(0,O.jsxs)(`div`,{className:`profile-key-card-header`,children:[(0,O.jsx)(`span`,{className:`profile-key-card-icon`,children:t}),(0,O.jsx)(`span`,{children:e})]}),(0,O.jsxs)(`div`,{className:`mono-row`,children:[(0,O.jsx)(`code`,{className:`mono`,translate:`no`,children:n}),(0,O.jsx)(p,{text:n})]})]})}var I=a(`/profile/`)({component:N});export{I as Route};
@@ -1 +1 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r,E as i,H as a,c as o,o as s,t as c,u as l}from"./useAppStore-DNhyhD20.js";import{a as ee}from"./i18n-DKsg67mH.js";import{a as u}from"./AccountMenu-D_rcXDZr.js";import{t as te}from"./OpenSidebarButton-CXBAjjCE.js";import{a as d,i as f,n as ne,o as re,r as p,t as ie}from"./saveLocalFile-DTgdBgO9.js";import{t as ae}from"./arrow-up-down-DvLSz6Ma.js";import{n as oe,t as se}from"./trash-2-B9gno5q6.js";import{t as ce}from"./copy-OwXDsstV.js";import{t as le}from"./download-Cy2BlfKM.js";import{t as ue}from"./file-text-zvTER2mN.js";import{t as m}from"./folder-6pYYnS2-.js";import{t as de}from"./loader-C4pED_QP.js";import{r as fe,t as pe}from"./AppShell-CKP_dglR.js";import{t as h}from"./music-Br2x8TKX.js";import{t as me}from"./search-DLBOUfny.js";import{t as he}from"./upload-BmufnMFu.js";import{C as ge,O as g,T as _,w as _e}from"./index-DJzLHA0V.js";import{t as ve}from"./AppTop-C03PsDr_.js";import{t as ye}from"./format-CAKfypjK.js";import{a as be,i as xe,n as v,r as Se,t as Ce}from"./downloadValidation-Dd43i9_9.js";var we=r(`files`,[[`path`,{d:`M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8`,key:`14sh0y`}],[`path`,{d:`M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706z`,key:`1970lx`}],[`path`,{d:`M5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1`,key:`l4dndm`}]]),Te=r(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),Ee=r(`star`,[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]),y=t(e(),1);function De(e={}){let t=e.timeout??2e3,[n,r]=(0,y.useState)(null),[i,a]=(0,y.useState)(!1),o=(0,y.useRef)(null);(0,y.useEffect)(()=>()=>{window.clearTimeout(o.current)},[]);let s=e=>{window.clearTimeout(o.current),o.current=window.setTimeout(()=>a(!1),t),a(e)};return{copy:e=>{`clipboard`in navigator?navigator.clipboard.writeText(e).then(()=>{r(null),s(!0)}).catch(e=>r(e)):r(Error(`useClipboard: navigator.clipboard is not supported`))},reset:()=>{a(!1),r(null),window.clearTimeout(o.current)},error:n,copied:i}}var b=n();function Oe(e){let t=e.lastIndexOf(`/`);return t===-1?{folder:``,name:e}:{folder:e.substring(0,t),name:e.substring(t+1)}}function ke({file:e,isSelected:t,onSelect:n,onPreview:r}){let i=p(e.fileName),a=(0,b.jsx)(ue,{size:24,color:`#fff`});return i===`image`?a=(0,b.jsx)(f,{size:24,color:`#fff`}):i===`video`?a=(0,b.jsx)(d,{size:24,color:`#fff`}):i===`audio`&&(a=(0,b.jsx)(h,{size:24,color:`#fff`})),(0,b.jsxs)(`div`,{"data-id":e.cid,onClick:()=>n(e.cid),onDoubleClick:()=>r(e),className:`card ${t?`selected`:``}`,children:[(0,b.jsx)(`div`,{className:`card-icon ${e.starred?`starred`:`file`}`,children:a}),(0,b.jsx)(`p`,{className:`card-name`,translate:`no`,children:Oe(e.fileName).name})]})}function Ae({folder:e,onClick:t}){return(0,b.jsxs)(`div`,{onClick:t,className:`card`,children:[(0,b.jsx)(`div`,{className:`card-icon folder`,children:(0,b.jsx)(m,{size:28,color:`#fff`})}),(0,b.jsx)(`p`,{className:`card-name`,translate:`no`,children:e.name})]})}function x(e,t){return e?[{path:``,name:t},...e.split(`/`).filter(Boolean).map((e,t,n)=>({path:n.slice(0,t+1).join(`/`),name:e}))]:[]}function je({items:e,allFolders:t,currentPath:n,onMove:r,onClose:i}){let[a,o]=(0,y.useState)(``),[s,c]=(0,y.useState)(n),{t:l}=ee(),u=x(a,l(`move.root`));function te(){r(a||s.trim())}let d=t.filter(e=>{if(a===``)return!e.path.includes(`/`);let t=a+`/`;return e.path.startsWith(t)?!e.path.substring(t.length).includes(`/`):!1});return(0,b.jsx)(_,{onClose:i,children:(0,b.jsxs)(`div`,{className:`move-modal`,onClick:e=>e.stopPropagation(),children:[(0,b.jsxs)(`div`,{className:`modal-header`,children:[(0,b.jsx)(`h3`,{children:l(`move.title`)}),(0,b.jsx)(`button`,{type:`button`,onClick:i,className:`btn btn-icon`,children:(0,b.jsx)(g,{size:18})})]}),(0,b.jsx)(`p`,{className:`move-modal-desc`,children:l(`move.selectedCount`,{count:e.length})}),(0,b.jsx)(`div`,{className:`move-new-folder`,children:(0,b.jsx)(`input`,{type:`text`,className:`input`,value:s,onChange:e=>c(e.target.value),placeholder:l(`move.pathPlaceholder`),translate:`no`})}),(0,b.jsx)(`p`,{className:`move-modal-hint`,children:l(`move.pathExample`)}),(0,b.jsx)(`div`,{className:`move-breadcrumb`,children:u.map((e,t)=>(0,b.jsxs)(y.Fragment,{children:[t>0&&(0,b.jsx)(`span`,{className:`breadcrumb-separator`,children:`/`}),(0,b.jsx)(`button`,{type:`button`,onClick:()=>{o(e.path),c(e.path)},className:`move-breadcrumb-btn ${a===e.path&&!s?`active`:``}`,children:(0,b.jsx)(`span`,{translate:e.path?`no`:`yes`,children:e.name})})]},e.path))}),(0,b.jsxs)(`div`,{className:`move-folder-list`,children:[d.length===0&&(0,b.jsx)(`p`,{className:`move-modal-empty`,children:l(`move.noSubfolders`)}),d.map(e=>(0,b.jsxs)(`button`,{type:`button`,onClick:()=>o(e.path),className:`move-folder-item ${a===e.path&&!s?`selected`:``}`,children:[(0,b.jsx)(m,{size:16}),(0,b.jsx)(`span`,{translate:`no`,children:e.name})]},e.path))]}),(0,b.jsxs)(`div`,{className:`modal-actions`,children:[(0,b.jsx)(`button`,{type:`button`,onClick:i,className:`btn btn-secondary`,children:l(`common.cancel`)}),(0,b.jsx)(`button`,{type:`button`,onClick:te,className:`btn btn-primary`,children:l(`move.action`)})]})]})})}var S=`https://most.box`;function C(e){return String(e||``).trim()}function Me(e,t){let n=C(t);return n?`most://${e}?filename=${encodeURIComponent(n)}`:`most://${e}`}function Ne(e,t){let n=C(t),r=`${S}/cid/${encodeURIComponent(e)}`;return n?`${r}?filename=${encodeURIComponent(n)}`:r}function w(e){return Oe(e)}function Pe(e){let t=new Set;return e.forEach(e=>{let{folder:n}=w(e.fileName),r=n.split(`/`).filter(Boolean),i=``;for(let e of r)i+=(i?`/`:``)+e,t.add(i)}),[...t].sort()}function Fe(e,t){let n=t?t+`/`:``;return e.filter(e=>{let t=e.toLowerCase().startsWith(n.toLowerCase()),r=e.substring(n.length);return t&&!r.includes(`/`)}).map(e=>({name:e.substring(n.length),path:e}))}function Ie(e,t,n){return{folders:Fe(t,n),files:e.filter(e=>w(e.fileName).folder===n)}}function Le(e,t){return e?[{path:``,name:t},...e.split(`/`).filter(Boolean).map((e,t,n)=>({path:n.slice(0,t+1).join(`/`),name:e}))]:[]}function T(){let e=c(e=>e.addToast),t=c(e=>e.hasBackend),n=c(e=>e.openConnectModal),r=i(e=>e.identity),a=i(e=>e.openLoginModal),[d,f]=(0,y.useState)([]),[m,h]=(0,y.useState)([]),[Oe,x]=(0,y.useState)(null),[S,C]=(0,y.useState)(`all`),[Fe,T]=(0,y.useState)(!1),[E,D]=(0,y.useState)([]),[Re,O]=(0,y.useState)(null),[k,A]=(0,y.useState)(null),[ze,Be]=fe(!1),[Ve,j]=(0,y.useState)(``),[M,N]=(0,y.useState)(null),[P,He]=(0,y.useState)(!1),[Ue,F]=(0,y.useState)([]),[We,I]=fe(!1),[L,R]=(0,y.useState)(``),{copy:Ge,copied:Ke}=De({timeout:2e3}),{copy:qe,copied:Je}=De({timeout:2e3}),[Ye,Xe]=fe(!1),[z,B]=(0,y.useState)(null),[V,Ze]=(0,y.useState)(null),[Qe,$e]=(0,y.useState)(!1),{t:H,formatDate:et}=ee(),U=t===!0,tt=e=>e?et(e):``,W=Oe||``,nt=Pe(d),{folders:rt,files:it}=Ie(d,nt,W);function G(){return U?!0:(n(),!1)}function K(){return r?!0:(a(),!1)}let at=L?d.filter(e=>w(e.fileName).name.toLowerCase().includes(L.toLowerCase())):it,q=async()=>{if(!U||!r){f([]);return}try{f(await v.listPublishedFiles()||[])}catch{f([])}},J=async()=>{if(!U||!r){h([]);return}try{h(await v.listTrashFiles()||[])}catch{h([])}},ot=e=>{D(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},st=async t=>{if(K()&&G())try{await v.restoreTrashFile(t),e(H(`app.toast.restored`),`success`),q(),J()}catch(t){e(await s(t,H(`app.toast.restoreFailed`)),`error`)}},ct=async()=>{K()&&G()&&B({title:H(`app.clearTrash.title`),message:H(`app.clearTrash.message`),confirmText:H(`app.clear`),danger:!0,onConfirm:async()=>{B(null);try{await v.emptyTrash(),e(H(`app.toast.trashEmptied`),`success`),J()}catch(t){e(await s(t,H(`app.toast.emptyFailed`)),`error`)}}})},lt=async t=>{if(K()&&G())try{let n=await v.toggleStar(t);f(e=>e.map(e=>e.cid===t?{...e,starred:n.starred}:e)),e(n.starred?H(`app.toast.favorited`):H(`app.toast.unfavorited`),`success`)}catch(t){e(await s(t,H(`app.toast.actionFailed`)),`error`)}},ut=async()=>{if(!K()||!G())return;let t=S===`trash`;B({title:H(t?`app.permanentDelete`:`app.batchDelete`),message:H(t?`app.deleteSelectedPermanent`:`app.deleteSelected`,{count:E.length}),confirmText:H(t?`app.permanentDelete`:`app.delete`),danger:!0,onConfirm:async()=>{B(null);try{for(let e of E)t?await v.permanentDeleteTrashFile(e):e.startsWith(`__`)||await v.deletePublishedFile(e);D([]),e(H(t?`app.toast.deletedPermanently`:`app.toast.deleted`),`success`),q(),J()}catch(t){e(await s(t,H(`app.toast.deleteFailed`)),`error`)}}})},dt=async t=>{if(K()&&G())try{for(let e of E){let n=d.find(t=>t.cid===e);if(!n)continue;let{name:r}=w(n.fileName),i=t?`${t}/${r}`:r;n.fileName!==i&&await v.moveFile(e,i)}D([]),Xe.close(),e(H(`app.toast.moved`),`success`),q()}catch(t){e(await s(t,H(`app.toast.moveFailed`)),`error`)}},ft=t=>{let n=!!t.path,r=n?t.name:w(t.fileName).name;Ze({title:H(n?`app.renameFolder`:`app.renameFile`),placeholder:H(`app.enterNewName`),defaultValue:r,confirmText:H(`app.rename`),onConfirm:async i=>{if(i!==r&&K()&&G()){$e(!0);try{if(n){let n=t.path.lastIndexOf(`/`),r=n===-1?``:t.path.substring(0,n),a=r?`${r}/${i}`:i;await v.renameFolder(t.path,a),e(H(`app.toast.renamed`),`success`),q(),Q(a)}else{let{folder:n}=w(t.fileName),r=n?`${n}/${i}`:i;await v.moveFile(t.cid,r),e(H(`app.toast.renamed`),`success`),q()}Ze(null)}catch(t){e(await s(t,H(`app.toast.renameFailed`)),`error`)}finally{$e(!1)}}}})},pt=async t=>{if(!r){a(),e(H(`app.toast.signInBeforePublish`),`warning`);return}if(!G())return;let n=W?W+`/`:``,i=[],o=await v.getNodePolicy().catch(()=>null),s=Array.from(t);for(let t of s){let r=n+t.name,a=be(t,o,H);if(a){e(a,`error`);continue}if(d.some(e=>e.fileName===r)){e(H(`app.fileAlreadyExists`,{fileName:t.name}),`warning`);continue}let s=`upload_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,c={id:s,fileName:t.name,progress:0,type:`upload`,status:`uploading`};i.push(c),F(e=>[...e,c]),i.length>0&&I.open();try{(await v.publishFile(t,r)).alreadyExists?(F(e=>e.map(e=>e.id===s?{...e,status:`completed`}:e)),e(H(`app.fileAlreadyExists`,{fileName:t.name}),`warning`)):F(e=>e.map(e=>e.id===s?{...e,progress:100,status:`completed`}:e))}catch(n){F(e=>e.map(e=>e.id===s?{...e,status:`error`}:e)),e(await xe(n,H(`app.publishFailedWithFile`,{fileName:t.name}),H,t.name),`error`)}}setTimeout(()=>{F(e=>e.filter(e=>e.status!==`completed`&&e.status!==`error`&&e.status!==`cancelled`))},3e3),q()},mt=k?Me(k.cid,k.fileName):``,ht=k?Ne(k.cid,k.fileName):``,gt=()=>{mt&&Ge(mt)},_t=()=>{ht&&qe(ht)},[Y,vt]=(0,y.useState)(!1),X=Ve.trim(),Z=M?.status===`success`&&M.link===X,yt=()=>{Be.close(),N(null)},bt=e=>{j(e.target.value),N(null)},xt=async()=>{let t=Ce(X,H);if(t){N({status:`error`,link:X,message:t}),e(t,`warning`);return}if(!(P||Y)&&K()&&G()){He(!0),N(null);try{let t=await v.checkDownload(X);N({status:`success`,link:X,message:t.alreadyExists?H(`app.fileAlreadyLocal`,{fileName:t.fileName}):H(`app.fileAvailable`,{fileName:t.fileName})}),e(t.alreadyExists?H(`app.fileAlreadyExists`,{fileName:t.fileName}):H(`app.toast.checkPassed`),t.alreadyExists?`warning`:`success`)}catch(t){let n=await Se(t);N({status:`error`,link:X,message:n}),e(n,`error`)}finally{He(!1)}}},St=async()=>{if(!r){a(),e(H(`app.toast.signInBeforeDownload`),`warning`);return}if(!G())return;let t=Ce(X,H);if(t){e(t,`warning`);return}if(!Z){e(H(`app.toast.checkLinkFirst`),`warning`);return}if(!Y){vt(!0);try{let t=await v.downloadFile(X);if(j(``),N(null),yt(),t.alreadyExists)e(H(`app.fileAlreadyExists`,{fileName:t.fileName}),`warning`);else if(t.localAvailable)q();else{let n={id:t.taskId,fileName:H(`app.downloadFallbackName`),progress:0,type:`download`,status:`downloading`};F(e=>[...e,n]),I.open(),e(H(`app.toast.downloadStarted`),`info`)}}catch(t){e(await s(t,H(`app.toast.downloadFailed`)),`error`)}finally{vt(!1)}}},Ct=async t=>{if(K()&&G()&&t.type===`download`&&t.status===`downloading`){F(e=>e.map(e=>e.id===t.id?{...e,status:`cancelling`}:e));try{await v.cancelDownload(t.id)}catch(n){F(e=>e.map(e=>e.id===t.id?{...e,status:`downloading`}:e)),e(await s(n,H(`app.toast.cancelFailed`)),`error`)}}},wt=async t=>{if(K()&&G()){if(t.localAvailable===!1){e(H(`app.toast.fileNotLocal`),`warning`);return}try{(await ie({cid:t.cid,fileName:t.fileName,getFileDownloadUrl:v.getFileDownloadUrl,getRequestHeaders:o,loadFailedMessage:H(`app.toast.getFileFailed`)})).method===`picker`?e(H(`app.toast.fileSaved`),`success`):e(H(`app.toast.fileDownloaded`),`success`)}catch(t){t.name!==`AbortError`&&e(H(`app.saveFailedWithError`,{error:t.message}),`error`)}}},Tt=async t=>{if(K()&&G())try{e(H(`app.toast.startPullLocal`),`info`),await v.cacheFile(t.cid),e(H(`app.toast.pulledAndSeeding`),`success`),q()}catch(t){e(await s(t,H(`app.toast.pullFailed`)),`error`)}},Q=e=>{x(e||null),D([])};(0,y.useEffect)(()=>{if(t!==!0)return;let n=null,r=!1;return(async()=>{if(n=new WebSocket(await l(`/ws`)),r){n.close();return}n.onmessage=t=>{try{let{event:n,data:r}=JSON.parse(t.data);if(n===`publish:success`||n===`download:success`){q();let t=r.taskId||r.fileName;F(e=>e.map(e=>e.id===t||e.fileName===r.fileName?{...e,progress:100,status:`completed`}:e)),n===`download:success`&&(r.alreadyExists?e(H(`app.fileAlreadyExists`,{fileName:r.fileName}),`warning`):e(H(`app.fileDownloadCompleted`,{fileName:r.fileName}),`success`),setTimeout(()=>{F(e=>e.filter(e=>!(e.id===t&&e.status===`completed`)))},3e3))}n===`publish:progress`&&F(e=>e.map(e=>{if(r.file&&e.fileName===r.file&&e.type===`upload`){let t=50;return r.stage===`calculating-cid`?t=25:r.stage===`uploading`?t=75:r.stage===`complete`&&(t=100),{...e,progress:t}}return e})),n===`download:progress`&&F(e=>e.map(e=>e.id===r.taskId?{...e,progress:r.percent||0,loaded:r.loaded,total:r.total}:e)),n===`download:error`&&(F(e=>e.map(e=>e.id===r.taskId?{...e,status:`error`}:e)),e(H(`app.downloadFailedWithError`,{error:r.error}),`error`)),n===`download:status`&&F(e=>e.map(e=>e.id===r.taskId?{...e,fileName:r.file||e.fileName}:e)),n===`download:cancelled`&&(F(e=>e.map(e=>e.id===r.taskId?{...e,status:`cancelled`}:e)),e(H(`app.toast.downloadCancelled`),`warning`)),n===`user:metadata:updated`&&(q(),J())}catch(e){console.warn(`[App WS] Failed to parse message:`,e.message)}}})(),()=>{r=!0,n?.close()}},[t,r?.address]),(0,y.useEffect)(()=>{if(t===!0&&r){q(),J();return}t===!1&&(f([]),h([]))},[t,r?.address]),(0,y.useEffect)(()=>{r||(D([]),O(null),A(null),j(``),N(null),F([]),R(``),x(null),C(`all`))},[r?.address]);let Et=H(S===`all`?`app.nav.local`:S===`starred`?`app.nav.favorites`:`app.nav.trash`),$=S===`all`?at:S===`starred`?d.filter(e=>e.starred&&w(e.fileName).name.toLowerCase().includes(L.toLowerCase())):m.filter(e=>w(e.fileName).name.toLowerCase().includes(L.toLowerCase())),Dt=S===`starred`?[]:rt.filter(e=>e.name.toLowerCase().includes(L.toLowerCase())),Ot=Le(W,H(`app.allContent`));return(0,b.jsxs)(pe,{sidebar:({closeSidebar:e})=>(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(ve,{onNavigate:e}),(0,b.jsx)(`nav`,{className:`sidebar-nav`,children:[{id:`all`,icon:(0,b.jsx)(we,{size:18}),label:H(`app.nav.local`)},{id:`starred`,icon:(0,b.jsx)(Ee,{size:18}),label:H(`app.nav.favorites`)},{id:`trash`,icon:(0,b.jsx)(se,{size:18}),label:H(`app.nav.trash`)}].map(t=>(0,b.jsxs)(`button`,{onClick:()=>{C(t.id),x(null),D([]),R(``),e()},className:`sidebar-nav-btn ${S===t.id?`active`:``}`,children:[t.icon,(0,b.jsx)(`span`,{children:t.label})]},t.id))})]}),headerTitle:(0,b.jsx)(`h2`,{className:`header-title`,children:Et}),headerRight:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(`div`,{className:`search-box`,children:[(0,b.jsx)(me,{size:14}),(0,b.jsx)(`input`,{type:`text`,value:L,onChange:e=>R(e.target.value),placeholder:H(`app.search.placeholder`)}),L&&(0,b.jsx)(`button`,{onClick:()=>R(``),children:(0,b.jsx)(g,{size:12})})]}),S===`trash`&&m.length>0&&(0,b.jsx)(`button`,{onClick:ct,className:`btn btn-sm btn-empty-trash`,children:H(`app.emptyTrash`)}),(0,b.jsx)(`button`,{onClick:()=>I.open(),className:`btn btn-icon`,children:(0,b.jsx)(ae,{size:16})})]}),children:[S===`all`&&(0,b.jsxs)(`div`,{className:`action-grid`,children:[(0,b.jsxs)(`div`,{className:`action-card upload ${Fe?`drag-over`:``}`,onDragOver:e=>{e.preventDefault(),T(!0)},onDragLeave:()=>T(!1),onDrop:e=>{e.preventDefault(),T(!1),!(!K()||!G())&&pt(e.dataTransfer.files)},children:[(0,b.jsx)(`input`,{type:`file`,multiple:!0,onClick:e=>{(!K()||!G())&&e.preventDefault()},onChange:e=>{let t=Array.from(e.target.files||[]);e.target.value=``,pt(t)},className:`action-card-input`}),(0,b.jsx)(he,{size:20,className:`action-grid-icon`}),(0,b.jsx)(`p`,{children:H(`app.publishFile`)})]}),(0,b.jsxs)(`div`,{className:`action-card action-card-download`,onClick:()=>{!K()||!G()||Be.open()},children:[(0,b.jsx)(le,{size:20,className:`action-grid-icon`}),(0,b.jsx)(`p`,{children:H(`app.downloadFile`)})]})]}),S===`all`&&(0,b.jsx)(`div`,{className:`breadcrumb`,children:W?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(`button`,{onClick:()=>Q(``),children:H(`app.allContent`)}),Ot.slice(1).map((e,t)=>(0,b.jsxs)(y.Fragment,{children:[(0,b.jsx)(oe,{size:12}),(0,b.jsx)(`button`,{onClick:()=>Q(e.path),className:t===Ot.length-2?`current`:``,children:(0,b.jsx)(`span`,{translate:`no`,children:e.name})}),t===Ot.length-2&&(0,b.jsx)(`button`,{onClick:()=>ft(e),className:`breadcrumb-edit-btn`,children:(0,b.jsx)(re,{size:12})})]},e.path))]}):null}),(0,b.jsxs)(`div`,{className:`content-grid`,children:[S===`trash`&&($.length===0?(0,b.jsxs)(`div`,{className:`empty-state app-empty-state`,children:[(0,b.jsx)(`p`,{children:H(L?`app.noMatches`:`app.trashEmpty`)}),(0,b.jsx)(te,{label:H(`app.openFileNavigation`)})]}):(0,b.jsx)(`div`,{className:`file-grid`,children:$.map(e=>(0,b.jsxs)(`div`,{onClick:()=>D(t=>t.includes(e.cid)?t.filter(t=>t!==e.cid):[...t,e.cid]),onDoubleClick:()=>st(e.cid),className:`card ${E.includes(e.cid)?`selected`:``}`,children:[(0,b.jsx)(`div`,{className:`card-icon trash`,children:(0,b.jsx)(ue,{size:24,color:`#fff`})}),(0,b.jsx)(`p`,{className:`card-name`,translate:`no`,children:w(e.fileName).name}),(0,b.jsx)(`p`,{className:`card-date`,children:H(`app.deletedOn`,{date:tt(e.deletedAt)})})]},e.cid))})),S!==`trash`&&($.length===0&&Dt.length===0?(0,b.jsxs)(`div`,{className:`empty-state app-empty-state`,children:[(0,b.jsx)(`p`,{children:H(L?`app.noMatches`:S===`starred`?`app.noFavorites`:`app.noLocalFiles`)}),(0,b.jsx)(te,{label:H(`app.openFileNavigation`)})]}):(0,b.jsxs)(`div`,{className:`file-grid`,children:[Dt.map(e=>(0,b.jsx)(Ae,{folder:e,onClick:()=>Q(e.path)},e.path)),$.map(t=>(0,b.jsx)(ke,{file:t,isSelected:E.includes(t.cid),onSelect:ot,onPreview:t=>{if(t.localAvailable===!1){e(H(`app.toast.fileNotLocal`),`warning`);return}O({...t,subtype:p(t.fileName)})}},t.cid))]}))]}),z&&(0,b.jsx)(_e,{title:z.title,message:z.message,confirmText:z.confirmText,danger:z.danger,onConfirm:z.onConfirm,onClose:()=>B(null)}),V&&(0,b.jsx)(ge,{title:V.title,placeholder:V.placeholder,defaultValue:V.defaultValue,confirmText:V.confirmText,isLoading:Qe,onConfirm:V.onConfirm,onClose:()=>Ze(null)}),Ye&&(0,b.jsx)(je,{items:E.map(e=>d.find(t=>t.cid===e)).filter(Boolean),allFolders:nt.map(e=>({path:e,name:e.split(`/`).pop()})),currentPath:W,onMove:dt,onClose:()=>Xe.close()}),k&&(0,b.jsx)(_,{onClose:()=>A(null),children:(0,b.jsxs)(`div`,{className:`share-modal`,onClick:e=>e.stopPropagation(),children:[(0,b.jsxs)(`div`,{className:`modal-header`,children:[(0,b.jsx)(`h3`,{children:H(`app.shareLink`)}),(0,b.jsx)(`button`,{onClick:()=>A(null),className:`btn btn-icon`,children:(0,b.jsx)(g,{size:18})})]}),(0,b.jsxs)(`div`,{className:`share-link-list`,children:[(0,b.jsxs)(`div`,{className:`share-link-box`,children:[(0,b.jsxs)(`div`,{className:`share-link-content`,children:[(0,b.jsx)(`span`,{className:`share-link-label`,children:H(`app.shareMostLink`)}),(0,b.jsx)(`div`,{className:`share-link-text`,translate:`no`,children:mt})]}),(0,b.jsx)(`button`,{type:`button`,"aria-label":H(`app.copyMostShareLink`),onClick:gt,className:`btn btn-circle btn-primary ${Ke?`copied`:``}`,children:Ke?(0,b.jsx)(u,{size:18}):(0,b.jsx)(ce,{size:18})})]}),(0,b.jsxs)(`div`,{className:`share-link-box`,children:[(0,b.jsxs)(`div`,{className:`share-link-content`,children:[(0,b.jsx)(`span`,{className:`share-link-label`,children:H(`app.shareWebLink`)}),(0,b.jsx)(`div`,{className:`share-link-text`,translate:`no`,children:ht})]}),(0,b.jsx)(`button`,{type:`button`,"aria-label":H(`app.copyWebShareLink`),onClick:_t,className:`btn btn-circle btn-primary ${Je?`copied`:``}`,children:Je?(0,b.jsx)(u,{size:18}):(0,b.jsx)(ce,{size:18})})]})]}),(0,b.jsx)(`div`,{className:`share-storage-note`,children:(0,b.jsx)(`span`,{children:H(`app.shareSeedNote`)})})]})}),ze&&(0,b.jsx)(_,{onClose:yt,children:(0,b.jsxs)(`div`,{className:`download-modal`,onClick:e=>e.stopPropagation(),children:[(0,b.jsxs)(`div`,{className:`modal-header`,children:[(0,b.jsx)(`h3`,{children:H(`app.downloadFile`)}),(0,b.jsx)(`button`,{onClick:yt,className:`btn btn-icon`,children:(0,b.jsx)(g,{size:18})})]}),(0,b.jsxs)(`div`,{className:`download-link-row`,children:[(0,b.jsx)(`input`,{type:`text`,className:`input`,value:Ve,onChange:bt,placeholder:H(`app.downloadLink.placeholder`)}),(0,b.jsxs)(`button`,{type:`button`,onClick:xt,disabled:!X||P||Y,className:`btn btn-secondary download-check-btn`,children:[P?(0,b.jsx)(de,{size:14,className:`spin`}):Z?(0,b.jsx)(u,{size:14}):(0,b.jsx)(me,{size:14}),H(P?`app.checking`:Z?`app.passed`:`app.check`)]})]}),M&&(0,b.jsxs)(`div`,{className:`download-check-status ${M.status}`,children:[M.status===`success`?(0,b.jsx)(u,{size:14}):(0,b.jsx)(Te,{size:14}),(0,b.jsx)(`span`,{children:M.message})]}),(0,b.jsxs)(`button`,{onClick:St,disabled:!Z||Y||P,className:`btn btn-info btn-full`,children:[Y?(0,b.jsx)(de,{size:14,className:`spin`}):(0,b.jsx)(le,{size:14}),H(Y?`app.downloading`:`app.startDownload`)]})]})}),Re&&(0,b.jsx)(ne,{item:Re,isBackendReady:U,getFileDownloadUrl:v.getFileDownloadUrl,onSaveAs:wt,onClose:()=>O(null)}),E.length>0&&(0,b.jsxs)(`div`,{className:`batch-bar`,children:[(0,b.jsx)(`span`,{className:`batch-info`,children:H(`app.selectedItems`,{count:E.length})}),(0,b.jsx)(`button`,{onClick:()=>D([]),className:`batch-dismiss`,children:(0,b.jsx)(g,{size:16})}),(0,b.jsx)(`div`,{className:`batch-divider`}),S===`trash`?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(`button`,{onClick:async()=>{K()&&G()&&(await Promise.all(E.map(e=>v.restoreTrashFile(e))),D([]),e(H(`app.toast.restored`),`success`),q(),J())},className:`btn btn-sm`,children:H(`app.restore`)}),(0,b.jsx)(`button`,{onClick:ut,className:`btn btn-sm btn-danger`,children:H(`app.permanentDelete`)})]}):(0,b.jsxs)(b.Fragment,{children:[E.length===1&&(()=>{let e=d.find(e=>e.cid===E[0]);return e&&p(e.fileName)!==`file`})()&&(0,b.jsx)(`button`,{onClick:()=>{let t=d.find(e=>e.cid===E[0]);if(t){if(t.localAvailable===!1){e(H(`app.toast.fileNotLocal`),`warning`);return}let n=p(t.fileName);O({...t,subtype:n})}},className:`btn btn-sm`,children:H(`app.preview`)}),(0,b.jsx)(`button`,{onClick:()=>{let e=E.some(e=>{let t=d.find(t=>t.cid===e);return t&&!t.starred});E.forEach(t=>{let n=d.find(e=>e.cid===t);n&&(e?!n.starred:n.starred)&&lt(t)})},className:`btn btn-sm btn-star`,children:H(`app.favorite`)}),E.length===1&&(0,b.jsx)(`button`,{onClick:()=>{let e=d.find(e=>e.cid===E[0]);e&&ft(e)},className:`btn btn-sm`,children:H(`app.rename`)}),(0,b.jsx)(`button`,{onClick:()=>Xe.open(),className:`btn btn-sm btn-move`,children:H(`app.move`)}),(0,b.jsx)(`button`,{onClick:ut,className:`btn btn-sm btn-danger`,children:H(`app.delete`)}),E.length===1&&(()=>{let e=d.find(e=>e.cid===E[0]);return e&&e.localAvailable===!1})()&&(0,b.jsx)(`button`,{onClick:()=>{let e=d.find(e=>e.cid===E[0]);e&&Tt(e)},className:`btn btn-sm`,children:H(`app.pullToLocal`)}),E.length===1&&(0,b.jsx)(`button`,{onClick:()=>A(d.find(e=>e.cid===E[0])),className:`btn btn-sm`,children:H(`app.share`)}),E.length===1&&(0,b.jsx)(`button`,{onClick:()=>{let e=d.find(e=>e.cid===E[0]);e&&wt(e)},className:`btn btn-sm`,children:H(`app.saveAs`)})]})]}),We&&(0,b.jsx)(_,{onClose:()=>I.close(),children:(0,b.jsxs)(`div`,{className:`transfer-modal`,onClick:e=>e.stopPropagation(),children:[(0,b.jsxs)(`div`,{className:`modal-header`,children:[(0,b.jsx)(`h3`,{children:H(`app.transfers`)}),(0,b.jsx)(`button`,{onClick:()=>I.close(),className:`btn btn-icon`,children:(0,b.jsx)(g,{size:18})})]}),Ue.length===0?(0,b.jsx)(`div`,{className:`empty-transfer`,children:H(`app.noTransfers`)}):Ue.map(e=>(0,b.jsxs)(`div`,{className:`transfer-item`,children:[(0,b.jsxs)(`div`,{className:`transfer-item-header`,children:[e.type===`upload`?(0,b.jsx)(he,{size:14}):(0,b.jsx)(le,{size:14}),(0,b.jsx)(`span`,{className:`transfer-item-name`,translate:`no`,children:e.fileName}),e.status===`downloading`&&e.type===`download`&&(0,b.jsx)(`button`,{onClick:()=>Ct(e),className:`transfer-item-cancel`,children:(0,b.jsx)(g,{size:14})})]}),(0,b.jsxs)(`div`,{className:`transfer-progress-row`,children:[(0,b.jsx)(`progress`,{className:`transfer-progress-meter ${e.type===`download`?`download`:``} ${e.status===`error`?`error`:``} ${e.status===`cancelled`?`cancelled`:``}`,value:Math.max(0,Math.min(100,e.progress)),max:100,"aria-label":H(`app.transferProgress`,{fileName:e.fileName})}),(0,b.jsx)(`span`,{className:`transfer-progress-text`,children:e.status===`completed`?H(`app.completed`):e.status===`error`?H(`app.failed`):e.status===`cancelled`?H(`app.cancelled`):e.status===`cancelling`?H(`app.cancelling`):e.loaded&&e.total?`${ye(e.loaded)}/${ye(e.total)}`:`${e.progress}%`})]})]},e.id))]})})]})}var E=a(`/app/`)({component:T});export{E as Route};
1
+ import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r,E as i,H as a,c as o,o as s,t as c,u as l}from"./useAppStore-Pjif7nCR.js";import{a as ee}from"./i18n-DKsg67mH.js";import{a as u}from"./AccountMenu-C3wvcWtn.js";import{t as te}from"./OpenSidebarButton-09yeNDLa.js";import{a as d,i as f,n as ne,o as re,r as p,t as ie}from"./saveLocalFile-DkrpR5WS.js";import{t as ae}from"./arrow-up-down-gcWLrYup.js";import{n as oe,t as se}from"./trash-2-DQI0V0Rl.js";import{t as ce}from"./copy-BofKiKH_.js";import{t as le}from"./download-nQ9X-v0q.js";import{t as ue}from"./file-text-f1ij7Al1.js";import{t as m}from"./folder-DGTODlX0.js";import{t as de}from"./loader-DAMqAKH7.js";import{r as fe,t as pe}from"./AppShell-BN1uaxn1.js";import{t as h}from"./music-U7NZcQ6S.js";import{t as me}from"./search-CURHlVZZ.js";import{t as he}from"./upload-PpzkqJnf.js";import{C as ge,O as g,T as _,w as _e}from"./index-CCU5Z4K-.js";import{t as ve}from"./AppTop-iPNi3cv5.js";import{t as ye}from"./format-CAKfypjK.js";import{a as be,i as xe,n as v,r as Se,t as Ce}from"./downloadValidation-C0PecvKC.js";var we=r(`files`,[[`path`,{d:`M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8`,key:`14sh0y`}],[`path`,{d:`M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706z`,key:`1970lx`}],[`path`,{d:`M5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1`,key:`l4dndm`}]]),Te=r(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),Ee=r(`star`,[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]),y=t(e(),1);function De(e={}){let t=e.timeout??2e3,[n,r]=(0,y.useState)(null),[i,a]=(0,y.useState)(!1),o=(0,y.useRef)(null);(0,y.useEffect)(()=>()=>{window.clearTimeout(o.current)},[]);let s=e=>{window.clearTimeout(o.current),o.current=window.setTimeout(()=>a(!1),t),a(e)};return{copy:e=>{`clipboard`in navigator?navigator.clipboard.writeText(e).then(()=>{r(null),s(!0)}).catch(e=>r(e)):r(Error(`useClipboard: navigator.clipboard is not supported`))},reset:()=>{a(!1),r(null),window.clearTimeout(o.current)},error:n,copied:i}}var b=n();function Oe(e){let t=e.lastIndexOf(`/`);return t===-1?{folder:``,name:e}:{folder:e.substring(0,t),name:e.substring(t+1)}}function ke({file:e,isSelected:t,onSelect:n,onPreview:r}){let i=p(e.fileName),a=(0,b.jsx)(ue,{size:24,color:`#fff`});return i===`image`?a=(0,b.jsx)(f,{size:24,color:`#fff`}):i===`video`?a=(0,b.jsx)(d,{size:24,color:`#fff`}):i===`audio`&&(a=(0,b.jsx)(h,{size:24,color:`#fff`})),(0,b.jsxs)(`div`,{"data-id":e.cid,onClick:()=>n(e.cid),onDoubleClick:()=>r(e),className:`card ${t?`selected`:``}`,children:[(0,b.jsx)(`div`,{className:`card-icon ${e.starred?`starred`:`file`}`,children:a}),(0,b.jsx)(`p`,{className:`card-name`,translate:`no`,children:Oe(e.fileName).name})]})}function Ae({folder:e,onClick:t}){return(0,b.jsxs)(`div`,{onClick:t,className:`card`,children:[(0,b.jsx)(`div`,{className:`card-icon folder`,children:(0,b.jsx)(m,{size:28,color:`#fff`})}),(0,b.jsx)(`p`,{className:`card-name`,translate:`no`,children:e.name})]})}function x(e,t){return e?[{path:``,name:t},...e.split(`/`).filter(Boolean).map((e,t,n)=>({path:n.slice(0,t+1).join(`/`),name:e}))]:[]}function je({items:e,allFolders:t,currentPath:n,onMove:r,onClose:i}){let[a,o]=(0,y.useState)(``),[s,c]=(0,y.useState)(n),{t:l}=ee(),u=x(a,l(`move.root`));function te(){r(a||s.trim())}let d=t.filter(e=>{if(a===``)return!e.path.includes(`/`);let t=a+`/`;return e.path.startsWith(t)?!e.path.substring(t.length).includes(`/`):!1});return(0,b.jsx)(_,{onClose:i,children:(0,b.jsxs)(`div`,{className:`move-modal`,onClick:e=>e.stopPropagation(),children:[(0,b.jsxs)(`div`,{className:`modal-header`,children:[(0,b.jsx)(`h3`,{children:l(`move.title`)}),(0,b.jsx)(`button`,{type:`button`,onClick:i,className:`btn btn-icon`,children:(0,b.jsx)(g,{size:18})})]}),(0,b.jsx)(`p`,{className:`move-modal-desc`,children:l(`move.selectedCount`,{count:e.length})}),(0,b.jsx)(`div`,{className:`move-new-folder`,children:(0,b.jsx)(`input`,{type:`text`,className:`input`,value:s,onChange:e=>c(e.target.value),placeholder:l(`move.pathPlaceholder`),translate:`no`})}),(0,b.jsx)(`p`,{className:`move-modal-hint`,children:l(`move.pathExample`)}),(0,b.jsx)(`div`,{className:`move-breadcrumb`,children:u.map((e,t)=>(0,b.jsxs)(y.Fragment,{children:[t>0&&(0,b.jsx)(`span`,{className:`breadcrumb-separator`,children:`/`}),(0,b.jsx)(`button`,{type:`button`,onClick:()=>{o(e.path),c(e.path)},className:`move-breadcrumb-btn ${a===e.path&&!s?`active`:``}`,children:(0,b.jsx)(`span`,{translate:e.path?`no`:`yes`,children:e.name})})]},e.path))}),(0,b.jsxs)(`div`,{className:`move-folder-list`,children:[d.length===0&&(0,b.jsx)(`p`,{className:`move-modal-empty`,children:l(`move.noSubfolders`)}),d.map(e=>(0,b.jsxs)(`button`,{type:`button`,onClick:()=>o(e.path),className:`move-folder-item ${a===e.path&&!s?`selected`:``}`,children:[(0,b.jsx)(m,{size:16}),(0,b.jsx)(`span`,{translate:`no`,children:e.name})]},e.path))]}),(0,b.jsxs)(`div`,{className:`modal-actions`,children:[(0,b.jsx)(`button`,{type:`button`,onClick:i,className:`btn btn-secondary`,children:l(`common.cancel`)}),(0,b.jsx)(`button`,{type:`button`,onClick:te,className:`btn btn-primary`,children:l(`move.action`)})]})]})})}var S=`https://most.box`;function C(e){return String(e||``).trim()}function Me(e,t){let n=C(t);return n?`most://${e}?filename=${encodeURIComponent(n)}`:`most://${e}`}function Ne(e,t){let n=C(t),r=`${S}/cid/${encodeURIComponent(e)}`;return n?`${r}?filename=${encodeURIComponent(n)}`:r}function w(e){return Oe(e)}function Pe(e){let t=new Set;return e.forEach(e=>{let{folder:n}=w(e.fileName),r=n.split(`/`).filter(Boolean),i=``;for(let e of r)i+=(i?`/`:``)+e,t.add(i)}),[...t].sort()}function Fe(e,t){let n=t?t+`/`:``;return e.filter(e=>{let t=e.toLowerCase().startsWith(n.toLowerCase()),r=e.substring(n.length);return t&&!r.includes(`/`)}).map(e=>({name:e.substring(n.length),path:e}))}function Ie(e,t,n){return{folders:Fe(t,n),files:e.filter(e=>w(e.fileName).folder===n)}}function Le(e,t){return e?[{path:``,name:t},...e.split(`/`).filter(Boolean).map((e,t,n)=>({path:n.slice(0,t+1).join(`/`),name:e}))]:[]}function T(){let e=c(e=>e.addToast),t=c(e=>e.hasBackend),n=c(e=>e.openConnectModal),r=i(e=>e.identity),a=i(e=>e.openLoginModal),[d,f]=(0,y.useState)([]),[m,h]=(0,y.useState)([]),[Oe,x]=(0,y.useState)(null),[S,C]=(0,y.useState)(`all`),[Fe,T]=(0,y.useState)(!1),[E,D]=(0,y.useState)([]),[Re,O]=(0,y.useState)(null),[k,A]=(0,y.useState)(null),[ze,Be]=fe(!1),[Ve,j]=(0,y.useState)(``),[M,N]=(0,y.useState)(null),[P,He]=(0,y.useState)(!1),[Ue,F]=(0,y.useState)([]),[We,I]=fe(!1),[L,R]=(0,y.useState)(``),{copy:Ge,copied:Ke}=De({timeout:2e3}),{copy:qe,copied:Je}=De({timeout:2e3}),[Ye,Xe]=fe(!1),[z,B]=(0,y.useState)(null),[V,Ze]=(0,y.useState)(null),[Qe,$e]=(0,y.useState)(!1),{t:H,formatDate:et}=ee(),U=t===!0,tt=e=>e?et(e):``,W=Oe||``,nt=Pe(d),{folders:rt,files:it}=Ie(d,nt,W);function G(){return U?!0:(n(),!1)}function K(){return r?!0:(a(),!1)}let at=L?d.filter(e=>w(e.fileName).name.toLowerCase().includes(L.toLowerCase())):it,q=async()=>{if(!U||!r){f([]);return}try{f(await v.listPublishedFiles()||[])}catch{f([])}},J=async()=>{if(!U||!r){h([]);return}try{h(await v.listTrashFiles()||[])}catch{h([])}},ot=e=>{D(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},st=async t=>{if(K()&&G())try{await v.restoreTrashFile(t),e(H(`app.toast.restored`),`success`),q(),J()}catch(t){e(await s(t,H(`app.toast.restoreFailed`)),`error`)}},ct=async()=>{K()&&G()&&B({title:H(`app.clearTrash.title`),message:H(`app.clearTrash.message`),confirmText:H(`app.clear`),danger:!0,onConfirm:async()=>{B(null);try{await v.emptyTrash(),e(H(`app.toast.trashEmptied`),`success`),J()}catch(t){e(await s(t,H(`app.toast.emptyFailed`)),`error`)}}})},lt=async t=>{if(K()&&G())try{let n=await v.toggleStar(t);f(e=>e.map(e=>e.cid===t?{...e,starred:n.starred}:e)),e(n.starred?H(`app.toast.favorited`):H(`app.toast.unfavorited`),`success`)}catch(t){e(await s(t,H(`app.toast.actionFailed`)),`error`)}},ut=async()=>{if(!K()||!G())return;let t=S===`trash`;B({title:H(t?`app.permanentDelete`:`app.batchDelete`),message:H(t?`app.deleteSelectedPermanent`:`app.deleteSelected`,{count:E.length}),confirmText:H(t?`app.permanentDelete`:`app.delete`),danger:!0,onConfirm:async()=>{B(null);try{for(let e of E)t?await v.permanentDeleteTrashFile(e):e.startsWith(`__`)||await v.deletePublishedFile(e);D([]),e(H(t?`app.toast.deletedPermanently`:`app.toast.deleted`),`success`),q(),J()}catch(t){e(await s(t,H(`app.toast.deleteFailed`)),`error`)}}})},dt=async t=>{if(K()&&G())try{for(let e of E){let n=d.find(t=>t.cid===e);if(!n)continue;let{name:r}=w(n.fileName),i=t?`${t}/${r}`:r;n.fileName!==i&&await v.moveFile(e,i)}D([]),Xe.close(),e(H(`app.toast.moved`),`success`),q()}catch(t){e(await s(t,H(`app.toast.moveFailed`)),`error`)}},ft=t=>{let n=!!t.path,r=n?t.name:w(t.fileName).name;Ze({title:H(n?`app.renameFolder`:`app.renameFile`),placeholder:H(`app.enterNewName`),defaultValue:r,confirmText:H(`app.rename`),onConfirm:async i=>{if(i!==r&&K()&&G()){$e(!0);try{if(n){let n=t.path.lastIndexOf(`/`),r=n===-1?``:t.path.substring(0,n),a=r?`${r}/${i}`:i;await v.renameFolder(t.path,a),e(H(`app.toast.renamed`),`success`),q(),Q(a)}else{let{folder:n}=w(t.fileName),r=n?`${n}/${i}`:i;await v.moveFile(t.cid,r),e(H(`app.toast.renamed`),`success`),q()}Ze(null)}catch(t){e(await s(t,H(`app.toast.renameFailed`)),`error`)}finally{$e(!1)}}}})},pt=async t=>{if(!r){a(),e(H(`app.toast.signInBeforePublish`),`warning`);return}if(!G())return;let n=W?W+`/`:``,i=[],o=await v.getNodePolicy().catch(()=>null),s=Array.from(t);for(let t of s){let r=n+t.name,a=be(t,o,H);if(a){e(a,`error`);continue}if(d.some(e=>e.fileName===r)){e(H(`app.fileAlreadyExists`,{fileName:t.name}),`warning`);continue}let s=`upload_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,c={id:s,fileName:t.name,progress:0,type:`upload`,status:`uploading`};i.push(c),F(e=>[...e,c]),i.length>0&&I.open();try{(await v.publishFile(t,r)).alreadyExists?(F(e=>e.map(e=>e.id===s?{...e,status:`completed`}:e)),e(H(`app.fileAlreadyExists`,{fileName:t.name}),`warning`)):F(e=>e.map(e=>e.id===s?{...e,progress:100,status:`completed`}:e))}catch(n){F(e=>e.map(e=>e.id===s?{...e,status:`error`}:e)),e(await xe(n,H(`app.publishFailedWithFile`,{fileName:t.name}),H,t.name),`error`)}}setTimeout(()=>{F(e=>e.filter(e=>e.status!==`completed`&&e.status!==`error`&&e.status!==`cancelled`))},3e3),q()},mt=k?Me(k.cid,k.fileName):``,ht=k?Ne(k.cid,k.fileName):``,gt=()=>{mt&&Ge(mt)},_t=()=>{ht&&qe(ht)},[Y,vt]=(0,y.useState)(!1),X=Ve.trim(),Z=M?.status===`success`&&M.link===X,yt=()=>{Be.close(),N(null)},bt=e=>{j(e.target.value),N(null)},xt=async()=>{let t=Ce(X,H);if(t){N({status:`error`,link:X,message:t}),e(t,`warning`);return}if(!(P||Y)&&K()&&G()){He(!0),N(null);try{let t=await v.checkDownload(X);N({status:`success`,link:X,message:t.alreadyExists?H(`app.fileAlreadyLocal`,{fileName:t.fileName}):H(`app.fileAvailable`,{fileName:t.fileName})}),e(t.alreadyExists?H(`app.fileAlreadyExists`,{fileName:t.fileName}):H(`app.toast.checkPassed`),t.alreadyExists?`warning`:`success`)}catch(t){let n=await Se(t);N({status:`error`,link:X,message:n}),e(n,`error`)}finally{He(!1)}}},St=async()=>{if(!r){a(),e(H(`app.toast.signInBeforeDownload`),`warning`);return}if(!G())return;let t=Ce(X,H);if(t){e(t,`warning`);return}if(!Z){e(H(`app.toast.checkLinkFirst`),`warning`);return}if(!Y){vt(!0);try{let t=await v.downloadFile(X);if(j(``),N(null),yt(),t.alreadyExists)e(H(`app.fileAlreadyExists`,{fileName:t.fileName}),`warning`);else if(t.localAvailable)q();else{let n={id:t.taskId,fileName:H(`app.downloadFallbackName`),progress:0,type:`download`,status:`downloading`};F(e=>[...e,n]),I.open(),e(H(`app.toast.downloadStarted`),`info`)}}catch(t){e(await s(t,H(`app.toast.downloadFailed`)),`error`)}finally{vt(!1)}}},Ct=async t=>{if(K()&&G()&&t.type===`download`&&t.status===`downloading`){F(e=>e.map(e=>e.id===t.id?{...e,status:`cancelling`}:e));try{await v.cancelDownload(t.id)}catch(n){F(e=>e.map(e=>e.id===t.id?{...e,status:`downloading`}:e)),e(await s(n,H(`app.toast.cancelFailed`)),`error`)}}},wt=async t=>{if(K()&&G()){if(t.localAvailable===!1){e(H(`app.toast.fileNotLocal`),`warning`);return}try{(await ie({cid:t.cid,fileName:t.fileName,getFileDownloadUrl:v.getFileDownloadUrl,getRequestHeaders:o,loadFailedMessage:H(`app.toast.getFileFailed`)})).method===`picker`?e(H(`app.toast.fileSaved`),`success`):e(H(`app.toast.fileDownloaded`),`success`)}catch(t){t.name!==`AbortError`&&e(H(`app.saveFailedWithError`,{error:t.message}),`error`)}}},Tt=async t=>{if(K()&&G())try{e(H(`app.toast.startPullLocal`),`info`),await v.cacheFile(t.cid),e(H(`app.toast.pulledAndSeeding`),`success`),q()}catch(t){e(await s(t,H(`app.toast.pullFailed`)),`error`)}},Q=e=>{x(e||null),D([])};(0,y.useEffect)(()=>{if(t!==!0)return;let n=null,r=!1;return(async()=>{if(n=new WebSocket(await l(`/ws`)),r){n.close();return}n.onmessage=t=>{try{let{event:n,data:r}=JSON.parse(t.data);if(n===`publish:success`||n===`download:success`){q();let t=r.taskId||r.fileName;F(e=>e.map(e=>e.id===t||e.fileName===r.fileName?{...e,progress:100,status:`completed`}:e)),n===`download:success`&&(r.alreadyExists?e(H(`app.fileAlreadyExists`,{fileName:r.fileName}),`warning`):e(H(`app.fileDownloadCompleted`,{fileName:r.fileName}),`success`),setTimeout(()=>{F(e=>e.filter(e=>!(e.id===t&&e.status===`completed`)))},3e3))}n===`publish:progress`&&F(e=>e.map(e=>{if(r.file&&e.fileName===r.file&&e.type===`upload`){let t=50;return r.stage===`calculating-cid`?t=25:r.stage===`uploading`?t=75:r.stage===`complete`&&(t=100),{...e,progress:t}}return e})),n===`download:progress`&&F(e=>e.map(e=>e.id===r.taskId?{...e,progress:r.percent||0,loaded:r.loaded,total:r.total}:e)),n===`download:error`&&(F(e=>e.map(e=>e.id===r.taskId?{...e,status:`error`}:e)),e(H(`app.downloadFailedWithError`,{error:r.error}),`error`)),n===`download:status`&&F(e=>e.map(e=>e.id===r.taskId?{...e,fileName:r.file||e.fileName}:e)),n===`download:cancelled`&&(F(e=>e.map(e=>e.id===r.taskId?{...e,status:`cancelled`}:e)),e(H(`app.toast.downloadCancelled`),`warning`)),n===`user:metadata:updated`&&(q(),J())}catch(e){console.warn(`[App WS] Failed to parse message:`,e.message)}}})(),()=>{r=!0,n?.close()}},[t,r?.address]),(0,y.useEffect)(()=>{if(t===!0&&r){q(),J();return}t===!1&&(f([]),h([]))},[t,r?.address]),(0,y.useEffect)(()=>{r||(D([]),O(null),A(null),j(``),N(null),F([]),R(``),x(null),C(`all`))},[r?.address]);let Et=H(S===`all`?`app.nav.local`:S===`starred`?`app.nav.favorites`:`app.nav.trash`),$=S===`all`?at:S===`starred`?d.filter(e=>e.starred&&w(e.fileName).name.toLowerCase().includes(L.toLowerCase())):m.filter(e=>w(e.fileName).name.toLowerCase().includes(L.toLowerCase())),Dt=S===`starred`?[]:rt.filter(e=>e.name.toLowerCase().includes(L.toLowerCase())),Ot=Le(W,H(`app.allContent`));return(0,b.jsxs)(pe,{sidebar:({closeSidebar:e})=>(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(ve,{onNavigate:e}),(0,b.jsx)(`nav`,{className:`sidebar-nav`,children:[{id:`all`,icon:(0,b.jsx)(we,{size:18}),label:H(`app.nav.local`)},{id:`starred`,icon:(0,b.jsx)(Ee,{size:18}),label:H(`app.nav.favorites`)},{id:`trash`,icon:(0,b.jsx)(se,{size:18}),label:H(`app.nav.trash`)}].map(t=>(0,b.jsxs)(`button`,{onClick:()=>{C(t.id),x(null),D([]),R(``),e()},className:`sidebar-nav-btn ${S===t.id?`active`:``}`,children:[t.icon,(0,b.jsx)(`span`,{children:t.label})]},t.id))})]}),headerTitle:(0,b.jsx)(`h2`,{className:`header-title`,children:Et}),headerRight:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(`div`,{className:`search-box`,children:[(0,b.jsx)(me,{size:14}),(0,b.jsx)(`input`,{type:`text`,value:L,onChange:e=>R(e.target.value),placeholder:H(`app.search.placeholder`)}),L&&(0,b.jsx)(`button`,{onClick:()=>R(``),children:(0,b.jsx)(g,{size:12})})]}),S===`trash`&&m.length>0&&(0,b.jsx)(`button`,{onClick:ct,className:`btn btn-sm btn-empty-trash`,children:H(`app.emptyTrash`)}),(0,b.jsx)(`button`,{onClick:()=>I.open(),className:`btn btn-icon`,children:(0,b.jsx)(ae,{size:16})})]}),children:[S===`all`&&(0,b.jsxs)(`div`,{className:`action-grid`,children:[(0,b.jsxs)(`div`,{className:`action-card upload ${Fe?`drag-over`:``}`,onDragOver:e=>{e.preventDefault(),T(!0)},onDragLeave:()=>T(!1),onDrop:e=>{e.preventDefault(),T(!1),!(!K()||!G())&&pt(e.dataTransfer.files)},children:[(0,b.jsx)(`input`,{type:`file`,multiple:!0,onClick:e=>{(!K()||!G())&&e.preventDefault()},onChange:e=>{let t=Array.from(e.target.files||[]);e.target.value=``,pt(t)},className:`action-card-input`}),(0,b.jsx)(he,{size:20,className:`action-grid-icon`}),(0,b.jsx)(`p`,{children:H(`app.publishFile`)})]}),(0,b.jsxs)(`div`,{className:`action-card action-card-download`,onClick:()=>{!K()||!G()||Be.open()},children:[(0,b.jsx)(le,{size:20,className:`action-grid-icon`}),(0,b.jsx)(`p`,{children:H(`app.downloadFile`)})]})]}),S===`all`&&(0,b.jsx)(`div`,{className:`breadcrumb`,children:W?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(`button`,{onClick:()=>Q(``),children:H(`app.allContent`)}),Ot.slice(1).map((e,t)=>(0,b.jsxs)(y.Fragment,{children:[(0,b.jsx)(oe,{size:12}),(0,b.jsx)(`button`,{onClick:()=>Q(e.path),className:t===Ot.length-2?`current`:``,children:(0,b.jsx)(`span`,{translate:`no`,children:e.name})}),t===Ot.length-2&&(0,b.jsx)(`button`,{onClick:()=>ft(e),className:`breadcrumb-edit-btn`,children:(0,b.jsx)(re,{size:12})})]},e.path))]}):null}),(0,b.jsxs)(`div`,{className:`content-grid`,children:[S===`trash`&&($.length===0?(0,b.jsxs)(`div`,{className:`empty-state app-empty-state`,children:[(0,b.jsx)(`p`,{children:H(L?`app.noMatches`:`app.trashEmpty`)}),(0,b.jsx)(te,{label:H(`app.openFileNavigation`)})]}):(0,b.jsx)(`div`,{className:`file-grid`,children:$.map(e=>(0,b.jsxs)(`div`,{onClick:()=>D(t=>t.includes(e.cid)?t.filter(t=>t!==e.cid):[...t,e.cid]),onDoubleClick:()=>st(e.cid),className:`card ${E.includes(e.cid)?`selected`:``}`,children:[(0,b.jsx)(`div`,{className:`card-icon trash`,children:(0,b.jsx)(ue,{size:24,color:`#fff`})}),(0,b.jsx)(`p`,{className:`card-name`,translate:`no`,children:w(e.fileName).name}),(0,b.jsx)(`p`,{className:`card-date`,children:H(`app.deletedOn`,{date:tt(e.deletedAt)})})]},e.cid))})),S!==`trash`&&($.length===0&&Dt.length===0?(0,b.jsxs)(`div`,{className:`empty-state app-empty-state`,children:[(0,b.jsx)(`p`,{children:H(L?`app.noMatches`:S===`starred`?`app.noFavorites`:`app.noLocalFiles`)}),(0,b.jsx)(te,{label:H(`app.openFileNavigation`)})]}):(0,b.jsxs)(`div`,{className:`file-grid`,children:[Dt.map(e=>(0,b.jsx)(Ae,{folder:e,onClick:()=>Q(e.path)},e.path)),$.map(t=>(0,b.jsx)(ke,{file:t,isSelected:E.includes(t.cid),onSelect:ot,onPreview:t=>{if(t.localAvailable===!1){e(H(`app.toast.fileNotLocal`),`warning`);return}O({...t,subtype:p(t.fileName)})}},t.cid))]}))]}),z&&(0,b.jsx)(_e,{title:z.title,message:z.message,confirmText:z.confirmText,danger:z.danger,onConfirm:z.onConfirm,onClose:()=>B(null)}),V&&(0,b.jsx)(ge,{title:V.title,placeholder:V.placeholder,defaultValue:V.defaultValue,confirmText:V.confirmText,isLoading:Qe,onConfirm:V.onConfirm,onClose:()=>Ze(null)}),Ye&&(0,b.jsx)(je,{items:E.map(e=>d.find(t=>t.cid===e)).filter(Boolean),allFolders:nt.map(e=>({path:e,name:e.split(`/`).pop()})),currentPath:W,onMove:dt,onClose:()=>Xe.close()}),k&&(0,b.jsx)(_,{onClose:()=>A(null),children:(0,b.jsxs)(`div`,{className:`share-modal`,onClick:e=>e.stopPropagation(),children:[(0,b.jsxs)(`div`,{className:`modal-header`,children:[(0,b.jsx)(`h3`,{children:H(`app.shareLink`)}),(0,b.jsx)(`button`,{onClick:()=>A(null),className:`btn btn-icon`,children:(0,b.jsx)(g,{size:18})})]}),(0,b.jsxs)(`div`,{className:`share-link-list`,children:[(0,b.jsxs)(`div`,{className:`share-link-box`,children:[(0,b.jsxs)(`div`,{className:`share-link-content`,children:[(0,b.jsx)(`span`,{className:`share-link-label`,children:H(`app.shareMostLink`)}),(0,b.jsx)(`div`,{className:`share-link-text`,translate:`no`,children:mt})]}),(0,b.jsx)(`button`,{type:`button`,"aria-label":H(`app.copyMostShareLink`),onClick:gt,className:`btn btn-circle btn-primary ${Ke?`copied`:``}`,children:Ke?(0,b.jsx)(u,{size:18}):(0,b.jsx)(ce,{size:18})})]}),(0,b.jsxs)(`div`,{className:`share-link-box`,children:[(0,b.jsxs)(`div`,{className:`share-link-content`,children:[(0,b.jsx)(`span`,{className:`share-link-label`,children:H(`app.shareWebLink`)}),(0,b.jsx)(`div`,{className:`share-link-text`,translate:`no`,children:ht})]}),(0,b.jsx)(`button`,{type:`button`,"aria-label":H(`app.copyWebShareLink`),onClick:_t,className:`btn btn-circle btn-primary ${Je?`copied`:``}`,children:Je?(0,b.jsx)(u,{size:18}):(0,b.jsx)(ce,{size:18})})]})]}),(0,b.jsx)(`div`,{className:`share-storage-note`,children:(0,b.jsx)(`span`,{children:H(`app.shareSeedNote`)})})]})}),ze&&(0,b.jsx)(_,{onClose:yt,children:(0,b.jsxs)(`div`,{className:`download-modal`,onClick:e=>e.stopPropagation(),children:[(0,b.jsxs)(`div`,{className:`modal-header`,children:[(0,b.jsx)(`h3`,{children:H(`app.downloadFile`)}),(0,b.jsx)(`button`,{onClick:yt,className:`btn btn-icon`,children:(0,b.jsx)(g,{size:18})})]}),(0,b.jsxs)(`div`,{className:`download-link-row`,children:[(0,b.jsx)(`input`,{type:`text`,className:`input`,value:Ve,onChange:bt,placeholder:H(`app.downloadLink.placeholder`)}),(0,b.jsxs)(`button`,{type:`button`,onClick:xt,disabled:!X||P||Y,className:`btn btn-secondary download-check-btn`,children:[P?(0,b.jsx)(de,{size:14,className:`spin`}):Z?(0,b.jsx)(u,{size:14}):(0,b.jsx)(me,{size:14}),H(P?`app.checking`:Z?`app.passed`:`app.check`)]})]}),M&&(0,b.jsxs)(`div`,{className:`download-check-status ${M.status}`,children:[M.status===`success`?(0,b.jsx)(u,{size:14}):(0,b.jsx)(Te,{size:14}),(0,b.jsx)(`span`,{children:M.message})]}),(0,b.jsxs)(`button`,{onClick:St,disabled:!Z||Y||P,className:`btn btn-info btn-full`,children:[Y?(0,b.jsx)(de,{size:14,className:`spin`}):(0,b.jsx)(le,{size:14}),H(Y?`app.downloading`:`app.startDownload`)]})]})}),Re&&(0,b.jsx)(ne,{item:Re,isBackendReady:U,getFileDownloadUrl:v.getFileDownloadUrl,onSaveAs:wt,onClose:()=>O(null)}),E.length>0&&(0,b.jsxs)(`div`,{className:`batch-bar`,children:[(0,b.jsx)(`span`,{className:`batch-info`,children:H(`app.selectedItems`,{count:E.length})}),(0,b.jsx)(`button`,{onClick:()=>D([]),className:`batch-dismiss`,children:(0,b.jsx)(g,{size:16})}),(0,b.jsx)(`div`,{className:`batch-divider`}),S===`trash`?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(`button`,{onClick:async()=>{K()&&G()&&(await Promise.all(E.map(e=>v.restoreTrashFile(e))),D([]),e(H(`app.toast.restored`),`success`),q(),J())},className:`btn btn-sm`,children:H(`app.restore`)}),(0,b.jsx)(`button`,{onClick:ut,className:`btn btn-sm btn-danger`,children:H(`app.permanentDelete`)})]}):(0,b.jsxs)(b.Fragment,{children:[E.length===1&&(()=>{let e=d.find(e=>e.cid===E[0]);return e&&p(e.fileName)!==`file`})()&&(0,b.jsx)(`button`,{onClick:()=>{let t=d.find(e=>e.cid===E[0]);if(t){if(t.localAvailable===!1){e(H(`app.toast.fileNotLocal`),`warning`);return}let n=p(t.fileName);O({...t,subtype:n})}},className:`btn btn-sm`,children:H(`app.preview`)}),(0,b.jsx)(`button`,{onClick:()=>{let e=E.some(e=>{let t=d.find(t=>t.cid===e);return t&&!t.starred});E.forEach(t=>{let n=d.find(e=>e.cid===t);n&&(e?!n.starred:n.starred)&&lt(t)})},className:`btn btn-sm btn-star`,children:H(`app.favorite`)}),E.length===1&&(0,b.jsx)(`button`,{onClick:()=>{let e=d.find(e=>e.cid===E[0]);e&&ft(e)},className:`btn btn-sm`,children:H(`app.rename`)}),(0,b.jsx)(`button`,{onClick:()=>Xe.open(),className:`btn btn-sm btn-move`,children:H(`app.move`)}),(0,b.jsx)(`button`,{onClick:ut,className:`btn btn-sm btn-danger`,children:H(`app.delete`)}),E.length===1&&(()=>{let e=d.find(e=>e.cid===E[0]);return e&&e.localAvailable===!1})()&&(0,b.jsx)(`button`,{onClick:()=>{let e=d.find(e=>e.cid===E[0]);e&&Tt(e)},className:`btn btn-sm`,children:H(`app.pullToLocal`)}),E.length===1&&(0,b.jsx)(`button`,{onClick:()=>A(d.find(e=>e.cid===E[0])),className:`btn btn-sm`,children:H(`app.share`)}),E.length===1&&(0,b.jsx)(`button`,{onClick:()=>{let e=d.find(e=>e.cid===E[0]);e&&wt(e)},className:`btn btn-sm`,children:H(`app.saveAs`)})]})]}),We&&(0,b.jsx)(_,{onClose:()=>I.close(),children:(0,b.jsxs)(`div`,{className:`transfer-modal`,onClick:e=>e.stopPropagation(),children:[(0,b.jsxs)(`div`,{className:`modal-header`,children:[(0,b.jsx)(`h3`,{children:H(`app.transfers`)}),(0,b.jsx)(`button`,{onClick:()=>I.close(),className:`btn btn-icon`,children:(0,b.jsx)(g,{size:18})})]}),Ue.length===0?(0,b.jsx)(`div`,{className:`empty-transfer`,children:H(`app.noTransfers`)}):Ue.map(e=>(0,b.jsxs)(`div`,{className:`transfer-item`,children:[(0,b.jsxs)(`div`,{className:`transfer-item-header`,children:[e.type===`upload`?(0,b.jsx)(he,{size:14}):(0,b.jsx)(le,{size:14}),(0,b.jsx)(`span`,{className:`transfer-item-name`,translate:`no`,children:e.fileName}),e.status===`downloading`&&e.type===`download`&&(0,b.jsx)(`button`,{onClick:()=>Ct(e),className:`transfer-item-cancel`,children:(0,b.jsx)(g,{size:14})})]}),(0,b.jsxs)(`div`,{className:`transfer-progress-row`,children:[(0,b.jsx)(`progress`,{className:`transfer-progress-meter ${e.type===`download`?`download`:``} ${e.status===`error`?`error`:``} ${e.status===`cancelled`?`cancelled`:``}`,value:Math.max(0,Math.min(100,e.progress)),max:100,"aria-label":H(`app.transferProgress`,{fileName:e.fileName})}),(0,b.jsx)(`span`,{className:`transfer-progress-text`,children:e.status===`completed`?H(`app.completed`):e.status===`error`?H(`app.failed`):e.status===`cancelled`?H(`app.cancelled`):e.status===`cancelling`?H(`app.cancelling`):e.loaded&&e.total?`${ye(e.loaded)}/${ye(e.total)}`:`${e.progress}%`})]})]},e.id))]})})]})}var E=a(`/app/`)({component:T});export{E as Route};
@@ -1 +1 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{A as r,B as i,F as a,H as o,O as s}from"./useAppStore-DNhyhD20.js";import{a as ee}from"./i18n-DKsg67mH.js";import{t as te}from"./external-link-D_AQSgxW.js";import{n as ne,t as re}from"./CopyButton-ClwBN6Iy.js";import{t as ie}from"./AppShell-CKP_dglR.js";import{t as ae}from"./refresh-cw-CfkUlTK9.js";import{b as oe}from"./index-DJzLHA0V.js";import{t as se}from"./AppTop-C03PsDr_.js";import{n as ce,r as le,t as c}from"./chatJoinInvite-7tuD-STm.js";var l=i(`link`,[[`path`,{d:`M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71`,key:`1cjeqo`}],[`path`,{d:`M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71`,key:`19qd67`}]]),u=t(e(),1),d=n(),f=`chat-join-demo`,p=``,m=`chatjoin_support`,ue=/^[a-zA-Z0-9_-]{3,30}$/,h=/^0x[a-fA-F0-9]{64}$/,de=c,fe=[{value:`dark`,label:`dark`},{value:`light`,label:`light`}],pe=[{value:`zh-CN`,label:`zh-CN`},{value:`zh-TW`,label:`zh-TW`},{value:`en`,label:`en`}];function g(){return typeof window>`u`?`https://most.box`:window.location.origin}function me(e){return(e.trim()||g()).replace(/\/+$/,``)}function he(e,t){let n=s(a(e.trim()||f,t).danger);return{publicKey:n.public_key,privateKey:n.private_key}}function _(e){return e.trim()||void 0}function ge(e){try{return JSON.parse(e)}catch{return null}}function _e(e){let t=e.trim();if(!t)return null;let n,r;try{let e=new URL(t,g());n=e.searchParams,r=e.origin}catch{n=new URLSearchParams(t.replace(/^\?/,``))}let i=n.get(`token`)?.trim()||``,a=n.get(`pub`)?.trim()||``;return!i||!a?null:{token:i,pub:a,origin:r}}function v({name:e,description:t}){return(0,d.jsxs)(`span`,{className:`chat-join-demo-label`,children:[(0,d.jsx)(`span`,{className:`chat-join-demo-label-key`,children:e}),(0,d.jsx)(`span`,{className:`chat-join-demo-label-desc`,children:t})]})}function y({name:e,description:t,children:n,wide:r=!1}){return(0,d.jsxs)(`label`,{className:`chat-join-demo-field ${r?`wide`:``}`,children:[(0,d.jsx)(v,{name:e,description:t}),n]})}function b(){let{t:e}=ee(),[t,n]=(0,u.useState)(g),[i,a]=(0,u.useState)(`demo-user`),[o,s]=(0,u.useState)(`Demo User`),[c,b]=(0,u.useState)(m),[x,S]=(0,u.useState)(`Chat Join Demo`),[C,w]=(0,u.useState)(`zh-CN`),[T,E]=(0,u.useState)(`sparkbit`),[D,O]=(0,u.useState)(),[k,A]=(0,u.useState)(``),[j,M]=(0,u.useState)(``),[N,P]=(0,u.useState)(``),[F,I]=(0,u.useState)(``),[L,R]=(0,u.useState)(``),[z,B]=(0,u.useState)(``),[V,ve]=(0,u.useState)(ce),[H,ye]=(0,u.useState)(f),[U,be]=(0,u.useState)(p),[W,xe]=(0,u.useState)(()=>he(f,p)),[Se,Ce]=(0,u.useState)(``),[we,G]=(0,u.useState)(``),[Te,K]=(0,u.useState)(``),[Ee,De]=(0,u.useState)(!1),[Oe,q]=(0,u.useState)(``),[ke,J]=(0,u.useState)(``),[Y,X]=(0,u.useState)(``),[Z,Q]=(0,u.useState)(``),Ae=(0,u.useMemo)(()=>{let e={uid:i.trim(),locale:C,channels:[{id:c.trim(),name:_(x)}]};return T&&(e.theme=T),D&&(e.appearance=D),e.node_url=_(L),e.node_invite=_(z),e.logo=_(k),e.logo_dark=_(j),e.data=_(F),e.avatar=_(N),e.name=_(o),e},[D,N,c,x,F,o,C,k,j,z,L,T,i]),$=(0,u.useMemo)(()=>JSON.stringify(Ae,null,2),[Ae]);function je(){xe(he(H,U)),q(``),J(``),X(``),Q(``)}function Me(e){let t=e.channels[0];a(e.uid),w(e.locale||`zh-CN`),E(e.theme),O(e.appearance),R(e.node_url||``),B(e.node_invite||``),A(e.logo||``),M(e.logo_dark||``),I(e.data||``),P(e.avatar||``),s(e.name||``),b(t?.id||m),S(t?.name||``)}async function Ne(){let r=_e(Se);if(!r){G(``),K(e(`chatJoin.demo.error.linkInvalid`));return}let i=r.origin||me(t),a=`${i}/chat/join?token=${encodeURIComponent(r.token)}&pub=${encodeURIComponent(r.pub)}`;n(i),q(r.token),J(r.pub),X(a),G(e(`chatJoin.demo.status.linkParsed`)),K(``),De(!0);try{let t=await fetch(`${de}/api/chat.join.decrypt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({token:r.token,pub:r.pub})}),n=await t.text(),i=ge(n);if(!t.ok){let t=i&&typeof i==`object`&&`error`in i&&typeof i.error==`string`?i.error:n;throw Error(t||e(`chatJoin.error.decrypt`))}let a=le(i);if(!a){K(e(`chatJoin.demo.error.parseInvalidPayload`)),G(e(`chatJoin.demo.status.linkParsed`));return}Me(a),G(e(`chatJoin.demo.status.linkDecrypted`)),K(``)}catch(t){K(e(`chatJoin.demo.error.parseDecryptFailed`,{message:t instanceof Error?t.message:String(t)}))}finally{De(!1)}}function Pe(){let n=i.trim(),a=c.trim(),o=V.trim();if(!n){Q(e(`chatJoin.demo.error.uidRequired`));return}if(!ue.test(a)){Q(e(`chatJoin.demo.error.channelInvalid`));return}if(!h.test(o)){Q(e(`chatJoin.demo.error.recipientPublicInvalid`));return}if(!h.test(W.publicKey)||!h.test(W.privateKey)){Q(e(`chatJoin.demo.error.senderKeysInvalid`));return}try{let e=r($,{senderPrivateKey:W.privateKey,recipientPublicKey:o}),n=W.publicKey,i=`${me(t)}/chat/join?token=${encodeURIComponent(e)}&pub=${encodeURIComponent(n)}`;q(e),J(n),X(i),Q(``)}catch{Q(e(`chatJoin.demo.error.encryptFailed`))}}return(0,d.jsx)(ie,{sidebar:()=>(0,d.jsx)(se,{}),headerTitle:(0,d.jsx)(`h2`,{className:`header-title`,children:e(`chatJoin.demo.title`)}),children:(0,d.jsx)(`div`,{className:`chat-join-container`,children:(0,d.jsxs)(`div`,{className:`chat-join-demo-panel`,children:[(0,d.jsxs)(`section`,{className:`chat-join-demo-section`,children:[(0,d.jsxs)(`div`,{className:`chat-join-helper-title`,children:[(0,d.jsx)(l,{size:18}),(0,d.jsx)(`h3`,{children:e(`chatJoin.demo.parseSection`)})]}),(0,d.jsx)(y,{name:`link`,description:e(`chatJoin.demo.field.existingLink`),wide:!0,children:(0,d.jsx)(`textarea`,{className:`textarea mono`,value:Se,onChange:e=>Ce(e.target.value),rows:4,translate:`no`})}),(0,d.jsx)(`div`,{className:`chat-join-demo-actions`,children:(0,d.jsxs)(`button`,{className:`btn btn-secondary`,type:`button`,onClick:Ne,disabled:Ee,children:[(0,d.jsx)(l,{size:16}),e(Ee?`chatJoin.demo.action.parsing`:`chatJoin.demo.action.parseLink`)]})}),we&&(0,d.jsx)(`p`,{className:`chat-join-demo-success`,children:we}),Te&&(0,d.jsx)(`p`,{className:`chat-join-demo-error`,children:Te})]}),(0,d.jsxs)(`section`,{className:`chat-join-demo-section`,children:[(0,d.jsxs)(`div`,{className:`chat-join-helper-title`,children:[(0,d.jsx)(l,{size:18}),(0,d.jsx)(`h3`,{children:e(`chatJoin.demo.inviteSection`)})]}),(0,d.jsxs)(`div`,{className:`chat-join-demo-grid`,children:[(0,d.jsx)(y,{name:`origin`,description:e(`chatJoin.demo.field.origin`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:t,onChange:e=>n(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`uid`,description:e(`chatJoin.demo.field.uid`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:i,onChange:e=>a(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`name`,description:e(`chatJoin.demo.field.name`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:o,onChange:e=>s(e.target.value)})}),(0,d.jsx)(y,{name:`locale`,description:e(`chatJoin.demo.field.locale`),children:(0,d.jsx)(oe,{ariaLabel:e(`chatJoin.demo.field.locale`),value:C,options:pe,onChange:w,size:`compact`})}),(0,d.jsx)(y,{name:`channels[0].id`,description:e(`chatJoin.demo.field.channelId`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:c,onChange:e=>b(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`channels[0].name`,description:e(`chatJoin.demo.field.channelName`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:x,onChange:e=>S(e.target.value)})}),(0,d.jsx)(y,{name:`node_url`,description:e(`chatJoin.demo.field.nodeUrl`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:L,onChange:e=>R(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`node_invite`,description:e(`chatJoin.demo.field.nodeInvite`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:z,onChange:e=>B(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`logo`,description:e(`chatJoin.demo.field.logo`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:k,onChange:e=>A(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`logo_dark`,description:e(`chatJoin.demo.field.logoDark`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:j,onChange:e=>M(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`avatar`,description:e(`chatJoin.demo.field.avatar`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:N,onChange:e=>P(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsxs)(`div`,{className:`chat-join-demo-field`,children:[(0,d.jsx)(v,{name:`theme`,description:e(`chatJoin.demo.field.theme`)}),(0,d.jsxs)(`label`,{className:`chat-join-demo-toggle`,children:[(0,d.jsx)(`input`,{type:`radio`,name:`chat-join-demo-theme`,value:`sparkbit`,checked:T===`sparkbit`,onClick:()=>E(T===`sparkbit`?void 0:`sparkbit`),readOnly:!0}),(0,d.jsx)(`span`,{children:`sparkbit`})]})]}),(0,d.jsxs)(`div`,{className:`chat-join-demo-field`,children:[(0,d.jsx)(v,{name:`appearance`,description:e(`chatJoin.demo.field.appearance`)}),(0,d.jsx)(`div`,{className:`chat-join-demo-radio-options`,children:fe.map(e=>(0,d.jsxs)(`label`,{className:`chat-join-demo-toggle`,children:[(0,d.jsx)(`input`,{type:`radio`,name:`chat-join-demo-appearance`,value:e.value,checked:D===e.value,onClick:()=>O(D===e.value?void 0:e.value),readOnly:!0}),(0,d.jsx)(`span`,{children:e.label})]},e.value))})]}),(0,d.jsx)(y,{name:`data`,description:e(`chatJoin.demo.field.data`),wide:!0,children:(0,d.jsx)(`textarea`,{className:`textarea mono`,value:F,onChange:e=>I(e.target.value),rows:3,translate:`no`})})]})]}),(0,d.jsxs)(`section`,{className:`chat-join-demo-section`,children:[(0,d.jsxs)(`div`,{className:`chat-join-helper-title`,children:[(0,d.jsx)(ne,{size:18}),(0,d.jsx)(`h3`,{children:e(`chatJoin.demo.cryptoSection`)})]}),(0,d.jsxs)(`div`,{className:`chat-join-demo-grid`,children:[(0,d.jsx)(y,{name:`recipientPublicKey`,description:e(`chatJoin.demo.field.recipientPublicKey`),wide:!0,children:(0,d.jsx)(`input`,{className:`input input-compact`,value:V,onChange:e=>ve(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`,translate:`no`})}),(0,d.jsx)(y,{name:`senderUsername`,description:e(`chatJoin.demo.field.senderUsername`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:H,onChange:e=>ye(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`senderPassword`,description:e(`chatJoin.demo.field.senderPassword`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:U,onChange:e=>be(e.target.value),type:`password`})}),(0,d.jsxs)(`div`,{className:`chat-join-demo-actions`,children:[(0,d.jsxs)(`button`,{className:`btn btn-secondary`,type:`button`,onClick:je,children:[(0,d.jsx)(ae,{size:16}),e(`chatJoin.demo.action.deriveSender`)]}),(0,d.jsxs)(`button`,{className:`btn btn-primary`,type:`button`,onClick:Pe,children:[(0,d.jsx)(l,{size:16}),e(`chatJoin.demo.action.generate`)]})]}),(0,d.jsx)(y,{name:`pub`,description:e(`chatJoin.demo.field.senderPublicKey`),wide:!0,children:(0,d.jsx)(`input`,{className:`input input-compact`,value:W.publicKey,readOnly:!0,translate:`no`})})]}),Z&&(0,d.jsx)(`p`,{className:`chat-join-demo-error`,children:Z})]}),(0,d.jsxs)(`section`,{className:`chat-join-demo-section`,children:[(0,d.jsxs)(`div`,{className:`chat-join-helper-title`,children:[(0,d.jsx)(l,{size:18}),(0,d.jsx)(`h3`,{children:e(`chatJoin.demo.outputSection`)})]}),(0,d.jsx)(y,{name:`payload`,description:e(`chatJoin.demo.field.payload`),wide:!0,children:(0,d.jsx)(`textarea`,{className:`textarea mono`,value:$,readOnly:!0,rows:9,translate:`no`})}),(0,d.jsx)(y,{name:`token`,description:e(`chatJoin.demo.field.token`),wide:!0,children:(0,d.jsx)(`textarea`,{className:`textarea mono`,value:Oe,readOnly:!0,rows:4,translate:`no`})}),(0,d.jsx)(y,{name:`pub`,description:e(`chatJoin.demo.field.pub`),wide:!0,children:(0,d.jsx)(`input`,{className:`input input-compact`,value:ke,readOnly:!0,translate:`no`})}),(0,d.jsx)(y,{name:`link`,description:e(`chatJoin.demo.field.link`),wide:!0,children:(0,d.jsx)(`textarea`,{className:`textarea mono`,value:Y,readOnly:!0,rows:4,translate:`no`})}),(0,d.jsxs)(`div`,{className:`chat-join-demo-actions`,children:[(0,d.jsx)(re,{className:`btn btn-secondary`,text:Y,label:e(`common.copy`)}),(0,d.jsxs)(`a`,{className:`btn btn-primary`,href:Y||void 0,target:`_blank`,rel:`noreferrer`,"aria-disabled":!Y,children:[(0,d.jsx)(te,{size:16}),e(`chatJoin.demo.action.openLink`)]})]})]})]})})})}var x=o(`/chat/join/demo/`)({component:b});export{x as Route};
1
+ import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{A as r,B as i,F as a,H as o,O as s}from"./useAppStore-Pjif7nCR.js";import{a as ee}from"./i18n-DKsg67mH.js";import{t as te}from"./external-link-LcGMVTLE.js";import{n as ne,t as re}from"./CopyButton-BfQ-TOoR.js";import{t as ie}from"./AppShell-BN1uaxn1.js";import{t as ae}from"./refresh-cw-Bxmcm8cn.js";import{b as oe}from"./index-CCU5Z4K-.js";import{t as se}from"./AppTop-iPNi3cv5.js";import{n as ce,r as le,t as c}from"./chatJoinInvite-7tuD-STm.js";var l=i(`link`,[[`path`,{d:`M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71`,key:`1cjeqo`}],[`path`,{d:`M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71`,key:`19qd67`}]]),u=t(e(),1),d=n(),f=`chat-join-demo`,p=``,m=`chatjoin_support`,ue=/^[a-zA-Z0-9_-]{3,30}$/,h=/^0x[a-fA-F0-9]{64}$/,de=c,fe=[{value:`dark`,label:`dark`},{value:`light`,label:`light`}],pe=[{value:`zh-CN`,label:`zh-CN`},{value:`zh-TW`,label:`zh-TW`},{value:`en`,label:`en`}];function g(){return typeof window>`u`?`https://most.box`:window.location.origin}function me(e){return(e.trim()||g()).replace(/\/+$/,``)}function he(e,t){let n=s(a(e.trim()||f,t).danger);return{publicKey:n.public_key,privateKey:n.private_key}}function _(e){return e.trim()||void 0}function ge(e){try{return JSON.parse(e)}catch{return null}}function _e(e){let t=e.trim();if(!t)return null;let n,r;try{let e=new URL(t,g());n=e.searchParams,r=e.origin}catch{n=new URLSearchParams(t.replace(/^\?/,``))}let i=n.get(`token`)?.trim()||``,a=n.get(`pub`)?.trim()||``;return!i||!a?null:{token:i,pub:a,origin:r}}function v({name:e,description:t}){return(0,d.jsxs)(`span`,{className:`chat-join-demo-label`,children:[(0,d.jsx)(`span`,{className:`chat-join-demo-label-key`,children:e}),(0,d.jsx)(`span`,{className:`chat-join-demo-label-desc`,children:t})]})}function y({name:e,description:t,children:n,wide:r=!1}){return(0,d.jsxs)(`label`,{className:`chat-join-demo-field ${r?`wide`:``}`,children:[(0,d.jsx)(v,{name:e,description:t}),n]})}function b(){let{t:e}=ee(),[t,n]=(0,u.useState)(g),[i,a]=(0,u.useState)(`demo-user`),[o,s]=(0,u.useState)(`Demo User`),[c,b]=(0,u.useState)(m),[x,S]=(0,u.useState)(`Chat Join Demo`),[C,w]=(0,u.useState)(`zh-CN`),[T,E]=(0,u.useState)(`sparkbit`),[D,O]=(0,u.useState)(),[k,A]=(0,u.useState)(``),[j,M]=(0,u.useState)(``),[N,P]=(0,u.useState)(``),[F,I]=(0,u.useState)(``),[L,R]=(0,u.useState)(``),[z,B]=(0,u.useState)(``),[V,ve]=(0,u.useState)(ce),[H,ye]=(0,u.useState)(f),[U,be]=(0,u.useState)(p),[W,xe]=(0,u.useState)(()=>he(f,p)),[Se,Ce]=(0,u.useState)(``),[we,G]=(0,u.useState)(``),[Te,K]=(0,u.useState)(``),[Ee,De]=(0,u.useState)(!1),[Oe,q]=(0,u.useState)(``),[ke,J]=(0,u.useState)(``),[Y,X]=(0,u.useState)(``),[Z,Q]=(0,u.useState)(``),Ae=(0,u.useMemo)(()=>{let e={uid:i.trim(),locale:C,channels:[{id:c.trim(),name:_(x)}]};return T&&(e.theme=T),D&&(e.appearance=D),e.node_url=_(L),e.node_invite=_(z),e.logo=_(k),e.logo_dark=_(j),e.data=_(F),e.avatar=_(N),e.name=_(o),e},[D,N,c,x,F,o,C,k,j,z,L,T,i]),$=(0,u.useMemo)(()=>JSON.stringify(Ae,null,2),[Ae]);function je(){xe(he(H,U)),q(``),J(``),X(``),Q(``)}function Me(e){let t=e.channels[0];a(e.uid),w(e.locale||`zh-CN`),E(e.theme),O(e.appearance),R(e.node_url||``),B(e.node_invite||``),A(e.logo||``),M(e.logo_dark||``),I(e.data||``),P(e.avatar||``),s(e.name||``),b(t?.id||m),S(t?.name||``)}async function Ne(){let r=_e(Se);if(!r){G(``),K(e(`chatJoin.demo.error.linkInvalid`));return}let i=r.origin||me(t),a=`${i}/chat/join?token=${encodeURIComponent(r.token)}&pub=${encodeURIComponent(r.pub)}`;n(i),q(r.token),J(r.pub),X(a),G(e(`chatJoin.demo.status.linkParsed`)),K(``),De(!0);try{let t=await fetch(`${de}/api/chat.join.decrypt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({token:r.token,pub:r.pub})}),n=await t.text(),i=ge(n);if(!t.ok){let t=i&&typeof i==`object`&&`error`in i&&typeof i.error==`string`?i.error:n;throw Error(t||e(`chatJoin.error.decrypt`))}let a=le(i);if(!a){K(e(`chatJoin.demo.error.parseInvalidPayload`)),G(e(`chatJoin.demo.status.linkParsed`));return}Me(a),G(e(`chatJoin.demo.status.linkDecrypted`)),K(``)}catch(t){K(e(`chatJoin.demo.error.parseDecryptFailed`,{message:t instanceof Error?t.message:String(t)}))}finally{De(!1)}}function Pe(){let n=i.trim(),a=c.trim(),o=V.trim();if(!n){Q(e(`chatJoin.demo.error.uidRequired`));return}if(!ue.test(a)){Q(e(`chatJoin.demo.error.channelInvalid`));return}if(!h.test(o)){Q(e(`chatJoin.demo.error.recipientPublicInvalid`));return}if(!h.test(W.publicKey)||!h.test(W.privateKey)){Q(e(`chatJoin.demo.error.senderKeysInvalid`));return}try{let e=r($,{senderPrivateKey:W.privateKey,recipientPublicKey:o}),n=W.publicKey,i=`${me(t)}/chat/join?token=${encodeURIComponent(e)}&pub=${encodeURIComponent(n)}`;q(e),J(n),X(i),Q(``)}catch{Q(e(`chatJoin.demo.error.encryptFailed`))}}return(0,d.jsx)(ie,{sidebar:()=>(0,d.jsx)(se,{}),headerTitle:(0,d.jsx)(`h2`,{className:`header-title`,children:e(`chatJoin.demo.title`)}),children:(0,d.jsx)(`div`,{className:`chat-join-container`,children:(0,d.jsxs)(`div`,{className:`chat-join-demo-panel`,children:[(0,d.jsxs)(`section`,{className:`chat-join-demo-section`,children:[(0,d.jsxs)(`div`,{className:`chat-join-helper-title`,children:[(0,d.jsx)(l,{size:18}),(0,d.jsx)(`h3`,{children:e(`chatJoin.demo.parseSection`)})]}),(0,d.jsx)(y,{name:`link`,description:e(`chatJoin.demo.field.existingLink`),wide:!0,children:(0,d.jsx)(`textarea`,{className:`textarea mono`,value:Se,onChange:e=>Ce(e.target.value),rows:4,translate:`no`})}),(0,d.jsx)(`div`,{className:`chat-join-demo-actions`,children:(0,d.jsxs)(`button`,{className:`btn btn-secondary`,type:`button`,onClick:Ne,disabled:Ee,children:[(0,d.jsx)(l,{size:16}),e(Ee?`chatJoin.demo.action.parsing`:`chatJoin.demo.action.parseLink`)]})}),we&&(0,d.jsx)(`p`,{className:`chat-join-demo-success`,children:we}),Te&&(0,d.jsx)(`p`,{className:`chat-join-demo-error`,children:Te})]}),(0,d.jsxs)(`section`,{className:`chat-join-demo-section`,children:[(0,d.jsxs)(`div`,{className:`chat-join-helper-title`,children:[(0,d.jsx)(l,{size:18}),(0,d.jsx)(`h3`,{children:e(`chatJoin.demo.inviteSection`)})]}),(0,d.jsxs)(`div`,{className:`chat-join-demo-grid`,children:[(0,d.jsx)(y,{name:`origin`,description:e(`chatJoin.demo.field.origin`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:t,onChange:e=>n(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`uid`,description:e(`chatJoin.demo.field.uid`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:i,onChange:e=>a(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`name`,description:e(`chatJoin.demo.field.name`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:o,onChange:e=>s(e.target.value)})}),(0,d.jsx)(y,{name:`locale`,description:e(`chatJoin.demo.field.locale`),children:(0,d.jsx)(oe,{ariaLabel:e(`chatJoin.demo.field.locale`),value:C,options:pe,onChange:w,size:`compact`})}),(0,d.jsx)(y,{name:`channels[0].id`,description:e(`chatJoin.demo.field.channelId`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:c,onChange:e=>b(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`channels[0].name`,description:e(`chatJoin.demo.field.channelName`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:x,onChange:e=>S(e.target.value)})}),(0,d.jsx)(y,{name:`node_url`,description:e(`chatJoin.demo.field.nodeUrl`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:L,onChange:e=>R(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`node_invite`,description:e(`chatJoin.demo.field.nodeInvite`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:z,onChange:e=>B(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`logo`,description:e(`chatJoin.demo.field.logo`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:k,onChange:e=>A(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`logo_dark`,description:e(`chatJoin.demo.field.logoDark`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:j,onChange:e=>M(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`avatar`,description:e(`chatJoin.demo.field.avatar`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:N,onChange:e=>P(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsxs)(`div`,{className:`chat-join-demo-field`,children:[(0,d.jsx)(v,{name:`theme`,description:e(`chatJoin.demo.field.theme`)}),(0,d.jsxs)(`label`,{className:`chat-join-demo-toggle`,children:[(0,d.jsx)(`input`,{type:`radio`,name:`chat-join-demo-theme`,value:`sparkbit`,checked:T===`sparkbit`,onClick:()=>E(T===`sparkbit`?void 0:`sparkbit`),readOnly:!0}),(0,d.jsx)(`span`,{children:`sparkbit`})]})]}),(0,d.jsxs)(`div`,{className:`chat-join-demo-field`,children:[(0,d.jsx)(v,{name:`appearance`,description:e(`chatJoin.demo.field.appearance`)}),(0,d.jsx)(`div`,{className:`chat-join-demo-radio-options`,children:fe.map(e=>(0,d.jsxs)(`label`,{className:`chat-join-demo-toggle`,children:[(0,d.jsx)(`input`,{type:`radio`,name:`chat-join-demo-appearance`,value:e.value,checked:D===e.value,onClick:()=>O(D===e.value?void 0:e.value),readOnly:!0}),(0,d.jsx)(`span`,{children:e.label})]},e.value))})]}),(0,d.jsx)(y,{name:`data`,description:e(`chatJoin.demo.field.data`),wide:!0,children:(0,d.jsx)(`textarea`,{className:`textarea mono`,value:F,onChange:e=>I(e.target.value),rows:3,translate:`no`})})]})]}),(0,d.jsxs)(`section`,{className:`chat-join-demo-section`,children:[(0,d.jsxs)(`div`,{className:`chat-join-helper-title`,children:[(0,d.jsx)(ne,{size:18}),(0,d.jsx)(`h3`,{children:e(`chatJoin.demo.cryptoSection`)})]}),(0,d.jsxs)(`div`,{className:`chat-join-demo-grid`,children:[(0,d.jsx)(y,{name:`recipientPublicKey`,description:e(`chatJoin.demo.field.recipientPublicKey`),wide:!0,children:(0,d.jsx)(`input`,{className:`input input-compact`,value:V,onChange:e=>ve(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`,translate:`no`})}),(0,d.jsx)(y,{name:`senderUsername`,description:e(`chatJoin.demo.field.senderUsername`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:H,onChange:e=>ye(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:`false`})}),(0,d.jsx)(y,{name:`senderPassword`,description:e(`chatJoin.demo.field.senderPassword`),children:(0,d.jsx)(`input`,{className:`input input-compact`,value:U,onChange:e=>be(e.target.value),type:`password`})}),(0,d.jsxs)(`div`,{className:`chat-join-demo-actions`,children:[(0,d.jsxs)(`button`,{className:`btn btn-secondary`,type:`button`,onClick:je,children:[(0,d.jsx)(ae,{size:16}),e(`chatJoin.demo.action.deriveSender`)]}),(0,d.jsxs)(`button`,{className:`btn btn-primary`,type:`button`,onClick:Pe,children:[(0,d.jsx)(l,{size:16}),e(`chatJoin.demo.action.generate`)]})]}),(0,d.jsx)(y,{name:`pub`,description:e(`chatJoin.demo.field.senderPublicKey`),wide:!0,children:(0,d.jsx)(`input`,{className:`input input-compact`,value:W.publicKey,readOnly:!0,translate:`no`})})]}),Z&&(0,d.jsx)(`p`,{className:`chat-join-demo-error`,children:Z})]}),(0,d.jsxs)(`section`,{className:`chat-join-demo-section`,children:[(0,d.jsxs)(`div`,{className:`chat-join-helper-title`,children:[(0,d.jsx)(l,{size:18}),(0,d.jsx)(`h3`,{children:e(`chatJoin.demo.outputSection`)})]}),(0,d.jsx)(y,{name:`payload`,description:e(`chatJoin.demo.field.payload`),wide:!0,children:(0,d.jsx)(`textarea`,{className:`textarea mono`,value:$,readOnly:!0,rows:9,translate:`no`})}),(0,d.jsx)(y,{name:`token`,description:e(`chatJoin.demo.field.token`),wide:!0,children:(0,d.jsx)(`textarea`,{className:`textarea mono`,value:Oe,readOnly:!0,rows:4,translate:`no`})}),(0,d.jsx)(y,{name:`pub`,description:e(`chatJoin.demo.field.pub`),wide:!0,children:(0,d.jsx)(`input`,{className:`input input-compact`,value:ke,readOnly:!0,translate:`no`})}),(0,d.jsx)(y,{name:`link`,description:e(`chatJoin.demo.field.link`),wide:!0,children:(0,d.jsx)(`textarea`,{className:`textarea mono`,value:Y,readOnly:!0,rows:4,translate:`no`})}),(0,d.jsxs)(`div`,{className:`chat-join-demo-actions`,children:[(0,d.jsx)(re,{className:`btn btn-secondary`,text:Y,label:e(`common.copy`)}),(0,d.jsxs)(`a`,{className:`btn btn-primary`,href:Y||void 0,target:`_blank`,rel:`noreferrer`,"aria-disabled":!Y,children:[(0,d.jsx)(te,{size:16}),e(`chatJoin.demo.action.openLink`)]})]})]})]})})})}var x=o(`/chat/join/demo/`)({component:b});export{x as Route};
@@ -1 +1 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r,E as i,G as a,H as o,W as s,o as ee,t as c,u as te}from"./useAppStore-DNhyhD20.js";import{a as l}from"./i18n-DKsg67mH.js";import{t as u}from"./triangle-alert-BhNtjKm2.js";import{t as d}from"./download-Cy2BlfKM.js";import{t as ne}from"./external-link-D_AQSgxW.js";import{t as re}from"./file-text-zvTER2mN.js";import{t as f}from"./hard-drive-DL1KJHmG.js";import{t as p}from"./refresh-cw-CfkUlTK9.js";import{I as m,L as h}from"./index-DJzLHA0V.js";import{t as ie}from"./MarketingHeader-ChTIIzXG.js";import{t as g}from"./format-CAKfypjK.js";import{n as _,r as ae,s as oe,t as v}from"./downloadValidation-Dd43i9_9.js";var se=r(`circle-x`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]),y=r(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),b=r(`log-in`,[[`path`,{d:`m10 17 5-5-5-5`,key:`1bsop3`}],[`path`,{d:`M15 12H3`,key:`6jk70r`}],[`path`,{d:`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,key:`u53s6r`}]]),x=r(`wifi-off`,[[`path`,{d:`M12 20h.01`,key:`zekei9`}],[`path`,{d:`M8.5 16.429a5 5 0 0 1 7 0`,key:`1bycff`}],[`path`,{d:`M5 12.859a10 10 0 0 1 5.17-2.69`,key:`1dl1wf`}],[`path`,{d:`M19 12.859a10 10 0 0 0-2.007-1.523`,key:`4k23kn`}],[`path`,{d:`M2 8.82a15 15 0 0 1 4.177-2.643`,key:`1grhjp`}],[`path`,{d:`M22 8.82a15 15 0 0 0-11.288-3.764`,key:`z3jwby`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),S=t(e(),1),C=n(),ce=1800;function w(e,t){return`most://${e}${t||``}`}function le(e,t){let n=e.trim().replace(/[\\/]+$/,``);return n?`${n}${n.includes(`\\`)?`\\`:`/`}downloads`:t}function T(e,t){let n=e[t];return typeof n==`string`?n:void 0}function E(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function D(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!=`object`)return null;let n=t,r=T(n,`event`),i=n.data;if(!r||!i||typeof i!=`object`)return null;let a=i;return{event:r,payload:{taskId:T(a,`taskId`),percent:E(a,`percent`),loaded:E(a,`loaded`),total:E(a,`total`),file:T(a,`file`),fileName:T(a,`fileName`),error:T(a,`error`)}}}function O(){let{t:e}=l(),{cid:t}=a({from:`/cid/$cid/`}),n=h({select:e=>e.searchStr}),r=c(e=>e.hasBackend),o=c(e=>e.addToast),m=c(e=>e.openConnectModal),T=i(e=>e.identity),E=i(e=>e.openLoginModal),O=(0,S.useMemo)(()=>w(t,n),[t,n]),k=(0,S.useMemo)(()=>oe(O),[O]),A=(0,S.useMemo)(()=>v(O,e),[O,e]),fe=k.fileName||t,[j,M]=(0,S.useState)({status:`idle`,message:``}),[N,P]=(0,S.useState)(null),[F,I]=(0,S.useState)({status:`idle`,message:``}),[L,R]=(0,S.useState)(``),[z,B]=(0,S.useState)(0),[V,H]=(0,S.useState)(null),[U,W]=(0,S.useState)(null),[pe,G]=(0,S.useState)(``),[me,K]=(0,S.useState)(!1),q=(0,S.useRef)(0),J=(0,S.useRef)(null),Y=N?.fileName||fe,X=N?.size??U,Z=j.status===`available`||j.status===`already-local`,Q=F.status===`starting`||F.status===`downloading`,he=le(pe,e(`cid.saveToFallback`)),$=(0,S.useCallback)(async()=>{let t=q.current+1;if(q.current=t,R(``),B(0),H(null),W(null),I({status:`idle`,message:``}),A){P(null),M({status:`error`,message:A});return}if(r===null){P(null),M({status:`waiting-backend`,message:e(`cid.status.waitingBackend`)});return}if(r!==!0){P(null),M({status:`backend-missing`,message:e(`cid.status.backendMissing`)});return}if(!T){P(null),M({status:`login-required`,message:e(`cid.status.loginRequired`)});return}M({status:`checking`,message:e(`cid.status.checking`)}),P(null);try{let n=await _.checkDownload(O);if(q.current!==t)return;P(n),M({status:n.alreadyExists?`already-local`:`available`,message:n.alreadyExists?e(`cid.status.alreadyLocal`,{fileName:n.fileName}):e(`cid.status.available`,{fileName:n.fileName})})}catch(e){if(q.current!==t)return;M({status:`error`,message:await ae(e)}),P(null)}},[r,O,e,T,A]);(0,S.useEffect)(()=>{document.title=e(`cid.meta.title`)},[e]),(0,S.useEffect)(()=>{let e=()=>{J.current!==null&&(window.clearTimeout(J.current),J.current=null)},t=()=>{document.visibilityState===`hidden`&&(e(),K(!1))};return document.addEventListener(`visibilitychange`,t),window.addEventListener(`pagehide`,t),()=>{e(),document.removeEventListener(`visibilitychange`,t),window.removeEventListener(`pagehide`,t)}},[]),(0,S.useEffect)(()=>{$()},[$]),(0,S.useEffect)(()=>{if(r!==!0)return;let e=!1;return _.getDataPath().then(t=>{e||G(t.dataPath)}).catch(()=>{e||G(``)}),()=>{e=!0}},[r]),(0,S.useEffect)(()=>{if(!L||!T)return;let t=null,n=!1;return(async()=>{if(t=new WebSocket(await te(`/ws`)),n){t.close();return}t.onmessage=t=>{let n=D(t.data);!n||n.payload.taskId!==L||(n.event===`download:progress`&&(B(n.payload.percent||0),H(n.payload.loaded??null),W(n.payload.total??null)),n.event===`download:status`&&I({status:`downloading`,message:n.payload.file?e(`cid.status.downloadingFile`,{fileName:n.payload.file}):e(`cid.status.downloading`)}),n.event===`download:success`&&(B(100),I({status:`completed`,message:e(`cid.status.downloadComplete`,{fileName:n.payload.fileName||Y})}),o(e(`cid.toast.downloadComplete`),`success`)),n.event===`download:error`&&(I({status:`error`,message:n.payload.error||e(`cid.status.downloadFailed`,{error:``})}),o(e(`cid.toast.downloadFailed`,{error:n.payload.error||e(`cid.errorFallback`)}),`error`)),n.event===`download:cancelled`&&(I({status:`cancelled`,message:e(`cid.status.cancelled`)}),o(e(`cid.toast.cancelled`),`warning`)))}})(),()=>{n=!0,t?.close()}},[o,Y,e,L,T]);let ge=async()=>{if(!T){E();return}if(r!==!0){m();return}if(!(!Z||Q)){I({status:`starting`,message:e(`cid.status.startingDownload`)}),B(0);try{let t=await _.downloadFile(O);if(t.alreadyExists){I({status:`completed`,message:e(`cid.status.alreadyLocal`,{fileName:t.fileName||Y})}),o(e(`cid.toast.alreadyLocal`),`warning`);return}t.taskId&&(R(t.taskId),I({status:`downloading`,message:e(`cid.status.downloading`)}),o(e(`cid.toast.downloadStarted`),`info`))}catch(t){let n=await ee(t,e(`cid.status.downloadFailed`,{error:e(`cid.errorFallback`)}));I({status:`error`,message:n}),o(n,`error`)}}},_e=()=>{K(!1),J.current!==null&&window.clearTimeout(J.current),J.current=window.setTimeout(()=>{J.current=null,document.visibilityState!==`hidden`&&K(!0)},ce)},ve=async()=>{L&&await _.cancelDownload(L).catch(()=>{})},ye=ue(j.status,F.status);return(0,C.jsxs)(`div`,{className:`cid-layout`,children:[(0,C.jsx)(ie,{}),(0,C.jsx)(`main`,{className:`cid-page`,children:(0,C.jsxs)(`section`,{className:`cid-shell`,children:[(0,C.jsxs)(`div`,{className:`cid-heading`,children:[(0,C.jsx)(`span`,{className:`cid-kicker`,children:e(`cid.kicker`)}),(0,C.jsx)(`h1`,{children:e(`cid.title`)}),(0,C.jsx)(`p`,{children:e(`cid.subtitle`)})]}),(0,C.jsxs)(`div`,{className:`cid-panel`,children:[(0,C.jsxs)(`div`,{className:`cid-handoff`,"aria-label":e(`cid.handoff.title`),children:[(0,C.jsxs)(`div`,{className:`cid-handoff-copy`,children:[(0,C.jsx)(`p`,{className:`cid-handoff-title`,children:e(`cid.handoff.title`)}),(0,C.jsx)(`p`,{children:e(`cid.handoff.desc`)})]}),(0,C.jsxs)(`a`,{className:`btn btn-primary`,href:O,onClick:_e,children:[(0,C.jsx)(ne,{size:16}),e(`cid.handoff.action`)]})]}),me&&(0,C.jsxs)(`div`,{className:`cid-handoff-fallback`,role:`status`,children:[(0,C.jsx)(u,{size:18}),(0,C.jsx)(`p`,{children:e(`cid.handoff.fallback`)}),(0,C.jsxs)(s,{to:`/download/`,className:`btn btn-secondary`,children:[(0,C.jsx)(d,{size:16}),e(`cid.handoff.downloadAction`)]})]}),(0,C.jsxs)(`div`,{className:`cid-status`,children:[(0,C.jsx)(`span`,{className:`cid-status-icon ${j.status}`,children:ye}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`p`,{className:`cid-status-label`,children:de(j.status,e)}),(0,C.jsx)(`p`,{className:`cid-status-message`,children:j.message})]})]}),(0,C.jsxs)(`dl`,{className:`cid-details`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsxs)(`dt`,{children:[(0,C.jsx)(re,{size:16}),e(`cid.fileNameLabel`)]}),(0,C.jsx)(`dd`,{children:Y})]}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`dt`,{children:e(`cid.cidLabel`)}),(0,C.jsx)(`dd`,{className:`cid-mono`,children:t})]}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`dt`,{children:e(`cid.sizeLabel`)}),(0,C.jsx)(`dd`,{children:X?g(X):e(`cid.unknownSize`)})]}),(0,C.jsxs)(`div`,{children:[(0,C.jsxs)(`dt`,{children:[(0,C.jsx)(f,{size:16}),e(`cid.saveToLabel`)]}),(0,C.jsx)(`dd`,{children:he})]})]}),F.status!==`idle`&&(0,C.jsxs)(`div`,{className:`cid-download-state ${F.status}`,children:[(0,C.jsx)(`p`,{children:F.message}),(F.status===`starting`||F.status===`downloading`)&&(0,C.jsxs)(`div`,{className:`cid-progress`,children:[(0,C.jsx)(`progress`,{className:`cid-progress-bar`,value:z,max:100}),(0,C.jsx)(`span`,{children:V!==null&&U!==null?`${g(V)} / ${g(U)}`:`${z}%`})]})]}),(0,C.jsxs)(`div`,{className:`cid-actions`,children:[j.status===`login-required`&&(0,C.jsxs)(`button`,{className:`btn btn-primary`,onClick:E,children:[(0,C.jsx)(b,{size:16}),e(`cid.loginAction`)]}),j.status===`backend-missing`&&(0,C.jsxs)(`button`,{className:`btn btn-primary`,onClick:m,children:[(0,C.jsx)(x,{size:16}),e(`cid.connectAction`)]}),(0,C.jsxs)(`button`,{className:`btn btn-primary`,disabled:!Z||Q,onClick:ge,children:[Q?(0,C.jsx)(y,{className:`cid-spin-icon`,size:16}):(0,C.jsx)(d,{size:16}),e(Q?`cid.downloadingAction`:`cid.startAction`)]}),L&&F.status===`downloading`&&(0,C.jsxs)(`button`,{className:`btn btn-secondary`,onClick:ve,children:[(0,C.jsx)(se,{size:16}),e(`cid.cancelAction`)]}),(0,C.jsxs)(`button`,{className:`btn btn-secondary`,disabled:j.status===`checking`,onClick:$,children:[(0,C.jsx)(p,{size:16}),e(`cid.retryAction`)]}),(0,C.jsx)(s,{to:`/app/`,className:`btn btn-secondary`,children:e(`cid.openAppAction`)})]})]})]})})]})}function ue(e,t){return t===`completed`?(0,C.jsx)(m,{size:28}):t===`error`||e===`error`?(0,C.jsx)(u,{size:28}):e===`checking`||e===`waiting-backend`||t===`starting`||t===`downloading`?(0,C.jsx)(y,{size:28}):e===`backend-missing`?(0,C.jsx)(x,{size:28}):e===`login-required`?(0,C.jsx)(b,{size:28}):(0,C.jsx)(m,{size:28})}function de(e,t){switch(e){case`checking`:return t(`cid.label.checking`);case`available`:return t(`cid.label.available`);case`already-local`:return t(`cid.label.alreadyLocal`);case`login-required`:return t(`cid.label.loginRequired`);case`backend-missing`:return t(`cid.label.backendMissing`);case`waiting-backend`:return t(`cid.label.waitingBackend`);case`error`:return t(`cid.label.error`);default:return t(`cid.label.idle`)}}var k=o(`/cid/$cid/`)({component:O});export{k as Route};
1
+ import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r,E as i,G as a,H as o,W as s,o as ee,t as c,u as te}from"./useAppStore-Pjif7nCR.js";import{a as l}from"./i18n-DKsg67mH.js";import{t as u}from"./triangle-alert-D8P4Ikwc.js";import{t as d}from"./download-nQ9X-v0q.js";import{t as ne}from"./external-link-LcGMVTLE.js";import{t as re}from"./file-text-f1ij7Al1.js";import{t as f}from"./hard-drive-CMNAmPI5.js";import{t as p}from"./refresh-cw-Bxmcm8cn.js";import{I as m,L as h}from"./index-CCU5Z4K-.js";import{t as ie}from"./MarketingHeader-Bh6LcQOj.js";import{t as g}from"./format-CAKfypjK.js";import{n as _,r as ae,s as oe,t as v}from"./downloadValidation-C0PecvKC.js";var se=r(`circle-x`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]),y=r(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),b=r(`log-in`,[[`path`,{d:`m10 17 5-5-5-5`,key:`1bsop3`}],[`path`,{d:`M15 12H3`,key:`6jk70r`}],[`path`,{d:`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,key:`u53s6r`}]]),x=r(`wifi-off`,[[`path`,{d:`M12 20h.01`,key:`zekei9`}],[`path`,{d:`M8.5 16.429a5 5 0 0 1 7 0`,key:`1bycff`}],[`path`,{d:`M5 12.859a10 10 0 0 1 5.17-2.69`,key:`1dl1wf`}],[`path`,{d:`M19 12.859a10 10 0 0 0-2.007-1.523`,key:`4k23kn`}],[`path`,{d:`M2 8.82a15 15 0 0 1 4.177-2.643`,key:`1grhjp`}],[`path`,{d:`M22 8.82a15 15 0 0 0-11.288-3.764`,key:`z3jwby`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),S=t(e(),1),C=n(),ce=1800;function w(e,t){return`most://${e}${t||``}`}function le(e,t){let n=e.trim().replace(/[\\/]+$/,``);return n?`${n}${n.includes(`\\`)?`\\`:`/`}downloads`:t}function T(e,t){let n=e[t];return typeof n==`string`?n:void 0}function E(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function D(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!=`object`)return null;let n=t,r=T(n,`event`),i=n.data;if(!r||!i||typeof i!=`object`)return null;let a=i;return{event:r,payload:{taskId:T(a,`taskId`),percent:E(a,`percent`),loaded:E(a,`loaded`),total:E(a,`total`),file:T(a,`file`),fileName:T(a,`fileName`),error:T(a,`error`)}}}function O(){let{t:e}=l(),{cid:t}=a({from:`/cid/$cid/`}),n=h({select:e=>e.searchStr}),r=c(e=>e.hasBackend),o=c(e=>e.addToast),m=c(e=>e.openConnectModal),T=i(e=>e.identity),E=i(e=>e.openLoginModal),O=(0,S.useMemo)(()=>w(t,n),[t,n]),k=(0,S.useMemo)(()=>oe(O),[O]),A=(0,S.useMemo)(()=>v(O,e),[O,e]),fe=k.fileName||t,[j,M]=(0,S.useState)({status:`idle`,message:``}),[N,P]=(0,S.useState)(null),[F,I]=(0,S.useState)({status:`idle`,message:``}),[L,R]=(0,S.useState)(``),[z,B]=(0,S.useState)(0),[V,H]=(0,S.useState)(null),[U,W]=(0,S.useState)(null),[pe,G]=(0,S.useState)(``),[me,K]=(0,S.useState)(!1),q=(0,S.useRef)(0),J=(0,S.useRef)(null),Y=N?.fileName||fe,X=N?.size??U,Z=j.status===`available`||j.status===`already-local`,Q=F.status===`starting`||F.status===`downloading`,he=le(pe,e(`cid.saveToFallback`)),$=(0,S.useCallback)(async()=>{let t=q.current+1;if(q.current=t,R(``),B(0),H(null),W(null),I({status:`idle`,message:``}),A){P(null),M({status:`error`,message:A});return}if(r===null){P(null),M({status:`waiting-backend`,message:e(`cid.status.waitingBackend`)});return}if(r!==!0){P(null),M({status:`backend-missing`,message:e(`cid.status.backendMissing`)});return}if(!T){P(null),M({status:`login-required`,message:e(`cid.status.loginRequired`)});return}M({status:`checking`,message:e(`cid.status.checking`)}),P(null);try{let n=await _.checkDownload(O);if(q.current!==t)return;P(n),M({status:n.alreadyExists?`already-local`:`available`,message:n.alreadyExists?e(`cid.status.alreadyLocal`,{fileName:n.fileName}):e(`cid.status.available`,{fileName:n.fileName})})}catch(e){if(q.current!==t)return;M({status:`error`,message:await ae(e)}),P(null)}},[r,O,e,T,A]);(0,S.useEffect)(()=>{document.title=e(`cid.meta.title`)},[e]),(0,S.useEffect)(()=>{let e=()=>{J.current!==null&&(window.clearTimeout(J.current),J.current=null)},t=()=>{document.visibilityState===`hidden`&&(e(),K(!1))};return document.addEventListener(`visibilitychange`,t),window.addEventListener(`pagehide`,t),()=>{e(),document.removeEventListener(`visibilitychange`,t),window.removeEventListener(`pagehide`,t)}},[]),(0,S.useEffect)(()=>{$()},[$]),(0,S.useEffect)(()=>{if(r!==!0)return;let e=!1;return _.getDataPath().then(t=>{e||G(t.dataPath)}).catch(()=>{e||G(``)}),()=>{e=!0}},[r]),(0,S.useEffect)(()=>{if(!L||!T)return;let t=null,n=!1;return(async()=>{if(t=new WebSocket(await te(`/ws`)),n){t.close();return}t.onmessage=t=>{let n=D(t.data);!n||n.payload.taskId!==L||(n.event===`download:progress`&&(B(n.payload.percent||0),H(n.payload.loaded??null),W(n.payload.total??null)),n.event===`download:status`&&I({status:`downloading`,message:n.payload.file?e(`cid.status.downloadingFile`,{fileName:n.payload.file}):e(`cid.status.downloading`)}),n.event===`download:success`&&(B(100),I({status:`completed`,message:e(`cid.status.downloadComplete`,{fileName:n.payload.fileName||Y})}),o(e(`cid.toast.downloadComplete`),`success`)),n.event===`download:error`&&(I({status:`error`,message:n.payload.error||e(`cid.status.downloadFailed`,{error:``})}),o(e(`cid.toast.downloadFailed`,{error:n.payload.error||e(`cid.errorFallback`)}),`error`)),n.event===`download:cancelled`&&(I({status:`cancelled`,message:e(`cid.status.cancelled`)}),o(e(`cid.toast.cancelled`),`warning`)))}})(),()=>{n=!0,t?.close()}},[o,Y,e,L,T]);let ge=async()=>{if(!T){E();return}if(r!==!0){m();return}if(!(!Z||Q)){I({status:`starting`,message:e(`cid.status.startingDownload`)}),B(0);try{let t=await _.downloadFile(O);if(t.alreadyExists){I({status:`completed`,message:e(`cid.status.alreadyLocal`,{fileName:t.fileName||Y})}),o(e(`cid.toast.alreadyLocal`),`warning`);return}t.taskId&&(R(t.taskId),I({status:`downloading`,message:e(`cid.status.downloading`)}),o(e(`cid.toast.downloadStarted`),`info`))}catch(t){let n=await ee(t,e(`cid.status.downloadFailed`,{error:e(`cid.errorFallback`)}));I({status:`error`,message:n}),o(n,`error`)}}},_e=()=>{K(!1),J.current!==null&&window.clearTimeout(J.current),J.current=window.setTimeout(()=>{J.current=null,document.visibilityState!==`hidden`&&K(!0)},ce)},ve=async()=>{L&&await _.cancelDownload(L).catch(()=>{})},ye=ue(j.status,F.status);return(0,C.jsxs)(`div`,{className:`cid-layout`,children:[(0,C.jsx)(ie,{}),(0,C.jsx)(`main`,{className:`cid-page`,children:(0,C.jsxs)(`section`,{className:`cid-shell`,children:[(0,C.jsxs)(`div`,{className:`cid-heading`,children:[(0,C.jsx)(`span`,{className:`cid-kicker`,children:e(`cid.kicker`)}),(0,C.jsx)(`h1`,{children:e(`cid.title`)}),(0,C.jsx)(`p`,{children:e(`cid.subtitle`)})]}),(0,C.jsxs)(`div`,{className:`cid-panel`,children:[(0,C.jsxs)(`div`,{className:`cid-handoff`,"aria-label":e(`cid.handoff.title`),children:[(0,C.jsxs)(`div`,{className:`cid-handoff-copy`,children:[(0,C.jsx)(`p`,{className:`cid-handoff-title`,children:e(`cid.handoff.title`)}),(0,C.jsx)(`p`,{children:e(`cid.handoff.desc`)})]}),(0,C.jsxs)(`a`,{className:`btn btn-primary`,href:O,onClick:_e,children:[(0,C.jsx)(ne,{size:16}),e(`cid.handoff.action`)]})]}),me&&(0,C.jsxs)(`div`,{className:`cid-handoff-fallback`,role:`status`,children:[(0,C.jsx)(u,{size:18}),(0,C.jsx)(`p`,{children:e(`cid.handoff.fallback`)}),(0,C.jsxs)(s,{to:`/download/`,className:`btn btn-secondary`,children:[(0,C.jsx)(d,{size:16}),e(`cid.handoff.downloadAction`)]})]}),(0,C.jsxs)(`div`,{className:`cid-status`,children:[(0,C.jsx)(`span`,{className:`cid-status-icon ${j.status}`,children:ye}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`p`,{className:`cid-status-label`,children:de(j.status,e)}),(0,C.jsx)(`p`,{className:`cid-status-message`,children:j.message})]})]}),(0,C.jsxs)(`dl`,{className:`cid-details`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsxs)(`dt`,{children:[(0,C.jsx)(re,{size:16}),e(`cid.fileNameLabel`)]}),(0,C.jsx)(`dd`,{children:Y})]}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`dt`,{children:e(`cid.cidLabel`)}),(0,C.jsx)(`dd`,{className:`cid-mono`,children:t})]}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`dt`,{children:e(`cid.sizeLabel`)}),(0,C.jsx)(`dd`,{children:X?g(X):e(`cid.unknownSize`)})]}),(0,C.jsxs)(`div`,{children:[(0,C.jsxs)(`dt`,{children:[(0,C.jsx)(f,{size:16}),e(`cid.saveToLabel`)]}),(0,C.jsx)(`dd`,{children:he})]})]}),F.status!==`idle`&&(0,C.jsxs)(`div`,{className:`cid-download-state ${F.status}`,children:[(0,C.jsx)(`p`,{children:F.message}),(F.status===`starting`||F.status===`downloading`)&&(0,C.jsxs)(`div`,{className:`cid-progress`,children:[(0,C.jsx)(`progress`,{className:`cid-progress-bar`,value:z,max:100}),(0,C.jsx)(`span`,{children:V!==null&&U!==null?`${g(V)} / ${g(U)}`:`${z}%`})]})]}),(0,C.jsxs)(`div`,{className:`cid-actions`,children:[j.status===`login-required`&&(0,C.jsxs)(`button`,{className:`btn btn-primary`,onClick:E,children:[(0,C.jsx)(b,{size:16}),e(`cid.loginAction`)]}),j.status===`backend-missing`&&(0,C.jsxs)(`button`,{className:`btn btn-primary`,onClick:m,children:[(0,C.jsx)(x,{size:16}),e(`cid.connectAction`)]}),(0,C.jsxs)(`button`,{className:`btn btn-primary`,disabled:!Z||Q,onClick:ge,children:[Q?(0,C.jsx)(y,{className:`cid-spin-icon`,size:16}):(0,C.jsx)(d,{size:16}),e(Q?`cid.downloadingAction`:`cid.startAction`)]}),L&&F.status===`downloading`&&(0,C.jsxs)(`button`,{className:`btn btn-secondary`,onClick:ve,children:[(0,C.jsx)(se,{size:16}),e(`cid.cancelAction`)]}),(0,C.jsxs)(`button`,{className:`btn btn-secondary`,disabled:j.status===`checking`,onClick:$,children:[(0,C.jsx)(p,{size:16}),e(`cid.retryAction`)]}),(0,C.jsx)(s,{to:`/app/`,className:`btn btn-secondary`,children:e(`cid.openAppAction`)})]})]})]})})]})}function ue(e,t){return t===`completed`?(0,C.jsx)(m,{size:28}):t===`error`||e===`error`?(0,C.jsx)(u,{size:28}):e===`checking`||e===`waiting-backend`||t===`starting`||t===`downloading`?(0,C.jsx)(y,{size:28}):e===`backend-missing`?(0,C.jsx)(x,{size:28}):e===`login-required`?(0,C.jsx)(b,{size:28}):(0,C.jsx)(m,{size:28})}function de(e,t){switch(e){case`checking`:return t(`cid.label.checking`);case`available`:return t(`cid.label.available`);case`already-local`:return t(`cid.label.alreadyLocal`);case`login-required`:return t(`cid.label.loginRequired`);case`backend-missing`:return t(`cid.label.backendMissing`);case`waiting-backend`:return t(`cid.label.waitingBackend`);case`error`:return t(`cid.label.error`);default:return t(`cid.label.idle`)}}var k=o(`/cid/$cid/`)({component:O});export{k as Route};
@@ -1 +1 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{D as r,E as i,H as a,a as o,d as s,m as c,p as l,r as u,t as d}from"./useAppStore-DNhyhD20.js";import{a as f,i as p}from"./i18n-DKsg67mH.js";import{t as m}from"./circle-alert-DXVkx8p8.js";import{t as h}from"./refresh-cw-CfkUlTK9.js";import{L as g,r as _}from"./index-DJzLHA0V.js";import{t as v}from"./channelApi-C5eHetoJ.js";import{t as y}from"./ChatRestoringIndicator-CLV78gNW.js";import{r as b,t as x}from"./chatJoinInvite-7tuD-STm.js";var S=t(e(),1),C=n();function w({children:e,className:t=``}){return(0,C.jsx)(`main`,{className:t,children:e})}function T(e){return String(e||``).trim().replace(/\/+$/,``)}function E(e){return String(e||``).trim()}function D({inviteNodeUrl:e,inviteNodeInvite:t,hasBackend:n,activeBackendUrl:r,activeRemoteUrl:i,activeRemoteInvite:a}){let o=T(e),s=T(i),c=T(r);return!!o&&!!s&&n===!0&&c===s&&s===o&&E(a)===E(t)}function O(e){return!!T(e.inviteNodeUrl)&&!D(e)}var k=`data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"%3E%3Crect width="64" height="64" rx="16" fill="%232f7dd1"/%3E%3Ccircle cx="32" cy="25" r="11" fill="%23f8fbff"/%3E%3Cpath d="M14 56c3-12 12-18 18-18s15 6 18 18" fill="%23f8fbff"/%3E%3C/svg%3E`,A=`data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"%3E%3Crect width="64" height="64" rx="16" fill="%230f9f7a"/%3E%3Cpath d="M18 20h28v22H18z" rx="6" fill="%23f7fff9"/%3E%3Ccircle cx="27" cy="31" r="3" fill="%230f9f7a"/%3E%3Ccircle cx="37" cy="31" r="3" fill="%230f9f7a"/%3E%3Cpath d="M29 39h6" stroke="%230f9f7a" stroke-width="4" stroke-linecap="round"/%3E%3Cpath d="M32 12v8" stroke="%23f7fff9" stroke-width="5" stroke-linecap="round"/%3E%3C/svg%3E`,j=Object.freeze({id:`chatjoin_support`,name:`User / Service 测试频道`}),M=Object.freeze([Object.freeze({uid:`user`,theme:`sparkbit`,name:`测试用户`,avatar:k}),Object.freeze({uid:`service`,name:`测试客服`,avatar:A})]),N=Object.freeze(M.map(e=>Object.freeze({locale:`zh-CN`,uid:e.uid,theme:e.theme,avatar:e.avatar,name:e.name,channels:[j]})));function P(e){let t=String(e||``).trim();return N.find(e=>e.uid===t)||null}var F=50,I=x;function L(e){try{return JSON.parse(e)}catch{return null}}function R(e,t,n){if(t&&typeof t==`object`&&`error`in t){let e=t.error;if(typeof e==`string`)return e}return e||n}function z(e){return`/chat?channel=${encodeURIComponent(e)}`}function B(e){return String(e||``).trim().slice(0,F)}function V(){let{t:e,setLocale:t}=f(),n=g({select:e=>e.searchStr}),{token:a,pub:x,fixture:T}=(0,S.useMemo)(()=>{let e=new URLSearchParams(n);return{token:e.get(`token`)||``,pub:e.get(`pub`)||``,fixture:e.get(`fixture`)||``}},[n]),E=d(e=>e.hasBackend),D=d(e=>e.setIsDarkMode),k=i(e=>e.setUserIdentity),[A,j]=(0,S.useState)(``),[M,N]=(0,S.useState)(!0),[F,V]=(0,S.useState)(0),H=(0,S.useRef)(``);function U(){H.current=``,j(``),N(!0),V(e=>e+1)}return(0,S.useEffect)(()=>{let n=P(T);if(T&&!n){j(e(`chatJoin.error.unknownFixture`,{fixture:T})),N(!1);return}if(!n&&!a){j(e(`chatJoin.error.missingToken`)),N(!1);return}if(!n&&!x){j(e(`chatJoin.error.missingPub`)),N(!1);return}if(E===null)return;let i=n?`fixture:${T}`:`${a}:${x}`;if(H.current===i)return;H.current=i;async function f(n){let i=(t,r)=>n.locale?p(t,n.locale,r):e(t,r);n.locale&&t(n.locale),n.appearance===`dark`&&D(!0),n.appearance===`light`&&D(!1);let a=c(),f=l(),m=s();if(O({inviteNodeUrl:n.node_url,inviteNodeInvite:n.node_invite,hasBackend:E,activeBackendUrl:m,activeRemoteUrl:a,activeRemoteInvite:f})){if(!(await u({url:n.node_url,invite:n.node_invite||``})).ok)throw Error(i(`chatJoin.error.remoteConnectFailed`));o({url:n.node_url,invite:n.node_invite||``}),d.setState({hasBackend:!0})}else if(!E)throw Error(i(`chatJoin.error.noBackend`));let h=r(n.uid,``),g={...h,theme:n.theme,displayName:n.name||h.displayName,logo:n.logo,logo_dark:n.logo_dark,data:n.data,avatar:n.avatar};k(g);let y=``;for(let e of n.channels){let t=await v.createChannel(e.id,`public`,_(g)),n=t.channelKey||t.key||e.id;y||=n;let r=B(e.name);r&&await v.setChannelRemark(n,r)}let b=n.channels[0];window.location.href=z(y||b.id)}async function m(){try{if(n){await f(n);return}let t=await fetch(`${I}/api/chat.join.decrypt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({token:a,pub:x})}),r=await t.text(),i=L(r);if(!t.ok)j(R(r,i,e(`chatJoin.error.decrypt`)));else{let t=b(i);if(!t){j(e(`chatJoin.error.invalidInvite`));return}await f(t)}}catch(t){j(e(`chatJoin.error.request`,{message:t instanceof Error?t.message:String(t)}))}finally{N(!1)}}m()},[T,E,x,F,D,t,k,e,a]),(0,C.jsx)(w,{className:`chat-join-loading-page`,children:(0,C.jsx)(`div`,{className:`chat-join-loading-panel`,children:M?(0,C.jsx)(y,{}):A?(0,C.jsxs)(`div`,{className:`chat-join-error`,children:[(0,C.jsx)(m,{size:32}),(0,C.jsx)(`p`,{children:A}),(0,C.jsx)(`div`,{className:`chat-join-actions`,children:(0,C.jsxs)(`button`,{type:`button`,className:`btn btn-primary`,onClick:U,children:[(0,C.jsx)(h,{size:16}),e(`chatJoin.action.retry`)]})})]}):(0,C.jsx)(y,{})})})}function H(){return(0,C.jsx)(S.Suspense,{children:(0,C.jsx)(V,{})})}var U=a(`/chat/join/`)({component:H});export{U as Route};
1
+ import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{D as r,E as i,H as a,a as o,d as s,m as c,p as l,r as u,t as d}from"./useAppStore-Pjif7nCR.js";import{a as f,i as p}from"./i18n-DKsg67mH.js";import{t as m}from"./circle-alert-Dg9cBJgj.js";import{t as h}from"./refresh-cw-Bxmcm8cn.js";import{L as g,r as _}from"./index-CCU5Z4K-.js";import{t as v}from"./channelApi-DA2GY-k4.js";import{t as y}from"./ChatRestoringIndicator-CLV78gNW.js";import{r as b,t as x}from"./chatJoinInvite-7tuD-STm.js";var S=t(e(),1),C=n();function w({children:e,className:t=``}){return(0,C.jsx)(`main`,{className:t,children:e})}function T(e){return String(e||``).trim().replace(/\/+$/,``)}function E(e){return String(e||``).trim()}function D({inviteNodeUrl:e,inviteNodeInvite:t,hasBackend:n,activeBackendUrl:r,activeRemoteUrl:i,activeRemoteInvite:a}){let o=T(e),s=T(i),c=T(r);return!!o&&!!s&&n===!0&&c===s&&s===o&&E(a)===E(t)}function O(e){return!!T(e.inviteNodeUrl)&&!D(e)}var k=`data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"%3E%3Crect width="64" height="64" rx="16" fill="%232f7dd1"/%3E%3Ccircle cx="32" cy="25" r="11" fill="%23f8fbff"/%3E%3Cpath d="M14 56c3-12 12-18 18-18s15 6 18 18" fill="%23f8fbff"/%3E%3C/svg%3E`,A=`data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"%3E%3Crect width="64" height="64" rx="16" fill="%230f9f7a"/%3E%3Cpath d="M18 20h28v22H18z" rx="6" fill="%23f7fff9"/%3E%3Ccircle cx="27" cy="31" r="3" fill="%230f9f7a"/%3E%3Ccircle cx="37" cy="31" r="3" fill="%230f9f7a"/%3E%3Cpath d="M29 39h6" stroke="%230f9f7a" stroke-width="4" stroke-linecap="round"/%3E%3Cpath d="M32 12v8" stroke="%23f7fff9" stroke-width="5" stroke-linecap="round"/%3E%3C/svg%3E`,j=Object.freeze({id:`chatjoin_support`,name:`User / Service 测试频道`}),M=Object.freeze([Object.freeze({uid:`user`,theme:`sparkbit`,name:`测试用户`,avatar:k}),Object.freeze({uid:`service`,name:`测试客服`,avatar:A})]),N=Object.freeze(M.map(e=>Object.freeze({locale:`zh-CN`,uid:e.uid,theme:e.theme,avatar:e.avatar,name:e.name,channels:[j]})));function P(e){let t=String(e||``).trim();return N.find(e=>e.uid===t)||null}var F=50,I=x;function L(e){try{return JSON.parse(e)}catch{return null}}function R(e,t,n){if(t&&typeof t==`object`&&`error`in t){let e=t.error;if(typeof e==`string`)return e}return e||n}function z(e){return`/chat?channel=${encodeURIComponent(e)}`}function B(e){return String(e||``).trim().slice(0,F)}function V(){let{t:e,setLocale:t}=f(),n=g({select:e=>e.searchStr}),{token:a,pub:x,fixture:T}=(0,S.useMemo)(()=>{let e=new URLSearchParams(n);return{token:e.get(`token`)||``,pub:e.get(`pub`)||``,fixture:e.get(`fixture`)||``}},[n]),E=d(e=>e.hasBackend),D=d(e=>e.setIsDarkMode),k=i(e=>e.setUserIdentity),[A,j]=(0,S.useState)(``),[M,N]=(0,S.useState)(!0),[F,V]=(0,S.useState)(0),H=(0,S.useRef)(``);function U(){H.current=``,j(``),N(!0),V(e=>e+1)}return(0,S.useEffect)(()=>{let n=P(T);if(T&&!n){j(e(`chatJoin.error.unknownFixture`,{fixture:T})),N(!1);return}if(!n&&!a){j(e(`chatJoin.error.missingToken`)),N(!1);return}if(!n&&!x){j(e(`chatJoin.error.missingPub`)),N(!1);return}if(E===null)return;let i=n?`fixture:${T}`:`${a}:${x}`;if(H.current===i)return;H.current=i;async function f(n){let i=(t,r)=>n.locale?p(t,n.locale,r):e(t,r);n.locale&&t(n.locale),n.appearance===`dark`&&D(!0),n.appearance===`light`&&D(!1);let a=c(),f=l(),m=s();if(O({inviteNodeUrl:n.node_url,inviteNodeInvite:n.node_invite,hasBackend:E,activeBackendUrl:m,activeRemoteUrl:a,activeRemoteInvite:f})){if(!(await u({url:n.node_url,invite:n.node_invite||``})).ok)throw Error(i(`chatJoin.error.remoteConnectFailed`));o({url:n.node_url,invite:n.node_invite||``}),d.setState({hasBackend:!0})}else if(!E)throw Error(i(`chatJoin.error.noBackend`));let h=r(n.uid,``),g={...h,theme:n.theme,displayName:n.name||h.displayName,logo:n.logo,logo_dark:n.logo_dark,data:n.data,avatar:n.avatar};k(g);let y=``;for(let e of n.channels){let t=await v.createChannel(e.id,`public`,_(g)),n=t.channelKey||t.key||e.id;y||=n;let r=B(e.name);r&&await v.setChannelRemark(n,r)}let b=n.channels[0];window.location.href=z(y||b.id)}async function m(){try{if(n){await f(n);return}let t=await fetch(`${I}/api/chat.join.decrypt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({token:a,pub:x})}),r=await t.text(),i=L(r);if(!t.ok)j(R(r,i,e(`chatJoin.error.decrypt`)));else{let t=b(i);if(!t){j(e(`chatJoin.error.invalidInvite`));return}await f(t)}}catch(t){j(e(`chatJoin.error.request`,{message:t instanceof Error?t.message:String(t)}))}finally{N(!1)}}m()},[T,E,x,F,D,t,k,e,a]),(0,C.jsx)(w,{className:`chat-join-loading-page`,children:(0,C.jsx)(`div`,{className:`chat-join-loading-panel`,children:M?(0,C.jsx)(y,{}):A?(0,C.jsxs)(`div`,{className:`chat-join-error`,children:[(0,C.jsx)(m,{size:32}),(0,C.jsx)(`p`,{children:A}),(0,C.jsx)(`div`,{className:`chat-join-actions`,children:(0,C.jsxs)(`button`,{type:`button`,className:`btn btn-primary`,onClick:U,children:[(0,C.jsx)(h,{size:16}),e(`chatJoin.action.retry`)]})})]}):(0,C.jsx)(y,{})})})}function H(){return(0,C.jsx)(S.Suspense,{children:(0,C.jsx)(V,{})})}var U=a(`/chat/join/`)({component:H});export{U as Route};
@@ -1 +1 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{A as r,B as i,E as a,H as o,O as s,_ as c,g as l,h as u,k as d,t as f,x as p,y as m}from"./useAppStore-DNhyhD20.js";import{a as h}from"./i18n-DKsg67mH.js";import{t as g}from"./copy-OwXDsstV.js";import{t as _}from"./AppShell-CKP_dglR.js";import{t as ee}from"./play-DSHtNcOe.js";import{a as v,i as te,n as ne,r as re,t as ie}from"./useGameRoom-B3wvUICl.js";import{M as ae,g as oe}from"./index-DJzLHA0V.js";var se=i(`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),b=[10,20,50,100],x=[`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`J`,`Q`,`K`,`A`],S=[`D`,`C`,`H`,`S`],C=new Map(x.map((e,t)=>[e,t+2])),ce=new Map(S.map((e,t)=>[e,t+1])),w={high:1,pair:2,straight:3,flush:4,straightFlush:5,triple:6},le={[w.high]:`散牌`,[w.pair]:`对子`,[w.straight]:`顺子`,[w.flush]:`金花`,[w.straightFlush]:`顺金`,[w.triple]:`豹子`};function T(e){return m(e)}function E(e=`zhajinhua`){return u(e)}function D(){return E(`round`)}function O(){let e=[];for(let t of S)for(let n of x)e.push(`${n}${t}`);return e}function k(e=O(),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 A(e){let t=String(e||``).trim().toUpperCase(),n=t.slice(-1),r=t.slice(0,-1);if(!C.has(r)||!ce.has(n))throw Error(`Invalid card: ${e}`);return{id:`${r}${n}`,rank:r,suit:n,rankValue:C.get(r),suitValue:ce.get(n)}}function j(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 M(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 N(e){if(!Array.isArray(e)||e.length!==3)throw Error(`炸金花手牌必须是 3 张牌`);let t=e.map(A),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=M(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:le[c],tiebreakers:l,tieSuit:s,cards:t.map(e=>e.id)}}function P(e,t){let n=N(e),r=N(t);if(n.category!==r.category)return n.category-r.category;let i=j(n.tiebreakers,r.tiebreakers);return i===0?n.tieSuit-r.tieSuit:i}function ue(e){return N(e).label}function de({roundId:e,action:t,amount:n,target:r}){return{roundId:e,eventId:E(`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=D(),random:o=Math.random}){let s=t.filter(e=>Number(e.chips)>=10).slice(0,5);if(s.length<2)throw Error(`至少需要 2 名有足够筹码的玩家`);let u=k(O(),o),d={},f=s.map((e,t)=>{let n=u.slice(t*3,t*3+3);return d[e.address]=n,{address:e.address,name:e.name,avatar:c(e.avatar),publicKey:e.publicKey,chips:Number(e.chips)-10,status:`active`,looked:!1,bet:10}}),p,m=l(i),h=m?f.findIndex(e=>l(e.address)===m):-1;return p=h>=0?f[h].address:f[Math.floor(o()*f.length)].address,{roomCode:T(e),roundId:a,status:`playing`,host:l(n),seq:r+1,startedAt:Date.now(),ante:10,pot:10*f.length,currentBet:10,turnAddress:p,players:f,lastAction:`本局开始`,winner:null,showdown:null,appliedEventIds:[],hands:d,actionCounts:{},compareReveal:{}}}function me(e){if(!e)return null;let t={...e};return delete t.hands,W(t)}function he(e,t){let n=F(e);return!n||!t||typeof t!=`object`?null:{...n,hands:W(t)}}function F(e){return!e||typeof e!=`object`||!e.roundId||!Array.isArray(e.players)?null:{roomCode:T(e.roomCode),roundId:String(e.roundId),status:e.status===`finished`?`finished`:`playing`,host:l(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:l(e.turnAddress),players:e.players.map(U).filter(Boolean),lastAction:String(e.lastAction||``),winner:e.winner?l(e.winner):null,showdown:e.showdown&&typeof e.showdown==`object`?W(e.showdown):null,appliedEventIds:Array.isArray(e.appliedEventIds)?e.appliedEventIds.map(String):[],actionCounts:e.actionCounts&&typeof e.actionCounts==`object`?W(e.actionCounts):{},compareReveal:e.compareReveal&&typeof e.compareReveal==`object`?W(e.compareReveal):{},lastCompare:e.lastCompare&&typeof e.lastCompare==`object`?W(e.lastCompare):null,finishedAt:e.finishedAt?Number(e.finishedAt):null}}function I(e,t,n){let r=F(e);if(!r||r.status!==`playing`)return{ok:!1,error:`当前没有进行中的牌局`};let i=l(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(!b.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=l(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 L(e,t,n){let r=I(e,t,n);if(!r.ok)return{ok:!1,error:r.error,state:e};let i=W(e),a=l(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} 看牌`,H(i);if(t.action===`fold`)return o.status=`folded`,i.lastAction=`${o.name} 弃牌`,B(i,a),V(i,a);if(t.action===`call`)return o.chips-=10,o.bet+=10,i.pot+=10,i.lastAction=`${o.name} 跟注`,B(i,a),V(i,a);if(t.action===`raise`){let e=Number(t.amount);return i.currentBet+=e,z(i,o),i.lastAction=`${o.name} 加注 ${e}`,B(i,a),V(i,a)}if(t.action===`compare`){z(i,o);let e=l(t.target),n=i.players.find(t=>t.address===e),r=o.looked,s=n.looked,c=P(i.hands?.[a]||[],i.hands?.[e]||[]),u=c>=0?o:n,d=c>=0?n:o;d.status=`folded`,d.looked=!0,i.compareReveal||={};let f=r&&s,p=!r&&!s;if(f)i.compareReveal[a]=i.hands?.[e]||[],i.compareReveal[e]=i.hands?.[a]||[];else if(p)i.compareReveal[d.address]=i.hands?.[u.address]||[];else{let e=r?o:n,t=r?n:o;i.compareReveal[e.address]=i.hands?.[t.address]||[],i.compareReveal[d.address]=i.hands?.[u.address]||[]}return i.lastCompare={initiator:a,target:e,winner:u.address,loser:d.address,initiatorLooked:r,targetLooked:s,timestamp:Date.now()},i.lastAction=`${o.name} 与 ${n.name} 比牌,${d.name} 出局`,B(i,a),V(i,a)}return{ok:!1,error:`未知操作`,state:e}}function R(e){return(e?.players||[]).filter(e=>e.status===`active`)}function ge(e,t){let n=(e?.players||[]).find(e=>e.address===l(t));if(!e||e.status!==`playing`||!n||n.status!==`active`||e.turnAddress!==n.address)return[];let r=[];return n.looked||r.push(`look`),I(e,{action:`call`},n.address).ok&&r.push(`call`),b.some(t=>I(e,{action:`raise`,amount:t},n.address).ok)&&r.push(`raise`),R(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 z(e,t){let n=Math.max(0,e.currentBet-t.bet);t.chips-=n,t.bet+=n,e.pot+=n}function B(e,t){e.actionCounts||={},e.actionCounts[t]=(e.actionCounts[t]||0)+1}function V(e,t){let n=R(e);return n.length===1?_e(e,n[0].address):(e.turnAddress=ve(e,t),H(e))}function _e(e,t){let n=e.players.find(e=>e.address===t),r=e.pot;return n&&(n.chips+=e.pot),e.status=`finished`,e.winner=t,e.winAmount=r,e.turnAddress=``,e.showdown=e.hands?W(e.hands):null,e.lastAction=n?`${n.name} 赢得 ${r} 筹码`:`本局结束`,e.pot=0,e.finishedAt=Date.now(),H(e)}function ve(e,t){let n=e.players,r=Math.max(0,n.findIndex(e=>e.address===l(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 H(e){return e.seq=Number(e.seq||0)+1,{ok:!0,state:e}}function U(e){if(!e||typeof e!=`object`)return null;let t=l(e.address);return t?{address:t,name:String(e.name||p(t)).slice(0,50),avatar:c(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 W(e){return JSON.parse(JSON.stringify(e))}var G={page:`_page_p8eol_1`,headerActions:`_headerActions_p8eol_12`,entry:`_entry_p8eol_18`,entryBrand:`_entryBrand_p8eol_28`,cardMark:`_cardMark_p8eol_34`,entryPanel:`_entryPanel_p8eol_62`,accountLine:`_accountLine_p8eol_72`,joinForm:`_joinForm_p8eol_89`,status:`_status_p8eol_110`,board:`_board_p8eol_116`,table:`_table_p8eol_123`,tableCenter:`_tableCenter_p8eol_144`,finishBanner:`_finishBanner_p8eol_173`,finishBannerIcon:`_finishBannerIcon_p8eol_192`,seats:`_seats_p8eol_196`,seat:`_seat_p8eol_196`,seatTurn:`_seatTurn_p8eol_218`,seatWinner:`_seatWinner_p8eol_223`,seatFolded:`_seatFolded_p8eol_228`,seatAvatar:`_seatAvatar_p8eol_232`,seatAvatarOffline:`_seatAvatarOffline_p8eol_252`,onlineDot:`_onlineDot_p8eol_257`,seatMain:`_seatMain_p8eol_269`,seatMeta:`_seatMeta_p8eol_270`,panel:`_panel_p8eol_301`,panelSection:`_panelSection_p8eol_308`,panelTitle:`_panelTitle_p8eol_318`,hand:`_hand_p8eol_328`,card:`_card_p8eol_34`,red:`_red_p8eol_362`,black:`_black_p8eol_366`,cardBack:`_cardBack_p8eol_370`,handLabel:`_handLabel_p8eol_391`,actionGrid:`_actionGrid_p8eol_398`,raiseRow:`_raiseRow_p8eol_399`,statusGrid:`_statusGrid_p8eol_410`,muted:`_muted_p8eol_428`,compareOverlay:`_compareOverlay_p8eol_435`,compareBox:`_compareBox_p8eol_447`,compareTitle:`_compareTitle_p8eol_461`,comparePlayers:`_comparePlayers_p8eol_467`,compareSide:`_compareSide_p8eol_474`,compareWinner:`_compareWinner_p8eol_486`,compareName:`_compareName_p8eol_491`,compareCards:`_compareCards_p8eol_502`,compareLabel:`_compareLabel_p8eol_527`,compareVs:`_compareVs_p8eol_533`,compareResult:`_compareResult_p8eol_540`},K=n(),q=`zhajinhua`;function J(...e){return e.filter(Boolean).join(` `)}function Y(e,t){return String(e||``).toLowerCase()===String(t||``).toLowerCase()}function ye(e=``){return e?`${e.slice(0,6)}...${e.slice(-4)}`:``}function be(e){return e.displayName||e.username}function xe(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}=h(),t=f(e=>e.addToast),n=a(e=>e.initializeUser),[i,o]=(0,y.useState)(``),[c,l]=(0,y.useState)(!1),u=(0,y.useRef)(``),p=(0,y.useRef)(!1),[m,x]=(0,y.useState)(20),[S,C]=(0,y.useState)(``),[ce,w]=(0,y.useState)({}),[le,T]=(0,y.useState)(!0),[E,D]=(0,y.useState)(!1),O=(0,y.useRef)(null),k=(0,y.useRef)(new Set),A=ie({gameId:q,onError:e=>t(e,`error`),getPlayerPayload:e=>{let t=s(e.danger);return{address:e.address,name:be(e),avatar:e.avatar||``,publicKey:t.public_key,joinedAt:Date.now()}}}),j=(0,y.useMemo)(()=>A.userIdentity?.danger?s(A.userIdentity.danger):null,[A.userIdentity?.danger]);(0,y.useEffect)(()=>{n()},[n]),(0,y.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get(`room`)?.toUpperCase();e&&(o(e),u.current=e)},[]),(0,y.useEffect)(()=>{let n=u.current;!n||p.current||!A.isBackendReady||!A.userIdentity||(p.current=!0,u.current=``,A.joinRoom(n).then(n=>{n&&t(e(`game.toast.joinedRoom`),`success`)}))},[A.isBackendReady,A.userIdentity,A.joinRoom,t,e]),(0,y.useEffect)(()=>{if(!A.roomCode)return;let e=`/game/zhajinhua?room=${A.roomCode}`;`${window.location.pathname}${window.location.search}`!==e&&window.history.replaceState(null,``,e)},[A.roomCode]);let M=(0,y.useMemo)(()=>ne(A.messages,{gameId:q,roomCode:A.roomCode}),[A.messages,A.roomCode]),N=(0,y.useMemo)(()=>re(A.messages,{gameId:q,roomCode:A.roomCode}),[A.messages,A.roomCode])?.payload?.round||null,P=N?.host||M.hostAddress,F=Y(P,A.userIdentity?.address),I=A.userIdentity?.address?.toLowerCase()||``,z=N?.players.find(e=>Y(e.address,I)),B=z||M.players.find(e=>Y(e.address,I)),V=ce[N?.roundId||``]||null,_e=N?.showdown&&I?N.showdown[I]:null,ve=N?.compareReveal&&I?N.compareReveal[I]:null,H=_e||ve||(z?.looked?V:null),U=ge(N,I),W=R(N),X=F&&fe(M.players.map(e=>({...e,chips:N?.players.find(t=>Y(t.address,e.address))?.chips??1e3}))),Q=A.roomCode&&typeof window<`u`?`${window.location.origin}/game/zhajinhua?room=${A.roomCode}`:``;(0,y.useEffect)(()=>{if(!(!N||!A.userIdentity||!j||!P))for(let e of A.roomEvents){let t=e.event;if(!t||t.event!==`deal:private`)continue;let n=t.payload;if(n.roundId!==N.roundId||!Y(n.recipient,A.userIdentity.address))continue;let r=d(n.encrypted||``,{senderPublicKey:n.senderPublicKey||``,recipientPrivateKey:j.private_key});if(r)try{let e=JSON.parse(r);Array.isArray(e)&&w(t=>({...t,[N.roundId]:e.map(String)}))}catch{}}},[N?.roundId,A.roomEvents,A.userIdentity,P,j?.private_key]),(0,y.useEffect)(()=>{if(N?.status===`finished`&&N.winner){T(!0);let e=setTimeout(()=>T(!1),5e3);return()=>clearTimeout(e)}},[N?.finishedAt,N?.status,N?.winner]),(0,y.useEffect)(()=>{if(N?.lastCompare?.timestamp){D(!0);let e=setTimeout(()=>D(!1),5e3);return()=>clearTimeout(e)}else D(!1)},[N?.lastCompare?.timestamp,N?.roundId]),(0,y.useEffect)(()=>{if(!F||!N||N.status!==`playing`)return;let e=O.current;if(!e)return;let t=A.roomEvents.filter(e=>{let t=e.event;if(!t||t.event!==`player:action`)return!1;let n=t.payload.actionEvent;return!(!n||n.roundId!==N.roundId||k.current.has(n.eventId)||N.appliedEventIds?.includes(n.eventId))});if(t.length===0)return;let n=!1;async function r(){let r=he(N,e);if(r)for(let e of t){if(n)return;let t=(e.event?.payload).actionEvent,i=L(r,t,e.message.author);if(!i.ok){let n=e.message.author;if(!Y(n,A.userIdentity?.address)&&r.status===`playing`&&Y(r.turnAddress,n)){let e=L(r,de({roundId:r.roundId,action:`call`,amount:void 0,target:void 0}),n);if(e.ok)i=e;else{let e=L(r,de({roundId:r.roundId,action:`fold`,amount:void 0,target:void 0}),n);e.ok&&(i=e)}}if(!i.ok){k.current.add(t.eventId);continue}}if(r=i.state,O.current=i.state.hands,await De(i.state)&&k.current.add(t.eventId),i.state.status===`finished`)break}}return r(),()=>{n=!0}},[N?.roundId,N?.seq,N?.status,A.roomEvents,F]);async function we(){await A.createRoom()&&t(e(`game.toast.roomCreated`),`success`)}async function Te(n){n.preventDefault(),await A.joinRoom(i)&&t(e(`game.toast.joinedRoom`),`success`)}async function Ee(){Q&&(await navigator.clipboard.writeText(Q),l(!0),setTimeout(()=>l(!1),1400))}async function De(e){return A.sendRoomEvent(`room:state`,{round:me(e),seq:e.seq})}async function Oe(){if(!A.userIdentity||!j||!X){t(e(`game.zhajinhua.error.notEnoughPlayers`),`error`);return}try{let n=M.players.map(e=>({...e,chips:N?.players.find(t=>Y(t.address,e.address))?.chips??1e3})),i=pe({roomCode:A.roomCode,players:n,hostAddress:A.userIdentity.address,previousSeq:N?.seq||0,previousWinner:N?.winner||``});O.current=i.hands,k.current.clear(),await De(i);for(let e of i.players){let t=r(JSON.stringify(i.hands[e.address]),{senderPrivateKey:j.private_key,recipientPublicKey:e.publicKey});await A.sendRoomEvent(`deal:private`,{roundId:i.roundId,recipient:e.address,senderPublicKey:j.public_key,encrypted:t})}w(e=>({...e,[i.roundId]:i.hands[A.userIdentity.address.toLowerCase()]})),t(e(`game.zhajinhua.toast.roundStarted`),`success`)}catch(n){t(n instanceof Error?n.message:e(`game.zhajinhua.error.startFailed`),`error`)}}async function $(e,t={}){if(!N||!A.userIdentity)return;let n=de({roundId:N.roundId,action:e,amount:t.amount,target:t.target});await A.sendRoomEvent(`player:action`,{actionEvent:n})}let ke=N?.status===`playing`?Y(N.turnAddress,I)?e(`game.zhajinhua.status.yourTurn`):N.turnAddress?e(`game.zhajinhua.status.waitingPlayer`,{player:Z(N.turnAddress,M.players,A.presenceByAddress)}):e(`game.status.playing`):N?.status===`finished`?e(`game.status.finished`):e(`game.status.waitingStart`),Ae=W.filter(e=>!Y(e.address,I));return(0,K.jsx)(_,{sidebar:({closeSidebar:e})=>(0,K.jsx)(te,{activeGame:`zhajinhua`,closeSidebar:e}),headerTitle:(0,K.jsx)(`h2`,{className:`header-title`,children:e(`game.zhajinhua.title`)}),headerRight:(0,K.jsx)(`div`,{className:G.headerActions,children:A.roomCode&&(0,K.jsxs)(`button`,{className:`btn btn-sm`,onClick:Ee,children:[(0,K.jsx)(g,{size:14}),e(c?`common.copied`:`game.action.shareRoom`)]})}),children:(0,K.jsx)(`main`,{className:G.page,children:A.roomCode?(0,K.jsxs)(`div`,{className:G.board,children:[(0,K.jsxs)(`section`,{className:G.table,children:[N?.status===`finished`&&N.winner&&le&&(0,K.jsxs)(`div`,{className:G.finishBanner,children:[(0,K.jsx)(`span`,{className:G.finishBannerIcon,children:`🏆`}),(0,K.jsx)(`span`,{children:e(`game.zhajinhua.result.winChips`,{player:Z(N.winner,M.players,A.presenceByAddress),amount:N.winAmount??0})})]}),N?.lastCompare&&E&&(0,K.jsx)(Se,{lastCompare:N.lastCompare,compareReveal:N.compareReveal||{},myAddress:I,myDealtHand:V,lobbyPlayers:M.players,presenceByAddress:A.presenceByAddress,onClose:()=>D(!1)}),(0,K.jsxs)(`div`,{className:G.tableCenter,children:[(0,K.jsx)(`span`,{children:e(`game.zhajinhua.pot`)}),(0,K.jsx)(`strong`,{children:N?.pot||0}),(0,K.jsx)(`small`,{children:e(`game.zhajinhua.currentBet`,{amount:N?.currentBet||0})})]}),(0,K.jsx)(`div`,{className:G.seats,children:M.players.map(t=>{let n=N?.players.find(e=>Y(e.address,t.address)),r=Ce(t,A.presenceByAddress,A.onlineAddresses),i=N?.turnAddress===t.address,a=N?.winner===t.address,o=n?.status===`folded`;return(0,K.jsxs)(`div`,{className:J(G.seat,i&&G.seatTurn,a&&G.seatWinner,o&&G.seatFolded),children:[(0,K.jsxs)(`div`,{className:J(G.seatAvatar,!r.online&&G.seatAvatarOffline),children:[(0,K.jsx)(`img`,{src:oe(t.address,r.avatar),alt:``}),r.online&&(0,K.jsx)(`span`,{className:G.onlineDot})]}),(0,K.jsxs)(`div`,{className:G.seatMain,children:[(0,K.jsx)(`strong`,{translate:`no`,children:r.name}),(0,K.jsx)(`span`,{translate:`no`,children:ye(t.address)})]}),(0,K.jsxs)(`div`,{className:G.seatMeta,children:[(0,K.jsx)(`span`,{children:e(`game.zhajinhua.chips`,{amount:n?.chips??1e3})}),(0,K.jsx)(`span`,{children:n?.status===`folded`?e(`game.zhajinhua.player.folded`):n?.looked?e(`game.zhajinhua.player.looked`):e(N?`game.zhajinhua.player.inRound`:`game.status.waitingStart`)})]})]},t.address)})})]}),(0,K.jsxs)(`aside`,{className:G.panel,children:[(0,K.jsxs)(`div`,{className:G.panelSection,children:[(0,K.jsxs)(`div`,{className:G.panelTitle,children:[(0,K.jsx)(v,{size:16}),(0,K.jsx)(`span`,{children:e(`game.zhajinhua.myHand`)})]}),(0,K.jsx)(`div`,{className:G.hand,children:H?H.map(e=>{let t=xe(e),n=`${t.suit}${t.rank}`;return(0,K.jsxs)(`div`,{className:J(G.card,G[t.color]),children:[(0,K.jsx)(`span`,{children:n}),(0,K.jsx)(`i`,{children:t.suit})]},e)}):[0,1,2].map(e=>(0,K.jsx)(`div`,{className:G.cardBack,children:(0,K.jsx)(v,{size:18})},e))}),(0,K.jsx)(`p`,{className:G.handLabel,children:H?ue(H):e(V?`game.zhajinhua.hand.unlooked`:`game.zhajinhua.hand.waitingDeal`)})]}),(0,K.jsxs)(`div`,{className:G.panelSection,children:[(0,K.jsxs)(`div`,{className:G.panelTitle,children:[(0,K.jsx)(ee,{size:16}),(0,K.jsx)(`span`,{children:e(`game.actions`)})]}),F?(0,K.jsxs)(`button`,{className:`btn btn-primary btn-full`,onClick:Oe,disabled:!X||N?.status===`playing`,children:[(0,K.jsx)(se,{size:16}),N?.status===`finished`?e(`game.action.nextRound`):e(`game.action.startRound`)]}):(0,K.jsx)(`p`,{className:G.muted,children:e(`game.waitingHost`)}),F&&N?.status===`finished`&&!X&&(0,K.jsx)(`p`,{className:G.muted,children:e(`game.zhajinhua.error.tooManyLowChips`)}),(0,K.jsxs)(`div`,{className:G.actionGrid,children:[(0,K.jsxs)(`button`,{className:`btn btn-secondary`,disabled:!U.includes(`look`),onClick:()=>$(`look`),children:[(0,K.jsx)(ae,{size:16}),e(`game.zhajinhua.action.look`)]}),(0,K.jsx)(`button`,{className:`btn btn-secondary`,disabled:!U.includes(`call`),onClick:()=>$(`call`),children:e(`game.zhajinhua.action.call`)}),(0,K.jsx)(`button`,{className:`btn btn-secondary`,disabled:!U.includes(`fold`),onClick:()=>$(`fold`),children:e(`game.zhajinhua.action.fold`)})]}),(0,K.jsxs)(`div`,{className:G.raiseRow,children:[(0,K.jsx)(`select`,{className:`input input-compact`,value:m,onChange:e=>x(Number(e.target.value)),children:b.map(t=>(0,K.jsx)(`option`,{value:t,children:e(`game.zhajinhua.action.raiseOption`,{amount:t})},t))}),(0,K.jsx)(`button`,{className:`btn btn-secondary`,disabled:!U.includes(`raise`),onClick:()=>$(`raise`,{amount:m}),children:e(`game.zhajinhua.action.raise`)})]}),(0,K.jsxs)(`div`,{className:G.raiseRow,children:[(0,K.jsxs)(`select`,{className:`input input-compact`,value:S,onChange:e=>C(e.target.value),children:[(0,K.jsx)(`option`,{value:``,children:e(`game.zhajinhua.action.comparePlaceholder`)}),Ae.map(e=>(0,K.jsx)(`option`,{value:e.address,children:Z(e.address,Ae,A.presenceByAddress)},e.address))]}),(0,K.jsx)(`button`,{className:`btn btn-secondary`,disabled:!U.includes(`compare`)||!S,onClick:()=>$(`compare`,{target:S}),children:e(`game.zhajinhua.action.compare`)})]})]}),(0,K.jsxs)(`div`,{className:G.panelSection,children:[(0,K.jsx)(`div`,{className:G.panelTitle,children:e(`game.status.title`)}),(0,K.jsxs)(`div`,{className:G.statusGrid,children:[(0,K.jsx)(`span`,{children:e(`game.host`)}),(0,K.jsx)(`strong`,{children:P?ye(P):`-`}),(0,K.jsx)(`span`,{children:e(`game.zhajinhua.myChips`)}),(0,K.jsx)(`strong`,{children:B?.chips??1e3}),(0,K.jsx)(`span`,{children:e(`game.round`)}),(0,K.jsx)(`strong`,{children:ke}),(0,K.jsx)(`span`,{children:e(`game.hint`)}),(0,K.jsx)(`strong`,{children:N?.lastAction||e(`game.waitingPlayers`)})]})]})]})]}):(0,K.jsxs)(`section`,{className:G.entry,children:[(0,K.jsxs)(`div`,{className:G.entryBrand,children:[(0,K.jsx)(`div`,{className:G.cardMark,children:(0,K.jsx)(v,{size:48})}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`h1`,{children:e(`game.zhajinhua.hero.title`)}),(0,K.jsx)(`p`,{children:e(`game.hero.desc`)})]})]}),(0,K.jsxs)(`div`,{className:G.entryPanel,children:[(0,K.jsxs)(`div`,{className:G.accountLine,children:[(0,K.jsx)(`span`,{children:e(`game.currentAccount`)}),(0,K.jsx)(`strong`,{translate:`no`,children:A.userIdentity?.displayName||e(`web3.notSignedIn`)})]}),(0,K.jsxs)(`button`,{className:`btn btn-primary`,disabled:A.joining,onClick:we,children:[(0,K.jsx)(ee,{size:16}),e(`game.action.createRoom`)]}),(0,K.jsxs)(`form`,{onSubmit:Te,className:G.joinForm,children:[(0,K.jsxs)(`label`,{children:[e(`game.roomCode`),(0,K.jsx)(`input`,{value:i,maxLength:8,onChange:e=>o(e.target.value.toUpperCase()),placeholder:e(`game.roomCode.placeholder`)})]}),(0,K.jsx)(`button`,{className:`btn`,disabled:A.joining||!i,children:e(`game.action.joinRoom`)})]}),(0,K.jsx)(`p`,{className:G.status,children:A.isBackendReady?e(`game.status.nodeConnected`):e(`game.status.nodeConnecting`)})]})]})})})}function Se({lastCompare:e,compareReveal:t,myAddress:n,myDealtHand:r,lobbyPlayers:i,presenceByAddress:a,onClose:o}){let{t:s}=h(),c=Z(e.initiator,i,a),l=Z(e.target,i,a),u=Z(e.winner,i,a),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,K.jsx)(`div`,{className:G.compareOverlay,onClick:o,children:(0,K.jsxs)(`div`,{className:G.compareBox,onClick:e=>e.stopPropagation(),children:[(0,K.jsx)(`div`,{className:G.compareTitle,children:s(`game.zhajinhua.compareResult`)}),(0,K.jsxs)(`div`,{className:G.comparePlayers,children:[(0,K.jsxs)(`div`,{className:J(G.compareSide,Y(e.winner,e.initiator)&&G.compareWinner),children:[(0,K.jsx)(`div`,{className:G.compareName,children:c}),(0,K.jsx)(`div`,{className:G.compareCards,children:g?g.map(e=>{let t=xe(e);return(0,K.jsxs)(`div`,{className:J(G.card,G[t.color]),children:[(0,K.jsx)(`span`,{children:t.rank}),(0,K.jsx)(`i`,{children:t.suit})]},e)}):[0,1,2].map(e=>(0,K.jsx)(`div`,{className:G.cardBack,children:(0,K.jsx)(v,{size:18})},e))}),g&&(0,K.jsx)(`div`,{className:G.compareLabel,children:ue(g)})]}),(0,K.jsx)(`div`,{className:G.compareVs,children:`VS`}),(0,K.jsxs)(`div`,{className:J(G.compareSide,Y(e.winner,e.target)&&G.compareWinner),children:[(0,K.jsx)(`div`,{className:G.compareName,children:l}),(0,K.jsx)(`div`,{className:G.compareCards,children:_?_.map(e=>{let t=xe(e);return(0,K.jsxs)(`div`,{className:J(G.card,G[t.color]),children:[(0,K.jsx)(`span`,{children:t.rank}),(0,K.jsx)(`i`,{children:t.suit})]},e)}):[0,1,2].map(e=>(0,K.jsx)(`div`,{className:G.cardBack,children:(0,K.jsx)(v,{size:18})},e))}),_&&(0,K.jsx)(`div`,{className:G.compareLabel,children:ue(_)})]})]}),(0,K.jsx)(`div`,{className:G.compareResult,children:s(`game.zhajinhua.result.winner`,{player:u})}),(0,K.jsx)(`button`,{className:`btn btn-sm`,onClick:o,children:s(`common.close`)})]})})}function Z(e,t,n){let r=Q(e);return n.get(r)?.displayName||t.find(e=>Q(e.address)===r)?.name||ye(e)}function Q(e=``){return String(e||``).trim().toLowerCase()}function Ce(e,t,n){let r=Q(e.address),i=t.get(r);return{name:Z(e.address,[e],t),avatar:i?.avatar||e.avatar||``,online:r?n.has(r):!1}}var we=o(`/game/zhajinhua/`)({component:X});export{we as Route};
1
+ import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{A as r,B as i,E as a,H as o,O as s,_ as c,g as l,h as u,k as d,t as f,x as p,y as m}from"./useAppStore-Pjif7nCR.js";import{a as h}from"./i18n-DKsg67mH.js";import{t as g}from"./copy-BofKiKH_.js";import{t as _}from"./AppShell-BN1uaxn1.js";import{t as ee}from"./play-B6IGTGxm.js";import{a as v,i as te,n as ne,r as re,t as ie}from"./useGameRoom-CqeouPP_.js";import{M as ae,g as oe}from"./index-CCU5Z4K-.js";var se=i(`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),b=[10,20,50,100],x=[`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`J`,`Q`,`K`,`A`],S=[`D`,`C`,`H`,`S`],C=new Map(x.map((e,t)=>[e,t+2])),ce=new Map(S.map((e,t)=>[e,t+1])),w={high:1,pair:2,straight:3,flush:4,straightFlush:5,triple:6},le={[w.high]:`散牌`,[w.pair]:`对子`,[w.straight]:`顺子`,[w.flush]:`金花`,[w.straightFlush]:`顺金`,[w.triple]:`豹子`};function T(e){return m(e)}function E(e=`zhajinhua`){return u(e)}function D(){return E(`round`)}function O(){let e=[];for(let t of S)for(let n of x)e.push(`${n}${t}`);return e}function k(e=O(),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 A(e){let t=String(e||``).trim().toUpperCase(),n=t.slice(-1),r=t.slice(0,-1);if(!C.has(r)||!ce.has(n))throw Error(`Invalid card: ${e}`);return{id:`${r}${n}`,rank:r,suit:n,rankValue:C.get(r),suitValue:ce.get(n)}}function j(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 M(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 N(e){if(!Array.isArray(e)||e.length!==3)throw Error(`炸金花手牌必须是 3 张牌`);let t=e.map(A),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=M(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:le[c],tiebreakers:l,tieSuit:s,cards:t.map(e=>e.id)}}function P(e,t){let n=N(e),r=N(t);if(n.category!==r.category)return n.category-r.category;let i=j(n.tiebreakers,r.tiebreakers);return i===0?n.tieSuit-r.tieSuit:i}function ue(e){return N(e).label}function de({roundId:e,action:t,amount:n,target:r}){return{roundId:e,eventId:E(`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=D(),random:o=Math.random}){let s=t.filter(e=>Number(e.chips)>=10).slice(0,5);if(s.length<2)throw Error(`至少需要 2 名有足够筹码的玩家`);let u=k(O(),o),d={},f=s.map((e,t)=>{let n=u.slice(t*3,t*3+3);return d[e.address]=n,{address:e.address,name:e.name,avatar:c(e.avatar),publicKey:e.publicKey,chips:Number(e.chips)-10,status:`active`,looked:!1,bet:10}}),p,m=l(i),h=m?f.findIndex(e=>l(e.address)===m):-1;return p=h>=0?f[h].address:f[Math.floor(o()*f.length)].address,{roomCode:T(e),roundId:a,status:`playing`,host:l(n),seq:r+1,startedAt:Date.now(),ante:10,pot:10*f.length,currentBet:10,turnAddress:p,players:f,lastAction:`本局开始`,winner:null,showdown:null,appliedEventIds:[],hands:d,actionCounts:{},compareReveal:{}}}function me(e){if(!e)return null;let t={...e};return delete t.hands,W(t)}function he(e,t){let n=F(e);return!n||!t||typeof t!=`object`?null:{...n,hands:W(t)}}function F(e){return!e||typeof e!=`object`||!e.roundId||!Array.isArray(e.players)?null:{roomCode:T(e.roomCode),roundId:String(e.roundId),status:e.status===`finished`?`finished`:`playing`,host:l(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:l(e.turnAddress),players:e.players.map(U).filter(Boolean),lastAction:String(e.lastAction||``),winner:e.winner?l(e.winner):null,showdown:e.showdown&&typeof e.showdown==`object`?W(e.showdown):null,appliedEventIds:Array.isArray(e.appliedEventIds)?e.appliedEventIds.map(String):[],actionCounts:e.actionCounts&&typeof e.actionCounts==`object`?W(e.actionCounts):{},compareReveal:e.compareReveal&&typeof e.compareReveal==`object`?W(e.compareReveal):{},lastCompare:e.lastCompare&&typeof e.lastCompare==`object`?W(e.lastCompare):null,finishedAt:e.finishedAt?Number(e.finishedAt):null}}function I(e,t,n){let r=F(e);if(!r||r.status!==`playing`)return{ok:!1,error:`当前没有进行中的牌局`};let i=l(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(!b.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=l(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 L(e,t,n){let r=I(e,t,n);if(!r.ok)return{ok:!1,error:r.error,state:e};let i=W(e),a=l(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} 看牌`,H(i);if(t.action===`fold`)return o.status=`folded`,i.lastAction=`${o.name} 弃牌`,B(i,a),V(i,a);if(t.action===`call`)return o.chips-=10,o.bet+=10,i.pot+=10,i.lastAction=`${o.name} 跟注`,B(i,a),V(i,a);if(t.action===`raise`){let e=Number(t.amount);return i.currentBet+=e,z(i,o),i.lastAction=`${o.name} 加注 ${e}`,B(i,a),V(i,a)}if(t.action===`compare`){z(i,o);let e=l(t.target),n=i.players.find(t=>t.address===e),r=o.looked,s=n.looked,c=P(i.hands?.[a]||[],i.hands?.[e]||[]),u=c>=0?o:n,d=c>=0?n:o;d.status=`folded`,d.looked=!0,i.compareReveal||={};let f=r&&s,p=!r&&!s;if(f)i.compareReveal[a]=i.hands?.[e]||[],i.compareReveal[e]=i.hands?.[a]||[];else if(p)i.compareReveal[d.address]=i.hands?.[u.address]||[];else{let e=r?o:n,t=r?n:o;i.compareReveal[e.address]=i.hands?.[t.address]||[],i.compareReveal[d.address]=i.hands?.[u.address]||[]}return i.lastCompare={initiator:a,target:e,winner:u.address,loser:d.address,initiatorLooked:r,targetLooked:s,timestamp:Date.now()},i.lastAction=`${o.name} 与 ${n.name} 比牌,${d.name} 出局`,B(i,a),V(i,a)}return{ok:!1,error:`未知操作`,state:e}}function R(e){return(e?.players||[]).filter(e=>e.status===`active`)}function ge(e,t){let n=(e?.players||[]).find(e=>e.address===l(t));if(!e||e.status!==`playing`||!n||n.status!==`active`||e.turnAddress!==n.address)return[];let r=[];return n.looked||r.push(`look`),I(e,{action:`call`},n.address).ok&&r.push(`call`),b.some(t=>I(e,{action:`raise`,amount:t},n.address).ok)&&r.push(`raise`),R(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 z(e,t){let n=Math.max(0,e.currentBet-t.bet);t.chips-=n,t.bet+=n,e.pot+=n}function B(e,t){e.actionCounts||={},e.actionCounts[t]=(e.actionCounts[t]||0)+1}function V(e,t){let n=R(e);return n.length===1?_e(e,n[0].address):(e.turnAddress=ve(e,t),H(e))}function _e(e,t){let n=e.players.find(e=>e.address===t),r=e.pot;return n&&(n.chips+=e.pot),e.status=`finished`,e.winner=t,e.winAmount=r,e.turnAddress=``,e.showdown=e.hands?W(e.hands):null,e.lastAction=n?`${n.name} 赢得 ${r} 筹码`:`本局结束`,e.pot=0,e.finishedAt=Date.now(),H(e)}function ve(e,t){let n=e.players,r=Math.max(0,n.findIndex(e=>e.address===l(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 H(e){return e.seq=Number(e.seq||0)+1,{ok:!0,state:e}}function U(e){if(!e||typeof e!=`object`)return null;let t=l(e.address);return t?{address:t,name:String(e.name||p(t)).slice(0,50),avatar:c(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 W(e){return JSON.parse(JSON.stringify(e))}var G={page:`_page_p8eol_1`,headerActions:`_headerActions_p8eol_12`,entry:`_entry_p8eol_18`,entryBrand:`_entryBrand_p8eol_28`,cardMark:`_cardMark_p8eol_34`,entryPanel:`_entryPanel_p8eol_62`,accountLine:`_accountLine_p8eol_72`,joinForm:`_joinForm_p8eol_89`,status:`_status_p8eol_110`,board:`_board_p8eol_116`,table:`_table_p8eol_123`,tableCenter:`_tableCenter_p8eol_144`,finishBanner:`_finishBanner_p8eol_173`,finishBannerIcon:`_finishBannerIcon_p8eol_192`,seats:`_seats_p8eol_196`,seat:`_seat_p8eol_196`,seatTurn:`_seatTurn_p8eol_218`,seatWinner:`_seatWinner_p8eol_223`,seatFolded:`_seatFolded_p8eol_228`,seatAvatar:`_seatAvatar_p8eol_232`,seatAvatarOffline:`_seatAvatarOffline_p8eol_252`,onlineDot:`_onlineDot_p8eol_257`,seatMain:`_seatMain_p8eol_269`,seatMeta:`_seatMeta_p8eol_270`,panel:`_panel_p8eol_301`,panelSection:`_panelSection_p8eol_308`,panelTitle:`_panelTitle_p8eol_318`,hand:`_hand_p8eol_328`,card:`_card_p8eol_34`,red:`_red_p8eol_362`,black:`_black_p8eol_366`,cardBack:`_cardBack_p8eol_370`,handLabel:`_handLabel_p8eol_391`,actionGrid:`_actionGrid_p8eol_398`,raiseRow:`_raiseRow_p8eol_399`,statusGrid:`_statusGrid_p8eol_410`,muted:`_muted_p8eol_428`,compareOverlay:`_compareOverlay_p8eol_435`,compareBox:`_compareBox_p8eol_447`,compareTitle:`_compareTitle_p8eol_461`,comparePlayers:`_comparePlayers_p8eol_467`,compareSide:`_compareSide_p8eol_474`,compareWinner:`_compareWinner_p8eol_486`,compareName:`_compareName_p8eol_491`,compareCards:`_compareCards_p8eol_502`,compareLabel:`_compareLabel_p8eol_527`,compareVs:`_compareVs_p8eol_533`,compareResult:`_compareResult_p8eol_540`},K=n(),q=`zhajinhua`;function J(...e){return e.filter(Boolean).join(` `)}function Y(e,t){return String(e||``).toLowerCase()===String(t||``).toLowerCase()}function ye(e=``){return e?`${e.slice(0,6)}...${e.slice(-4)}`:``}function be(e){return e.displayName||e.username}function xe(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}=h(),t=f(e=>e.addToast),n=a(e=>e.initializeUser),[i,o]=(0,y.useState)(``),[c,l]=(0,y.useState)(!1),u=(0,y.useRef)(``),p=(0,y.useRef)(!1),[m,x]=(0,y.useState)(20),[S,C]=(0,y.useState)(``),[ce,w]=(0,y.useState)({}),[le,T]=(0,y.useState)(!0),[E,D]=(0,y.useState)(!1),O=(0,y.useRef)(null),k=(0,y.useRef)(new Set),A=ie({gameId:q,onError:e=>t(e,`error`),getPlayerPayload:e=>{let t=s(e.danger);return{address:e.address,name:be(e),avatar:e.avatar||``,publicKey:t.public_key,joinedAt:Date.now()}}}),j=(0,y.useMemo)(()=>A.userIdentity?.danger?s(A.userIdentity.danger):null,[A.userIdentity?.danger]);(0,y.useEffect)(()=>{n()},[n]),(0,y.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get(`room`)?.toUpperCase();e&&(o(e),u.current=e)},[]),(0,y.useEffect)(()=>{let n=u.current;!n||p.current||!A.isBackendReady||!A.userIdentity||(p.current=!0,u.current=``,A.joinRoom(n).then(n=>{n&&t(e(`game.toast.joinedRoom`),`success`)}))},[A.isBackendReady,A.userIdentity,A.joinRoom,t,e]),(0,y.useEffect)(()=>{if(!A.roomCode)return;let e=`/game/zhajinhua?room=${A.roomCode}`;`${window.location.pathname}${window.location.search}`!==e&&window.history.replaceState(null,``,e)},[A.roomCode]);let M=(0,y.useMemo)(()=>ne(A.messages,{gameId:q,roomCode:A.roomCode}),[A.messages,A.roomCode]),N=(0,y.useMemo)(()=>re(A.messages,{gameId:q,roomCode:A.roomCode}),[A.messages,A.roomCode])?.payload?.round||null,P=N?.host||M.hostAddress,F=Y(P,A.userIdentity?.address),I=A.userIdentity?.address?.toLowerCase()||``,z=N?.players.find(e=>Y(e.address,I)),B=z||M.players.find(e=>Y(e.address,I)),V=ce[N?.roundId||``]||null,_e=N?.showdown&&I?N.showdown[I]:null,ve=N?.compareReveal&&I?N.compareReveal[I]:null,H=_e||ve||(z?.looked?V:null),U=ge(N,I),W=R(N),X=F&&fe(M.players.map(e=>({...e,chips:N?.players.find(t=>Y(t.address,e.address))?.chips??1e3}))),Q=A.roomCode&&typeof window<`u`?`${window.location.origin}/game/zhajinhua?room=${A.roomCode}`:``;(0,y.useEffect)(()=>{if(!(!N||!A.userIdentity||!j||!P))for(let e of A.roomEvents){let t=e.event;if(!t||t.event!==`deal:private`)continue;let n=t.payload;if(n.roundId!==N.roundId||!Y(n.recipient,A.userIdentity.address))continue;let r=d(n.encrypted||``,{senderPublicKey:n.senderPublicKey||``,recipientPrivateKey:j.private_key});if(r)try{let e=JSON.parse(r);Array.isArray(e)&&w(t=>({...t,[N.roundId]:e.map(String)}))}catch{}}},[N?.roundId,A.roomEvents,A.userIdentity,P,j?.private_key]),(0,y.useEffect)(()=>{if(N?.status===`finished`&&N.winner){T(!0);let e=setTimeout(()=>T(!1),5e3);return()=>clearTimeout(e)}},[N?.finishedAt,N?.status,N?.winner]),(0,y.useEffect)(()=>{if(N?.lastCompare?.timestamp){D(!0);let e=setTimeout(()=>D(!1),5e3);return()=>clearTimeout(e)}else D(!1)},[N?.lastCompare?.timestamp,N?.roundId]),(0,y.useEffect)(()=>{if(!F||!N||N.status!==`playing`)return;let e=O.current;if(!e)return;let t=A.roomEvents.filter(e=>{let t=e.event;if(!t||t.event!==`player:action`)return!1;let n=t.payload.actionEvent;return!(!n||n.roundId!==N.roundId||k.current.has(n.eventId)||N.appliedEventIds?.includes(n.eventId))});if(t.length===0)return;let n=!1;async function r(){let r=he(N,e);if(r)for(let e of t){if(n)return;let t=(e.event?.payload).actionEvent,i=L(r,t,e.message.author);if(!i.ok){let n=e.message.author;if(!Y(n,A.userIdentity?.address)&&r.status===`playing`&&Y(r.turnAddress,n)){let e=L(r,de({roundId:r.roundId,action:`call`,amount:void 0,target:void 0}),n);if(e.ok)i=e;else{let e=L(r,de({roundId:r.roundId,action:`fold`,amount:void 0,target:void 0}),n);e.ok&&(i=e)}}if(!i.ok){k.current.add(t.eventId);continue}}if(r=i.state,O.current=i.state.hands,await De(i.state)&&k.current.add(t.eventId),i.state.status===`finished`)break}}return r(),()=>{n=!0}},[N?.roundId,N?.seq,N?.status,A.roomEvents,F]);async function we(){await A.createRoom()&&t(e(`game.toast.roomCreated`),`success`)}async function Te(n){n.preventDefault(),await A.joinRoom(i)&&t(e(`game.toast.joinedRoom`),`success`)}async function Ee(){Q&&(await navigator.clipboard.writeText(Q),l(!0),setTimeout(()=>l(!1),1400))}async function De(e){return A.sendRoomEvent(`room:state`,{round:me(e),seq:e.seq})}async function Oe(){if(!A.userIdentity||!j||!X){t(e(`game.zhajinhua.error.notEnoughPlayers`),`error`);return}try{let n=M.players.map(e=>({...e,chips:N?.players.find(t=>Y(t.address,e.address))?.chips??1e3})),i=pe({roomCode:A.roomCode,players:n,hostAddress:A.userIdentity.address,previousSeq:N?.seq||0,previousWinner:N?.winner||``});O.current=i.hands,k.current.clear(),await De(i);for(let e of i.players){let t=r(JSON.stringify(i.hands[e.address]),{senderPrivateKey:j.private_key,recipientPublicKey:e.publicKey});await A.sendRoomEvent(`deal:private`,{roundId:i.roundId,recipient:e.address,senderPublicKey:j.public_key,encrypted:t})}w(e=>({...e,[i.roundId]:i.hands[A.userIdentity.address.toLowerCase()]})),t(e(`game.zhajinhua.toast.roundStarted`),`success`)}catch(n){t(n instanceof Error?n.message:e(`game.zhajinhua.error.startFailed`),`error`)}}async function $(e,t={}){if(!N||!A.userIdentity)return;let n=de({roundId:N.roundId,action:e,amount:t.amount,target:t.target});await A.sendRoomEvent(`player:action`,{actionEvent:n})}let ke=N?.status===`playing`?Y(N.turnAddress,I)?e(`game.zhajinhua.status.yourTurn`):N.turnAddress?e(`game.zhajinhua.status.waitingPlayer`,{player:Z(N.turnAddress,M.players,A.presenceByAddress)}):e(`game.status.playing`):N?.status===`finished`?e(`game.status.finished`):e(`game.status.waitingStart`),Ae=W.filter(e=>!Y(e.address,I));return(0,K.jsx)(_,{sidebar:({closeSidebar:e})=>(0,K.jsx)(te,{activeGame:`zhajinhua`,closeSidebar:e}),headerTitle:(0,K.jsx)(`h2`,{className:`header-title`,children:e(`game.zhajinhua.title`)}),headerRight:(0,K.jsx)(`div`,{className:G.headerActions,children:A.roomCode&&(0,K.jsxs)(`button`,{className:`btn btn-sm`,onClick:Ee,children:[(0,K.jsx)(g,{size:14}),e(c?`common.copied`:`game.action.shareRoom`)]})}),children:(0,K.jsx)(`main`,{className:G.page,children:A.roomCode?(0,K.jsxs)(`div`,{className:G.board,children:[(0,K.jsxs)(`section`,{className:G.table,children:[N?.status===`finished`&&N.winner&&le&&(0,K.jsxs)(`div`,{className:G.finishBanner,children:[(0,K.jsx)(`span`,{className:G.finishBannerIcon,children:`🏆`}),(0,K.jsx)(`span`,{children:e(`game.zhajinhua.result.winChips`,{player:Z(N.winner,M.players,A.presenceByAddress),amount:N.winAmount??0})})]}),N?.lastCompare&&E&&(0,K.jsx)(Se,{lastCompare:N.lastCompare,compareReveal:N.compareReveal||{},myAddress:I,myDealtHand:V,lobbyPlayers:M.players,presenceByAddress:A.presenceByAddress,onClose:()=>D(!1)}),(0,K.jsxs)(`div`,{className:G.tableCenter,children:[(0,K.jsx)(`span`,{children:e(`game.zhajinhua.pot`)}),(0,K.jsx)(`strong`,{children:N?.pot||0}),(0,K.jsx)(`small`,{children:e(`game.zhajinhua.currentBet`,{amount:N?.currentBet||0})})]}),(0,K.jsx)(`div`,{className:G.seats,children:M.players.map(t=>{let n=N?.players.find(e=>Y(e.address,t.address)),r=Ce(t,A.presenceByAddress,A.onlineAddresses),i=N?.turnAddress===t.address,a=N?.winner===t.address,o=n?.status===`folded`;return(0,K.jsxs)(`div`,{className:J(G.seat,i&&G.seatTurn,a&&G.seatWinner,o&&G.seatFolded),children:[(0,K.jsxs)(`div`,{className:J(G.seatAvatar,!r.online&&G.seatAvatarOffline),children:[(0,K.jsx)(`img`,{src:oe(t.address,r.avatar),alt:``}),r.online&&(0,K.jsx)(`span`,{className:G.onlineDot})]}),(0,K.jsxs)(`div`,{className:G.seatMain,children:[(0,K.jsx)(`strong`,{translate:`no`,children:r.name}),(0,K.jsx)(`span`,{translate:`no`,children:ye(t.address)})]}),(0,K.jsxs)(`div`,{className:G.seatMeta,children:[(0,K.jsx)(`span`,{children:e(`game.zhajinhua.chips`,{amount:n?.chips??1e3})}),(0,K.jsx)(`span`,{children:n?.status===`folded`?e(`game.zhajinhua.player.folded`):n?.looked?e(`game.zhajinhua.player.looked`):e(N?`game.zhajinhua.player.inRound`:`game.status.waitingStart`)})]})]},t.address)})})]}),(0,K.jsxs)(`aside`,{className:G.panel,children:[(0,K.jsxs)(`div`,{className:G.panelSection,children:[(0,K.jsxs)(`div`,{className:G.panelTitle,children:[(0,K.jsx)(v,{size:16}),(0,K.jsx)(`span`,{children:e(`game.zhajinhua.myHand`)})]}),(0,K.jsx)(`div`,{className:G.hand,children:H?H.map(e=>{let t=xe(e),n=`${t.suit}${t.rank}`;return(0,K.jsxs)(`div`,{className:J(G.card,G[t.color]),children:[(0,K.jsx)(`span`,{children:n}),(0,K.jsx)(`i`,{children:t.suit})]},e)}):[0,1,2].map(e=>(0,K.jsx)(`div`,{className:G.cardBack,children:(0,K.jsx)(v,{size:18})},e))}),(0,K.jsx)(`p`,{className:G.handLabel,children:H?ue(H):e(V?`game.zhajinhua.hand.unlooked`:`game.zhajinhua.hand.waitingDeal`)})]}),(0,K.jsxs)(`div`,{className:G.panelSection,children:[(0,K.jsxs)(`div`,{className:G.panelTitle,children:[(0,K.jsx)(ee,{size:16}),(0,K.jsx)(`span`,{children:e(`game.actions`)})]}),F?(0,K.jsxs)(`button`,{className:`btn btn-primary btn-full`,onClick:Oe,disabled:!X||N?.status===`playing`,children:[(0,K.jsx)(se,{size:16}),N?.status===`finished`?e(`game.action.nextRound`):e(`game.action.startRound`)]}):(0,K.jsx)(`p`,{className:G.muted,children:e(`game.waitingHost`)}),F&&N?.status===`finished`&&!X&&(0,K.jsx)(`p`,{className:G.muted,children:e(`game.zhajinhua.error.tooManyLowChips`)}),(0,K.jsxs)(`div`,{className:G.actionGrid,children:[(0,K.jsxs)(`button`,{className:`btn btn-secondary`,disabled:!U.includes(`look`),onClick:()=>$(`look`),children:[(0,K.jsx)(ae,{size:16}),e(`game.zhajinhua.action.look`)]}),(0,K.jsx)(`button`,{className:`btn btn-secondary`,disabled:!U.includes(`call`),onClick:()=>$(`call`),children:e(`game.zhajinhua.action.call`)}),(0,K.jsx)(`button`,{className:`btn btn-secondary`,disabled:!U.includes(`fold`),onClick:()=>$(`fold`),children:e(`game.zhajinhua.action.fold`)})]}),(0,K.jsxs)(`div`,{className:G.raiseRow,children:[(0,K.jsx)(`select`,{className:`input input-compact`,value:m,onChange:e=>x(Number(e.target.value)),children:b.map(t=>(0,K.jsx)(`option`,{value:t,children:e(`game.zhajinhua.action.raiseOption`,{amount:t})},t))}),(0,K.jsx)(`button`,{className:`btn btn-secondary`,disabled:!U.includes(`raise`),onClick:()=>$(`raise`,{amount:m}),children:e(`game.zhajinhua.action.raise`)})]}),(0,K.jsxs)(`div`,{className:G.raiseRow,children:[(0,K.jsxs)(`select`,{className:`input input-compact`,value:S,onChange:e=>C(e.target.value),children:[(0,K.jsx)(`option`,{value:``,children:e(`game.zhajinhua.action.comparePlaceholder`)}),Ae.map(e=>(0,K.jsx)(`option`,{value:e.address,children:Z(e.address,Ae,A.presenceByAddress)},e.address))]}),(0,K.jsx)(`button`,{className:`btn btn-secondary`,disabled:!U.includes(`compare`)||!S,onClick:()=>$(`compare`,{target:S}),children:e(`game.zhajinhua.action.compare`)})]})]}),(0,K.jsxs)(`div`,{className:G.panelSection,children:[(0,K.jsx)(`div`,{className:G.panelTitle,children:e(`game.status.title`)}),(0,K.jsxs)(`div`,{className:G.statusGrid,children:[(0,K.jsx)(`span`,{children:e(`game.host`)}),(0,K.jsx)(`strong`,{children:P?ye(P):`-`}),(0,K.jsx)(`span`,{children:e(`game.zhajinhua.myChips`)}),(0,K.jsx)(`strong`,{children:B?.chips??1e3}),(0,K.jsx)(`span`,{children:e(`game.round`)}),(0,K.jsx)(`strong`,{children:ke}),(0,K.jsx)(`span`,{children:e(`game.hint`)}),(0,K.jsx)(`strong`,{children:N?.lastAction||e(`game.waitingPlayers`)})]})]})]})]}):(0,K.jsxs)(`section`,{className:G.entry,children:[(0,K.jsxs)(`div`,{className:G.entryBrand,children:[(0,K.jsx)(`div`,{className:G.cardMark,children:(0,K.jsx)(v,{size:48})}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`h1`,{children:e(`game.zhajinhua.hero.title`)}),(0,K.jsx)(`p`,{children:e(`game.hero.desc`)})]})]}),(0,K.jsxs)(`div`,{className:G.entryPanel,children:[(0,K.jsxs)(`div`,{className:G.accountLine,children:[(0,K.jsx)(`span`,{children:e(`game.currentAccount`)}),(0,K.jsx)(`strong`,{translate:`no`,children:A.userIdentity?.displayName||e(`web3.notSignedIn`)})]}),(0,K.jsxs)(`button`,{className:`btn btn-primary`,disabled:A.joining,onClick:we,children:[(0,K.jsx)(ee,{size:16}),e(`game.action.createRoom`)]}),(0,K.jsxs)(`form`,{onSubmit:Te,className:G.joinForm,children:[(0,K.jsxs)(`label`,{children:[e(`game.roomCode`),(0,K.jsx)(`input`,{value:i,maxLength:8,onChange:e=>o(e.target.value.toUpperCase()),placeholder:e(`game.roomCode.placeholder`)})]}),(0,K.jsx)(`button`,{className:`btn`,disabled:A.joining||!i,children:e(`game.action.joinRoom`)})]}),(0,K.jsx)(`p`,{className:G.status,children:A.isBackendReady?e(`game.status.nodeConnected`):e(`game.status.nodeConnecting`)})]})]})})})}function Se({lastCompare:e,compareReveal:t,myAddress:n,myDealtHand:r,lobbyPlayers:i,presenceByAddress:a,onClose:o}){let{t:s}=h(),c=Z(e.initiator,i,a),l=Z(e.target,i,a),u=Z(e.winner,i,a),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,K.jsx)(`div`,{className:G.compareOverlay,onClick:o,children:(0,K.jsxs)(`div`,{className:G.compareBox,onClick:e=>e.stopPropagation(),children:[(0,K.jsx)(`div`,{className:G.compareTitle,children:s(`game.zhajinhua.compareResult`)}),(0,K.jsxs)(`div`,{className:G.comparePlayers,children:[(0,K.jsxs)(`div`,{className:J(G.compareSide,Y(e.winner,e.initiator)&&G.compareWinner),children:[(0,K.jsx)(`div`,{className:G.compareName,children:c}),(0,K.jsx)(`div`,{className:G.compareCards,children:g?g.map(e=>{let t=xe(e);return(0,K.jsxs)(`div`,{className:J(G.card,G[t.color]),children:[(0,K.jsx)(`span`,{children:t.rank}),(0,K.jsx)(`i`,{children:t.suit})]},e)}):[0,1,2].map(e=>(0,K.jsx)(`div`,{className:G.cardBack,children:(0,K.jsx)(v,{size:18})},e))}),g&&(0,K.jsx)(`div`,{className:G.compareLabel,children:ue(g)})]}),(0,K.jsx)(`div`,{className:G.compareVs,children:`VS`}),(0,K.jsxs)(`div`,{className:J(G.compareSide,Y(e.winner,e.target)&&G.compareWinner),children:[(0,K.jsx)(`div`,{className:G.compareName,children:l}),(0,K.jsx)(`div`,{className:G.compareCards,children:_?_.map(e=>{let t=xe(e);return(0,K.jsxs)(`div`,{className:J(G.card,G[t.color]),children:[(0,K.jsx)(`span`,{children:t.rank}),(0,K.jsx)(`i`,{children:t.suit})]},e)}):[0,1,2].map(e=>(0,K.jsx)(`div`,{className:G.cardBack,children:(0,K.jsx)(v,{size:18})},e))}),_&&(0,K.jsx)(`div`,{className:G.compareLabel,children:ue(_)})]})]}),(0,K.jsx)(`div`,{className:G.compareResult,children:s(`game.zhajinhua.result.winner`,{player:u})}),(0,K.jsx)(`button`,{className:`btn btn-sm`,onClick:o,children:s(`common.close`)})]})})}function Z(e,t,n){let r=Q(e);return n.get(r)?.displayName||t.find(e=>Q(e.address)===r)?.name||ye(e)}function Q(e=``){return String(e||``).trim().toLowerCase()}function Ce(e,t,n){let r=Q(e.address),i=t.get(r);return{name:Z(e.address,[e],t),avatar:i?.avatar||e.avatar||``,online:r?n.has(r):!1}}var we=o(`/game/zhajinhua/`)({component:X});export{we as Route};