most-box 0.3.6 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -16
- package/out/about/index.html +2 -2
- package/out/admin/index.html +0 -0
- package/out/app/index.html +0 -0
- package/out/assets/AccountMenu-D_rcXDZr.js +1 -0
- package/out/assets/AppShell-CKP_dglR.js +1 -0
- package/out/assets/{AppTop-D-qYC0ep.js → AppTop-C03PsDr_.js} +1 -1
- package/out/assets/{CopyButton-BrEkzqEq.js → CopyButton-ClwBN6Iy.js} +1 -1
- package/out/assets/{MarketingHeader-CJXpogPY.js → MarketingHeader-ChTIIzXG.js} +1 -1
- package/out/assets/{MarketingLayout-Ch4sw5Qm.js → MarketingLayout-hkPAtieL.js} +1 -1
- package/out/assets/{MilkdownEditor-DfhuT9eU.js → MilkdownEditor-X9MUH_0q.js} +1 -1
- package/out/assets/{OpenSidebarButton-Bvwr7B6k.js → OpenSidebarButton-CXBAjjCE.js} +1 -1
- package/out/assets/{index-mjFWLwue.js → index-DJzLHA0V.js} +2 -2
- package/out/assets/{index.lazy-B5JMiv3z.js → index.lazy-B8ud1tpC.js} +1 -1
- package/out/assets/{index.lazy-B3jH9yBA.js → index.lazy-BEDWJZPP.js} +1 -1
- package/out/assets/{index.lazy-F3iHN_Ao.js → index.lazy-BQ_Dyw5C.js} +1 -1
- package/out/assets/{index.lazy-PnZR3z1V.js → index.lazy-C0L9TDqK.js} +1 -1
- package/out/assets/{index.lazy-CVOAOO0_.js → index.lazy-C8luNCxY.js} +1 -1
- package/out/assets/{index.lazy-8GSHLIGt.js → index.lazy-CT5TGyGl.js} +1 -1
- package/out/assets/{index.lazy-qDpRLqXu.js → index.lazy-CTLlLPjy.js} +1 -1
- package/out/assets/{index.lazy-BmpOpQqg.js → index.lazy-Cgrv1NmQ.js} +1 -1
- package/out/assets/{index.lazy-BbA_1LnY.js → index.lazy-CnpeKB4C.js} +1 -1
- package/out/assets/{index.lazy-D3iEq2ZW.js → index.lazy-CwAN1t6l.js} +2 -2
- package/out/assets/{index.lazy-CB3C6kMj.js → index.lazy-Cy249kq1.js} +1 -1
- package/out/assets/index.lazy-DA98XQ0Q.js +1 -0
- package/out/assets/index.lazy-DYhpVW5B.js +3 -0
- package/out/assets/{index.lazy-BAr7-dhf.js → index.lazy-b811JgFg.js} +1 -1
- package/out/assets/{index.lazy-CyFSwJuo.js → index.lazy-psYKmxdW.js} +1 -1
- package/out/assets/{saveLocalFile-BLTn3Z18.js → saveLocalFile-DTgdBgO9.js} +1 -1
- package/out/assets/useChannelMessages-BrqZa2SG.js +4 -0
- package/out/assets/{useGameRoom-DLN636mz.js → useGameRoom-B3wvUICl.js} +1 -1
- package/out/chat/index.html +0 -0
- package/out/chat/join/demo/index.html +0 -0
- package/out/chat/join/index.html +0 -0
- package/out/download/index.html +2 -2
- package/out/game/gandengyan/index.html +0 -0
- package/out/game/index.html +0 -0
- package/out/game/zhajinhua/index.html +0 -0
- package/out/index.html +2 -2
- package/out/note/index.html +0 -0
- package/out/ping/index.html +2 -2
- package/out/profile/index.html +0 -0
- package/out/web3/index.html +0 -0
- package/package.json +1 -1
- package/server/src/index.js +21 -1
- package/out/assets/AccountMenu-B26qus-Q.js +0 -1
- package/out/assets/AppShell-BiYQsNO8.js +0 -1
- package/out/assets/index.lazy-BMFwyE_Z.js +0 -3
- package/out/assets/index.lazy-s6Ok77GI.js +0 -1
- package/out/assets/useChannelMessages-DKlO_2oW.js +0 -4
package/out/ping/index.html
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN" data-scroll-behavior="smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><link rel="stylesheet" href="/assets/index-FEwag7ej.css" data-precedence="default"/><title>MostBox - 网络连通性</title><meta name="theme-color" content="#5e6ad2"/><meta name="description" content="测试到全球主流网站的网络连通性和延迟"/><link rel="modulepreload" href="/assets/index-
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN" data-scroll-behavior="smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><link rel="stylesheet" href="/assets/index-FEwag7ej.css" data-precedence="default"/><title>MostBox - 网络连通性</title><meta name="theme-color" content="#5e6ad2"/><meta name="description" content="测试到全球主流网站的网络连通性和延迟"/><link rel="modulepreload" href="/assets/index-DJzLHA0V.js"/><link rel="modulepreload" href="/assets/jsx-runtime-Bt-cYkS5.js"/><link rel="modulepreload" href="/assets/useAppStore-DNhyhD20.js"/><link rel="modulepreload" href="/assets/useNavigate-DWlBD_-b.js"/><link rel="modulepreload" href="/assets/i18n-DKsg67mH.js"/><link rel="icon" href="/logo.svg" type="image/svg+xml"/><script>
|
|
2
2
|
(function() {
|
|
3
3
|
var theme = localStorage.getItem('theme');
|
|
4
4
|
if (theme === 'dark' || (!theme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
|
|
@@ -17,4 +17,4 @@
|
|
|
17
17
|
window.onunhandledrejection = function(event) {
|
|
18
18
|
console.error('[Unhandled Promise Rejection]', event.reason);
|
|
19
19
|
};
|
|
20
|
-
</script><!--$--><div class="mkt-layout"><nav class="mkt-nav"><div class="mkt-nav-inner"><a href="/" class="mkt-nav-logo"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="8" height="8" rx="2" fill="var(--accent)" opacity="0.4"></rect><rect x="14" y="2" width="8" height="8" rx="2" fill="var(--accent)" opacity="0.7"></rect><rect x="2" y="14" width="8" height="8" rx="2" fill="var(--accent)" opacity="0.7"></rect><rect x="14" y="14" width="8" height="8" rx="2" fill="var(--accent)"></rect></svg>MOST PEOPLE</a><div class="mkt-nav-cta"><button type="button" class="btn btn-icon" title="切换外观" aria-label="切换外观" aria-pressed="false"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg></button><span class="ui-action-menu-anchor language-toggle"><button type="button" aria-haspopup="menu" aria-expanded="false" aria-controls="_R_19eb6_" class="btn btn-icon" title="选择语言" aria-label="选择语言"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-languages" aria-hidden="true"><path d="m5 8 6 6"></path><path d="m4 14 6-6 2-3"></path><path d="M2 5h12"></path><path d="M7 2h1"></path><path d="m22 22-5-10-5 10"></path><path d="M14 18h6"></path></svg></button></span><a href="/download/" class="btn btn-primary mkt-nav-preview"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-download" aria-hidden="true"><path d="M12 15V3"></path><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><path d="m7 10 5 5 5-5"></path></svg>下载客户端</a><a title="个人资料" aria-label="个人资料" href="/profile/" class="account-profile-link"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-user" aria-hidden="true"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg></a></div></div></nav><main class="mkt-layout-main"><div class="ping-page"><div class="ping-header"><div class="ping-title-wrap"><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-wifi ping-title-icon" aria-hidden="true"><path d="M12 20h.01"></path><path d="M2 8.82a15 15 0 0 1 20 0"></path><path d="M5 12.859a10 10 0 0 1 14 0"></path><path d="M8.5 16.429a5 5 0 0 1 7 0"></path></svg><div><h1 class="ping-title">网络连通性</h1><p class="ping-subtitle">通过向对应网站发送请求进行测试,延迟值仅供参考。</p></div></div><button class="btn btn-icon" aria-label="重新测试全部" title="重新测试全部"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-grid"><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search" aria-hidden="true"><path d="m21 21-4.34-4.34"></path><circle cx="11" cy="11" r="8"></circle></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://google.com" target="_blank" rel="noreferrer" class="ping-card-name">Google</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Google" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cloud" aria-hidden="true"><path d="M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://cloudflare.com" target="_blank" rel="noreferrer" class="ping-card-name">Cloudflare</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Cloudflare" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-play" aria-hidden="true"><path d="M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://youtube.com" target="_blank" rel="noreferrer" class="ping-card-name">YouTube</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 YouTube" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-terminal" aria-hidden="true"><path d="M12 19h8"></path><path d="m4 17 6-6-6-6"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://github.com" target="_blank" rel="noreferrer" class="ping-card-name">GitHub</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 GitHub" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bot" aria-hidden="true"><path d="M12 8V4H8"></path><rect width="16" height="12" x="4" y="8" rx="2"></rect><path d="M2 14h2"></path><path d="M20 14h2"></path><path d="M15 13v2"></path><path d="M9 13v2"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://chatgpt.com" target="_blank" rel="noreferrer" class="ping-card-name">ChatGPT</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 ChatGPT" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-at-sign" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://x.com" target="_blank" rel="noreferrer" class="ping-card-name">X</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 X" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-camera" aria-hidden="true"><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"></path><circle cx="12" cy="13" r="3"></circle></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://instagram.com" target="_blank" rel="noreferrer" class="ping-card-name">Instagram</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Instagram" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square" aria-hidden="true"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://reddit.com" target="_blank" rel="noreferrer" class="ping-card-name">Reddit</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Reddit" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open" aria-hidden="true"><path d="M12 7v14"></path><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"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://wikipedia.org" target="_blank" rel="noreferrer" class="ping-card-name">Wikipedia</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Wikipedia" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-smartphone" aria-hidden="true"><rect width="14" height="20" x="5" y="2" rx="2" ry="2"></rect><path d="M12 18h.01"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://apple.com" target="_blank" rel="noreferrer" class="ping-card-name">Apple</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Apple" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-send" aria-hidden="true"><path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"></path><path d="m21.854 2.147-10.94 10.939"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://telegram.org" target="_blank" rel="noreferrer" class="ping-card-name">Telegram</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Telegram" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-messages-square" aria-hidden="true"><path d="M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"></path><path d="M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://discord.com" target="_blank" rel="noreferrer" class="ping-card-name">Discord</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Discord" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-music" aria-hidden="true"><path d="M9 18V5l12-2v13"></path><circle cx="6" cy="18" r="3"></circle><circle cx="18" cy="16" r="3"></circle></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://tiktok.com" target="_blank" rel="noreferrer" class="ping-card-name">TikTok</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 TikTok" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-package" aria-hidden="true"><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"></path><path d="M12 22V12"></path><polyline points="3.29 7 12 12 20.71 7"></polyline><path d="m7.5 4.27 9 5.15"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://npmjs.com" target="_blank" rel="noreferrer" class="ping-card-name">npm</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 npm" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-triangle" aria-hidden="true"><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"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://vercel.com" target="_blank" rel="noreferrer" class="ping-card-name">Vercel</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Vercel" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div></div></div></main><footer class="mkt-footer"><div class="mkt-container"><div class="mkt-footer-inner"><div class="mkt-footer-links"><a href="/about/">关于</a><a class="active" href="/ping/" data-status="active" aria-current="page">网络</a><a href="https://github.com/most-people/most" target="_blank" rel="noopener noreferrer">GitHub</a></div><span class="mkt-footer-copy">© <!-- -->2026<!-- --> MOST PEOPLE · MIT License</span><span class="mkt-footer-build" translate="no">v<!-- -->0.3.6</span></div></div></footer></div><script>(function(a,f){let l;try{l=JSON.parse(sessionStorage.getItem(a)||"{}")}catch{return}const n=l?.[f||history.state?.__TSR_key];let c=!1;for(const t in n){const e=n[t],o=e?.scrollX,s=e?.scrollY;if(Number.isFinite(o)&&Number.isFinite(s)){if(t==="window")scrollTo(o,s),c=!0;else if(t)try{const r=document.querySelector(t);r&&(r.scrollLeft=o,r.scrollTop=s)}catch{}}}if(c)return;const i=location.hash.slice(1);if(i){const t=history.state?.__hashScrollIntoViewOptions??!0;if(t){const e=document.getElementById(i);e&&e.scrollIntoView(t)}return}scrollTo(0,0)})("tsr-scroll-restoration-v1_3");document.currentScript.remove()</script><!--/$--><script class="$tsr" id="$tsr-stream-barrier">(self.$R=self.$R||{})["tsr"]=[];self.$_TSR={h(){this.hydrated=!0,this.c()},e(){this.streamEnded=!0,this.c()},c(){this.hydrated&&this.streamEnded&&(delete self.$_TSR,delete self.$R.tsr)},p(e){this.initialized?e():this.buffer.push(e)},buffer:[]};$_TSR.router=($R=>$R[0]={manifest:$R[1]={routes:$R[2]={__root__:$R[3]={preloads:$R[4]=["/assets/index-mjFWLwue.js","/assets/jsx-runtime-Bt-cYkS5.js","/assets/useAppStore-DNhyhD20.js","/assets/useNavigate-DWlBD_-b.js","/assets/i18n-DKsg67mH.js"],scripts:$R[5]=[$R[6]={attrs:$R[7]={type:"module",async:!0,src:"/assets/index-mjFWLwue.js"}}],css:$R[8]=["/assets/index-FEwag7ej.css"]}}},matches:$R[9]=[$R[10]={i:"__root__",u:1783058748967,s:"success",ssr:!0},$R[11]={i:"pingping",u:1783058748970,s:"success",ssr:!0}],lastMatchId:"pingping"})($R["tsr"]);$_TSR.e();document.currentScript.remove()</script><script type="module" async="" src="/assets/index-mjFWLwue.js"></script></body></html>
|
|
20
|
+
</script><!--$--><div class="mkt-layout"><nav class="mkt-nav"><div class="mkt-nav-inner"><a href="/" class="mkt-nav-logo"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="8" height="8" rx="2" fill="var(--accent)" opacity="0.4"></rect><rect x="14" y="2" width="8" height="8" rx="2" fill="var(--accent)" opacity="0.7"></rect><rect x="2" y="14" width="8" height="8" rx="2" fill="var(--accent)" opacity="0.7"></rect><rect x="14" y="14" width="8" height="8" rx="2" fill="var(--accent)"></rect></svg>MOST PEOPLE</a><div class="mkt-nav-cta"><button type="button" class="btn btn-icon" title="切换外观" aria-label="切换外观" aria-pressed="false"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg></button><span class="ui-action-menu-anchor language-toggle"><button type="button" aria-haspopup="menu" aria-expanded="false" aria-controls="_R_19eb6_" class="btn btn-icon" title="选择语言" aria-label="选择语言"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-earth" aria-hidden="true"><path d="M21.54 15H17a2 2 0 0 0-2 2v4.54"></path><path d="M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17"></path><path d="M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05"></path><circle cx="12" cy="12" r="10"></circle></svg></button></span><a href="/download/" class="btn btn-primary mkt-nav-preview"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-download" aria-hidden="true"><path d="M12 15V3"></path><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><path d="m7 10 5 5 5-5"></path></svg>下载客户端</a><a title="个人资料" aria-label="个人资料" href="/profile/" class="account-profile-link"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-user" aria-hidden="true"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg></a></div></div></nav><main class="mkt-layout-main"><div class="ping-page"><div class="ping-header"><div class="ping-title-wrap"><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-wifi ping-title-icon" aria-hidden="true"><path d="M12 20h.01"></path><path d="M2 8.82a15 15 0 0 1 20 0"></path><path d="M5 12.859a10 10 0 0 1 14 0"></path><path d="M8.5 16.429a5 5 0 0 1 7 0"></path></svg><div><h1 class="ping-title">网络连通性</h1><p class="ping-subtitle">通过向对应网站发送请求进行测试,延迟值仅供参考。</p></div></div><button class="btn btn-icon" aria-label="重新测试全部" title="重新测试全部"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-grid"><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search" aria-hidden="true"><path d="m21 21-4.34-4.34"></path><circle cx="11" cy="11" r="8"></circle></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://google.com" target="_blank" rel="noreferrer" class="ping-card-name">Google</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Google" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cloud" aria-hidden="true"><path d="M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://cloudflare.com" target="_blank" rel="noreferrer" class="ping-card-name">Cloudflare</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Cloudflare" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-play" aria-hidden="true"><path d="M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://youtube.com" target="_blank" rel="noreferrer" class="ping-card-name">YouTube</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 YouTube" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-terminal" aria-hidden="true"><path d="M12 19h8"></path><path d="m4 17 6-6-6-6"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://github.com" target="_blank" rel="noreferrer" class="ping-card-name">GitHub</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 GitHub" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bot" aria-hidden="true"><path d="M12 8V4H8"></path><rect width="16" height="12" x="4" y="8" rx="2"></rect><path d="M2 14h2"></path><path d="M20 14h2"></path><path d="M15 13v2"></path><path d="M9 13v2"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://chatgpt.com" target="_blank" rel="noreferrer" class="ping-card-name">ChatGPT</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 ChatGPT" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-at-sign" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://x.com" target="_blank" rel="noreferrer" class="ping-card-name">X</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 X" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-camera" aria-hidden="true"><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"></path><circle cx="12" cy="13" r="3"></circle></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://instagram.com" target="_blank" rel="noreferrer" class="ping-card-name">Instagram</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Instagram" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square" aria-hidden="true"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://reddit.com" target="_blank" rel="noreferrer" class="ping-card-name">Reddit</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Reddit" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open" aria-hidden="true"><path d="M12 7v14"></path><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"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://wikipedia.org" target="_blank" rel="noreferrer" class="ping-card-name">Wikipedia</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Wikipedia" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-smartphone" aria-hidden="true"><rect width="14" height="20" x="5" y="2" rx="2" ry="2"></rect><path d="M12 18h.01"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://apple.com" target="_blank" rel="noreferrer" class="ping-card-name">Apple</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Apple" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-send" aria-hidden="true"><path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"></path><path d="m21.854 2.147-10.94 10.939"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://telegram.org" target="_blank" rel="noreferrer" class="ping-card-name">Telegram</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Telegram" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-messages-square" aria-hidden="true"><path d="M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"></path><path d="M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://discord.com" target="_blank" rel="noreferrer" class="ping-card-name">Discord</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Discord" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-music" aria-hidden="true"><path d="M9 18V5l12-2v13"></path><circle cx="6" cy="18" r="3"></circle><circle cx="18" cy="16" r="3"></circle></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://tiktok.com" target="_blank" rel="noreferrer" class="ping-card-name">TikTok</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 TikTok" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-package" aria-hidden="true"><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"></path><path d="M12 22V12"></path><polyline points="3.29 7 12 12 20.71 7"></polyline><path d="m7.5 4.27 9 5.15"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://npmjs.com" target="_blank" rel="noreferrer" class="ping-card-name">npm</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 npm" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div><div class="ping-card pending"><div class="ping-card-top"><span class="ping-card-icon"><span class="brand-icon-wrap"><span class="brand-icon-fallback "><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-triangle" aria-hidden="true"><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"></path></svg></span><span class="brand-icon-real "><span></span></span></span></span><a href="https://vercel.com" target="_blank" rel="noreferrer" class="ping-card-name">Vercel</a><button class="ping-card-refresh" disabled="" aria-label="重新测试 Vercel" title="重新测试"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-cw ping-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path></svg></button></div><div class="ping-card-bottom"><span class="ping-pulse-dot"></span><span class="ping-latency is-muted">--</span></div></div></div></div></main><footer class="mkt-footer"><div class="mkt-container"><div class="mkt-footer-inner"><div class="mkt-footer-links"><a href="/about/">关于</a><a class="active" href="/ping/" data-status="active" aria-current="page">网络</a><a href="https://github.com/most-people/most" target="_blank" rel="noopener noreferrer">GitHub</a></div><span class="mkt-footer-copy">© <!-- -->2026<!-- --> MOST PEOPLE · MIT License</span><span class="mkt-footer-build" translate="no">v<!-- -->0.3.7</span></div></div></footer></div><script>(function(a,f){let l;try{l=JSON.parse(sessionStorage.getItem(a)||"{}")}catch{return}const n=l?.[f||history.state?.__TSR_key];let c=!1;for(const t in n){const e=n[t],o=e?.scrollX,s=e?.scrollY;if(Number.isFinite(o)&&Number.isFinite(s)){if(t==="window")scrollTo(o,s),c=!0;else if(t)try{const r=document.querySelector(t);r&&(r.scrollLeft=o,r.scrollTop=s)}catch{}}}if(c)return;const i=location.hash.slice(1);if(i){const t=history.state?.__hashScrollIntoViewOptions??!0;if(t){const e=document.getElementById(i);e&&e.scrollIntoView(t)}return}scrollTo(0,0)})("tsr-scroll-restoration-v1_3");document.currentScript.remove()</script><!--/$--><script class="$tsr" id="$tsr-stream-barrier">(self.$R=self.$R||{})["tsr"]=[];self.$_TSR={h(){this.hydrated=!0,this.c()},e(){this.streamEnded=!0,this.c()},c(){this.hydrated&&this.streamEnded&&(delete self.$_TSR,delete self.$R.tsr)},p(e){this.initialized?e():this.buffer.push(e)},buffer:[]};$_TSR.router=($R=>$R[0]={manifest:$R[1]={routes:$R[2]={__root__:$R[3]={preloads:$R[4]=["/assets/index-DJzLHA0V.js","/assets/jsx-runtime-Bt-cYkS5.js","/assets/useAppStore-DNhyhD20.js","/assets/useNavigate-DWlBD_-b.js","/assets/i18n-DKsg67mH.js"],scripts:$R[5]=[$R[6]={attrs:$R[7]={type:"module",async:!0,src:"/assets/index-DJzLHA0V.js"}}],css:$R[8]=["/assets/index-FEwag7ej.css"]}}},matches:$R[9]=[$R[10]={i:"__root__",u:1783075449161,s:"success",ssr:!0},$R[11]={i:"pingping",u:1783075449165,s:"success",ssr:!0}],lastMatchId:"pingping"})($R["tsr"]);$_TSR.e();document.currentScript.remove()</script><script type="module" async="" src="/assets/index-DJzLHA0V.js"></script></body></html>
|
package/out/profile/index.html
CHANGED
|
Binary file
|
package/out/web3/index.html
CHANGED
|
Binary file
|
package/package.json
CHANGED
package/server/src/index.js
CHANGED
|
@@ -101,6 +101,26 @@ function isChannelHistoryEntry(entry) {
|
|
|
101
101
|
return entry?.type === 'message' || entry?.type === 'system'
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
function getChannelHistoryDedupeKey(message) {
|
|
105
|
+
const type = String(message?.type || '')
|
|
106
|
+
const event = String(message?.event || '')
|
|
107
|
+
const author = normalizeOwnerAddress(message?.author)
|
|
108
|
+
const content = String(message?.content || '').trim()
|
|
109
|
+
|
|
110
|
+
if (type === 'system' && event === CHANNEL_MEMBER_JOINED_EVENT && author) {
|
|
111
|
+
return `${type}:${event}:${author}:${content}`
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return [
|
|
115
|
+
message?._coreKey || '',
|
|
116
|
+
type,
|
|
117
|
+
event,
|
|
118
|
+
message?.author || '',
|
|
119
|
+
message?.timestamp || '',
|
|
120
|
+
content,
|
|
121
|
+
].join(':')
|
|
122
|
+
}
|
|
123
|
+
|
|
104
124
|
function createMemoryDuplexPair() {
|
|
105
125
|
let left
|
|
106
126
|
let right
|
|
@@ -2672,7 +2692,7 @@ export class MostBoxEngine extends EventEmitter {
|
|
|
2672
2692
|
|
|
2673
2693
|
const seen = new Set()
|
|
2674
2694
|
const unique = allMessages.filter(m => {
|
|
2675
|
-
const key =
|
|
2695
|
+
const key = getChannelHistoryDedupeKey(m)
|
|
2676
2696
|
if (seen.has(key)) return false
|
|
2677
2697
|
seen.add(key)
|
|
2678
2698
|
return true
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{B as t,E as n,W as r,t as i}from"./useAppStore-DNhyhD20.js";import{a,c as o,o as s}from"./i18n-DKsg67mH.js";import{S as c,g as l}from"./index-mjFWLwue.js";var u=t(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),d=t(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),f=t(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),p=t(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),m=t(`user`,[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`,key:`975kel`}],[`circle`,{cx:`12`,cy:`7`,r:`4`,key:`17ys0d`}]]),h=e();function g(){let{t:e}=a(),t=i(e=>e.isDarkMode),n=i(e=>e.setIsDarkMode),r=e(`common.appearance.toggle`);return(0,h.jsx)(`button`,{type:`button`,className:`btn btn-icon`,title:r,"aria-label":r,"aria-pressed":t,onClick:()=>n(!t),children:t?(0,h.jsx)(p,{size:16}):(0,h.jsx)(f,{size:16})})}function _(){let{locale:e,setLocale:t,t:n}=a(),r=n(`common.locale.choose`);return(0,h.jsx)(c,{ariaLabel:r,className:`language-toggle`,items:s.map(n=>({key:n,label:o[n],icon:n===e?(0,h.jsx)(u,{size:16}):(0,h.jsx)(`span`,{className:`language-toggle-placeholder`,"aria-hidden":`true`}),onSelect:()=>{n!==e&&t(n)}})),renderTrigger:e=>(0,h.jsx)(`button`,{...e,className:`btn btn-icon`,title:r,"aria-label":r,children:(0,h.jsx)(d,{size:16})})})}function v(){let{t:e}=a(),t=n(e=>e.identity),i=l(t?.address,t?.avatar),o=e(`nav.profile`);return(0,h.jsx)(r,{to:`/profile/`,className:`account-profile-link`,title:o,"aria-label":o,children:t?(0,h.jsx)(`img`,{className:`account-profile-link-avatar`,src:i,alt:``,"aria-hidden":`true`}):(0,h.jsx)(m,{size:18})})}export{u as a,m as i,_ as n,g as r,v as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r}from"./useAppStore-DNhyhD20.js";import{a as i}from"./i18n-DKsg67mH.js";import{n as a,r as o,t as s}from"./AccountMenu-B26qus-Q.js";import"./index-mjFWLwue.js";var c=r(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),l=t(e(),1);function u(e,t){return typeof t==`boolean`?t:typeof window<`u`&&`matchMedia`in window?window.matchMedia(e).matches:!1}function d(e,t,{getInitialValueInEffect:n}={getInitialValueInEffect:!0}){let[r,i]=(0,l.useState)(n?t:u(e));return(0,l.useEffect)(()=>{try{if(`matchMedia`in window){let t=window.matchMedia(e);i(t.matches);let n=e=>i(e.matches);return t.addEventListener(`change`,n),()=>{t.removeEventListener(`change`,n)}}}catch{return}},[e]),r||!1}function f(e=!1,t={}){let[n,r]=(0,l.useState)(e),i=(0,l.useCallback)(()=>{r(e=>e||(t.onOpen?.(),!0))},[t.onOpen]),a=(0,l.useCallback)(()=>{r(e=>e&&(t.onClose?.(),!1))},[t.onClose]);return[n,{open:i,close:a,toggle:(0,l.useCallback)(()=>{n?a():i()},[a,i,n]),set:r}]}var p=n(),m=(0,l.createContext)(null);function h(){let e=(0,l.useContext)(m);if(!e)throw Error(`useAppShell must be used within AppShell`);return e}function g({sidebar:e,className:t=``,headerTitle:n,headerRight:r,sidebarToggleReplacement:u,defaultHide:h=!1,hideAccountMenu:g=!1,children:_}){let[v,y]=f(!1),[b,x]=(0,l.useState)(h),S=(0,l.useRef)(h),C=d(`(max-width: 768px)`),{t:w}=i(),T=(0,l.useCallback)((e={})=>{y.close(),e.collapse&&x(!0)},[y]);(0,l.useEffect)(()=>{h!==S.current&&(h?T({collapse:!0}):x(!1),S.current=h)},[h,T]);let E=()=>{C?y.toggle():x(!b)},D=()=>{C?y.open():x(!1)},O=C?v:!b;return(0,p.jsx)(m.Provider,{value:{closeSidebar:T,openSidebar:D,isSidebarVisible:O},children:(0,p.jsxs)(`div`,{className:[`app-layout`,t].filter(Boolean).join(` `),children:[(0,p.jsx)(`div`,{className:`sidebar-overlay ${v?`visible`:``}`,onClick:()=>T()}),(0,p.jsx)(`div`,{className:`sidebar ${v?`open`:``} ${b?`collapsed`:``}`,children:e({closeSidebar:T,openSidebar:D})}),(0,p.jsxs)(`div`,{className:`main-content`,children:[(0,p.jsxs)(`header`,{className:`app-header`,children:[(0,p.jsxs)(`div`,{className:`header-left`,children:[u??(0,p.jsx)(`button`,{onClick:E,className:`btn btn-icon sidebar-toggle-btn`,"aria-label":w(C?`appShell.openMenu`:b?`appShell.expandSidebar`:`appShell.collapseSidebar`),children:(0,p.jsx)(c,{size:16})}),n]}),(0,p.jsxs)(`div`,{className:`header-right`,children:[r,(0,p.jsx)(o,{}),(0,p.jsx)(a,{}),!g&&(0,p.jsx)(s,{})]})]}),_]})]})})}export{h as n,f as r,g as t};
|
|
@@ -1,3 +0,0 @@
|
|
|
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-DNhyhD20.js";import{a as u}from"./i18n-DKsg67mH.js";import{t as d}from"./circle-alert-DXVkx8p8.js";import{a as ee,o as f,r as p,t as te}from"./chatNoteDraft-DTy6In5R.js";import{t as ne}from"./OpenSidebarButton-Bvwr7B6k.js";import{a as m,i as h,n as re,o as ie,r as ae,t as oe}from"./saveLocalFile-BLTn3Z18.js";import{t as g}from"./arrow-right-BsHzC0ZL.js";import{n as se,t as _}from"./trash-2-B9gno5q6.js";import{t as v}from"./download-Cy2BlfKM.js";import{t as ce}from"./external-link-D_AQSgxW.js";import{t as le}from"./file-text-zvTER2mN.js";import{t as y}from"./loader-C4pED_QP.js";import{r as ue,t as de}from"./AppShell-BiYQsNO8.js";import{t as fe}from"./message-square-CfApq8Ou.js";import{t as pe}from"./music-Br2x8TKX.js";import{t as me}from"./search-DLBOUfny.js";import{A as he,C as ge,M as _e,O as ve,S as ye,T as be,g as xe,j as Se,n as Ce,r as we,w as Te}from"./index-mjFWLwue.js";import{t as Ee}from"./AppTop-D-qYC0ep.js";import{t as De}from"./LogoIcon-B2fFe0l1.js";import{t as Oe}from"./format-CAKfypjK.js";import{a as ke,i as Ae,n as b,o as je,r as Me,t as Ne}from"./downloadValidation-Dd43i9_9.js";import{t as x}from"./channelApi-C5eHetoJ.js";import{t as Pe}from"./useChannelMessages-DKlO_2oW.js";import{t as Fe}from"./ChatRestoringIndicator-CLV78gNW.js";var Ie=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`}]]),Le=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`}]]),Re=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`}]]),ze=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`}]]),Be=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`}]]),S=t(e(),1),C=n();function Ve(e){return String(e||``).split(`/`).pop()||e}function He(e){return e===`image`?(0,C.jsx)(h,{size:20}):e===`video`?(0,C.jsx)(m,{size:20}):e===`audio`?(0,C.jsx)(pe,{size:20}):(0,C.jsx)(le,{size:20})}function Ue({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(),ee=Number.isFinite(e.size)&&e.size>0?Oe(e.size):a(`chat.mostboxFile`),f=r?a(`chat.sending`):n||ee,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,C.jsxs)(`button`,{type:`button`,className:`ui-file-card chat-attachment-card`,onClick:()=>i?.(e),disabled:c,title:e.link,translate:`no`,children:[(0,C.jsx)(`span`,{className:`ui-file-icon chat-attachment-icon ${e.kind}`,children:c?(0,C.jsx)(y,{size:20,className:`ui-spinner chat-attachment-spinner`}):He(e.kind)}),(0,C.jsxs)(`span`,{className:`ui-file-info chat-attachment-info`,children:[(0,C.jsx)(`span`,{className:`ui-file-name chat-attachment-name`,translate:`no`,children:Ve(e.fileName)}),(0,C.jsx)(`span`,{className:`ui-file-meta chat-attachment-meta`,translate:`yes`,children:f})]}),(0,C.jsxs)(`span`,{className:l,translate:`yes`,children:[c?(0,C.jsx)(y,{size:15,className:`ui-spinner chat-attachment-spinner`}):t===`available`?(0,C.jsx)(_e,{size:16}):t===`error`?(0,C.jsx)(d,{size:17}):(0,C.jsx)(v,{size:16}),(0,C.jsx)(`span`,{className:`chat-attachment-action-label`,children:p})]})]})}var w=[{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:le}],We={key:`voice`,labelKey:`chat.voice.menu`,icon:Se},Ge=w.map(e=>e.accept).join(`,`);function Ke({children:e}){return(0,C.jsx)(`div`,{className:`message-bubble`,translate:`no`,children:e})}function qe({children:e}){return(0,C.jsx)(`div`,{className:`message-bubble has-attachment`,children:e})}function Je({children:e}){return(0,C.jsx)(`div`,{className:`chat-system-message`,children:e})}function Ye({variant:e,pending:t=!1,avatarSrc:n,isOnline:r=!1,author:i,time:a,children:o}){return(0,C.jsxs)(`div`,{className:[`chat-message`,e,t?`pending`:``].filter(Boolean).join(` `),children:[(0,C.jsxs)(`span`,{className:`chat-avatar-wrap`,children:[(0,C.jsx)(`img`,{className:`msg-avatar`,src:n,alt:`avatar`}),r&&(0,C.jsx)(`span`,{className:`chat-online-dot`,"aria-hidden":`true`})]}),(0,C.jsxs)(`div`,{className:`msg-content`,children:[(0,C.jsx)(`span`,{className:`message-header`,children:(0,C.jsx)(`span`,{className:`message-author`,translate:`no`,children:i})}),o,(0,C.jsx)(`span`,{className:`message-time`,children:a})]})]})}function Xe({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,C.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,C.jsxs)(`span`,{className:`chat-channel-icon-wrap`,children:[(0,C.jsx)(fe,{size:16}),n&&(0,C.jsx)(`span`,{className:`chat-channel-unread-dot`,title:l(`chat.unread`),"aria-hidden":`true`})]}),(0,C.jsx)(`span`,{className:`chat-channel-title`,children:(0,C.jsx)(`span`,{className:`chat-channel-title-text`,translate:`no`,children:r})}),d&&(0,C.jsx)(ye,{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,C.jsx)(Re,{size:16}):(0,C.jsx)(ze,{size:16}),onSelect:()=>o?.()},{key:`rename`,label:l(`chat.rename`),icon:(0,C.jsx)(ie,{size:16}),onSelect:()=>s?.()},{key:`delete`,label:l(`chat.delete`),icon:(0,C.jsx)(_,{size:16}),onSelect:()=>c?.()}],renderTrigger:e=>(0,C.jsx)(`button`,{...e,className:`leave-channel-btn channel-actions-trigger`,title:l(`common.moreActions`),"aria-label":l(`common.moreActions`),children:(0,C.jsx)(f,{size:16})})})]})}function Ze({members:e}){let{t}=u();return e.length===0?(0,C.jsx)(`div`,{className:`ui-empty-inline channel-members-empty`,children:t(`chat.noMembers`)}):(0,C.jsx)(`div`,{className:`channel-members-grid`,children:e.map(e=>(0,C.jsxs)(`div`,{className:`channel-member`,children:[(0,C.jsxs)(`span`,{className:`channel-member-avatar-wrap`,children:[(0,C.jsx)(`img`,{className:`channel-member-avatar`,src:e.avatarSrc,alt:`avatar`}),e.online&&(0,C.jsx)(`span`,{className:`chat-online-dot`,"aria-hidden":`true`})]}),(0,C.jsx)(`span`,{className:`channel-member-name`,translate:`no`,children:e.name})]},e.id))})}function Qe({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(),te=n||r,ne=n||!e.trim(),m=i||p(`chat.attachment.add`);function h(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(te)return;let t=a?.current;t&&(t.accept=e,t.click())}return(0,C.jsxs)(`div`,{className:`chat-input-area`,children:[(0,C.jsx)(`input`,{ref:a,type:`file`,accept:Ge,className:`chat-file-input`,onChange:e=>h(e,f)}),(0,C.jsx)(ye,{ariaLabel:p(`chat.attachmentType`),placement:`top-start`,disabled:te,menuClassName:o,items:[...w.map(e=>{let t=e.icon;return{key:e.key,label:p(e.labelKey),icon:(0,C.jsx)(t,{size:16}),onSelect:()=>ie(e.accept)}}),...s?[{key:We.key,label:p(We.labelKey),icon:(0,C.jsx)(Se,{size:16}),onSelect:()=>d?.()}]:[]],renderTrigger:e=>(0,C.jsx)(`button`,{...e,className:`btn btn-circle chat-tool-btn`,"aria-label":m,children:r?(0,C.jsx)(y,{size:18,className:`ui-spinner chat-attachment-spinner`}):(0,C.jsx)(ee,{size:18})})}),(0,C.jsx)(`textarea`,{className:`textarea chat-composer-input`,placeholder:t,value:e,disabled:n,rows:1,onChange:e=>c(e.target.value),onKeyDown:re}),(0,C.jsx)(`button`,{type:`button`,className:`btn btn-circle btn-primary send-btn`,onClick:l,disabled:ne,title:p(`chat.sendMessage`),children:(0,C.jsx)(g,{size:18})})]})}var $e=`mostbox.chat.lastReadAt`;function T(e){return Date.parse(e?.lastMessageAt||``)||Date.parse(e?.createdAt||``)||0}function et(e){let t=String(e||``).trim().toLowerCase();return t?`${$e}:${t}`:``}function tt(e,t=Date.now()){let n=Number(e);return Math.max(0,Math.floor(Number.isFinite(n)&&n>0?n:t))}function nt(e,t=E()){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 rt(e,t,n=E()){if(!(!e||!n))try{n.setItem(e,JSON.stringify(t))}catch{}}function it(e,t,n=Date.now(),r=Date.now()){if(!t)return{changed:!1,value:e};let i=tt(n,r);return(e[t]||0)>=i?{changed:!1,value:e}:{changed:!0,value:{...e,[t]:i}}}function at(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]=tt(T(e),n),r=!0)}return{changed:r,value:r?i:e}}function ot(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=tt(n,o),c=t===r;if(String(i||``).toLowerCase()===String(a||``).toLowerCase())return{...it(e,t,s,o),notify:!1};if(c)return{...it(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 st(e,t){let n=e?.channelKey||e?.name;return T(e)>(t[n]||0)}function E(){if(!(typeof window>`u`))return window.localStorage}var ct=3,lt=30,ut=/^[a-zA-Z0-9_-]+$/,dt=1e4,ft=12e3,pt=1200,mt=800,ht=`channel.member.joined`;function D(e){return e?.channelKey||e?.name||``}function O(e){return e?.channelId||e?.name||``}function k(e){return e&&typeof e==`object`?e:{}}function gt(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||O(e)}function _t(e){return e.type===`system`&&e.event===ht}function vt(){return typeof window>`u`?``:(new URLSearchParams(window.location.search).get(`channel`)||``).trim()}function yt(e){let t=new Date(e||Date.now());return Number.isNaN(t.getTime())?String(Date.now()):t.toISOString().slice(0,16).replace(`T`,` `).replace(`:`,`-`)}function j(e){return e.replace(/\\/g,`\\\\`).replace(/\[/g,`\\[`).replace(/\]/g,`\\]`)}function bt(e,t){return`[${j(e)}](<${t.replace(/>/g,`%3E`)}>)`}function xt(e){let t=String(e||``).trim().split(/\r?\n/);return t.length>0?t.map(e=>`> ${e}`).join(`
|
|
2
|
-
`):`> `}var St=`chat-file`;function Ct(e,t){return e.type.startsWith(`image/`)?`image`:e.type.startsWith(`video/`)?`video`:e.type.startsWith(`audio/`)?`audio`:e.type.startsWith(`text/`)?`text`:ae(t)}function wt(e){return e?`${e.slice(0,6)}...${e.slice(-4)}`:`Unknown`}function Tt(e){return/#[a-fA-F0-9]{4}$/.test(String(e||``).trim())}function M(e){return String(e||``).trim().toLowerCase()}function Et(){if(typeof window>`u`)return;let e=window;return e.AudioContext||e.webkitAudioContext}function N(){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,S.useState)([]),[h,g]=(0,S.useState)(null),[_,v]=(0,S.useState)(``),[le,y]=(0,S.useState)(!1),[pe,_e]=(0,S.useState)(``),[ye,Se]=(0,S.useState)(``),[Oe,Re]=ue(!1),[ze,He]=(0,S.useState)(``),[w,We]=(0,S.useState)(!1),[Ge,$e]=(0,S.useState)(!1),[tt,E]=ue(!1),[ht,k]=(0,S.useState)(null),[j,N]=(0,S.useState)(null),[Dt,P]=(0,S.useState)(!1),[Ot,kt]=(0,S.useState)(``),[At,jt]=(0,S.useState)(!1),[Mt,Nt]=(0,S.useState)(null),[Pt,Ft]=(0,S.useState)(!1),[F,I]=(0,S.useState)({}),[L,R]=(0,S.useState)(null),[It,Lt]=(0,S.useState)(!1),[Rt,zt]=(0,S.useState)(!1),[Bt,Vt]=(0,S.useState)(!1),[Ht,Ut]=(0,S.useState)({}),[Wt,Gt]=(0,S.useState)([]),z=a?.theme===`sparkbit`,Kt=z&&a?.data?a.data:``,qt=z&&a?.logo||``,Jt=z&&t&&a?.logo_dark||``,Yt=Jt||qt,Xt=Jt&&qt&&Jt!==qt?qt:``,Zt=Yt&&!Rt?Yt:Xt&&!Bt?Xt:``,Qt=(0,S.useRef)(null),$t=(0,S.useRef)(null),en=(0,S.useRef)(``),tn=(0,S.useRef)(new Set),nn=(0,S.useRef)(new Set),B=(0,S.useRef)(null),rn=(0,S.useRef)(!1),an=(0,S.useRef)(0),on=(0,S.useRef)(async()=>[]),sn=(0,S.useRef)(new Map),V=(0,S.useRef)(new Map),H=(0,S.useRef)(new Set),U=e===!0,{t:W,compareStrings:cn,formatDate:ln,formatTime:un}=u(),G=Ce(),K=(0,S.useCallback)(async(e,t)=>{n(await c(e,t),`error`)},[n]),q=(0,S.useMemo)(()=>et(a?.address),[a?.address]),dn=(0,S.useCallback)((e,t=Date.now())=>{e&&Ut(n=>{let r=it(n,e,t);return r.changed?(rt(q,r.value),r.value):n})},[q]),fn=(0,S.useCallback)(()=>{if(rn.current||typeof window>`u`)return;let e=Et();if(e)try{let t=B.current||new e;B.current=t,t.state===`suspended`&&t.resume().catch(()=>{}),rn.current=!0}catch{}},[]),pn=(0,S.useCallback)(()=>{if(!rn.current)return;let e=Date.now();if(e-an.current<pt)return;an.current=e;let t=Et();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{}},[]),mn=(0,S.useCallback)(async(e=h)=>{let t=D(e);if(!t||!U){Gt([]);return}try{let e=await x.getChannelPresence(t);if(en.current!==t)return;Gt(e)}catch(e){console.warn(`[Chat] Failed to fetch channel presence:`,e instanceof Error?e.message:e)}},[h,U]),hn=(0,S.useCallback)((e=``)=>{let t=en.current;if(!e||e!==t||!U)return;let n=sn.current,r=n.get(e);r&&window.clearTimeout(r);let i=window.setTimeout(()=>{n.delete(e),on.current(e)},mt);n.set(e,i)},[U]);function gn(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=>D(t)===e?{...t,lastMessageAt:new Date(r).toISOString()}:t));let t=e===en.current;Ut(i=>{let o=ot(i,{channelName:e,messageTime:r,activeChannelName:t?e:``,messageAuthor:n?.author,userAddress:a?.address});return o.changed&&rt(q,o.value),o.notify&&pn(),o.changed?o.value:i})}break}case`channel:peer:online`:case`channel:sync:available`:{let e=gt(t),n=en.current;$(),e.includes(n)&&(hn(n),h&&mn(h));break}case`channel:presence`:{let e=t?.channelKey||t?.channel;h&&(!e||e===D(h))&&mn(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),I(t=>({...t,[e.cid]:{status:`available`,message:W(`chat.attachment.previewAvailable`)}})),n(W(`chat.attachment.downloadCompleted`,{fileName:t.fileName||Ve(e.fileName)}),`success`),kn(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),I(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 _n=(0,S.useMemo)(()=>f.map(e=>D(e)),[f]),J=D(h),vn=(0,S.useMemo)(()=>a?{...we(a),profileUpdatedAt:a.profileUpdatedAt}:{},[a?.avatar,a?.displayName,a?.profileUpdatedAt,a?.username]),Y=(0,S.useMemo)(()=>!h||!J?null:{channelName:J,title:A(h)},[h,J]),{clearMessages:yn,messages:X,sendMessage:bn,syncedChannelName:xn,syncMessages:Sn}=Pe({isReady:U,enabled:!!a,channelName:J,extraSubscribedChannelNames:_n,peerId:ze,waitForPeerId:!0,onSyncError:e=>K(e,W(`chat.error.messages`)),onSocketEvent:gn,onReconnect:()=>{$(),h&&mn(h)},presenceEnabled:!!(h&&a),presenceProfile:vn});(0,S.useEffect)(()=>{on.current=Sn},[Sn]),(0,S.useEffect)(()=>{let e=sn.current;return()=>{for(let t of e.values())window.clearTimeout(t);e.clear()}},[]);let Cn=(0,S.useMemo)(()=>{let e=new Map;return X.forEach((t,n)=>{let r=String(t.author||``).trim();if(!r)return;let i=r.toLowerCase(),a=Number(t.timestamp)||0,o=String(t.authorName||``).trim(),s=String(t.avatar||``).trim(),c=e.get(i);if(!c){e.set(i,{address:r,displayName:o,...s?{avatar:s}:{},firstSeenAt:a,lastSeenAt:a,index:n});return}a>=c.lastSeenAt&&(c.lastSeenAt=a,o&&(c.displayName=o),s&&(c.avatar=s))}),[...e.values()].sort((e,t)=>e.firstSeenAt-t.firstSeenAt||e.index-t.index)},[X]),wn=(0,S.useMemo)(()=>new Map(Cn.map(e=>[M(e.address),e])),[Cn]),Tn=(0,S.useMemo)(()=>{let e=new Map;return Wt.forEach(t=>{let n=M(t.address);!n||!t.online||e.set(n,t)}),e},[Wt]),En=(0,S.useMemo)(()=>{let e=new Map(wn);return Wt.forEach((t,n)=>{let r=M(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:Cn.length+n})}),[...e.values()]},[Cn,Wt,wn]),Dn=(0,S.useMemo)(()=>new Set(Tn.keys()),[Tn]);function Z(){return U?!0:(r(),!1)}function Q(){return a?!0:(d(),!1)}(0,S.useEffect)(()=>{let e=()=>{v(vt())};return e(),window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[]),(0,S.useEffect)(()=>{a&&v(vt())},[a?.address]),(0,S.useEffect)(()=>{zt(!1),Vt(!1)},[Yt,Xt]),(0,S.useEffect)(()=>{en.current=D(h)},[h]),(0,S.useEffect)(()=>(G.setPreviewRoom(a&&Y?Y:null),()=>{G.setPreviewRoom(null)}),[Y,a,G.setPreviewRoom]),(0,S.useEffect)(()=>{Ut(nt(q))},[q]),(0,S.useEffect)(()=>{!q||f.length===0||Ut(e=>{let t=at(e,f);return t.changed&&rt(q,t.value),t.changed?t.value:e})},[q,f]),(0,S.useEffect)(()=>(window.addEventListener(`pointerdown`,fn,{passive:!0}),window.addEventListener(`keydown`,fn),()=>{window.removeEventListener(`pointerdown`,fn),window.removeEventListener(`keydown`,fn)}),[fn]),(0,S.useEffect)(()=>()=>{B.current?.close().catch(()=>{}),B.current=null,rn.current=!1},[]),(0,S.useEffect)(()=>{Qt.current?.scrollIntoView({behavior:`smooth`})},[X]),(0,S.useEffect)(()=>{if(!U){He(``);return}s.get(`/api/node-id`).json().then(e=>He(e.id)).catch(e=>{console.warn(`[Chat] Failed to fetch node ID:`,e.message),K(e,W(`chat.error.nodeId`))})},[U,K,W]),(0,S.useEffect)(()=>{U&&a?(y(!1),$()):y(!1)},[e,U,a?.address]),(0,S.useEffect)(()=>{if(h){if(U){let e=D(h);Gt([]),Sn(e,{replace:!0}),mn(h)}}else Gt([])},[h,U,mn,Sn]),(0,S.useEffect)(()=>{if(!_)return;if(!a){nn.current.has(_)||(nn.current.add(_),d());return}if(!U||!le)return;let e=f.find(e=>D(e)===_)||f.find(e=>O(e)===_);if(e&&(!h||D(h)!==D(e))){Pn(e);return}if(e&&h&&D(h)===D(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(tn.current.has(t)||w)return;let r=On(_);if(tn.current.add(t),r){n(r,`error`);return}Ln(_)},[f,h,_,le,U,w,a?.address]),(0,S.useEffect)(()=>{a||(m([]),y(!1),g(null),v(vt()),N(null),yn(),Se(``),He(``),P(!1),Nt(null),I({}),Ut({}),H.current.clear(),V.current.clear())},[yn,a?.address]);function On(e){return e.length<ct?W(`chat.validation.nameMin`,{count:ct}):e.length>lt?W(`chat.validation.nameMax`,{count:lt}):e.includes(`.`)?W(`chat.validation.dotReserved`):ut.test(e)?``:W(`chat.validation.allowedChars`)}async function $(){if(!U){y(!1);return}try{m(await x.getChannels()),y(!0)}catch(e){m([]),y(!1),await K(e,W(`chat.error.channelList`))}}function kn(e,t=e.fileName){let n=ae(t);Nt({cid:e.cid,fileName:t,subtype:n===`file`?e.kind:n})}async function An(e){if(Q()&&Z())try{n((await oe({cid:e.cid,fileName:e.fileName,getFileDownloadUrl:b.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 jn(e){let t=Ne(e.link,W);if(t)return I(n=>({...n,[e.cid]:{status:`error`,message:t}})),!1;try{I(t=>({...t,[e.cid]:{status:`checking`}}));let t=await b.checkDownload(e.link,{timeout:dt,requestTimeout:ft});return I(n=>({...n,[e.cid]:{status:t.alreadyExists?`available`:`ready`,message:t.alreadyExists?W(`chat.attachment.localAvailable`):W(`chat.attachment.downloadAvailable`)}})),!0}catch(t){let n=await Me(t);return I(t=>({...t,[e.cid]:{status:`error`,message:n}})),!1}}async function Mn(e){R(null),await jn(e)&&await Nn(e)}async function Nn(e){if(!H.current.has(e.cid)){H.current.add(e.cid),I(t=>({...t,[e.cid]:{status:`downloading`,message:W(`chat.attachment.downloading`)}}));try{let t=await b.downloadFile(e.link);if(t.alreadyExists||t.fileName){H.current.delete(e.cid),I(t=>({...t,[e.cid]:{status:`available`,message:W(`chat.attachment.previewAvailable`)}})),kn({...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(t){let n=await Me(t);H.current.delete(e.cid),I(t=>({...t,[e.cid]:{status:`error`,message:n}}))}}}async function Pn(e){if(!Q()||!Z())return;let t=D(e);dn(t,Math.max(T(e),Date.now())),g(e),v(t),window.history.pushState({},``,`?channel=${encodeURIComponent(t)}`)}async function Fn(e,t){if(t&&t.stopPropagation(),Q()&&Z()&&!Ge){$e(!0);try{if(await x.leaveChannel(e),D(h)===e){g(null),v(``),yn();let e=new URL(window.location.href);e.searchParams.delete(`channel`),window.history.pushState({},``,e.pathname)}$(),E.close(),k(null)}catch(e){await K(e,W(`chat.error.leave`))}finally{$e(!1)}}}async function In(e){if(!Q()||!Z())return;let t=!e.pinned,n=D(e);try{let e=await x.setChannelPinned(n,t);m(t=>t.map(t=>D(t)===n?{...t,pinned:e.pinned}:t)),g(t=>t&&D(t)===n?{...t,pinned:e.pinned}:t)}catch(e){await K(e,W(t?`chat.error.pin`:`chat.error.unpin`))}}async function Ln(e){let t=e.trim();if(!t||w)return;let r=On(t);if(r){n(r,`error`);return}if(Q()&&Z()){We(!0);try{let e=await x.createChannel(t,`public`,we(a)),n=e.channelKey||e.key||e.name||t,r=f.find(e=>D(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=D(i);m(e=>e.some(e=>D(e)===o)?e.map(e=>D(e)===o?{...e,...i}:e):[...e,i]),Re.close(),await Pn(i),$()}catch(e){await K(e,W(`chat.error.join`))}finally{We(!1)}}}async function Rn(e,t){if(!e.trim()||!h||!Q()||!Z())return!1;let n=e.trim(),r=D(h);try{let e=await bn({channelName:r,content:n,attachment:t});return m(t=>t.map(t=>D(t)===r?{...t,lastMessageAt:new Date(Number(e?.timestamp)||Date.now()).toISOString()}:t)),e&&dn(r,Number(e.timestamp)||Date.now()),!0}catch(e){return await K(e,W(`chat.error.send`)),!1}}async function zn(){if(!ye.trim())return;let e=ye.trim();Se(``),await Rn(e)}function Bn(e,t){return`${St}/${e}/${t}`}async function Vn(e){if(!e||e.length===0||!h||!Q()||!Z()||Pt)return;Ft(!0);let t=``;try{let r=await b.getNodePolicy().catch(()=>null);for(let i of Array.from(e)){t=i.name;let e=ke(i,r,W);if(e){n(e,`error`);continue}let a=Bn(O(h),i.name),o=await b.publishFile(i,a),s=o.fileName||a,c=o.link||je(o.cid,s);await Rn(c,{kind:Ct(i,s),cid:o.cid,fileName:s,link:c,mimeType:i.type||void 0,size:i.size})}}catch(e){n(await Ae(e,W(`chat.error.attachmentSend`),W,t),`error`)}finally{Ft(!1)}}async function Hn(e){if(!Q()||!Z())return;let t=F[e.cid];if(!(t?.status===`checking`||t?.status===`downloading`)){if(t?.status===`error`){R(e);return}if(t?.status===`ready`||t?.status===`available`){await Nn(e);return}if(!t){await jn(e)&&await Nn(e);return}}}function Un(e){let t=M(e.author),n=Tn.get(t),r=wn.get(t);return Qn(n?.displayName||r?.displayName||e.authorName,e.author)}function Wn(e){return e.type!==`system`&&!e.pending&&(!!e.attachment||!!e.content.trim())}function Gn(e,t){let n=Un(t),r=`${ln(t.timestamp)} ${un(t.timestamp)}`,i=t.content.trim();e.push(`## ${r} ${n}`,``),i&&(!t.attachment||i!==t.attachment.link)&&e.push(xt(i),``),t.attachment&&e.push(`**${W(`chat.noteDraft.attachment`)}**`,``,`- ${W(`chat.noteDraft.file`)}: ${bt(Ve(t.attachment.fileName),t.attachment.link)}`,`- CID: \`${t.attachment.cid}\``,``)}function Kn(e){let t=h?A(h):``,n=`${ln(Date.now())} ${un(Date.now())}`,r=[`# ${W(`chat.noteDraft.heading`)}`,``,`- ${W(`chat.noteDraft.room`)}: ${t}`,`- ${W(`chat.noteDraft.exportedAt`)}: ${n}`,`- ${W(`chat.noteDraft.messageCount`)}: ${e.length}`,``];return e.forEach(e=>Gn(r,e)),`${r.join(`
|
|
3
|
-
`).trimEnd()}\n`}function qn(){let e=X.filter(Wn);if(e.length===0){n(W(`chat.noteDraft.empty`),`warning`);return}let t=te({title:W(`chat.noteDraft.historyTitle`,{room:h?A(h):W(`chat.title`),time:yt()}),content:Kn(e)});if(!t){n(W(`chat.noteDraft.saveFailed`),`error`);return}P(!1),window.location.assign(p(t.id))}async function Jn(e,t){if(!Q()||!Z())return;let n=D(e),r=await x.setChannelRemark(n,t);return m(e=>e.map(e=>D(e)===n?{...e,remark:r.remark}:e)),g(e=>e&&D(e)===n?{...e,remark:r.remark}:e),r.remark}async function Yn(){if(h)try{await Jn(h,Ot)}catch(e){await K(e,W(`chat.error.remark`))}}async function Xn(e){if(!(!j||At)){jt(!0);try{await Jn(j,e),N(null)}catch(e){await K(e,W(`chat.error.rename`))}finally{jt(!1)}}}function Zn(e){if(!e.attachment)return(0,C.jsx)(Ke,{children:e.content});let t=e.attachment,n=F[t.cid],r=n?.status;return(0,C.jsx)(qe,{children:(0,C.jsx)(Ue,{attachment:t,status:r,message:n?.message,pending:e.pending,onOpen:Hn})})}function Qn(e,t){let n=String(e||``).trim();return n?It?Tt(n)?n:t?`${n}#${t.slice(-4).toUpperCase()}`:n:n.replace(/#[a-fA-F0-9]{4}$/,``):wt(t)}function $n(){return(0,C.jsx)(Ze,{members:En.map(e=>{let t=Tn.get(M(e.address)),n=t?.displayName||e.displayName,r=t?.avatar||e.avatar;return{id:e.address,name:Qn(n,e.address),avatarSrc:xe(e.address,r),online:Dn.has(M(e.address))}})})}let er=z&&!!_&&(!h||!!(J&&J!==xn)),tr=[`chat-app-layout`,z?`sparkbit-chat-layout`:``].filter(Boolean).join(` `),nr=z?`sparkbit-chat-action-menu`:void 0,rr=h?(0,C.jsx)(`h2`,{className:`header-title`,translate:`no`,children:A(h)}):(0,C.jsx)(`h2`,{className:`header-title`,children:W(`chat.title`)}),ir=!!(Y&&G.room?.channelName===Y.channelName),ar=G.participants.filter(e=>!e.local).length,or=G.joined?ar:G.participants.length,sr=!z&&ir&&(G.joined||G.participants.length>0),cr=G.joined?W(`chat.voice.bannerJoined`,{count:or}):W(`chat.voice.bannerActive`,{count:or});function lr(){Y&&G.openRoom(Y)}let ur=pe.trim().toLowerCase(),dr=(0,S.useMemo)(()=>[...f].sort((e,t)=>{let n=Number(!!t.pinned)-Number(!!e.pinned);if(n!==0)return n;let r=T(t)-T(e);return r===0?cn(A(e),A(t)):r}),[f,cn]),fr=ur?dr.filter(e=>[A(e),O(e),D(e)].some(e=>e.toLowerCase().includes(ur))):dr;return(0,C.jsxs)(de,{className:tr,defaultHide:z,hideAccountMenu:z,sidebar:({closeSidebar:e})=>(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(Ee,{onNavigate:e}),(0,C.jsx)(`div`,{className:`chat-channel-search`,children:(0,C.jsxs)(`div`,{className:`ui-input-control`,children:[(0,C.jsx)(me,{className:`ui-input-icon`,size:15}),(0,C.jsx)(`input`,{type:`search`,className:`input input-compact`,placeholder:W(`chat.search.placeholder`),value:pe,onChange:e=>_e(e.target.value),"aria-label":W(`chat.search.placeholder`)})]})}),(0,C.jsx)(`nav`,{className:`sidebar-nav`,children:f.length===0?(0,C.jsx)(`div`,{className:`sidebar-empty-state`,children:(0,C.jsx)(`p`,{children:W(`chat.empty.noChannels`)})}):fr.length===0?(0,C.jsx)(`div`,{className:`sidebar-empty-state`,children:(0,C.jsx)(`p`,{children:W(`chat.empty.noMatches`)})}):fr.map(t=>(0,C.jsx)(Xe,{active:D(h)===D(t),pinned:!!t.pinned,unread:st(t,Ht),title:A(t),menuClassName:nr,onSelect:()=>{Pn(t),e()},onTogglePin:()=>void In(t),onRename:()=>N(t),onLeave:()=>{k(t),E.open()}},D(t)))}),(0,C.jsxs)(`button`,{className:`ui-action-dashed create-channel-btn`,onClick:()=>{!Q()||!Z()||Re.open()},children:[(0,C.jsx)(ee,{size:16}),W(`chat.joinChannel`)]})]}),headerTitle:rr,sidebarToggleReplacement:z?(0,C.jsx)(`span`,{className:`sidebar-toggle-static-logo`,"aria-hidden":`true`,children:Zt?(0,C.jsx)(`img`,{className:`sidebar-toggle-static-logo-img`,src:Zt,alt:``,onError:()=>{if(Zt===Xt){Vt(!0);return}zt(!0)}}):(0,C.jsx)(De,{size:18})}):void 0,headerRight:(0,C.jsx)(`div`,{className:`header-right-actions`,children:h&&(0,C.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>P(!0),title:W(`chat.channelSettings`),children:(0,C.jsx)(Be,{size:16})})}),children:[er?(0,C.jsx)(Fe,{}):h?(0,C.jsxs)(C.Fragment,{children:[sr&&(0,C.jsxs)(`button`,{type:`button`,className:`chat-voice-banner`,onClick:lr,title:W(`chat.voice.expand`),children:[(0,C.jsx)(`span`,{className:`chat-voice-banner-icon`,children:(0,C.jsx)(he,{size:18})}),(0,C.jsx)(`span`,{className:`chat-voice-banner-label`,children:cr}),(0,C.jsx)(se,{size:18})]}),(0,C.jsxs)(`div`,{className:`chat-messages`,children:[X.length===0?(0,C.jsxs)(`div`,{className:`ui-empty-state chat-messages-empty`,children:[(0,C.jsx)(`div`,{className:`ui-empty-icon empty-icon`,children:(0,C.jsx)(fe,{size:28})}),(0,C.jsx)(`p`,{children:W(`chat.empty.noMessages`)})]}):X.map(e=>{if(_t(e))return(0,C.jsx)(Je,{children:W(`chat.system.memberJoined`,{name:Un(e)})},e.id||`${e.author}-${e.timestamp}`);let t=e.author?.toLowerCase()===a?.address.toLowerCase(),n=Tn.get(M(e.author)),r=wn.get(M(e.author)),i=Dn.has(M(e.author)),o=n?.avatar||r?.avatar||e.avatar||(t?a.avatar:void 0),s=Un(e);return(0,C.jsx)(Ye,{variant:t?`self`:`other`,pending:e.pending,isOnline:i,avatarSrc:xe(e.author,o),author:s,time:un(e.timestamp),children:Zn(e)},e.id||`${e.author}-${e.timestamp}`)}),(0,C.jsx)(`div`,{ref:Qt})]}),(0,C.jsx)(Qe,{message:ye,placeholder:W(a?`chat.composer.placeholder`:`chat.composer.signInPlaceholder`),disabled:!a,isPublishingAttachment:Pt,attachmentInputRef:$t,attachmentMenuClassName:nr,showVoiceRoom:!z,onMessageChange:Se,onSend:zn,onOpenVoiceRoom:lr,onSelectAttachmentFiles:e=>{Vn(e)}})]}):(0,C.jsx)(C.Fragment,{children:(0,C.jsxs)(`div`,{className:`ui-empty-state chat-welcome`,children:[(0,C.jsx)(`div`,{className:`ui-empty-icon ui-empty-icon-lg welcome-icon`,children:(0,C.jsx)(fe,{size:36})}),(0,C.jsx)(`h2`,{className:`ui-empty-title`,children:W(`chat.select.title`)}),(0,C.jsx)(`p`,{className:`ui-empty-desc`,children:W(`chat.select.desc`)}),(0,C.jsx)(ne,{label:W(`chat.openChannelList`)})]})}),Oe&&(0,C.jsx)(ge,{title:W(`chat.joinChannel`),placeholder:W(`chat.join.placeholder`),confirmText:W(`chat.join.confirm`),validate:On,onConfirm:Ln,onClose:()=>Re.close(),isLoading:w,loadingText:W(`chat.join.joining`)}),j&&(0,C.jsx)(ge,{title:W(`chat.renameChannel`),placeholder:W(`chat.remark.placeholder`),defaultValue:j.remark||``,confirmText:W(`chat.remark.save`),onConfirm:Xn,onClose:()=>{At||N(null)},isLoading:At,loadingText:W(`chat.remark.saving`),allowEmpty:!0,validate:e=>e.length>50?W(`chat.remark.tooLong`):``}),tt&&ht&&(0,C.jsx)(Te,{title:W(`chat.leaveChannel`),message:W(`chat.leaveConfirm`,{channel:A(ht)}),confirmText:W(Ge?`chat.leaving`:`chat.leaveChannel`),onConfirm:()=>Fn(D(ht),void 0),danger:!0,onClose:()=>{E.close(),k(null)}}),L&&(0,C.jsx)(be,{onClose:()=>R(null),children:(0,C.jsxs)(`div`,{className:`confirm-modal`,onClick:e=>e.stopPropagation(),children:[(0,C.jsxs)(`div`,{className:`modal-header`,children:[(0,C.jsx)(`h3`,{children:W(`chat.attachment.noSeedsTitle`)}),(0,C.jsx)(`button`,{type:`button`,className:`btn btn-icon`,onClick:()=>R(null),"aria-label":W(`common.close`),children:(0,C.jsx)(ve,{size:18})})]}),(0,C.jsx)(`p`,{children:F[L.cid]?.message||W(`chat.attachment.noSeedsFallback`)}),(0,C.jsxs)(`div`,{className:`modal-actions`,children:[(0,C.jsx)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:()=>R(null),children:W(`common.cancel`)}),(0,C.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>Mn(L),disabled:F[L.cid]?.status===`checking`,children:F[L.cid]?.status===`checking`?W(`app.checking`):W(`chat.attachment.retryCheck`)})]})]})}),Mt&&(0,C.jsx)(re,{item:Mt,isBackendReady:U,getFileDownloadUrl:b.getFileDownloadUrl,onSaveAs:An,onClose:()=>Nt(null)}),Dt&&h&&(0,C.jsx)(`div`,{className:`channel-detail-overlay`,onClick:()=>P(!1),children:(0,C.jsxs)(`div`,{className:`channel-detail-drawer`,onClick:e=>e.stopPropagation(),children:[(0,C.jsxs)(`div`,{className:`channel-detail-header`,children:[(0,C.jsx)(`h3`,{children:W(`chat.details.title`)}),(0,C.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>P(!1),children:(0,C.jsx)(ve,{size:18})})]}),(0,C.jsxs)(`div`,{className:`channel-detail-body`,children:[(0,C.jsxs)(`div`,{className:`channel-detail-section channel-members-section`,children:[(0,C.jsx)(`div`,{className:`channel-detail-label`,children:(0,C.jsx)(`span`,{children:W(`chat.details.members`,{count:En.length})})}),$n()]}),Kt&&(0,C.jsx)(`div`,{className:`channel-detail-section`,children:(0,C.jsxs)(`a`,{className:`btn btn-primary btn-block`,href:Kt,target:`_blank`,rel:`noreferrer`,children:[(0,C.jsx)(ce,{size:16}),W(`chat.ticket.create`)]})}),!z&&(0,C.jsx)(`div`,{className:`channel-detail-section`,children:(0,C.jsxs)(`label`,{className:`setting-switch`,children:[(0,C.jsx)(`span`,{children:W(`chat.details.showAddressSuffix`)}),(0,C.jsx)(`input`,{type:`checkbox`,checked:It,onChange:e=>Lt(e.target.checked)})]})}),!z&&(0,C.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,C.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,C.jsx)(Le,{size:14}),(0,C.jsx)(`span`,{children:W(`chat.details.channelId`)})]}),(0,C.jsx)(`div`,{className:`ui-meta-box channel-detail-value channel-detail-mono`,translate:`no`,children:O(h)})]}),!z&&(0,C.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,C.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,C.jsx)(ie,{size:14}),(0,C.jsx)(`span`,{children:W(`chat.remark.placeholder`)})]}),(0,C.jsx)(`input`,{type:`text`,className:`input input-compact`,placeholder:W(`chat.remark.placeholder`),value:Ot,onChange:e=>kt(e.target.value),onFocus:()=>kt(h.remark||``),onBlur:()=>Yn(),onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur()},maxLength:50})]}),(0,C.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,C.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,C.jsx)(Ie,{size:14}),(0,C.jsx)(`span`,{children:W(`chat.channel.createdAt`)})]}),(0,C.jsx)(`div`,{className:`ui-meta-box channel-detail-value`,children:h.createdAt?ln(h.createdAt):`-`})]}),!z&&(0,C.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,C.jsx)(`div`,{className:`channel-detail-label`,children:(0,C.jsx)(`span`,{children:W(`chat.noteDraft.settingsTitle`)})}),(0,C.jsx)(`p`,{className:`channel-detail-hint`,children:W(`chat.noteDraft.saveAllDesc`)}),(0,C.jsx)(`button`,{className:`btn btn-secondary btn-block`,onClick:qn,children:W(`chat.noteDraft.saveAll`)})]})]}),!z&&(0,C.jsx)(`div`,{className:`channel-detail-footer`,children:(0,C.jsx)(`button`,{className:`btn btn-secondary btn-block`,onClick:()=>{P(!1),k(h),E.open()},children:W(`chat.leaveChannel`)})})]})})]})}var Dt=a(`/chat/`)({component:N});export{Dt as Route};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r,E as i,H as a,c as o,o as s,t as c,u as l}from"./useAppStore-DNhyhD20.js";import{a as ee}from"./i18n-DKsg67mH.js";import{t as te}from"./OpenSidebarButton-Bvwr7B6k.js";import{a as u,i as d,n as ne,o as re,r as f,t as ie}from"./saveLocalFile-BLTn3Z18.js";import{t as ae}from"./arrow-up-down-DvLSz6Ma.js";import{a as p}from"./AccountMenu-B26qus-Q.js";import{n as oe,t as se}from"./trash-2-B9gno5q6.js";import{t as ce}from"./copy-OwXDsstV.js";import{t as le}from"./download-Cy2BlfKM.js";import{t as ue}from"./file-text-zvTER2mN.js";import{t as m}from"./folder-6pYYnS2-.js";import{t as de}from"./loader-C4pED_QP.js";import{r as h,t as fe}from"./AppShell-BiYQsNO8.js";import{t as g}from"./music-Br2x8TKX.js";import{t as pe}from"./search-DLBOUfny.js";import{t as me}from"./upload-BmufnMFu.js";import{C as he,O as _,T as v,w as ge}from"./index-mjFWLwue.js";import{t as _e}from"./AppTop-D-qYC0ep.js";import{t as ve}from"./format-CAKfypjK.js";import{a as ye,i as be,n as y,r as xe,t as Se}from"./downloadValidation-Dd43i9_9.js";var Ce=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`}]]),we=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`}]]),Te=r(`star`,[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]),b=t(e(),1);function Ee(e={}){let t=e.timeout??2e3,[n,r]=(0,b.useState)(null),[i,a]=(0,b.useState)(!1),o=(0,b.useRef)(null);(0,b.useEffect)(()=>()=>{window.clearTimeout(o.current)},[]);let s=e=>{window.clearTimeout(o.current),o.current=window.setTimeout(()=>a(!1),t),a(e)};return{copy:e=>{`clipboard`in navigator?navigator.clipboard.writeText(e).then(()=>{r(null),s(!0)}).catch(e=>r(e)):r(Error(`useClipboard: navigator.clipboard is not supported`))},reset:()=>{a(!1),r(null),window.clearTimeout(o.current)},error:n,copied:i}}var x=n();function De(e){let t=e.lastIndexOf(`/`);return t===-1?{folder:``,name:e}:{folder:e.substring(0,t),name:e.substring(t+1)}}function Oe({file:e,isSelected:t,onSelect:n,onPreview:r}){let i=f(e.fileName),a=(0,x.jsx)(ue,{size:24,color:`#fff`});return i===`image`?a=(0,x.jsx)(d,{size:24,color:`#fff`}):i===`video`?a=(0,x.jsx)(u,{size:24,color:`#fff`}):i===`audio`&&(a=(0,x.jsx)(g,{size:24,color:`#fff`})),(0,x.jsxs)(`div`,{"data-id":e.cid,onClick:()=>n(e.cid),onDoubleClick:()=>r(e),className:`card ${t?`selected`:``}`,children:[(0,x.jsx)(`div`,{className:`card-icon ${e.starred?`starred`:`file`}`,children:a}),(0,x.jsx)(`p`,{className:`card-name`,translate:`no`,children:De(e.fileName).name})]})}function ke({folder:e,onClick:t}){return(0,x.jsxs)(`div`,{onClick:t,className:`card`,children:[(0,x.jsx)(`div`,{className:`card-icon folder`,children:(0,x.jsx)(m,{size:28,color:`#fff`})}),(0,x.jsx)(`p`,{className:`card-name`,translate:`no`,children:e.name})]})}function S(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 Ae({items:e,allFolders:t,currentPath:n,onMove:r,onClose:i}){let[a,o]=(0,b.useState)(``),[s,c]=(0,b.useState)(n),{t:l}=ee(),te=S(a,l(`move.root`));function u(){r(a||s.trim())}let d=t.filter(e=>{if(a===``)return!e.path.includes(`/`);let t=a+`/`;return e.path.startsWith(t)?!e.path.substring(t.length).includes(`/`):!1});return(0,x.jsx)(v,{onClose:i,children:(0,x.jsxs)(`div`,{className:`move-modal`,onClick:e=>e.stopPropagation(),children:[(0,x.jsxs)(`div`,{className:`modal-header`,children:[(0,x.jsx)(`h3`,{children:l(`move.title`)}),(0,x.jsx)(`button`,{type:`button`,onClick:i,className:`btn btn-icon`,children:(0,x.jsx)(_,{size:18})})]}),(0,x.jsx)(`p`,{className:`move-modal-desc`,children:l(`move.selectedCount`,{count:e.length})}),(0,x.jsx)(`div`,{className:`move-new-folder`,children:(0,x.jsx)(`input`,{type:`text`,className:`input`,value:s,onChange:e=>c(e.target.value),placeholder:l(`move.pathPlaceholder`),translate:`no`})}),(0,x.jsx)(`p`,{className:`move-modal-hint`,children:l(`move.pathExample`)}),(0,x.jsx)(`div`,{className:`move-breadcrumb`,children:te.map((e,t)=>(0,x.jsxs)(b.Fragment,{children:[t>0&&(0,x.jsx)(`span`,{className:`breadcrumb-separator`,children:`/`}),(0,x.jsx)(`button`,{type:`button`,onClick:()=>{o(e.path),c(e.path)},className:`move-breadcrumb-btn ${a===e.path&&!s?`active`:``}`,children:(0,x.jsx)(`span`,{translate:e.path?`no`:`yes`,children:e.name})})]},e.path))}),(0,x.jsxs)(`div`,{className:`move-folder-list`,children:[d.length===0&&(0,x.jsx)(`p`,{className:`move-modal-empty`,children:l(`move.noSubfolders`)}),d.map(e=>(0,x.jsxs)(`button`,{type:`button`,onClick:()=>o(e.path),className:`move-folder-item ${a===e.path&&!s?`selected`:``}`,children:[(0,x.jsx)(m,{size:16}),(0,x.jsx)(`span`,{translate:`no`,children:e.name})]},e.path))]}),(0,x.jsxs)(`div`,{className:`modal-actions`,children:[(0,x.jsx)(`button`,{type:`button`,onClick:i,className:`btn btn-secondary`,children:l(`common.cancel`)}),(0,x.jsx)(`button`,{type:`button`,onClick:u,className:`btn btn-primary`,children:l(`move.action`)})]})]})})}var C=`https://most.box`;function w(e){return String(e||``).trim()}function je(e,t){let n=w(t);return n?`most://${e}?filename=${encodeURIComponent(n)}`:`most://${e}`}function Me(e,t){let n=w(t),r=`${C}/cid/${encodeURIComponent(e)}`;return n?`${r}?filename=${encodeURIComponent(n)}`:r}function T(e){return De(e)}function Ne(e){let t=new Set;return e.forEach(e=>{let{folder:n}=T(e.fileName),r=n.split(`/`).filter(Boolean),i=``;for(let e of r)i+=(i?`/`:``)+e,t.add(i)}),[...t].sort()}function Pe(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 Fe(e,t,n){return{folders:Pe(t,n),files:e.filter(e=>T(e.fileName).folder===n)}}function Ie(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 E(){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),[u,d]=(0,b.useState)([]),[m,g]=(0,b.useState)([]),[De,S]=(0,b.useState)(null),[C,w]=(0,b.useState)(`all`),[Pe,E]=(0,b.useState)(!1),[D,O]=(0,b.useState)([]),[Le,k]=(0,b.useState)(null),[A,j]=(0,b.useState)(null),[Re,ze]=h(!1),[Be,Ve]=(0,b.useState)(``),[M,N]=(0,b.useState)(null),[P,He]=(0,b.useState)(!1),[Ue,F]=(0,b.useState)([]),[We,I]=h(!1),[L,R]=(0,b.useState)(``),{copy:Ge,copied:Ke}=Ee({timeout:2e3}),{copy:qe,copied:Je}=Ee({timeout:2e3}),[Ye,Xe]=h(!1),[z,B]=(0,b.useState)(null),[V,Ze]=(0,b.useState)(null),[Qe,$e]=(0,b.useState)(!1),{t:H,formatDate:et}=ee(),U=t===!0,tt=e=>e?et(e):``,W=De||``,nt=Ne(u),{folders:rt,files:it}=Fe(u,nt,W);function G(){return U?!0:(n(),!1)}function K(){return r?!0:(a(),!1)}let at=L?u.filter(e=>T(e.fileName).name.toLowerCase().includes(L.toLowerCase())):it,q=async()=>{if(!U||!r){d([]);return}try{d(await y.listPublishedFiles()||[])}catch{d([])}},J=async()=>{if(!U||!r){g([]);return}try{g(await y.listTrashFiles()||[])}catch{g([])}},ot=e=>{O(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},st=async t=>{if(K()&&G())try{await y.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 y.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 y.toggleStar(t);d(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=C===`trash`;B({title:H(t?`app.permanentDelete`:`app.batchDelete`),message:H(t?`app.deleteSelectedPermanent`:`app.deleteSelected`,{count:D.length}),confirmText:H(t?`app.permanentDelete`:`app.delete`),danger:!0,onConfirm:async()=>{B(null);try{for(let e of D)t?await y.permanentDeleteTrashFile(e):e.startsWith(`__`)||await y.deletePublishedFile(e);O([]),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 D){let n=u.find(t=>t.cid===e);if(!n)continue;let{name:r}=T(n.fileName),i=t?`${t}/${r}`:r;n.fileName!==i&&await y.moveFile(e,i)}O([]),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:T(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 y.renameFolder(t.path,a),e(H(`app.toast.renamed`),`success`),q(),Q(a)}else{let{folder:n}=T(t.fileName),r=n?`${n}/${i}`:i;await y.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 y.getNodePolicy().catch(()=>null),s=Array.from(t);for(let t of s){let r=n+t.name,a=ye(t,o,H);if(a){e(a,`error`);continue}if(u.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 y.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 be(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=A?je(A.cid,A.fileName):``,ht=A?Me(A.cid,A.fileName):``,gt=()=>{mt&&Ge(mt)},_t=()=>{ht&&qe(ht)},[Y,vt]=(0,b.useState)(!1),X=Be.trim(),Z=M?.status===`success`&&M.link===X,yt=()=>{ze.close(),N(null)},bt=e=>{Ve(e.target.value),N(null)},xt=async()=>{let t=Se(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 y.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 xe(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=Se(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 y.downloadFile(X);if(Ve(``),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 y.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:y.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 y.cacheFile(t.cid),e(H(`app.toast.pulledAndSeeding`),`success`),q()}catch(t){e(await s(t,H(`app.toast.pullFailed`)),`error`)}},Q=e=>{S(e||null),O([])};(0,b.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,b.useEffect)(()=>{if(t===!0&&r){q(),J();return}t===!1&&(d([]),g([]))},[t,r?.address]),(0,b.useEffect)(()=>{r||(O([]),k(null),j(null),Ve(``),N(null),F([]),R(``),S(null),w(`all`))},[r?.address]);let Et=H(C===`all`?`app.nav.local`:C===`starred`?`app.nav.favorites`:`app.nav.trash`),$=C===`all`?at:C===`starred`?u.filter(e=>e.starred&&T(e.fileName).name.toLowerCase().includes(L.toLowerCase())):m.filter(e=>T(e.fileName).name.toLowerCase().includes(L.toLowerCase())),Dt=C===`starred`?[]:rt.filter(e=>e.name.toLowerCase().includes(L.toLowerCase())),Ot=Ie(W,H(`app.allContent`));return(0,x.jsxs)(fe,{sidebar:({closeSidebar:e})=>(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(_e,{onNavigate:e}),(0,x.jsx)(`nav`,{className:`sidebar-nav`,children:[{id:`all`,icon:(0,x.jsx)(Ce,{size:18}),label:H(`app.nav.local`)},{id:`starred`,icon:(0,x.jsx)(Te,{size:18}),label:H(`app.nav.favorites`)},{id:`trash`,icon:(0,x.jsx)(se,{size:18}),label:H(`app.nav.trash`)}].map(t=>(0,x.jsxs)(`button`,{onClick:()=>{w(t.id),S(null),O([]),R(``),e()},className:`sidebar-nav-btn ${C===t.id?`active`:``}`,children:[t.icon,(0,x.jsx)(`span`,{children:t.label})]},t.id))})]}),headerTitle:(0,x.jsx)(`h2`,{className:`header-title`,children:Et}),headerRight:(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`search-box`,children:[(0,x.jsx)(pe,{size:14}),(0,x.jsx)(`input`,{type:`text`,value:L,onChange:e=>R(e.target.value),placeholder:H(`app.search.placeholder`)}),L&&(0,x.jsx)(`button`,{onClick:()=>R(``),children:(0,x.jsx)(_,{size:12})})]}),C===`trash`&&m.length>0&&(0,x.jsx)(`button`,{onClick:ct,className:`btn btn-sm btn-empty-trash`,children:H(`app.emptyTrash`)}),(0,x.jsx)(`button`,{onClick:()=>I.open(),className:`btn btn-icon`,children:(0,x.jsx)(ae,{size:16})})]}),children:[C===`all`&&(0,x.jsxs)(`div`,{className:`action-grid`,children:[(0,x.jsxs)(`div`,{className:`action-card upload ${Pe?`drag-over`:``}`,onDragOver:e=>{e.preventDefault(),E(!0)},onDragLeave:()=>E(!1),onDrop:e=>{e.preventDefault(),E(!1),!(!K()||!G())&&pt(e.dataTransfer.files)},children:[(0,x.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,x.jsx)(me,{size:20,className:`action-grid-icon`}),(0,x.jsx)(`p`,{children:H(`app.publishFile`)})]}),(0,x.jsxs)(`div`,{className:`action-card action-card-download`,onClick:()=>{!K()||!G()||ze.open()},children:[(0,x.jsx)(le,{size:20,className:`action-grid-icon`}),(0,x.jsx)(`p`,{children:H(`app.downloadFile`)})]})]}),C===`all`&&(0,x.jsx)(`div`,{className:`breadcrumb`,children:W?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`button`,{onClick:()=>Q(``),children:H(`app.allContent`)}),Ot.slice(1).map((e,t)=>(0,x.jsxs)(b.Fragment,{children:[(0,x.jsx)(oe,{size:12}),(0,x.jsx)(`button`,{onClick:()=>Q(e.path),className:t===Ot.length-2?`current`:``,children:(0,x.jsx)(`span`,{translate:`no`,children:e.name})}),t===Ot.length-2&&(0,x.jsx)(`button`,{onClick:()=>ft(e),className:`breadcrumb-edit-btn`,children:(0,x.jsx)(re,{size:12})})]},e.path))]}):null}),(0,x.jsxs)(`div`,{className:`content-grid`,children:[C===`trash`&&($.length===0?(0,x.jsxs)(`div`,{className:`empty-state app-empty-state`,children:[(0,x.jsx)(`p`,{children:H(L?`app.noMatches`:`app.trashEmpty`)}),(0,x.jsx)(te,{label:H(`app.openFileNavigation`)})]}):(0,x.jsx)(`div`,{className:`file-grid`,children:$.map(e=>(0,x.jsxs)(`div`,{onClick:()=>O(t=>t.includes(e.cid)?t.filter(t=>t!==e.cid):[...t,e.cid]),onDoubleClick:()=>st(e.cid),className:`card ${D.includes(e.cid)?`selected`:``}`,children:[(0,x.jsx)(`div`,{className:`card-icon trash`,children:(0,x.jsx)(ue,{size:24,color:`#fff`})}),(0,x.jsx)(`p`,{className:`card-name`,translate:`no`,children:T(e.fileName).name}),(0,x.jsx)(`p`,{className:`card-date`,children:H(`app.deletedOn`,{date:tt(e.deletedAt)})})]},e.cid))})),C!==`trash`&&($.length===0&&Dt.length===0?(0,x.jsxs)(`div`,{className:`empty-state app-empty-state`,children:[(0,x.jsx)(`p`,{children:H(L?`app.noMatches`:C===`starred`?`app.noFavorites`:`app.noLocalFiles`)}),(0,x.jsx)(te,{label:H(`app.openFileNavigation`)})]}):(0,x.jsxs)(`div`,{className:`file-grid`,children:[Dt.map(e=>(0,x.jsx)(ke,{folder:e,onClick:()=>Q(e.path)},e.path)),$.map(t=>(0,x.jsx)(Oe,{file:t,isSelected:D.includes(t.cid),onSelect:ot,onPreview:t=>{if(t.localAvailable===!1){e(H(`app.toast.fileNotLocal`),`warning`);return}k({...t,subtype:f(t.fileName)})}},t.cid))]}))]}),z&&(0,x.jsx)(ge,{title:z.title,message:z.message,confirmText:z.confirmText,danger:z.danger,onConfirm:z.onConfirm,onClose:()=>B(null)}),V&&(0,x.jsx)(he,{title:V.title,placeholder:V.placeholder,defaultValue:V.defaultValue,confirmText:V.confirmText,isLoading:Qe,onConfirm:V.onConfirm,onClose:()=>Ze(null)}),Ye&&(0,x.jsx)(Ae,{items:D.map(e=>u.find(t=>t.cid===e)).filter(Boolean),allFolders:nt.map(e=>({path:e,name:e.split(`/`).pop()})),currentPath:W,onMove:dt,onClose:()=>Xe.close()}),A&&(0,x.jsx)(v,{onClose:()=>j(null),children:(0,x.jsxs)(`div`,{className:`share-modal`,onClick:e=>e.stopPropagation(),children:[(0,x.jsxs)(`div`,{className:`modal-header`,children:[(0,x.jsx)(`h3`,{children:H(`app.shareLink`)}),(0,x.jsx)(`button`,{onClick:()=>j(null),className:`btn btn-icon`,children:(0,x.jsx)(_,{size:18})})]}),(0,x.jsxs)(`div`,{className:`share-link-list`,children:[(0,x.jsxs)(`div`,{className:`share-link-box`,children:[(0,x.jsxs)(`div`,{className:`share-link-content`,children:[(0,x.jsx)(`span`,{className:`share-link-label`,children:H(`app.shareMostLink`)}),(0,x.jsx)(`div`,{className:`share-link-text`,translate:`no`,children:mt})]}),(0,x.jsx)(`button`,{type:`button`,"aria-label":H(`app.copyMostShareLink`),onClick:gt,className:`btn btn-circle btn-primary ${Ke?`copied`:``}`,children:Ke?(0,x.jsx)(p,{size:18}):(0,x.jsx)(ce,{size:18})})]}),(0,x.jsxs)(`div`,{className:`share-link-box`,children:[(0,x.jsxs)(`div`,{className:`share-link-content`,children:[(0,x.jsx)(`span`,{className:`share-link-label`,children:H(`app.shareWebLink`)}),(0,x.jsx)(`div`,{className:`share-link-text`,translate:`no`,children:ht})]}),(0,x.jsx)(`button`,{type:`button`,"aria-label":H(`app.copyWebShareLink`),onClick:_t,className:`btn btn-circle btn-primary ${Je?`copied`:``}`,children:Je?(0,x.jsx)(p,{size:18}):(0,x.jsx)(ce,{size:18})})]})]}),(0,x.jsx)(`div`,{className:`share-storage-note`,children:(0,x.jsx)(`span`,{children:H(`app.shareSeedNote`)})})]})}),Re&&(0,x.jsx)(v,{onClose:yt,children:(0,x.jsxs)(`div`,{className:`download-modal`,onClick:e=>e.stopPropagation(),children:[(0,x.jsxs)(`div`,{className:`modal-header`,children:[(0,x.jsx)(`h3`,{children:H(`app.downloadFile`)}),(0,x.jsx)(`button`,{onClick:yt,className:`btn btn-icon`,children:(0,x.jsx)(_,{size:18})})]}),(0,x.jsxs)(`div`,{className:`download-link-row`,children:[(0,x.jsx)(`input`,{type:`text`,className:`input`,value:Be,onChange:bt,placeholder:H(`app.downloadLink.placeholder`)}),(0,x.jsxs)(`button`,{type:`button`,onClick:xt,disabled:!X||P||Y,className:`btn btn-secondary download-check-btn`,children:[P?(0,x.jsx)(de,{size:14,className:`spin`}):Z?(0,x.jsx)(p,{size:14}):(0,x.jsx)(pe,{size:14}),H(P?`app.checking`:Z?`app.passed`:`app.check`)]})]}),M&&(0,x.jsxs)(`div`,{className:`download-check-status ${M.status}`,children:[M.status===`success`?(0,x.jsx)(p,{size:14}):(0,x.jsx)(we,{size:14}),(0,x.jsx)(`span`,{children:M.message})]}),(0,x.jsxs)(`button`,{onClick:St,disabled:!Z||Y||P,className:`btn btn-info btn-full`,children:[Y?(0,x.jsx)(de,{size:14,className:`spin`}):(0,x.jsx)(le,{size:14}),H(Y?`app.downloading`:`app.startDownload`)]})]})}),Le&&(0,x.jsx)(ne,{item:Le,isBackendReady:U,getFileDownloadUrl:y.getFileDownloadUrl,onSaveAs:wt,onClose:()=>k(null)}),D.length>0&&(0,x.jsxs)(`div`,{className:`batch-bar`,children:[(0,x.jsx)(`span`,{className:`batch-info`,children:H(`app.selectedItems`,{count:D.length})}),(0,x.jsx)(`button`,{onClick:()=>O([]),className:`batch-dismiss`,children:(0,x.jsx)(_,{size:16})}),(0,x.jsx)(`div`,{className:`batch-divider`}),C===`trash`?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`button`,{onClick:async()=>{K()&&G()&&(await Promise.all(D.map(e=>y.restoreTrashFile(e))),O([]),e(H(`app.toast.restored`),`success`),q(),J())},className:`btn btn-sm`,children:H(`app.restore`)}),(0,x.jsx)(`button`,{onClick:ut,className:`btn btn-sm btn-danger`,children:H(`app.permanentDelete`)})]}):(0,x.jsxs)(x.Fragment,{children:[D.length===1&&(()=>{let e=u.find(e=>e.cid===D[0]);return e&&f(e.fileName)!==`file`})()&&(0,x.jsx)(`button`,{onClick:()=>{let t=u.find(e=>e.cid===D[0]);if(t){if(t.localAvailable===!1){e(H(`app.toast.fileNotLocal`),`warning`);return}let n=f(t.fileName);k({...t,subtype:n})}},className:`btn btn-sm`,children:H(`app.preview`)}),(0,x.jsx)(`button`,{onClick:()=>{let e=D.some(e=>{let t=u.find(t=>t.cid===e);return t&&!t.starred});D.forEach(t=>{let n=u.find(e=>e.cid===t);n&&(e?!n.starred:n.starred)&<(t)})},className:`btn btn-sm btn-star`,children:H(`app.favorite`)}),D.length===1&&(0,x.jsx)(`button`,{onClick:()=>{let e=u.find(e=>e.cid===D[0]);e&&ft(e)},className:`btn btn-sm`,children:H(`app.rename`)}),(0,x.jsx)(`button`,{onClick:()=>Xe.open(),className:`btn btn-sm btn-move`,children:H(`app.move`)}),(0,x.jsx)(`button`,{onClick:ut,className:`btn btn-sm btn-danger`,children:H(`app.delete`)}),D.length===1&&(()=>{let e=u.find(e=>e.cid===D[0]);return e&&e.localAvailable===!1})()&&(0,x.jsx)(`button`,{onClick:()=>{let e=u.find(e=>e.cid===D[0]);e&&Tt(e)},className:`btn btn-sm`,children:H(`app.pullToLocal`)}),D.length===1&&(0,x.jsx)(`button`,{onClick:()=>j(u.find(e=>e.cid===D[0])),className:`btn btn-sm`,children:H(`app.share`)}),D.length===1&&(0,x.jsx)(`button`,{onClick:()=>{let e=u.find(e=>e.cid===D[0]);e&&wt(e)},className:`btn btn-sm`,children:H(`app.saveAs`)})]})]}),We&&(0,x.jsx)(v,{onClose:()=>I.close(),children:(0,x.jsxs)(`div`,{className:`transfer-modal`,onClick:e=>e.stopPropagation(),children:[(0,x.jsxs)(`div`,{className:`modal-header`,children:[(0,x.jsx)(`h3`,{children:H(`app.transfers`)}),(0,x.jsx)(`button`,{onClick:()=>I.close(),className:`btn btn-icon`,children:(0,x.jsx)(_,{size:18})})]}),Ue.length===0?(0,x.jsx)(`div`,{className:`empty-transfer`,children:H(`app.noTransfers`)}):Ue.map(e=>(0,x.jsxs)(`div`,{className:`transfer-item`,children:[(0,x.jsxs)(`div`,{className:`transfer-item-header`,children:[e.type===`upload`?(0,x.jsx)(me,{size:14}):(0,x.jsx)(le,{size:14}),(0,x.jsx)(`span`,{className:`transfer-item-name`,translate:`no`,children:e.fileName}),e.status===`downloading`&&e.type===`download`&&(0,x.jsx)(`button`,{onClick:()=>Ct(e),className:`transfer-item-cancel`,children:(0,x.jsx)(_,{size:14})})]}),(0,x.jsxs)(`div`,{className:`transfer-progress-row`,children:[(0,x.jsx)(`progress`,{className:`transfer-progress-meter ${e.type===`download`?`download`:``} ${e.status===`error`?`error`:``} ${e.status===`cancelled`?`cancelled`:``}`,value:Math.max(0,Math.min(100,e.progress)),max:100,"aria-label":H(`app.transferProgress`,{fileName:e.fileName})}),(0,x.jsx)(`span`,{className:`transfer-progress-text`,children:e.status===`completed`?H(`app.completed`):e.status===`error`?H(`app.failed`):e.status===`cancelled`?H(`app.cancelled`):e.status===`cancelling`?H(`app.cancelling`):e.loaded&&e.total?`${ve(e.loaded)}/${ve(e.total)}`:`${e.progress}%`})]})]},e.id))]})})]})}var D=a(`/app/`)({component:E});export{D as Route};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{n as e,o as t}from"./jsx-runtime-Bt-cYkS5.js";import{E as n,u as r}from"./useAppStore-DNhyhD20.js";import{a as i}from"./index-mjFWLwue.js";import{t as a}from"./channelApi-C5eHetoJ.js";var o=t(e(),1);function s(e=``,t=[]){let n=[e,...t];return[...new Set(n.filter(Boolean))]}function c(e=[]){return s(``,e).join(`
|
|
2
|
-
`)}function ee(e,t){let n=new Set(e),r=new Set(t);return{subscribe:[...r].filter(e=>!n.has(e)),unsubscribe:[...n].filter(e=>!r.has(e))}}var te=15*1e3;function ne(e){return String(e.id||`${e.author||``}-${e.timestamp||``}-${e.content||``}`)}function l(e){let t=Number(e.timestamp);return Number.isFinite(t)?t:0}function u(e){return e.map((e,t)=>({message:e,index:t})).sort((e,t)=>{let n=l(e.message)-l(t.message);return n===0?e.index-t.index:n}).map(e=>e.message)}function re(){return`presence-${Date.now()}-${Math.random().toString(36).slice(2)}`}function d({isReady:e,enabled:t=!0,channelName:l=``,extraSubscribedChannelNames:d=[],peerId:f=``,waitForPeerId:p=!1,limit:m=100,reconnectBaseDelay:h=2500,acceptMessage:g,getMessageKey:_=ne,onSyncError:v,onSocketEvent:y,onReconnect:b,presenceEnabled:x=!1,presenceProfile:S={}}){let C=n(e=>e.identity),[ie,w]=(0,o.useState)([]),[T,E]=(0,o.useState)(!1),[ae,D]=(0,o.useState)(``),O=(0,o.useMemo)(()=>c(d),[d]),k=(0,o.useRef)(null),A=(0,o.useRef)(l),j=(0,o.useRef)(d),M=(0,o.useRef)(null),N=(0,o.useRef)(0),P=(0,o.useRef)(g),F=(0,o.useRef)(_),I=(0,o.useRef)(y),L=(0,o.useRef)(v),R=(0,o.useRef)(b),z=(0,o.useRef)(f),B=(0,o.useRef)(new Set),V=(0,o.useRef)(x),H=(0,o.useRef)(S),U=(0,o.useRef)(re()),W=(0,o.useRef)(``);(0,o.useEffect)(()=>{j.current=O?O.split(`
|
|
3
|
-
`):[]},[O]),(0,o.useEffect)(()=>{P.current=g},[g]),(0,o.useEffect)(()=>{F.current=_},[_]),(0,o.useEffect)(()=>{I.current=y},[y]),(0,o.useEffect)(()=>{L.current=v},[v]),(0,o.useEffect)(()=>{R.current=b},[b]),(0,o.useEffect)(()=>{V.current=x},[x]),(0,o.useEffect)(()=>{H.current=S},[S]);let G=(0,o.useCallback)(e=>{let t=P.current;return t?e.filter(t):e},[]),K=(0,o.useCallback)((e,t,n=!0)=>{let r=[...e];for(let e of G(t)){let t=F.current(e);if(n){let n=r.findIndex(t=>t.pending&&t.author?.toLowerCase()===e.author?.toLowerCase()&&t.content===e.content);if(n!==-1){r[n]={...e,id:e.id||t};continue}}r.some(e=>F.current(e)===t)||r.push({...e,id:e.id||t})}return u(r)},[G]),q=(0,o.useCallback)((e,t)=>{k.current?.readyState===WebSocket.OPEN&&k.current.send(JSON.stringify({event:e,data:t}))},[]),J=(0,o.useCallback)(e=>({channel:e,sessionId:U.current,...H.current}),[]),Y=(0,o.useCallback)((e=W.current)=>{e&&(q(`channel:presence:leave`,{channel:e,sessionId:U.current}),W.current===e&&(W.current=``))},[q]),X=(0,o.useCallback)(e=>{!e||!V.current||!C||(q(`channel:presence:join`,J(e)),W.current=e)},[J,C,q]),Z=(0,o.useCallback)(e=>{let t=new Set(e.filter(Boolean)),n=ee(B.current,t);for(let e of n.unsubscribe)q(`channel:unsubscribe`,{channel:e});for(let e of n.subscribe)q(`channel:subscribe`,{channel:e});B.current=t},[q]),Q=(0,o.useCallback)(()=>s(A.current,j.current),[]),$=(0,o.useCallback)(async(t=A.current,n={})=>{if(!t||!e)return[];try{let e=G(await a.getChannelMessages(t,m));return w(t=>n.replace?u(e):K(t,e,!1)),n.replace&&A.current===t&&D(t),e}catch(e){return n.replace&&(w([]),A.current===t&&D(t)),await L.current?.(e),[]}},[G,e,m,K]);(0,o.useEffect)(()=>{z.current=f,f&&(q(`register`,{peerId:f}),p&&(Z(Q()),A.current&&$(A.current,{replace:!0})))},[Q,f,Z,$,p,q]);let oe=(0,o.useCallback)(()=>{w([]),D(``)},[]),se=(0,o.useCallback)(async({channelName:e=A.current,content:t,attachment:n,optimisticId:r})=>{let o=t.trim();if(!e||!o||!C)return null;let s=i(C),c={id:r||`${s.author}-${Date.now()}-${Math.random().toString(36).slice(2)}`,...s,content:o,timestamp:Date.now(),pending:!0,attachment:n};w(e=>u([...e,c]));try{let t=await a.sendChannelMessage({channelName:e,content:o,...s,attachment:n});return w(e=>u(e.map(e=>e.id===c.id?{...t.message,id:t.message.id||F.current(t.message)}:e))),t.message}catch(e){throw w(e=>e.filter(e=>e.id!==c.id)),e}},[C]);return(0,o.useEffect)(()=>{A.current=l,!(!e||!t)&&(l&&$(l,{replace:!0}),(!p||z.current)&&Z(Q()))},[l,t,O,Q,e,Z,$,p]),(0,o.useEffect)(()=>{if(!T||!x||!C||!l){Y();return}let e=W.current;e&&e!==l&&Y(e),W.current!==l&&X(l)},[l,T,X,Y,x,C]),(0,o.useEffect)(()=>{let e=W.current;!T||!x||!e||!C||q(`channel:presence:profile`,J(e))},[T,J,x,(0,o.useMemo)(()=>[S.displayName||``,S.avatar||``,S.profileUpdatedAt||``].join(`
|
|
4
|
-
`),[S.avatar,S.displayName,S.profileUpdatedAt]),C,q]),(0,o.useEffect)(()=>{if(!T||!x||!C)return;let e=window.setInterval(()=>{let e=W.current;e&&q(`channel:presence:heartbeat`,{channel:e,sessionId:U.current})},te);return()=>window.clearInterval(e)},[T,x,C,q]),(0,o.useEffect)(()=>{!e||!t||p&&!z.current||Z(Q())},[t,Q,e,Z,p]),(0,o.useEffect)(()=>{if(!e||!t){E(!1);return}let n=!1;N.current=0;async function i(){let e=new WebSocket(await r(`/ws`));if(n){e.close();return}e.onopen=()=>{E(!0),N.current=0,z.current&&e.send(JSON.stringify({event:`register`,data:{peerId:z.current}})),(!p||z.current)&&(B.current.clear(),Z(Q()),A.current&&$(A.current,{replace:!0}),R.current?.())},e.onmessage=e=>{try{let t=JSON.parse(e.data);I.current?.(t.event,t.data),t.event===`channel:message`&&t.data?.channel===A.current&&t.data?.message&&w(e=>K(e,[t.data.message])),t.event===`user:metadata:updated`&&t.data?.scope===`channels`&&A.current&&$(A.current,{replace:!0})}catch{}},e.onclose=()=>{if(E(!1),W.current=``,n)return;let e=N.current;if(e>=20)return;let t=Math.min(h*2**e,3e4);N.current=e+1,M.current=setTimeout(i,t)},e.onerror=()=>e.close(),k.current=e}return i(),()=>{n=!0,M.current&&clearTimeout(M.current),Y(),k.current?.close(),k.current=null,B.current.clear()}},[t,Q,e,Y,K,h,Z,$,p]),{clearMessages:oe,connected:T,messages:ie,sendMessage:se,setMessages:w,syncedChannelName:ae,syncMessages:$}}export{d as t};
|