most-box 0.3.8 → 0.3.9

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 (63) hide show
  1. package/README.md +12 -12
  2. package/electron/main.js +1 -1
  3. package/out/about/index.html +2 -2
  4. package/out/admin/index.html +0 -0
  5. package/out/app/index.html +0 -0
  6. package/out/assets/{AccountMenu-C3wvcWtn.js → AccountMenu-BpUGPUSa.js} +1 -1
  7. package/out/assets/{AppShell-BN1uaxn1.js → AppShell-kfQyRhZy.js} +1 -1
  8. package/out/assets/{AppTop-iPNi3cv5.js → AppTop-DydClKUv.js} +1 -1
  9. package/out/assets/{CopyButton-BfQ-TOoR.js → CopyButton-BN_vYKM8.js} +1 -1
  10. package/out/assets/{MarketingHeader-Bh6LcQOj.js → MarketingHeader-B0jpxRYu.js} +1 -1
  11. package/out/assets/MarketingLayout-D42kTRyf.js +1 -0
  12. package/out/assets/{MilkdownEditor-4FuwE6Td.js → MilkdownEditor-B9vfoUP9.js} +1 -1
  13. package/out/assets/{OpenSidebarButton-09yeNDLa.js → OpenSidebarButton-BxKh_O5b.js} +1 -1
  14. package/out/assets/{chatJoinInvite-7tuD-STm.js → chatJoinInvite-Cwot1ykh.js} +1 -1
  15. package/out/assets/i18n-BPfshhQc.js +1 -0
  16. package/out/assets/{index-CCU5Z4K-.js → index-AZPpawN1.js} +3 -3
  17. package/out/assets/index-BP12tZtg.css +1 -0
  18. package/out/assets/{index.lazy-CbtY_wql.js → index.lazy-1oSrUtEc.js} +1 -1
  19. package/out/assets/index.lazy-B3eWk7i-.js +1 -0
  20. package/out/assets/{index.lazy-D9zm7DgW.js → index.lazy-BszFGhgk.js} +1 -1
  21. package/out/assets/{index.lazy-DhhSG0Me.js → index.lazy-CBPOnT1S.js} +1 -1
  22. package/out/assets/index.lazy-CJVtmxt4.js +1 -0
  23. package/out/assets/index.lazy-CJlJl0xA.js +1 -0
  24. package/out/assets/index.lazy-CUZLrlgS.js +2 -0
  25. package/out/assets/{index.lazy-DQA4yE6c.js → index.lazy-CV52vPw7.js} +1 -1
  26. package/out/assets/{index.lazy-Dl8LX4dH.js → index.lazy-CfmDMCbY.js} +1 -1
  27. package/out/assets/{index.lazy-DH1bcYry.js → index.lazy-ClcVulXE.js} +1 -1
  28. package/out/assets/index.lazy-DRAWcYlR.js +1 -0
  29. package/out/assets/index.lazy-Duk6GK1e.js +1 -0
  30. package/out/assets/{index.lazy-BMh0Oy3C.js → index.lazy-DxIMDfLH.js} +1 -1
  31. package/out/assets/{index.lazy-B2-v2OGR.js → index.lazy-e02LZDAI.js} +1 -1
  32. package/out/assets/{index.lazy-CsgZmOLX.js → index.lazy-qvhZXEAD.js} +1 -1
  33. package/out/assets/messages-square-Dr9v7Ilv.js +1 -0
  34. package/out/assets/plus-C7wBmZvh.js +1 -0
  35. package/out/assets/{saveLocalFile-DkrpR5WS.js → saveLocalFile-Dsoo9PmH.js} +1 -1
  36. package/out/assets/{useChannelMessages-Ea1I0HsF.js → useChannelMessages-ncgJxjR8.js} +1 -1
  37. package/out/assets/{useGameRoom-CqeouPP_.js → useGameRoom-BHZNzWJt.js} +1 -1
  38. package/out/chat/index.html +0 -0
  39. package/out/chat/join/demo/index.html +0 -0
  40. package/out/chat/join/index.html +0 -0
  41. package/out/download/index.html +2 -2
  42. package/out/game/gandengyan/index.html +0 -0
  43. package/out/game/index.html +0 -0
  44. package/out/game/zhajinhua/index.html +0 -0
  45. package/out/index.html +2 -2
  46. package/out/note/index.html +0 -0
  47. package/out/ping/index.html +2 -2
  48. package/out/profile/index.html +0 -0
  49. package/out/web3/index.html +0 -0
  50. package/package.json +2 -1
  51. package/server/src/core/cid.js +1 -1
  52. package/server/src/core/zhajinhua.js +0 -88
  53. package/out/assets/MarketingLayout-9X-D6xx4.js +0 -1
  54. package/out/assets/chatNoteDraft-D6FEmSXK.js +0 -1
  55. package/out/assets/i18n-DKsg67mH.js +0 -1
  56. package/out/assets/index-FEwag7ej.css +0 -1
  57. package/out/assets/index.lazy-1YPf8Ys8.js +0 -1
  58. package/out/assets/index.lazy-7EjTGodD.js +0 -1
  59. package/out/assets/index.lazy-BBsa7aDt.js +0 -1
  60. package/out/assets/index.lazy-BJh0zxMI.js +0 -3
  61. package/out/assets/index.lazy-Bi5tHgok.js +0 -1
  62. package/out/assets/index.lazy-Q-Lr-abQ.js +0 -2
  63. package/out/assets/message-square-0kQmuMcd.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,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
+ 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-BPfshhQc.js";import{a as u}from"./AccountMenu-BpUGPUSa.js";import{t as te}from"./OpenSidebarButton-BxKh_O5b.js";import{a as d,i as f,n as ne,o as re,r as p,t as ie}from"./saveLocalFile-Dsoo9PmH.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-kfQyRhZy.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-AZPpawN1.js";import{t as ve}from"./AppTop-DydClKUv.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};
@@ -0,0 +1 @@
1
+ import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r,H as i}from"./useAppStore-Pjif7nCR.js";import{a}from"./i18n-BPfshhQc.js";import{n as o,t as s}from"./smartphone-D9j5h2Pg.js";import{t as c}from"./messages-square-Dr9v7Ilv.js";import{t as l}from"./music-U7NZcQ6S.js";import{t as u}from"./play-B6IGTGxm.js";import{t as d}from"./search-CURHlVZZ.js";import{t as f}from"./send-yxXCy-t8.js";import{t as p}from"./wifi-B1v_i_dr.js";import{t as m}from"./MarketingLayout-D42kTRyf.js";var h=r(`at-sign`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8`,key:`7n84p3`}]]),g=r(`book-open`,[[`path`,{d:`M12 7v14`,key:`1akyts`}],[`path`,{d:`M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z`,key:`ruj8y`}]]),ee=r(`bot`,[[`path`,{d:`M12 8V4H8`,key:`hb8ula`}],[`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`,key:`enze0r`}],[`path`,{d:`M2 14h2`,key:`vft8re`}],[`path`,{d:`M20 14h2`,key:`4cs60a`}],[`path`,{d:`M15 13v2`,key:`1xurst`}],[`path`,{d:`M9 13v2`,key:`rq6x2g`}]]),_=r(`camera`,[[`path`,{d:`M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z`,key:`18u6gg`}],[`circle`,{cx:`12`,cy:`13`,r:`3`,key:`1vg3eu`}]]),v=r(`package`,[[`path`,{d:`M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z`,key:`1a0edw`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}]]),y=r(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),b=r(`terminal`,[[`path`,{d:`M12 19h8`,key:`baeox8`}],[`path`,{d:`m4 17 6-6-6-6`,key:`1yngyt`}]]),te=r(`triangle`,[[`path`,{d:`M13.73 4a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z`,key:`14u9p9`}]]),x=t(e(),1);function ne(e,t){let n=e.icons,r=e.aliases||Object.create(null),i=Object.create(null);function a(e){if(n[e])return i[e]=[];if(!(e in i)){i[e]=null;let t=r[e]&&r[e].parent,n=t&&a(t);n&&(i[e]=[t].concat(n))}return i[e]}return Object.keys(n).concat(Object.keys(r)).forEach(a),i}var re=Object.freeze({left:0,top:0,width:16,height:16}),S=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),C=Object.freeze({...re,...S}),w=Object.freeze({...C,body:``,hidden:!1});function ie(e,t){let n={};!e.hFlip!=!t.hFlip&&(n.hFlip=!0),!e.vFlip!=!t.vFlip&&(n.vFlip=!0);let r=((e.rotate||0)+(t.rotate||0))%4;return r&&(n.rotate=r),n}function T(e,t){let n=ie(e,t);for(let r in w)r in S?r in e&&!(r in n)&&(n[r]=S[r]):r in t?n[r]=t[r]:r in e&&(n[r]=e[r]);return n}function ae(e,t,n){let r=e.icons,i=e.aliases||Object.create(null),a={};function o(e){a=T(r[e]||i[e],a)}return o(t),n.forEach(o),T(e,a)}function E(e,t){let n=[];if(typeof e!=`object`||typeof e.icons!=`object`)return n;e.not_found instanceof Array&&e.not_found.forEach(e=>{t(e,null),n.push(e)});let r=ne(e);for(let i in r){let a=r[i];a&&(t(i,ae(e,i,a)),n.push(i))}return n}var oe={provider:``,aliases:{},not_found:{},...re};function D(e,t){for(let n in t)if(n in e&&typeof e[n]!=typeof t[n])return!1;return!0}function O(e){if(typeof e!=`object`||!e)return null;let t=e;if(typeof t.prefix!=`string`||!e.icons||typeof e.icons!=`object`||!D(e,oe))return null;let n=t.icons;for(let e in n){let t=n[e];if(!e||typeof t.body!=`string`||!D(t,w))return null}let r=t.aliases||Object.create(null);for(let e in r){let t=r[e],i=t.parent;if(!e||typeof i!=`string`||!n[i]&&!r[i]||!D(t,w))return null}return t}var k=Object.create(null);function se(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:new Set}}function A(e,t){let n=k[e]||(k[e]=Object.create(null));return n[t]||(n[t]=se(e,t))}function ce(e,t){return O(t)?E(t,(t,n)=>{n?e.icons[t]=n:e.missing.add(t)}):[]}function le(e,t,n){try{if(typeof n.body==`string`)return e.icons[t]={...n},!0}catch{}return!1}var ue=/^[a-z0-9]+(-[a-z0-9]+)*$/,j=(e,t,n,r=``)=>{let i=e.split(`:`);if(e.slice(0,1)===`@`){if(i.length<2||i.length>3)return null;r=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){let e=i.pop(),n=i.pop(),a={provider:i.length>0?i[0]:r,prefix:n,name:e};return t&&!M(a)?null:a}let a=i[0],o=a.split(`-`);if(o.length>1){let e={provider:r,prefix:o.shift(),name:o.join(`-`)};return t&&!M(e)?null:e}if(n&&r===``){let e={provider:r,prefix:``,name:a};return t&&!M(e,n)?null:e}return null},M=(e,t)=>e?!!((t&&e.prefix===``||e.prefix)&&e.name):!1,N=!1;function P(e){return typeof e==`boolean`&&(N=e),N}function F(e){let t=typeof e==`string`?j(e,!0,N):e;if(t){let e=A(t.provider,t.prefix),n=t.name;return e.icons[n]||(e.missing.has(n)?null:void 0)}}function de(e,t){let n=j(e,!0,N);if(!n)return!1;let r=A(n.provider,n.prefix);return t?le(r,n.name,t):(r.missing.add(n.name),!0)}function fe(e,t){if(typeof e!=`object`)return!1;if(typeof t!=`string`&&(t=e.provider||``),N&&!t&&!e.prefix){let t=!1;return O(e)&&(e.prefix=``,E(e,(e,n)=>{de(e,n)&&(t=!0)})),t}let n=e.prefix;return M({prefix:n,name:`a`})?!!ce(A(t,n),e):!1}var I=Object.freeze({width:null,height:null}),L=Object.freeze({...I,...S}),pe=/(-?[0-9.]*[0-9]+[0-9.]*)/g,me=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function R(e,t,n){if(t===1)return e;if(n||=100,typeof e==`number`)return Math.ceil(e*t*n)/n;if(typeof e!=`string`)return e;let r=e.split(pe);if(r===null||!r.length)return e;let i=[],a=r.shift(),o=me.test(a);for(;;){if(o){let e=parseFloat(a);isNaN(e)?i.push(a):i.push(Math.ceil(e*t*n)/n)}else i.push(a);if(a=r.shift(),a===void 0)return i.join(``);o=!o}}function he(e,t=`defs`){let n=``,r=e.indexOf(`<`+t);for(;r>=0;){let i=e.indexOf(`>`,r),a=e.indexOf(`</`+t);if(i===-1||a===-1)break;let o=e.indexOf(`>`,a);if(o===-1)break;n+=e.slice(i+1,a).trim(),e=e.slice(0,r).trim()+e.slice(o+1)}return{defs:n,content:e}}function ge(e,t){return e?`<defs>`+e+`</defs>`+t:t}function _e(e,t,n){let r=he(e);return ge(r.defs,t+r.content+n)}var ve=e=>e===`unset`||e===`undefined`||e===`none`;function ye(e,t){let n={...C,...e},r={...L,...t},i={left:n.left,top:n.top,width:n.width,height:n.height},a=n.body;[n,r].forEach(e=>{let t=[],n=e.hFlip,r=e.vFlip,o=e.rotate;n?r?o+=2:(t.push(`translate(`+(i.width+i.left).toString()+` `+(0-i.top).toString()+`)`),t.push(`scale(-1 1)`),i.top=i.left=0):r&&(t.push(`translate(`+(0-i.left).toString()+` `+(i.height+i.top).toString()+`)`),t.push(`scale(1 -1)`),i.top=i.left=0);let s;switch(o<0&&(o-=Math.floor(o/4)*4),o%=4,o){case 1:s=i.height/2+i.top,t.unshift(`rotate(90 `+s.toString()+` `+s.toString()+`)`);break;case 2:t.unshift(`rotate(180 `+(i.width/2+i.left).toString()+` `+(i.height/2+i.top).toString()+`)`);break;case 3:s=i.width/2+i.left,t.unshift(`rotate(-90 `+s.toString()+` `+s.toString()+`)`);break}o%2==1&&(i.left!==i.top&&(s=i.left,i.left=i.top,i.top=s),i.width!==i.height&&(s=i.width,i.width=i.height,i.height=s)),t.length&&(a=_e(a,`<g transform="`+t.join(` `)+`">`,`</g>`))});let o=r.width,s=r.height,c=i.width,l=i.height,u,d;o===null?(d=s===null?`1em`:s===`auto`?l:s,u=R(d,c/l)):(u=o===`auto`?c:o,d=s===null?R(u,l/c):s===`auto`?l:s);let f={},p=(e,t)=>{ve(t)||(f[e]=t.toString())};p(`width`,u),p(`height`,d);let m=[i.left,i.top,c,l];return f.viewBox=m.join(` `),{attributes:f,viewBox:m,body:a}}var be=/\sid="(\S+)"/g,xe=`IconifyId`+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),Se=0;function Ce(e,t=xe){let n=[],r;for(;r=be.exec(e);)n.push(r[1]);if(!n.length)return e;let i=`suffix`+(Math.random()*16777216|Date.now()).toString(16);return n.forEach(n=>{let r=typeof t==`function`?t(n):t+(Se++).toString(),a=n.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);e=e.replace(RegExp(`([#;"])(`+a+`)([")]|\\.[a-z])`,`g`),`$1`+r+i+`$3`)}),e=e.replace(new RegExp(i,`g`),``),e}var z=Object.create(null);function we(e,t){z[e]=t}function B(e){return z[e]||z[``]}function V(e){let t;if(typeof e.resources==`string`)t=[e.resources];else if(t=e.resources,!(t instanceof Array)||!t.length)return null;return{resources:t,path:e.path||`/`,maxURL:e.maxURL||500,rotate:e.rotate||750,timeout:e.timeout||5e3,random:e.random===!0,index:e.index||0,dataAfterTimeout:e.dataAfterTimeout!==!1}}for(var H=Object.create(null),U=[`https://api.simplesvg.com`,`https://api.unisvg.com`],W=[];U.length>0;)U.length===1||Math.random()>.5?W.push(U.shift()):W.push(U.pop());H[``]=V({resources:[`https://api.iconify.design`].concat(W)});function Te(e,t){let n=V(t);return n===null?!1:(H[e]=n,!0)}function G(e){return H[e]}var K=(()=>{let e;try{if(e=fetch,typeof e==`function`)return e}catch{}})();function Ee(e,t){let n=G(e);if(!n)return 0;let r;if(!n.maxURL)r=0;else{let e=0;n.resources.forEach(t=>{e=Math.max(e,t.length)});let i=t+`.json?icons=`;r=n.maxURL-e-n.path.length-i.length}return r}function De(e){return e===404}var Oe=(e,t,n)=>{let r=[],i=Ee(e,t),a=`icons`,o={type:a,provider:e,prefix:t,icons:[]},s=0;return n.forEach((n,c)=>{s+=n.length+1,s>=i&&c>0&&(r.push(o),o={type:a,provider:e,prefix:t,icons:[]},s=n.length),o.icons.push(n)}),r.push(o),r};function ke(e){if(typeof e==`string`){let t=G(e);if(t)return t.path}return`/`}var Ae={prepare:Oe,send:(e,t,n)=>{if(!K){n(`abort`,424);return}let r=ke(t.provider);switch(t.type){case`icons`:{let e=t.prefix,n=t.icons.join(`,`),i=new URLSearchParams({icons:n});r+=e+`.json?`+i.toString();break}case`custom`:{let e=t.uri;r+=e.slice(0,1)===`/`?e.slice(1):e;break}default:n(`abort`,400);return}let i=503;K(e+r).then(e=>{let t=e.status;if(t!==200){setTimeout(()=>{n(De(t)?`abort`:`next`,t)});return}return i=501,e.json()}).then(e=>{if(typeof e!=`object`||!e){setTimeout(()=>{e===404?n(`abort`,e):n(`next`,i)});return}setTimeout(()=>{n(`success`,e)})}).catch(()=>{n(`next`,i)})}};function q(e,t){e.forEach(e=>{let n=e.loaderCallbacks;n&&(e.loaderCallbacks=n.filter(e=>e.id!==t))})}function je(e){e.pendingCallbacksFlag||(e.pendingCallbacksFlag=!0,setTimeout(()=>{e.pendingCallbacksFlag=!1;let t=e.loaderCallbacks?e.loaderCallbacks.slice(0):[];if(!t.length)return;let n=!1,r=e.provider,i=e.prefix;t.forEach(t=>{let a=t.icons,o=a.pending.length;a.pending=a.pending.filter(t=>{if(t.prefix!==i)return!0;let o=t.name;if(e.icons[o])a.loaded.push({provider:r,prefix:i,name:o});else if(e.missing.has(o))a.missing.push({provider:r,prefix:i,name:o});else return n=!0,!0;return!1}),a.pending.length!==o&&(n||q([e],t.id),t.callback(a.loaded.slice(0),a.missing.slice(0),a.pending.slice(0),t.abort))})}))}var Me=0;function Ne(e,t,n){let r=Me++,i=q.bind(null,n,r);if(!t.pending.length)return i;let a={id:r,icons:t,callback:e,abort:i};return n.forEach(e=>{(e.loaderCallbacks||=[]).push(a)}),i}function Pe(e){let t={loaded:[],missing:[],pending:[]},n=Object.create(null);e.sort((e,t)=>e.provider===t.provider?e.prefix===t.prefix?e.name.localeCompare(t.name):e.prefix.localeCompare(t.prefix):e.provider.localeCompare(t.provider));let r={provider:``,prefix:``,name:``};return e.forEach(e=>{if(r.name===e.name&&r.prefix===e.prefix&&r.provider===e.provider)return;r=e;let i=e.provider,a=e.prefix,o=e.name,s=n[i]||(n[i]=Object.create(null)),c=s[a]||(s[a]=A(i,a)),l;l=o in c.icons?t.loaded:a===``||c.missing.has(o)?t.missing:t.pending;let u={provider:i,prefix:a,name:o};l.push(u)}),t}function Fe(e,t=!0,n=!1){let r=[];return e.forEach(e=>{let i=typeof e==`string`?j(e,t,n):e;i&&r.push(i)}),r}var Ie={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function Le(e,t,n,r){let i=e.resources.length,a=e.random?Math.floor(Math.random()*i):e.index,o;if(e.random){let t=e.resources.slice(0);for(o=[];t.length>1;){let e=Math.floor(Math.random()*t.length);o.push(t[e]),t=t.slice(0,e).concat(t.slice(e+1))}o=o.concat(t)}else o=e.resources.slice(a).concat(e.resources.slice(0,a));let s=Date.now(),c=`pending`,l=0,u,d=null,f=[],p=[];typeof r==`function`&&p.push(r);function m(){d&&=(clearTimeout(d),null)}function h(){c===`pending`&&(c=`aborted`),m(),f.forEach(e=>{e.status===`pending`&&(e.status=`aborted`)}),f=[]}function g(e,t){t&&(p=[]),typeof e==`function`&&p.push(e)}function ee(){return{startTime:s,payload:t,status:c,queriesSent:l,queriesPending:f.length,subscribe:g,abort:h}}function _(){c=`failed`,p.forEach(e=>{e(void 0,u)})}function v(){f.forEach(e=>{e.status===`pending`&&(e.status=`aborted`)}),f=[]}function y(t,n,r){let i=n!==`success`;switch(f=f.filter(e=>e!==t),c){case`pending`:break;case`failed`:if(i||!e.dataAfterTimeout)return;break;default:return}if(n===`abort`){u=r,_();return}if(i){u=r,f.length||(o.length?b():_());return}if(m(),v(),!e.random){let n=e.resources.indexOf(t.resource);n!==-1&&n!==e.index&&(e.index=n)}c=`completed`,p.forEach(e=>{e(r)})}function b(){if(c!==`pending`)return;m();let r=o.shift();if(r===void 0){if(f.length){d=setTimeout(()=>{m(),c===`pending`&&(v(),_())},e.timeout);return}_();return}let i={status:`pending`,resource:r,callback:(e,t)=>{y(i,e,t)}};f.push(i),l++,d=setTimeout(b,e.rotate),n(r,t,i.callback)}return setTimeout(b),ee}function Re(e){let t={...Ie,...e},n=[];function r(){n=n.filter(e=>e().status===`pending`)}function i(e,i,a){let o=Le(t,e,i,(e,t)=>{r(),a&&a(e,t)});return n.push(o),o}function a(e){return n.find(t=>e(t))||null}return{query:i,find:a,setIndex:e=>{t.index=e},getIndex:()=>t.index,cleanup:r}}function ze(){}var J=Object.create(null);function Be(e){if(!J[e]){let t=G(e);if(!t)return;J[e]={config:t,redundancy:Re(t)}}return J[e]}function Ve(e,t,n){let r,i;if(typeof e==`string`){let t=B(e);if(!t)return n(void 0,424),ze;i=t.send;let a=Be(e);a&&(r=a.redundancy)}else{let t=V(e);if(t){r=Re(t);let n=B(e.resources?e.resources[0]:``);n&&(i=n.send)}}return!r||!i?(n(void 0,424),ze):r.query(t,i,n)().abort}function He(){}function Ue(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout(()=>{e.iconsLoaderFlag=!1,je(e)}))}function We(e){let t=[],n=[];return e.forEach(e=>{(e.match(ue)?t:n).push(e)}),{valid:t,invalid:n}}function Y(e,t,n){function r(){let n=e.pendingIcons;t.forEach(t=>{n&&n.delete(t),e.icons[t]||e.missing.add(t)})}if(n&&typeof n==`object`)try{if(!ce(e,n).length){r();return}}catch(e){console.error(e)}r(),Ue(e)}function Ge(e,t){e instanceof Promise?e.then(e=>{t(e)}).catch(()=>{t(null)}):t(e)}function Ke(e,t){e.iconsToLoad?e.iconsToLoad=e.iconsToLoad.concat(t).sort():e.iconsToLoad=t,e.iconsQueueFlag||(e.iconsQueueFlag=!0,setTimeout(()=>{e.iconsQueueFlag=!1;let{provider:t,prefix:n}=e,r=e.iconsToLoad;if(delete e.iconsToLoad,!r||!r.length)return;let i=e.loadIcon;if(e.loadIcons&&(r.length>1||!i)){Ge(e.loadIcons(r,n,t),t=>{Y(e,r,t)});return}if(i){r.forEach(r=>{Ge(i(r,n,t),t=>{Y(e,[r],t?{prefix:n,icons:{[r]:t}}:null)})});return}let{valid:a,invalid:o}=We(r);if(o.length&&Y(e,o,null),!a.length)return;let s=n.match(ue)?B(t):null;if(!s){Y(e,a,null);return}s.prepare(t,n,a).forEach(n=>{Ve(t,n,t=>{Y(e,n.icons,t)})})}))}var qe=(e,t)=>{let n=Pe(Fe(e,!0,P()));if(!n.pending.length){let e=!0;return t&&setTimeout(()=>{e&&t(n.loaded,n.missing,n.pending,He)}),()=>{e=!1}}let r=Object.create(null),i=[],a,o;return n.pending.forEach(e=>{let{provider:t,prefix:n}=e;if(n===o&&t===a)return;a=t,o=n,i.push(A(t,n));let s=r[t]||(r[t]=Object.create(null));s[n]||(s[n]=[])}),n.pending.forEach(e=>{let{provider:t,prefix:n,name:i}=e,a=A(t,n),o=a.pendingIcons||=new Set;o.has(i)||(o.add(i),r[t][n].push(i))}),i.forEach(e=>{let t=r[e.provider][e.prefix];t.length&&Ke(e,t)}),t?Ne(t,n,i):He};function Je(e,t){let n={...e};for(let e in t){let r=t[e],i=typeof r;e in I?(r===null||r&&(i===`string`||i===`number`))&&(n[e]=r):i===typeof n[e]&&(n[e]=e===`rotate`?r%4:r)}return n}var Ye=/[\s,]+/;function Xe(e,t){t.split(Ye).forEach(t=>{switch(t.trim()){case`horizontal`:e.hFlip=!0;break;case`vertical`:e.vFlip=!0;break}})}function Ze(e,t=0){let n=e.replace(/^-?[0-9.]*/,``);function r(e){for(;e<0;)e+=4;return e%4}if(n===``){let t=parseInt(e);return isNaN(t)?0:r(t)}else if(n!==e){let t=0;switch(n){case`%`:t=25;break;case`deg`:t=90}if(t){let i=parseFloat(e.slice(0,e.length-n.length));return isNaN(i)?0:(i/=t,i%1==0?r(i):0)}}return t}function Qe(e,t){let n=e.indexOf(`xlink:`)===-1?``:` xmlns:xlink="http://www.w3.org/1999/xlink"`;for(let e in t)n+=` `+e+`="`+t[e]+`"`;return`<svg xmlns="http://www.w3.org/2000/svg"`+n+`>`+e+`</svg>`}function $e(e){return e.replace(/"/g,`'`).replace(/%/g,`%25`).replace(/#/g,`%23`).replace(/</g,`%3C`).replace(/>/g,`%3E`).replace(/\s+/g,` `)}function et(e){return`data:image/svg+xml,`+$e(e)}function tt(e){return`url("`+et(e)+`")`}var X;function nt(){try{X=window.trustedTypes.createPolicy(`iconify`,{createHTML:e=>e})}catch{X=null}}function rt(e){return X===void 0&&nt(),X?X.createHTML(e):e}var it={...L,inline:!1},at={xmlns:`http://www.w3.org/2000/svg`,xmlnsXlink:`http://www.w3.org/1999/xlink`,"aria-hidden":!0,role:`img`},ot={display:`inline-block`},Z={backgroundColor:`currentColor`},st={backgroundColor:`transparent`},ct={Image:`var(--svg)`,Repeat:`no-repeat`,Size:`100% 100%`},lt={WebkitMask:Z,mask:Z,background:st};for(let e in lt){let t=lt[e];for(let n in ct)t[e+n]=ct[n]}var ut={...it,inline:!0};function dt(e){return e+(e.match(/^[-0-9.]+$/)?`px`:``)}var ft=(e,t,n)=>{let r=t.inline?ut:it,i=Je(r,t),a=t.mode||`svg`,o={},s=t.style||{},c={...a===`svg`?at:{}};if(n){let e=j(n,!1,!0);if(e){let t=[`iconify`];for(let n of[`provider`,`prefix`])e[n]&&t.push(`iconify--`+e[n]);c.className=t.join(` `)}}for(let e in t){let n=t[e];if(n!==void 0)switch(e){case`icon`:case`style`:case`children`:case`onLoad`:case`mode`:case`ssr`:case`fallback`:break;case`_ref`:c.ref=n;break;case`className`:c[e]=(c[e]?c[e]+` `:``)+n;break;case`inline`:case`hFlip`:case`vFlip`:i[e]=n===!0||n===`true`||n===1;break;case`flip`:typeof n==`string`&&Xe(i,n);break;case`color`:o.color=n;break;case`rotate`:typeof n==`string`?i[e]=Ze(n):typeof n==`number`&&(i[e]=n);break;case`ariaHidden`:case`aria-hidden`:n!==!0&&n!==`true`&&delete c[`aria-hidden`];break;default:r[e]===void 0&&(c[e]=n)}}let l=ye(e,i),u=l.attributes;if(i.inline&&(o.verticalAlign=`-0.125em`),a===`svg`){c.style={...o,...s},Object.assign(c,u);let e=0,n=t.id;return typeof n==`string`&&(n=n.replace(/-/g,`_`)),c.dangerouslySetInnerHTML={__html:rt(Ce(l.body,n?()=>n+`ID`+e++:`iconifyReact`))},(0,x.createElement)(`svg`,c)}let{body:d,width:f,height:p}=e,m=a===`mask`||(a===`bg`?!1:d.indexOf(`currentColor`)!==-1),h=Qe(d,{...u,width:f+``,height:p+``});return c.style={...o,"--svg":tt(h),width:dt(u.width),height:dt(u.height),...ot,...m?Z:st,...s},(0,x.createElement)(`span`,c)};if(P(!0),we(``,Ae),typeof document<`u`&&typeof window<`u`){let e=window;if(e.IconifyPreload!==void 0){let t=e.IconifyPreload,n=`Invalid IconifyPreload syntax.`;typeof t==`object`&&t&&(t instanceof Array?t:[t]).forEach(e=>{try{(typeof e!=`object`||!e||e instanceof Array||typeof e.icons!=`object`||typeof e.prefix!=`string`||!fe(e))&&console.error(n)}catch{console.error(n)}})}if(e.IconifyProviders!==void 0){let t=e.IconifyProviders;if(typeof t==`object`&&t)for(let e in t){let n=`IconifyProviders[`+e+`] is invalid.`;try{let r=t[e];if(typeof r!=`object`||!r||r.resources===void 0)continue;Te(e,r)||console.error(n)}catch{console.error(n)}}}}function pt(e){let[t,n]=(0,x.useState)(!!e.ssr),[r,i]=(0,x.useState)({});function a(t){if(t){let t=e.icon;if(typeof t==`object`)return{name:``,data:t};let n=F(t);if(n)return{name:t,data:n}}return{name:``}}let[o,s]=(0,x.useState)(a(!!e.ssr));function c(){let e=r.callback;e&&(e(),i({}))}function l(e){if(JSON.stringify(o)!==JSON.stringify(e))return c(),s(e),!0}function u(){var t;let n=e.icon;if(typeof n==`object`){l({name:``,data:n});return}let r=F(n);l({name:n,data:r})&&(r===void 0?i({callback:qe([n],u)}):r&&((t=e.onLoad)==null||t.call(e,n)))}(0,x.useEffect)(()=>(n(!0),c),[]),(0,x.useEffect)(()=>{t&&u()},[e.icon,t]);let{name:d,data:f}=o;return f?ft({...C,...f},e,d):e.children?e.children:e.fallback?e.fallback:(0,x.createElement)(`span`,{})}var mt=(0,x.forwardRef)((e,t)=>pt({...e,_ref:t}));(0,x.forwardRef)((e,t)=>pt({inline:!0,...e,_ref:t}));var Q=n(),$=[{name:`Google`,host:`google.com`,icon:`simple-icons:google`,fallback:(0,Q.jsx)(d,{size:20})},{name:`Cloudflare`,host:`cloudflare.com`,icon:`simple-icons:cloudflare`,fallback:(0,Q.jsx)(o,{size:20})},{name:`YouTube`,host:`youtube.com`,icon:`simple-icons:youtube`,fallback:(0,Q.jsx)(u,{size:20})},{name:`GitHub`,host:`github.com`,icon:`simple-icons:github`,fallback:(0,Q.jsx)(b,{size:20})},{name:`ChatGPT`,host:`chatgpt.com`,icon:`simple-icons:openai`,fallback:(0,Q.jsx)(ee,{size:20})},{name:`X`,host:`x.com`,icon:`simple-icons:x`,fallback:(0,Q.jsx)(h,{size:20})},{name:`Instagram`,host:`instagram.com`,icon:`simple-icons:instagram`,fallback:(0,Q.jsx)(_,{size:20})},{name:`Reddit`,host:`reddit.com`,icon:`simple-icons:reddit`,fallback:(0,Q.jsx)(c,{size:20})},{name:`Wikipedia`,host:`wikipedia.org`,icon:`simple-icons:wikipedia`,fallback:(0,Q.jsx)(g,{size:20})},{name:`Apple`,host:`apple.com`,icon:`simple-icons:apple`,fallback:(0,Q.jsx)(s,{size:20})},{name:`Telegram`,host:`telegram.org`,icon:`simple-icons:telegram`,fallback:(0,Q.jsx)(f,{size:20})},{name:`Discord`,host:`discord.com`,icon:`simple-icons:discord`,fallback:(0,Q.jsx)(c,{size:20})},{name:`TikTok`,host:`tiktok.com`,icon:`simple-icons:tiktok`,fallback:(0,Q.jsx)(l,{size:20})},{name:`npm`,host:`npmjs.com`,icon:`simple-icons:npm`,fallback:(0,Q.jsx)(v,{size:20})},{name:`Vercel`,host:`vercel.com`,icon:`simple-icons:vercel`,fallback:(0,Q.jsx)(te,{size:20})}],ht=5e3;function gt({icon:e,fallback:t}){let[n,r]=(0,x.useState)(!1);return(0,x.useEffect)(()=>{let t=new Image;t.onload=()=>r(!0),t.onerror=()=>r(!1),t.src=`https://api.iconify.design/${e.replace(`:`,`/`)}.svg`},[e]),(0,Q.jsxs)(`span`,{className:`brand-icon-wrap`,children:[(0,Q.jsx)(`span`,{className:`brand-icon-fallback ${n?`hidden`:``}`,children:t}),(0,Q.jsx)(`span`,{className:`brand-icon-real ${n?`visible`:``}`,children:(0,Q.jsx)(mt,{icon:e,width:20,height:20})})]})}function _t(){let{t:e,formatNumber:t}=a(),[n,r]=(0,x.useState)(new Map),[i,o]=(0,x.useState)(!1),s=(0,x.useRef)(new Map);(0,x.useEffect)(()=>{document.title=e(`ping.meta.title`)},[e]);let c=(0,x.useCallback)(e=>{r(t=>{let n=new Map(t);return n.set(e,{status:`pending`,latency:0}),n});let t=new AbortController;s.current.set(e,t);let n=performance.now(),i=(t,n)=>{r(r=>{let i=new Map(r);return i.set(e,{status:t,latency:n}),i})},a=setTimeout(()=>{t.abort()},ht);fetch(`https://${e}/`,{method:`HEAD`,mode:`no-cors`,cache:`no-store`,signal:t.signal}).then(()=>{clearTimeout(a),i(`ok`,Math.round(performance.now()-n))}).catch(()=>{clearTimeout(a),i(`timeout`,0)})},[]),l=(0,x.useCallback)(()=>{o(!0);let e=new Map;$.forEach(t=>{e.set(t.host,{status:`pending`,latency:0})}),r(e);let t=new Set($.map(e=>e.host));$.forEach(e=>{let n=new AbortController;s.current.set(e.host,n);let i=performance.now(),a=(n,i)=>{t.has(e.host)&&(t.delete(e.host),r(t=>{let r=new Map(t);return r.set(e.host,{status:n,latency:i}),r}),t.size===0&&o(!1))},c=setTimeout(()=>{n.abort()},ht);fetch(`https://${e.host}/`,{method:`HEAD`,mode:`no-cors`,cache:`no-store`,signal:n.signal}).then(()=>{clearTimeout(c),a(`ok`,Math.round(performance.now()-i))}).catch(()=>{clearTimeout(c),a(`timeout`,0)})})},[]);return(0,x.useEffect)(()=>(l(),()=>{s.current.forEach(e=>e.abort()),s.current.clear()}),[l]),(0,Q.jsxs)(`div`,{className:`ping-page`,children:[(0,Q.jsxs)(`div`,{className:`ping-header`,children:[(0,Q.jsxs)(`div`,{className:`ping-title-wrap`,children:[(0,Q.jsx)(p,{size:28,className:`ping-title-icon`}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`h1`,{className:`ping-title`,children:e(`ping.title`)}),(0,Q.jsx)(`p`,{className:`ping-subtitle`,children:e(`ping.subtitle`)})]})]}),(0,Q.jsx)(`button`,{className:`btn btn-icon`,onClick:l,disabled:i,"aria-label":e(`ping.retryAll`),title:e(`ping.retryAll`),children:(0,Q.jsx)(y,{size:18,className:i?`ping-spin`:``})})]}),(0,Q.jsx)(`div`,{className:`ping-grid`,children:$.map(r=>{let i=n.get(r.host),a=!i||i.status===`pending`,o=i?.status===`timeout`;return(0,Q.jsxs)(`div`,{className:`ping-card ${a?`pending`:``}`,children:[(0,Q.jsxs)(`div`,{className:`ping-card-top`,children:[(0,Q.jsx)(`span`,{className:`ping-card-icon`,children:(0,Q.jsx)(gt,{icon:r.icon,fallback:r.fallback})}),(0,Q.jsx)(`a`,{href:`https://${r.host}`,target:`_blank`,rel:`noreferrer`,className:`ping-card-name`,children:r.name}),(0,Q.jsx)(`button`,{className:`ping-card-refresh`,onClick:()=>c(r.host),disabled:a,"aria-label":e(`ping.retryOne`,{name:r.name}),title:e(`ping.retry`),children:(0,Q.jsx)(y,{size:13,className:a?`ping-spin`:``})})]}),(0,Q.jsxs)(`div`,{className:`ping-card-bottom`,children:[a?(0,Q.jsx)(`span`,{className:`ping-pulse-dot`}):(0,Q.jsx)(`span`,{className:`ping-status-label ${o?`is-error`:`is-success`}`,children:e(o?`ping.unavailable`:`ping.available`)}),(0,Q.jsx)(`span`,{className:`ping-latency ${a?`is-muted`:o?`is-error`:`is-success`}`,children:a?`--`:o?e(`ping.timeout`):`${t(i.latency)} ms`})]})]},r.host)})})]})}function vt(){return(0,Q.jsx)(m,{children:(0,Q.jsx)(_t,{})})}var yt=i(`/ping/`)({component:vt});export{yt 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-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
+ 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-BPfshhQc.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-AZPpawN1.js";import{t as ie}from"./MarketingHeader-B0jpxRYu.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{B as r,E as i,H as a,_ as o,g as s,t as c}from"./useAppStore-Pjif7nCR.js";import{a as l}from"./i18n-DKsg67mH.js";import{t as ee}from"./copy-BofKiKH_.js";import{t as te}from"./AppShell-BN1uaxn1.js";import{t as ne}from"./play-B6IGTGxm.js";import{t as re}from"./send-yxXCy-t8.js";import{i as ie,n as ae,r as oe,t as se}from"./useGameRoom-CqeouPP_.js";import{g as u}from"./index-CCU5Z4K-.js";var ce=r(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),d=t(e(),1),f=[`S`,`H`,`C`,`D`],p=[`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`J`,`Q`,`K`,`A`,`2`],m=p.filter(e=>e!==`2`),h=new Map(p.map((e,t)=>[e,t+3])),g=5,_=20,v=1e3;function le({roomCode:e,ownerAddress:t,ownerName:n,players:r=[],random:i=Math.random}){let a=E(r);return a.some(e=>e.address===s(t))||a.unshift({address:s(t),name:K(n),avatar:``}),y({id:String(e||``).toUpperCase(),ownerAddress:s(t),status:`lobby`,seq:1,players:a.slice(0,6).map((e,t)=>({address:e.address,name:K(e.name),avatar:o(e.avatar),seat:t,hand:[],handCount:0,score:v,playedCards:0})),deck:[],discard:[],table:null,currentSeat:0,lastWinnerSeat:null,previousWinnerSeat:null,passSeats:[],baseScore:1,bombCount:0,diceRolls:[],roundResult:null,log:[`房间已创建`],winnerSeat:null,random:i})}function ue(e,t=[]){let n=b(e);if(!n||n.status!==`lobby`)return n;let r=new Map(n.players.map(e=>[e.address,e.score]));return n.players=E(t).slice(0,6).map((e,t)=>({address:e.address,name:K(e.name),avatar:o(e.avatar),seat:t,hand:[],handCount:0,score:r.get(e.address)??v,playedCards:0})),n.seq+=1,y(n)}function de(e,t=Math.random){let n=b(e);if(!n||n.players.length<2)throw Error(`至少需要 2 名玩家`);n.deck=N(M(),t),n.discard=[],n.table=null,n.passSeats=[],n.winnerSeat=null,n.roundResult=null,n.baseScore=1,n.bombCount=0,n.status=`playing`;for(let e of R(n))e.hand=P(n,g),e.handCount=e.hand.length,e.playedCards=0,F(e.hand);let r=k(n,t);return n.currentSeat=r.seat,n.lastWinnerSeat=null,n.log=[`新一局开始,${r.name} 先出牌`],n.diceRolls.length>0&&n.log.unshift(`骰子结果:${n.diceRolls.map(e=>`${e.name} ${e.value}`).join(`,`)}`),n.seq+=1,y(n)}function fe(e,t,n){let r=b(e),i=I(r),a=s(t);if(!i||i.address!==a)return{ok:!1,error:`还没轮到你`,state:y(r)};let o=n.map(e=>i.hand.find(t=>t.id===e));if(o.length===0||o.some(e=>!e))return{ok:!1,error:`手牌不存在`,state:y(r)};let c=he(o);return c?T(c,r.table?.combo)?(o.sort(V),i.hand=i.hand.filter(e=>!n.includes(e.id)),i.handCount=i.hand.length,i.playedCards+=o.length,r.discard.push(...o),r.table={seat:i.seat,playerName:i.name,cards:o,combo:c},r.passSeats=[],r.lastWinnerSeat=i.seat,c.type===`bomb`&&(r.bombCount+=1,r.baseScore*=2),r.log.unshift(`${i.name} 出 ${c.label} ${o.map(G).join(` `)}${c.type===`bomb`?`,底分 ${r.baseScore}`:``}`),i.hand.length===0?A(r,i):z(r),r.seq+=1,{ok:!0,state:y(r)}):{ok:!1,error:`出的牌压不过上一手`,state:y(r)}:{ok:!1,error:`这个牌型不合法`,state:y(r)}}function pe(e,t){let n=b(e),r=I(n),i=s(t);return!r||r.address!==i?{ok:!1,error:`还没轮到你`,state:y(n)}:n.table?(n.passSeats.includes(r.seat)||n.passSeats.push(r.seat),n.log.unshift(`${r.name} 不要`),L(n).map(e=>e.seat).filter(e=>e!==n.lastWinnerSeat).every(e=>n.passSeats.includes(e))?(j(n),n.currentSeat=n.lastWinnerSeat,n.table=null,n.passSeats=[],n.log.unshift(`本轮结束,所有玩家各补 1 张,重新领出`)):z(n),n.seq+=1,{ok:!0,state:y(n)}):{ok:!1,error:`领出时不能不要`,state:y(n)}}function me(e,t){let n=b(e);if(!n)return null;let r=s(t),i=n.players.findIndex(e=>e.address===r);if(i===-1)return y(n);let a=n.players[i],o=n.currentSeat===a.seat,c=n.lastWinnerSeat===a.seat;n.players.splice(i,1),n.passSeats=n.passSeats.filter(e=>e!==a.seat),n.log.unshift(`${a.name} 已退出房间`);let l=R(n);if(n.status===`playing`)if(l.length<=1)l.length===1?A(n,l[0]):(n.status=`finished`,n.log.unshift(`玩家不足,本局结束`));else{if(o){let e=L(n);if(e.length>0){let t=e.findIndex(e=>e.seat>a.seat);n.currentSeat=e[t>=0?t:0].seat}}c&&n.table&&(n.table=null,n.passSeats=[])}return n.seq+=1,y(n)}function y(e){return e?{id:e.id,ownerAddress:e.ownerAddress,status:e.status,seq:Number(e.seq||1),deck:Array.isArray(e.deck)?e.deck.map(W):[],deckCount:e.deck?.length||Number(e.deckCount||0),discard:Array.isArray(e.discard)?e.discard.map(W):[],discardCount:e.discard?.length||Number(e.discardCount||0),currentSeat:Number(e.currentSeat||0),lastWinnerSeat:e.lastWinnerSeat===null||e.lastWinnerSeat===void 0?null:Number(e.lastWinnerSeat),previousWinnerSeat:e.previousWinnerSeat===null||e.previousWinnerSeat===void 0?null:Number(e.previousWinnerSeat),baseScore:Number(e.baseScore||1),bombCount:Number(e.bombCount||0),diceRolls:Array.isArray(e.diceRolls)?e.diceRolls:[],roundResult:e.roundResult||null,table:e.table?{...e.table,cards:e.table.cards.map(W)}:null,passSeats:Array.isArray(e.passSeats)?e.passSeats:[],winnerSeat:e.winnerSeat===null||e.winnerSeat===void 0?null:Number(e.winnerSeat),log:Array.isArray(e.log)?e.log.slice(0,18):[],players:R(e).map(e=>({address:e.address,name:e.name,avatar:o(e.avatar),seat:e.seat,handCount:e.hand?.length??e.handCount??0,score:Number(e.score??v),playedCards:Number(e.playedCards||0),hand:Array.isArray(e.hand)?e.hand.map(W):[]}))}:null}function b(e){return!e||typeof e!=`object`?null:{id:String(e.id||``).toUpperCase(),ownerAddress:s(e.ownerAddress),status:e.status===`playing`||e.status===`finished`?e.status:`lobby`,seq:Number(e.seq||1),players:Array.isArray(e.players)?e.players.map(D).filter(Boolean):[],deck:Array.isArray(e.deck)?e.deck.map(ve).filter(Boolean):[],discard:Array.isArray(e.discard)?e.discard.map(O).filter(Boolean):[],table:e.table&&typeof e.table==`object`?{...e.table,cards:Array.isArray(e.table.cards)?e.table.cards.map(O).filter(Boolean):[]}:null,currentSeat:Number(e.currentSeat||0),lastWinnerSeat:e.lastWinnerSeat===null||e.lastWinnerSeat===void 0?null:Number(e.lastWinnerSeat),previousWinnerSeat:e.previousWinnerSeat===null||e.previousWinnerSeat===void 0?null:Number(e.previousWinnerSeat),passSeats:Array.isArray(e.passSeats)?e.passSeats.map(Number):[],baseScore:Number(e.baseScore||1),bombCount:Number(e.bombCount||0),diceRolls:Array.isArray(e.diceRolls)?e.diceRolls:[],roundResult:e.roundResult||null,log:Array.isArray(e.log)?e.log.map(String):[],winnerSeat:e.winnerSeat===null||e.winnerSeat===void 0?null:Number(e.winnerSeat)}}function he(e){if(!e?.length)return null;e=[...e].sort(V);let t=e.filter(U).length,n=e.filter(e=>!U(e));if(n.length===0)return null;let r=x(e,n,t);if(r)return r;if(e.length===1&&t===0)return w(`single`,H(e[0]),1,[H(e[0])]);if(e.length===2&&B(n,t)){let e=ge(n);return w(`pair`,e,2,[e,e])}return S(e)||C(e)}function x(e,t,n){if(e.length<3||!B(t,n))return null;let r=ge(t);return w(`bomb`,r,e.length,Array(e.length).fill(r),n===0)}function S(e){if(e.length<3)return null;let t=e.filter(U).length,n=e.filter(e=>!U(e));for(let r=0;r<=m.length-e.length;r+=1){let i=m.slice(r,r+e.length).map(e=>h.get(e)),a=[...i],o=0;for(let e of n){let t=a.indexOf(H(e));t!==-1&&(a.splice(t,1),o+=1)}if(o+t===e.length&&a.length===t)return w(`straight`,i.at(-1),e.length,i)}return null}function C(e){if(e.length<4||e.length%2!=0)return null;let t=e.length/2,n=e.filter(U).length,r=e.filter(e=>!U(e));for(let i=0;i<=m.length-t;i+=1){let a=m.slice(i,i+t).map(e=>h.get(e)),o=a.flatMap(e=>[e,e]),s=0;for(let e of r){let t=o.indexOf(H(e));t!==-1&&(o.splice(t,1),s+=1)}if(s+n===e.length&&o.length===n){let t=a.flatMap(e=>[e,e]);return w(`pairStraight`,a.at(-1),e.length,t)}}return null}function w(e,t,n,r,i=!0){return{type:e,value:t,length:n,resolvedValues:r,pure:i,label:xe({type:e,value:t,length:n,resolvedValues:r,pure:i})}}function T(e,t){return e?!t||e.type===`bomb`&&t.type!==`bomb`?!0:e.type===t.type?e.type===`bomb`?e.length===t.length?e.value===t.value?e.pure&&!t.pure:e.value>t.value:e.length>t.length:e.length===t.length?e.type===`single`||e.type===`pair`?e.value===Ce(t.value)||e.value===h.get(`2`)&&t.value!==h.get(`2`):e.value===Ce(t.value):!1:!1:!1}function E(e){let t=new Set;return e.map(e=>({address:s(e.address),name:K(e.name),avatar:o(e.avatar),publicKey:String(e.publicKey||``)})).filter(e=>!e.address||t.has(e.address)?!1:(t.add(e.address),!0))}function D(e){let t=s(e.address);return t?{address:t,name:K(e.name),avatar:o(e.avatar),seat:Number(e.seat||0),hand:Array.isArray(e.hand)?e.hand.map(O).filter(Boolean):[],handCount:Number(e.handCount||0),score:Number(e.score??v),playedCards:Number(e.playedCards||0)}:null}function O(e){if(!e||typeof e!=`object`)return null;let t=String(e.rank||``),n=String(e.suit||``);return!h.has(t)&&t!==`SJ`&&t!==`BJ`||!f.includes(n)&&n!==`Joker`?null:{id:String(e.id||`${n}-${t}`),suit:n,rank:t,label:e.label||G({suit:n,rank:t}),color:e.color||be({suit:n,rank:t})}}function k(e,t){if(e.previousWinnerSeat!==null)return e.diceRolls=[],R(e).find(t=>t.seat===e.previousWinnerSeat)||R(e)[0];let n=R(e),r=[];for(;n.length>1;){r=n.map(e=>({seat:e.seat,name:e.name,value:we(t)}));let i=Math.max(...r.map(e=>e.value)),a=r.filter(e=>e.value===i);if(a.length===1)return e.diceRolls=r,n.find(e=>e.seat===a[0].seat);n=n.filter(e=>a.some(t=>t.seat===e.seat))}return e.diceRolls=r,n[0]}function A(e,t){e.status=`finished`,e.winnerSeat=t.seat,e.previousWinnerSeat=t.seat;let n=[],r=0;for(let i of R(e)){if(i.seat===t.seat)continue;let a=i.playedCards===0,o=a?_:i.hand.length*e.baseScore*.5;i.score-=o,r+=o,n.push({seat:i.seat,name:i.name,loss:o,sealed:a,cardsLeft:i.hand.length})}t.score+=r,e.roundResult={winnerSeat:t.seat,winnerName:t.name,winnerGain:r,baseScore:e.baseScore,bombCount:e.bombCount,losers:n},e.log.unshift(`${t.name} 获胜,赢 ${r} 分`)}function j(e){for(let t of L(e)){if(e.deck.length===0)break;t.hand.push(...P(e,1)),t.handCount=t.hand.length,F(t.hand)}}function M(){let e=[];for(let t of f)for(let n of p)e.push({id:`${t}-${n}`,suit:t,rank:n});return e.push({id:`SJ`,suit:`Joker`,rank:`SJ`}),e.push({id:`BJ`,suit:`Joker`,rank:`BJ`}),e.map(W)}function N(e,t){let n=[...e];for(let e=n.length-1;e>0;--e){let r=Math.floor(t()*(e+1));[n[e],n[r]]=[n[r],n[e]]}return n}function P(e,t){return e.deck.splice(0,t)}function F(e){e.sort(V)}function I(e){return e.players.find(t=>t.seat===e.currentSeat)}function L(e){return R(e).filter(e=>e.hand.length>0)}function R(e){return[...e?.players||[]].sort((e,t)=>e.seat-t.seat)}function z(e){let t=L(e).map(e=>e.seat);e.currentSeat=t[(t.indexOf(e.currentSeat)+1)%t.length]}function B(e,t=0){if(e.length===0)return!1;let n=e[0].rank;return e.every(e=>e.rank===n)&&e.length+t>=2}function ge(e){return H(e[0])}function V(e,t){return H(e)-H(t)||_e(e.suit)-_e(t.suit)}function H(e){return h.get(e.rank)||99}function U(e){return e.rank===`SJ`||e.rank===`BJ`}function _e(e){return{D:0,C:1,H:2,S:3,Joker:4}[e]||0}function ve(e){if(typeof e==`string`){let[t,n]=e.split(`-`);return O({id:e,suit:t,rank:n})}return O(e)}function W(e){return{id:e.id,suit:e.suit,rank:e.rank,label:G(e),color:be(e)}}function G(e){return e.rank===`SJ`?`小王`:e.rank===`BJ`?`大王`:`${ye(e.suit)}${e.rank}`}function ye(e){return{S:`♠`,H:`♥`,C:`♣`,D:`♦`}[e]||``}function be(e){return e.suit===`H`||e.suit===`D`||e.rank===`BJ`?`red`:`black`}function xe(e){let t=e.resolvedValues?.length?`(${e.resolvedValues.map(Se).join(` `)})`:``;return`${{single:`单张`,pair:`对子`,straight:`顺子`,pairStraight:`连对`,bomb:e.pure?`纯炸弹`:`带王炸弹`}[e.type]}${t}`}function Se(e){return p.find(t=>h.get(t)===e)||String(e)}function Ce(e){let t=p.findIndex(t=>h.get(t)===e);return t===-1||t>=p.length-1?null:h.get(p[t+1])}function we(e){return Math.floor(e()*6)+1}function K(e){return String(e||`玩家`).trim().slice(0,16)||`玩家`}var q={page:`_page_1c8jk_1`,headerActions:`_headerActions_1c8jk_7`,entry:`_entry_1c8jk_13`,entryBrand:`_entryBrand_1c8jk_23`,cardMark:`_cardMark_1c8jk_29`,entryPanel:`_entryPanel_1c8jk_59`,panel:`_panel_1c8jk_60`,handPanel:`_handPanel_1c8jk_61`,accountLine:`_accountLine_1c8jk_74`,scoreMeta:`_scoreMeta_1c8jk_75`,roomBar:`_roomBar_1c8jk_76`,badges:`_badges_1c8jk_77`,actions:`_actions_1c8jk_78`,joinForm:`_joinForm_1c8jk_98`,status:`_status_1c8jk_119`,gameGrid:`_gameGrid_1c8jk_125`,tablePanel:`_tablePanel_1c8jk_136`,seats:`_seats_1c8jk_170`,player:`_player_1c8jk_176`,active:`_active_1c8jk_193`,winner:`_winner_1c8jk_197`,avatar:`_avatar_1c8jk_201`,avatarOffline:`_avatarOffline_1c8jk_222`,onlineDot:`_onlineDot_1c8jk_227`,centerTable:`_centerTable_1c8jk_253`,deckBox:`_deckBox_1c8jk_260`,playedBox:`_playedBox_1c8jk_261`,playedCards:`_playedCards_1c8jk_289`,notice:`_notice_1c8jk_297`,resultDetail:`_resultDetail_1c8jk_305`,sidePanel:`_sidePanel_1c8jk_316`,scoreRow:`_scoreRow_1c8jk_341`,logPanel:`_logPanel_1c8jk_349`,hand:`_hand_1c8jk_61`,cardButton:`_cardButton_1c8jk_376`,picked:`_picked_1c8jk_386`,card:`_card_1c8jk_29`,red:`_red_1c8jk_417`,black:`_black_1c8jk_421`,small:`_small_1c8jk_425`,preview:`_preview_1c8jk_443`,valid:`_valid_1c8jk_466`},J=n(),Y=`gandengyan`;function X(...e){return e.filter(Boolean).join(` `)}function Te(e,t){return String(e||``).toLowerCase()===String(t||``).toLowerCase()}function Ee(e,t){if(typeof window>`u`||!(`speechSynthesis`in window)||!e)return;window.speechSynthesis.cancel();let n=new SpeechSynthesisUtterance(e);n.lang=t,n.rate=1.1,window.speechSynthesis.speak(n)}function De(){let{t:e,locale:t}=l(),n=c(e=>e.addToast),r=i(e=>e.initializeUser),[a,o]=(0,d.useState)(``),[s,u]=(0,d.useState)([]),[f,p]=(0,d.useState)(!1),m=(0,d.useRef)(``),h=(0,d.useRef)(!1),g=se({gameId:Y,onError:e=>n(e,`error`)});(0,d.useEffect)(()=>{r()},[r]),(0,d.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get(`room`)?.toUpperCase();e&&(o(e),m.current=e)},[]),(0,d.useEffect)(()=>{let t=m.current;!t||h.current||!g.isBackendReady||!g.userIdentity||(h.current=!0,m.current=``,g.joinRoom(t).then(t=>{t&&n(e(`game.toast.joinedRoom`),`success`)}))},[g.isBackendReady,g.userIdentity,g.joinRoom,n,e]),(0,d.useEffect)(()=>{if(!g.roomCode)return;let e=`/game/gandengyan?room=${g.roomCode}`;`${window.location.pathname}${window.location.search}`!==e&&window.history.replaceState(null,``,e)},[g.roomCode]);let _=(0,d.useMemo)(()=>ae(g.messages,g.roomCode?{gameId:Y,roomCode:g.roomCode}:{gameId:Y}),[g.messages,g.roomCode]),v=(0,d.useMemo)(()=>oe(g.messages,{gameId:Y,roomCode:g.roomCode}),[g.messages,g.roomCode]),y=v?.payload?.state,b=y?.players.find(e=>Te(e.address,g.userIdentity?.address)),x=Te(y?.ownerAddress||_.hostAddress,g.userIdentity?.address),S=y?.status===`playing`&&y.currentSeat===b?.seat,C=(0,d.useMemo)(()=>s.map(e=>b?.hand.find(t=>t.id===e)).filter(Boolean),[s,b]),w=(0,d.useMemo)(()=>he(C),[C]),T=g.roomCode&&typeof window<`u`?`${window.location.origin}/game/gandengyan?room=${g.roomCode}`:``,E=(0,d.useRef)(-1),D=(0,d.useRef)(!1);(0,d.useEffect)(()=>{u([])},[y?.seq]),(0,d.useEffect)(()=>{if(!y)return;let n=y.seq;if(E.current<0){E.current=n;return}if(n!==E.current&&(E.current=n,y.status!==`finished`&&(D.current=!1),y.status===`finished`&&y.winnerSeat!==null)){D.current||(D.current=!0,Ee(e(`game.gandengyan.speech.gameOver`),t));return}},[t,y?.seq,e]),(0,d.useEffect)(()=>{if(!x||!g.roomCode||!g.userIdentity||v||_.players.length===0)return;let e=le({roomCode:g.roomCode,ownerAddress:g.userIdentity.address,ownerName:g.userIdentity.displayName||g.userIdentity.username,players:_.players});g.sendRoomEvent(`room:state`,{state:e,seq:e.seq})},[g,x,v,_.players]),(0,d.useEffect)(()=>{if(!y||!x||y.status!==`lobby`)return;let e=ue(y,_.players);e&&ke(y.players,e.players)&&g.sendRoomEvent(`room:state`,{state:e,seq:e.seq})},[g,x,_.players,y]);let O=(0,d.useRef)(0),k=(0,d.useMemo)(()=>g.roomEvents.filter(e=>e.event?.event===`player:leave`),[g.roomEvents]);(0,d.useEffect)(()=>{if(k.length<=O.current)return;let t=k.slice(O.current);O.current=k.length;for(let r of t)n(e(`game.toast.playerLeft`,{player:r.event?.payload?.player?.name||e(`game.player`)}),`info`)},[k,n,e]),(0,d.useEffect)(()=>{if(!y||!x||y.status!==`playing`)return;let e=new Set(_.players.map(e=>e.address.toLowerCase())),t=y.players.find(t=>!e.has(t.address.toLowerCase()));if(!t)return;let n=me(y,t.address);n&&N(n)},[g,x,_.players,y]);async function A(){await g.createRoom()&&n(e(`game.toast.roomCreated`),`success`)}async function j(t){t.preventDefault(),await g.joinRoom(a)&&n(e(`game.toast.joinedRoom`),`success`)}async function M(){T&&(await navigator.clipboard.writeText(T),p(!0),setTimeout(()=>p(!1),1400))}async function N(e){await g.sendRoomEvent(`room:state`,{state:e,seq:e.seq})}async function P(){if(!(!y||!x))try{await N(de(y))}catch(t){n(t instanceof Error?t.message:e(`game.zhajinhua.error.startFailed`),`error`)}}async function F(){await P()}async function I(){if(!y||!g.userIdentity)return;let t=fe(y,g.userIdentity.address,s);if(!t.ok){n(t.error||e(`game.gandengyan.error.playFailed`),`error`);return}await N(t.state)}async function L(){if(!y||!g.userIdentity)return;let t=pe(y,g.userIdentity.address);if(!t.ok){n(t.error||e(`game.gandengyan.error.actionFailed`),`error`);return}await N(t.state)}function R(e){u(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])}return(0,J.jsx)(te,{sidebar:({closeSidebar:e})=>(0,J.jsx)(ie,{activeGame:`gandengyan`,closeSidebar:e}),headerTitle:(0,J.jsx)(`h2`,{className:`header-title`,children:e(`game.gandengyan.title`)}),headerRight:(0,J.jsx)(`div`,{className:q.headerActions,children:y&&(0,J.jsxs)(`button`,{className:`btn btn-sm`,onClick:M,children:[(0,J.jsx)(ee,{size:14}),e(f?`common.copied`:`game.action.shareRoom`)]})}),children:(0,J.jsx)(`main`,{className:q.page,children:y?(0,J.jsxs)(`section`,{className:q.gameGrid,children:[(0,J.jsxs)(`div`,{className:q.tablePanel,children:[(0,J.jsxs)(`div`,{className:q.roomBar,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{translate:`no`,children:e(`game.roomLabel`,{room:y.id})}),(0,J.jsx)(`span`,{children:y.status===`lobby`?e(`game.status.waitingStart`):y.status===`finished`?e(`game.status.finished`):e(`game.status.playing`)})]}),(0,J.jsx)(`div`,{className:q.badges,children:(0,J.jsx)(`span`,{children:g.connected?e(`game.status.online`):e(`game.status.offline`)})})]}),(0,J.jsx)(`div`,{className:q.seats,children:y.players.map(t=>(0,J.jsx)(Oe,{player:t,active:y.currentSeat===t.seat,winner:y.winnerSeat===t.seat,relation:Me(b,t,y.players.length,e),presenceByAddress:g.presenceByAddress,onlineAddresses:g.onlineAddresses},t.seat))}),(0,J.jsxs)(`div`,{className:q.centerTable,children:[(0,J.jsxs)(`div`,{className:q.deckBox,children:[(0,J.jsx)(`span`,{children:e(`game.gandengyan.deck`)}),(0,J.jsx)(`strong`,{children:y.deckCount})]}),(0,J.jsx)(`div`,{className:q.playedBox,children:y.table?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`strong`,{children:e(`game.gandengyan.tablePlay`,{player:Q(y.players.find(e=>e.seat===y.table?.seat),g.presenceByAddress)||y.table.playerName,combo:y.table.combo?.label||e(`game.card`)})}),(0,J.jsx)(`div`,{className:q.playedCards,children:y.table.cards.map(e=>(0,J.jsx)($,{card:e,small:!0},e.id))})]}):(0,J.jsx)(`span`,{children:e(`game.gandengyan.waitingLead`)})}),(0,J.jsxs)(`div`,{className:q.deckBox,children:[(0,J.jsx)(`span`,{children:e(`game.gandengyan.baseScore`)}),(0,J.jsx)(`strong`,{children:y.baseScore})]})]}),(0,J.jsx)(`div`,{className:q.notice,children:y.status===`finished`?y.roundResult?(0,J.jsxs)(`div`,{className:q.resultDetail,children:[(0,J.jsxs)(`p`,{children:[e(`game.gandengyan.result.winnerGain`,{player:y.roundResult.winnerName,score:y.roundResult.winnerGain}),y.roundResult.bombCount>0&&e(`game.gandengyan.result.bombCount`,{count:y.roundResult.bombCount})]}),y.roundResult.losers.map(t=>(0,J.jsx)(`p`,{children:t.sealed?e(`game.gandengyan.result.sealedLoss`,{player:t.name,loss:20}):e(`game.gandengyan.result.cardsLeftLoss`,{player:t.name,cards:t.cardsLeft,loss:t.loss})},t.seat))]}):e(`game.gandengyan.result.winner`,{player:Q(y.players.find(e=>e.seat===y.winnerSeat),g.presenceByAddress)||e(`game.player`)}):S?e(`game.gandengyan.status.yourTurn`):e(`game.zhajinhua.status.waitingPlayer`,{player:Q(y.players.find(e=>e.seat===y.currentSeat),g.presenceByAddress)||e(`game.player`)})})]}),(0,J.jsxs)(`aside`,{className:q.sidePanel,children:[(0,J.jsxs)(`section`,{className:q.panel,children:[(0,J.jsx)(`h3`,{children:e(`game.gandengyan.roundPanel`)}),x&&y.status===`lobby`&&(0,J.jsxs)(`button`,{className:`btn btn-primary`,disabled:y.players.length<2,onClick:P,children:[(0,J.jsx)(ne,{size:16}),e(`game.action.startRound`)]}),x&&y.status===`finished`&&(0,J.jsxs)(`button`,{className:`btn btn-primary`,onClick:F,children:[(0,J.jsx)(ce,{size:16}),e(`game.action.nextRound`)]}),!x&&(0,J.jsx)(`p`,{className:q.status,children:e(`game.waitingHost`)})]}),(0,J.jsxs)(`section`,{className:q.panel,children:[(0,J.jsx)(`h3`,{children:e(`game.gandengyan.score`)}),(0,J.jsxs)(`div`,{className:q.scoreMeta,children:[(0,J.jsx)(`span`,{children:e(`game.gandengyan.bombCount`,{count:y.bombCount})}),(0,J.jsx)(`span`,{children:e(`game.gandengyan.discardCount`,{count:y.discardCount})})]}),y.players.map(e=>(0,J.jsxs)(`div`,{className:q.scoreRow,children:[(0,J.jsx)(`span`,{translate:`no`,children:Q(e,g.presenceByAddress)}),(0,J.jsx)(`strong`,{children:e.score})]},e.seat))]}),(0,J.jsxs)(`section`,{className:X(q.panel,q.logPanel),children:[(0,J.jsx)(`h3`,{children:e(`game.gandengyan.log`)}),y.log.map((e,t)=>(0,J.jsx)(`p`,{translate:`no`,children:e},`${e}-${t}`))]})]}),(0,J.jsxs)(`div`,{className:q.handPanel,children:[(0,J.jsx)(Oe,{player:b,active:S,winner:y.winnerSeat===b?.seat,presenceByAddress:g.presenceByAddress,onlineAddresses:g.onlineAddresses}),(0,J.jsx)(`div`,{className:q.hand,children:b?.hand.map(e=>(0,J.jsx)(`button`,{className:X(q.cardButton,s.includes(e.id)&&q.picked),onClick:()=>R(e.id),children:(0,J.jsx)($,{card:e})},e.id))}),(0,J.jsxs)(`div`,{className:q.actions,children:[(0,J.jsxs)(`div`,{className:X(q.preview,w&&q.valid),children:[(0,J.jsx)(`strong`,{children:w?w.label:s.length?e(`game.gandengyan.invalidCombo`):e(`game.gandengyan.selectCards`)}),(0,J.jsx)(`span`,{children:C.map(e=>e.label).join(` `)||e(`game.gandengyan.jokerOrderHint`)})]}),(0,J.jsxs)(`button`,{className:`btn btn-primary`,disabled:!S||s.length===0||!w,onClick:I,children:[(0,J.jsx)(re,{size:16}),e(`game.gandengyan.action.play`)]}),(0,J.jsx)(`button`,{className:`btn`,disabled:!S||!y.table,onClick:L,children:e(`game.gandengyan.action.pass`)})]})]})]}):(0,J.jsxs)(`section`,{className:q.entry,children:[(0,J.jsxs)(`div`,{className:q.entryBrand,children:[(0,J.jsx)(`div`,{className:q.cardMark,children:e(`game.gandengyan.mark`)}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h1`,{children:e(`game.gandengyan.hero.title`)}),(0,J.jsx)(`p`,{children:e(`game.hero.desc`)})]})]}),(0,J.jsxs)(`div`,{className:q.entryPanel,children:[(0,J.jsxs)(`div`,{className:q.accountLine,children:[(0,J.jsx)(`span`,{children:e(`game.currentAccount`)}),(0,J.jsx)(`strong`,{translate:`no`,children:g.userIdentity?.displayName||e(`web3.notSignedIn`)})]}),(0,J.jsxs)(`button`,{className:`btn btn-primary`,disabled:g.joining,onClick:A,children:[(0,J.jsx)(ne,{size:16}),e(`game.action.createRoom`)]}),(0,J.jsxs)(`form`,{onSubmit:j,className:q.joinForm,children:[(0,J.jsxs)(`label`,{children:[e(`game.roomCode`),(0,J.jsx)(`input`,{value:a,maxLength:8,onChange:e=>o(e.target.value.toUpperCase()),placeholder:e(`game.roomCode.placeholder`)})]}),(0,J.jsx)(`button`,{className:`btn`,disabled:g.joining||!a,children:e(`game.action.joinRoom`)})]}),(0,J.jsx)(`p`,{className:q.status,children:g.isBackendReady?e(`game.status.nodeConnected`):e(`game.status.nodeConnecting`)})]})]})})})}function Oe({player:e,active:t,winner:n,relation:r=``,presenceByAddress:i,onlineAddresses:a}){let{t:o}=l();if(!e)return null;let s=je(e,i,a);return(0,J.jsxs)(`div`,{className:X(q.player,t&&q.active,n&&q.winner),children:[(0,J.jsxs)(`div`,{className:X(q.avatar,!s.online&&q.avatarOffline),translate:`no`,children:[(0,J.jsx)(`img`,{src:u(e.address,s.avatar),alt:``}),s.online&&(0,J.jsx)(`span`,{className:q.onlineDot})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{translate:`no`,children:s.name}),(0,J.jsxs)(`span`,{children:[r,r?` · `:``,o(`game.gandengyan.handCount`,{count:e.handCount})]})]})]})}function ke(e,t){return e.length===t.length?t.some((t,n)=>{let r=e[n];return Z(r?.address)!==Z(t.address)||r?.name!==t.name||(r?.avatar||``)!==(t.avatar||``)}):!0}function Z(e=``){return String(e||``).trim().toLowerCase()}function Ae(e=``){return e?`${e.slice(0,6)}...${e.slice(-4)}`:``}function Q(e,t){if(!e)return``;let n=Z(e.address),r=t.get(n)?.displayName||e.name;return String(r||Ae(e.address)).trim()}function je(e,t,n){let r=Z(e.address),i=t.get(r);return{name:Q(e,t),avatar:i?.avatar||e.avatar||``,online:r?n.has(r):!1}}function $({card:e,small:t=!1}){return(0,J.jsxs)(`div`,{className:X(q.card,q[e.color],t&&q.small),children:[(0,J.jsx)(`span`,{children:e.label}),(0,J.jsx)(`i`,{children:e.suit===`Joker`?`*`:e.label.slice(0,1)})]})}function Me(e,t,n,r){if(!e)return r(`game.gandengyan.position.seat`,{seat:t.seat+1});let i=(t.seat-e.seat+n)%n;return i===0?r(`game.gandengyan.position.me`):n===2?r(`game.gandengyan.position.opponent`):n===3?r(i===1?`game.gandengyan.position.nextOpponent`:`game.gandengyan.position.prevOpponent`):n===4?r(i===1?`game.gandengyan.position.nextOpponent`:i===2?`game.gandengyan.position.partner`:`game.gandengyan.position.prevOpponent`):i%2==0?r(`game.gandengyan.position.seatPartner`,{seat:t.seat+1}):r(`game.gandengyan.position.seatOpponent`,{seat:t.seat+1})}var Ne=a(`/game/gandengyan/`)({component:De});export{Ne 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,_ as o,g as s,t as c}from"./useAppStore-Pjif7nCR.js";import{a as l}from"./i18n-BPfshhQc.js";import{t as ee}from"./copy-BofKiKH_.js";import{t as te}from"./AppShell-kfQyRhZy.js";import{t as ne}from"./play-B6IGTGxm.js";import{t as re}from"./send-yxXCy-t8.js";import{i as ie,n as ae,r as oe,t as se}from"./useGameRoom-BHZNzWJt.js";import{g as u}from"./index-AZPpawN1.js";var ce=r(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),d=t(e(),1),f=[`S`,`H`,`C`,`D`],p=[`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`J`,`Q`,`K`,`A`,`2`],m=p.filter(e=>e!==`2`),h=new Map(p.map((e,t)=>[e,t+3])),g=5,_=20,v=1e3;function le({roomCode:e,ownerAddress:t,ownerName:n,players:r=[],random:i=Math.random}){let a=E(r);return a.some(e=>e.address===s(t))||a.unshift({address:s(t),name:K(n),avatar:``}),y({id:String(e||``).toUpperCase(),ownerAddress:s(t),status:`lobby`,seq:1,players:a.slice(0,6).map((e,t)=>({address:e.address,name:K(e.name),avatar:o(e.avatar),seat:t,hand:[],handCount:0,score:v,playedCards:0})),deck:[],discard:[],table:null,currentSeat:0,lastWinnerSeat:null,previousWinnerSeat:null,passSeats:[],baseScore:1,bombCount:0,diceRolls:[],roundResult:null,log:[`房间已创建`],winnerSeat:null,random:i})}function ue(e,t=[]){let n=b(e);if(!n||n.status!==`lobby`)return n;let r=new Map(n.players.map(e=>[e.address,e.score]));return n.players=E(t).slice(0,6).map((e,t)=>({address:e.address,name:K(e.name),avatar:o(e.avatar),seat:t,hand:[],handCount:0,score:r.get(e.address)??v,playedCards:0})),n.seq+=1,y(n)}function de(e,t=Math.random){let n=b(e);if(!n||n.players.length<2)throw Error(`至少需要 2 名玩家`);n.deck=N(M(),t),n.discard=[],n.table=null,n.passSeats=[],n.winnerSeat=null,n.roundResult=null,n.baseScore=1,n.bombCount=0,n.status=`playing`;for(let e of R(n))e.hand=P(n,g),e.handCount=e.hand.length,e.playedCards=0,F(e.hand);let r=k(n,t);return n.currentSeat=r.seat,n.lastWinnerSeat=null,n.log=[`新一局开始,${r.name} 先出牌`],n.diceRolls.length>0&&n.log.unshift(`骰子结果:${n.diceRolls.map(e=>`${e.name} ${e.value}`).join(`,`)}`),n.seq+=1,y(n)}function fe(e,t,n){let r=b(e),i=I(r),a=s(t);if(!i||i.address!==a)return{ok:!1,error:`还没轮到你`,state:y(r)};let o=n.map(e=>i.hand.find(t=>t.id===e));if(o.length===0||o.some(e=>!e))return{ok:!1,error:`手牌不存在`,state:y(r)};let c=he(o);return c?T(c,r.table?.combo)?(o.sort(V),i.hand=i.hand.filter(e=>!n.includes(e.id)),i.handCount=i.hand.length,i.playedCards+=o.length,r.discard.push(...o),r.table={seat:i.seat,playerName:i.name,cards:o,combo:c},r.passSeats=[],r.lastWinnerSeat=i.seat,c.type===`bomb`&&(r.bombCount+=1,r.baseScore*=2),r.log.unshift(`${i.name} 出 ${c.label} ${o.map(G).join(` `)}${c.type===`bomb`?`,底分 ${r.baseScore}`:``}`),i.hand.length===0?A(r,i):z(r),r.seq+=1,{ok:!0,state:y(r)}):{ok:!1,error:`出的牌压不过上一手`,state:y(r)}:{ok:!1,error:`这个牌型不合法`,state:y(r)}}function pe(e,t){let n=b(e),r=I(n),i=s(t);return!r||r.address!==i?{ok:!1,error:`还没轮到你`,state:y(n)}:n.table?(n.passSeats.includes(r.seat)||n.passSeats.push(r.seat),n.log.unshift(`${r.name} 不要`),L(n).map(e=>e.seat).filter(e=>e!==n.lastWinnerSeat).every(e=>n.passSeats.includes(e))?(j(n),n.currentSeat=n.lastWinnerSeat,n.table=null,n.passSeats=[],n.log.unshift(`本轮结束,所有玩家各补 1 张,重新领出`)):z(n),n.seq+=1,{ok:!0,state:y(n)}):{ok:!1,error:`领出时不能不要`,state:y(n)}}function me(e,t){let n=b(e);if(!n)return null;let r=s(t),i=n.players.findIndex(e=>e.address===r);if(i===-1)return y(n);let a=n.players[i],o=n.currentSeat===a.seat,c=n.lastWinnerSeat===a.seat;n.players.splice(i,1),n.passSeats=n.passSeats.filter(e=>e!==a.seat),n.log.unshift(`${a.name} 已退出房间`);let l=R(n);if(n.status===`playing`)if(l.length<=1)l.length===1?A(n,l[0]):(n.status=`finished`,n.log.unshift(`玩家不足,本局结束`));else{if(o){let e=L(n);if(e.length>0){let t=e.findIndex(e=>e.seat>a.seat);n.currentSeat=e[t>=0?t:0].seat}}c&&n.table&&(n.table=null,n.passSeats=[])}return n.seq+=1,y(n)}function y(e){return e?{id:e.id,ownerAddress:e.ownerAddress,status:e.status,seq:Number(e.seq||1),deck:Array.isArray(e.deck)?e.deck.map(W):[],deckCount:e.deck?.length||Number(e.deckCount||0),discard:Array.isArray(e.discard)?e.discard.map(W):[],discardCount:e.discard?.length||Number(e.discardCount||0),currentSeat:Number(e.currentSeat||0),lastWinnerSeat:e.lastWinnerSeat===null||e.lastWinnerSeat===void 0?null:Number(e.lastWinnerSeat),previousWinnerSeat:e.previousWinnerSeat===null||e.previousWinnerSeat===void 0?null:Number(e.previousWinnerSeat),baseScore:Number(e.baseScore||1),bombCount:Number(e.bombCount||0),diceRolls:Array.isArray(e.diceRolls)?e.diceRolls:[],roundResult:e.roundResult||null,table:e.table?{...e.table,cards:e.table.cards.map(W)}:null,passSeats:Array.isArray(e.passSeats)?e.passSeats:[],winnerSeat:e.winnerSeat===null||e.winnerSeat===void 0?null:Number(e.winnerSeat),log:Array.isArray(e.log)?e.log.slice(0,18):[],players:R(e).map(e=>({address:e.address,name:e.name,avatar:o(e.avatar),seat:e.seat,handCount:e.hand?.length??e.handCount??0,score:Number(e.score??v),playedCards:Number(e.playedCards||0),hand:Array.isArray(e.hand)?e.hand.map(W):[]}))}:null}function b(e){return!e||typeof e!=`object`?null:{id:String(e.id||``).toUpperCase(),ownerAddress:s(e.ownerAddress),status:e.status===`playing`||e.status===`finished`?e.status:`lobby`,seq:Number(e.seq||1),players:Array.isArray(e.players)?e.players.map(D).filter(Boolean):[],deck:Array.isArray(e.deck)?e.deck.map(ve).filter(Boolean):[],discard:Array.isArray(e.discard)?e.discard.map(O).filter(Boolean):[],table:e.table&&typeof e.table==`object`?{...e.table,cards:Array.isArray(e.table.cards)?e.table.cards.map(O).filter(Boolean):[]}:null,currentSeat:Number(e.currentSeat||0),lastWinnerSeat:e.lastWinnerSeat===null||e.lastWinnerSeat===void 0?null:Number(e.lastWinnerSeat),previousWinnerSeat:e.previousWinnerSeat===null||e.previousWinnerSeat===void 0?null:Number(e.previousWinnerSeat),passSeats:Array.isArray(e.passSeats)?e.passSeats.map(Number):[],baseScore:Number(e.baseScore||1),bombCount:Number(e.bombCount||0),diceRolls:Array.isArray(e.diceRolls)?e.diceRolls:[],roundResult:e.roundResult||null,log:Array.isArray(e.log)?e.log.map(String):[],winnerSeat:e.winnerSeat===null||e.winnerSeat===void 0?null:Number(e.winnerSeat)}}function he(e){if(!e?.length)return null;e=[...e].sort(V);let t=e.filter(U).length,n=e.filter(e=>!U(e));if(n.length===0)return null;let r=x(e,n,t);if(r)return r;if(e.length===1&&t===0)return w(`single`,H(e[0]),1,[H(e[0])]);if(e.length===2&&B(n,t)){let e=ge(n);return w(`pair`,e,2,[e,e])}return S(e)||C(e)}function x(e,t,n){if(e.length<3||!B(t,n))return null;let r=ge(t);return w(`bomb`,r,e.length,Array(e.length).fill(r),n===0)}function S(e){if(e.length<3)return null;let t=e.filter(U).length,n=e.filter(e=>!U(e));for(let r=0;r<=m.length-e.length;r+=1){let i=m.slice(r,r+e.length).map(e=>h.get(e)),a=[...i],o=0;for(let e of n){let t=a.indexOf(H(e));t!==-1&&(a.splice(t,1),o+=1)}if(o+t===e.length&&a.length===t)return w(`straight`,i.at(-1),e.length,i)}return null}function C(e){if(e.length<4||e.length%2!=0)return null;let t=e.length/2,n=e.filter(U).length,r=e.filter(e=>!U(e));for(let i=0;i<=m.length-t;i+=1){let a=m.slice(i,i+t).map(e=>h.get(e)),o=a.flatMap(e=>[e,e]),s=0;for(let e of r){let t=o.indexOf(H(e));t!==-1&&(o.splice(t,1),s+=1)}if(s+n===e.length&&o.length===n){let t=a.flatMap(e=>[e,e]);return w(`pairStraight`,a.at(-1),e.length,t)}}return null}function w(e,t,n,r,i=!0){return{type:e,value:t,length:n,resolvedValues:r,pure:i,label:xe({type:e,value:t,length:n,resolvedValues:r,pure:i})}}function T(e,t){return e?!t||e.type===`bomb`&&t.type!==`bomb`?!0:e.type===t.type?e.type===`bomb`?e.length===t.length?e.value===t.value?e.pure&&!t.pure:e.value>t.value:e.length>t.length:e.length===t.length?e.type===`single`||e.type===`pair`?e.value===Ce(t.value)||e.value===h.get(`2`)&&t.value!==h.get(`2`):e.value===Ce(t.value):!1:!1:!1}function E(e){let t=new Set;return e.map(e=>({address:s(e.address),name:K(e.name),avatar:o(e.avatar),publicKey:String(e.publicKey||``)})).filter(e=>!e.address||t.has(e.address)?!1:(t.add(e.address),!0))}function D(e){let t=s(e.address);return t?{address:t,name:K(e.name),avatar:o(e.avatar),seat:Number(e.seat||0),hand:Array.isArray(e.hand)?e.hand.map(O).filter(Boolean):[],handCount:Number(e.handCount||0),score:Number(e.score??v),playedCards:Number(e.playedCards||0)}:null}function O(e){if(!e||typeof e!=`object`)return null;let t=String(e.rank||``),n=String(e.suit||``);return!h.has(t)&&t!==`SJ`&&t!==`BJ`||!f.includes(n)&&n!==`Joker`?null:{id:String(e.id||`${n}-${t}`),suit:n,rank:t,label:e.label||G({suit:n,rank:t}),color:e.color||be({suit:n,rank:t})}}function k(e,t){if(e.previousWinnerSeat!==null)return e.diceRolls=[],R(e).find(t=>t.seat===e.previousWinnerSeat)||R(e)[0];let n=R(e),r=[];for(;n.length>1;){r=n.map(e=>({seat:e.seat,name:e.name,value:we(t)}));let i=Math.max(...r.map(e=>e.value)),a=r.filter(e=>e.value===i);if(a.length===1)return e.diceRolls=r,n.find(e=>e.seat===a[0].seat);n=n.filter(e=>a.some(t=>t.seat===e.seat))}return e.diceRolls=r,n[0]}function A(e,t){e.status=`finished`,e.winnerSeat=t.seat,e.previousWinnerSeat=t.seat;let n=[],r=0;for(let i of R(e)){if(i.seat===t.seat)continue;let a=i.playedCards===0,o=a?_:i.hand.length*e.baseScore*.5;i.score-=o,r+=o,n.push({seat:i.seat,name:i.name,loss:o,sealed:a,cardsLeft:i.hand.length})}t.score+=r,e.roundResult={winnerSeat:t.seat,winnerName:t.name,winnerGain:r,baseScore:e.baseScore,bombCount:e.bombCount,losers:n},e.log.unshift(`${t.name} 获胜,赢 ${r} 分`)}function j(e){for(let t of L(e)){if(e.deck.length===0)break;t.hand.push(...P(e,1)),t.handCount=t.hand.length,F(t.hand)}}function M(){let e=[];for(let t of f)for(let n of p)e.push({id:`${t}-${n}`,suit:t,rank:n});return e.push({id:`SJ`,suit:`Joker`,rank:`SJ`}),e.push({id:`BJ`,suit:`Joker`,rank:`BJ`}),e.map(W)}function N(e,t){let n=[...e];for(let e=n.length-1;e>0;--e){let r=Math.floor(t()*(e+1));[n[e],n[r]]=[n[r],n[e]]}return n}function P(e,t){return e.deck.splice(0,t)}function F(e){e.sort(V)}function I(e){return e.players.find(t=>t.seat===e.currentSeat)}function L(e){return R(e).filter(e=>e.hand.length>0)}function R(e){return[...e?.players||[]].sort((e,t)=>e.seat-t.seat)}function z(e){let t=L(e).map(e=>e.seat);e.currentSeat=t[(t.indexOf(e.currentSeat)+1)%t.length]}function B(e,t=0){if(e.length===0)return!1;let n=e[0].rank;return e.every(e=>e.rank===n)&&e.length+t>=2}function ge(e){return H(e[0])}function V(e,t){return H(e)-H(t)||_e(e.suit)-_e(t.suit)}function H(e){return h.get(e.rank)||99}function U(e){return e.rank===`SJ`||e.rank===`BJ`}function _e(e){return{D:0,C:1,H:2,S:3,Joker:4}[e]||0}function ve(e){if(typeof e==`string`){let[t,n]=e.split(`-`);return O({id:e,suit:t,rank:n})}return O(e)}function W(e){return{id:e.id,suit:e.suit,rank:e.rank,label:G(e),color:be(e)}}function G(e){return e.rank===`SJ`?`小王`:e.rank===`BJ`?`大王`:`${ye(e.suit)}${e.rank}`}function ye(e){return{S:`♠`,H:`♥`,C:`♣`,D:`♦`}[e]||``}function be(e){return e.suit===`H`||e.suit===`D`||e.rank===`BJ`?`red`:`black`}function xe(e){let t=e.resolvedValues?.length?`(${e.resolvedValues.map(Se).join(` `)})`:``;return`${{single:`单张`,pair:`对子`,straight:`顺子`,pairStraight:`连对`,bomb:e.pure?`纯炸弹`:`带王炸弹`}[e.type]}${t}`}function Se(e){return p.find(t=>h.get(t)===e)||String(e)}function Ce(e){let t=p.findIndex(t=>h.get(t)===e);return t===-1||t>=p.length-1?null:h.get(p[t+1])}function we(e){return Math.floor(e()*6)+1}function K(e){return String(e||`玩家`).trim().slice(0,16)||`玩家`}var q={page:`_page_1c8jk_1`,headerActions:`_headerActions_1c8jk_7`,entry:`_entry_1c8jk_13`,entryBrand:`_entryBrand_1c8jk_23`,cardMark:`_cardMark_1c8jk_29`,entryPanel:`_entryPanel_1c8jk_59`,panel:`_panel_1c8jk_60`,handPanel:`_handPanel_1c8jk_61`,accountLine:`_accountLine_1c8jk_74`,scoreMeta:`_scoreMeta_1c8jk_75`,roomBar:`_roomBar_1c8jk_76`,badges:`_badges_1c8jk_77`,actions:`_actions_1c8jk_78`,joinForm:`_joinForm_1c8jk_98`,status:`_status_1c8jk_119`,gameGrid:`_gameGrid_1c8jk_125`,tablePanel:`_tablePanel_1c8jk_136`,seats:`_seats_1c8jk_170`,player:`_player_1c8jk_176`,active:`_active_1c8jk_193`,winner:`_winner_1c8jk_197`,avatar:`_avatar_1c8jk_201`,avatarOffline:`_avatarOffline_1c8jk_222`,onlineDot:`_onlineDot_1c8jk_227`,centerTable:`_centerTable_1c8jk_253`,deckBox:`_deckBox_1c8jk_260`,playedBox:`_playedBox_1c8jk_261`,playedCards:`_playedCards_1c8jk_289`,notice:`_notice_1c8jk_297`,resultDetail:`_resultDetail_1c8jk_305`,sidePanel:`_sidePanel_1c8jk_316`,scoreRow:`_scoreRow_1c8jk_341`,logPanel:`_logPanel_1c8jk_349`,hand:`_hand_1c8jk_61`,cardButton:`_cardButton_1c8jk_376`,picked:`_picked_1c8jk_386`,card:`_card_1c8jk_29`,red:`_red_1c8jk_417`,black:`_black_1c8jk_421`,small:`_small_1c8jk_425`,preview:`_preview_1c8jk_443`,valid:`_valid_1c8jk_466`},J=n(),Y=`gandengyan`;function X(...e){return e.filter(Boolean).join(` `)}function Te(e,t){return String(e||``).toLowerCase()===String(t||``).toLowerCase()}function Ee(e,t){if(typeof window>`u`||!(`speechSynthesis`in window)||!e)return;window.speechSynthesis.cancel();let n=new SpeechSynthesisUtterance(e);n.lang=t,n.rate=1.1,window.speechSynthesis.speak(n)}function De(){let{t:e,locale:t}=l(),n=c(e=>e.addToast),r=i(e=>e.initializeUser),[a,o]=(0,d.useState)(``),[s,u]=(0,d.useState)([]),[f,p]=(0,d.useState)(!1),m=(0,d.useRef)(``),h=(0,d.useRef)(!1),g=se({gameId:Y,onError:e=>n(e,`error`)});(0,d.useEffect)(()=>{r()},[r]),(0,d.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get(`room`)?.toUpperCase();e&&(o(e),m.current=e)},[]),(0,d.useEffect)(()=>{let t=m.current;!t||h.current||!g.isBackendReady||!g.userIdentity||(h.current=!0,m.current=``,g.joinRoom(t).then(t=>{t&&n(e(`game.toast.joinedRoom`),`success`)}))},[g.isBackendReady,g.userIdentity,g.joinRoom,n,e]),(0,d.useEffect)(()=>{if(!g.roomCode)return;let e=`/game/gandengyan?room=${g.roomCode}`;`${window.location.pathname}${window.location.search}`!==e&&window.history.replaceState(null,``,e)},[g.roomCode]);let _=(0,d.useMemo)(()=>ae(g.messages,g.roomCode?{gameId:Y,roomCode:g.roomCode}:{gameId:Y}),[g.messages,g.roomCode]),v=(0,d.useMemo)(()=>oe(g.messages,{gameId:Y,roomCode:g.roomCode}),[g.messages,g.roomCode]),y=v?.payload?.state,b=y?.players.find(e=>Te(e.address,g.userIdentity?.address)),x=Te(y?.ownerAddress||_.hostAddress,g.userIdentity?.address),S=y?.status===`playing`&&y.currentSeat===b?.seat,C=(0,d.useMemo)(()=>s.map(e=>b?.hand.find(t=>t.id===e)).filter(Boolean),[s,b]),w=(0,d.useMemo)(()=>he(C),[C]),T=g.roomCode&&typeof window<`u`?`${window.location.origin}/game/gandengyan?room=${g.roomCode}`:``,E=(0,d.useRef)(-1),D=(0,d.useRef)(!1);(0,d.useEffect)(()=>{u([])},[y?.seq]),(0,d.useEffect)(()=>{if(!y)return;let n=y.seq;if(E.current<0){E.current=n;return}if(n!==E.current&&(E.current=n,y.status!==`finished`&&(D.current=!1),y.status===`finished`&&y.winnerSeat!==null)){D.current||(D.current=!0,Ee(e(`game.gandengyan.speech.gameOver`),t));return}},[t,y?.seq,e]),(0,d.useEffect)(()=>{if(!x||!g.roomCode||!g.userIdentity||v||_.players.length===0)return;let e=le({roomCode:g.roomCode,ownerAddress:g.userIdentity.address,ownerName:g.userIdentity.displayName||g.userIdentity.username,players:_.players});g.sendRoomEvent(`room:state`,{state:e,seq:e.seq})},[g,x,v,_.players]),(0,d.useEffect)(()=>{if(!y||!x||y.status!==`lobby`)return;let e=ue(y,_.players);e&&ke(y.players,e.players)&&g.sendRoomEvent(`room:state`,{state:e,seq:e.seq})},[g,x,_.players,y]);let O=(0,d.useRef)(0),k=(0,d.useMemo)(()=>g.roomEvents.filter(e=>e.event?.event===`player:leave`),[g.roomEvents]);(0,d.useEffect)(()=>{if(k.length<=O.current)return;let t=k.slice(O.current);O.current=k.length;for(let r of t)n(e(`game.toast.playerLeft`,{player:r.event?.payload?.player?.name||e(`game.player`)}),`info`)},[k,n,e]),(0,d.useEffect)(()=>{if(!y||!x||y.status!==`playing`)return;let e=new Set(_.players.map(e=>e.address.toLowerCase())),t=y.players.find(t=>!e.has(t.address.toLowerCase()));if(!t)return;let n=me(y,t.address);n&&N(n)},[g,x,_.players,y]);async function A(){await g.createRoom()&&n(e(`game.toast.roomCreated`),`success`)}async function j(t){t.preventDefault(),await g.joinRoom(a)&&n(e(`game.toast.joinedRoom`),`success`)}async function M(){T&&(await navigator.clipboard.writeText(T),p(!0),setTimeout(()=>p(!1),1400))}async function N(e){await g.sendRoomEvent(`room:state`,{state:e,seq:e.seq})}async function P(){if(!(!y||!x))try{await N(de(y))}catch(t){n(t instanceof Error?t.message:e(`game.zhajinhua.error.startFailed`),`error`)}}async function F(){await P()}async function I(){if(!y||!g.userIdentity)return;let t=fe(y,g.userIdentity.address,s);if(!t.ok){n(t.error||e(`game.gandengyan.error.playFailed`),`error`);return}await N(t.state)}async function L(){if(!y||!g.userIdentity)return;let t=pe(y,g.userIdentity.address);if(!t.ok){n(t.error||e(`game.gandengyan.error.actionFailed`),`error`);return}await N(t.state)}function R(e){u(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])}return(0,J.jsx)(te,{sidebar:({closeSidebar:e})=>(0,J.jsx)(ie,{activeGame:`gandengyan`,closeSidebar:e}),headerTitle:(0,J.jsx)(`h2`,{className:`header-title`,children:e(`game.gandengyan.title`)}),headerRight:(0,J.jsx)(`div`,{className:q.headerActions,children:y&&(0,J.jsxs)(`button`,{className:`btn btn-sm`,onClick:M,children:[(0,J.jsx)(ee,{size:14}),e(f?`common.copied`:`game.action.shareRoom`)]})}),children:(0,J.jsx)(`main`,{className:q.page,children:y?(0,J.jsxs)(`section`,{className:q.gameGrid,children:[(0,J.jsxs)(`div`,{className:q.tablePanel,children:[(0,J.jsxs)(`div`,{className:q.roomBar,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{translate:`no`,children:e(`game.roomLabel`,{room:y.id})}),(0,J.jsx)(`span`,{children:y.status===`lobby`?e(`game.status.waitingStart`):y.status===`finished`?e(`game.status.finished`):e(`game.status.playing`)})]}),(0,J.jsx)(`div`,{className:q.badges,children:(0,J.jsx)(`span`,{children:g.connected?e(`game.status.online`):e(`game.status.offline`)})})]}),(0,J.jsx)(`div`,{className:q.seats,children:y.players.map(t=>(0,J.jsx)(Oe,{player:t,active:y.currentSeat===t.seat,winner:y.winnerSeat===t.seat,relation:Me(b,t,y.players.length,e),presenceByAddress:g.presenceByAddress,onlineAddresses:g.onlineAddresses},t.seat))}),(0,J.jsxs)(`div`,{className:q.centerTable,children:[(0,J.jsxs)(`div`,{className:q.deckBox,children:[(0,J.jsx)(`span`,{children:e(`game.gandengyan.deck`)}),(0,J.jsx)(`strong`,{children:y.deckCount})]}),(0,J.jsx)(`div`,{className:q.playedBox,children:y.table?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`strong`,{children:e(`game.gandengyan.tablePlay`,{player:Q(y.players.find(e=>e.seat===y.table?.seat),g.presenceByAddress)||y.table.playerName,combo:y.table.combo?.label||e(`game.card`)})}),(0,J.jsx)(`div`,{className:q.playedCards,children:y.table.cards.map(e=>(0,J.jsx)($,{card:e,small:!0},e.id))})]}):(0,J.jsx)(`span`,{children:e(`game.gandengyan.waitingLead`)})}),(0,J.jsxs)(`div`,{className:q.deckBox,children:[(0,J.jsx)(`span`,{children:e(`game.gandengyan.baseScore`)}),(0,J.jsx)(`strong`,{children:y.baseScore})]})]}),(0,J.jsx)(`div`,{className:q.notice,children:y.status===`finished`?y.roundResult?(0,J.jsxs)(`div`,{className:q.resultDetail,children:[(0,J.jsxs)(`p`,{children:[e(`game.gandengyan.result.winnerGain`,{player:y.roundResult.winnerName,score:y.roundResult.winnerGain}),y.roundResult.bombCount>0&&e(`game.gandengyan.result.bombCount`,{count:y.roundResult.bombCount})]}),y.roundResult.losers.map(t=>(0,J.jsx)(`p`,{children:t.sealed?e(`game.gandengyan.result.sealedLoss`,{player:t.name,loss:20}):e(`game.gandengyan.result.cardsLeftLoss`,{player:t.name,cards:t.cardsLeft,loss:t.loss})},t.seat))]}):e(`game.gandengyan.result.winner`,{player:Q(y.players.find(e=>e.seat===y.winnerSeat),g.presenceByAddress)||e(`game.player`)}):S?e(`game.gandengyan.status.yourTurn`):e(`game.zhajinhua.status.waitingPlayer`,{player:Q(y.players.find(e=>e.seat===y.currentSeat),g.presenceByAddress)||e(`game.player`)})})]}),(0,J.jsxs)(`aside`,{className:q.sidePanel,children:[(0,J.jsxs)(`section`,{className:q.panel,children:[(0,J.jsx)(`h3`,{children:e(`game.gandengyan.roundPanel`)}),x&&y.status===`lobby`&&(0,J.jsxs)(`button`,{className:`btn btn-primary`,disabled:y.players.length<2,onClick:P,children:[(0,J.jsx)(ne,{size:16}),e(`game.action.startRound`)]}),x&&y.status===`finished`&&(0,J.jsxs)(`button`,{className:`btn btn-primary`,onClick:F,children:[(0,J.jsx)(ce,{size:16}),e(`game.action.nextRound`)]}),!x&&(0,J.jsx)(`p`,{className:q.status,children:e(`game.waitingHost`)})]}),(0,J.jsxs)(`section`,{className:q.panel,children:[(0,J.jsx)(`h3`,{children:e(`game.gandengyan.score`)}),(0,J.jsxs)(`div`,{className:q.scoreMeta,children:[(0,J.jsx)(`span`,{children:e(`game.gandengyan.bombCount`,{count:y.bombCount})}),(0,J.jsx)(`span`,{children:e(`game.gandengyan.discardCount`,{count:y.discardCount})})]}),y.players.map(e=>(0,J.jsxs)(`div`,{className:q.scoreRow,children:[(0,J.jsx)(`span`,{translate:`no`,children:Q(e,g.presenceByAddress)}),(0,J.jsx)(`strong`,{children:e.score})]},e.seat))]}),(0,J.jsxs)(`section`,{className:X(q.panel,q.logPanel),children:[(0,J.jsx)(`h3`,{children:e(`game.gandengyan.log`)}),y.log.map((e,t)=>(0,J.jsx)(`p`,{translate:`no`,children:e},`${e}-${t}`))]})]}),(0,J.jsxs)(`div`,{className:q.handPanel,children:[(0,J.jsx)(Oe,{player:b,active:S,winner:y.winnerSeat===b?.seat,presenceByAddress:g.presenceByAddress,onlineAddresses:g.onlineAddresses}),(0,J.jsx)(`div`,{className:q.hand,children:b?.hand.map(e=>(0,J.jsx)(`button`,{className:X(q.cardButton,s.includes(e.id)&&q.picked),onClick:()=>R(e.id),children:(0,J.jsx)($,{card:e})},e.id))}),(0,J.jsxs)(`div`,{className:q.actions,children:[(0,J.jsxs)(`div`,{className:X(q.preview,w&&q.valid),children:[(0,J.jsx)(`strong`,{children:w?w.label:s.length?e(`game.gandengyan.invalidCombo`):e(`game.gandengyan.selectCards`)}),(0,J.jsx)(`span`,{children:C.map(e=>e.label).join(` `)||e(`game.gandengyan.jokerOrderHint`)})]}),(0,J.jsxs)(`button`,{className:`btn btn-primary`,disabled:!S||s.length===0||!w,onClick:I,children:[(0,J.jsx)(re,{size:16}),e(`game.gandengyan.action.play`)]}),(0,J.jsx)(`button`,{className:`btn`,disabled:!S||!y.table,onClick:L,children:e(`game.gandengyan.action.pass`)})]})]})]}):(0,J.jsxs)(`section`,{className:q.entry,children:[(0,J.jsxs)(`div`,{className:q.entryBrand,children:[(0,J.jsx)(`div`,{className:q.cardMark,children:e(`game.gandengyan.mark`)}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h1`,{children:e(`game.gandengyan.hero.title`)}),(0,J.jsx)(`p`,{children:e(`game.hero.desc`)})]})]}),(0,J.jsxs)(`div`,{className:q.entryPanel,children:[(0,J.jsxs)(`div`,{className:q.accountLine,children:[(0,J.jsx)(`span`,{children:e(`game.currentAccount`)}),(0,J.jsx)(`strong`,{translate:`no`,children:g.userIdentity?.displayName||e(`web3.notSignedIn`)})]}),(0,J.jsxs)(`button`,{className:`btn btn-primary`,disabled:g.joining,onClick:A,children:[(0,J.jsx)(ne,{size:16}),e(`game.action.createRoom`)]}),(0,J.jsxs)(`form`,{onSubmit:j,className:q.joinForm,children:[(0,J.jsxs)(`label`,{children:[e(`game.roomCode`),(0,J.jsx)(`input`,{value:a,maxLength:8,onChange:e=>o(e.target.value.toUpperCase()),placeholder:e(`game.roomCode.placeholder`)})]}),(0,J.jsx)(`button`,{className:`btn`,disabled:g.joining||!a,children:e(`game.action.joinRoom`)})]}),(0,J.jsx)(`p`,{className:q.status,children:g.isBackendReady?e(`game.status.nodeConnected`):e(`game.status.nodeConnecting`)})]})]})})})}function Oe({player:e,active:t,winner:n,relation:r=``,presenceByAddress:i,onlineAddresses:a}){let{t:o}=l();if(!e)return null;let s=je(e,i,a);return(0,J.jsxs)(`div`,{className:X(q.player,t&&q.active,n&&q.winner),children:[(0,J.jsxs)(`div`,{className:X(q.avatar,!s.online&&q.avatarOffline),translate:`no`,children:[(0,J.jsx)(`img`,{src:u(e.address,s.avatar),alt:``}),s.online&&(0,J.jsx)(`span`,{className:q.onlineDot})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`strong`,{translate:`no`,children:s.name}),(0,J.jsxs)(`span`,{children:[r,r?` · `:``,o(`game.gandengyan.handCount`,{count:e.handCount})]})]})]})}function ke(e,t){return e.length===t.length?t.some((t,n)=>{let r=e[n];return Z(r?.address)!==Z(t.address)||r?.name!==t.name||(r?.avatar||``)!==(t.avatar||``)}):!0}function Z(e=``){return String(e||``).trim().toLowerCase()}function Ae(e=``){return e?`${e.slice(0,6)}...${e.slice(-4)}`:``}function Q(e,t){if(!e)return``;let n=Z(e.address),r=t.get(n)?.displayName||e.name;return String(r||Ae(e.address)).trim()}function je(e,t,n){let r=Z(e.address),i=t.get(r);return{name:Q(e,t),avatar:i?.avatar||e.avatar||``,online:r?n.has(r):!1}}function $({card:e,small:t=!1}){return(0,J.jsxs)(`div`,{className:X(q.card,q[e.color],t&&q.small),children:[(0,J.jsx)(`span`,{children:e.label}),(0,J.jsx)(`i`,{children:e.suit===`Joker`?`*`:e.label.slice(0,1)})]})}function Me(e,t,n,r){if(!e)return r(`game.gandengyan.position.seat`,{seat:t.seat+1});let i=(t.seat-e.seat+n)%n;return i===0?r(`game.gandengyan.position.me`):n===2?r(`game.gandengyan.position.opponent`):n===3?r(i===1?`game.gandengyan.position.nextOpponent`:`game.gandengyan.position.prevOpponent`):n===4?r(i===1?`game.gandengyan.position.nextOpponent`:i===2?`game.gandengyan.position.partner`:`game.gandengyan.position.prevOpponent`):i%2==0?r(`game.gandengyan.position.seatPartner`,{seat:t.seat+1}):r(`game.gandengyan.position.seatOpponent`,{seat:t.seat+1})}var Ne=a(`/game/gandengyan/`)({component:De});export{Ne as Route};
@@ -0,0 +1 @@
1
+ import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{B as t,H as n,W as r}from"./useAppStore-Pjif7nCR.js";import{a as i}from"./i18n-BPfshhQc.js";import{t as a}from"./fingerprint-pattern-Z6NfIcxC.js";import{a as o}from"./AccountMenu-BpUGPUSa.js";import{t as s}from"./arrow-right-DcTPIyLV.js";import{t as c}from"./download-nQ9X-v0q.js";import{t as l}from"./gamepad-2-q3ssU_CE.js";import{t as u}from"./messages-square-Dr9v7Ilv.js";import{t as d}from"./notebook-pen-CMRWy6ni.js";import{t as f}from"./wallet-Ts6jdQzi.js";import{t as p}from"./AppTop-DydClKUv.js";import{t as m}from"./MarketingLayout-D42kTRyf.js";var h=t(`cloud-off`,[[`path`,{d:`M10.94 5.274A7 7 0 0 1 15.71 10h1.79a4.5 4.5 0 0 1 4.222 6.057`,key:`1uxyv8`}],[`path`,{d:`M18.796 18.81A4.5 4.5 0 0 1 17.5 19H9A7 7 0 0 1 5.79 5.78`,key:`99tcn7`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),g=t(`network`,[[`rect`,{x:`16`,y:`16`,width:`6`,height:`6`,rx:`1`,key:`4q2zg0`}],[`rect`,{x:`2`,y:`16`,width:`6`,height:`6`,rx:`1`,key:`8cvhb9`}],[`rect`,{x:`9`,y:`2`,width:`6`,height:`6`,rx:`1`,key:`1egb70`}],[`path`,{d:`M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3`,key:`1jsf9p`}],[`path`,{d:`M12 12V8`,key:`2874zd`}]]),_=e(),v=[`about.summary.cid`,`about.summary.seed`,`about.summary.toolbox`,`about.summary.opensource`],y=[{icon:(0,_.jsx)(a,{size:22}),titleKey:`about.section.identity.title`,bodyKey:`about.section.identity.body`,bulletKeys:[`about.section.identity.bullet.filename`,`about.section.identity.bullet.verify`,`about.section.identity.bullet.local`]},{icon:(0,_.jsx)(g,{size:22}),titleKey:`about.section.spread.title`,bodyKey:`about.section.spread.body`,bulletKeys:[`about.section.spread.bullet.seedAfterDownload`,`about.section.spread.bullet.restart`,`about.section.spread.bullet.status`]},{icon:(0,_.jsx)(h,{size:22}),titleKey:`about.section.boundary.title`,bodyKey:`about.section.boundary.body`,bulletKeys:[`about.section.boundary.bullet.keepData`,`about.section.boundary.bullet.noMarket`,`about.section.boundary.bullet.availability`]},{icon:(0,_.jsx)(u,{size:22}),titleKey:`about.section.chat.title`,bodyKey:`about.section.chat.body`,bulletKeys:[`about.section.chat.bullet.room`,`about.section.chat.bullet.voice`,`about.section.chat.bullet.attachments`]},{icon:(0,_.jsx)(d,{size:22}),titleKey:`about.section.note.title`,bodyKey:`about.section.note.body`,bulletKeys:[`about.section.note.bullet.markdown`,`about.section.note.bullet.fromChat`,`about.section.note.bullet.backup`]},{icon:(0,_.jsx)(l,{size:22}),titleKey:`about.section.game.title`,bodyKey:`about.section.game.body`,bulletKeys:[`about.section.game.bullet.channel`,`about.section.game.bullet.rooms`,`about.section.game.bullet.lightweight`]},{icon:(0,_.jsx)(f,{size:22}),titleKey:`about.section.web3.title`,bodyKey:`about.section.web3.body`,bulletKeys:[`about.section.web3.bullet.accounts`,`about.section.web3.bullet.integrate`,`about.section.web3.bullet.export`,`about.section.web3.bullet.separate`],featured:!0}];function b(){let{t:e}=i();return(0,_.jsx)(m,{header:(0,_.jsx)(x,{}),children:(0,_.jsxs)(`div`,{className:`about-page`,children:[(0,_.jsx)(`section`,{className:`about-hero`,children:(0,_.jsxs)(`div`,{className:`mkt-container`,children:[(0,_.jsx)(`p`,{className:`about-kicker`,children:e(`about.hero.kicker`)}),(0,_.jsx)(`h1`,{className:`about-title`,children:e(`about.hero.title`)}),(0,_.jsx)(`p`,{className:`about-lede`,children:e(`about.hero.desc`)}),(0,_.jsx)(`code`,{className:`about-link-example`,translate:`no`,children:e(`about.link.example`)}),(0,_.jsx)(`ul`,{className:`about-summary`,children:v.map(t=>(0,_.jsxs)(`li`,{className:`about-summary-item`,children:[(0,_.jsx)(`span`,{className:`about-summary-icon`,children:(0,_.jsx)(o,{size:15,strokeWidth:3})}),(0,_.jsx)(`span`,{children:e(t)})]},t))})]})}),(0,_.jsx)(`section`,{className:`about-section-band`,children:(0,_.jsxs)(`div`,{className:`mkt-container`,children:[(0,_.jsx)(`div`,{className:`about-section-grid`,children:y.map(t=>(0,_.jsxs)(`article`,{className:t.featured?`about-topic featured`:`about-topic`,children:[(0,_.jsx)(`div`,{className:`about-topic-icon`,children:t.icon}),(0,_.jsx)(`h2`,{children:e(t.titleKey)}),(0,_.jsx)(`p`,{children:e(t.bodyKey)}),(0,_.jsx)(`ul`,{children:t.bulletKeys.map(t=>(0,_.jsxs)(`li`,{children:[(0,_.jsx)(o,{size:14,strokeWidth:3}),(0,_.jsx)(`span`,{children:e(t)})]},t))})]},t.titleKey))}),(0,_.jsxs)(`div`,{className:`about-actions`,children:[(0,_.jsxs)(r,{to:`/chat/`,className:`btn btn-primary`,children:[e(`about.cta.chat`),(0,_.jsx)(s,{size:16})]}),(0,_.jsxs)(r,{to:`/download/`,className:`btn btn-secondary`,children:[(0,_.jsx)(c,{size:16}),e(`about.cta.download`)]})]})]})})]})})}function x(){return(0,_.jsx)(`header`,{className:`about-app-header`,children:(0,_.jsx)(`div`,{className:`mkt-container`,children:(0,_.jsx)(p,{})})})}var S=n(`/about/`)({component:b});export{S as Route};
@@ -0,0 +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,n as s,o as c,t as l}from"./useAppStore-Pjif7nCR.js";import{a as u}from"./i18n-BPfshhQc.js";import{t as d}from"./circle-alert-Dg9cBJgj.js";import{n as f,t as ee}from"./plus-C7wBmZvh.js";import{t as p}from"./OpenSidebarButton-BxKh_O5b.js";import{a as m,i as h,n as te,o as ne,r as re,t as ie}from"./saveLocalFile-Dsoo9PmH.js";import{t as g}from"./arrow-right-DcTPIyLV.js";import{n as ae,t as _}from"./trash-2-DQI0V0Rl.js";import{t as v}from"./download-nQ9X-v0q.js";import{t as oe}from"./external-link-LcGMVTLE.js";import{t as se}from"./file-text-f1ij7Al1.js";import{t as y}from"./loader-DAMqAKH7.js";import{r as ce,t as le}from"./AppShell-kfQyRhZy.js";import{t as ue}from"./messages-square-Dr9v7Ilv.js";import{t as de}from"./music-U7NZcQ6S.js";import{t as fe}from"./search-CURHlVZZ.js";import{A as pe,C as me,M as he,O as ge,S as _e,T as ve,g as ye,j as b,n as be,r as xe,w as Se}from"./index-AZPpawN1.js";import{t as Ce}from"./AppTop-DydClKUv.js";import{t as we}from"./LogoIcon-B2fFe0l1.js";import{t as Te}from"./format-CAKfypjK.js";import{a as Ee,i as De,n as x,o as Oe,t as ke}from"./downloadValidation-C0PecvKC.js";import{t as S}from"./channelApi-DA2GY-k4.js";import{n as Ae,t as je}from"./useChannelMessages-ncgJxjR8.js";import{t as Me}from"./ChatRestoringIndicator-CLV78gNW.js";var Ne=r(`calendar`,[[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`,key:`1hopcy`}],[`path`,{d:`M3 10h18`,key:`8toen8`}]]),Pe=r(`hash`,[[`line`,{x1:`4`,x2:`20`,y1:`9`,y2:`9`,key:`4lhtct`}],[`line`,{x1:`4`,x2:`20`,y1:`15`,y2:`15`,key:`vyu0kd`}],[`line`,{x1:`10`,x2:`8`,y1:`3`,y2:`21`,key:`1ggp8o`}],[`line`,{x1:`16`,x2:`14`,y1:`3`,y2:`21`,key:`weycgp`}]]),Fe=r(`pin-off`,[[`path`,{d:`M12 17v5`,key:`bb1du9`}],[`path`,{d:`M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89`,key:`znwnzq`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11`,key:`c9qhm2`}]]),Ie=r(`pin`,[[`path`,{d:`M12 17v5`,key:`bb1du9`}],[`path`,{d:`M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z`,key:`1nkz8b`}]]),Le=r(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),C=t(e(),1),w=n();function Re(e){return String(e||``).split(`/`).pop()||e}function ze(e){return e===`image`?(0,w.jsx)(h,{size:20}):e===`video`?(0,w.jsx)(m,{size:20}):e===`audio`?(0,w.jsx)(de,{size:20}):(0,w.jsx)(se,{size:20})}function Be({attachment:e,status:t=`idle`,message:n,pending:r=!1,onOpen:i}){let{t:a}=u(),o=t===`checking`,s=t===`downloading`,c=r||o||s,l=`ui-file-action chat-attachment-action ${t===`error`?`error`:t===`available`?`available`:``}`.trim(),f=Number.isFinite(e.size)&&e.size>0?Te(e.size):a(`chat.mostboxFile`),ee=r?a(`chat.sending`):n||f,p=a(r?`chat.sending`:o?`chat.checking`:s?`chat.attachment.downloading`:t===`available`?`chat.attachment.preview`:t===`error`?`chat.attachment.retry`:`chat.attachment.download`);return(0,w.jsxs)(`button`,{type:`button`,className:`ui-file-card chat-attachment-card`,onClick:()=>i?.(e),disabled:c,title:e.link,translate:`no`,children:[(0,w.jsx)(`span`,{className:`ui-file-icon chat-attachment-icon ${e.kind}`,children:c?(0,w.jsx)(y,{size:20,className:`ui-spinner chat-attachment-spinner`}):ze(e.kind)}),(0,w.jsxs)(`span`,{className:`ui-file-info chat-attachment-info`,children:[(0,w.jsx)(`span`,{className:`ui-file-name chat-attachment-name`,translate:`no`,children:Re(e.fileName)}),(0,w.jsx)(`span`,{className:`ui-file-meta chat-attachment-meta`,translate:`yes`,children:ee})]}),(0,w.jsxs)(`span`,{className:l,translate:`yes`,children:[c?(0,w.jsx)(y,{size:15,className:`ui-spinner chat-attachment-spinner`}):t===`available`?(0,w.jsx)(he,{size:16}):t===`error`?(0,w.jsx)(d,{size:17}):(0,w.jsx)(v,{size:16}),(0,w.jsx)(`span`,{className:`chat-attachment-action-label`,children:p})]})]})}var T=[{key:`image`,labelKey:`chat.attachment.image`,accept:`image/*`,icon:h},{key:`video`,labelKey:`chat.attachment.video`,accept:`video/*`,icon:m},{key:`file`,labelKey:`chat.attachment.file`,accept:``,icon:se}],Ve={key:`voice`,labelKey:`chat.voice.menu`,icon:b},He=T.map(e=>e.accept).join(`,`);function Ue({children:e}){return(0,w.jsx)(`div`,{className:`message-bubble`,translate:`no`,children:e})}function We({children:e}){return(0,w.jsx)(`div`,{className:`message-bubble has-attachment`,children:e})}function Ge({children:e}){return(0,w.jsx)(`div`,{className:`chat-system-message`,children:e})}function Ke({variant:e,pending:t=!1,avatarSrc:n,isOnline:r=!1,author:i,time:a,children:o}){return(0,w.jsxs)(`div`,{className:[`chat-message`,e,t?`pending`:``].filter(Boolean).join(` `),children:[(0,w.jsxs)(`span`,{className:`chat-avatar-wrap`,children:[(0,w.jsx)(`img`,{className:`msg-avatar`,src:n,alt:`avatar`}),r&&(0,w.jsx)(`span`,{className:`chat-online-dot`,"aria-hidden":`true`})]}),(0,w.jsxs)(`div`,{className:`msg-content`,children:[(0,w.jsx)(`span`,{className:`message-header`,children:(0,w.jsx)(`span`,{className:`message-author`,translate:`no`,children:i})}),o,(0,w.jsx)(`span`,{className:`message-time`,children:a})]})]})}function qe({active:e=!1,pinned:t=!1,unread:n=!1,title:r,menuClassName:i,onSelect:a,onTogglePin:o,onRename:s,onLeave:c}){let{t:l}=u(),d=!!(o||s||c);return(0,w.jsxs)(`div`,{className:[`sidebar-nav-btn`,e?`active`:``,t?`pinned`:``,n?`unread`:``].filter(Boolean).join(` `),onClick:a,role:`button`,tabIndex:0,onKeyDown:e=>{e.target===e.currentTarget&&e.key===`Enter`&&a?.()},children:[(0,w.jsxs)(`span`,{className:`chat-channel-icon-wrap`,children:[(0,w.jsx)(ue,{size:16}),n&&(0,w.jsx)(`span`,{className:`chat-channel-unread-dot`,title:l(`chat.unread`),"aria-hidden":`true`})]}),(0,w.jsx)(`span`,{className:`chat-channel-title`,children:(0,w.jsx)(`span`,{className:`chat-channel-title-text`,translate:`no`,children:r})}),d&&(0,w.jsx)(_e,{ariaLabel:l(`chat.channelActions`),className:`channel-actions-anchor`,menuClassName:i,placement:`bottom-end`,items:[{key:`pin`,label:l(t?`chat.unpin`:`chat.pin`),icon:t?(0,w.jsx)(Fe,{size:16}):(0,w.jsx)(Ie,{size:16}),onSelect:()=>o?.()},{key:`rename`,label:l(`chat.rename`),icon:(0,w.jsx)(ne,{size:16}),onSelect:()=>s?.()},{key:`delete`,label:l(`chat.delete`),icon:(0,w.jsx)(_,{size:16}),onSelect:()=>c?.()}],renderTrigger:e=>(0,w.jsx)(`button`,{...e,className:`leave-channel-btn channel-actions-trigger`,title:l(`common.moreActions`),"aria-label":l(`common.moreActions`),children:(0,w.jsx)(f,{size:16})})})]})}function Je({members:e}){let{t}=u();return e.length===0?(0,w.jsx)(`div`,{className:`ui-empty-inline channel-members-empty`,children:t(`chat.noMembers`)}):(0,w.jsx)(`div`,{className:`channel-members-grid`,children:e.map(e=>(0,w.jsxs)(`div`,{className:`channel-member`,children:[(0,w.jsxs)(`span`,{className:`channel-member-avatar-wrap`,children:[(0,w.jsx)(`img`,{className:`channel-member-avatar`,src:e.avatarSrc,alt:`avatar`}),e.online&&(0,w.jsx)(`span`,{className:`chat-online-dot`,"aria-hidden":`true`})]}),(0,w.jsx)(`span`,{className:`channel-member-name`,translate:`no`,children:e.name})]},e.id))})}function Ye({message:e,placeholder:t,disabled:n=!1,isPublishingAttachment:r=!1,attachmentButtonTitle:i,attachmentInputRef:a,attachmentMenuClassName:o,showVoiceRoom:s=!0,onMessageChange:c,onSend:l,onOpenVoiceRoom:d,onSelectAttachmentFiles:f}){let{t:p}=u(),m=n||r,h=n||!e.trim(),te=i||p(`chat.attachment.add`);function ne(e,t){let n=e.currentTarget.files?Array.from(e.currentTarget.files):null;t?.(n),e.currentTarget.value=``}function re(t){t.key===`Enter`&&(t.shiftKey||t.nativeEvent.isComposing||(t.preventDefault(),e.trim()&&l()))}function ie(e){if(m)return;let t=a?.current;t&&(t.accept=e,t.click())}return(0,w.jsxs)(`div`,{className:`chat-input-area`,children:[(0,w.jsx)(`input`,{ref:a,type:`file`,accept:He,className:`chat-file-input`,onChange:e=>ne(e,f)}),(0,w.jsx)(_e,{ariaLabel:p(`chat.attachmentType`),placement:`top-start`,disabled:m,menuClassName:o,items:[...T.map(e=>{let t=e.icon;return{key:e.key,label:p(e.labelKey),icon:(0,w.jsx)(t,{size:16}),onSelect:()=>ie(e.accept)}}),...s?[{key:Ve.key,label:p(Ve.labelKey),icon:(0,w.jsx)(b,{size:16}),onSelect:()=>d?.()}]:[]],renderTrigger:e=>(0,w.jsx)(`button`,{...e,className:`btn btn-circle chat-tool-btn`,"aria-label":te,children:r?(0,w.jsx)(y,{size:18,className:`ui-spinner chat-attachment-spinner`}):(0,w.jsx)(ee,{size:18})})}),(0,w.jsx)(`textarea`,{className:`textarea chat-composer-input`,placeholder:t,value:e,disabled:n,rows:1,onChange:e=>c(e.target.value),onKeyDown:re}),(0,w.jsx)(`button`,{type:`button`,className:`btn btn-circle btn-primary send-btn`,onClick:l,disabled:h,title:p(`chat.sendMessage`),children:(0,w.jsx)(g,{size:18})})]})}var Xe=`mostbox.chat.lastReadAt`;function E(e){return Date.parse(e?.lastMessageAt||``)||Date.parse(e?.createdAt||``)||0}function Ze(e){let t=String(e||``).trim().toLowerCase();return t?`${Xe}:${t}`:``}function Qe(e,t=Date.now()){let n=Number(e);return Math.max(0,Math.floor(Number.isFinite(n)&&n>0?n:t))}function $e(e,t=D()){if(!e||!t)return{};try{let n=t.getItem(e);if(!n)return{};let r=JSON.parse(n);return!r||typeof r!=`object`?{}:Object.entries(r).reduce((e,[t,n])=>{let r=Number(n);return t&&Number.isFinite(r)&&r>=0&&(e[t]=r),e},{})}catch{return{}}}function et(e,t,n=D()){if(!(!e||!n))try{n.setItem(e,JSON.stringify(t))}catch{}}function tt(e,t,n=Date.now(),r=Date.now()){if(!t)return{changed:!1,value:e};let i=Qe(n,r);return(e[t]||0)>=i?{changed:!1,value:e}:{changed:!0,value:{...e,[t]:i}}}function nt(e,t,n=Date.now()){let r=!1,i={...e};for(let e of t){let t=e?.channelKey||e?.name;!t||i[t]!==void 0||(i[t]=Qe(E(e),n),r=!0)}return{changed:r,value:r?i:e}}function rt(e,{channelName:t,messageTime:n,activeChannelName:r=``,messageAuthor:i=``,userAddress:a=``,now:o=Date.now()}){if(!t)return{changed:!1,notify:!1,value:e};let s=Qe(n,o),c=t===r;if(String(i||``).toLowerCase()===String(a||``).toLowerCase())return{...tt(e,t,s,o),notify:!1};if(c)return{...tt(e,t,s,o),notify:!0};let l=e[t]||0;if(l<s)return{changed:!1,notify:!0,value:e};let u=Math.max(0,s-1);return l===u?{changed:!1,notify:!0,value:e}:{changed:!0,notify:!0,value:{...e,[t]:u}}}function it(e,t){let n=e?.channelKey||e?.name;return E(e)>(t[n]||0)}function D(){if(!(typeof window>`u`))return window.localStorage}var at=3,ot=30,st=/^[a-zA-Z0-9_-]+$/,ct=1e4,lt=12e3,ut=1200,dt=800;function O(e){return e?.channelKey||e?.name||``}function ft(e){return e?.channelId||e?.name||``}function k(e){return e&&typeof e==`object`?e:{}}function pt(e){let t=k(e),n=new Set,r=e=>{let t=String(e||``).trim();t&&n.add(t)};return r(t.channelKey),r(t.channel),Array.isArray(t.channels)&&t.channels.forEach(e=>{let t=k(e);r(t.channelKey),r(t.channel),r(t.name)}),[...n]}function A(e){return e?.remark||ft(e)}function mt(){return typeof window>`u`?``:(new URLSearchParams(window.location.search).get(`channel`)||``).trim()}var ht=`chat-file`;function gt(e,t){return e.type.startsWith(`image/`)?`image`:e.type.startsWith(`video/`)?`video`:e.type.startsWith(`audio/`)?`audio`:e.type.startsWith(`text/`)?`text`:re(t)}function _t(e){return e?`${e.slice(0,6)}...${e.slice(-4)}`:`Unknown`}function vt(e){return/#[a-fA-F0-9]{4}$/.test(String(e||``).trim())}function j(e){return String(e||``).trim().toLowerCase()}function yt(){if(typeof window>`u`)return;let e=window;return e.AudioContext||e.webkitAudioContext}function M(){let e=l(e=>e.hasBackend),t=l(e=>e.isDarkMode),n=l(e=>e.addToast),r=l(e=>e.openConnectModal),a=i(e=>e.identity),d=i(e=>e.openLoginModal),[f,m]=(0,C.useState)([]),[h,g]=(0,C.useState)(null),[_,v]=(0,C.useState)(``),[se,y]=(0,C.useState)(!1),[de,he]=(0,C.useState)(``),[_e,b]=(0,C.useState)(``),[Te,Fe]=ce(!1),[Ie,ze]=(0,C.useState)(``),[T,Ve]=(0,C.useState)(!1),[He,Xe]=(0,C.useState)(!1),[Qe,D]=ce(!1),[k,M]=(0,C.useState)(null),[N,bt]=(0,C.useState)(null),[xt,P]=(0,C.useState)(!1),[St,Ct]=(0,C.useState)(``),[wt,Tt]=(0,C.useState)(!1),[Et,Dt]=(0,C.useState)(null),[Ot,kt]=(0,C.useState)(!1),[At,F]=(0,C.useState)({}),[jt,I]=(0,C.useState)(null),[Mt,Nt]=(0,C.useState)(!1),[Pt,Ft]=(0,C.useState)(!1),[It,Lt]=(0,C.useState)(!1),[Rt,L]=(0,C.useState)({}),[zt,Bt]=(0,C.useState)([]),R=a?.theme===`sparkbit`,Vt=R&&a?.data?a.data:``,Ht=R&&a?.logo||``,Ut=R&&t&&a?.logo_dark||``,Wt=Ut||Ht,Gt=Ut&&Ht&&Ut!==Ht?Ht:``,Kt=Wt&&!Pt?Wt:Gt&&!It?Gt:``,qt=(0,C.useRef)(null),Jt=(0,C.useRef)(null),z=(0,C.useRef)(``),Yt=(0,C.useRef)(new Set),Xt=(0,C.useRef)(new Set),B=(0,C.useRef)(null),Zt=(0,C.useRef)(!1),Qt=(0,C.useRef)(0),$t=(0,C.useRef)(async()=>[]),en=(0,C.useRef)(new Map),V=(0,C.useRef)(new Map),H=(0,C.useRef)(new Set),U=e===!0,{t:W,compareStrings:tn,formatDate:nn,formatTime:rn}=u(),G=be(),K=(0,C.useCallback)(async(e,t)=>{n(await c(e,t),`error`)},[n]),q=(0,C.useMemo)(()=>Ze(a?.address),[a?.address]),an=(0,C.useCallback)((e,t=Date.now())=>{e&&L(n=>{let r=tt(n,e,t);return r.changed?(et(q,r.value),r.value):n})},[q]),J=(0,C.useCallback)(()=>{if(Zt.current||typeof window>`u`)return;let e=yt();if(e)try{let t=B.current||new e;B.current=t,t.state===`suspended`&&t.resume().catch(()=>{}),Zt.current=!0}catch{}},[]),on=(0,C.useCallback)(()=>{if(!Zt.current)return;let e=Date.now();if(e-Qt.current<ut)return;Qt.current=e;let t=yt();if(t)try{let e=B.current||new t;if(B.current=e,e.state===`suspended`){e.resume().catch(()=>{});return}let n=e.createGain();n.gain.setValueAtTime(1e-4,e.currentTime),n.gain.exponentialRampToValueAtTime(.08,e.currentTime+.015),n.gain.exponentialRampToValueAtTime(1e-4,e.currentTime+.18),n.connect(e.destination),[740,980].forEach((t,r)=>{let i=e.createOscillator();i.type=`sine`,i.frequency.setValueAtTime(t,e.currentTime),i.connect(n),i.start(e.currentTime+r*.035),i.stop(e.currentTime+.16+r*.035)})}catch{}},[]),sn=(0,C.useCallback)(async(e=h)=>{let t=O(e);if(!t||!U){Bt([]);return}try{let e=await S.getChannelPresence(t);if(z.current!==t)return;Bt(e)}catch(e){console.warn(`[Chat] Failed to fetch channel presence:`,e instanceof Error?e.message:e)}},[h,U]),cn=(0,C.useCallback)((e=``)=>{let t=z.current;if(!e||e!==t||!U)return;let n=en.current,r=n.get(e);r&&window.clearTimeout(r);let i=window.setTimeout(()=>{n.delete(e),$t.current(e)},dt);n.set(e,i)},[U]);function ln(e,t){switch(e){case`channel:message`:{let e=t?.channelKey||t?.channel,n=t?.message,r=Number(n?.timestamp)||Date.now();if(e){m(t=>t.map(t=>O(t)===e?{...t,lastMessageAt:new Date(r).toISOString()}:t));let t=e===z.current;L(i=>{let o=rt(i,{channelName:e,messageTime:r,activeChannelName:t?e:``,messageAuthor:n?.author,userAddress:a?.address});return o.changed&&et(q,o.value),o.notify&&on(),o.changed?o.value:i})}break}case`channel:peer:online`:case`channel:sync:available`:{let e=pt(t),n=z.current;$(),e.includes(n)&&(cn(n),h&&sn(h));break}case`channel:presence`:{let e=t?.channelKey||t?.channel;h&&(!e||e===O(h))&&sn(h);break}case`channel:joined`:case`channel:left`:$();break;case`user:metadata:updated`:t?.scope===`channels`&&$();break;case`download:success`:{let e=V.current.get(t.taskId);e&&(V.current.delete(t.taskId),H.current.delete(e.cid),F(t=>({...t,[e.cid]:{status:`available`,message:W(`chat.attachment.previewAvailable`)}})),n(W(`chat.attachment.downloadCompleted`,{fileName:t.fileName||Re(e.fileName)}),`success`),Cn(e,t.fileName||e.fileName));break}case`download:error`:case`download:cancelled`:{let r=V.current.get(t.taskId);r&&(V.current.delete(t.taskId),H.current.delete(r.cid),F(n=>({...n,[r.cid]:{status:`error`,message:e===`download:cancelled`?W(`chat.attachment.downloadCancelled`):t.error||W(`chat.attachment.downloadFailed`)}})),n(e===`download:cancelled`?W(`chat.attachment.downloadCancelled`):t.error||W(`chat.attachment.downloadFailed`),`error`));break}}}let un=(0,C.useMemo)(()=>f.map(e=>O(e)),[f]),Y=O(h),dn=(0,C.useMemo)(()=>a?{...xe(a),profileUpdatedAt:a.profileUpdatedAt}:{},[a?.avatar,a?.displayName,a?.profileUpdatedAt,a?.username]),X=(0,C.useMemo)(()=>!h||!Y?null:{channelName:Y,title:A(h)},[h,Y]),{clearMessages:fn,messages:pn,sendMessage:mn,syncedChannelName:hn,syncMessages:gn}=je({isReady:U,enabled:!!a,channelName:Y,extraSubscribedChannelNames:un,peerId:Ie,waitForPeerId:!0,onSyncError:e=>K(e,W(`chat.error.messages`)),onSocketEvent:ln,onReconnect:()=>{$(),h&&sn(h)},presenceEnabled:!!(h&&a),presenceProfile:dn});(0,C.useEffect)(()=>{$t.current=gn},[gn]),(0,C.useEffect)(()=>{let e=en.current;return()=>{for(let t of e.values())window.clearTimeout(t);e.clear()}},[]);let _n=(0,C.useMemo)(()=>{let e=new Map;return pn.forEach((t,n)=>{let r=String(t.author||``).trim();if(!r)return;let i=r.toLowerCase(),a=Number(t.timestamp)||0,o=String(t.authorName||``).trim(),s=String(t.avatar||``).trim(),c=e.get(i);if(!c){e.set(i,{address:r,displayName:o,...s?{avatar:s}:{},firstSeenAt:a,lastSeenAt:a,index:n});return}a>=c.lastSeenAt&&(c.lastSeenAt=a,o&&(c.displayName=o),s&&(c.avatar=s))}),[...e.values()].sort((e,t)=>e.firstSeenAt-t.firstSeenAt||e.index-t.index)},[pn]),vn=(0,C.useMemo)(()=>new Map(_n.map(e=>[j(e.address),e])),[_n]),yn=(0,C.useMemo)(()=>{let e=new Map;return zt.forEach(t=>{let n=j(t.address);!n||!t.online||e.set(n,t)}),e},[zt]),bn=(0,C.useMemo)(()=>{let e=new Map(vn);return zt.forEach((t,n)=>{let r=j(t.address);!r||e.has(r)||e.set(r,{address:t.address,displayName:t.displayName||``,...t.avatar?{avatar:t.avatar}:{},firstSeenAt:t.lastSeen||Date.now(),lastSeenAt:t.lastSeen||Date.now(),index:_n.length+n})}),[...e.values()]},[_n,zt,vn]),xn=(0,C.useMemo)(()=>new Set(yn.keys()),[yn]);function Z(){return U?!0:(r(),!1)}function Q(){return a?!0:(d(),!1)}(0,C.useEffect)(()=>{let e=()=>{v(mt())};return e(),window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[]),(0,C.useEffect)(()=>{a&&v(mt())},[a?.address]),(0,C.useEffect)(()=>{Ft(!1),Lt(!1)},[Wt,Gt]),(0,C.useEffect)(()=>{z.current=O(h)},[h]),(0,C.useEffect)(()=>(G.setPreviewRoom(a&&X?X:null),()=>{G.setPreviewRoom(null)}),[X,a,G.setPreviewRoom]),(0,C.useEffect)(()=>{L($e(q))},[q]),(0,C.useEffect)(()=>{!q||f.length===0||L(e=>{let t=nt(e,f);return t.changed&&et(q,t.value),t.changed?t.value:e})},[q,f]),(0,C.useEffect)(()=>(window.addEventListener(`pointerdown`,J,{passive:!0}),window.addEventListener(`keydown`,J),()=>{window.removeEventListener(`pointerdown`,J),window.removeEventListener(`keydown`,J)}),[J]),(0,C.useEffect)(()=>()=>{B.current?.close().catch(()=>{}),B.current=null,Zt.current=!1},[]),(0,C.useEffect)(()=>{qt.current?.scrollIntoView({behavior:`smooth`})},[pn]),(0,C.useEffect)(()=>{if(!U){ze(``);return}s.get(`/api/node-id`).json().then(e=>ze(e.id)).catch(e=>{console.warn(`[Chat] Failed to fetch node ID:`,e.message),K(e,W(`chat.error.nodeId`))})},[U,K,W]),(0,C.useEffect)(()=>{U&&a?(y(!1),$()):y(!1)},[e,U,a?.address]),(0,C.useEffect)(()=>{if(h){if(U){let e=O(h);Bt([]),gn(e,{replace:!0}),sn(h)}}else Bt([])},[h,U,sn,gn]),(0,C.useEffect)(()=>{if(!_)return;if(!a){Xt.current.has(_)||(Xt.current.add(_),d());return}if(!U||!se)return;let e=f.find(e=>O(e)===_)||f.find(e=>ft(e)===_);if(e&&(!h||O(h)!==O(e))){On(e);return}if(e&&h&&O(h)===O(e)&&(h.createdAt!==e.createdAt||h.coreKey!==e.coreKey||h.lastMessageAt!==e.lastMessageAt||h.pinned!==e.pinned||h.remark!==e.remark||h.type!==e.type)){g(e);return}if(e)return;let t=`${a.address}:${_}`;if(Yt.current.has(t)||T)return;let r=Sn(_);if(Yt.current.add(t),r){n(r,`error`);return}jn(_)},[f,h,_,se,U,T,a?.address]),(0,C.useEffect)(()=>{a||(m([]),y(!1),g(null),v(mt()),bt(null),fn(),b(``),ze(``),P(!1),Dt(null),F({}),L({}),H.current.clear(),V.current.clear())},[fn,a?.address]);function Sn(e){return e.length<at?W(`chat.validation.nameMin`,{count:at}):e.length>ot?W(`chat.validation.nameMax`,{count:ot}):e.includes(`.`)?W(`chat.validation.dotReserved`):st.test(e)?``:W(`chat.validation.allowedChars`)}async function $(){if(!U){y(!1);return}try{m(await S.getChannels()),y(!0)}catch(e){m([]),y(!1),await K(e,W(`chat.error.channelList`))}}function Cn(e,t=e.fileName){let n=re(t);Dt({cid:e.cid,fileName:t,subtype:n===`file`?e.kind:n})}async function wn(e){if(Q()&&Z())try{n((await ie({cid:e.cid,fileName:e.fileName,getFileDownloadUrl:x.getFileDownloadUrl,getRequestHeaders:o,loadFailedMessage:W(`app.toast.getFileFailed`)})).method===`picker`?W(`app.toast.fileSaved`):W(`app.toast.fileDownloaded`),`success`)}catch(e){e.name!==`AbortError`&&n(W(`app.saveFailedWithError`,{error:e.message}),`error`)}}async function Tn(e){let t=ke(e.link,W);if(t)return F(n=>({...n,[e.cid]:{status:`error`,message:t}})),!1;try{F(t=>({...t,[e.cid]:{status:`checking`}}));let t=await x.checkDownload(e.link,{timeout:ct,requestTimeout:lt});return F(n=>({...n,[e.cid]:{status:t.alreadyExists?`available`:`ready`,message:t.alreadyExists?W(`chat.attachment.localAvailable`):W(`chat.attachment.downloadAvailable`)}})),!0}catch{return F(t=>({...t,[e.cid]:{status:`error`,message:W(`chat.attachment.noSeedsTitle`)}})),!1}}async function En(e){I(null),await Tn(e)&&await Dn(e)}async function Dn(e){if(!H.current.has(e.cid)){H.current.add(e.cid),F(t=>({...t,[e.cid]:{status:`downloading`,message:W(`chat.attachment.downloading`)}}));try{let t=await x.downloadFile(e.link);if(t.alreadyExists||t.fileName){H.current.delete(e.cid),F(t=>({...t,[e.cid]:{status:`available`,message:W(`chat.attachment.previewAvailable`)}})),Cn({...e,fileName:t.fileName||e.fileName},t.fileName||e.fileName);return}t.taskId&&(V.current.set(t.taskId,e),n(W(`chat.attachment.downloadStarted`),`success`))}catch{H.current.delete(e.cid),F(t=>({...t,[e.cid]:{status:`error`,message:W(`chat.attachment.noSeedsTitle`)}}))}}}async function On(e){if(!Q()||!Z())return;let t=O(e);an(t,Math.max(E(e),Date.now())),g(e),v(t),window.history.pushState({},``,`?channel=${encodeURIComponent(t)}`)}async function kn(e,t){if(t&&t.stopPropagation(),Q()&&Z()&&!He){Xe(!0);try{if(await S.leaveChannel(e),O(h)===e){g(null),v(``),fn();let e=new URL(window.location.href);e.searchParams.delete(`channel`),window.history.pushState({},``,e.pathname)}$(),D.close(),M(null)}catch(e){await K(e,W(`chat.error.leave`))}finally{Xe(!1)}}}async function An(e){if(!Q()||!Z())return;let t=!e.pinned,n=O(e);try{let e=await S.setChannelPinned(n,t);m(t=>t.map(t=>O(t)===n?{...t,pinned:e.pinned}:t)),g(t=>t&&O(t)===n?{...t,pinned:e.pinned}:t)}catch(e){await K(e,W(t?`chat.error.pin`:`chat.error.unpin`))}}async function jn(e){let t=e.trim();if(!t||T)return;let r=Sn(t);if(r){n(r,`error`);return}if(Q()&&Z()){Ve(!0);try{let e=await S.createChannel(t,`public`,xe(a)),n=e.channelKey||e.key||e.name||t,r=f.find(e=>O(e)===n),i={...r,name:e.name||t,channelId:e.channelId||e.name||t,channelKey:e.channelKey||e.key||r?.channelKey,type:e.type||r?.type||`public`,createdAt:e.createdAt||r?.createdAt,coreKey:e.coreKey||e.key||r?.coreKey,localWriterCoreKey:e.localWriterCoreKey||r?.localWriterCoreKey,writerCoreKeys:e.writerCoreKeys||r?.writerCoreKeys,remark:e.remark||r?.remark},o=O(i);m(e=>e.some(e=>O(e)===o)?e.map(e=>O(e)===o?{...e,...i}:e):[...e,i]),Fe.close(),await On(i),$()}catch(e){await K(e,W(`chat.error.join`))}finally{Ve(!1)}}}async function Mn(e,t){if(!e.trim()||!h||!Q()||!Z())return!1;let n=e.trim(),r=O(h);try{let e=await mn({channelName:r,content:n,attachment:t});return m(t=>t.map(t=>O(t)===r?{...t,lastMessageAt:new Date(Number(e?.timestamp)||Date.now()).toISOString()}:t)),e&&an(r,Number(e.timestamp)||Date.now()),!0}catch(e){return await K(e,W(`chat.error.send`)),!1}}async function Nn(){if(!_e.trim())return;let e=_e.trim();b(``),await Mn(e)}function Pn(e,t){return`${ht}/${e}/${t}`}async function Fn(e){if(!e||e.length===0||!h||!Q()||!Z()||Ot)return;kt(!0);let t=``;try{let r=await x.getNodePolicy().catch(()=>null);for(let i of Array.from(e)){t=i.name;let e=Ee(i,r,W);if(e){n(e,`error`);continue}let a=Pn(ft(h),i.name),o=await x.publishFile(i,a),s=o.fileName||a,c=o.link||Oe(o.cid,s);await Mn(c,{kind:gt(i,s),cid:o.cid,fileName:s,link:c,mimeType:i.type||void 0,size:i.size})}}catch(e){n(await De(e,W(`chat.error.attachmentSend`),W,t),`error`)}finally{kt(!1)}}async function In(e){if(!Q()||!Z())return;let t=At[e.cid];if(!(t?.status===`checking`||t?.status===`downloading`)){if(t?.status===`error`){I(e);return}if(t?.status===`ready`||t?.status===`available`){await Dn(e);return}if(!t){await Tn(e)&&await Dn(e);return}}}async function Ln(e,t){if(!Q()||!Z())return;let n=O(e),r=await S.setChannelRemark(n,t);return m(e=>e.map(e=>O(e)===n?{...e,remark:r.remark}:e)),g(e=>e&&O(e)===n?{...e,remark:r.remark}:e),r.remark}async function Rn(){if(h)try{await Ln(h,St)}catch(e){await K(e,W(`chat.error.remark`))}}async function zn(e){if(!(!N||wt)){Tt(!0);try{await Ln(N,e),bt(null)}catch(e){await K(e,W(`chat.error.rename`))}finally{Tt(!1)}}}function Bn(e){if(!e.attachment)return(0,w.jsx)(Ue,{children:e.content});let t=e.attachment,n=At[t.cid],r=n?.status;return(0,w.jsx)(We,{children:(0,w.jsx)(Be,{attachment:t,status:r,message:n?.message,pending:e.pending,onOpen:In})})}function Vn(e,t){let n=String(e||``).trim();return n?Mt?vt(n)?n:t?`${n}#${t.slice(-4).toUpperCase()}`:n:n.replace(/#[a-fA-F0-9]{4}$/,``):_t(t)}function Hn(e){let t=j(e.author),n=yn.get(t),r=vn.get(t);return Vn(n?.displayName||r?.displayName||e.authorName,e.author)}function Un(){return(0,w.jsx)(Je,{members:bn.map(e=>{let t=yn.get(j(e.address)),n=t?.displayName||e.displayName,r=t?.avatar||e.avatar;return{id:e.address,name:Vn(n,e.address),avatarSrc:ye(e.address,r),online:xn.has(j(e.address))}})})}let Wn=R&&!!_&&(!h||!!(Y&&Y!==hn)),Gn=[`chat-app-layout`,R?`sparkbit-chat-layout`:``].filter(Boolean).join(` `),Kn=R?`sparkbit-chat-action-menu`:void 0,qn=h?(0,w.jsx)(`h2`,{className:`header-title`,translate:`no`,children:A(h)}):(0,w.jsx)(`h2`,{className:`header-title`,children:W(`chat.title`)}),Jn=!!(X&&G.room?.channelName===X.channelName),Yn=G.participants.filter(e=>!e.local).length,Xn=G.joined?Yn:G.participants.length,Zn=!R&&Jn&&(G.joined||G.participants.length>0),Qn=G.joined?W(`chat.voice.bannerJoined`,{count:Xn}):W(`chat.voice.bannerActive`,{count:Xn});function $n(){X&&G.openRoom(X)}let er=de.trim().toLowerCase(),tr=(0,C.useMemo)(()=>[...f].sort((e,t)=>{let n=Number(!!t.pinned)-Number(!!e.pinned);if(n!==0)return n;let r=E(t)-E(e);return r===0?tn(A(e),A(t)):r}),[f,tn]),nr=er?tr.filter(e=>[A(e),ft(e),O(e)].some(e=>e.toLowerCase().includes(er))):tr;return(0,w.jsxs)(le,{className:Gn,defaultHide:R,hideAccountMenu:R,languageTheme:R?`sparkbit`:void 0,sidebar:({closeSidebar:e})=>(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(Ce,{onNavigate:e}),(0,w.jsx)(`div`,{className:`chat-channel-search`,children:(0,w.jsxs)(`div`,{className:`ui-input-control`,children:[(0,w.jsx)(fe,{className:`ui-input-icon`,size:15}),(0,w.jsx)(`input`,{type:`search`,className:`input input-compact`,placeholder:W(`chat.search.placeholder`),value:de,onChange:e=>he(e.target.value),"aria-label":W(`chat.search.placeholder`)})]})}),(0,w.jsx)(`nav`,{className:`sidebar-nav`,children:f.length===0?(0,w.jsx)(`div`,{className:`sidebar-empty-state`,children:(0,w.jsx)(`p`,{children:W(`chat.empty.noChannels`)})}):nr.length===0?(0,w.jsx)(`div`,{className:`sidebar-empty-state`,children:(0,w.jsx)(`p`,{children:W(`chat.empty.noMatches`)})}):nr.map(t=>(0,w.jsx)(qe,{active:O(h)===O(t),pinned:!!t.pinned,unread:it(t,Rt),title:A(t),menuClassName:Kn,onSelect:()=>{On(t),e()},onTogglePin:()=>void An(t),onRename:()=>bt(t),onLeave:()=>{M(t),D.open()}},O(t)))}),(0,w.jsxs)(`button`,{className:`ui-action-dashed create-channel-btn`,onClick:()=>{!Q()||!Z()||Fe.open()},children:[(0,w.jsx)(ee,{size:16}),W(`chat.joinChannel`)]})]}),headerTitle:qn,sidebarToggleReplacement:R?(0,w.jsx)(`span`,{className:`sidebar-toggle-static-logo`,"aria-hidden":`true`,children:Kt?(0,w.jsx)(`img`,{className:`sidebar-toggle-static-logo-img`,src:Kt,alt:``,onError:()=>{if(Kt===Gt){Lt(!0);return}Ft(!0)}}):(0,w.jsx)(we,{size:18})}):void 0,headerRight:(0,w.jsx)(`div`,{className:`header-right-actions`,children:h&&(0,w.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>P(!0),title:W(`chat.channelSettings`),children:(0,w.jsx)(Le,{size:16})})}),children:[Wn?(0,w.jsx)(Me,{}):h?(0,w.jsxs)(w.Fragment,{children:[Zn&&(0,w.jsxs)(`button`,{type:`button`,className:`chat-voice-banner`,onClick:$n,title:W(`chat.voice.expand`),children:[(0,w.jsx)(`span`,{className:`chat-voice-banner-icon`,children:(0,w.jsx)(pe,{size:18})}),(0,w.jsx)(`span`,{className:`chat-voice-banner-label`,children:Qn}),(0,w.jsx)(ae,{size:18})]}),(0,w.jsxs)(`div`,{className:`chat-messages`,children:[pn.length===0?(0,w.jsxs)(`div`,{className:`ui-empty-state chat-messages-empty`,children:[(0,w.jsx)(`div`,{className:`ui-empty-icon empty-icon`,children:(0,w.jsx)(ue,{size:28})}),(0,w.jsx)(`p`,{children:W(`chat.empty.noMessages`)})]}):pn.map(e=>{if(Ae(e))return(0,w.jsx)(Ge,{children:W(`chat.system.memberJoined`,{name:Hn(e)})},e.id||`${e.author}-${e.timestamp}`);let t=e.author?.toLowerCase()===a?.address.toLowerCase(),n=yn.get(j(e.author)),r=vn.get(j(e.author)),i=xn.has(j(e.author)),o=n?.avatar||r?.avatar||e.avatar||(t?a.avatar:void 0),s=Hn(e);return(0,w.jsx)(Ke,{variant:t?`self`:`other`,pending:e.pending,isOnline:i,avatarSrc:ye(e.author,o),author:s,time:rn(e.timestamp),children:Bn(e)},e.id||`${e.author}-${e.timestamp}`)}),(0,w.jsx)(`div`,{ref:qt})]}),(0,w.jsx)(Ye,{message:_e,placeholder:W(a?`chat.composer.placeholder`:`chat.composer.signInPlaceholder`),disabled:!a,isPublishingAttachment:Ot,attachmentInputRef:Jt,attachmentMenuClassName:Kn,showVoiceRoom:!R,onMessageChange:b,onSend:Nn,onOpenVoiceRoom:$n,onSelectAttachmentFiles:e=>{Fn(e)}})]}):(0,w.jsx)(w.Fragment,{children:(0,w.jsxs)(`div`,{className:`ui-empty-state chat-welcome`,children:[(0,w.jsx)(`div`,{className:`ui-empty-icon ui-empty-icon-lg welcome-icon`,children:(0,w.jsx)(ue,{size:36})}),(0,w.jsx)(`h2`,{className:`ui-empty-title`,children:W(`chat.select.title`)}),(0,w.jsx)(`p`,{className:`ui-empty-desc`,children:W(`chat.select.desc`)}),(0,w.jsx)(p,{label:W(`chat.openChannelList`)})]})}),Te&&(0,w.jsx)(me,{title:W(`chat.joinChannel`),placeholder:W(`chat.join.placeholder`),confirmText:W(`chat.join.confirm`),validate:Sn,onConfirm:jn,onClose:()=>Fe.close(),isLoading:T,loadingText:W(`chat.join.joining`)}),N&&(0,w.jsx)(me,{title:W(`chat.renameChannel`),placeholder:W(`chat.remark.placeholder`),defaultValue:N.remark||``,confirmText:W(`chat.remark.save`),onConfirm:zn,onClose:()=>{wt||bt(null)},isLoading:wt,loadingText:W(`chat.remark.saving`),allowEmpty:!0,validate:e=>e.length>50?W(`chat.remark.tooLong`):``}),Qe&&k&&(0,w.jsx)(Se,{title:W(`chat.leaveChannel`),message:W(`chat.leaveConfirm`,{channel:A(k)}),confirmText:W(He?`chat.leaving`:`chat.leaveChannel`),onConfirm:()=>kn(O(k),void 0),danger:!0,onClose:()=>{D.close(),M(null)}}),jt&&(0,w.jsx)(ve,{onClose:()=>I(null),children:(0,w.jsxs)(`div`,{className:`confirm-modal`,onClick:e=>e.stopPropagation(),children:[(0,w.jsxs)(`div`,{className:`modal-header`,children:[(0,w.jsx)(`h3`,{children:W(`chat.attachment.noSeedsTitle`)}),(0,w.jsx)(`button`,{type:`button`,className:`btn btn-icon`,onClick:()=>I(null),"aria-label":W(`common.close`),children:(0,w.jsx)(ge,{size:18})})]}),(0,w.jsx)(`p`,{children:W(`chat.attachment.noSeedsFallback`)}),(0,w.jsxs)(`div`,{className:`modal-actions`,children:[(0,w.jsx)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:()=>I(null),children:W(`common.cancel`)}),(0,w.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>En(jt),disabled:At[jt.cid]?.status===`checking`,children:At[jt.cid]?.status===`checking`?W(`app.checking`):W(`chat.attachment.retryCheck`)})]})]})}),Et&&(0,w.jsx)(te,{item:Et,isBackendReady:U,getFileDownloadUrl:x.getFileDownloadUrl,onSaveAs:wn,onClose:()=>Dt(null)}),xt&&h&&(0,w.jsx)(`div`,{className:`channel-detail-overlay`,onClick:()=>P(!1),children:(0,w.jsxs)(`div`,{className:`channel-detail-drawer`,onClick:e=>e.stopPropagation(),children:[(0,w.jsxs)(`div`,{className:`channel-detail-header`,children:[(0,w.jsx)(`h3`,{children:W(`chat.details.title`)}),(0,w.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>P(!1),children:(0,w.jsx)(ge,{size:18})})]}),(0,w.jsxs)(`div`,{className:`channel-detail-body`,children:[(0,w.jsxs)(`div`,{className:`channel-detail-section channel-members-section`,children:[(0,w.jsx)(`div`,{className:`channel-detail-label`,children:(0,w.jsx)(`span`,{children:W(`chat.details.members`,{count:bn.length})})}),Un()]}),Vt&&(0,w.jsx)(`div`,{className:`channel-detail-section`,children:(0,w.jsxs)(`a`,{className:`btn btn-primary btn-block`,href:Vt,target:`_blank`,rel:`noreferrer`,children:[(0,w.jsx)(oe,{size:16}),W(`chat.ticket.create`)]})}),!R&&(0,w.jsx)(`div`,{className:`channel-detail-section`,children:(0,w.jsxs)(`label`,{className:`setting-switch`,children:[(0,w.jsx)(`span`,{children:W(`chat.details.showAddressSuffix`)}),(0,w.jsx)(`input`,{type:`checkbox`,checked:Mt,onChange:e=>Nt(e.target.checked)})]})}),!R&&(0,w.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,w.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,w.jsx)(Pe,{size:14}),(0,w.jsx)(`span`,{children:W(`chat.details.channelId`)})]}),(0,w.jsx)(`div`,{className:`ui-meta-box channel-detail-value channel-detail-mono`,translate:`no`,children:ft(h)})]}),!R&&(0,w.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,w.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,w.jsx)(ne,{size:14}),(0,w.jsx)(`span`,{children:W(`chat.remark.placeholder`)})]}),(0,w.jsx)(`input`,{type:`text`,className:`input input-compact`,placeholder:W(`chat.remark.placeholder`),value:St,onChange:e=>Ct(e.target.value),onFocus:()=>Ct(h.remark||``),onBlur:()=>Rn(),onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur()},maxLength:50})]}),(0,w.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,w.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,w.jsx)(Ne,{size:14}),(0,w.jsx)(`span`,{children:W(`chat.channel.createdAt`)})]}),(0,w.jsx)(`div`,{className:`ui-meta-box channel-detail-value`,children:h.createdAt?nn(h.createdAt):`-`})]})]}),!R&&(0,w.jsx)(`div`,{className:`channel-detail-footer`,children:(0,w.jsx)(`button`,{className:`btn btn-secondary btn-block`,onClick:()=>{P(!1),M(h),D.open()},children:W(`chat.leaveChannel`)})})]})})]})}var N=a(`/chat/`)({component:M});export{N as Route};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MilkdownEditor-B9vfoUP9.js","assets/jsx-runtime-Bt-cYkS5.js","assets/i18n-BPfshhQc.js","assets/index-AZPpawN1.js","assets/useAppStore-Pjif7nCR.js","assets/useNavigate-DWlBD_-b.js","assets/index-BP12tZtg.css","assets/dist-CSyRxrry.js","assets/dist-RU_cpjXQ.js"])))=>i.map(i=>d[i]);
2
+ import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r,C as i,E as a,H as o,M as s,d as c,j as l,o as u,t as d,w as f}from"./useAppStore-Pjif7nCR.js";import{n as ee}from"./useNavigate-DWlBD_-b.js";import{a as te}from"./i18n-BPfshhQc.js";import{n as p,t as ne}from"./plus-C7wBmZvh.js";import{t as re}from"./OpenSidebarButton-BxKh_O5b.js";import{n as m,t as h}from"./trash-2-DQI0V0Rl.js";import{t as g}from"./folder-open-BKTeAP5z.js";import{t as _}from"./folder-DGTODlX0.js";import{t as v}from"./lock-Cigqt_VP.js";import{t as ie}from"./AppShell-kfQyRhZy.js";import{t as y}from"./notebook-pen-CMRWy6ni.js";import{t as ae}from"./save-CQyJvrmI.js";import{t as oe}from"./search-CURHlVZZ.js";import{C as se,E as b,L as ce,M as le,O as ue,P as x,S,T as C,c as w,d as T,f as de,l as E,m as fe,p as pe,s as me,t as D,u as he,w as ge}from"./index-AZPpawN1.js";import{t as O}from"./AppTop-DydClKUv.js";var k=r(`move`,[[`path`,{d:`M12 2v20`,key:`t6zp3m`}],[`path`,{d:`m15 19-3 3-3-3`,key:`11eu04`}],[`path`,{d:`m19 9 3 3-3 3`,key:`1mg7y2`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}],[`path`,{d:`m5 9-3 3 3 3`,key:`j64kie`}],[`path`,{d:`m9 5 3-3 3 3`,key:`l8vdw6`}]]),_e=r(`pencil-ruler`,[[`path`,{d:`M13 7 8.7 2.7a2.41 2.41 0 0 0-3.4 0L2.7 5.3a2.41 2.41 0 0 0 0 3.4L7 13`,key:`orapub`}],[`path`,{d:`m8 6 2-2`,key:`115y1s`}],[`path`,{d:`m18 16 2-2`,key:`ee94s4`}],[`path`,{d:`m17 11 4.3 4.3c.94.94.94 2.46 0 3.4l-2.6 2.6c-.94.94-2.46.94-3.4 0L11 17`,key:`cfq27r`}],[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]),A=t(e(),1),j=n();function ve(e){return e.type===`directory`?f(e.path?`${e.path}/${e.name}`:e.name):i(e)}function ye({target:e,targetLabel:t,directories:n,onMove:r,onClose:i}){let{t:a}=te(),o=f(e.path||``),s=ve(e),c=n.filter(t=>e.type===`directory`?t.path!==s&&!t.path.startsWith(`${s}/`):!0),[l,u]=(0,A.useState)(o),[d,ee]=(0,A.useState)(``),[p,ne]=(0,A.useState)(new Set),re=f(d),h=d.trim()?re:l,g=f(h)===o,v=a(`note.move.rootDirectory`),ie=new Map;for(let e of c){let t=ie.get(e.parentPath)||[];t.push(e),ie.set(e.parentPath,t)}let y=c.filter(e=>{if(!e.parentPath)return!0;let t=e.parentPath.split(`/`).filter(Boolean);return t.every((e,n)=>p.has(t.slice(0,n+1).join(`/`)))}),ae=[{label:v,path:``},...l.split(`/`).filter(Boolean).map((e,t,n)=>({label:e,path:n.slice(0,t+1).join(`/`)}))];function oe(e){u(f(e)),ee(``)}function se(e){oe(e),ie.has(e)&&ne(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}function b(){g||r(h)}return(0,j.jsx)(C,{onClose:i,children:(0,j.jsxs)(`div`,{className:`note-move-modal`,onClick:e=>e.stopPropagation(),children:[(0,j.jsxs)(`div`,{className:`modal-header`,children:[(0,j.jsx)(`h3`,{children:a(`note.move.title`)}),(0,j.jsx)(`button`,{className:`btn btn-icon`,onClick:i,children:(0,j.jsx)(ue,{size:18})})]}),(0,j.jsxs)(`div`,{className:`note-move-target`,children:[(0,j.jsx)(`span`,{children:a(`note.move.moving`)}),(0,j.jsx)(`strong`,{translate:`no`,children:t||e.name})]}),(0,j.jsx)(`div`,{className:`note-move-path`,children:ae.map((e,t)=>(0,j.jsxs)(A.Fragment,{children:[t>0&&(0,j.jsx)(`span`,{children:`/`}),(0,j.jsx)(`button`,{type:`button`,onClick:()=>oe(e.path),children:(0,j.jsx)(`span`,{translate:e.path?`no`:`yes`,children:e.label})})]},e.path||`root`))}),(0,j.jsxs)(`div`,{className:`note-move-folder-list`,children:[(0,j.jsxs)(`button`,{type:`button`,className:`note-move-folder-item ${l===``?`selected`:``}`,onClick:()=>oe(``),children:[(0,j.jsx)(`span`,{className:`note-move-folder-spacer`}),(0,j.jsx)(_,{className:`note-move-folder-icon`,size:16}),(0,j.jsx)(`span`,{children:v})]}),c.length===0?(0,j.jsx)(`p`,{className:`note-move-empty`,children:a(`note.move.noFolders`)}):y.map(e=>{let t=ie.has(e.path),n=p.has(e.path);return(0,j.jsxs)(`button`,{type:`button`,className:`note-move-folder-item note-move-depth-${Math.min(e.depth,4)} ${l===e.path?`selected`:``}`,onClick:()=>se(e.path),children:[t?n?(0,j.jsx)(x,{className:`note-move-expander`,size:14}):(0,j.jsx)(m,{className:`note-move-expander`,size:14}):(0,j.jsx)(`span`,{className:`note-move-folder-spacer`}),(0,j.jsx)(_,{className:`note-move-folder-icon`,size:16}),(0,j.jsx)(`span`,{translate:`no`,children:e.name}),e.parentPath&&(0,j.jsx)(`small`,{translate:`no`,children:e.parentPath})]},e.path)})]}),(0,j.jsx)(`input`,{className:`input input-compact`,value:d,onChange:e=>ee(e.target.value),placeholder:a(`note.move.pathPlaceholder`),translate:`no`}),(0,j.jsxs)(`div`,{className:`note-move-destination`,children:[(0,j.jsx)(`span`,{children:a(`note.move.destinationLabel`)}),(0,j.jsx)(`span`,{translate:h?`no`:`yes`,children:h||v})]}),(0,j.jsxs)(`div`,{className:`modal-actions`,children:[(0,j.jsx)(`button`,{className:`btn btn-secondary`,onClick:i,children:a(`common.cancel`)}),(0,j.jsx)(`button`,{className:`btn btn-primary`,onClick:b,disabled:g,children:a(`note.action.move`)})]})]})})}function be({children:e}){return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(O,{}),e]})}var M=`mostbox.chatNoteDraft.`;function xe(){if(typeof window>`u`)return null;try{return window.localStorage}catch{return null}}function Se(e){return`${M}${e}`}function N(e){if(!e||typeof e!=`object`)return null;let t=e,n=String(t.id||``).trim(),r=String(t.title||``).trim(),i=String(t.content||``),a=Number(t.createdAt||0);return!n||!r||!i.trim()||!Number.isFinite(a)?null:{id:n,title:r,content:i,createdAt:a}}function Ce(e){let t=xe();if(!t)return null;try{let n=t.getItem(Se(e))||`null`;return N(JSON.parse(n))}catch{return null}}function we(e){xe()?.removeItem(Se(e))}var Te=(0,A.lazy)(async()=>({default:(await D(()=>import(`./MilkdownEditor-B9vfoUP9.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8]))).MilkdownEditor})),P=/\[\[([^\]\n]+?)\]\]/g,F=/(```[\s\S]*?```)/g;function Ee(e){let t=new URLSearchParams(e),n=t.get(`mode`);return{cid:t.get(`cid`)||void 0,file:t.get(`file`)||void 0,path:t.get(`path`)||void 0,chatDraft:t.get(`chatDraft`)||void 0,mode:n===`edit`?`edit`:void 0}}function I(e={}){let t=new URLSearchParams;e.cid&&t.set(`cid`,e.cid),e.file&&t.set(`file`,e.file),e.path&&t.set(`path`,e.path),e.chatDraft&&t.set(`chatDraft`,e.chatDraft),e.mode&&t.set(`mode`,e.mode);let n=t.toString();return n?`/note/?${n}`:`/note/`}function De(e){let t=e.indexOf(`?`),n=t>=0?e.slice(t):``;if(typeof window>`u`)return Ee(n);try{return Ee(new URL(e,window.location.origin).search)}catch{return Ee(n)}}var L={"note.error.nameRequired":`note.error.nameRequired`,"note.error.nameNoSlash":`note.error.nameNoSlash`,"note.error.nameNoBackslash":`note.error.nameNoBackslash`,"note.error.nameInvalid":`note.error.nameInvalid`,"note.error.nameConflict":`note.error.nameConflict`,"note.error.moveIntoSelf":`note.error.moveIntoSelf`};function Oe(e,t,n){let r=e instanceof Error?e.message:``,i=L[r];return i?n(i):r||t}function ke(e){return e.type===`directory`?f(e.path?`${e.path}/${e.name}`:e.name):i(e)}function R(e=``){return String(e).trim().replace(/\.md$/i,``)}function Ae(e){let t=R(e);return t?`${t}.md`:``}function je(e,t,n){let r=R(e)||t;for(let e=0;e<1e3;e+=1){let t=Ae(e===0?r:`${r} ${e+1}`);if(t&&!n(t))return t}return Ae(`${r} ${Date.now()}`)}function Me(e=``){let t=f(e).split(`/`).filter(Boolean);if(t.length===0)return``;let n=t.length-1;return t[n]=Ae(t[n]),t.join(`/`)}function Ne(e=``){let t=f(e).split(`/`).filter(Boolean);if(t.length===0)return``;let n=t.length-1;return t[n]=R(t[n]),t.join(`/`)}function Pe(e){return Ne(i(e))}function Fe(e){let t=e.trim().replace(/^\/+/,``),n=t.search(/[#^]/);return Ne(n>=0?t.slice(0,n):t)}function z(e,t){let n=t?.trim();if(n)return n;let r=e.split(`/`).filter(Boolean);return r[r.length-1]||e}function B(e){return e.replace(/\\/g,`\\\\`).replace(/\[/g,`\\[`).replace(/\]/g,`\\]`)}function V(e,t){return`[${B(e)}](<${t.replace(/>/g,`%3E`)}>)`}function Ie(e,t,n=``){let r=Fe(t);if(!r)return null;let i=r.toLowerCase(),a=e=>Pe(e).toLowerCase();if(r.includes(`/`))return e.find(e=>a(e)===i)||null;let o=f(n);if(o){let t=f(`${o}/${r}`).toLowerCase(),n=e.find(e=>a(e)===t);if(n)return n}return e.find(e=>R(e.name).toLowerCase()===i)||null}function Le(e,t,n,r=``,i){let a=e.indexOf(`|`),o=a>=0?e.slice(0,a):e,s=a>=0?e.slice(a+1):void 0,c=Fe(o);if(!c)return null;let l=Ie(t,o,r),u=l?n(l):i?.(c);return u?{label:z(c,s),href:u}:null}function Re(e,t,n,r=``,i){return e.includes(`[[`)?e.split(F).map(e=>e.startsWith("```")?e:e.replace(P,(e,a)=>{let o=Le(a,t,n,r,i);return o?V(o.label,o.href):e})).join(``):e}function H(e){return e.type===`file`?R(e.name):e.name}function U(e){return e.type===`file`?Ne(e.fullPath):e.fullPath}function ze(e){return e.type===`file`?R(e.name):e.name}function Be(e=``){let t=f(e).split(`/`).filter(Boolean);return t.map((e,n)=>t.slice(0,n+1).join(`/`))}function Ve(e,t){let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n}function He(e,t){if(t.length===0)return e;let n=!1,r=new Set(e);for(let e of t)r.has(e)||(r.add(e),n=!0);return n?r:e}function W(e){return{name:e.name,cid:`__dir__${e.fullPath}`,path:e.path,type:`directory`,size:0,created_at:e.updatedAt,updated_at:e.updatedAt}}function Ue(e,t){let n=[],r=new Map;function a(e){return e&&r.get(e)?.children||n}function o(e,t,n){let i=f(t?`${t}/${e}`:e),o=r.get(i);if(o)return o.updatedAt=Math.max(o.updatedAt,n),o;let s={id:`directory:${i}`,type:`directory`,name:e,path:t,fullPath:i,updatedAt:n,children:[]};return r.set(i,s),a(t).push(s),s}for(let t of e){let e=f(t.path||``),n=e.split(`/`).filter(Boolean),r=t.updated_at||t.created_at||0,s=``;for(let e of n)s=o(e,s,r).fullPath;a(s).push({id:`file:${t.cid}:${i(t)}`,type:`file`,name:t.name,path:e,fullPath:i(t),updatedAt:r,note:t,children:[]})}function s(e){e.sort((e,n)=>{if(e.type!==n.type)return e.type===`directory`?-1:1;let r=t(H(e),H(n));return r===0?t(U(e),U(n)):r});for(let t of e)t.type===`directory`&&s(t.children)}return s(n),n}function We(e,t){let n=t.trim().toLowerCase();return n?e.flatMap(e=>{let t=H(e).toLowerCase(),r=U(e).toLowerCase(),i=t.includes(n)||r.includes(n);if(e.type===`file`)return i?[e]:[];let a=i?e.children:We(e.children,n);return!i&&a.length===0?[]:[{...e,children:a}]}):e}function Ge({nodes:e,searchQuery:t,expandedPaths:n,activeFileId:r,activeFolderPath:i,onToggleDirectory:a,onOpenFile:o,renderActions:s}){let c=t.trim().length>0;return(0,j.jsx)(`div`,{className:`note-tree`,role:`tree`,children:e.map(e=>(0,j.jsx)(Ke,{node:e,forceExpanded:c,expandedPaths:n,activeFileId:r,activeFolderPath:i,onToggleDirectory:a,onOpenFile:o,renderActions:s},e.id))})}function Ke({node:e,forceExpanded:t,expandedPaths:n,activeFileId:r,activeFolderPath:i,onToggleDirectory:a,onOpenFile:o,renderActions:s}){let c=e.type===`directory`,l=c&&(t||n.has(e.fullPath)),u=e.type===`file`&&e.note?.cid===r,d=c&&f(i)===e.fullPath,ee=c?W(e):e.note||null,te=ee&&s?s(ee):null;return(0,j.jsxs)(`div`,{className:`note-tree-node`,role:`none`,children:[(0,j.jsxs)(`div`,{className:`note-tree-row ${c?`is-directory`:`is-file`} ${u?`is-active`:``} ${d?`is-folder-active`:``} ${te?`has-actions`:``}`,children:[(0,j.jsxs)(`button`,{type:`button`,className:`note-tree-item`,role:`treeitem`,"aria-expanded":c?l:void 0,onClick:()=>{if(c){a(e);return}e.note&&o(e.note)},children:[(0,j.jsx)(`span`,{className:`note-tree-toggle`,"aria-hidden":`true`,children:c?l?(0,j.jsx)(x,{size:16}):(0,j.jsx)(m,{size:16}):(0,j.jsx)(`span`,{className:`note-tree-toggle-placeholder`})}),(0,j.jsx)(`span`,{className:`note-tree-label`,translate:`no`,children:H(e)}),e.note?.isSecret&&(0,j.jsx)(v,{className:`note-tree-lock`,size:14,"aria-hidden":`true`})]}),te]}),c&&l&&e.children.length>0&&(0,j.jsx)(`div`,{className:`note-tree-children`,role:`group`,children:e.children.map(e=>(0,j.jsx)(Ke,{node:e,forceExpanded:t,expandedPaths:n,activeFileId:r,activeFolderPath:i,onToggleDirectory:a,onOpenFile:o,renderActions:s},e.id))})]})}function qe({item:e,onMove:t,onDelete:n}){let{t:r}=te();return(0,j.jsx)(S,{ariaLabel:r(`common.moreActions`),className:`note-list-actions-anchor`,placement:`bottom-end`,items:[{key:`move`,label:r(`note.action.move`),icon:(0,j.jsx)(k,{size:16}),onSelect:()=>t(e)},{key:`delete`,label:r(`note.action.delete`),icon:(0,j.jsx)(h,{size:16}),danger:!0,onSelect:()=>n(e)}],renderTrigger:e=>(0,j.jsx)(`button`,{...e,className:`note-list-actions-trigger`,title:r(`common.moreActions`),"aria-label":r(`common.moreActions`),children:(0,j.jsx)(p,{size:16})})})}function Je(e,t){let n=new Set;for(let t of e){let e=f(t.path).split(`/`).filter(Boolean);for(let t=0;t<e.length;t+=1)n.add(e.slice(0,t+1).join(`/`))}return Array.from(n).sort(t).map(e=>{let t=e.split(`/`);return{path:e,name:t[t.length-1]||e,parentPath:t.slice(0,-1).join(`/`),depth:Math.max(t.length-1,0)}})}function Ye(e){return e.map(e=>({name:e.name,cid:e.path,path:f(e.directory),content:``,size:e.size,type:`file`,created_at:Number(e.mtimeMs)||Date.now(),updated_at:Number(e.mtimeMs)||Date.now(),isSecret:!1}))}function Xe(e,t){let n=Ae(t);return f(e?`${e}/${n}`:n)}function G(e){let t=e||typeof window<`u`&&window.location.origin||``;if(!t)return!1;try{let e=new URL(t).hostname.toLowerCase();return e===`localhost`||e===`127.0.0.1`||e===`::1`||e===`[::1]`||e.startsWith(`127.`)}catch{return!1}}function K(e,t=``){let[n,r]=(0,A.useState)(!1);return(0,A.useEffect)(()=>{let n=!1;return!e||!t?(r(!1),()=>{n=!0}):(he().then(e=>{n||r(e.configured===!0)}).catch(()=>{n||r(!1)}),()=>{n=!0})},[e,t]),n}function Ze(){return typeof window<`u`&&typeof window.electronAPI?.selectNoteVaultDirectory==`function`}function q(){let{t:e,formatDate:t,compareStrings:n}=te(),r=ee(),i=ce({select:e=>e.searchStr}),o=(0,A.useMemo)(()=>Ee(i),[i]),c=(0,A.useRef)(null),u=d(e=>e.addToast),p=a(e=>e.wallet),m=a(e=>e.openLoginModal),h=d(e=>e.notes),g=d(e=>e.notesPath),_=d(e=>e.setNotesPath),b=d(e=>e.saveNote),x=d(e=>e.deleteNote),S=d(e=>e.renameNote),C=d(e=>e.localDataReady),w=o.cid||``,T=h.find(e=>e.cid===w),de=!!w,E=de&&o.mode===`edit`,[fe,pe]=(0,A.useState)(``),[me,D]=(0,A.useState)(null),[he,O]=(0,A.useState)(null),[k,ve]=(0,A.useState)(null),M=(0,A.useRef)(``),xe=(0,A.useRef)(``),[Se,N]=(0,A.useState)(``),[P,F]=(0,A.useState)(``),[L,Ne]=(0,A.useState)(``),[Pe,Fe]=(0,A.useState)(``),[z,B]=(0,A.useState)(``),[V,H]=(0,A.useState)(!1),[U,W]=(0,A.useState)(``),[Ke,Ye]=(0,A.useState)(!1),[Xe,G]=(0,A.useState)(()=>new Set(Be(g)));(0,A.useEffect)(()=>{if(!w){N(``),F(``);return}if(!T){N(``),F(C?e(`note.error.notFound`):``);return}if(T.content.startsWith(`mp://1`)){if(!p){N(``),F(e(`note.error.loginToDecrypt`));return}let t=l(T.content,p.danger);if(!t){N(``),F(e(`note.error.decryptFailed`));return}N(t),F(``);return}N(T.content||``),F(``)},[w,C,T,e,p]),(0,A.useEffect)(()=>{if(!E){Ye(!1);return}if(!w||!T){Ne(``),Fe(``),B(``),H(!1),W(C?e(`note.error.notFound`):``);return}if(Ne(R(T.name)),Fe(T.path||``),H(T.isSecret===!0||T.content.startsWith(`mp://1`)),T.content.startsWith(`mp://1`)){if(!p){B(``),W(e(`note.error.loginToDecrypt`));return}let t=l(T.content,p.danger);if(!t){B(``),W(e(`note.error.decryptFailed`));return}B(t),W(``);return}B(T.content||``),W(``)},[w,E,C,T,e,p]);let K=(0,A.useMemo)(()=>Ue(h,n),[n,h]),Ze=(0,A.useMemo)(()=>We(K,fe),[K,fe]),q=T?.isSecret===!0||T?.content.startsWith(`mp://1`)===!0,Qe=e(E?V?`note.privacy.secret`:`note.privacy.public`:q?`note.privacy.secret`:`note.privacy.public`),$e=(0,A.useMemo)(()=>Je(h,n),[n,h]),et=(0,A.useMemo)(()=>Re(Se,h,e=>I({cid:e.cid}),T?.path||``,e=>I({path:Me(e)})),[h,Se,T?.path]),tt=(0,A.useCallback)(e=>Le(e,h,e=>I({cid:e.cid}),T?.path||``,e=>I({path:Me(e)})),[h,T?.path]);(0,A.useEffect)(()=>{T?.path&&G(e=>He(e,Be(T.path)))},[T?.path]),(0,A.useEffect)(()=>{if(!o.path||w||h.length===0)return;let e=Ie(h,o.path);e&&(_(f(e.path||``)),r({href:I({cid:e.cid}),replace:!0}))},[w,r,h,o.path,_]),(0,A.useEffect)(()=>{let t=o.chatDraft||``;if(!t||M.current===t||!C)return;if(!p){let e=`${t}:auth`;xe.current!==e&&(xe.current=e,m());return}let n=Ce(t);if(!n){M.current=t,u(e(`note.chatDraft.missing`),`warning`),J({},!0);return}M.current=t,ot(n)},[u,C,o.chatDraft,e,p]);function J(e={},t=!1){r({href:I(e),replace:t})}function nt(e){J(De(e))}function rt(e){_(f(e.path||``)),J({cid:e.cid})}function it(e){_(e.fullPath),G(t=>Ve(t,e.fullPath))}function at(e){J({cid:e.cid,mode:`edit`})}function Y(){return p?!0:(m(),!1)}async function ot(t){if(p)try{let n=await b({name:je(t.title,e(`note.chatDraft.defaultTitle`),e=>h.some(t=>f(t.path||``)===f(g)&&t.name===e)),path:g,content:t.content,isSecret:!1});we(t.id),u(e(`note.chatDraft.created`),`success`),J({cid:n,mode:`edit`},!0)}catch(t){M.current=``,u(Oe(t,e(`note.toast.createFailed`),e),`error`)}}function st(){J(T?{cid:T.cid}:{})}async function X(){if(!Y())return;if(!T){u(e(`note.toast.notFound`),`error`);return}let t=Ae(L);if(!t){u(e(`note.toast.nameRequired`),`warning`);return}Ye(!0);try{let n=c.current?.getMarkdown()??z,r=V?s(n,p.danger):n,i=await b({cid:T.cid,name:t,path:Pe,content:r,isSecret:V});B(n),J({cid:i},!0),u(e(`note.toast.saved`),`success`)}catch(t){u(Oe(t,e(`note.toast.saveFailed`),e),`error`)}finally{Ye(!1)}}function ct(){Y()&&D({title:e(`note.create.title`),placeholder:e(`note.namePlaceholder`),confirmText:e(`note.create.action`),onConfirm:async t=>{if(Y())try{let n=await b({name:Ae(t),path:g,content:``,isSecret:!1});D(null),u(e(`note.toast.created`),`success`),J({cid:n,mode:`edit`})}catch(t){u(Oe(t,e(`note.toast.createFailed`),e),`error`)}}})}function lt(e){Y()&&ve(e)}async function ut(t){if(k)try{S(ke(k),t,k.name),ve(null),u(e(`note.toast.moved`),`success`)}catch(t){u(Oe(t,e(`note.toast.moveFailed`),e),`error`)}}function Z(t){if(!Y())return;let n=t.type===`directory`;O({title:e(n?`note.delete.folderTitle`:`note.delete.noteTitle`),message:e(`note.delete.message`,{name:ze(t)}),confirmText:e(`note.action.delete`),onConfirm:async()=>{x(n?void 0:t.cid,t.path,t.name),O(null),u(e(`note.toast.deleted`),`success`),t.type===`file`&&t.cid===w&&J()}})}let Q=(0,j.jsxs)(`div`,{className:`note-header-title`,children:[(0,j.jsx)(`h2`,{className:`header-title`,children:e(`note.title`)}),(0,j.jsx)(`span`,{children:e(`note.count`,{count:h.length})})]}),dt=(0,j.jsx)(`div`,{className:`note-theme-wrap`}),ft=(0,j.jsxs)(`section`,{className:`note-list-panel note-sidebar-list`,"aria-label":e(`note.listLabel`),children:[(0,j.jsxs)(`div`,{className:`note-search`,children:[(0,j.jsx)(oe,{size:16}),(0,j.jsx)(`input`,{className:`input input-flex`,value:fe,onChange:e=>pe(e.target.value),placeholder:e(`note.search.placeholder`)})]}),Ze.length===0?(0,j.jsxs)(`div`,{className:`ui-empty-state note-empty-state`,children:[(0,j.jsx)(y,{size:32}),(0,j.jsx)(`p`,{children:e(fe?`note.empty.noMatches`:`note.empty.noNotes`)})]}):(0,j.jsx)(Ge,{nodes:Ze,searchQuery:fe,expandedPaths:Xe,activeFileId:w,activeFolderPath:w?``:g,onToggleDirectory:it,onOpenFile:rt,renderActions:e=>(0,j.jsx)(qe,{item:e,onMove:lt,onDelete:Z})}),(0,j.jsx)(`div`,{className:`note-create-btn`,children:(0,j.jsxs)(`button`,{className:`btn`,onClick:ct,children:[(0,j.jsx)(ne,{size:16}),e(`note.newNote`)]})})]});return(0,j.jsxs)(ie,{sidebar:()=>(0,j.jsx)(be,{children:ft}),headerTitle:Q,headerRight:dt,children:[(0,j.jsx)(`main`,{className:`note-page note-browser-page ${de?`has-editor`:``}`,children:(0,j.jsx)(`section`,{className:`note-workspace`,children:(0,j.jsx)(`section`,{className:`note-editor-panel`,"aria-label":e(E?`note.editorLabel.edit`:`note.editorLabel.read`),children:de?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`div`,{className:`note-editor-panel-header`,children:[(0,j.jsxs)(`div`,{className:`note-editor-title-area`,children:[E?(0,j.jsx)(`input`,{className:`note-title-input`,value:L,onChange:e=>Ne(e.target.value),placeholder:e(`note.namePlaceholder`),translate:`no`,disabled:!T}):T?(0,j.jsx)(`h3`,{translate:`no`,children:R(T.name)}):(0,j.jsx)(`h3`,{children:e(`note.untitled`)}),T&&(0,j.jsxs)(`div`,{className:`note-editor-info`,children:[(0,j.jsx)(`span`,{children:e(E?`note.mode.edit`:`note.mode.read`)}),(0,j.jsx)(`span`,{children:Qe}),(0,j.jsx)(`span`,{children:t(T.updated_at)})]})]}),(0,j.jsxs)(`div`,{className:`note-editor-actions`,children:[E&&(0,j.jsxs)(`button`,{type:`button`,className:`btn btn-sm btn-secondary`,onClick:st,children:[(0,j.jsx)(ue,{size:16}),e(`common.cancel`)]}),E?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`button`,{type:`button`,className:`btn btn-sm ${V?`btn-warning`:`btn-secondary`}`,onClick:()=>H(!V),disabled:!T,title:e(V?`note.privacy.secret`:`note.privacy.public`),"aria-label":e(V?`note.privacy.secret`:`note.privacy.public`),children:[V?(0,j.jsx)(v,{size:16}):(0,j.jsx)(le,{size:16}),e(V?`note.privacy.secret`:`note.privacy.public`)]}),(0,j.jsxs)(`button`,{className:`btn btn-sm btn-primary`,onClick:X,disabled:Ke||!!U||!T,children:[(0,j.jsx)(ae,{size:16}),e(Ke?`note.action.saving`:`note.action.save`)]})]}):T&&(0,j.jsxs)(`button`,{type:`button`,className:`btn btn-sm btn-primary`,onClick:()=>at(T),disabled:!!P,title:e(`note.action.edit`),"aria-label":e(`note.action.edit`),children:[(0,j.jsx)(_e,{size:16}),e(`note.action.edit`)]})]})]}),E?U?(0,j.jsxs)(`div`,{className:`note-empty-state editor-error`,children:[(0,j.jsx)(v,{size:36}),(0,j.jsx)(`p`,{children:U})]}):T?(0,j.jsx)(`div`,{className:`note-editor-frame editing`,children:(0,j.jsx)(Te,{ref:c,content:z,onChange:B,className:`milkdown-editor`})}):(0,j.jsxs)(`div`,{className:`note-empty-state editor-error`,children:[(0,j.jsx)(y,{size:36}),(0,j.jsx)(`p`,{children:e(C?`note.error.notFound`:`note.loading`)})]}):P?(0,j.jsxs)(`div`,{className:`ui-empty-state note-empty-state editor-error`,children:[(0,j.jsx)(v,{size:36}),(0,j.jsx)(`p`,{children:P})]}):T?(0,j.jsx)(`div`,{className:`note-editor-frame reading`,children:(0,j.jsx)(Te,{content:et,readOnly:!0,onInternalNoteLinkOpen:nt,resolveWikiNoteLink:tt,className:`milkdown-editor`})}):(0,j.jsxs)(`div`,{className:`ui-empty-state note-empty-state editor-error`,children:[(0,j.jsx)(y,{size:36}),(0,j.jsx)(`p`,{children:e(C?`note.error.notFound`:`note.loading`)})]})]}):(0,j.jsxs)(`div`,{className:`ui-empty-state note-editor-empty`,children:[(0,j.jsx)(`div`,{className:`ui-empty-icon note-editor-empty-icon`,children:(0,j.jsx)(y,{size:32})}),(0,j.jsx)(`h3`,{className:`ui-empty-title`,children:e(`note.noOpen.title`)}),(0,j.jsx)(`p`,{className:`ui-empty-desc`,children:h.length>0?e(`note.noOpen.select`):e(`note.noOpen.createFirst`)}),(0,j.jsx)(re,{label:e(`note.openList`),variant:`default`})]})})})}),me&&(0,j.jsx)(se,{title:me.title,placeholder:me.placeholder,defaultValue:me.defaultValue,confirmText:me.confirmText,onConfirm:me.onConfirm,onClose:()=>D(null)}),he&&(0,j.jsx)(ge,{title:he.title,message:he.message,confirmText:he.confirmText,danger:!0,onConfirm:he.onConfirm,onClose:()=>O(null)}),k&&(0,j.jsx)(ye,{target:k,targetLabel:ze(k),directories:$e,onMove:ut,onClose:()=>ve(null)})]})}function Qe(){let{t:e,formatDate:t,compareStrings:n}=te(),r=ee(),i=ce({select:e=>e.searchStr}),o=(0,A.useMemo)(()=>Ee(i),[i]),c=(0,A.useRef)(null),p=d(e=>e.addToast),m=a(e=>e.wallet),h=a(e=>e.openLoginModal),_=o.file||``,b=!!_,x=b&&o.mode===`edit`,[S,C]=(0,A.useState)(null),[D,O]=(0,A.useState)([]),[k,ve]=(0,A.useState)(``),[M,xe]=(0,A.useState)(!0),[Se,N]=(0,A.useState)(``),[P,F]=(0,A.useState)(``),[L,Oe]=(0,A.useState)(!1),[Pe,Fe]=(0,A.useState)(!1),[z,B]=(0,A.useState)(null),[V,H]=(0,A.useState)(``),[U,W]=(0,A.useState)(``),[Ke,G]=(0,A.useState)(``),[K,q]=(0,A.useState)(!1),[Qe,$e]=(0,A.useState)(!1),[et,tt]=(0,A.useState)(``),[J,nt]=(0,A.useState)(!1),[rt,it]=(0,A.useState)(()=>new Set(Be(k))),[at,Y]=(0,A.useState)(null),[ot,st]=(0,A.useState)(null),[X,ct]=(0,A.useState)(null),lt=(0,A.useRef)(``),ut=(0,A.useRef)(``),Z=(0,A.useMemo)(()=>Ye(D),[D]),Q=Z.find(e=>e.cid===_),dt=(0,A.useMemo)(()=>Je(Z,n),[n,Z]),ft=(0,A.useMemo)(()=>Ue(Z,n),[n,Z]),pt=(0,A.useMemo)(()=>We(ft,P),[ft,P]),mt=(0,A.useMemo)(()=>Re(U,Z,e=>I({file:e.cid}),Q?.path||z?.directory||``,e=>I({path:Me(e)})),[U,z?.directory,Q?.path,Z]),ht=(0,A.useCallback)(e=>Le(e,Z,e=>I({file:e.cid}),Q?.path||z?.directory||``,e=>I({path:Me(e)})),[z?.directory,Q?.path,Z]);(0,A.useEffect)(()=>{Fe(Ze())},[]),(0,A.useEffect)(()=>{Q?.path&&it(e=>He(e,Be(Q.path)))},[Q?.path]),(0,A.useEffect)(()=>{if(!o.path||_||Z.length===0)return;let e=Ie(Z,o.path);e&&(ve(f(e.path||``)),r({href:I({file:e.cid}),replace:!0}))},[_,r,o.path,Z]),(0,A.useEffect)(()=>{let t=o.chatDraft||``;if(!t||lt.current===t||M)return;if(!m){let e=`${t}:auth`;ut.current!==e&&(ut.current=e,h());return}if(S?.configured!==!0){let n=`${t}:vault`;ut.current!==n&&(ut.current=n,p(e(`note.chatDraft.openVaultFirst`),`warning`));return}let n=Ce(t);if(!n){lt.current=t,p(e(`note.chatDraft.missing`),`warning`),$({},!0);return}lt.current=t,wt(n)},[p,o.chatDraft,e,M,S?.configured,m]);let gt=(0,A.useCallback)(async()=>{if(!m){C(null),O([]),N(e(`note.vault.loginRequired`)),xe(!1);return}xe(!0),N(``);try{let e=await he();C(e),e.configured?O(await T()):O([])}catch(t){C(null),O([]),N(await u(t,e(`note.vault.loadFailed`)))}finally{xe(!1)}},[e,m]);(0,A.useEffect)(()=>{gt()},[gt]),(0,A.useEffect)(()=>{H(R(z?.name||Q?.name||``))},[z?.name,Q?.name]),(0,A.useEffect)(()=>{let t=!1;async function n(){if(!_){B(null),W(``),G(``),q(!1),tt(``),$e(!1);return}if(!m){B(null),W(``),G(``),q(!1),tt(e(`note.vault.loginRequired`)),$e(!1);return}if(S?.configured!==!0){B(null),W(``),G(``),q(!1),tt(``),$e(!1);return}$e(!0),tt(``);try{let n=await pe(_);if(t)return;let r=n.content.startsWith(`mp://1`),i=r?l(n.content,m.danger):n.content,a=r&&!i?e(`note.error.decryptFailed`):``;B(n),W(i||``),G(i||``),q(r),tt(a)}catch(n){if(t)return;B(null),W(``),G(``),q(!1),tt(await u(n,e(`note.error.notFound`)))}finally{t||$e(!1)}}return n(),()=>{t=!0}},[_,e,S?.configured,m]);function $(e={},t=!1){r({href:I(e),replace:t})}function _t(e){$(De(e))}function vt(e){ve(f(e.path||``)),$({file:e.cid})}function yt(e){ve(e.fullPath),it(t=>Ve(t,e.fullPath))}function bt(){_&&$({file:_,mode:`edit`})}function xt(){H(R(z?.name||Q?.name||``)),G(U),q(z?.content.startsWith(`mp://1`)===!0),$(_?{file:_}:{})}async function St(){if(!m){h();return}if(!Pe){p(e(`note.vault.selectFailed`),`error`);return}let t=window.electronAPI?.selectNoteVaultDirectory;if(!t){p(e(`note.vault.selectFailed`),`error`);return}Oe(!0);try{let n=await t();if(!n)return;await me(n),await gt(),$({},!0),p(e(`note.vault.opened`),`success`)}catch(t){p(await u(t,e(`note.vault.selectFailed`)),`error`)}finally{Oe(!1)}}function Ct(){return m?S?.configured===!0?!0:(p(e(`note.vault.emptyPrompt`),`warning`),!1):(h(),!1)}async function wt(t){if(Ct())try{let n=je(t.title,e(`note.chatDraft.defaultTitle`),e=>D.some(t=>f(t.directory)===f(k)&&t.name===e)),r=await w(f(k?`${k}/${n}`:n),t.content);we(t.id),await gt(),p(e(`note.chatDraft.created`),`success`),$({file:r.path,mode:`edit`},!0)}catch(t){lt.current=``,p(await u(t,e(`note.toast.createFailed`)),`error`)}}function Tt(){Ct()&&Y({title:e(`note.create.title`),placeholder:e(`note.namePlaceholder`),confirmText:e(`note.create.action`),onConfirm:async t=>{if(!Ct())return;let n=Xe(k,t);if(!n){p(e(`note.toast.nameRequired`),`warning`);return}try{let t=await w(n,``);Y(null),await gt(),$({file:t.path,mode:`edit`}),p(e(`note.toast.created`),`success`)}catch(t){p(await u(t,e(`note.toast.createFailed`)),`error`)}}})}function Et(e){Ct()&&ct(e)}async function Dt(t){if(!(!X||!Ct()))try{let n=_;if(X.type===`directory`){let e=ke(X),r=f(t?`${t}/${X.name}`:X.name),i=D.filter(t=>t.path.startsWith(`${e}/`));for(let t of i){let i=f(`${r}/${t.path.slice(e.length+1)}`);await de(t.path,i),_===t.path&&(n=i)}}else{let e=f(t?`${t}/${X.name}`:X.name),r=await de(X.cid,e);_===X.cid&&(n=r.path)}ct(null),await gt(),$(n?{file:n}:{},!0),p(e(`note.toast.moved`),`success`)}catch(t){p(await u(t,e(`note.toast.moveFailed`)),`error`)}}function Ot(t){Ct()&&st({title:t.type===`directory`?e(`note.delete.folderTitle`):e(`note.delete.noteTitle`),message:e(`note.delete.message`,{name:ze(t)}),confirmText:e(`note.action.delete`),onConfirm:async()=>{try{if(t.type===`directory`){let e=ke(t),n=D.filter(t=>t.path.startsWith(`${e}/`));for(let e of n)await E(e.path);_.startsWith(`${e}/`)&&$({},!0)}else await E(t.cid),_===t.cid&&$({},!0);st(null),await gt(),p(e(`note.toast.deleted`),`success`)}catch(t){p(await u(t,e(`note.toast.deleteFailed`)),`error`)}}})}async function kt(){if(!m){h();return}if(!_||!z){p(e(`note.toast.notFound`),`error`);return}let t=Ae(V);if(!t){p(e(`note.toast.nameRequired`),`warning`);return}nt(!0);try{let n=c.current?.getMarkdown()??Ke,r=K?s(n,m.danger):n,i=z.path;if(t!==z.name){i=f(z.directory?`${z.directory}/${t}`:t);let e=await de(z.path,i);B(e),H(R(e.name)),i=e.path}let a=await fe(i,r);B(a),H(R(a.name)),W(n),G(n),await gt(),$({file:a.path},!0),p(e(`note.toast.saved`),`success`)}catch(t){p(await u(t,e(`note.toast.saveFailed`)),`error`)}finally{nt(!1)}}let At=(0,j.jsxs)(`div`,{className:`note-header-title`,children:[(0,j.jsx)(`h2`,{className:`header-title`,children:e(`note.title`)}),(0,j.jsx)(`span`,{children:e(`note.count`,{count:D.length})})]}),jt=(0,j.jsx)(`div`,{className:`note-theme-wrap`,children:Pe&&(0,j.jsxs)(`button`,{className:`btn btn-sm`,onClick:St,disabled:L,title:e(`note.vault.open`),"aria-label":e(`note.vault.open`),children:[(0,j.jsx)(g,{size:16}),e(L?`note.vault.opening`:`note.vault.open`)]})}),Mt=(0,j.jsxs)(`section`,{className:`note-list-panel note-sidebar-list`,"aria-label":e(`note.listLabel`),children:[(0,j.jsxs)(`div`,{className:`note-search`,children:[(0,j.jsx)(oe,{size:16}),(0,j.jsx)(`input`,{className:`input input-flex`,value:P,onChange:e=>F(e.target.value),placeholder:e(`note.search.placeholder`)})]}),M?(0,j.jsxs)(`div`,{className:`ui-empty-state note-empty-state`,children:[(0,j.jsx)(y,{size:32}),(0,j.jsx)(`p`,{children:e(`note.loading`)})]}):Se?(0,j.jsxs)(`div`,{className:`ui-empty-state note-empty-state`,children:[(0,j.jsx)(v,{size:32}),(0,j.jsx)(`p`,{children:Se})]}):S?.configured===!0?pt.length===0?(0,j.jsxs)(`div`,{className:`ui-empty-state note-empty-state`,children:[(0,j.jsx)(y,{size:32}),(0,j.jsx)(`p`,{children:e(P?`note.empty.noMatches`:`note.vault.noFiles`)})]}):(0,j.jsx)(Ge,{nodes:pt,searchQuery:P,expandedPaths:rt,activeFileId:_,activeFolderPath:_?``:k,onToggleDirectory:yt,onOpenFile:vt,renderActions:e=>(0,j.jsx)(qe,{item:e,onMove:Et,onDelete:Ot})}):(0,j.jsxs)(`div`,{className:`ui-empty-state note-empty-state`,children:[(0,j.jsx)(g,{size:32}),Pe&&(0,j.jsxs)(`button`,{className:`btn btn-primary`,onClick:St,disabled:L,children:[(0,j.jsx)(g,{size:16}),e(L?`note.vault.opening`:`note.vault.open`)]})]}),S?.configured===!0&&(0,j.jsx)(`div`,{className:`note-create-btn`,children:(0,j.jsxs)(`button`,{className:`btn`,onClick:Tt,children:[(0,j.jsx)(ne,{size:16}),e(`note.newNote`)]})})]}),Nt=z?.mtimeMs||Q?.updated_at||Date.now(),Pt=R(z?.name||Q?.name||``)||e(`note.untitled`),Ft=x&&!!z,It=z?.content.startsWith(`mp://1`)===!0,Lt=e(x?K?`note.privacy.secret`:`note.privacy.public`:It?`note.privacy.secret`:`note.privacy.public`);return(0,j.jsxs)(ie,{sidebar:()=>(0,j.jsx)(be,{children:Mt}),headerTitle:At,headerRight:jt,children:[(0,j.jsx)(`main`,{className:`note-page note-browser-page ${b?`has-editor`:``}`,children:(0,j.jsx)(`section`,{className:`note-workspace`,children:(0,j.jsx)(`section`,{className:`note-editor-panel`,"aria-label":e(x?`note.editorLabel.edit`:`note.editorLabel.read`),children:b?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`div`,{className:`note-editor-panel-header`,children:[(0,j.jsxs)(`div`,{className:`note-editor-title-area`,children:[x&&z?(0,j.jsx)(`input`,{className:`note-title-input`,value:V,onChange:e=>H(e.target.value),onKeyDown:e=>{if(e.key===`Enter`){e.currentTarget.blur();return}e.key===`Escape`&&(H(R(z.name)),e.currentTarget.blur())},placeholder:e(`note.namePlaceholder`),translate:`no`}):(0,j.jsx)(`h3`,{translate:`no`,children:Pt}),(0,j.jsxs)(`div`,{className:`note-editor-info`,children:[(0,j.jsx)(`span`,{children:e(x?`note.mode.edit`:`note.mode.read`)}),(0,j.jsx)(`span`,{children:Lt}),(0,j.jsx)(`span`,{translate:`no`,children:Ne(_)}),(0,j.jsx)(`span`,{children:t(Nt)})]})]}),(0,j.jsxs)(`div`,{className:`note-editor-actions`,children:[x&&(0,j.jsxs)(`button`,{type:`button`,className:`btn btn-sm btn-secondary`,onClick:xt,children:[(0,j.jsx)(ue,{size:16}),e(`common.cancel`)]}),x?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`button`,{type:`button`,className:`btn btn-sm ${K?`btn-warning`:`btn-secondary`}`,onClick:()=>q(!K),disabled:!!et||!z,title:e(K?`note.privacy.secret`:`note.privacy.public`),"aria-label":e(K?`note.privacy.secret`:`note.privacy.public`),children:[K?(0,j.jsx)(v,{size:16}):(0,j.jsx)(le,{size:16}),e(K?`note.privacy.secret`:`note.privacy.public`)]}),(0,j.jsxs)(`button`,{className:`btn btn-sm btn-primary`,onClick:kt,disabled:J||!!et||!z,children:[(0,j.jsx)(ae,{size:16}),e(J?`note.action.saving`:`note.action.save`)]})]}):Q&&(0,j.jsxs)(`button`,{type:`button`,className:`btn btn-sm btn-primary`,onClick:bt,disabled:!!et||!z,title:e(`note.action.edit`),"aria-label":e(`note.action.edit`),children:[(0,j.jsx)(_e,{size:16}),e(`note.action.edit`)]})]})]}),Qe?(0,j.jsxs)(`div`,{className:`ui-empty-state note-empty-state editor-error`,children:[(0,j.jsx)(y,{size:36}),(0,j.jsx)(`p`,{children:e(`note.loading`)})]}):et?(0,j.jsxs)(`div`,{className:`ui-empty-state note-empty-state editor-error`,children:[(0,j.jsx)(v,{size:36}),(0,j.jsx)(`p`,{children:et})]}):z?(0,j.jsx)(`div`,{className:`note-editor-frame ${Ft?`editing`:`reading`}`,children:(0,j.jsx)(Te,{ref:Ft?c:void 0,content:Ft?Ke:mt,onChange:Ft?G:void 0,readOnly:!Ft,onInternalNoteLinkOpen:Ft?void 0:_t,resolveWikiNoteLink:Ft?void 0:ht,className:`milkdown-editor`})}):(0,j.jsxs)(`div`,{className:`ui-empty-state note-empty-state editor-error`,children:[(0,j.jsx)(y,{size:36}),(0,j.jsx)(`p`,{children:e(`note.error.notFound`)})]})]}):(0,j.jsxs)(`div`,{className:`ui-empty-state note-editor-empty`,children:[(0,j.jsx)(`div`,{className:`ui-empty-icon note-editor-empty-icon`,children:(0,j.jsx)(y,{size:32})}),(0,j.jsx)(`h3`,{className:`ui-empty-title`,children:S?.configured?e(`note.noOpen.title`):e(`note.vault.open`)}),(0,j.jsx)(`p`,{className:`ui-empty-desc`,children:S?.configured?e(`note.noOpen.select`):e(`note.vault.emptyPrompt`)}),S?.configured?(0,j.jsx)(re,{label:e(`note.openList`),variant:`default`}):Pe?(0,j.jsxs)(`button`,{className:`btn btn-primary`,onClick:St,disabled:L,children:[(0,j.jsx)(g,{size:16}),e(L?`note.vault.opening`:`note.vault.open`)]}):null]})})})}),at&&(0,j.jsx)(se,{title:at.title,placeholder:at.placeholder,defaultValue:at.defaultValue,confirmText:at.confirmText,onConfirm:at.onConfirm,onClose:()=>Y(null)}),ot&&(0,j.jsx)(ge,{title:ot.title,message:ot.message,confirmText:ot.confirmText,danger:!0,onConfirm:ot.onConfirm,onClose:()=>st(null)}),X&&(0,j.jsx)(ye,{target:X,targetLabel:ze(X),directories:dt,onMove:Dt,onClose:()=>ct(null)})]})}function $e(){let{t:e}=te(),t=d(e=>e.hasBackend),n=a(e=>e.wallet),r=b(),i=t===!0&&G(c()),o=K(i,n?.address||``),s=i&&(r||o);return(0,j.jsx)(A.Suspense,{fallback:(0,j.jsx)(`div`,{className:`note-editor-loading`,children:e(`note.loading`)}),children:s?(0,j.jsx)(Qe,{}):(0,j.jsx)(q,{})})}var et=o(`/note/`)({component:$e});export{et as Route};