most-box 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/README.md +16 -3
  2. package/out/admin/index.html +0 -0
  3. package/out/app/index.html +0 -0
  4. package/out/assets/AppShell-CQhg6DJU.js +1 -0
  5. package/out/assets/ChatUi-BepWs-ZU.js +1 -0
  6. package/out/assets/LanguageToggle-CtzCCAYv.js +1 -0
  7. package/out/assets/{LogoIcon-CYQ7cHd5.js → LogoIcon-Dxto3Sb4.js} +1 -1
  8. package/out/assets/{MarketingLayout-BTIbv4fW.js → MarketingLayout-BQw0IS2i.js} +1 -1
  9. package/out/assets/MarketingThemeToggle-DBaC9bjz.js +1 -0
  10. package/out/assets/MilkdownEditor-BqJzntYE.js +1054 -0
  11. package/out/assets/MoveModal-4D9n11Kw.js +1 -0
  12. package/out/assets/Nav-9MDdvgNs.js +1 -0
  13. package/out/assets/NoteSidebar-C-rIt32H.js +1 -0
  14. package/out/assets/OpenSidebarButton-Dd0JmKuE.js +1 -0
  15. package/out/assets/PemBlock-C8dEIzu-.js +1 -0
  16. package/out/assets/SidebarAccount-ClS-N0lq.js +1 -0
  17. package/out/assets/arrow-right-urE9Rd7j.js +1 -0
  18. package/out/assets/channelApi-BwQU0-h1.js +1 -0
  19. package/out/assets/check-DUNsD2t6.js +1 -0
  20. package/out/assets/chevron-down-D6mpsfv4.js +1 -0
  21. package/out/assets/{circle-alert-CqEQz6P4.js → circle-alert-W0iyN4sC.js} +1 -1
  22. package/out/assets/cloud-BMyOoC2x.js +1 -0
  23. package/out/assets/code-B1Cb_Icm.js +1 -0
  24. package/out/assets/{copy-CM-qWlbv.js → copy-C1MttOli.js} +1 -1
  25. package/out/assets/{dist-CvatM4u8.js → dist-8QDHqrPN.js} +1 -1
  26. package/out/assets/{dist-BmtYO1GG.js → dist-B0JrbG7f.js} +5 -5
  27. package/out/assets/{dist-DBpw-A8y.js → dist-BFSyuOuw.js} +1 -1
  28. package/out/assets/{dist-D5Cf0hK8.js → dist-BPs0Xns9.js} +2 -2
  29. package/out/assets/{dist-BQV5zYG_.js → dist-Br_5lLVO.js} +9 -9
  30. package/out/assets/{dist-CrzjJUOw.js → dist-BzqqCPi2.js} +1 -1
  31. package/out/assets/dist-C3lbe8SW.js +9 -0
  32. package/out/assets/{dist-CWJ3323z.js → dist-CfU9fwWz.js} +1 -1
  33. package/out/assets/{dist-BdmTLuCI.js → dist-DCX0ws1K.js} +1 -1
  34. package/out/assets/{dist-DrumcFOX.js → dist-DJdv-Ma3.js} +1 -1
  35. package/out/assets/{dist-C5HibLEW.js → dist-chOCTzB2.js} +1 -1
  36. package/out/assets/{download-0rM8xVCe.js → download-y7SZXu6E.js} +1 -1
  37. package/out/assets/downloadValidation-B0p9Ai_9.js +1 -0
  38. package/out/assets/filePreview-UI9NH34f.js +1 -0
  39. package/out/assets/format-CR8oUWq6.js +1 -0
  40. package/out/assets/game-CdU3xnZo.js +1 -0
  41. package/out/assets/{hard-drive-CCdIvSap.js → hard-drive-D13Qbobu.js} +1 -1
  42. package/out/assets/image-DJCA16l_.js +1 -0
  43. package/out/assets/index-BdaFEQG-.css +1 -0
  44. package/out/assets/index-QxXZzOUL.js +33 -0
  45. package/out/assets/index.lazy-BBTTFanX.js +1 -0
  46. package/out/assets/index.lazy-BG4ZylHD.js +2 -0
  47. package/out/assets/index.lazy-Bi-6ZXZX.js +1 -0
  48. package/out/assets/index.lazy-BixWVr0B.js +1 -0
  49. package/out/assets/index.lazy-BjFwNYy5.js +3 -0
  50. package/out/assets/index.lazy-C8EIQsXY.js +2 -0
  51. package/out/assets/index.lazy-CarNe2uu.js +1 -0
  52. package/out/assets/index.lazy-DEuGu3H3.js +1 -0
  53. package/out/assets/index.lazy-GPyILCA7.js +3 -0
  54. package/out/assets/index.lazy-I8ofndXl.js +1 -0
  55. package/out/assets/index.lazy-TxhWsA7y.js +1 -0
  56. package/out/assets/index.lazy-azfky8k7.js +1 -0
  57. package/out/assets/{key-round-tIqGrtt_.js → key-round-CZniN9lv.js} +1 -1
  58. package/out/assets/lock-D5OSNhep.js +1 -0
  59. package/out/assets/log-out-B6phyZ5z.js +1 -0
  60. package/out/assets/{music-BkZKq879.js → music-CbUskKgg.js} +1 -1
  61. package/out/assets/{notebook-pen-B4VSbweh.js → notebook-pen-DqKDQ6MJ.js} +1 -1
  62. package/out/assets/play-BIl8q9eU.js +1 -0
  63. package/out/assets/plus-BxxbpH6Q.js +1 -0
  64. package/out/assets/{save-BzjzC3eV.js → save-DkH1n_Ov.js} +1 -1
  65. package/out/assets/search-BQi5Z0E-.js +1 -0
  66. package/out/assets/{send-DtQInX0y.js → send-Cl6NtD2T.js} +1 -1
  67. package/out/assets/{trash-2-BhMrUgGM.js → trash-2-BBjpgK_f.js} +1 -1
  68. package/out/assets/triangle-alert-l98G8u9O.js +1 -0
  69. package/out/assets/upload-ByP6Ydde.js +1 -0
  70. package/out/assets/{useChannelMessages-Bs1hEJyd.js → useChannelMessages-BgbYfF2c.js} +2 -2
  71. package/out/assets/useGameRoom-DPmweWwe.js +1 -0
  72. package/out/assets/{wallet-YxbxCi7C.js → wallet-c7zIhNSM.js} +1 -1
  73. package/out/assets/{wifi-v3JpPCNm.js → wifi-Bm4biAjc.js} +1 -1
  74. package/out/chat/index.html +0 -0
  75. package/out/chat/join/index.html +0 -0
  76. package/out/demo/index.html +0 -0
  77. package/out/download/index.html +6 -2
  78. package/out/game/gandengyan/index.html +0 -0
  79. package/out/game/index.html +0 -0
  80. package/out/game/zhajinhua/index.html +0 -0
  81. package/out/index.html +6 -2
  82. package/out/note/index.html +0 -0
  83. package/out/ping/index.html +6 -2
  84. package/out/web3/index.html +0 -0
  85. package/package.json +2 -2
  86. package/server/index.js +9 -0
  87. package/server/src/core/channelAttachment.js +7 -3
  88. package/server/src/core/channelIdentity.js +50 -0
  89. package/server/src/core/cid.js +6 -1
  90. package/server/src/core/cidTopic.js +18 -4
  91. package/server/src/core/displayPath.js +10 -0
  92. package/server/src/core/gameRoom.js +2 -2
  93. package/server/src/core/mostLink.js +45 -25
  94. package/server/src/core/ownerMetadata.js +34 -0
  95. package/server/src/core/userSyncKeys.js +36 -0
  96. package/server/src/http/app.js +71 -149
  97. package/server/src/http/dataPath.js +26 -0
  98. package/server/src/http/errors.js +8 -4
  99. package/server/src/http/nodeStatus.js +13 -13
  100. package/server/src/http/rateLimit.js +39 -0
  101. package/server/src/http/routePolicy.js +43 -0
  102. package/server/src/index.js +1909 -759
  103. package/server/src/node/offlineSwarm.js +20 -0
  104. package/server/src/utils/api.js +1 -15
  105. package/server/src/utils/downloadMessages.js +17 -18
  106. package/server/src/utils/errors.js +3 -1
  107. package/server/src/utils/noteUtils.js +27 -3
  108. package/out/assets/AppShell-DmZQwVA9.js +0 -1
  109. package/out/assets/ChatUi-CVGqjFdx.js +0 -1
  110. package/out/assets/MilkdownEditor-BL8xE7u9.js +0 -1054
  111. package/out/assets/MoveModal-BKkVBvrS.js +0 -1
  112. package/out/assets/Nav-BDGeJnbC.js +0 -1
  113. package/out/assets/NoteSidebar-BIJ8_m5K.js +0 -1
  114. package/out/assets/OpenSidebarButton-Di62DGiu.js +0 -1
  115. package/out/assets/PemBlock-Dxx6k9MH.js +0 -1
  116. package/out/assets/SidebarAccount-CCHZLGdP.js +0 -1
  117. package/out/assets/admin-BepWGXWG.js +0 -2
  118. package/out/assets/app-3D79fY3w.js +0 -1
  119. package/out/assets/arrow-right-D0sGC8QA.js +0 -1
  120. package/out/assets/channelApi-CL7YsIQ-.js +0 -1
  121. package/out/assets/chat-B56sk6od.js +0 -1
  122. package/out/assets/check-DdfnsLKm.js +0 -1
  123. package/out/assets/chevron-down-Xlb3wTxd.js +0 -1
  124. package/out/assets/circle-check-CwAH4dgJ.js +0 -1
  125. package/out/assets/cloud-CcPRoob1.js +0 -1
  126. package/out/assets/code-Dr6STnCn.js +0 -1
  127. package/out/assets/database-DQ7ZtUT9.js +0 -1
  128. package/out/assets/dateTime-D1koKRQU.js +0 -1
  129. package/out/assets/demo-B_6rlIjn.js +0 -3
  130. package/out/assets/dist-BGtXa07s.js +0 -9
  131. package/out/assets/download-BLPU-Kzq.js +0 -1
  132. package/out/assets/downloadMessages-7Xbd-HhS.js +0 -1
  133. package/out/assets/ed25519-BEctXF0E.js +0 -1
  134. package/out/assets/filePreview-BvbHWUTG.js +0 -1
  135. package/out/assets/folder-CcbCxm-k.js +0 -1
  136. package/out/assets/game-B0zuqnOh.js +0 -1
  137. package/out/assets/gandengyan-DbQC7hCK.js +0 -1
  138. package/out/assets/index-BLhmAher.css +0 -1
  139. package/out/assets/index-Cf23WD2V.js +0 -29
  140. package/out/assets/join-DQHXjlfH.js +0 -1
  141. package/out/assets/note-DmWqGSS2.js +0 -2
  142. package/out/assets/ping-JILckfMu.js +0 -1
  143. package/out/assets/play-BIl5vwqS.js +0 -1
  144. package/out/assets/plus-DHvLpuuw.js +0 -1
  145. package/out/assets/routes-Dyckj88f.js +0 -1
  146. package/out/assets/search-C-EpsDNl.js +0 -1
  147. package/out/assets/sun-C3IUQTpa.js +0 -1
  148. package/out/assets/tools-BEctXF0E.js +0 -1
  149. package/out/assets/triangle-alert-DUODU79n.js +0 -1
  150. package/out/assets/upload-CpDM23UH.js +0 -1
  151. package/out/assets/useGameRoom-C6UgmIGG.js +0 -1
  152. package/out/assets/web3-CRX1YFmw.js +0 -3
  153. package/out/assets/zhajinhua-QDmSZbOp.js +0 -1
  154. package/out/web3/ed25519/index.html +0 -0
  155. package/out/web3/tools/index.html +0 -0
  156. /package/out/assets/{gandengyan-8eWJAjpY.css → index-8eWJAjpY.css} +0 -0
  157. /package/out/assets/{zhajinhua-BZc4blbW.css → index-BZc4blbW.css} +0 -0
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{t as r}from"./folder-CcbCxm-k.js";import{n as i}from"./trash-2-BhMrUgGM.js";import{a,i as o,t as s}from"./filePreview-BvbHWUTG.js";import{t as c}from"./music-BkZKq879.js";import{W as l,l as u,z as d}from"./index-Cf23WD2V.js";var f=l(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),p=n();function m(e){let t=e.lastIndexOf(`/`);return t===-1?{folder:``,name:e}:{folder:e.substring(0,t),name:e.substring(t+1)}}function h({file:e,isSelected:t,onSelect:n,onPreview:r}){let l=s(e.fileName),u=(0,p.jsx)(i,{size:24,color:`#fff`});return l===`image`?u=(0,p.jsx)(o,{size:24,color:`#fff`}):l===`video`?u=(0,p.jsx)(a,{size:24,color:`#fff`}):l===`audio`&&(u=(0,p.jsx)(c,{size:24,color:`#fff`})),(0,p.jsxs)(`div`,{"data-id":e.cid,onClick:()=>n(e.cid),onDoubleClick:()=>r(e),className:`card ${t?`selected`:``}`,children:[(0,p.jsx)(`div`,{className:`card-icon ${e.starred?`starred`:`file`}`,children:u}),(0,p.jsx)(`p`,{className:`card-name`,children:m(e.fileName).name})]})}function g({folder:e,onClick:t}){return(0,p.jsxs)(`div`,{onClick:t,className:`card`,children:[(0,p.jsx)(`div`,{className:`card-icon folder`,children:(0,p.jsx)(r,{size:28,color:`#fff`})}),(0,p.jsx)(`p`,{className:`card-name`,children:e.name})]})}var _=t(e(),1);function v(e){return e?[{path:``,name:`全部内容`},...e.split(`/`).filter(Boolean).map((e,t,n)=>({path:n.slice(0,t+1).join(`/`),name:e}))]:[]}function y({items:e,allFolders:t,currentPath:n,onMove:i,onClose:a}){let[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(n),f=v(o);function m(){i(o||c.trim())}let h=t.filter(e=>{if(o===``)return!e.path.includes(`/`);let t=o+`/`;return e.path.startsWith(t)?!e.path.substring(t.length).includes(`/`):!1});return(0,p.jsx)(u,{onClose:a,children:(0,p.jsxs)(`div`,{className:`move-modal`,onClick:e=>e.stopPropagation(),children:[(0,p.jsxs)(`div`,{className:`modal-header`,children:[(0,p.jsx)(`h3`,{children:`移动到`}),(0,p.jsx)(`button`,{type:`button`,onClick:a,className:`btn btn-icon`,children:(0,p.jsx)(d,{size:18})})]}),(0,p.jsxs)(`p`,{className:`move-modal-desc`,children:[`已选 `,e.length,` 个项目`]}),(0,p.jsx)(`div`,{className:`move-new-folder`,children:(0,p.jsx)(`input`,{type:`text`,className:`input`,value:c,onChange:e=>l(e.target.value),placeholder:`输入路径创建嵌套文件夹`})}),(0,p.jsx)(`p`,{className:`move-modal-hint`,children:`如 图片/壁纸`}),(0,p.jsx)(`div`,{className:`move-breadcrumb`,children:f.map((e,t)=>(0,p.jsxs)(_.Fragment,{children:[t>0&&(0,p.jsx)(`span`,{className:`breadcrumb-separator`,children:`/`}),(0,p.jsx)(`button`,{type:`button`,onClick:()=>{s(e.path),l(e.path)},className:`move-breadcrumb-btn ${o===e.path&&!c?`active`:``}`,children:e.name})]},e.path))}),(0,p.jsxs)(`div`,{className:`move-folder-list`,children:[h.length===0&&(0,p.jsx)(`p`,{className:`move-modal-empty`,children:`该目录下没有子文件夹`}),h.map(e=>(0,p.jsxs)(`button`,{type:`button`,onClick:()=>s(e.path),className:`move-folder-item ${o===e.path&&!c?`selected`:``}`,children:[(0,p.jsx)(r,{size:16}),(0,p.jsx)(`span`,{children:e.name})]},e.path))]}),(0,p.jsxs)(`div`,{className:`modal-actions`,children:[(0,p.jsx)(`button`,{type:`button`,onClick:a,className:`btn btn-secondary`,children:`取消`}),(0,p.jsx)(`button`,{type:`button`,onClick:m,className:`btn btn-primary`,children:`移动`})]})]})})}export{f as a,m as i,h as n,g as r,y as t};
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{t as r}from"./download-0rM8xVCe.js";import{t as i}from"./LogoIcon-CYQ7cHd5.js";import{n as a,t as o}from"./sun-C3IUQTpa.js";import{K as s}from"./index-Cf23WD2V.js";var c=n(),l=[{to:`/`,label:`关于`},{to:`/ping/`,label:`网络`},{href:`https://github.com/most-people/most`,label:`GitHub`,external:!0}];function u(){return(0,c.jsx)(`footer`,{className:`mkt-footer`,children:(0,c.jsx)(`div`,{className:`mkt-container`,children:(0,c.jsxs)(`div`,{className:`mkt-footer-inner`,children:[(0,c.jsx)(`div`,{className:`mkt-footer-links`,children:l.map(e=>`external`in e?(0,c.jsx)(`a`,{href:e.href,target:`_blank`,rel:`noopener noreferrer`,children:e.label},e.href):(0,c.jsx)(s,{to:e.to,children:e.label},e.to))}),(0,c.jsxs)(`span`,{className:`mkt-footer-copy`,children:[`© `,new Date().getFullYear(),` MOST PEOPLE · MIT License`]})]})})})}var d=t(e(),1);function f(){let[e,t]=(0,d.useState)(!1);return(0,d.useEffect)(()=>{let e=localStorage.getItem(`theme`),n=window.matchMedia(`(prefers-color-scheme: dark)`).matches;(e===`dark`||!e&&n)&&t(!0)},[]),(0,d.useEffect)(()=>{document.documentElement.setAttribute(`data-theme`,e?`dark`:`light`),localStorage.setItem(`theme`,e?`dark`:`light`)},[e]),(0,c.jsx)(c.Fragment,{children:(0,c.jsx)(`nav`,{className:`mkt-nav`,children:(0,c.jsxs)(`div`,{className:`mkt-nav-inner`,children:[(0,c.jsxs)(s,{to:`/`,className:`mkt-nav-logo`,children:[(0,c.jsx)(i,{}),`MOST PEOPLE`]}),(0,c.jsxs)(`div`,{className:`mkt-nav-cta`,children:[(0,c.jsx)(`button`,{className:`mkt-theme-toggle`,onClick:()=>t(!e),"aria-label":`切换主题`,children:e?(0,c.jsx)(o,{size:16}):(0,c.jsx)(a,{size:16})}),(0,c.jsxs)(s,{to:`/download/`,className:`btn btn-primary mkt-nav-preview`,children:[(0,c.jsx)(r,{size:16}),`下载客户端`]}),(0,c.jsx)(s,{to:`/app/`,className:`btn btn-secondary`,children:`打开 Web`})]})]})})})}export{u as n,f as t};
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{t as r}from"./chevron-down-Xlb3wTxd.js";import{n as i,t as a}from"./folder-CcbCxm-k.js";import{t as o}from"./circle-check-CwAH4dgJ.js";import{t as s}from"./cloud-CcPRoob1.js";import{t as c}from"./download-0rM8xVCe.js";import{n as l,t as u}from"./SidebarAccount-CCHZLGdP.js";import{t as d}from"./triangle-alert-DUODU79n.js";import{t as f}from"./upload-CpDM23UH.js";import{I as p,L as m,U as h,l as g,u as _,z as v}from"./index-Cf23WD2V.js";var y=t(e(),1),b=n();function x({sync:e}){let t=(0,y.useRef)(null),[n,r]=(0,y.useState)(!1),i=_(e=>e.wallet),a=e.action!==null;(0,y.useEffect)(()=>{if(!n)return;function e(e){t.current?.contains(e.target)||r(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[n]);async function u(e){r(!1),await e()}return(0,b.jsxs)(`div`,{className:`note-more`,ref:t,children:[(0,b.jsx)(`button`,{className:`btn btn-icon note-more-trigger`,onClick:()=>r(e=>!e),title:`更多`,"aria-label":`更多`,children:(0,b.jsx)(l,{size:16})}),n&&(0,b.jsxs)(`div`,{className:`note-more-menu`,children:[(0,b.jsxs)(`div`,{className:`ui-notice note-sync-status ${e.hasConflict?`warning conflict`:``}`,children:[(0,b.jsx)(`span`,{className:`ui-icon-tile note-sync-status-icon ${e.hasConflict?`warning`:``}`,children:e.hasConflict?(0,b.jsx)(d,{size:16}):e.status===`synced`?(0,b.jsx)(o,{size:16}):(0,b.jsx)(s,{size:16})}),(0,b.jsxs)(`span`,{children:[(0,b.jsx)(`strong`,{children:`云同步`}),(0,b.jsx)(`small`,{children:e.statusLabel})]})]}),(0,b.jsxs)(`button`,{className:`note-more-item`,onClick:()=>u(e.exportLocalBackup),disabled:!i||a,children:[(0,b.jsx)(f,{size:16}),`本地导出`]}),(0,b.jsxs)(`button`,{className:`note-more-item`,onClick:()=>u(e.importLocalBackup),disabled:!i||a,children:[(0,b.jsx)(c,{size:16}),`本地导入`]})]})]})}function S(e){return e.type===`directory`?m(e.path?`${e.path}/${e.name}`:e.name):p(e)}function C({target:e,directories:t,onMove:n,onClose:o}){let s=m(e.path||``),c=S(e),l=t.filter(t=>e.type===`directory`?t.path!==c&&!t.path.startsWith(`${c}/`):!0),[u,d]=(0,y.useState)(s),[f,p]=(0,y.useState)(``),[h,_]=(0,y.useState)(new Set),x=m(f),C=f.trim()?x:u,w=m(C)===s,T=new Map;for(let e of l){let t=T.get(e.parentPath)||[];t.push(e),T.set(e.parentPath,t)}let E=l.filter(e=>{if(!e.parentPath)return!0;let t=e.parentPath.split(`/`).filter(Boolean);return t.every((e,n)=>h.has(t.slice(0,n+1).join(`/`)))}),D=[{label:`全部笔记`,path:``},...u.split(`/`).filter(Boolean).map((e,t,n)=>({label:e,path:n.slice(0,t+1).join(`/`)}))];function O(e){d(m(e)),p(``)}function k(e){O(e),T.has(e)&&_(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}function A(){w||n(C)}return(0,b.jsx)(g,{onClose:o,children:(0,b.jsxs)(`div`,{className:`note-move-modal`,onClick:e=>e.stopPropagation(),children:[(0,b.jsxs)(`div`,{className:`modal-header`,children:[(0,b.jsx)(`h3`,{children:`移动笔记`}),(0,b.jsx)(`button`,{className:`btn btn-icon`,onClick:o,children:(0,b.jsx)(v,{size:18})})]}),(0,b.jsxs)(`div`,{className:`note-move-target`,children:[(0,b.jsx)(`span`,{children:`正在移动`}),(0,b.jsx)(`strong`,{children:e.name})]}),(0,b.jsx)(`div`,{className:`note-move-path`,children:D.map((e,t)=>(0,b.jsxs)(y.Fragment,{children:[t>0&&(0,b.jsx)(`span`,{children:`/`}),(0,b.jsx)(`button`,{type:`button`,onClick:()=>O(e.path),children:e.label})]},e.path||`root`))}),(0,b.jsxs)(`div`,{className:`note-move-folder-list`,children:[(0,b.jsxs)(`button`,{type:`button`,className:`note-move-folder-item ${u===``?`selected`:``}`,onClick:()=>O(``),children:[(0,b.jsx)(`span`,{className:`note-move-folder-spacer`}),(0,b.jsx)(a,{className:`note-move-folder-icon`,size:16}),(0,b.jsx)(`span`,{children:`全部笔记`})]}),l.length===0?(0,b.jsx)(`p`,{className:`note-move-empty`,children:`还没有可选文件夹`}):E.map(e=>{let t=T.has(e.path),n=h.has(e.path);return(0,b.jsxs)(`button`,{type:`button`,className:`note-move-folder-item note-move-depth-${Math.min(e.depth,4)} ${u===e.path?`selected`:``}`,onClick:()=>k(e.path),children:[t?n?(0,b.jsx)(r,{className:`note-move-expander`,size:14}):(0,b.jsx)(i,{className:`note-move-expander`,size:14}):(0,b.jsx)(`span`,{className:`note-move-folder-spacer`}),(0,b.jsx)(a,{className:`note-move-folder-icon`,size:16}),(0,b.jsx)(`span`,{children:e.name}),e.parentPath&&(0,b.jsx)(`small`,{children:e.parentPath})]},e.path)})]}),(0,b.jsx)(`input`,{className:`input input-compact`,value:f,onChange:e=>p(e.target.value),placeholder:`或输入新目录路径,如 文章/摘录`}),(0,b.jsxs)(`div`,{className:`note-move-destination`,children:[`目标位置:`,C||`全部笔记`]}),(0,b.jsxs)(`div`,{className:`modal-actions`,children:[(0,b.jsx)(`button`,{className:`btn btn-secondary`,onClick:o,children:`取消`}),(0,b.jsx)(`button`,{className:`btn btn-primary`,onClick:A,disabled:w,children:`移动`})]})]})})}function w({children:e}){return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(`div`,{className:`sidebar-header sidebar-header-link`,onClick:()=>{window.location.href=`/`},children:[(0,b.jsx)(h,{size:18}),(0,b.jsx)(`h1`,{children:`MOST PEOPLE`})]}),e,(0,b.jsx)(u,{})]})}export{C as n,x as r,w as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{n as t}from"./AppShell-DmZQwVA9.js";import{W as n}from"./index-Cf23WD2V.js";var r=n(`panel-left-open`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`m14 9 3 3-3 3`,key:`8010ee`}]]),i=e();function a({label:e=`打开侧边栏`,className:n=``,variant:a=`primary`}){let{isSidebarVisible:o,openSidebar:s}=t(),c=a===`primary`?`btn-primary`:``;return o?null:(0,i.jsxs)(`button`,{type:`button`,className:`btn ${c} sidebar-open-hint ${n}`.trim(),onClick:s,children:[(0,i.jsx)(r,{size:16}),e]})}export{a as t};
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{t as r}from"./check-DdfnsLKm.js";import{t as i}from"./copy-CM-qWlbv.js";import{t as a}from"./download-0rM8xVCe.js";import{W as o}from"./index-Cf23WD2V.js";var s=o(`shield-alert`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]),c=t(e(),1),l=n();function u({text:e,label:t,copiedLabel:n=`已复制`,className:a=`btn btn-icon`,iconSize:o=14}){let[s,u]=(0,c.useState)(!1);async function d(){try{await navigator.clipboard.writeText(e),u(!0),setTimeout(()=>u(!1),1500)}catch{}}return(0,l.jsxs)(`button`,{type:`button`,className:a,onClick:d,title:s?n:t||`复制`,children:[s?(0,l.jsx)(r,{size:o}):(0,l.jsx)(i,{size:o}),t?s?n:t:null]})}function d({icon:e,message:t,className:n=`empty-state glass`}){return(0,l.jsxs)(`div`,{className:n,children:[(0,l.jsx)(`div`,{className:`empty-state-icon`,children:e}),(0,l.jsx)(`p`,{children:t})]})}function f({title:e,icon:t,children:n,accent:r=!1}){return(0,l.jsxs)(`div`,{className:`web3-key-card ${r?`accent`:``}`,children:[(0,l.jsxs)(`div`,{className:`web3-key-card-header`,children:[(0,l.jsx)(`span`,{className:`web3-key-card-icon`,children:t}),(0,l.jsx)(`span`,{className:`web3-key-card-title`,children:e})]}),(0,l.jsx)(`div`,{className:`web3-key-card-body`,children:n})]})}function p({label:e,pem:t,filename:n}){function r(){let e=new Blob([t],{type:`text/plain`}),r=URL.createObjectURL(e),i=document.createElement(`a`);i.href=r,i.download=n,i.click(),URL.revokeObjectURL(r)}return(0,l.jsxs)(`div`,{className:`web3-pem-block`,children:[(0,l.jsxs)(`div`,{className:`web3-pem-header`,children:[(0,l.jsx)(`span`,{className:`web3-pem-label`,children:e}),(0,l.jsxs)(`div`,{className:`web3-pem-actions`,children:[(0,l.jsx)(u,{text:t,label:`复制`,className:`btn btn-sm`,iconSize:14}),(0,l.jsxs)(`button`,{type:`button`,className:`btn btn-sm btn-primary`,onClick:r,title:`下载`,children:[(0,l.jsx)(a,{size:14}),`下载`]})]})]}),(0,l.jsx)(`textarea`,{className:`textarea mono`,value:t,readOnly:!0,rows:6})]})}export{s as a,u as i,f as n,d as r,p as t};
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{W as r,a as i,i as a,s as o,u as s}from"./index-Cf23WD2V.js";var c=r(`ellipsis`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]]),l=r(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),u=t(e(),1),d=n();function f({className:e=``}){let t=s(e=>e.identity),n=s(e=>e.openLoginModal),r=s(e=>e.logoutUser),[f,p]=(0,u.useState)(!1);return(0,d.jsxs)(`div`,{className:`chat-sidebar-footer sidebar-account ${e}`,children:[(0,d.jsxs)(`div`,{className:`user-info`,children:[(0,d.jsx)(`img`,{className:`user-avatar-img`,src:a(t?.address,t?.avatar),alt:`avatar`}),(0,d.jsx)(`span`,{className:`user-name`,title:t?.address,children:t?.displayName||`未登录`})]}),t?(0,d.jsx)(i,{ariaLabel:`账号操作`,placement:`top-end`,items:[{key:`logout`,label:`退出`,icon:(0,d.jsx)(l,{size:16}),onSelect:()=>p(!0)}],renderTrigger:e=>(0,d.jsx)(`button`,{...e,className:`btn btn-icon account-menu-trigger`,"aria-label":`更多操作`,title:`更多操作`,children:(0,d.jsx)(c,{size:16})})}):(0,d.jsx)(`button`,{className:`btn btn-primary login-btn`,onClick:n,children:`登录`}),f&&(0,d.jsx)(o,{title:`退出登录`,message:`确定要退出当前账号吗?`,confirmText:`退出`,danger:!0,onConfirm:()=>{r(),p(!1)},onClose:()=>p(!1)})]})}export{c as n,f as t};
@@ -1,2 +0,0 @@
1
- import{n as e,o as t,r as n,t as r}from"./jsx-runtime-Bt-cYkS5.js";import{t as i}from"./circle-check-CwAH4dgJ.js";import{t as a}from"./database-DQ7ZtUT9.js";import{t as o}from"./download-0rM8xVCe.js";import{n as s,t as c}from"./trash-2-BhMrUgGM.js";import{t as l}from"./hard-drive-CCdIvSap.js";import{t as u}from"./save-BzjzC3eV.js";import{t as d}from"./triangle-alert-DUODU79n.js";import{t as f}from"./wifi-v3JpPCNm.js";import{B as p,K as m,U as h,W as g,b as _,f as v,g as y,p as b,x as ee}from"./index-Cf23WD2V.js";import{t as x}from"./dayjs.min-Dcc0B6Je.js";var te=g(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),ne=g(`clipboard`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}]]),S=g(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),C=g(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),w=n(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_relativeTime=r()})(e,(function(){return function(e,t,n){e||={};var r=t.prototype,i={future:`in %s`,past:`%s ago`,s:`a few seconds`,m:`a minute`,mm:`%d minutes`,h:`an hour`,hh:`%d hours`,d:`a day`,dd:`%d days`,M:`a month`,MM:`%d months`,y:`a year`,yy:`%d years`};function a(e,t,n,i){return r.fromToBase(e,t,n,i)}n.en.relativeTime=i,r.fromToBase=function(t,r,a,o,s){for(var c,l,u,d=a.$locale().relativeTime||i,f=e.thresholds||[{l:`s`,r:44,d:`second`},{l:`m`,r:89},{l:`mm`,r:44,d:`minute`},{l:`h`,r:89},{l:`hh`,r:21,d:`hour`},{l:`d`,r:35},{l:`dd`,r:25,d:`day`},{l:`M`,r:45},{l:`MM`,r:10,d:`month`},{l:`y`,r:17},{l:`yy`,d:`year`}],p=f.length,m=0;m<p;m+=1){var h=f[m];h.d&&(c=o?n(t).diff(a,h.d,!0):a.diff(t,h.d,!0));var g=(e.rounding||Math.round)(Math.abs(c));if(u=c>0,g<=h.r||!h.r){g<=1&&m>0&&(h=f[m-1]);var _=d[h.l];s&&(g=s(``+g)),l=typeof _==`string`?_.replace(`%d`,g):_(g,r,h.l,u);break}}if(r)return l;var v=u?d.future:d.past;return typeof v==`function`?v(l):v.replace(`%s`,l)},r.to=function(e,t){return a(e,t,this,!0)},r.from=function(e,t){return a(e,t,this)};var o=function(e){return e.$u?n.utc():n()};r.toNow=function(e){return this.to(o(this),e)},r.fromNow=function(e){return this.from(o(this),e)}}}))})),T=n(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r(x()):typeof define==`function`&&define.amd?define([`dayjs`],r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_locale_zh_cn=r(n.dayjs)})(e,(function(e){function t(e){return e&&typeof e==`object`&&`default`in e?e:{default:e}}var n=t(e),r={name:`zh-cn`,weekdays:`星期日_星期一_星期二_星期三_星期四_星期五_星期六`.split(`_`),weekdaysShort:`周日_周一_周二_周三_周四_周五_周六`.split(`_`),weekdaysMin:`日_一_二_三_四_五_六`.split(`_`),months:`一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月`.split(`_`),monthsShort:`1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月`.split(`_`),ordinal:function(e,t){return t===`W`?e+`周`:e+`日`},weekStart:1,yearStart:4,formats:{LT:`HH:mm`,LTS:`HH:mm:ss`,L:`YYYY/MM/DD`,LL:`YYYY年M月D日`,LLL:`YYYY年M月D日Ah点mm分`,LLLL:`YYYY年M月D日ddddAh点mm分`,l:`YYYY/M/D`,ll:`YYYY年M月D日`,lll:`YYYY年M月D日 HH:mm`,llll:`YYYY年M月D日dddd HH:mm`},relativeTime:{future:`%s内`,past:`%s前`,s:`几秒`,m:`1 分钟`,mm:`%d 分钟`,h:`1 小时`,hh:`%d 小时`,d:`1 天`,dd:`%d 天`,M:`1 个月`,MM:`%d 个月`,y:`1 年`,yy:`%d 年`},meridiem:function(e,t){var n=100*e+t;return n<600?`凌晨`:n<900?`早上`:n<1100?`上午`:n<1300?`中午`:n<1800?`下午`:`晚上`}};return n.default.locale(r,null,!0),r}))})),E=t(e(),1),D=t(x(),1),O=t(w(),1);T();var k=r();D.default.extend(O.default),D.default.locale(`zh-cn`);var re=null;function A(e){return!Number.isFinite(e)||e<=0?`0 B`:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(2)} GB`}function ie(e){let t=Math.max(0,Number(e)||0),n=Math.floor(t/86400),r=Math.floor(t%86400/3600),i=Math.floor(t%3600/60);return n>0?`${n} 天 ${r} 小时`:r>0?`${r} 小时 ${i} 分钟`:`${i} 分钟`}function j(e){return Number.isFinite(e)?String(Math.round(e/(1024*1024*1024)*100)/100):`0`}function M(e){let t=Number(e);return!Number.isFinite(t)||t<0?0:Math.round(t*1024*1024*1024)}function ae(e){return Array.from(new Set(String(e||``).split(/[\n,]/).map(e=>e.trim()).filter(Boolean)))}function N(e,t=12,n=8){return e?e.length<=t+n+3?e:`${e.slice(0,t)}...${e.slice(-n)}`:`-`}function oe(e){switch(e.seedStatus){case`queued`:return`队列中`;case`joining`:return`加入中`;case`active`:return`做种中`;case`paused`:return`已暂停`;case`error`:return e.seedError?`错误:${e.seedError}`:`错误`;default:return e.joined?`做种中`:`未 join`}}function se(e){if(!e)return`从未`;let t=(0,D.default)(e);return t.isValid()?t.isAfter((0,D.default)())?`刚刚`:t.fromNow():`从未`}var ce=[{label:`做种中`,tone:`active`,desc:`已加入 CID topic,可被其他节点发现并提供完整副本。`},{label:`队列中 / 加入中`,tone:`pending`,desc:`正在等待或重连 topic,通常会自动进入做种中。`},{label:`已暂停 / 未 join`,tone:`muted`,desc:`本机仍持有文件,但当前不会对外提供下载。`},{label:`错误`,tone:`error`,desc:`加入或做种失败,请查看下方节点日志里的 seed 事件。`}],P=[{value:`all`,label:`全部`},{value:`join`,label:`Join`},{value:`pull`,label:`Pull`},{value:`verify`,label:`Verify`},{value:`serve`,label:`Serve`},{value:`error`,label:`Error`}],F={join:[`join`,`joined`,`topic`],pull:[`pull`,`p2p`],verify:[`verify`,`verified`,`integrity`,`download:success`],serve:[`seed`,`seeding`,`holding`,`publish:success`,`topic:joined`],error:[`error`,`failed`,`fail`]};function I(e){let t=``;try{t=JSON.stringify(e.data||{})}catch{}return[e.level,e.event,e.message,t].map(e=>String(e||``).toLowerCase()).join(` `)}function L(e,t){let n=String(t||`all`).trim().toLowerCase();if(!n||n===`all`)return!0;let r=I(e);return n===`error`?e.level===`error`||F.error.some(e=>r.includes(e)):(F[n]||[n]).some(e=>r.includes(e))}function R(){let e=v(e=>e.hasBackend),t=v(e=>e.addToast),[n,r]=(0,E.useState)(re),[g,x]=(0,E.useState)([]),[w,T]=(0,E.useState)(``),[D,O]=(0,E.useState)(!1),[F,I]=(0,E.useState)(!1),[R,z]=(0,E.useState)(!1),[B,le]=(0,E.useState)(`all`),[V,ue]=(0,E.useState)([]),[de,H]=(0,E.useState)(``),[U,W]=(0,E.useState)({dataPath:``,capacityGiB:`100`,maxFileSizeGiB:`10`,remoteInvites:``}),G=e===!0;function K(){return G?!0:(t(e===null?`正在检测后端连接,请稍后再试`:`未连接后端`,`warning`),!1)}let q=(0,E.useMemo)(()=>!n||n.capacity.configuredBytes<=0?0:Math.min(100,Math.round(n.capacity.usedBytes/n.capacity.configuredBytes*100)),[n]),fe=(0,E.useMemo)(()=>(n?.holdings||[]).slice(0,100),[n]),J=Math.max(0,(n?.holdings.length||0)-100),Y=ee(),X=!!Y&&!Y.includes(`localhost`)&&!Y.includes(`127.0.0.1`),Z=async()=>{if(!G)return!1;try{let e=await b.get(`/api/node/status`).json(),t=await b.get(`/api/node/config`).json();return r(e),W({dataPath:t.dataPath||e.dataPath||``,capacityGiB:j(t.capacityBytes),maxFileSizeGiB:j(t.maxFileSizeBytes),remoteInvites:(t.remoteInvites||[]).join(`
2
- `)}),T(``),!0}catch(e){let n=await y(e,`无法读取节点状态`);return T(n),t(n,`error`),!1}},pe=async()=>{K()&&await Z()&&t(`节点状态已刷新`,`success`)},Q=async(e=B)=>{if(G)try{let t=new URLSearchParams({limit:`80`,filter:e});x((await b.get(`/api/node/logs?${t.toString()}`).json()).logs||[])}catch{}},$=async()=>{if(G)try{ue((await b.get(`/api/admin/users`).json()).users||[])}catch{}},me=async()=>{if(K()){O(!0);try{await b.post(`/api/node/config`,{json:{dataPath:U.dataPath,capacityBytes:M(U.capacityGiB),maxFileSizeBytes:M(U.maxFileSizeGiB),remoteInvites:ae(U.remoteInvites)}}).json(),t(U.dataPath===(n?.dataPath||``)?`节点配置已保存`:`节点配置已保存。修改了数据目录,需要重启 daemon 生效。`,`success`),await Z(),await Q()}catch(e){let n=await y(e,`保存配置失败`);t(n,`error`),T(n)}finally{O(!1)}}},he=async()=>{n?.nodeId&&(await navigator.clipboard.writeText(n.nodeId),t(`节点 ID 已复制`,`success`))},ge=async()=>{if(K()){I(!0);try{await b.delete(`/api/node/logs`).json(),x([]),t(`节点日志已清空`,`success`)}catch(e){let n=await y(e,`清空日志失败`);t(n,`error`),T(n)}finally{I(!1)}}},_e=async()=>{if(K()){z(!0);try{let e=await b.get(`/api/node/diagnostics`).json(),n=new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`),a=new Date().toISOString().replace(/[:.]/g,`-`);i.href=r,i.download=`mostbox-diagnostics-${a}.json`,document.body.appendChild(i),i.click(),i.remove(),URL.revokeObjectURL(r),t(`诊断已导出`,`success`)}catch(e){let n=await y(e,`导出诊断失败`);t(n,`error`),T(n)}finally{z(!1)}}},ve=async e=>{if(K()&&window.confirm(`确定清除用户 ${e.slice(0,6)}...${e.slice(-4)} 的文件记录和回收站吗?无人引用的副本也会被清理。`)){H(e);try{await b.delete(`/api/admin/users/${e}/data`).json(),t(`用户数据已清除`,`success`),await $(),await Z()}catch(e){let n=await y(e,`清除用户数据失败`);t(n,`error`),T(n)}finally{H(``)}}};return(0,E.useEffect)(()=>{if(!G||X)return;Z(),Q(),$();let e=null,t=!1;return(async()=>{if(e=new WebSocket(await _(`/ws`)),t){e.close();return}e.onmessage=e=>{try{let t=JSON.parse(e.data);t.event===`node:status`&&r(t.data),t.event===`node:log`&&L(t.data,B)&&x(e=>[t.data,...e].slice(0,80)),t.event===`node:logs:cleared`&&x([]),(t.event===`publish:success`||t.event===`download:success`||t.event===`network:status`)&&Z()}catch{}}})(),()=>{t=!0,e?.close()}},[G,X,B]),(0,k.jsxs)(`main`,{className:`admin-page`,children:[(0,k.jsxs)(`header`,{className:`admin-topbar`,children:[(0,k.jsxs)(`div`,{className:`admin-title-group`,children:[(0,k.jsx)(m,{to:`/`,className:`btn btn-icon`,"aria-label":`返回首页`,children:(0,k.jsx)(h,{size:16})}),(0,k.jsx)(`div`,{children:(0,k.jsx)(`h1`,{children:`节点管理`})})]}),(0,k.jsxs)(`div`,{className:`admin-topbar-actions`,children:[(0,k.jsxs)(`span`,{className:`admin-status-pill ${n?.status===`online`?`online`:``}`,children:[(0,k.jsx)(te,{size:14}),n?.status===`online`?`在线`:`等待`]}),(0,k.jsxs)(`button`,{className:`btn btn-secondary`,onClick:pe,children:[(0,k.jsx)(S,{size:16}),`刷新`]})]})]}),e===!1&&(0,k.jsxs)(`section`,{className:`admin-panel admin-error`,children:[(0,k.jsx)(p,{size:20}),(0,k.jsx)(`span`,{children:`未连接本地 daemon`})]}),X&&(0,k.jsxs)(`section`,{className:`admin-panel admin-error`,children:[(0,k.jsx)(d,{size:18}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`h2`,{children:`远程节点管理不可用`}),(0,k.jsx)(`p`,{children:`当前连接的是别人部署的远程节点,普通邀请码不能查看或修改节点管理数据。`})]})]}),!X&&w&&(0,k.jsxs)(`section`,{className:`admin-panel admin-error`,children:[(0,k.jsx)(s,{size:20}),(0,k.jsx)(`span`,{children:w})]}),!X&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(`section`,{className:`admin-overview`,children:[(0,k.jsxs)(`div`,{className:`admin-metric`,children:[(0,k.jsx)(`div`,{className:`admin-metric-icon`,children:(0,k.jsx)(C,{size:18})}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`span`,{children:`节点 ID`}),(0,k.jsx)(`strong`,{children:N(n?.nodeId||``)})]}),(0,k.jsx)(`button`,{className:`btn btn-icon admin-metric-action`,onClick:he,"aria-label":`复制节点 ID`,children:(0,k.jsx)(ne,{size:15})})]}),(0,k.jsxs)(`div`,{className:`admin-metric`,children:[(0,k.jsx)(`div`,{className:`admin-metric-icon`,children:(0,k.jsx)(f,{size:18})}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`span`,{children:`连接`}),(0,k.jsx)(`strong`,{children:n?`${n.network.peers} peers`:`-`})]})]}),(0,k.jsxs)(`div`,{className:`admin-metric`,children:[(0,k.jsx)(`div`,{className:`admin-metric-icon`,children:(0,k.jsx)(l,{size:18})}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`span`,{children:`容量`}),(0,k.jsxs)(`strong`,{children:[q,`%`]})]})]}),(0,k.jsxs)(`div`,{className:`admin-metric`,children:[(0,k.jsx)(`div`,{className:`admin-metric-icon`,children:(0,k.jsx)(p,{size:18})}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`span`,{children:`运行`}),(0,k.jsx)(`strong`,{children:n?ie(n.uptimeSeconds):`-`})]})]})]}),(0,k.jsxs)(`section`,{className:`admin-grid`,children:[(0,k.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,k.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,k.jsx)(`div`,{children:(0,k.jsx)(`h2`,{children:`节点状态`})}),(0,k.jsx)(i,{size:18})]}),(0,k.jsxs)(`div`,{className:`admin-status-grid`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`span`,{children:`版本`}),(0,k.jsx)(`strong`,{children:n?.version||`-`})]}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`span`,{children:`监听`}),(0,k.jsx)(`strong`,{children:n?`${n.host}:${n.port}`:`-`})]}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`span`,{children:`数据目录`}),(0,k.jsx)(`strong`,{children:n?.dataPath||`-`})]})]}),(0,k.jsx)(`div`,{className:`admin-address-list`,children:(n?.listen.addresses||[]).map(e=>(0,k.jsxs)(`span`,{children:[e.label,`: `,e.ip,`:`,n?.port]},`${e.type}-${e.ip}`))})]}),(0,k.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,k.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,k.jsx)(`div`,{children:(0,k.jsx)(`h2`,{children:`用户数据`})}),(0,k.jsx)(a,{size:18})]}),(0,k.jsxs)(`div`,{className:`admin-table`,children:[(0,k.jsxs)(`div`,{className:`admin-table-row admin-table-head`,children:[(0,k.jsx)(`span`,{children:`用户`}),(0,k.jsx)(`span`,{children:`文件`}),(0,k.jsx)(`span`,{children:`回收站`}),(0,k.jsx)(`span`,{children:`操作`})]}),V.map(e=>(0,k.jsxs)(`div`,{className:`admin-table-row`,children:[(0,k.jsx)(`span`,{title:e.address,children:N(e.address)}),(0,k.jsx)(`span`,{children:e.fileCount}),(0,k.jsx)(`span`,{children:e.trashCount}),(0,k.jsx)(`span`,{children:(0,k.jsxs)(`button`,{className:`btn btn-ghost`,onClick:()=>ve(e.address),disabled:de===e.address,children:[(0,k.jsx)(c,{size:16}),`清除`]})})]},e.address)),V.length===0&&(0,k.jsx)(`div`,{className:`admin-empty-row`,children:`暂无用户数据`})]})]}),(0,k.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,k.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,k.jsx)(`div`,{children:(0,k.jsx)(`h2`,{children:`节点设置`})}),(0,k.jsx)(a,{size:18})]}),(0,k.jsxs)(`div`,{className:`admin-settings-fields`,children:[(0,k.jsxs)(`label`,{className:`admin-field admin-field-wide`,children:[(0,k.jsx)(`span`,{children:`数据目录`}),(0,k.jsx)(`input`,{className:`input`,value:U.dataPath,onChange:e=>W(t=>({...t,dataPath:e.target.value}))})]}),(0,k.jsxs)(`label`,{className:`admin-field`,children:[(0,k.jsx)(`span`,{children:`容量上限 GiB`}),(0,k.jsx)(`input`,{className:`input`,type:`number`,min:`0`,step:`1`,value:U.capacityGiB,onChange:e=>W(t=>({...t,capacityGiB:e.target.value}))})]}),(0,k.jsxs)(`label`,{className:`admin-field`,children:[(0,k.jsx)(`span`,{children:`单文件最大 GiB`}),(0,k.jsx)(`input`,{className:`input`,type:`number`,min:`0`,step:`1`,value:U.maxFileSizeGiB,onChange:e=>W(t=>({...t,maxFileSizeGiB:e.target.value}))})]}),(0,k.jsxs)(`label`,{className:`admin-field admin-field-wide`,children:[(0,k.jsx)(`span`,{children:`远程访问邀请码`}),(0,k.jsx)(`textarea`,{className:`input admin-textarea`,value:U.remoteInvites,placeholder:`每行一个,或用英文逗号分隔`,onChange:e=>W(t=>({...t,remoteInvites:e.target.value}))})]})]}),(0,k.jsx)(`p`,{className:`admin-field-hint`,children:`数据目录变更保存后需要重启 daemon。修改邀请码后新请求立即生效。 发布和下载成功后会固定做种;MostBox 不设同时做种数或传输限速。`}),(0,k.jsxs)(`button`,{className:`btn btn-primary btn-full`,onClick:me,disabled:D,children:[(0,k.jsx)(u,{size:16}),`保存配置`]})]}),(0,k.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,k.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,k.jsx)(`div`,{children:(0,k.jsx)(`h2`,{children:`持有副本`})}),(0,k.jsx)(l,{size:18})]}),(0,k.jsxs)(`div`,{className:`admin-capacity-row`,children:[(0,k.jsx)(`progress`,{value:q,max:`100`}),(0,k.jsxs)(`span`,{children:[A(n?.capacity.usedBytes||0),` /`,` `,A(n?.capacity.configuredBytes||0)]})]}),(0,k.jsx)(`div`,{className:`admin-seed-help`,"aria-label":`做种状态说明`,children:ce.map(e=>(0,k.jsxs)(`div`,{className:`admin-seed-help-item`,children:[(0,k.jsx)(`span`,{className:`admin-seed-dot ${e.tone}`}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`strong`,{children:e.label}),(0,k.jsx)(`span`,{children:e.desc})]})]},e.label))}),J>0&&(0,k.jsxs)(`p`,{className:`admin-table-note`,children:[`当前仅展示前 100 个副本,另有 `,J,` `,`个仍在后台做种。`]}),(0,k.jsxs)(`div`,{className:`admin-table`,children:[(0,k.jsxs)(`div`,{className:`admin-table-row admin-table-head`,children:[(0,k.jsx)(`span`,{children:`文件`}),(0,k.jsx)(`span`,{children:`CID`}),(0,k.jsx)(`span`,{children:`大小`}),(0,k.jsx)(`span`,{children:`Peer`}),(0,k.jsx)(`span`,{children:`最近服务`}),(0,k.jsx)(`span`,{children:`状态`})]}),fe.map(e=>(0,k.jsxs)(`div`,{className:`admin-table-row`,children:[(0,k.jsx)(`span`,{children:e.fileName||`-`}),(0,k.jsx)(`span`,{title:e.cid,children:N(e.cid)}),(0,k.jsx)(`span`,{children:A(e.size)}),(0,k.jsx)(`span`,{children:e.peerCount??0}),(0,k.jsx)(`span`,{title:e.lastServedAt||``,children:se(e.lastServedAt)}),(0,k.jsx)(`span`,{className:`admin-seed-pill ${e.seedStatus===`error`?`error`:e.seedStatus===`active`||e.joined?`active`:``}`,children:oe(e)})]},e.cid)),(!n||n.holdings.length===0)&&(0,k.jsx)(`div`,{className:`admin-empty-row`,children:`暂无持有副本`})]})]}),(0,k.jsxs)(`div`,{className:`admin-panel admin-span-2`,children:[(0,k.jsxs)(`div`,{className:`admin-panel-header`,children:[(0,k.jsx)(`div`,{children:(0,k.jsx)(`h2`,{children:`节点日志`})}),(0,k.jsxs)(`div`,{className:`admin-panel-actions`,children:[(0,k.jsxs)(`button`,{className:`btn btn-secondary`,onClick:_e,disabled:R,children:[(0,k.jsx)(o,{size:16}),`导出诊断`]}),(0,k.jsxs)(`button`,{className:`btn btn-ghost`,onClick:ge,disabled:F||g.length===0,children:[(0,k.jsx)(c,{size:16}),`清空日志`]}),(0,k.jsx)(s,{size:18})]})]}),(0,k.jsx)(`div`,{className:`admin-log-filter`,"aria-label":`日志筛选`,children:P.map(e=>(0,k.jsx)(`button`,{type:`button`,className:B===e.value?`active`:``,onClick:()=>{le(e.value),Q(e.value)},children:e.label},e.value))}),(0,k.jsxs)(`div`,{className:`admin-log-list`,children:[g.map(e=>(0,k.jsxs)(`div`,{className:`admin-log-row`,children:[(0,k.jsx)(`time`,{children:new Date(e.ts).toLocaleTimeString(`zh-CN`)}),(0,k.jsx)(`span`,{className:`admin-log-level ${e.level}`,children:e.level}),(0,k.jsx)(`strong`,{children:e.event}),(0,k.jsx)(`span`,{children:e.message})]},e.id)),g.length===0&&(0,k.jsx)(`div`,{className:`admin-empty-row`,children:`暂无日志`})]})]})]})]})]})}var z=R;export{z as component};
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{t as r}from"./check-DdfnsLKm.js";import{n as i}from"./folder-CcbCxm-k.js";import{t as a}from"./copy-CM-qWlbv.js";import{t as o}from"./download-0rM8xVCe.js";import{t as ee}from"./SidebarAccount-CCHZLGdP.js";import{n as te,t as ne}from"./trash-2-BhMrUgGM.js";import{n as re,r as ie,t as ae}from"./filePreview-BvbHWUTG.js";import{a as oe,i as s,n as se,r as ce,t as le}from"./MoveModal-BKkVBvrS.js";import{r as c,t as ue}from"./AppShell-DmZQwVA9.js";import{n as de,t as fe}from"./sun-C3IUQTpa.js";import{t as pe}from"./OpenSidebarButton-Di62DGiu.js";import{t as me}from"./search-C-EpsDNl.js";import{t as he}from"./upload-CpDM23UH.js";import{U as ge,W as l,_ as u,b as _e,f as d,g as f,l as ve,o as ye,p,s as be,u as xe,v as Se,y as m,z as h}from"./index-Cf23WD2V.js";import{n as Ce,r as we,t as g}from"./downloadMessages-7Xbd-HhS.js";var Te=l(`arrow-up-down`,[[`path`,{d:`m21 16-4 4-4-4`,key:`f6ql7i`}],[`path`,{d:`M17 20V4`,key:`1ejh1v`}],[`path`,{d:`m3 8 4-4 4 4`,key:`11wl7u`}],[`path`,{d:`M7 4v16`,key:`1glfcx`}]]),Ee=l(`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`}]]),De=l(`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`}]]),_=t(e(),1);function Oe(e={}){let t=e.timeout??2e3,[n,r]=(0,_.useState)(null),[i,a]=(0,_.useState)(!1),o=(0,_.useRef)(null);(0,_.useEffect)(()=>()=>{window.clearTimeout(o.current)},[]);let ee=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),ee(!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 v=n();async function ke(e){return g(await u(e),e&&typeof e==`object`&&`name`in e?String(e.name):``)}var y={listPublishedFiles:()=>p.get(`/api/files`).json(),listTrashFiles:()=>p.get(`/api/trash`).json(),deletePublishedFile:e=>p.delete(`/api/files/${e}`).json(),restoreTrashFile:e=>p.post(`/api/trash/${e}/restore`).json(),permanentDeleteTrashFile:e=>p.delete(`/api/trash/${e}`).json(),emptyTrash:()=>p.delete(`/api/trash`).json(),toggleStar:e=>p.post(`/api/files/${e}/star`).json(),getConfig:()=>p.get(`/api/config`).json(),getDataPath:()=>p.get(`/api/config/data-path`).json(),getNetworkAddresses:()=>p.get(`/api/network`).json(),saveConfig:e=>p.post(`/api/config`,{json:e}).json(),async publishFile(e,t){let n=new FormData;n.append(`file`,e,t||e.name);let r=await p.post(`/api/publish`,{body:n});if(!r.ok){let e=await r.json().catch(()=>({error:r.statusText}));throw Error(e.error||`Request failed`)}return r.json()},checkDownload:e=>p.post(`/api/download/check`,{json:{link:e},timeout:15e3}).json(),downloadFile:e=>p.post(`/api/download`,{json:{link:e}}).json(),cancelDownload:e=>p.post(`/api/download/cancel`,{json:{taskId:e}}).json(),getFileDownloadUrl:e=>m(`/api/files/${e}/download`),moveFile:(e,t)=>p.post(`/api/move`,{json:{cid:e,newFileName:t}}).json(),renameFolder:(e,t)=>p.post(`/api/folder/rename`,{json:{oldPath:e,newPath:t}}).json()};function Ae(e){return!e||e<=0?`0 B`:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(2)} GB`}function je(e){return e?new Date(e).toLocaleDateString(`zh-CN`):``}function b(e){return s(e)}function Me(e){let t=new Set;return e.forEach(e=>{let{folder:n}=b(e.fileName),r=n.split(`/`).filter(Boolean),i=``;for(let e of r)i+=(i?`/`:``)+e,t.add(i)}),[...t].sort()}function x(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 Ne(e,t,n){return{folders:x(t,n),files:e.filter(e=>b(e.fileName).folder===n)}}function Pe(e){return e?[{path:``,name:`全部内容`},...e.split(`/`).filter(Boolean).map((e,t,n)=>({path:n.slice(0,t+1).join(`/`),name:e}))]:[]}function S(){let e=d(e=>e.isDarkMode),t=d(e=>e.setIsDarkMode),n=d(e=>e.addToast),s=d(e=>e.hasBackend),l=d(e=>e.openConnectModal),u=xe(e=>e.identity),p=xe(e=>e.openLoginModal),[m,g]=(0,_.useState)([]),[x,S]=(0,_.useState)([]),[Fe,C]=(0,_.useState)(null),[w,Ie]=(0,_.useState)(`all`),[Le,Re]=(0,_.useState)(!1),[T,E]=(0,_.useState)([]),[ze,D]=(0,_.useState)(null),[O,k]=(0,_.useState)(null),[Be,Ve]=c(!1),[He,A]=(0,_.useState)(``),[j,M]=(0,_.useState)(null),[N,Ue]=(0,_.useState)(!1),[We,P]=(0,_.useState)([]),[Ge,F]=c(!1),[I,L]=(0,_.useState)(``),{copy:Ke,copied:qe}=Oe({timeout:2e3}),[Je,R]=c(!1),[z,B]=(0,_.useState)(null),[V,H]=(0,_.useState)(null),[Ye,Xe]=(0,_.useState)(!1),U=s===!0,W=Fe||``,Ze=Me(m),{folders:Qe,files:$e}=Ne(m,Ze,W);function G(){return U?!0:(l(),!1)}function K(){return u?!0:(p(),!1)}let et=I?m.filter(e=>b(e.fileName).name.toLowerCase().includes(I.toLowerCase())):$e,q=async()=>{if(!U||!u){g([]);return}try{g(await y.listPublishedFiles()||[])}catch{g([])}},J=async()=>{if(!U||!u){S([]);return}try{S(await y.listTrashFiles()||[])}catch{S([])}},tt=e=>{E(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},nt=async e=>{if(K()&&G())try{await y.restoreTrashFile(e),n(`已恢复`,`success`),q(),J()}catch(e){n(await f(e,`恢复失败`),`error`)}},rt=async()=>{K()&&G()&&B({title:`清空回收站`,message:`确定要清空回收站吗?此操作不可恢复!`,confirmText:`清空`,danger:!0,onConfirm:async()=>{B(null);try{await y.emptyTrash(),n(`回收站已清空`,`success`),J()}catch(e){n(await f(e,`清空失败`),`error`)}}})},it=async e=>{if(K()&&G())try{let t=await y.toggleStar(e);g(n=>n.map(n=>n.cid===e?{...n,starred:t.starred}:n)),n(t.starred?`已收藏`:`已取消收藏`,`success`)}catch(e){n(await f(e,`操作失败`),`error`)}},at=async()=>{if(!K()||!G())return;let e=w===`trash`;B({title:e?`永久删除`:`批量删除`,message:e?`确定要永久删除选中的 ${T.length} 个项目吗?此操作不可恢复!`:`确定要删除选中的 ${T.length} 个项目吗?`,confirmText:e?`永久删除`:`删除`,danger:!0,onConfirm:async()=>{B(null);try{for(let t of T)e?await y.permanentDeleteTrashFile(t):t.startsWith(`__`)||await y.deletePublishedFile(t);E([]),n(e?`已永久删除`:`已删除`,`success`),q(),J()}catch(e){n(await f(e,`删除失败`),`error`)}}})},ot=async e=>{if(K()&&G())try{for(let t of T){let n=m.find(e=>e.cid===t);if(!n)continue;let{name:r}=b(n.fileName),i=e?`${e}/${r}`:r;n.fileName!==i&&await y.moveFile(t,i)}E([]),R.close(),n(`已移动`,`success`),q()}catch(e){n(await f(e,`移动失败`),`error`)}},st=e=>{let t=!!e.path,r=t?e.name:b(e.fileName).name;H({title:t?`重命名文件夹`:`重命名文件`,placeholder:`请输入新名称`,defaultValue:r,confirmText:`重命名`,onConfirm:async i=>{if(i!==r&&K()&&G()){Xe(!0);try{if(t){let t=e.path.lastIndexOf(`/`),r=t===-1?``:e.path.substring(0,t),a=r?`${r}/${i}`:i;await y.renameFolder(e.path,a),n(`已重命名`,`success`),q(),Q(a)}else{let{folder:t}=b(e.fileName),r=t?`${t}/${i}`:i;await y.moveFile(e.cid,r),n(`已重命名`,`success`),q()}H(null)}catch(e){n(await f(e,`重命名失败`),`error`)}finally{Xe(!1)}}}})},ct=async e=>{if(!u){p(),n(`请先登录后发布文件`,`warning`);return}if(!G())return;let t=W?W+`/`:``,r=[];for(let i of Array.from(e)){let e=t+i.name;if(m.some(t=>t.fileName===e)){n(`${i.name} 已存在`,`warning`);continue}let a=`upload_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,o={id:a,fileName:i.name,progress:0,type:`upload`,status:`uploading`};r.push(o),P(e=>[...e,o]),r.length>0&&F.open();try{(await y.publishFile(i,e)).alreadyExists?(P(e=>e.map(e=>e.id===a?{...e,status:`completed`}:e)),n(`${i.name} 已存在`,`warning`)):(P(e=>e.map(e=>e.id===a?{...e,progress:100,status:`completed`}:e)),n(`${i.name} 已添加到本地`,`success`))}catch(e){P(e=>e.map(e=>e.id===a?{...e,status:`error`}:e)),n(await f(e,`发布失败: ${i.name}`),`error`)}}setTimeout(()=>{P(e=>e.filter(e=>e.status!==`completed`&&e.status!==`error`&&e.status!==`cancelled`))},3e3),q()},lt=()=>{Ke(`most://${O.cid}?filename=${encodeURIComponent(O.fileName)}`)},[Y,ut]=(0,_.useState)(!1),X=He.trim(),Z=j?.status===`success`&&j.link===X,dt=()=>{Ve.close(),M(null)},ft=e=>{A(e.target.value),M(null)},pt=async()=>{let e=Ce(X);if(e){M({status:`error`,link:X,message:e}),n(e,`warning`);return}if(!(N||Y)&&K()&&G()){Ue(!0),M(null);try{let e=await y.checkDownload(X);M({status:`success`,link:X,message:e.alreadyExists?`${e.fileName} 已在本机`:`${e.fileName} 可下载`}),n(e.alreadyExists?`${e.fileName} 已存在`:`检测通过`,e.alreadyExists?`warning`:`success`)}catch(e){let t=await ke(e);M({status:`error`,link:X,message:t}),n(t,`error`)}finally{Ue(!1)}}},mt=async()=>{if(!u){p(),n(`请先登录后下载文件`,`warning`);return}if(!G())return;let e=Ce(X);if(e){n(e,`warning`);return}if(!Z){n(`请先检测链接可用性`,`warning`);return}if(!Y){ut(!0);try{let e=await y.downloadFile(X);if(A(``),M(null),dt(),e.alreadyExists)n(`${e.fileName} 已存在`,`warning`);else{let t={id:e.taskId,fileName:`下载文件`,progress:0,type:`download`,status:`downloading`};P(e=>[...e,t]),F.open(),n(`下载已开始`,`info`)}}catch(e){n(await f(e,`下载失败`),`error`)}finally{ut(!1)}}},ht=async e=>{if(K()&&G()&&e.type===`download`&&e.status===`downloading`){P(t=>t.map(t=>t.id===e.id?{...t,status:`cancelling`}:t));try{await y.cancelDownload(e.id)}catch(t){P(t=>t.map(t=>t.id===e.id?{...t,status:`downloading`}:t)),n(await f(t,`取消失败`),`error`)}}},gt=async e=>{if(K()&&G())try{let t=await fetch(y.getFileDownloadUrl(e.cid),{headers:await Se(`GET`,`/api/files/${e.cid}/download`)});if(!t.ok)throw Error(`获取文件失败`);let r=await t.blob(),i=window.showSaveFilePicker;if(i){let t=await(await i({suggestedName:e.fileName})).createWritable();await t.write(r),await t.close(),n(`文件已保存`,`success`)}else{let t=URL.createObjectURL(r),i=document.createElement(`a`);i.href=t,i.download=e.fileName,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(t),n(`文件已下载`,`success`)}}catch(e){e.name!==`AbortError`&&n(`保存失败: `+e.message,`error`)}},Q=e=>{C(e||null),E([])};(0,_.useEffect)(()=>{if(s!==!0)return;let e=null,t=!1;return(async()=>{if(e=new WebSocket(await _e(`/ws`)),t){e.close();return}e.onmessage=e=>{try{let{event:t,data:r}=JSON.parse(e.data);if(t===`publish:success`||t===`download:success`){q();let e=r.taskId||r.fileName;P(t=>t.map(t=>t.id===e||t.fileName===r.fileName?{...t,progress:100,status:`completed`}:t)),t===`download:success`&&(r.alreadyExists?n(`${r.fileName} 已存在`,`warning`):n(`${r.fileName} 下载完成`,`success`),setTimeout(()=>{P(t=>t.filter(t=>!(t.id===e&&t.status===`completed`)))},3e3))}t===`publish:progress`&&P(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})),t===`download:progress`&&P(e=>e.map(e=>e.id===r.taskId?{...e,progress:r.percent||0,loaded:r.loaded,total:r.total}:e)),t===`download:error`&&(P(e=>e.map(e=>e.id===r.taskId?{...e,status:`error`}:e)),n(`下载失败: ${r.error}`,`error`)),t===`download:status`&&P(e=>e.map(e=>e.id===r.taskId?{...e,fileName:r.file||e.fileName}:e)),t===`download:cancelled`&&(P(e=>e.map(e=>e.id===r.taskId?{...e,status:`cancelled`}:e)),n(`下载已取消`,`warning`))}catch(e){console.warn(`[App WS] Failed to parse message:`,e.message)}}})(),()=>{t=!0,e?.close()}},[s,u?.address]),(0,_.useEffect)(()=>{if(s===!0&&u){q(),J();return}s===!1&&(g([]),S([]))},[s,u?.address]),(0,_.useEffect)(()=>{u||(E([]),D(null),k(null),A(``),M(null),P([]),L(``),C(null),Ie(`all`))},[u?.address]);let _t=w===`all`?`本地`:w===`starred`?`收藏`:`回收站`,$=w===`all`?et:w===`starred`?m.filter(e=>e.starred&&b(e.fileName).name.toLowerCase().includes(I.toLowerCase())):x.filter(e=>b(e.fileName).name.toLowerCase().includes(I.toLowerCase())),vt=w===`starred`?[]:Qe.filter(e=>e.name.toLowerCase().includes(I.toLowerCase())),yt=Pe(W);return(0,v.jsxs)(ue,{sidebar:({closeSidebar:e})=>(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`div`,{className:`sidebar-header sidebar-header-link`,onClick:()=>window.location.href=`/`,children:[(0,v.jsx)(ge,{size:18}),(0,v.jsx)(`h1`,{children:`MOST PEOPLE`})]}),(0,v.jsx)(`nav`,{className:`sidebar-nav`,children:[{id:`all`,icon:(0,v.jsx)(Ee,{size:18}),label:`本地`},{id:`starred`,icon:(0,v.jsx)(De,{size:18}),label:`收藏`},{id:`trash`,icon:(0,v.jsx)(ne,{size:18}),label:`回收站`}].map(t=>(0,v.jsxs)(`button`,{onClick:()=>{Ie(t.id),C(null),E([]),L(``),e()},className:`sidebar-nav-btn ${w===t.id?`active`:``}`,children:[t.icon,(0,v.jsx)(`span`,{children:t.label})]},t.id))}),(0,v.jsx)(ee,{})]}),headerTitle:(0,v.jsx)(`h2`,{className:`header-title`,children:_t}),headerRight:(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`div`,{className:`search-box`,children:[(0,v.jsx)(me,{size:14}),(0,v.jsx)(`input`,{type:`text`,value:I,onChange:e=>L(e.target.value),placeholder:`搜索...`}),I&&(0,v.jsx)(`button`,{onClick:()=>L(``),children:(0,v.jsx)(h,{size:12})})]}),w===`trash`&&x.length>0&&(0,v.jsx)(`button`,{onClick:rt,className:`btn btn-sm btn-empty-trash`,children:`清空回收站`}),(0,v.jsx)(`button`,{onClick:()=>F.open(),className:`btn btn-icon`,children:(0,v.jsx)(Te,{size:16})}),(0,v.jsx)(`button`,{onClick:()=>t(!e),className:`btn btn-icon`,children:e?(0,v.jsx)(fe,{size:16}):(0,v.jsx)(de,{size:16})})]}),children:[w===`all`&&(0,v.jsxs)(`div`,{className:`action-grid`,children:[(0,v.jsxs)(`div`,{className:`action-card upload ${Le?`drag-over`:``}`,onDragOver:e=>{e.preventDefault(),Re(!0)},onDragLeave:()=>Re(!1),onDrop:e=>{e.preventDefault(),Re(!1),!(!K()||!G())&&ct(e.dataTransfer.files)},children:[(0,v.jsx)(`input`,{type:`file`,multiple:!0,onClick:e=>{(!K()||!G())&&e.preventDefault()},onChange:e=>ct(e.target.files),className:`action-card-input`}),(0,v.jsx)(he,{size:20,className:`action-grid-icon`}),(0,v.jsx)(`p`,{children:`发布文件`})]}),(0,v.jsxs)(`div`,{className:`action-card action-card-download`,onClick:()=>{!K()||!G()||Ve.open()},children:[(0,v.jsx)(o,{size:20,className:`action-grid-icon`}),(0,v.jsx)(`p`,{children:`下载文件`})]})]}),w===`all`&&(0,v.jsx)(`div`,{className:`breadcrumb`,children:W?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`button`,{onClick:()=>Q(``),children:`全部内容`}),yt.slice(1).map((e,t)=>(0,v.jsxs)(_.Fragment,{children:[(0,v.jsx)(i,{size:12}),(0,v.jsx)(`button`,{onClick:()=>Q(e.path),className:t===yt.length-2?`current`:``,children:e.name}),t===yt.length-2&&(0,v.jsx)(`button`,{onClick:()=>st(e),className:`breadcrumb-edit-btn`,children:(0,v.jsx)(re,{size:12})})]},e.path))]}):null}),(0,v.jsxs)(`div`,{className:`content-grid`,children:[w===`trash`&&($.length===0?(0,v.jsxs)(`div`,{className:`empty-state app-empty-state`,children:[(0,v.jsx)(`p`,{children:I?`未找到相关文件`:`回收站是空的`}),(0,v.jsx)(pe,{label:`打开文件导航`})]}):(0,v.jsx)(`div`,{className:`file-grid`,children:$.map(e=>(0,v.jsxs)(`div`,{onClick:()=>E(t=>t.includes(e.cid)?t.filter(t=>t!==e.cid):[...t,e.cid]),onDoubleClick:()=>nt(e.cid),className:`card ${T.includes(e.cid)?`selected`:``}`,children:[(0,v.jsx)(`div`,{className:`card-icon trash`,children:(0,v.jsx)(te,{size:24,color:`#fff`})}),(0,v.jsx)(`p`,{className:`card-name`,children:b(e.fileName).name}),(0,v.jsxs)(`p`,{className:`card-date`,children:[`删除于 `,je(e.deletedAt)]})]},e.cid))})),w!==`trash`&&($.length===0&&vt.length===0?(0,v.jsxs)(`div`,{className:`empty-state app-empty-state`,children:[(0,v.jsx)(`p`,{children:I?`未找到相关文件`:w===`starred`?`暂无的收藏`:`暂无本地文件`}),(0,v.jsx)(pe,{label:`打开文件导航`})]}):(0,v.jsxs)(`div`,{className:`file-grid`,children:[vt.map(e=>(0,v.jsx)(ce,{folder:e,onClick:()=>Q(e.path)},e.path)),$.map(e=>(0,v.jsx)(se,{file:e,isSelected:T.includes(e.cid),onSelect:tt,onPreview:e=>D({...e,subtype:ae(e.fileName)})},e.cid))]}))]}),z&&(0,v.jsx)(be,{title:z.title,message:z.message,confirmText:z.confirmText,danger:z.danger,onConfirm:z.onConfirm,onClose:()=>B(null)}),V&&(0,v.jsx)(ye,{title:V.title,placeholder:V.placeholder,defaultValue:V.defaultValue,confirmText:V.confirmText,isLoading:Ye,onConfirm:V.onConfirm,onClose:()=>H(null)}),Je&&(0,v.jsx)(le,{items:T.map(e=>m.find(t=>t.cid===e)).filter(Boolean),allFolders:Ze.map(e=>({path:e,name:e.split(`/`).pop()})),currentPath:W,onMove:ot,onClose:()=>R.close()}),O&&(0,v.jsx)(ve,{onClose:()=>k(null),children:(0,v.jsxs)(`div`,{className:`share-modal`,onClick:e=>e.stopPropagation(),children:[(0,v.jsxs)(`div`,{className:`modal-header`,children:[(0,v.jsx)(`h3`,{children:`分享链接`}),(0,v.jsx)(`button`,{onClick:()=>k(null),className:`btn btn-icon`,children:(0,v.jsx)(h,{size:18})})]}),(0,v.jsxs)(`div`,{className:`share-link-box`,children:[(0,v.jsx)(`div`,{className:`share-link-text`,children:`most://${O.cid}?filename=${encodeURIComponent(O.fileName)}`}),(0,v.jsx)(`button`,{onClick:lt,className:`btn btn-circle btn-primary ${qe?`copied`:``}`,children:qe?(0,v.jsx)(r,{size:18}):(0,v.jsx)(a,{size:18})})]}),(0,v.jsx)(`div`,{className:`share-storage-note`,children:(0,v.jsx)(`span`,{children:`本机在线时可下载;下载者完成后会默认继续做种。`})})]})}),Be&&(0,v.jsx)(ve,{onClose:dt,children:(0,v.jsxs)(`div`,{className:`download-modal`,onClick:e=>e.stopPropagation(),children:[(0,v.jsxs)(`div`,{className:`modal-header`,children:[(0,v.jsx)(`h3`,{children:`下载文件`}),(0,v.jsx)(`button`,{onClick:dt,className:`btn btn-icon`,children:(0,v.jsx)(h,{size:18})})]}),(0,v.jsxs)(`div`,{className:`download-link-row`,children:[(0,v.jsx)(`input`,{type:`text`,className:`input`,value:He,onChange:ft,placeholder:`输入 most:// 链接`}),(0,v.jsxs)(`button`,{type:`button`,onClick:pt,disabled:!X||N||Y,className:`btn btn-secondary download-check-btn`,children:[N?(0,v.jsx)(ie,{size:14,className:`spin`}):Z?(0,v.jsx)(r,{size:14}):(0,v.jsx)(me,{size:14}),N?`检测中...`:Z?`已通过`:`检测`]})]}),j&&(0,v.jsxs)(`div`,{className:`download-check-status ${j.status}`,children:[j.status===`success`?(0,v.jsx)(r,{size:14}):(0,v.jsx)(oe,{size:14}),(0,v.jsx)(`span`,{children:j.message})]}),(0,v.jsxs)(`button`,{onClick:mt,disabled:!Z||Y||N,className:`btn btn-info btn-full`,children:[Y?(0,v.jsx)(ie,{size:14,className:`spin`}):(0,v.jsx)(o,{size:14}),Y?`下载中...`:`开始下载`]})]})}),ze&&(0,v.jsx)(we,{item:ze,isBackendReady:U,getFileDownloadUrl:y.getFileDownloadUrl,onClose:()=>D(null)}),T.length>0&&(0,v.jsxs)(`div`,{className:`batch-bar`,children:[(0,v.jsxs)(`span`,{className:`batch-info`,children:[`已选 `,T.length,` 项`]}),(0,v.jsx)(`button`,{onClick:()=>E([]),className:`batch-dismiss`,children:(0,v.jsx)(h,{size:16})}),(0,v.jsx)(`div`,{className:`batch-divider`}),w===`trash`?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`button`,{onClick:async()=>{K()&&G()&&(await Promise.all(T.map(e=>y.restoreTrashFile(e))),E([]),n(`已恢复`,`success`),q(),J())},className:`btn btn-sm`,children:`恢复`}),(0,v.jsx)(`button`,{onClick:at,className:`btn btn-sm btn-danger`,children:`永久删除`})]}):(0,v.jsxs)(v.Fragment,{children:[T.length===1&&(()=>{let e=m.find(e=>e.cid===T[0]);return e&&ae(e.fileName)!==`file`})()&&(0,v.jsx)(`button`,{onClick:()=>{let e=m.find(e=>e.cid===T[0]);if(e){let t=ae(e.fileName);D({...e,subtype:t})}},className:`btn btn-sm`,children:`预览`}),(0,v.jsx)(`button`,{onClick:()=>{let e=T.some(e=>{let t=m.find(t=>t.cid===e);return t&&!t.starred});T.forEach(t=>{let n=m.find(e=>e.cid===t);n&&(e?!n.starred:n.starred)&&it(t)})},className:`btn btn-sm btn-star`,children:`收藏`}),T.length===1&&(0,v.jsx)(`button`,{onClick:()=>{let e=m.find(e=>e.cid===T[0]);e&&st(e)},className:`btn btn-sm`,children:`重命名`}),(0,v.jsx)(`button`,{onClick:()=>R.open(),className:`btn btn-sm btn-move`,children:`移动`}),(0,v.jsx)(`button`,{onClick:at,className:`btn btn-sm btn-danger`,children:`删除`}),T.length===1&&(0,v.jsx)(`button`,{onClick:()=>k(m.find(e=>e.cid===T[0])),className:`btn btn-sm`,children:`分享`}),T.length===1&&(0,v.jsx)(`button`,{onClick:()=>{let e=m.find(e=>e.cid===T[0]);e&&gt(e)},className:`btn btn-sm`,children:`另存为`})]})]}),Ge&&(0,v.jsx)(ve,{onClose:()=>F.close(),children:(0,v.jsxs)(`div`,{className:`transfer-modal`,onClick:e=>e.stopPropagation(),children:[(0,v.jsxs)(`div`,{className:`modal-header`,children:[(0,v.jsx)(`h3`,{children:`传输`}),(0,v.jsx)(`button`,{onClick:()=>F.close(),className:`btn btn-icon`,children:(0,v.jsx)(h,{size:18})})]}),We.length===0?(0,v.jsx)(`div`,{className:`empty-transfer`,children:`暂无传输`}):We.map(e=>(0,v.jsxs)(`div`,{className:`transfer-item`,children:[(0,v.jsxs)(`div`,{className:`transfer-item-header`,children:[e.type===`upload`?(0,v.jsx)(he,{size:14}):(0,v.jsx)(o,{size:14}),(0,v.jsx)(`span`,{className:`transfer-item-name`,children:e.fileName}),e.status===`downloading`&&e.type===`download`&&(0,v.jsx)(`button`,{onClick:()=>ht(e),className:`transfer-item-cancel`,children:(0,v.jsx)(h,{size:14})})]}),(0,v.jsxs)(`div`,{className:`transfer-progress-row`,children:[(0,v.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":`${e.fileName} 传输进度`}),(0,v.jsx)(`span`,{className:`transfer-progress-text`,children:e.status===`completed`?`完成`:e.status===`error`?`失败`:e.status===`cancelled`?`已取消`:e.status===`cancelling`?`取消中`:e.loaded&&e.total?`${Ae(e.loaded)}/${Ae(e.total)}`:`${e.progress}%`})]})]},e.id))]})})]})}var Fe=S;export{Fe as component};
@@ -1 +0,0 @@
1
- import{W as e}from"./index-Cf23WD2V.js";var t=e(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]);export{t};
@@ -1 +0,0 @@
1
- import{p as e,y as t}from"./index-Cf23WD2V.js";var n={getChannels(t={}){let n=new URLSearchParams;t.type&&n.set(`type`,t.type),t.excludeType&&n.set(`excludeType`,t.excludeType);let r=n.toString();return e.get(r?`/api/channels?${r}`:`/api/channels`).json()},createChannel(t,n=`personal`,r={}){return e.post(`/api/channels`,{json:{name:t,type:n,...r}}).json()},leaveChannel(t){return e.delete(`/api/channels/${encodeURIComponent(t)}`).json()},getChannelMessages(t,n=100,r=0){return e.get(`/api/channels/${encodeURIComponent(t)}/messages?limit=${n}&offset=${r}`).json()},sendChannelMessage({channelName:t,content:n,author:r,authorName:i,avatar:a,attachment:o}){return e.post(`/api/channels/${encodeURIComponent(t)}/messages`,{json:o?{content:n,author:r,authorName:i,avatar:a,attachment:o}:{content:n,author:r,authorName:i,avatar:a}}).json()},getChannelMembers(t){return e.get(`/api/channels/${encodeURIComponent(t)}/members`).json()},getChannelPeers(t){return e.get(`/api/channels/${encodeURIComponent(t)}/peers`).json()},setChannelRemark(t,n){return e.put(`/api/channels/${encodeURIComponent(t)}/remark`,{json:{remark:n}}).json()},setChannelPinned(t,n){return e.put(`/api/channels/${encodeURIComponent(t)}/pin`,{json:{pinned:n}}).json()},getFileDownloadUrl(e){return t(`/api/files/${e}/download`)}};export{n as t};
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{t as r}from"./SidebarAccount-CCHZLGdP.js";import{n as i,r as a,t as o}from"./filePreview-BvbHWUTG.js";import{r as s,t as ee}from"./AppShell-DmZQwVA9.js";import{n as te,t as ne}from"./LogoIcon-CYQ7cHd5.js";import{n as re,t as ie}from"./sun-C3IUQTpa.js";import{t as ae}from"./OpenSidebarButton-Di62DGiu.js";import{a as oe,c as se,i as ce,n as le,o as ue,r as de,s as fe,t as pe}from"./ChatUi-CVGqjFdx.js";import{t as me}from"./plus-DHvLpuuw.js";import{t as he}from"./search-C-EpsDNl.js";import{U as ge,W as c,_ as _e,f as l,g as ve,i as ye,l as be,o as xe,p as u,s as Se,u as Ce,y as d,z as we}from"./index-Cf23WD2V.js";import{n as Te,r as Ee,t as De}from"./downloadMessages-7Xbd-HhS.js";import{t as f}from"./channelApi-CL7YsIQ-.js";import{t as Oe}from"./useChannelMessages-Bs1hEJyd.js";var ke=c(`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`}]]),Ae=c(`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`}]]),je=c(`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`}]]),p=t(e(),1),m=`mostbox.chat.lastReadAt`;function h(e){return Date.parse(e?.lastMessageAt||``)||Date.parse(e?.createdAt||``)||0}function Me(e){let t=String(e||``).trim().toLowerCase();return t?`${m}:${t}`:``}function g(e,t=Date.now()){let n=Number(e);return Math.max(0,Math.floor(Number.isFinite(n)&&n>0?n:t))}function Ne(e,t=v()){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 _(e,t,n=v()){if(!(!e||!n))try{n.setItem(e,JSON.stringify(t))}catch{}}function Pe(e,t,n=Date.now(),r=Date.now()){if(!t)return{changed:!1,value:e};let i=g(n,r);return(e[t]||0)>=i?{changed:!1,value:e}:{changed:!0,value:{...e,[t]:i}}}function Fe(e,t,n=Date.now()){let r=!1,i={...e};for(let e of t)!e?.name||i[e.name]!==void 0||(i[e.name]=g(h(e),n),r=!0);return{changed:r,value:r?i:e}}function Ie(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=g(n,o),ee=t===r,te=String(i||``).toLowerCase()===String(a||``).toLowerCase();if(ee||te)return{...Pe(e,t,s,o),notify:!1};let ne=e[t]||0;if(ne<s)return{changed:!1,notify:!0,value:e};let re=Math.max(0,s-1);return ne===re?{changed:!1,notify:!0,value:e}:{changed:!0,notify:!0,value:{...e,[t]:re}}}function Le(e,t){return h(e)>(t[e?.name]||0)}function v(){if(!(typeof window>`u`))return window.localStorage}var y=n(),Re=3,ze=30,Be=/^[a-zA-Z0-9_-]+$/,b=1e4,x=12e3,Ve=1200,S={async publishFile(e,t){let n=new FormData;n.append(`file`,e,t);let r=await u.post(`/api/publish`,{body:n});if(!r.ok){let e=await r.json().catch(()=>({error:r.statusText}));throw Error(e.error||`Request failed`)}return r.json()},downloadFile:e=>u.post(`/api/download`,{json:{link:e}}).json(),checkDownload:e=>u.post(`/api/download/check`,{json:{link:e,timeout:b},timeout:x}).json(),getFileDownloadUrl:e=>d(`/api/files/${e}/download`)},He=`chat-file`;function Ue(e,t){return e.type.startsWith(`image/`)?`image`:e.type.startsWith(`video/`)?`video`:e.type.startsWith(`audio/`)?`audio`:e.type.startsWith(`text/`)?`text`:o(t)}function We(e){return e?`${e.slice(0,6)}...${e.slice(-4)}`:`Unknown`}function Ge(e){return/#[a-fA-F0-9]{4}$/.test(String(e||``).trim())}function Ke(){if(typeof window>`u`)return;let e=window;return e.AudioContext||e.webkitAudioContext}async function qe(e){return De(await _e(e),e&&typeof e==`object`&&`name`in e?String(e.name):``)}function C(){let e=l(e=>e.isDarkMode),t=l(e=>e.setIsDarkMode),n=l(e=>e.hasBackend),c=l(e=>e.addToast),_e=l(e=>e.openConnectModal),d=Ce(e=>e.identity),De=Ce(e=>e.openLoginModal),[m,g]=(0,p.useState)([]),[v,b]=(0,p.useState)(null),[x,C]=(0,p.useState)(``),[w,Je]=(0,p.useState)(``),[T,E]=(0,p.useState)(``),[Ye,Xe]=s(!1),[Ze,Qe]=(0,p.useState)(``),[$e,et]=(0,p.useState)(!1),[tt,nt]=(0,p.useState)(!1),[rt,D]=s(!1),[O,k]=(0,p.useState)(null),[A,j]=(0,p.useState)(null),[it,M]=(0,p.useState)(!1),[at,ot]=(0,p.useState)(``),[N,st]=(0,p.useState)(!1),[ct,P]=(0,p.useState)(null),[lt,ut]=(0,p.useState)(!1),[F,I]=(0,p.useState)({}),[L,R]=(0,p.useState)(null),[dt,z]=(0,p.useState)([]),[ft,pt]=(0,p.useState)(!1),[mt,ht]=(0,p.useState)(!1),[gt,_t]=(0,p.useState)(!1),[vt,B]=(0,p.useState)({}),V=d?.identity===`user`,yt=V&&!gt?d.logo:``,bt=(0,p.useRef)(null),xt=(0,p.useRef)(null),St=(0,p.useRef)(``),H=(0,p.useRef)(null),U=(0,p.useRef)(!1),Ct=(0,p.useRef)(0),W=(0,p.useRef)(new Map),G=(0,p.useRef)(new Set),K=n===!0,q=(0,p.useCallback)(async(e,t)=>{c(await ve(e,t),`error`)},[c]),J=(0,p.useMemo)(()=>Me(d?.address),[d?.address]),wt=(0,p.useCallback)((e,t=Date.now())=>{e&&B(n=>{let r=Pe(n,e,t);return r.changed?(_(J,r.value),r.value):n})},[J]),Y=(0,p.useCallback)(()=>{if(U.current||typeof window>`u`)return;let e=Ke();if(e)try{let t=H.current||new e;H.current=t,t.state===`suspended`&&t.resume().catch(()=>{}),U.current=!0}catch{}},[]),Tt=(0,p.useCallback)(()=>{if(!U.current)return;let e=Date.now();if(e-Ct.current<Ve)return;Ct.current=e;let t=Ke();if(t)try{let e=H.current||new t;if(H.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{}},[]),Et=(0,p.useCallback)(()=>({displayName:d?.displayName||d?.username||``,avatar:d?.avatar}),[d?.avatar,d?.displayName,d?.username]),X=(0,p.useCallback)(async(e=v?.name)=>{if(!e||!K||!d){z([]);return}pt(!0);try{z(await f.getChannelMembers(e))}catch(e){z([]),await q(e,`无法读取频道成员`)}finally{pt(!1)}},[v?.name,K,q,d]);function Dt(e,t){switch(e){case`channel:message`:{let e=t?.channel,n=t?.message,r=Number(n?.timestamp)||Date.now();if(e){g(t=>t.map(t=>t.name===e?{...t,lastMessageAt:new Date(r).toISOString()}:t));let t=e===St.current;B(i=>{let a=Ie(i,{channelName:e,messageTime:r,activeChannelName:t?e:``,messageAuthor:n?.author,userAddress:d?.address});return a.changed&&_(J,a.value),a.notify&&Tt(),a.changed?a.value:i})}break}case`channel:peer:online`:case`channel:peer:offline`:v&&f.getChannelPeers(v.name).catch(e=>{console.warn(`[Chat] Failed to fetch peers on event:`,e.message)});break;case`channel:joined`:case`channel:left`:$(),X();break;case`download:success`:{let e=W.current.get(t.taskId);e&&(W.current.delete(t.taskId),G.current.delete(e.cid),I(t=>({...t,[e.cid]:{status:`available`}})),c(`${t.fileName||se(e.fileName)} 下载完成`,`success`),Pt(e,t.fileName||e.fileName));break}case`download:error`:case`download:cancelled`:{let n=W.current.get(t.taskId);n&&(W.current.delete(t.taskId),G.current.delete(n.cid),I(r=>({...r,[n.cid]:{status:`error`,message:e===`download:cancelled`?`附件下载已取消`:t.error||`附件下载失败`}})),c(e===`download:cancelled`?`附件下载已取消`:t.error||`附件下载失败`,`error`));break}}}let Ot=(0,p.useMemo)(()=>m.map(e=>e.name),[m]),{clearMessages:kt,messages:At,sendMessage:jt,syncMessages:Mt}=Oe({isReady:K,enabled:!!d,channelName:v?.name||``,extraSubscribedChannelNames:Ot,peerId:Ze,waitForPeerId:!0,onSyncError:e=>q(e,`无法读取频道消息`),onSocketEvent:Dt,onReconnect:$});function Z(){return K?!0:(_e(),!1)}function Q(){return d?!0:(De(),!1)}(0,p.useEffect)(()=>{let e=()=>{C(new URLSearchParams(window.location.search).get(`channel`)||``)};return e(),window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[]),(0,p.useEffect)(()=>{d&&C(new URLSearchParams(window.location.search).get(`channel`)||``)},[d?.address]),(0,p.useEffect)(()=>{_t(!1)},[d?.logo]),(0,p.useEffect)(()=>{St.current=v?.name||``},[v?.name]),(0,p.useEffect)(()=>{B(Ne(J))},[J]),(0,p.useEffect)(()=>{!J||m.length===0||B(e=>{let t=Fe(e,m);return t.changed&&_(J,t.value),t.changed?t.value:e})},[J,m]),(0,p.useEffect)(()=>(window.addEventListener(`pointerdown`,Y,{passive:!0}),window.addEventListener(`keydown`,Y),()=>{window.removeEventListener(`pointerdown`,Y),window.removeEventListener(`keydown`,Y)}),[Y]),(0,p.useEffect)(()=>()=>{H.current?.close().catch(()=>{}),H.current=null,U.current=!1},[]),(0,p.useEffect)(()=>{bt.current?.scrollIntoView({behavior:`smooth`})},[At]),(0,p.useEffect)(()=>{if(!K){Qe(``);return}u.get(`/api/node-id`).json().then(e=>Qe(e.id)).catch(e=>{console.warn(`[Chat] Failed to fetch node ID:`,e.message),q(e,`无法读取节点 ID`)})},[K,q]),(0,p.useEffect)(()=>{K&&d&&$()},[n,K,d?.address]),(0,p.useEffect)(()=>{v&&K&&(Mt(v.name,{replace:!0}),f.getChannelPeers(v.name).catch(()=>{}),X(v.name))},[v,n,K,X,Mt]),(0,p.useEffect)(()=>{!it||!v||X(v.name)},[v,X,it]),(0,p.useEffect)(()=>{if(x&&m.length>0){let e=m.find(e=>e.name===x);e&&(!v||v.name!==e.name)?Rt(e):e&&v&&v.name===e.name&&(v.createdAt!==e.createdAt||v.coreKey!==e.coreKey||v.lastMessageAt!==e.lastMessageAt||v.pinned!==e.pinned||v.remark!==e.remark||v.type!==e.type)&&b(e)}},[m,v,x]),(0,p.useEffect)(()=>{d||(g([]),b(null),C(``),j(null),kt(),E(``),Qe(``),M(!1),P(null),z([]),I({}),B({}),G.current.clear(),W.current.clear())},[kt,d?.address]);function Nt(e){return e.length<Re?`频道名至少 ${Re} 个字符`:e.length>ze?`频道名最多 ${ze} 个字符`:Be.test(e)?``:`频道名只能包含字母、数字、下划线和连字符`}async function $(){if(K)try{g(await f.getChannels({excludeType:`game`}))}catch(e){g([]),await q(e,`无法读取频道列表`)}}function Pt(e,t=e.fileName){let n=o(t);P({cid:e.cid,fileName:t,subtype:n===`file`?e.kind:n})}async function Ft(e){let t=Te(e.link);if(t)return I(n=>({...n,[e.cid]:{status:`error`,message:t}})),!1;try{I(t=>({...t,[e.cid]:{status:`checking`}}));let t=await S.checkDownload(e.link);return I(n=>({...n,[e.cid]:{status:`available`,message:t.alreadyExists?`本机已有`:`可预览`}})),!0}catch(t){let n=await qe(t);return I(t=>({...t,[e.cid]:{status:`error`,message:n}})),!1}}async function It(e){R(null),await Ft(e)&&await Lt(e)}async function Lt(e){if(!G.current.has(e.cid)){G.current.add(e.cid),I(t=>({...t,[e.cid]:{status:`available`}}));try{let t=await S.downloadFile(e.link);if(t.alreadyExists||t.fileName){G.current.delete(e.cid),I(t=>({...t,[e.cid]:{status:`available`}})),Pt({...e,fileName:t.fileName||e.fileName},t.fileName||e.fileName);return}t.taskId&&(W.current.set(t.taskId,e),c(`开始下载附件`,`success`))}catch(t){let n=await qe(t);G.current.delete(e.cid),I(t=>({...t,[e.cid]:{status:`error`,message:n}}))}}}async function Rt(e){Q()&&Z()&&(wt(e.name,Math.max(h(e),Date.now())),b(e),C(e.name),window.history.pushState({},``,`?channel=${encodeURIComponent(e.name)}`))}async function zt(e,t){if(t&&t.stopPropagation(),Q()&&Z()&&!tt){nt(!0);try{if(await f.leaveChannel(e),v?.name===e){b(null),C(``),kt();let e=new URL(window.location.href);e.searchParams.delete(`channel`),window.history.pushState({},``,e.pathname)}$(),D.close(),k(null)}catch(e){await q(e,`退出频道失败`)}finally{nt(!1)}}}async function Bt(e){if(!Q()||!Z())return;let t=!e.pinned;try{let n=await f.setChannelPinned(e.name,t);g(t=>t.map(t=>t.name===e.name?{...t,pinned:n.pinned}:t)),b(t=>t&&t.name===e.name?{...t,pinned:n.pinned}:t)}catch(e){await q(e,t?`置顶失败`:`取消置顶失败`)}}async function Vt(e){let t=e.trim();if(!t||$e)return;let n=Nt(t);if(n){c(n,`error`);return}if(Q()&&Z()){et(!0);try{let e=await f.createChannel(t,`public`,Et()),n=m.find(e=>e.name===t),r={...n,name:e.name||t,type:e.type||n?.type||`public`,createdAt:e.createdAt||n?.createdAt,coreKey:e.coreKey||e.key||n?.coreKey,remark:n?.remark};g(e=>e.some(e=>e.name===t)?e.map(e=>e.name===t?{...e,...r}:e):[...e,r]),Xe.close(),await Rt(r),X(t),$()}catch(e){await q(e,`加入频道失败`)}finally{et(!1)}}}async function Ht(e,t){if(!e.trim()||!v||!Q()||!Z())return!1;let n=e.trim();try{let e=await jt({channelName:v.name,content:n,author:d.address,authorName:d.displayName||d.username,avatar:d.avatar,attachment:t});return g(t=>t.map(t=>t.name===v.name?{...t,lastMessageAt:new Date(Number(e?.timestamp)||Date.now()).toISOString()}:t)),e&&wt(v.name,Number(e.timestamp)||Date.now()),X(v.name),!0}catch(e){return await q(e,`发送失败`),!1}}async function Ut(){if(!T.trim())return;let e=T.trim();E(``),await Ht(e)}function Wt(e,t){return`${He}/${e}/${t}`}async function Gt(e){if(!(!e||e.length===0||!v)&&Q()&&Z()&&!lt){ut(!0);try{for(let t of Array.from(e)){let e=Wt(v.name,t.name),n=await S.publishFile(t,e),r=n.fileName||e,i=n.link||`most://${n.cid}?filename=${encodeURIComponent(r)}`;await Ht(i,{kind:Ue(t,r),cid:n.cid,fileName:r,link:i,mimeType:t.type||void 0,size:t.size})&&c(`${se(r)} 已发布`,`success`)}}catch(e){await q(e,`附件发送失败`)}finally{ut(!1)}}}async function Kt(e){if(!Q()||!Z())return;let t=F[e.cid];if(t?.status!==`checking`){if(t?.status===`error`){R(e);return}if(t?.status!==`available`){await Ft(e)&&await Lt(e);return}await Lt(e)}}async function qt(e,t){if(!Q()||!Z())return;let n=await f.setChannelRemark(e.name,t);return g(t=>t.map(t=>t.name===e.name?{...t,remark:n.remark}:t)),b(t=>t&&t.name===e.name?{...t,remark:n.remark}:t),n.remark}async function Jt(){if(v)try{await qt(v,at)}catch(e){await q(e,`设置备注失败`)}}async function Yt(e){if(!(!A||N)){st(!0);try{await qt(A,e),j(null)}catch(e){await q(e,`重命名失败`)}finally{st(!1)}}}function Xt(e){if(!e.attachment)return(0,y.jsx)(ue,{children:e.content});let t=e.attachment,n=F[t.cid]?.status;return(0,y.jsx)(le,{children:(0,y.jsx)(fe,{attachment:t,status:n,pending:e.pending,onOpen:Kt})})}function Zt(e,t){let n=String(e||``).trim();return n?mt?Ge(n)?n:t?`${n}#${t.slice(-4).toUpperCase()}`:n:n.replace(/#[a-fA-F0-9]{4}$/,``):We(t)}function Qt(){return(0,y.jsx)(pe,{isLoading:ft,members:dt.map(e=>({id:e.address,name:Zt(e.displayName,e.address),avatarSrc:ye(e.address,e.avatar)}))})}let $t=V&&!!x&&!v,en=v?(0,y.jsx)(`h2`,{className:`header-title`,children:v.remark||v.name}):(0,y.jsx)(`h2`,{className:`header-title`,children:`聊天`}),tn=w.trim().toLowerCase(),nn=(0,p.useMemo)(()=>[...m].sort((e,t)=>{let n=Number(!!t.pinned)-Number(!!e.pinned);if(n!==0)return n;let r=h(t)-h(e);return r===0?(e.remark||e.name).localeCompare(t.remark||t.name,`zh-CN`):r}),[m]),rn=tn?nn.filter(e=>[e.remark||e.name,e.name].some(e=>e.toLowerCase().includes(tn))):nn;return(0,y.jsxs)(ee,{className:`chat-app-layout`,defaultHide:V,sidebar:({closeSidebar:e})=>(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(`div`,{className:`sidebar-header sidebar-header-link`,onClick:()=>window.location.href=`/`,children:[(0,y.jsx)(ge,{size:18}),(0,y.jsx)(`h1`,{children:`MOST PEOPLE`})]}),(0,y.jsx)(`div`,{className:`chat-channel-search`,children:(0,y.jsxs)(`div`,{className:`ui-input-control`,children:[(0,y.jsx)(he,{className:`ui-input-icon`,size:15}),(0,y.jsx)(`input`,{type:`search`,className:`input input-compact`,placeholder:`搜索频道`,value:w,onChange:e=>Je(e.target.value),"aria-label":`搜索频道`})]})}),(0,y.jsx)(`nav`,{className:`sidebar-nav`,children:m.length===0?(0,y.jsx)(`div`,{className:`sidebar-empty-state`,children:(0,y.jsx)(`p`,{children:`暂无频道`})}):rn.length===0?(0,y.jsx)(`div`,{className:`sidebar-empty-state`,children:(0,y.jsx)(`p`,{children:`未找到频道`})}):rn.map(t=>(0,y.jsx)(de,{active:v?.name===t.name,pinned:!!t.pinned,unread:Le(t,vt),title:t.remark||t.name,onSelect:()=>{Rt(t),e()},onTogglePin:()=>void Bt(t),onRename:()=>j(t),onLeave:()=>{k(t),D.open()}},t.name))}),(0,y.jsxs)(`button`,{className:`ui-action-dashed create-channel-btn`,onClick:()=>{!Q()||!Z()||Xe.open()},children:[(0,y.jsx)(me,{size:16}),`加入频道`]}),(0,y.jsx)(r,{})]}),headerTitle:en,sidebarToggleReplacement:V?(0,y.jsx)(`span`,{className:`sidebar-toggle-static-logo`,"aria-hidden":`true`,children:yt?(0,y.jsx)(`img`,{className:`sidebar-toggle-static-logo-img`,src:yt,alt:``,onError:()=>_t(!0)}):(0,y.jsx)(ne,{size:18})}):void 0,headerRight:(0,y.jsxs)(`div`,{className:`header-right-actions`,children:[(0,y.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>t(!e),title:`切换主题`,children:e?(0,y.jsx)(ie,{size:16}):(0,y.jsx)(re,{size:16})}),v&&(0,y.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>M(!0),title:`频道设置`,children:(0,y.jsx)(je,{size:16})})]}),children:[v?(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(`div`,{className:`chat-messages`,children:[At.length===0?(0,y.jsxs)(`div`,{className:`ui-empty-state chat-messages-empty`,children:[(0,y.jsx)(`div`,{className:`ui-empty-icon empty-icon`,children:(0,y.jsx)(te,{size:28})}),(0,y.jsx)(`p`,{children:`暂无消息,开始聊天吧!`})]}):At.map(e=>{let t=e.author===d?.address;return(0,y.jsx)(oe,{variant:t?`self`:`other`,pending:e.pending,avatarSrc:ye(e.author,t?d.avatar:void 0),author:Zt(e.authorName,e.author),time:new Date(e.timestamp).toLocaleTimeString(`zh-CN`,{hour:`2-digit`,minute:`2-digit`}),children:Xt(e)},e.id||`${e.author}-${e.timestamp}`)}),(0,y.jsx)(`div`,{ref:bt})]}),(0,y.jsx)(ce,{message:T,placeholder:d?`输入消息...`:`请先登录后发言`,disabled:!d,isPublishingAttachment:lt,attachmentInputRef:xt,onMessageChange:E,onSend:Ut,onSelectAttachmentFiles:e=>{Gt(e)}})]}):$t?(0,y.jsxs)(`div`,{className:`ui-empty-state chat-welcome`,children:[(0,y.jsx)(`div`,{className:`ui-empty-icon ui-empty-icon-lg welcome-icon`,children:(0,y.jsx)(a,{size:36,className:`ui-spinner`})}),(0,y.jsx)(`h2`,{className:`ui-empty-title`,children:`正在打开频道`}),(0,y.jsx)(`p`,{className:`ui-empty-desc`,children:`正在恢复聊天内容...`})]}):(0,y.jsx)(y.Fragment,{children:(0,y.jsxs)(`div`,{className:`ui-empty-state chat-welcome`,children:[(0,y.jsx)(`div`,{className:`ui-empty-icon ui-empty-icon-lg welcome-icon`,children:(0,y.jsx)(te,{size:36})}),(0,y.jsx)(`h2`,{className:`ui-empty-title`,children:`选择频道`}),(0,y.jsx)(`p`,{className:`ui-empty-desc`,children:`从左侧边栏选择一个频道开始聊天,或创建一个新频道`}),(0,y.jsx)(ae,{label:`打开频道列表`})]})}),Ye&&(0,y.jsx)(xe,{title:`加入频道`,placeholder:`频道ID:3-20 位字母、数字、_ 或 -`,confirmText:`加入`,validate:Nt,onConfirm:Vt,onClose:()=>Xe.close(),isLoading:$e,loadingText:`加入中...`}),A&&(0,y.jsx)(xe,{title:`重命名频道`,placeholder:`输入备注名称`,defaultValue:A.remark||``,confirmText:`保存`,onConfirm:Yt,onClose:()=>{N||j(null)},isLoading:N,loadingText:`保存中...`,allowEmpty:!0,validate:e=>e.length>50?`备注名称最多 50 个字符`:``}),rt&&O&&(0,y.jsx)(Se,{title:`退出频道`,message:`确定要退出频道 "${O.name}" 吗?`,confirmText:tt?`退出中...`:`退出`,onConfirm:()=>zt(O.name,void 0),danger:!0,onClose:()=>{D.close(),k(null)}}),L&&(0,y.jsx)(be,{onClose:()=>R(null),children:(0,y.jsxs)(`div`,{className:`confirm-modal`,onClick:e=>e.stopPropagation(),children:[(0,y.jsxs)(`div`,{className:`modal-header`,children:[(0,y.jsx)(`h3`,{children:`暂时没有在线种子`}),(0,y.jsx)(`button`,{type:`button`,className:`btn btn-icon`,onClick:()=>R(null),"aria-label":`关闭`,children:(0,y.jsx)(we,{size:18})})]}),(0,y.jsx)(`p`,{children:F[L.cid]?.message||`暂时没有发现在线种子。请确认分享者或其他下载者仍在线做种。`}),(0,y.jsxs)(`div`,{className:`modal-actions`,children:[(0,y.jsx)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:()=>R(null),children:`取消`}),(0,y.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>It(L),disabled:F[L.cid]?.status===`checking`,children:F[L.cid]?.status===`checking`?`检测中...`:`再次检测`})]})]})}),ct&&(0,y.jsx)(Ee,{item:ct,isBackendReady:K,getFileDownloadUrl:S.getFileDownloadUrl,onClose:()=>P(null)}),it&&v&&(0,y.jsx)(`div`,{className:`channel-detail-overlay`,onClick:()=>M(!1),children:(0,y.jsxs)(`div`,{className:`channel-detail-drawer`,onClick:e=>e.stopPropagation(),children:[(0,y.jsxs)(`div`,{className:`channel-detail-header`,children:[(0,y.jsx)(`h3`,{children:`频道详情`}),(0,y.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>M(!1),children:(0,y.jsx)(we,{size:18})})]}),(0,y.jsxs)(`div`,{className:`channel-detail-body`,children:[(0,y.jsxs)(`div`,{className:`channel-detail-section channel-members-section`,children:[(0,y.jsx)(`div`,{className:`channel-detail-label`,children:(0,y.jsxs)(`span`,{children:[`群成员 (`,dt.length,`)`]})}),Qt()]}),!V&&(0,y.jsx)(`div`,{className:`channel-detail-section`,children:(0,y.jsxs)(`label`,{className:`setting-switch`,children:[(0,y.jsx)(`span`,{children:`显示 #地址后四位`}),(0,y.jsx)(`input`,{type:`checkbox`,checked:mt,onChange:e=>ht(e.target.checked)})]})}),!V&&(0,y.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,y.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,y.jsx)(Ae,{size:14}),(0,y.jsx)(`span`,{children:`频道 ID`})]}),(0,y.jsx)(`div`,{className:`ui-meta-box channel-detail-value channel-detail-mono`,children:v.name})]}),(0,y.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,y.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,y.jsx)(i,{size:14}),(0,y.jsx)(`span`,{children:`备注名称`})]}),(0,y.jsx)(`input`,{type:`text`,className:`input input-compact`,placeholder:`输入备注名称`,value:at,onChange:e=>ot(e.target.value),onFocus:()=>ot(v.remark||``),onBlur:()=>Jt(),onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur()},maxLength:50})]}),(0,y.jsxs)(`div`,{className:`channel-detail-section`,children:[(0,y.jsxs)(`div`,{className:`channel-detail-label`,children:[(0,y.jsx)(ke,{size:14}),(0,y.jsx)(`span`,{children:`创建时间`})]}),(0,y.jsx)(`div`,{className:`ui-meta-box channel-detail-value`,children:v.createdAt?new Date(v.createdAt).toLocaleDateString(`zh-CN`):`-`})]})]}),!V&&(0,y.jsx)(`div`,{className:`channel-detail-footer`,children:(0,y.jsx)(`button`,{className:`btn btn-secondary btn-block`,onClick:()=>{M(!1),k(v),D.open()},children:`退出频道`})})]})})]})}var w=C;export{w as component};
@@ -1 +0,0 @@
1
- import{W as e}from"./index-Cf23WD2V.js";var t=e(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]);export{t};
@@ -1 +0,0 @@
1
- import{W as e}from"./index-Cf23WD2V.js";var t=e(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]);export{t};
@@ -1 +0,0 @@
1
- import{W as e}from"./index-Cf23WD2V.js";var t=e(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]);export{t};
@@ -1 +0,0 @@
1
- import{W as e}from"./index-Cf23WD2V.js";var t=e(`cloud`,[[`path`,{d:`M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z`,key:`p7xjir`}]]);export{t};
@@ -1 +0,0 @@
1
- import{W as e}from"./index-Cf23WD2V.js";var t=e(`code`,[[`path`,{d:`m16 18 6-6-6-6`,key:`eg8j8`}],[`path`,{d:`m8 6-6 6 6 6`,key:`ppft3o`}]]);export{t};
@@ -1 +0,0 @@
1
- import{W as e}from"./index-Cf23WD2V.js";var t=e(`database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]);export{t};
@@ -1 +0,0 @@
1
- import{o as e}from"./jsx-runtime-Bt-cYkS5.js";import{W as t}from"./index-Cf23WD2V.js";import{t as n}from"./dayjs.min-Dcc0B6Je.js";var r=t(`lock`,[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]),i=e(n(),1);function a(e){if(!e)return``;let t=(0,i.default)(Number(e)),n=t.hour(),r;return r=n>=0&&n<3?`凌晨`:n>=3&&n<6?`拂晓`:n>=6&&n<9?`早晨`:n>=9&&n<12?`上午`:n>=12&&n<15?`下午`:n>=15&&n<18?`傍晚`:n>=18&&n<21?`晚上`:`深夜`,t.format(`YYYY年M月D日 ${r}h:m`)}export{r as n,a as t};
@@ -1,3 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{t as r}from"./folder-CcbCxm-k.js";import{t as i}from"./circle-check-CwAH4dgJ.js";import{t as a}from"./cloud-CcPRoob1.js";import{t as o}from"./code-Dr6STnCn.js";import{n as s}from"./trash-2-BhMrUgGM.js";import{a as c,n as l,r as ee,t as u}from"./MoveModal-BKkVBvrS.js";import{n as d,t as f}from"./LogoIcon-CYQ7cHd5.js";import{n as te,t as ne}from"./sun-C3IUQTpa.js";import{a as p,i as re,n as m,o as h,r as g,s as _,t as ie}from"./ChatUi-CVGqjFdx.js";import{t as v}from"./plus-DHvLpuuw.js";import{t as ae}from"./search-C-EpsDNl.js";import{a as y,i as oe,n as se,r as ce,t as le}from"./PemBlock-Dxx6k9MH.js";import{t as ue}from"./triangle-alert-DUODU79n.js";import{t as de}from"./wifi-v3JpPCNm.js";import{B as fe,U as pe,V as me,W as b,c as he,f as x,i as S,l as C,n as w,o as T,r as E,s as D,u as O}from"./index-Cf23WD2V.js";import{n as k,t as A}from"./Nav-BDGeJnbC.js";import{n as j,r as M,t as N}from"./NoteSidebar-BIJ8_m5K.js";var P=b(`bell`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]),F=b(`log-in`,[[`path`,{d:`m10 17 5-5-5-5`,key:`1bsop3`}],[`path`,{d:`M15 12H3`,key:`6jk70r`}],[`path`,{d:`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,key:`u53s6r`}]]),I=b(`mouse-pointer-click`,[[`path`,{d:`M14 4.1 12 6`,key:`ita8i4`}],[`path`,{d:`m5.1 8-2.9-.8`,key:`1go3kf`}],[`path`,{d:`m6 12-1.9 2`,key:`mnht97`}],[`path`,{d:`M7.2 2.2 8 5.1`,key:`1cfko1`}],[`path`,{d:`M9.037 9.69a.498.498 0 0 1 .653-.653l11 4.5a.5.5 0 0 1-.074.949l-4.349 1.041a1 1 0 0 0-.74.739l-1.04 4.35a.5.5 0 0 1-.95.074z`,key:`s0h3yz`}]]),L=b(`palette`,[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]),R=b(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),z=b(`type`,[[`path`,{d:`M12 4v16`,key:`1654pz`}],[`path`,{d:`M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2`,key:`e0r10z`}],[`path`,{d:`M9 20h6`,key:`s66wpe`}]]),B=t(e(),1),V=n(),ge={name:`产品计划.md`,cid:`bafy-demo-note`,path:`产品/计划`,content:`# MostBox Demo`,size:2048,type:`file`,created_at:17645472e5,updated_at:17645472e5},_e=[{path:`产品`,name:`产品`,parentPath:``,depth:0},{path:`产品/计划`,name:`计划`,parentPath:`产品`,depth:1},{path:`产品/摘录`,name:`摘录`,parentPath:`产品`,depth:1},{path:`灵感`,name:`灵感`,parentPath:``,depth:0}];function H({id:e,icon:t,eyebrow:n,title:r,description:i,children:a}){return(0,V.jsxs)(`section`,{className:`demo-section`,id:e,children:[(0,V.jsxs)(`div`,{className:`demo-section-heading`,children:[(0,V.jsx)(`div`,{className:`demo-section-icon`,children:t}),(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`p`,{className:`demo-eyebrow`,children:n}),(0,V.jsx)(`h2`,{children:r}),(0,V.jsx)(`p`,{children:i})]})]}),a]})}function U({title:e,children:t,className:n=``}){return(0,V.jsxs)(`article`,{className:n?`demo-surface ${n}`:`demo-surface`,children:[(0,V.jsx)(`h3`,{children:e}),t]})}function W(){let[e,t]=(0,B.useState)(`r2`),[n,b]=(0,B.useState)(`今晚同步频道状态`),[W,G]=(0,B.useState)(!1),[ve,K]=(0,B.useState)(!1),[ye,q]=(0,B.useState)(!1),[be,J]=(0,B.useState)(!1),[xe,Y]=(0,B.useState)(!1),[Se,X]=(0,B.useState)([]),Z=x(e=>e.isDarkMode),Ce=x(e=>e.setIsDarkMode),we=x(e=>e.openConnectModal),Q=O(e=>e.openLoginModal);function $(e,t){X(n=>[...n.slice(-4),{id:Date.now(),type:e,message:t}])}function Te(e){X(t=>t.filter(t=>t.id!==e))}return(0,V.jsxs)(`main`,{className:`demo-page`,children:[(0,V.jsxs)(`header`,{className:`demo-topbar`,children:[(0,V.jsxs)(`a`,{className:`mkt-nav-logo`,href:`/`,children:[(0,V.jsx)(pe,{size:18}),(0,V.jsx)(`span`,{children:`MOST PEOPLE`})]}),(0,V.jsx)(`button`,{type:`button`,className:`mkt-theme-toggle`,onClick:()=>Ce(!Z),"aria-label":`切换主题`,title:`切换主题`,children:Z?(0,V.jsx)(ne,{size:16}):(0,V.jsx)(te,{size:16})})]}),(0,V.jsx)(`section`,{className:`demo-hero`,children:(0,V.jsxs)(`div`,{className:`demo-hero-copy`,children:[(0,V.jsx)(`p`,{className:`demo-eyebrow`,children:`Shared Component Library`}),(0,V.jsx)(`h1`,{children:`共享组件检查页`}),(0,V.jsx)(`p`,{children:`把基础样式、全局 UI 片段和已迁入 components 的共享组件按用途集中展示, 方便以后改 UI 时直接从这里检查联动效果。`})]})}),(0,V.jsx)(H,{id:`foundation`,icon:(0,V.jsx)(L,{size:18}),eyebrow:`Foundation`,title:`基础样式`,description:`全局按钮、输入框、开关、分段控件和状态反馈。`,children:(0,V.jsxs)(`div`,{className:`demo-grid demo-grid-two`,children:[(0,V.jsx)(U,{title:`默认按钮`,children:(0,V.jsxs)(`div`,{className:`demo-control-row`,children:[(0,V.jsxs)(`button`,{className:`btn btn-primary`,children:[(0,V.jsx)(i,{size:16}),`Primary`]}),(0,V.jsxs)(`button`,{className:`btn btn-secondary`,children:[(0,V.jsx)(c,{size:16}),`Secondary`]}),(0,V.jsxs)(`button`,{className:`btn btn-ghost`,children:[(0,V.jsx)(R,{size:16}),`Ghost`]}),(0,V.jsxs)(`button`,{className:`btn btn-danger`,children:[(0,V.jsx)(y,{size:16}),`Danger`]}),(0,V.jsx)(`button`,{className:`btn btn-primary`,disabled:!0,children:`Disabled`}),(0,V.jsxs)(`button`,{type:`button`,className:`ui-action-dashed`,children:[(0,V.jsx)(v,{size:16}),`Dashed`]})]})}),(0,V.jsx)(U,{title:`小号按钮`,children:(0,V.jsxs)(`div`,{className:`demo-control-row`,children:[(0,V.jsxs)(`button`,{className:`btn btn-sm btn-primary`,children:[(0,V.jsx)(i,{size:14}),`Primary`]}),(0,V.jsxs)(`button`,{className:`btn btn-sm btn-secondary`,children:[(0,V.jsx)(c,{size:14}),`Secondary`]}),(0,V.jsxs)(`button`,{className:`btn btn-sm btn-ghost`,children:[(0,V.jsx)(R,{size:14}),`Ghost`]}),(0,V.jsxs)(`button`,{className:`btn btn-sm btn-danger`,children:[(0,V.jsx)(y,{size:14}),`Danger`]}),(0,V.jsx)(`button`,{className:`btn btn-sm btn-icon`,"aria-label":`小号图标按钮`,children:(0,V.jsx)(P,{size:14})}),(0,V.jsx)(`button`,{className:`btn btn-sm btn-primary`,disabled:!0,children:`Disabled`}),(0,V.jsxs)(`button`,{type:`button`,className:`ui-action-dashed ui-action-dashed-sm`,children:[(0,V.jsx)(v,{size:14}),`Dashed`]})]})}),(0,V.jsx)(U,{title:`输入控件`,children:(0,V.jsxs)(`div`,{className:`demo-input-grid`,children:[(0,V.jsx)(`input`,{className:`input`,value:`标准输入框`,readOnly:!0}),(0,V.jsx)(`input`,{className:`input input-compact`,value:`紧凑输入框`,readOnly:!0}),(0,V.jsx)(`input`,{className:`input input-pill`,value:`胶囊输入框`,readOnly:!0}),(0,V.jsx)(`textarea`,{className:`textarea`,value:`多行输入框`,rows:3,readOnly:!0}),(0,V.jsxs)(`div`,{className:`ui-input-control`,children:[(0,V.jsx)(ae,{className:`ui-input-icon`,size:15}),(0,V.jsx)(`input`,{className:`input input-compact`,placeholder:`带图标搜索`,readOnly:!0})]})]})}),(0,V.jsx)(U,{title:`开关、分段与徽标`,children:(0,V.jsxs)(`div`,{className:`demo-stack`,children:[(0,V.jsxs)(`label`,{className:`setting-switch`,children:[(0,V.jsx)(`span`,{children:`显示 #地址后四位`}),(0,V.jsx)(`input`,{type:`checkbox`,defaultChecked:!0})]}),(0,V.jsxs)(`label`,{className:`setting-switch`,children:[(0,V.jsx)(`span`,{children:`自动同步`}),(0,V.jsx)(`input`,{type:`checkbox`})]}),(0,V.jsxs)(`div`,{className:`ui-segmented-control download-source-tabs demo-download-source-tabs`,role:`tablist`,"aria-label":`下载来源`,children:[(0,V.jsxs)(`button`,{type:`button`,className:e===`r2`?`ui-segmented-option download-source-tab is-active`:`ui-segmented-option download-source-tab`,role:`tab`,"aria-selected":e===`r2`,onClick:()=>t(`r2`),children:[(0,V.jsx)(a,{size:15}),`R2`]}),(0,V.jsxs)(`button`,{type:`button`,className:e===`github`?`ui-segmented-option download-source-tab is-active`:`ui-segmented-option download-source-tab`,role:`tab`,"aria-selected":e===`github`,onClick:()=>t(`github`),children:[(0,V.jsx)(o,{size:15}),`GitHub`]})]}),(0,V.jsxs)(`div`,{className:`demo-control-row`,children:[(0,V.jsxs)(`span`,{className:`ui-badge success`,children:[(0,V.jsx)(`span`,{className:`status-dot success`}),`已连接`]}),(0,V.jsxs)(`span`,{className:`ui-badge warning`,children:[(0,V.jsx)(`span`,{className:`status-dot warning`}),`检测中`]}),(0,V.jsxs)(`span`,{className:`ui-badge danger`,children:[(0,V.jsx)(`span`,{className:`status-dot danger`}),`不可用`]}),(0,V.jsxs)(`span`,{className:`ui-badge info`,children:[(0,V.jsx)(`span`,{className:`status-dot info`}),`已就绪`]})]})]})})]})}),(0,V.jsx)(H,{id:`brand`,icon:(0,V.jsx)(z,{size:18}),eyebrow:`Brand`,title:`品牌与导航`,description:`Logo、营销导航和页脚放在独立预览面板里,避免和 demo 容器互相挤压。`,children:(0,V.jsxs)(`div`,{className:`demo-grid demo-brand-grid`,children:[(0,V.jsx)(U,{title:`LogoIcon`,children:(0,V.jsxs)(`div`,{className:`demo-logo-row`,children:[(0,V.jsx)(f,{size:24}),(0,V.jsx)(f,{size:36}),(0,V.jsx)(f,{size:52})]})}),(0,V.jsx)(U,{title:`Nav`,className:`demo-nav-preview`,children:(0,V.jsx)(A,{})}),(0,V.jsx)(U,{title:`Footer`,className:`demo-footer-preview`,children:(0,V.jsx)(k,{})})]})}),(0,V.jsx)(H,{id:`feedback`,icon:(0,V.jsx)(I,{size:18}),eyebrow:`Feedback`,title:`弹窗与反馈`,description:`弹窗、Toast、连接和登录入口都使用按钮触发,页面加载时不主动打开。`,children:(0,V.jsx)(U,{title:`触发式组件`,children:(0,V.jsxs)(`div`,{className:`demo-control-row`,children:[(0,V.jsxs)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:()=>G(!0),children:[(0,V.jsx)(me,{size:16}),`ModalOverlay`]}),(0,V.jsxs)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:()=>K(!0),children:[(0,V.jsx)(y,{size:16}),`ConfirmModal`]}),(0,V.jsxs)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:()=>q(!0),children:[(0,V.jsx)(z,{size:16}),`InputModal`]}),(0,V.jsxs)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:()=>$(`info`,`这是一条本地 demo toast`),children:[(0,V.jsx)(P,{size:16}),`Toast`]}),(0,V.jsxs)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:we,children:[(0,V.jsx)(fe,{size:16}),`ConnectModal`]}),(0,V.jsxs)(`button`,{type:`button`,className:`btn btn-secondary`,onClick:Q,children:[(0,V.jsx)(F,{size:16}),`UserLoginModal`]})]})})}),(0,V.jsx)(H,{id:`patterns`,icon:(0,V.jsx)(R,{size:18}),eyebrow:`Patterns`,title:`全局样式片段`,description:`页面里反复复用的全局 class 和组合形态。`,children:(0,V.jsxs)(`div`,{className:`demo-grid demo-grid-two`,children:[(0,V.jsx)(U,{title:`文件行`,children:(0,V.jsxs)(`div`,{className:`demo-stack`,children:[(0,V.jsx)(_,{attachment:{kind:`text`,cid:`bafy-demo-text`,fileName:`demo-preview.txt`,link:`most://bafy-demo-text?filename=demo-preview.txt`,size:12697},status:`available`}),(0,V.jsx)(_,{attachment:{kind:`video`,cid:`bafy-demo-video`,fileName:`movie-sample.mp4`,link:`most://bafy-demo-video?filename=movie-sample.mp4`,size:0},status:`checking`})]})}),(0,V.jsx)(U,{title:`空状态`,children:(0,V.jsxs)(`div`,{className:`ui-empty-state demo-empty-preview`,children:[(0,V.jsx)(`div`,{className:`ui-empty-icon`,children:(0,V.jsx)(d,{size:28})}),(0,V.jsx)(`h4`,{className:`ui-empty-title`,children:`暂无消息`}),(0,V.jsx)(`p`,{className:`ui-empty-desc`,children:`开始聊天或选择一个频道。`})]})}),(0,V.jsx)(U,{title:`列表与元信息`,children:(0,V.jsxs)(`div`,{className:`demo-stack`,children:[(0,V.jsx)(`article`,{className:`ui-list-item active`,children:(0,V.jsxs)(`button`,{type:`button`,className:`ui-list-item-main`,children:[(0,V.jsx)(`span`,{className:`ui-list-icon`,children:(0,V.jsx)(s,{size:18})}),(0,V.jsxs)(`span`,{className:`ui-list-copy`,children:[(0,V.jsx)(`span`,{className:`ui-list-title`,children:`产品计划.md`}),(0,V.jsx)(`span`,{className:`ui-list-desc`,children:`CID、下载和做种说明`})]}),(0,V.jsx)(`span`,{className:`ui-list-meta`,children:`今天`})]})}),(0,V.jsx)(`article`,{className:`ui-list-item`,children:(0,V.jsxs)(`button`,{type:`button`,className:`ui-list-item-main`,children:[(0,V.jsx)(`span`,{className:`ui-list-icon warning`,children:(0,V.jsx)(r,{size:18})}),(0,V.jsxs)(`span`,{className:`ui-list-copy`,children:[(0,V.jsx)(`span`,{className:`ui-list-title`,children:`归档`}),(0,V.jsx)(`span`,{className:`ui-list-desc`,children:`文件夹`})]}),(0,V.jsx)(`span`,{className:`ui-list-meta`,children:`12 篇`})]})}),(0,V.jsx)(`div`,{className:`ui-meta-box`,children:`频道 ID:general`}),(0,V.jsx)(`div`,{className:`ui-empty-inline`,children:`暂无成员`})]})}),(0,V.jsx)(U,{title:`通知、标签与代码`,children:(0,V.jsxs)(`div`,{className:`demo-stack`,children:[(0,V.jsxs)(`p`,{className:`ui-notice success`,children:[(0,V.jsx)(i,{size:14}),`同步完成,所有内容已更新。`]}),(0,V.jsxs)(`p`,{className:`ui-notice warning`,children:[(0,V.jsx)(ue,{size:14}),`节点正在检测中,请稍候。`]}),(0,V.jsxs)(`ul`,{className:`ui-chip-list demo-chip-preview`,children:[(0,V.jsx)(`li`,{className:`ui-chip`,children:`MostBox`}),(0,V.jsx)(`li`,{className:`ui-chip`,children:`P2P`}),(0,V.jsx)(`li`,{className:`ui-chip`,children:`CID`}),(0,V.jsx)(`li`,{className:`ui-chip`,children:`Hyperdrive`})]}),(0,V.jsx)(`code`,{className:`ui-code-box`,children:`most://bafy-demo-cid?filename=demo.txt`}),(0,V.jsxs)(`div`,{className:`ui-peer-info demo-peer-info`,children:[(0,V.jsx)(`span`,{className:`peer-dot`}),(0,V.jsx)(`span`,{className:`peer-id`,children:`12D3KooW...demo`}),(0,V.jsx)(de,{size:14})]})]})})]})}),(0,V.jsx)(H,{id:`p2p-chat`,icon:(0,V.jsx)(d,{size:18}),eyebrow:`P2P Chat`,title:`P2P 聊天控件`,description:`频道列表、消息气泡、附件消息、输入栏和成员网格都与真实聊天页共用组件。`,children:(0,V.jsxs)(`div`,{className:`demo-grid demo-grid-two`,children:[(0,V.jsx)(U,{title:`频道列表项`,children:(0,V.jsxs)(`div`,{className:`demo-chat-sidebar-preview`,children:[(0,V.jsx)(g,{active:!0,title:`general`}),(0,V.jsx)(g,{title:`design-review`}),(0,V.jsx)(g,{title:`launch-room`,onLeave:()=>$(`info`,`退出频道控件示例`)}),(0,V.jsxs)(`button`,{type:`button`,className:`ui-action-dashed`,children:[(0,V.jsx)(v,{size:16}),`加入频道`]})]})}),(0,V.jsx)(U,{title:`消息气泡`,children:(0,V.jsxs)(`div`,{className:`chat-messages demo-chat-messages-preview`,children:[(0,V.jsx)(p,{variant:`other`,avatarSrc:S(`peer-demo`),author:`Most Peer`,time:`20:16`,children:(0,V.jsx)(h,{children:`节点已在线,可以开始同步频道消息。`})}),(0,V.jsx)(p,{variant:`self`,avatarSrc:S(`self-demo`),author:`Raina`,time:`20:18`,children:(0,V.jsx)(h,{children:`收到,我把控件收进 demo。`})}),(0,V.jsx)(p,{variant:`other`,avatarSrc:S(`file-demo`),author:`Most Peer`,time:`20:19`,children:(0,V.jsx)(m,{children:(0,V.jsx)(_,{attachment:{kind:`image`,cid:`bafy-chat-demo-image`,fileName:`chat-assets/channel-preview.png`,link:`most://bafy-chat-demo-image?filename=channel-preview.png`,size:186420},status:`available`})})})]})}),(0,V.jsx)(U,{title:`消息输入栏`,className:`demo-chat-composer-card`,children:(0,V.jsx)(re,{message:n,placeholder:`输入消息...`,onMessageChange:b,onSend:()=>$(`success`,`发送:${n}`),onSelectAttachmentFiles:()=>$(`info`,`图片、视频和文件选择控件示例`)})}),(0,V.jsx)(U,{title:`频道成员`,children:(0,V.jsxs)(`div`,{className:`demo-stack`,children:[(0,V.jsx)(ie,{members:[{id:`raina-demo`,name:`Raina`,avatarSrc:S(`raina-demo`)},{id:`peer-a-demo`,name:`Alice#1A2B`,avatarSrc:S(`peer-a-demo`)},{id:`peer-b-demo`,name:`Bob#3C4D`,avatarSrc:S(`peer-b-demo`)}]}),(0,V.jsx)(`div`,{className:`ui-meta-box channel-detail-value channel-detail-mono`,children:`8acdf33076e075168bf889b21d21665b`})]})})]})}),(0,V.jsx)(H,{id:`shared`,icon:(0,V.jsx)(s,{size:18}),eyebrow:`Shared Components`,title:`共享组件`,description:`已迁入 components 的页面组件,只展示外观和轻交互。`,children:(0,V.jsxs)(`div`,{className:`demo-grid demo-grid-two`,children:[(0,V.jsx)(U,{title:`Web3 小组件`,children:(0,V.jsxs)(`div`,{className:`demo-stack`,children:[(0,V.jsx)(se,{title:`Ed25519 公钥`,icon:(0,V.jsx)(y,{size:18}),children:(0,V.jsxs)(`div`,{className:`mono-row`,children:[(0,V.jsx)(`code`,{className:`mono`,children:`ed25519-demo-public-key`}),(0,V.jsx)(oe,{text:`ed25519-demo-public-key`})]})}),(0,V.jsx)(ce,{icon:(0,V.jsx)(F,{size:32}),message:`请输入用户名和密码以查看身份信息`})]})}),(0,V.jsx)(U,{title:`PEM 与复制`,className:`demo-pem-preview`,children:(0,V.jsx)(le,{label:`demo.pub`,filename:`demo.pub`,pem:`-----BEGIN PUBLIC KEY-----
2
- MOSTBOXDEMO
3
- -----END PUBLIC KEY-----`})}),(0,V.jsxs)(U,{title:`文件管理卡片`,children:[(0,V.jsxs)(`div`,{className:`demo-app-card-grid`,children:[(0,V.jsx)(ee,{folder:{name:`图片`,path:`图片`},onClick:()=>$(`info`,`FolderCard demo`)}),(0,V.jsx)(l,{file:{cid:`bafy-demo-file`,fileName:`图片/demo.png`,starred:!0},isSelected:!0,onSelect:()=>$(`info`,`FileCard select`),onPreview:()=>$(`info`,`FileCard preview`)})]}),(0,V.jsxs)(`button`,{type:`button`,className:`btn btn-secondary demo-move-trigger`,onClick:()=>J(!0),children:[(0,V.jsx)(r,{size:16}),`MoveModal`]})]}),(0,V.jsx)(U,{title:`笔记组件`,children:(0,V.jsxs)(`div`,{className:`demo-note-shell`,children:[(0,V.jsxs)(`div`,{className:`demo-note-header`,children:[(0,V.jsx)(`span`,{children:`笔记`}),(0,V.jsx)(M,{sync:{action:null,status:`synced`,statusLabel:`已同步`,hasConflict:!1,uploadNow:async()=>!0,restoreFromCloud:async()=>!0,exportLocalBackup:()=>$(`info`,`本地导出`),importLocalBackup:()=>$(`info`,`本地导入`)}})]}),(0,V.jsx)(`div`,{className:`sidebar demo-note-sidebar`,children:(0,V.jsx)(N,{children:(0,V.jsx)(`div`,{className:`sidebar-empty-state`,children:(0,V.jsx)(`p`,{children:`NoteSidebar 已迁入 components`})})})}),(0,V.jsxs)(`button`,{type:`button`,className:`btn btn-secondary demo-move-trigger`,onClick:()=>Y(!0),children:[(0,V.jsx)(r,{size:16}),`NoteMoveModal`]})]})})]})}),Se.map((e,t)=>(0,V.jsx)(he,{message:e.message,type:e.type,index:t,onDone:()=>Te(e.id)},e.id)),W&&(0,V.jsx)(C,{onClose:()=>G(!1),children:(0,V.jsxs)(`div`,{className:`demo-basic-modal`,onClick:e=>e.stopPropagation(),children:[(0,V.jsx)(`h3`,{children:`ModalOverlay`}),(0,V.jsx)(`p`,{children:`这是基础容器示例,用来检查玻璃背景、居中和关闭行为。`}),(0,V.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>G(!1),children:`关闭`})]})}),ve&&(0,V.jsx)(D,{title:`确认弹窗示例`,message:`用于检查标题、正文、按钮和危险态之外的默认确认状态。`,confirmText:`确认`,onConfirm:()=>{K(!1),$(`success`,`ConfirmModal 已确认`)},onClose:()=>K(!1)}),ye&&(0,V.jsx)(T,{title:`输入弹窗示例`,placeholder:`输入任意文本`,confirmText:`保存`,defaultValue:`MostBox`,onConfirm:e=>{q(!1),$(`success`,`InputModal: ${e}`)},onClose:()=>q(!1),validate:e=>e.length<2?`至少输入 2 个字符`:``}),be&&(0,V.jsx)(u,{items:[{cid:`bafy-demo-file`}],allFolders:[{name:`图片`,path:`图片`},{name:`壁纸`,path:`图片/壁纸`},{name:`文档`,path:`文档`}],currentPath:`图片`,onMove:e=>{J(!1),$(`success`,`MoveModal: ${e||`根目录`}`)},onClose:()=>J(!1)}),xe&&(0,V.jsx)(j,{target:ge,directories:_e,onMove:e=>{Y(!1),$(`success`,`NoteMoveModal: ${e||`全部笔记`}`)},onClose:()=>Y(!1)}),(0,V.jsx)(w,{}),(0,V.jsx)(E,{})]})}var G=W;export{G as component};
@@ -1,9 +0,0 @@
1
- import{C as e,Ft as t,N as n,P as r,_ as i,j as a,jt as o,m as s,o as ee,r as te,y as ne}from"./dist-CbTzBiwL.js";import{a as re,c,s as ie}from"./dist-zyJb88Zz.js";import{n as l,r as ae,t as oe}from"./dist-C-Tg23jc.js";var se=1,u=194,d=195,ce=196,f=197,le=198,ue=199,de=200,fe=2,p=3,m=201,h=24,pe=25,me=49,he=50,ge=55,_e=56,ve=57,ye=59,be=60,xe=61,Se=62,Ce=63,we=65,Te=238,Ee=71,De=241,Oe=242,ke=243,Ae=244,g=245,_=246,v=247,y=248,b=72,x=249,S=250,C=251,je=252,Me=253,Ne=254,Pe=255,Fe=256,Ie=73,Le=77,Re=263,ze=112,Be=130,Ve=151,He=152,Ue=155,w=10,T=13,E=32,D=9,O=35,We=40,Ge=46,k=123,A=125,j=39,M=34,N=92,Ke=111,qe=120,Je=78,Ye=117,Xe=85,Ze=new Set([pe,me,he,Re,we,Be,_e,ve,Te,Se,Ce,b,Ie,Le,be,xe,Ve,He,Ue,ze]);function P(e){return e==w||e==T}function F(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}var Qe=new l((e,t)=>{let n;if(e.next<0)e.acceptToken(ue);else if(t.context.flags&I)P(e.next)&&e.acceptToken(le,1);else if(((n=e.peek(-1))<0||P(n))&&t.canShift(f)){let t=0;for(;e.next==E||e.next==D;)e.advance(),t++;(e.next==w||e.next==T||e.next==O)&&e.acceptToken(f,-t)}else P(e.next)&&e.acceptToken(ce,1)},{contextual:!0}),$e=new l((e,t)=>{let n=t.context;if(n.flags)return;let r=e.peek(-1);if(r==w||r==T){let t=0,r=0;for(;;){if(e.next==E)t++;else if(e.next==D)t+=8-t%8;else break;e.advance(),r++}t!=n.indent&&e.next!=w&&e.next!=T&&e.next!=O&&(t<n.indent?e.acceptToken(d,-r):e.acceptToken(u))}}),I=1,L=2,R=4,z=8,B=16,V=32;function H(e,t,n){this.parent=e,this.indent=t,this.flags=n,this.hash=(e?e.hash+e.hash<<8:0)+t+(t<<4)+n+(n<<6)}var et=new H(null,0,0);function tt(e){let t=0;for(let n=0;n<e.length;n++)t+=e.charCodeAt(n)==D?8-t%8:1;return t}var U=new Map([[De,0],[Oe,R],[ke,z],[Ae,12],[g,B],[_,20],[v,24],[y,28],[x,V],[S,36],[C,40],[je,44],[Me,48],[Ne,52],[Pe,56],[Fe,60]].map(([e,t])=>[e,t|L])),nt=new oe({start:et,reduce(e,t,n,r){return e.flags&I&&Ze.has(t)||(t==Ee||t==b)&&e.flags&L?e.parent:e},shift(e,t,n,r){return t==u?new H(e,tt(r.read(r.pos,n.pos)),0):t==d?e.parent:t==h||t==ge||t==ye||t==p?new H(e,0,I):U.has(t)?new H(e,0,U.get(t)|e.flags&I):e},hash(e){return e.hash}}),rt=new l(e=>{for(let t=0;t<5;t++){if(e.next!=`print`.charCodeAt(t))return;e.advance()}if(!/\w/.test(String.fromCharCode(e.next)))for(let t=0;;t++){let n=e.peek(t);if(!(n==E||n==D)){n!=We&&n!=Ge&&n!=w&&n!=T&&n!=O&&e.acceptToken(se);return}}}),it=new l((e,t)=>{let{flags:n}=t.context,r=n&R?M:j,i=(n&z)>0,a=!(n&B),o=(n&V)>0,s=e.pos;for(;!(e.next<0);)if(o&&e.next==k)if(e.peek(1)==k)e.advance(2);else{if(e.pos==s){e.acceptToken(p,1);return}break}else if(a&&e.next==N){if(e.pos==s){e.advance();let t=e.next;t>=0&&(e.advance(),at(e,t)),e.acceptToken(fe);return}break}else if(e.next==N&&!a&&e.peek(1)>-1)e.advance(2);else if(e.next==r&&(!i||e.peek(1)==r&&e.peek(2)==r)){if(e.pos==s){e.acceptToken(m,i?3:1);return}break}else if(e.next==w){if(i)e.advance();else if(e.pos==s){e.acceptToken(m);return}break}else e.advance();e.pos>s&&e.acceptToken(de)});function at(e,t){if(t==Ke)for(let t=0;t<2&&e.next>=48&&e.next<=55;t++)e.advance();else if(t==qe)for(let t=0;t<2&&F(e.next);t++)e.advance();else if(t==Ye)for(let t=0;t<4&&F(e.next);t++)e.advance();else if(t==Xe)for(let t=0;t<8&&F(e.next);t++)e.advance();else if(t==Je&&e.next==k){for(e.advance();e.next>=0&&e.next!=A&&e.next!=j&&e.next!=M&&e.next!=w;)e.advance();e.next==A&&e.advance()}}var ot=n({'async "*" "**" FormatConversion FormatSpec':r.modifier,"for while if elif else try except finally return raise break continue with pass assert await yield match case":r.controlKeyword,"in not and or is del":r.operatorKeyword,"from def class global nonlocal lambda":r.definitionKeyword,import:r.moduleKeyword,"with as print":r.keyword,Boolean:r.bool,None:r.null,VariableName:r.variableName,"CallExpression/VariableName":r.function(r.variableName),"FunctionDefinition/VariableName":r.function(r.definition(r.variableName)),"ClassDefinition/VariableName":r.definition(r.className),PropertyName:r.propertyName,"CallExpression/MemberExpression/PropertyName":r.function(r.propertyName),Comment:r.lineComment,Number:r.number,String:r.string,FormatString:r.special(r.string),Escape:r.escape,UpdateOp:r.updateOperator,"ArithOp!":r.arithmeticOperator,BitOp:r.bitwiseOperator,CompareOp:r.compareOperator,AssignOp:r.definitionOperator,Ellipsis:r.punctuation,At:r.meta,"( )":r.paren,"[ ]":r.squareBracket,"{ }":r.brace,".":r.derefOperator,", ;":r.separator}),st={__proto__:null,await:44,or:54,and:56,in:60,not:62,is:64,if:70,else:72,lambda:76,yield:94,from:96,async:102,for:104,None:162,True:164,False:164,del:178,pass:182,break:186,continue:190,return:194,raise:202,import:206,as:208,global:212,nonlocal:214,assert:218,type:223,elif:236,while:240,try:246,except:248,finally:250,with:254,def:258,class:268,match:279,case:285},ct=ae.deserialize({version:14,states:"##jO`QeOOP$}OSOOO&WQtO'#HUOOQS'#Co'#CoOOQS'#Cp'#CpO'vQdO'#CnO*UQtO'#HTOOQS'#HU'#HUOOQS'#DU'#DUOOQS'#HT'#HTO*rQdO'#D_O+VQdO'#DfO+gQdO'#DjO+zOWO'#DuO,VOWO'#DvO.[QtO'#GuOOQS'#Gu'#GuO'vQdO'#GtO0ZQtO'#GtOOQS'#Eb'#EbO0rQdO'#EcOOQS'#Gs'#GsO0|QdO'#GrOOQV'#Gr'#GrO1XQdO'#FYOOQS'#G^'#G^O1^QdO'#FXOOQV'#IS'#ISOOQV'#Gq'#GqOOQV'#Fq'#FqQ`QeOOO'vQdO'#CqO1lQdO'#C}O1sQdO'#DRO2RQdO'#HYO2cQtO'#EVO'vQdO'#EWOOQS'#EY'#EYOOQS'#E['#E[OOQS'#E^'#E^O2wQdO'#E`O3_QdO'#EdO3rQdO'#EfO3zQtO'#EfO1XQdO'#EiO0rQdO'#ElO1XQdO'#EnO0rQdO'#EtO0rQdO'#EwO4VQdO'#EyO4^QdO'#FOO4iQdO'#EzO0rQdO'#FOO1XQdO'#FQO1XQdO'#FVO4nQdO'#F[P4uOdO'#GpPOOO)CBd)CBdOOQS'#Ce'#CeOOQS'#Cf'#CfOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Cl'#ClO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO5TQdO'#DoOOQS,5:Y,5:YO5hQdO'#HdOOQS,5:],5:]O5uQ!fO,5:]O5zQtO,59YO1lQdO,59bO1lQdO,59bO1lQdO,59bO8jQdO,59bO8oQdO,59bO8vQdO,59jO8}QdO'#HTO:TQdO'#HSOOQS'#HS'#HSOOQS'#D['#D[O:lQdO,59aO'vQdO,59aO:zQdO,59aOOQS,59y,59yO;PQdO,5:RO'vQdO,5:ROOQS,5:Q,5:QO;_QdO,5:QO;dQdO,5:XO'vQdO,5:XO'vQdO,5:VOOQS,5:U,5:UO;uQdO,5:UO;zQdO,5:WOOOW'#Fy'#FyO<POWO,5:aOOQS,5:a,5:aO<[QdO'#HwOOOW'#Dw'#DwOOOW'#Fz'#FzO<lOWO,5:bOOQS,5:b,5:bOOQS'#F}'#F}O<zQtO,5:iO?lQtO,5=`O@VQ#xO,5=`O@vQtO,5=`OOQS,5:},5:}OA_QeO'#GWOBqQdO,5;^OOQV,5=^,5=^OB|QtO'#IPOCkQdO,5;tOOQS-E:[-E:[OOQV,5;s,5;sO4dQdO'#FQOOQV-E9o-E9oOCsQtO,59]OEzQtO,59iOFeQdO'#HVOFpQdO'#HVO1XQdO'#HVOF{QdO'#DTOGTQdO,59mOGYQdO'#HZO'vQdO'#HZO0rQdO,5=tOOQS,5=t,5=tO0rQdO'#EROOQS'#ES'#ESOGwQdO'#GPOHXQdO,58|OHXQdO,58|O*xQdO,5:oOHgQtO'#H]OOQS,5:r,5:rOOQS,5:z,5:zOHzQdO,5;OOI]QdO'#IOO1XQdO'#H}OOQS,5;Q,5;QOOQS'#GT'#GTOIqQtO,5;QOJPQdO,5;QOJUQdO'#IQOOQS,5;T,5;TOJdQdO'#H|OOQS,5;W,5;WOJuQdO,5;YO4iQdO,5;`O4iQdO,5;cOJ}QtO'#ITO'vQdO'#ITOKXQdO,5;eO4VQdO,5;eO0rQdO,5;jO1XQdO,5;lOK^QeO'#EuOLjQgO,5;fO!!kQdO'#IUO4iQdO,5;jO!!vQdO,5;lO!#OQdO,5;qO!#ZQtO,5;vO'vQdO,5;vPOOO,5=[,5=[P!#bOSO,5=[P!#jOdO,5=[O!&bQtO1G.jO!&iQtO1G.jO!)YQtO1G.jO!)dQtO1G.jO!+}QtO1G.jO!,bQtO1G.jO!,uQdO'#HcO!-TQtO'#GuO0rQdO'#HcO!-_QdO'#HbOOQS,5:Z,5:ZO!-gQdO,5:ZO!-lQdO'#HeO!-wQdO'#HeO!.[QdO,5>OOOQS'#Ds'#DsOOQS1G/w1G/wOOQS1G.|1G.|O!/[QtO1G.|O!/cQtO1G.|O1lQdO1G.|O!0OQdO1G/UOOQS'#DZ'#DZO0rQdO,59tOOQS1G.{1G.{O!0VQdO1G/eO!0gQdO1G/eO!0oQdO1G/fO'vQdO'#H[O!0tQdO'#H[O!0yQtO1G.{O!1ZQdO,59iO!2aQdO,5=zO!2qQdO,5=zO!2yQdO1G/mO!3OQtO1G/mOOQS1G/l1G/lO!3`QdO,5=uO!4VQdO,5=uO0rQdO1G/qO!4tQdO1G/sO!4yQtO1G/sO!5ZQtO1G/qOOQS1G/p1G/pOOQS1G/r1G/rOOOW-E9w-E9wOOQS1G/{1G/{O!5kQdO'#HxO0rQdO'#HxO!5|QdO,5>cOOOW-E9x-E9xOOQS1G/|1G/|OOQS-E9{-E9{O!6[Q#xO1G2zO!6{QtO1G2zO'vQdO,5<jOOQS,5<j,5<jOOQS-E9|-E9|OOQS,5<r,5<rOOQS-E:U-E:UOOQV1G0x1G0xO1XQdO'#GRO!7dQtO,5>kOOQS1G1`1G1`O!8RQdO1G1`OOQS'#DV'#DVO0rQdO,5=qOOQS,5=q,5=qO!8WQdO'#FrO!8cQdO,59oO!8kQdO1G/XO!8uQtO,5=uOOQS1G3`1G3`OOQS,5:m,5:mO!9fQdO'#GtOOQS,5<k,5<kOOQS-E9}-E9}O!9wQdO1G.hOOQS1G0Z1G0ZO!:VQdO,5=wO!:gQdO,5=wO0rQdO1G0jO0rQdO1G0jO!:xQdO,5>jO!;ZQdO,5>jO1XQdO,5>jO!;lQdO,5>iOOQS-E:R-E:RO!;qQdO1G0lO!;|QdO1G0lO!<RQdO,5>lO!<aQdO,5>lO!<oQdO,5>hO!=VQdO,5>hO!=hQdO'#EpO0rQdO1G0tO!=sQdO1G0tO!=xQgO1G0zO!AvQgO1G0}O!EqQdO,5>oO!E{QdO,5>oO!FTQtO,5>oO0rQdO1G1PO!F_QdO1G1PO4iQdO1G1UO!!vQdO1G1WOOQV,5;a,5;aO!FdQfO,5;aO!FiQgO1G1QO!JjQdO'#GZO4iQdO1G1QO4iQdO1G1QO!JzQdO,5>pO!KXQdO,5>pO1XQdO,5>pOOQV1G1U1G1UO!KaQdO'#FSO!KrQ!fO1G1WO!KzQdO1G1WOOQV1G1]1G1]O4iQdO1G1]O!LPQdO1G1]O!LXQdO'#F^OOQV1G1b1G1bO!#ZQtO1G1bPOOO1G2v1G2vP!L^OSO1G2vOOQS,5=},5=}OOQS'#Dp'#DpO0rQdO,5=}O!LfQdO,5=|O!LyQdO,5=|OOQS1G/u1G/uO!MRQdO,5>PO!McQdO,5>PO!MkQdO,5>PO!NOQdO,5>PO!N`QdO,5>POOQS1G3j1G3jOOQS7+$h7+$hO!8kQdO7+$pO#!RQdO1G.|O#!YQdO1G.|OOQS1G/`1G/`OOQS,5<`,5<`O'vQdO,5<`OOQS7+%P7+%PO#!aQdO7+%POOQS-E9r-E9rOOQS7+%Q7+%QO#!qQdO,5=vO'vQdO,5=vOOQS7+$g7+$gO#!vQdO7+%PO##OQdO7+%QO##TQdO1G3fOOQS7+%X7+%XO##eQdO1G3fO##mQdO7+%XOOQS,5<_,5<_O'vQdO,5<_O##rQdO1G3aOOQS-E9q-E9qO#$iQdO7+%]OOQS7+%_7+%_O#$wQdO1G3aO#%fQdO7+%_O#%kQdO1G3gO#%{QdO1G3gO#&TQdO7+%]O#&YQdO,5>dO#&sQdO,5>dO#&sQdO,5>dOOQS'#Dx'#DxO#'UO&jO'#DzO#'aO`O'#HyOOOW1G3}1G3}O#'fQdO1G3}O#'nQdO1G3}O#'yQ#xO7+(fO#(jQtO1G2UP#)TQdO'#GOOOQS,5<m,5<mOOQS-E:P-E:POOQS7+&z7+&zOOQS1G3]1G3]OOQS,5<^,5<^OOQS-E9p-E9pOOQS7+$s7+$sO#)bQdO,5=`O#){QdO,5=`O#*^QtO,5<aO#*qQdO1G3cOOQS-E9s-E9sOOQS7+&U7+&UO#+RQdO7+&UO#+aQdO,5<nO#+uQdO1G4UOOQS-E:Q-E:QO#,WQdO1G4UOOQS1G4T1G4TOOQS7+&W7+&WO#,iQdO7+&WOOQS,5<p,5<pO#,tQdO1G4WOOQS-E:S-E:SOOQS,5<l,5<lO#-SQdO1G4SOOQS-E:O-E:OO1XQdO'#EqO#-jQdO'#EqO#-uQdO'#IRO#-}QdO,5;[OOQS7+&`7+&`O0rQdO7+&`O#.SQgO7+&fO!JmQdO'#GXO4iQdO7+&fO4iQdO7+&iO#2QQtO,5<tO'vQdO,5<tO#2[QdO1G4ZOOQS-E:W-E:WO#2fQdO1G4ZO4iQdO7+&kO0rQdO7+&kOOQV7+&p7+&pO!KrQ!fO7+&rO!KzQdO7+&rO`QeO1G0{OOQV-E:X-E:XO4iQdO7+&lO4iQdO7+&lOOQV,5<u,5<uO#2nQdO,5<uO!JmQdO,5<uOOQV7+&l7+&lO#2yQgO7+&lO#6tQdO,5<vO#7PQdO1G4[OOQS-E:Y-E:YO#7^QdO1G4[O#7fQdO'#IWO#7tQdO'#IWO1XQdO'#IWOOQS'#IW'#IWO#8PQdO'#IVOOQS,5;n,5;nO#8XQdO,5;nO0rQdO'#FUOOQV7+&r7+&rO4iQdO7+&rOOQV7+&w7+&wO4iQdO7+&wO#8^QfO,5;xOOQV7+&|7+&|POOO7+(b7+(bO#8cQdO1G3iOOQS,5<c,5<cO#8qQdO1G3hOOQS-E9u-E9uO#9UQdO,5<dO#9aQdO,5<dO#9tQdO1G3kOOQS-E9v-E9vO#:UQdO1G3kO#:^QdO1G3kO#:nQdO1G3kO#:UQdO1G3kOOQS<<H[<<H[O#:yQtO1G1zOOQS<<Hk<<HkP#;WQdO'#FtO8vQdO1G3bO#;eQdO1G3bO#;jQdO<<HkOOQS<<Hl<<HlO#;zQdO7+)QOOQS<<Hs<<HsO#<[QtO1G1yP#<{QdO'#FsO#=YQdO7+)RO#=jQdO7+)RO#=rQdO<<HwO#=wQdO7+({OOQS<<Hy<<HyO#>nQdO,5<bO'vQdO,5<bOOQS-E9t-E9tOOQS<<Hw<<HwOOQS,5<g,5<gO0rQdO,5<gO#>sQdO1G4OOOQS-E9y-E9yO#?^QdO1G4OO<[QdO'#H{OOOO'#D{'#D{OOOO'#F|'#F|O#?oO&jO,5:fOOOW,5>e,5>eOOOW7+)i7+)iO#?zQdO7+)iO#@SQdO1G2zO#@mQdO1G2zP'vQdO'#FuO0rQdO<<IpO1XQdO1G2YP1XQdO'#GSO#AOQdO7+)pO#AaQdO7+)pOOQS<<Ir<<IrP1XQdO'#GUP0rQdO'#GQOOQS,5;],5;]O#ArQdO,5>mO#BQQdO,5>mOOQS1G0v1G0vOOQS<<Iz<<IzOOQV-E:V-E:VO4iQdO<<JQOOQV,5<s,5<sO4iQdO,5<sOOQV<<JQ<<JQOOQV<<JT<<JTO#BYQtO1G2`P#BdQdO'#GYO#BkQdO7+)uO#BuQgO<<JVO4iQdO<<JVOOQV<<J^<<J^O4iQdO<<J^O!KrQ!fO<<J^O#FpQgO7+&gOOQV<<JW<<JWO#FzQgO<<JWOOQV1G2a1G2aO1XQdO1G2aO#JuQdO1G2aO4iQdO<<JWO1XQdO1G2bP0rQdO'#G[O#KQQdO7+)vO#K_QdO7+)vOOQS'#FT'#FTO0rQdO,5>rO#KgQdO,5>rO#KrQdO,5>rO#K}QdO,5>qO#L`QdO,5>qOOQS1G1Y1G1YOOQS,5;p,5;pOOQV<<Jc<<JcO#LhQdO1G1dOOQS7+)T7+)TP#LmQdO'#FwO#L}QdO1G2OO#MbQdO1G2OO#MrQdO1G2OP#M}QdO'#FxO#N[QdO7+)VO#NlQdO7+)VO#NlQdO7+)VO#NtQdO7+)VO$ UQdO7+(|O8vQdO7+(|OOQSAN>VAN>VO$ oQdO<<LmOOQSAN>cAN>cO0rQdO1G1|O$!PQtO1G1|P$!ZQdO'#FvOOQS1G2R1G2RP$!hQdO'#F{O$!uQdO7+)jO$#`QdO,5>gOOOO-E9z-E9zOOOW<<MT<<MTO$#nQdO7+(fOOQSAN?[AN?[OOQS7+'t7+'tO$$XQdO<<M[OOQS,5<q,5<qO$$jQdO1G4XOOQS-E:T-E:TOOQVAN?lAN?lOOQV1G2_1G2_O4iQdOAN?qO$$xQgOAN?qOOQVAN?xAN?xO4iQdOAN?xOOQV<<JR<<JRO4iQdOAN?rO4iQdO7+'{OOQV7+'{7+'{O1XQdO7+'{OOQVAN?rAN?rOOQS7+'|7+'|O$(sQdO<<MbOOQS1G4^1G4^O0rQdO1G4^OOQS,5<w,5<wO$)QQdO1G4]OOQS-E:Z-E:ZOOQU'#G_'#G_O$)cQfO7+'OO$)nQdO'#F_O$*uQdO7+'jO$+VQdO7+'jOOQS7+'j7+'jO$+bQdO<<LqO$+rQdO<<LqO$+rQdO<<LqO$+zQdO'#H^OOQS<<Lh<<LhO$,UQdO<<LhOOQS7+'h7+'hOOQS'#D|'#D|OOOO1G4R1G4RO$,oQdO1G4RO$,wQdO1G4RP!=hQdO'#GVOOQVG25]G25]O4iQdOG25]OOQVG25dG25dOOQVG25^G25^OOQV<<Kg<<KgO4iQdO<<KgOOQS7+)x7+)xP$-SQdO'#G]OOQU-E:]-E:]OOQV<<Jj<<JjO$-vQtO'#FaOOQS'#Fc'#FcO$.WQdO'#FbO$.xQdO'#FbOOQS'#Fb'#FbO$.}QdO'#IYO$)nQdO'#FiO$)nQdO'#FiO$/fQdO'#FjO$)nQdO'#FkO$/mQdO'#IZOOQS'#IZ'#IZO$0[QdO,5;yOOQS<<KU<<KUO$0dQdO<<KUO$0tQdOANB]O$1UQdOANB]O$1^QdO'#H_OOQS'#H_'#H_O1sQdO'#DcO$1wQdO,5=xOOQSANBSANBSOOOO7+)m7+)mO$2`QdO7+)mOOQVLD*wLD*wOOQVANARANARO5uQ!fO'#GaO$2hQtO,5<SO$)nQdO'#FmOOQS,5<W,5<WOOQS'#Fd'#FdO$3YQdO,5;|O$3_QdO,5;|OOQS'#Fg'#FgO$)nQdO'#G`O$4PQdO,5<QO$4kQdO,5>tO$4{QdO,5>tO1XQdO,5<PO$5^QdO,5<TO$5cQdO,5<TO$)nQdO'#I[O$5hQdO'#I[O$5mQdO,5<UOOQS,5<V,5<VO0rQdO'#FpOOQU1G1e1G1eO4iQdO1G1eOOQSAN@pAN@pO$5rQdOG27wO$6SQdO,59}OOQS1G3d1G3dOOOO<<MX<<MXOOQS,5<{,5<{OOQS-E:_-E:_O$6XQtO'#FaO$6`QdO'#I]O$6nQdO'#I]O$6vQdO,5<XOOQS1G1h1G1hO$6{QdO1G1hO$7QQdO,5<zOOQS-E:^-E:^O$7lQdO,5=OO$8TQdO1G4`OOQS-E:b-E:bOOQS1G1k1G1kOOQS1G1o1G1oO$8eQdO,5>vO$)nQdO,5>vOOQS1G1p1G1pOOQS,5<[,5<[OOQU7+'P7+'PO$+zQdO1G/iO$)nQdO,5<YO$8sQdO,5>wO$8zQdO,5>wOOQS1G1s1G1sOOQS7+'S7+'SP$)nQdO'#GdO$9SQdO1G4bO$9^QdO1G4bO$9fQdO1G4bOOQS7+%T7+%TO$9tQdO1G1tO$:SQtO'#FaO$:ZQdO,5<}OOQS,5<},5<}O$:iQdO1G4cOOQS-E:a-E:aO$)nQdO,5<|O$:pQdO,5<|O$:uQdO7+)|OOQS-E:`-E:`O$;PQdO7+)|O$)nQdO,5<ZP$)nQdO'#GcO$;XQdO1G2hO$)nQdO1G2hP$;gQdO'#GbO$;nQdO<<MhO$;xQdO1G1uO$<WQdO7+(SO8vQdO'#C}O8vQdO,59bO8vQdO,59bO8vQdO,59bO$<fQtO,5=`O8vQdO1G.|O0rQdO1G/XO0rQdO7+$pP$<yQdO'#GOO'vQdO'#GtO$=WQdO,59bO$=]QdO,59bO$=dQdO,59mO$=iQdO1G/UO1sQdO'#DRO8vQdO,59j",stateData:"$>S~O%cOS%^OSSOS%]PQ~OPdOVaOfoOhYOopOs!POvqO!PrO!Q{O!T!SO!U!RO!XZO!][O!h`O!r`O!s`O!t`O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#l!QO#o!TO#s!UO#u!VO#z!WO#}hO$P!XO%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~O%]!YO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%j![O%k!]O%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aO~Ok%xXl%xXm%xXn%xXo%xXp%xXs%xXz%xX{%xX!x%xX#g%xX%[%xX%_%xX%z%xXg%xX!T%xX!U%xX%{%xX!W%xX![%xX!Q%xX#[%xXt%xX!m%xX~P%SOfoOhYO!XZO!][O!h`O!r`O!s`O!t`O%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~Oz%wX{%wX#g%wX%[%wX%_%wX%z%wX~Ok!pOl!qOm!oOn!oOo!rOp!sOs!tO!x%wX~P)pOV!zOg!|Oo0cOv0qO!PrO~P'vOV#OOo0cOv0qO!W#PO~P'vOV#SOa#TOo0cOv0qO![#UO~P'vOQ#XO%`#XO%a#ZO~OQ#^OR#[O%`#^O%a#`O~OV%iX_%iXa%iXh%iXk%iXl%iXm%iXn%iXo%iXp%iXs%iXz%iX!X%iX!f%iX%j%iX%k%iX%l%iX%m%iX%n%iX%o%iX%p%iX%q%iX%r%iX%s%iXg%iX!T%iX!U%iX~O&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O{%iX!x%iX#g%iX%[%iX%_%iX%z%iX%{%iX!W%iX![%iX!Q%iX#[%iXt%iX!m%iX~P,eOz#dO{%hX!x%hX#g%hX%[%hX%_%hX%z%hX~Oo0cOv0qO~P'vO#g#gO%[#iO%_#iO~O%uWO~O!T#nO#u!VO#z!WO#}hO~OopO~P'vOV#sOa#tO%uWO{wP~OV#xOo0cOv0qO!Q#yO~P'vO{#{O!x$QO%z#|O#g!yX%[!yX%_!yX~OV#xOo0cOv0qO#g#SX%[#SX%_#SX~P'vOo0cOv0qO#g#WX%[#WX%_#WX~P'vOh$WO%uWO~O!f$YO!r$YO%uWO~OV$eO~P'vO!U$gO#s$hO#u$iO~O{$jO~OV$qO~P'vOS$sO%[$rO%_$rO%c$tO~OV$}Oa$}Og%POo0cOv0qO~P'vOo0cOv0qO{%SO~P'vO&Y%UO~Oa!bOh!iO!X!kO!f!mOVba_bakbalbambanbaobapbasbazba{ba!xba#gba%[ba%_ba%jba%kba%lba%mba%nba%oba%pba%qba%rba%sba%zbagba!Tba!Uba%{ba!Wba![ba!Qba#[batba!mba~On%ZO~Oo%ZO~P'vOo0cO~P'vOk0eOl0fOm0dOn0dOo0mOp0nOs0rOg%wX!T%wX!U%wX%{%wX!W%wX![%wX!Q%wX#[%wX!m%wX~P)pO%{%]Og%vXz%vX!T%vX!U%vX!W%vX{%vX~Og%_Oz%`O!T%dO!U%cO~Og%_O~Oz%gO!T%dO!U%cO!W&SX~O!W%kO~Oz%lO{%nO!T%dO!U%cO![%}X~O![%rO~O![%sO~OQ#XO%`#XO%a%uO~OV%wOo0cOv0qO!PrO~P'vOQ#^OR#[O%`#^O%a%zO~OV!qa_!qaa!qah!qak!qal!qam!qan!qao!qap!qas!qaz!qa{!qa!X!qa!f!qa!x!qa#g!qa%[!qa%_!qa%j!qa%k!qa%l!qa%m!qa%n!qa%o!qa%p!qa%q!qa%r!qa%s!qa%z!qag!qa!T!qa!U!qa%{!qa!W!qa![!qa!Q!qa#[!qat!qa!m!qa~P#yOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P%SOV&OOopOvqO{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P'vOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#g$zX%[$zX%_$zX~P'vO#g#gO%[&TO%_&TO~O!f&UOh&sX%[&sXz&sX#[&sX#g&sX%_&sX#Z&sXg&sX~Oh!iO%[&WO~Okealeameaneaoeapeaseazea{ea!xea#gea%[ea%_ea%zeagea!Tea!Uea%{ea!Wea![ea!Qea#[eatea!mea~P%SOsqazqa{qa#gqa%[qa%_qa%zqa~Ok!pOl!qOm!oOn!oOo!rOp!sO!xqa~PEcO%z&YOz%yX{%yX~O%uWOz%yX{%yX~Oz&]O{wX~O{&_O~Oz%lO#g%}X%[%}X%_%}Xg%}X{%}X![%}X!m%}X%z%}X~OV0lOo0cOv0qO!PrO~P'vO%z#|O#gUa%[Ua%_Ua~Oz&hO#g&PX%[&PX%_&PXn&PX~P%SOz&kO!Q&jO#g#Wa%[#Wa%_#Wa~Oz&lO#[&nO#g&rX%[&rX%_&rXg&rX~O!f$YO!r$YO#Z&qO%uWO~O#Z&qO~Oz&sO#g&tX%[&tX%_&tX~Oz&uO#g&pX%[&pX%_&pX{&pX~O!X&wO%z&xO~Oz&|On&wX~P%SOn'PO~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO%['UO~P'vOt'YO#p'WO#q'XOP#naV#naf#nah#nao#nas#nav#na!P#na!Q#na!T#na!U#na!X#na!]#na!h#na!r#na!s#na!t#na!{#na!}#na#P#na#R#na#T#na#X#na#Z#na#^#na#_#na#a#na#c#na#l#na#o#na#s#na#u#na#z#na#}#na$P#na%X#na%o#na%p#na%t#na%u#na&Z#na&[#na&]#na&^#na&_#na&`#na&a#na&b#na&c#na&d#na&e#na&f#na&g#na&h#na&i#na&j#na%Z#na%_#na~Oz'ZO#[']O{&xX~Oh'_O!X&wO~Oh!iO{$jO!X&wO~O{'eO~P%SO%['hO%_'hO~OS'iO%['hO%_'hO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%k!]O~P!#uO%kWi~P!#uOV!aO_!aOa!bOh!iO!X!kO!f!mO%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%m!_O%n!_O~P!&pO%mWi%nWi~P!&pOa!bOh!iO!X!kO!f!mOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%mWi%nWi%oWi%pWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~OV!aO_!aO%q!aO%r!aO%s!aO~P!)nOVWi_Wi%qWi%rWi%sWi~P!)nO!T%dO!U%cOg&VXz&VX~O%z'kO%{'kO~P,eOz'mOg&UX~Og'oO~Oz'pO{'rO!W&XX~Oo0cOv0qOz'pO{'sO!W&XX~P'vO!W'uO~Om!oOn!oOo!rOp!sOkjisjizji{ji!xji#gji%[ji%_ji%zji~Ol!qO~P!.aOlji~P!.aOk0eOl0fOm0dOn0dOo0mOp0nO~Ot'wO~P!/jOV'|Og'}Oo0cOv0qO~P'vOg'}Oz(OO~Og(QO~O!U(SO~Og(TOz(OO!T%dO!U%cO~P%SOk0eOl0fOm0dOn0dOo0mOp0nOgqa!Tqa!Uqa%{qa!Wqa![qa!Qqa#[qatqa!mqa~PEcOV'|Oo0cOv0qO!W&Sa~P'vOz(WO!W&Sa~O!W(XO~Oz(WO!T%dO!U%cO!W&Sa~P%SOV(]Oo0cOv0qO![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~P'vOz(^O![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~O![(aO~Oz(^O!T%dO!U%cO![%}a~P%SOz(dO!T%dO!U%cO![&Ta~P%SOz(gO{&lX![&lX!m&lX%z&lX~O{(kO![(mO!m(nO%z(jO~OV&OOopOvqO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~P'vOz(pO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~O!f&UOh&sa%[&saz&sa#[&sa#g&sa%_&sa#Z&sag&sa~O%[(uO~OV#sOa#tO%uWO~Oz&]O{wa~OopOvqO~P'vOz(^O#g%}a%[%}a%_%}ag%}a{%}a![%}a!m%}a%z%}a~P%SOz(zO#g%hX%[%hX%_%hX%z%hX~O%z#|O#gUi%[Ui%_Ui~O#g&Pa%[&Pa%_&Pan&Pa~P'vOz(}O#g&Pa%[&Pa%_&Pan&Pa~O%uWO#g&ra%[&ra%_&rag&ra~Oz)SO#g&ra%[&ra%_&rag&ra~Og)VO~OV)WOh$WO%uWO~O#Z)XO~O%uWO#g&ta%[&ta%_&ta~Oz)ZO#g&ta%[&ta%_&ta~Oo0cOv0qO#g&pa%[&pa%_&pa{&pa~P'vOz)^O#g&pa%[&pa%_&pa{&pa~OV)`Oa)`O%uWO~O%z)eO~Ot)hO#j)gOP#hiV#hif#hih#hio#his#hiv#hi!P#hi!Q#hi!T#hi!U#hi!X#hi!]#hi!h#hi!r#hi!s#hi!t#hi!{#hi!}#hi#P#hi#R#hi#T#hi#X#hi#Z#hi#^#hi#_#hi#a#hi#c#hi#l#hi#o#hi#s#hi#u#hi#z#hi#}#hi$P#hi%X#hi%o#hi%p#hi%t#hi%u#hi&Z#hi&[#hi&]#hi&^#hi&_#hi&`#hi&a#hi&b#hi&c#hi&d#hi&e#hi&f#hi&g#hi&h#hi&i#hi&j#hi%Z#hi%_#hi~Ot)iOP#kiV#kif#kih#kio#kis#kiv#ki!P#ki!Q#ki!T#ki!U#ki!X#ki!]#ki!h#ki!r#ki!s#ki!t#ki!{#ki!}#ki#P#ki#R#ki#T#ki#X#ki#Z#ki#^#ki#_#ki#a#ki#c#ki#l#ki#o#ki#s#ki#u#ki#z#ki#}#ki$P#ki%X#ki%o#ki%p#ki%t#ki%u#ki&Z#ki&[#ki&]#ki&^#ki&_#ki&`#ki&a#ki&b#ki&c#ki&d#ki&e#ki&f#ki&g#ki&h#ki&i#ki&j#ki%Z#ki%_#ki~OV)kOn&wa~P'vOz)lOn&wa~Oz)lOn&wa~P%SOn)pO~O%Y)tO~Ot)wO#p'WO#q)vOP#niV#nif#nih#nio#nis#niv#ni!P#ni!Q#ni!T#ni!U#ni!X#ni!]#ni!h#ni!r#ni!s#ni!t#ni!{#ni!}#ni#P#ni#R#ni#T#ni#X#ni#Z#ni#^#ni#_#ni#a#ni#c#ni#l#ni#o#ni#s#ni#u#ni#z#ni#}#ni$P#ni%X#ni%o#ni%p#ni%t#ni%u#ni&Z#ni&[#ni&]#ni&^#ni&_#ni&`#ni&a#ni&b#ni&c#ni&d#ni&e#ni&f#ni&g#ni&h#ni&i#ni&j#ni%Z#ni%_#ni~OV)zOo0cOv0qO{$jO~P'vOo0cOv0qO{&xa~P'vOz*OO{&xa~OV*SOa*TOg*WO%q*UO%uWO~O{$jO&{*YO~Oh'_O~Oh!iO{$jO~O%[*_O~O%[*aO%_*aO~OV$}Oa$}Oo0cOv0qOg&Ua~P'vOz*dOg&Ua~Oo0cOv0qO{*gO!W&Xa~P'vOz*hO!W&Xa~Oo0cOv0qOz*hO{*kO!W&Xa~P'vOo0cOv0qOz*hO!W&Xa~P'vOz*hO{*kO!W&Xa~Om0dOn0dOo0mOp0nOgjikjisjizji!Tji!Uji%{ji!Wji{ji![ji#gji%[ji%_ji!Qji#[jitji!mji%zji~Ol0fO~P!NkOlji~P!NkOV'|Og*pOo0cOv0qO~P'vOn*rO~Og*pOz*tO~Og*uO~OV'|Oo0cOv0qO!W&Si~P'vOz*vO!W&Si~O!W*wO~OV(]Oo0cOv0qO![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~P'vOz*zO!T%dO!U%cO![&Ti~Oz*}O![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~O![+OO~Oa+QOo0cOv0qO![&Ti~P'vOz*zO![&Ti~O![+SO~OV+UOo0cOv0qO{&la![&la!m&la%z&la~P'vOz+VO{&la![&la!m&la%z&la~O!]+YO&n+[O![!nX~O![+^O~O{(kO![+_O~O{(kO![+_O!m+`O~OV&OOopOvqO{%hq!x%hq#g%hq%[%hq%_%hq%z%hq~P'vOz$ri{$ri!x$ri#g$ri%[$ri%_$ri%z$ri~P%SOV&OOopOvqO~P'vOV&OOo0cOv0qO#g%ha%[%ha%_%ha%z%ha~P'vOz+aO#g%ha%[%ha%_%ha%z%ha~Oz$ia#g$ia%[$ia%_$ian$ia~P%SO#g&Pi%[&Pi%_&Pin&Pi~P'vOz+dO#g#Wq%[#Wq%_#Wq~O#[+eOz$va#g$va%[$va%_$vag$va~O%uWO#g&ri%[&ri%_&rig&ri~Oz+gO#g&ri%[&ri%_&rig&ri~OV+iOh$WO%uWO~O%uWO#g&ti%[&ti%_&ti~Oo0cOv0qO#g&pi%[&pi%_&pi{&pi~P'vO{#{Oz#eX!W#eX~Oz+mO!W&uX~O!W+oO~Ot+rO#j)gOP#hqV#hqf#hqh#hqo#hqs#hqv#hq!P#hq!Q#hq!T#hq!U#hq!X#hq!]#hq!h#hq!r#hq!s#hq!t#hq!{#hq!}#hq#P#hq#R#hq#T#hq#X#hq#Z#hq#^#hq#_#hq#a#hq#c#hq#l#hq#o#hq#s#hq#u#hq#z#hq#}#hq$P#hq%X#hq%o#hq%p#hq%t#hq%u#hq&Z#hq&[#hq&]#hq&^#hq&_#hq&`#hq&a#hq&b#hq&c#hq&d#hq&e#hq&f#hq&g#hq&h#hq&i#hq&j#hq%Z#hq%_#hq~On$|az$|a~P%SOV)kOn&wi~P'vOz+yOn&wi~Oz,TO{$jO#[,TO~O#q,VOP#nqV#nqf#nqh#nqo#nqs#nqv#nq!P#nq!Q#nq!T#nq!U#nq!X#nq!]#nq!h#nq!r#nq!s#nq!t#nq!{#nq!}#nq#P#nq#R#nq#T#nq#X#nq#Z#nq#^#nq#_#nq#a#nq#c#nq#l#nq#o#nq#s#nq#u#nq#z#nq#}#nq$P#nq%X#nq%o#nq%p#nq%t#nq%u#nq&Z#nq&[#nq&]#nq&^#nq&_#nq&`#nq&a#nq&b#nq&c#nq&d#nq&e#nq&f#nq&g#nq&h#nq&i#nq&j#nq%Z#nq%_#nq~O#[,WOz%Oa{%Oa~Oo0cOv0qO{&xi~P'vOz,YO{&xi~O{#{O%z,[Og&zXz&zX~O%uWOg&zXz&zX~Oz,`Og&yX~Og,bO~O%Y,eO~O!T%dO!U%cOg&Viz&Vi~OV$}Oa$}Oo0cOv0qOg&Ui~P'vO{,hOz$la!W$la~Oo0cOv0qO{,iOz$la!W$la~P'vOo0cOv0qO{*gO!W&Xi~P'vOz,lO!W&Xi~Oo0cOv0qOz,lO!W&Xi~P'vOz,lO{,oO!W&Xi~Og$hiz$hi!W$hi~P%SOV'|Oo0cOv0qO~P'vOn,qO~OV'|Og,rOo0cOv0qO~P'vOV'|Oo0cOv0qO!W&Sq~P'vOz$gi![$gi#g$gi%[$gi%_$gig$gi{$gi!m$gi%z$gi~P%SOV(]Oo0cOv0qO~P'vOa+QOo0cOv0qO![&Tq~P'vOz,sO![&Tq~O![,tO~OV(]Oo0cOv0qO![%}q#g%}q%[%}q%_%}qg%}q{%}q!m%}q%z%}q~P'vO{,uO~OV+UOo0cOv0qO{&li![&li!m&li%z&li~P'vOz,zO{&li![&li!m&li%z&li~O!]+YO&n+[O![!na~O{(kO![,}O~OV&OOo0cOv0qO#g%hi%[%hi%_%hi%z%hi~P'vOz-OO#g%hi%[%hi%_%hi%z%hi~O%uWO#g&rq%[&rq%_&rqg&rq~Oz-RO#g&rq%[&rq%_&rqg&rq~OV)`Oa)`O%uWO!W&ua~Oz-TO!W&ua~On$|iz$|i~P%SOV)kO~P'vOV)kOn&wq~P'vOt-XOP#myV#myf#myh#myo#mys#myv#my!P#my!Q#my!T#my!U#my!X#my!]#my!h#my!r#my!s#my!t#my!{#my!}#my#P#my#R#my#T#my#X#my#Z#my#^#my#_#my#a#my#c#my#l#my#o#my#s#my#u#my#z#my#}#my$P#my%X#my%o#my%p#my%t#my%u#my&Z#my&[#my&]#my&^#my&_#my&`#my&a#my&b#my&c#my&d#my&e#my&f#my&g#my&h#my&i#my&j#my%Z#my%_#my~O%Z-]O%_-]O~P`O#q-^OP#nyV#nyf#nyh#nyo#nys#nyv#ny!P#ny!Q#ny!T#ny!U#ny!X#ny!]#ny!h#ny!r#ny!s#ny!t#ny!{#ny!}#ny#P#ny#R#ny#T#ny#X#ny#Z#ny#^#ny#_#ny#a#ny#c#ny#l#ny#o#ny#s#ny#u#ny#z#ny#}#ny$P#ny%X#ny%o#ny%p#ny%t#ny%u#ny&Z#ny&[#ny&]#ny&^#ny&_#ny&`#ny&a#ny&b#ny&c#ny&d#ny&e#ny&f#ny&g#ny&h#ny&i#ny&j#ny%Z#ny%_#ny~Oz-aO{$jO#[-aO~Oo0cOv0qO{&xq~P'vOz-dO{&xq~O%z,[Og&zaz&za~O{#{Og&zaz&za~OV*SOa*TO%q*UO%uWOg&ya~Oz-hOg&ya~O$S-lO~OV$}Oa$}Oo0cOv0qO~P'vOo0cOv0qO{-mOz$li!W$li~P'vOo0cOv0qOz$li!W$li~P'vO{-mOz$li!W$li~Oo0cOv0qO{*gO~P'vOo0cOv0qO{*gO!W&Xq~P'vOz-pO!W&Xq~Oo0cOv0qOz-pO!W&Xq~P'vOs-sO!T%dO!U%cOg&Oq!W&Oq![&Oqz&Oq~P!/jOa+QOo0cOv0qO![&Ty~P'vOz$ji![$ji~P%SOa+QOo0cOv0qO~P'vOV+UOo0cOv0qO~P'vOV+UOo0cOv0qO{&lq![&lq!m&lq%z&lq~P'vO{(kO![-xO!m-yO%z-wO~OV&OOo0cOv0qO#g%hq%[%hq%_%hq%z%hq~P'vO%uWO#g&ry%[&ry%_&ryg&ry~OV)`Oa)`O%uWO!W&ui~Ot-}OP#m!RV#m!Rf#m!Rh#m!Ro#m!Rs#m!Rv#m!R!P#m!R!Q#m!R!T#m!R!U#m!R!X#m!R!]#m!R!h#m!R!r#m!R!s#m!R!t#m!R!{#m!R!}#m!R#P#m!R#R#m!R#T#m!R#X#m!R#Z#m!R#^#m!R#_#m!R#a#m!R#c#m!R#l#m!R#o#m!R#s#m!R#u#m!R#z#m!R#}#m!R$P#m!R%X#m!R%o#m!R%p#m!R%t#m!R%u#m!R&Z#m!R&[#m!R&]#m!R&^#m!R&_#m!R&`#m!R&a#m!R&b#m!R&c#m!R&d#m!R&e#m!R&f#m!R&g#m!R&h#m!R&i#m!R&j#m!R%Z#m!R%_#m!R~Oo0cOv0qO{&xy~P'vOV*SOa*TO%q*UO%uWOg&yi~O$S-lO%Z.VO%_.VO~OV.aOh._O!X.^O!].`O!h.YO!s.[O!t.[O%p.XO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O~Oo0cOv0qOz$lq!W$lq~P'vO{.fOz$lq!W$lq~Oo0cOv0qO{*gO!W&Xy~P'vOz.gO!W&Xy~Oo0cOv.kO~P'vOs-sO!T%dO!U%cOg&Oy!W&Oy![&Oyz&Oy~P!/jO{(kO![.nO~O{(kO![.nO!m.oO~OV*SOa*TO%q*UO%uWO~Oh.tO!f.rOz$TX#[$TX%j$TXg$TX~Os$TX{$TX!W$TX![$TX~P$-bO%o.vO%p.vOs$UXz$UX{$UX#[$UX%j$UX!W$UXg$UX![$UX~O!h.xO~Oz.|O#[/OO%j.yOs&|X{&|X!W&|Xg&|X~Oa/RO~P$)zOh.tOs&}Xz&}X{&}X#[&}X%j&}X!W&}Xg&}X![&}X~Os/VO{$jO~Oo0cOv0qOz$ly!W$ly~P'vOo0cOv0qO{*gO!W&X!R~P'vOz/ZO!W&X!R~Og&RXs&RX!T&RX!U&RX!W&RX![&RXz&RX~P!/jOs-sO!T%dO!U%cOg&Qa!W&Qa![&Qaz&Qa~O{(kO![/^O~O!f.rOh$[as$[az$[a{$[a#[$[a%j$[a!W$[ag$[a![$[a~O!h/eO~O%o.vO%p.vOs$Uaz$Ua{$Ua#[$Ua%j$Ua!W$Uag$Ua![$Ua~O%j.yOs$Yaz$Ya{$Ya#[$Ya!W$Yag$Ya![$Ya~Os&|a{&|a!W&|ag&|a~P$)nOz/jOs&|a{&|a!W&|ag&|a~O!W/mO~Og/mO~O{/oO~O![/pO~Oo0cOv0qO{*gO!W&X!Z~P'vO{/sO~O%z/tO~P$-bOz/uO#[/OO%j.yOg'PX~Oz/uOg'PX~Og/wO~O!h/xO~O#[/OOs%Saz%Sa{%Sa%j%Sa!W%Sag%Sa![%Sa~O#[/OO%j.yOs%Waz%Wa{%Wa!W%Wag%Wa~Os&|i{&|i!W&|ig&|i~P$)nOz/zO#[/OO%j.yO!['Oa~Og'Pa~P$)nOz0SOg'Pa~Oa0UO!['Oi~P$)zOz0WO!['Oi~Oz0WO#[/OO%j.yO!['Oi~O#[/OO%j.yOg$biz$bi~O%z0ZO~P$-bO#[/OO%j.yOg%Vaz%Va~Og'Pi~P$)nO{0^O~Oa0UO!['Oq~P$)zOz0`O!['Oq~O#[/OO%j.yOz%Ui![%Ui~Oa0UO~P$)zOa0UO!['Oy~P$)zO#[/OO%j.yOg$ciz$ci~O#[/OO%j.yOz%Uq![%Uq~Oz+aO#g%ha%[%ha%_%ha%z%ha~P%SOV&OOo0cOv0qO~P'vOn0hO~Oo0hO~P'vO{0iO~Ot0jO~P!/jO&]&Z&j&h&i&g&f&d&e&c&b&`&a&_&^&[%u~",goto:"!=j'QPPPPPP'RP'Z*s+[+t,_,y-fP.SP'Z.r.r'ZPPP'Z2[PPPPPP2[5PPP5PP7b7k=sPP=v>h>kPP'Z'ZPP>zPP'Z'ZPP'Z'Z'Z'Z'Z?O?w'ZP?zP@QDXGuGyPG|HWH['ZPPPH_Hk'RP'R'RP'RP'RP'RP'RP'R'R'RP'RPP'RPP'RP'RPHqH}IVPI^IdPI^PI^I^PPPI^PKrPK{LVL]KrPI^LfPI^PLmLsPLwM]MzNeLwLwNkNxLwLwLwLw! ^! d! g! l! o! y!!P!!]!!o!!u!#P!#V!#s!#y!$P!$Z!$a!$g!$y!%T!%Z!%a!%k!%q!%w!%}!&T!&Z!&e!&k!&u!&{!'U!'[!'k!'s!'}!(UPPPPPPPPPPP!([!(_!(e!(n!(x!)TPPPPPPPPPPPP!-u!/Z!3^!6oPP!6w!7W!7a!8Y!8P!8c!8i!8l!8o!8r!8z!9jPPPPPPPPPPPPPPPPP!9m!9q!9wP!:]!:a!:m!:v!;S!;j!;m!;p!;v!;|!<S!<VP!<_!<h!=d!=g]eOn#g$j)t,P'}`OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0r{!cQ#c#p$R$d$p%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g}!dQ#c#p$R$d$p$u%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!P!eQ#c#p$R$d$p$u$v%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!R!fQ#c#p$R$d$p$u$v$w%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!T!gQ#c#p$R$d$p$u$v$w$x%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!V!hQ#c#p$R$d$p$u$v$w$x$y%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!Z!hQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g'}TOTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0r&eVOYZ[dnprxy}!P!Q!U!i!k!o!p!q!s!t#[#d#g#y#{#}$Q$h$j$}%S%Z%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0n0r%oXOYZ[dnrxy}!P!Q!U!i!k#[#d#g#y#{#}$Q$h$j$}%S%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,s,u,w,y,z-O-d-f-m-p.f.g/V/Z0i0j0kQ#vqQ/[.kR0o0q't`OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rh#jhz{$W$Z&l&q)S)X+f+g-RW#rq&].k0qQ$]|Q$a!OQ$n!VQ$o!WW$|!i'm*d,gS&[#s#tQ'S$iQ(s&UQ)U&nU)Y&s)Z+jW)a&w+m-T-{Q*Q']W*R'_,`-h.TQ+l)`S,_*S*TQ-Q+eQ-_,TQ-c,WQ.R-al.W-l.^._.a.z.|/R/j/o/t/y0U0Z0^Q/S.`Q/a.tQ/l/OU0P/u0S0[X0V/z0W0_0`R&Z#r!_!wYZ!P!Q!k%S%`%g'p'r's(O(W)g*g*h*k*q*t*v,h,i,k,l,o-m-p.f.g/ZR%^!vQ!{YQ%x#[Q&d#}Q&g$QR,{+YT.j-s/s!Y!jQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v0gQ&X#kQ'c$oR*^'dR'l$|Q%V!mR/_.r'|_OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rS#a_#b!P.[-l.^._.`.a.t.z.|/R/j/o/t/u/y/z0S0U0W0Z0[0^0_0`'|_OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rT#a_#bT#^^#_R(o%xa(l%x(n(o+`,{-y-z.oT+[(k+]R-z,{Q$PsQ+l)aQ,^*RR-e,_X#}s$O$P&fQ&y$aQ'a$nQ'd$oR)s'SQ)b&wV-S+m-T-{ZgOn$j)t,PXkOn)t,PQ$k!TQ&z$bQ&{$cQ'^$mQ'b$oQ)q'RQ)x'WQ){'XQ)|'YQ*Z'`S*]'c'dQ+s)gQ+u)hQ+v)iQ+z)oS+|)r*[Q,Q)vQ,R)wS,S)y)zQ,d*^Q-V+rQ-W+tQ-Y+{S-Z+},OQ-`,UQ-b,VQ-|-XQ.O-[Q.P-^Q.Q-_Q.p-}Q.q.RQ/W.dR/r/XWkOn)t,PR#mjQ'`$nS)r'S'aR,O)sQ,]*RR-f,^Q*['`Q+})rR-[,OZiOjn)t,PQ'f$pR*`'gT-j,e-ku.c-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^t.c-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^Q/S.`X0V/z0W0_0`!P.Z-l.^._.`.a.t.z.|/R/j/o/t/u/y/z0S0U0W0Z0[0^0_0`Q.w.YR/f.xg.z.].{/b/i/n/|0O0Q0]0a0bu.b-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^X.u.W.b/a0PR/c.tV0R/u0S0[R/X.dQnOS#on,PR,P)tQ&^#uR(x&^S%m#R#wS(_%m(bT(b%p&`Q%a!yQ%h!}W(P%a%h(U(YQ(U%eR(Y%jQ&i$RR)O&iQ(e%qQ*{(`T+R(e*{Q'n%OR*e'nS'q%R%SY*i'q*j,m-q.hU*j'r's'tU,m*k*l*mS-q,n,oR.h-rQ#Y]R%t#YQ#_^R%y#_Q(h%vS+W(h+XR+X(iQ+](kR,|+]Q#b_R%{#bQ#ebQ%}#cW&Q#e%}({+bQ({&cR+b0gQ$OsS&e$O&fR&f$PQ&v$_R)_&vQ&V#jR(t&VQ&m$VS)T&m+hR+h)UQ$Z{R&p$ZQ&t$]R)[&tQ+n)bR-U+nQ#hfR&S#hQ)f&zR+q)fQ&}$dS)m&})nR)n'OQ'V$kR)u'VQ'[$lS*P'[,ZR,Z*QQ,a*VR-i,aWjOn)t,PR#ljQ-k,eR.U-kd.{.]/b/i/n/|0O0Q0]0a0bR/h.{U.s.W/a0PR/`.sQ/{/nS0X/{0YR0Y/|S/v/b/cR0T/vQ.}.]R/k.}R!ZPXmOn)t,PWlOn)t,PR'T$jYfOn$j)t,PR&R#g[sOn#g$j)t,PR&d#}&dQOYZ[dnprxy}!P!Q!U!i!k!o!p!q!s!t#[#d#g#y#{#}$Q$h$j$}%S%Z%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0n0rQ!nTQ#caQ#poU$Rt%c(SS$d!R$gQ$p!XQ$u!cQ$v!dQ$w!eQ$x!fQ$y!gQ$z!hQ%e!zQ%j#OQ%p#SQ%q#TQ&`#xQ'O$eQ'g$qQ(q&OU(|&h(}+cW)j&|)l+x+yQ*o'|Q*x(]Q+w)kQ,v+QR0g0lQ!yYQ!}ZQ$b!PQ$c!QQ%R!kQ't%S^'{%`%g(O(W*q*t*v^*f'p*h,k,l-p.g/ZQ*l'rQ*m'sQ+t)gQ,j*gQ,n*kQ-n,hQ-o,iQ-r,oQ.e-mR/Y.f[bOn#g$j)t,P!^!vYZ!P!Q!k%S%`%g'p'r's(O(W)g*g*h*k*q*t*v,h,i,k,l,o-m-p.f.g/ZQ#R[Q#fdS#wrxQ$UyW$_}$Q'P)pS$l!U$hW${!i'm*d,gS%v#[+Y`&P#d%|(p(r(z+a-O0kQ&a#yQ&b#{Q&c#}Q'j$}Q'z%^W([%l(^*y*}Q(`%nQ(i%wQ(v&ZS(y&_0iQ)P&jQ)Q&kU)]&u)^+kQ)d&xQ)y'WY)}'Z*O,X,Y-dQ*b'lS*n'w0jW+P(d*z,s,wW+T(g+V,y,zQ+p)eQ,U)zQ,c*YQ,x+UQ-P+dQ-e,]Q-v,uQ.S-fR/q/VhUOn#d#g$j%|&_'w(p(r)t,P%U!uYZ[drxy}!P!Q!U!i!k#[#y#{#}$Q$h$}%S%^%`%g%l%n%w&Z&j&k&u&x'P'W'Z'l'm'p'r's(O(W(^(d(g(z)^)e)g)p)z*O*Y*d*g*h*k*q*t*v*y*z*}+U+V+Y+a+d+k,X,Y,],g,h,i,k,l,o,s,u,w,y,z-O-d-f-m-p.f.g/V/Z0i0j0kQ#qpW%W!o!s0d0nQ%X!pQ%Y!qQ%[!tQ%f0cS'v%Z0hQ'x0eQ'y0fQ,p*rQ-u,qS.i-s/sR0p0rU#uq.k0qR(w&][cOn#g$j)t,PZ!xY#[#}$Q+YQ#W[Q#zrR$TxQ%b!yQ%i!}Q%o#RQ'j${Q(V%eQ(Z%jQ(c%pQ(f%qQ*|(`Q,f*bQ-t,pQ.m-uR/].lQ$StQ(R%cR*s(SQ.l-sR/}/sR#QZR#V[R%Q!iQ%O!iV*c'm*d,g!Z!lQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v0gR%T!kT#]^#_Q%x#[R,{+YQ(m%xS+_(n(oQ,}+`Q-x,{S.n-y-zR/^.oT+Z(k+]Q$`}Q&g$QQ)o'PR+{)pQ$XzQ)W&qR+i)XQ$XzQ&o$WQ)W&qR+i)XQ#khW$Vz$W&q)XQ$[{Q&r$ZZ)R&l)S+f+g-RR$^|R)c&wXlOn)t,PQ$f!RR'Q$gQ$m!UR'R$hR*X'_Q*V'_V-g,`-h.TQ.d-lQ/P.^R/Q._U.]-l.^._Q/U.aQ/b.tQ/g.zU/i.|/j/yQ/n/RQ/|/oQ0O/tU0Q/u0S0[Q0]0UQ0a0ZR0b0^R/T.`R/d.t",nodeNames:`⚠ print Escape { Comment Script AssignStatement * BinaryExpression BitOp BitOp BitOp BitOp ArithOp ArithOp @ ArithOp ** UnaryExpression ArithOp BitOp AwaitExpression await ) ( ParenthesizedExpression BinaryExpression or and CompareOp in not is UnaryExpression ConditionalExpression if else LambdaExpression lambda ParamList VariableName AssignOp , : NamedExpression AssignOp YieldExpression yield from TupleExpression ComprehensionExpression async for LambdaExpression ] [ ArrayExpression ArrayComprehensionExpression } { DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression CallExpression ArgList AssignOp MemberExpression . PropertyName Number String FormatString FormatReplacement FormatSelfDoc FormatConversion FormatSpec FormatReplacement FormatSelfDoc ContinuedString Ellipsis None Boolean TypeDef AssignOp UpdateStatement UpdateOp ExpressionStatement DeleteStatement del PassStatement pass BreakStatement break ContinueStatement continue ReturnStatement return YieldStatement PrintStatement RaiseStatement raise ImportStatement import as ScopeStatement global nonlocal AssertStatement assert TypeDefinition type TypeParamList TypeParam StatementGroup ; IfStatement Body elif WhileStatement while ForStatement TryStatement try except finally WithStatement with FunctionDefinition def ParamList AssignOp TypeDef ClassDefinition class DecoratedStatement Decorator At MatchStatement match MatchBody MatchClause case CapturePattern LiteralPattern ArithOp ArithOp AsPattern OrPattern LogicOp AttributePattern SequencePattern MappingPattern StarPattern ClassPattern PatternArgList KeywordPattern KeywordPattern Guard`,maxTerm:277,context:nt,nodeProps:[[`isolate`,-5,4,71,72,73,77,``],[`group`,-15,6,85,87,88,90,92,94,96,98,99,100,102,105,108,110,`Statement Statement`,-22,8,18,21,25,40,49,50,56,57,60,61,62,63,64,67,70,71,72,79,80,81,82,`Expression`,-10,114,116,119,121,122,126,128,133,135,138,`Statement`,-9,143,144,147,148,150,151,152,153,154,`Pattern`],[`openedBy`,23,`(`,54,`[`,58,`{`],[`closedBy`,24,`)`,55,`]`,59,`}`]],propSources:[ot],skippedNodes:[0,4],repeatNodeCount:34,tokenData:"!2|~R!`OX%TXY%oY[%T[]%o]p%Tpq%oqr'ars)Yst*xtu%Tuv,dvw-hwx.Uxy/tyz0[z{0r{|2S|}2p}!O3W!O!P4_!P!Q:Z!Q!R;k!R![>_![!]Do!]!^Es!^!_FZ!_!`Gk!`!aHX!a!b%T!b!cIf!c!dJU!d!eK^!e!hJU!h!i!#f!i!tJU!t!u!,|!u!wJU!w!x!.t!x!}JU!}#O!0S#O#P&o#P#Q!0j#Q#R!1Q#R#SJU#S#T%T#T#UJU#U#VK^#V#YJU#Y#Z!#f#Z#fJU#f#g!,|#g#iJU#i#j!.t#j#oJU#o#p!1n#p#q!1s#q#r!2a#r#s!2f#s$g%T$g;'SJU;'S;=`KW<%lOJU`%YT&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T`%lP;=`<%l%To%v]&n`%c_OX%TXY%oY[%T[]%o]p%Tpq%oq#O%T#O#P&o#P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To&tX&n`OY%TYZ%oZ]%T]^%o^#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc'f[&n`O!_%T!_!`([!`#T%T#T#U(r#U#f%T#f#g(r#g#h(r#h#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(cTmR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(yT!mR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk)aV&n`&[ZOr%Trs)vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk){V&n`Or%Trs*bs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk*iT&n`&^ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To+PZS_&n`OY*xYZ%TZ]*x]^%T^#o*x#o#p+r#p#q*x#q#r+r#r;'S*x;'S;=`,^<%lO*x_+wTS_OY+rZ]+r^;'S+r;'S;=`,W<%lO+r_,ZP;=`<%l+ro,aP;=`<%l*xj,kV%rQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-XT!xY&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-oV%lQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.]V&n`&ZZOw%Twx.rx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.wV&n`Ow%Twx/^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/eT&n`&]ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/{ThZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc0cTgR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk0yXVZ&n`Oz%Tz{1f{!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk1mVaR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk2ZV%oZ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc2wTzR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To3_W%pZ&n`O!_%T!_!`-Q!`!a3w!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Td4OT&{S&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk4fX!fQ&n`O!O%T!O!P5R!P!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5WV&n`O!O%T!O!P5m!P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5tT!rZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti6[a!hX&n`O!Q%T!Q![6T![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S6T#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti7fZ&n`O{%T{|8X|}%T}!O8X!O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8^V&n`O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8z]!hX&n`O!Q%T!Q![8s![!l%T!l!m9s!m#R%T#R#S8s#S#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti9zT!hX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk:bX%qR&n`O!P%T!P!Q:}!Q!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj;UV%sQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti;ro!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!d%T!d!e?q!e!g%T!g!h7a!h!l%T!l!m9s!m!q%T!q!rA]!r!z%T!z!{Bq!{#R%T#R#S>_#S#U%T#U#V?q#V#X%T#X#Y7a#Y#^%T#^#_9s#_#c%T#c#dA]#d#l%T#l#mBq#m#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti=xV&n`O!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti>fc!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S>_#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti?vY&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti@mY!hX&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiAbX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBUX!hX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBv]&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiCv]!hX&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToDvV{_&n`O!_%T!_!`E]!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TcEdT%{R&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkEzT#gZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkFbXmR&n`O!^%T!^!_F}!_!`([!`!a([!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjGUV%mQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkGrV%zZ&n`O!_%T!_!`([!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkH`WmR&n`O!_%T!_!`([!`!aHx!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjIPV%nQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkIoV_Q#}P&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToJ_]&n`&YS%uZO!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoKZP;=`<%lJUoKge&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!tJU!t!uLx!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#gLx#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoMRa&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUkN_V&n`&`ZOr%TrsNts#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkNyV&n`Or%Trs! `s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! gT&n`&bZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! }V&n`&_ZOw%Twx!!dx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!!iV&n`Ow%Twx!#Ox#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!#VT&n`&aZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!#oe&n`&YS%uZOr%Trs!%Qsw%Twx!&px!Q%T!Q![JU![!c%T!c!tJU!t!u!(`!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#g!(`#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!%XV&n`&dZOr%Trs!%ns#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!%sV&n`Or%Trs!&Ys#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&aT&n`&fZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&wV&n`&cZOw%Twx!'^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!'cV&n`Ow%Twx!'xx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!(PT&n`&eZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!(ia&n`&YS%uZOr%Trs!)nsw%Twx!+^x!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!)uV&n`&hZOr%Trs!*[s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*aV&n`Or%Trs!*vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*}T&n`&jZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!+eV&n`&gZOw%Twx!+zx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,PV&n`Ow%Twx!,fx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,mT&n`&iZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!-Vi&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!dJU!d!eLx!e!hJU!h!i!(`!i!}JU!}#R%T#R#SJU#S#T%T#T#UJU#U#VLx#V#YJU#Y#Z!(`#Z#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUo!.}a&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!0ZT!XZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc!0qT!WR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj!1XV%kQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!1sO!]~k!1zV%jR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!2fO![~i!2mT%tX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T",tokenizers:[rt,$e,Qe,it,0,1,2,3,4],topRules:{Script:[0,5]},specialized:[{term:221,get:e=>st[e]||-1}],tokenPrec:7668}),W=new t,G=new Set([`Script`,`Body`,`FunctionDefinition`,`ClassDefinition`,`LambdaExpression`,`ForStatement`,`MatchClause`]);function K(e){return(t,n,r)=>{if(r)return!1;let i=t.node.getChild(`VariableName`);return i&&n(i,e),!0}}var lt={FunctionDefinition:K(`function`),ClassDefinition:K(`class`),ForStatement(e,t,n){if(n){for(let n=e.node.firstChild;n;n=n.nextSibling)if(n.name==`VariableName`)t(n,`variable`);else if(n.name==`in`)break}},ImportStatement(e,t){let{node:n}=e,r=n.firstChild?.name==`from`;for(let e=n.getChild(`import`);e;e=e.nextSibling)e.name==`VariableName`&&e.nextSibling?.name!=`as`&&t(e,r?`variable`:`namespace`)},AssignStatement(e,t){for(let n=e.node.firstChild;n;n=n.nextSibling)if(n.name==`VariableName`)t(n,`variable`);else if(n.name==`:`||n.name==`AssignOp`)break},ParamList(e,t){for(let n=null,r=e.node.firstChild;r;r=r.nextSibling)r.name==`VariableName`&&(!n||!/\*|AssignOp/.test(n.name))&&t(r,`variable`),n=r},CapturePattern:K(`variable`),AsPattern:K(`variable`),__proto__:null};function q(e,t){let n=W.get(t);if(n)return n;let r=[],i=!0;function a(t,n){let i=e.sliceString(t.from,t.to);r.push({label:i,type:n})}return t.cursor(o.IncludeAnonymous).iterate(t=>{if(t.name){let e=lt[t.name];if(e&&e(t,a,i)||!i&&G.has(t.name))return!1;i=!1}else if(t.to-t.from>8192){for(let n of q(e,t.node))r.push(n);return!1}}),W.set(t,r),r}var J=/^[\w\xa1-\uffff][\w\d\xa1-\uffff]*$/,Y=[`String`,`FormatString`,`Comment`,`PropertyName`];function ut(e){let t=a(e.state).resolveInner(e.pos,-1);if(Y.indexOf(t.name)>-1)return null;let n=t.name==`VariableName`||t.to-t.from<20&&J.test(e.state.sliceDoc(t.from,t.to));if(!n&&!e.explicit)return null;let r=[];for(let n=t;n;n=n.parent)G.has(n.name)&&(r=r.concat(q(e.state.doc,n)));return{options:r,from:n?t.from:e.pos,validFor:J}}var X=[`__annotations__`,`__builtins__`,`__debug__`,`__doc__`,`__import__`,`__name__`,`__loader__`,`__package__`,`__spec__`,`False`,`None`,`True`].map(e=>({label:e,type:`constant`})).concat(`ArithmeticError.AssertionError.AttributeError.BaseException.BlockingIOError.BrokenPipeError.BufferError.BytesWarning.ChildProcessError.ConnectionAbortedError.ConnectionError.ConnectionRefusedError.ConnectionResetError.DeprecationWarning.EOFError.Ellipsis.EncodingWarning.EnvironmentError.Exception.FileExistsError.FileNotFoundError.FloatingPointError.FutureWarning.GeneratorExit.IOError.ImportError.ImportWarning.IndentationError.IndexError.InterruptedError.IsADirectoryError.KeyError.KeyboardInterrupt.LookupError.MemoryError.ModuleNotFoundError.NameError.NotADirectoryError.NotImplemented.NotImplementedError.OSError.OverflowError.PendingDeprecationWarning.PermissionError.ProcessLookupError.RecursionError.ReferenceError.ResourceWarning.RuntimeError.RuntimeWarning.StopAsyncIteration.StopIteration.SyntaxError.SyntaxWarning.SystemError.SystemExit.TabError.TimeoutError.TypeError.UnboundLocalError.UnicodeDecodeError.UnicodeEncodeError.UnicodeError.UnicodeTranslateError.UnicodeWarning.UserWarning.ValueError.Warning.ZeroDivisionError`.split(`.`).map(e=>({label:e,type:`type`}))).concat([`bool`,`bytearray`,`bytes`,`classmethod`,`complex`,`float`,`frozenset`,`int`,`list`,`map`,`memoryview`,`object`,`range`,`set`,`staticmethod`,`str`,`super`,`tuple`,`type`].map(e=>({label:e,type:`class`}))).concat(`abs.aiter.all.anext.any.ascii.bin.breakpoint.callable.chr.compile.delattr.dict.dir.divmod.enumerate.eval.exec.exit.filter.format.getattr.globals.hasattr.hash.help.hex.id.input.isinstance.issubclass.iter.len.license.locals.max.min.next.oct.open.ord.pow.print.property.quit.repr.reversed.round.setattr.slice.sorted.sum.vars.zip`.split(`.`).map(e=>({label:e,type:`function`}))),dt=[c("def ${name}(${params}):\n ${}",{label:`def`,detail:`function`,type:`keyword`}),c("for ${name} in ${collection}:\n ${}",{label:`for`,detail:`loop`,type:`keyword`}),c("while ${}:\n ${}",{label:`while`,detail:`loop`,type:`keyword`}),c(`try:
2
- \${}
3
- except \${error}:
4
- \${}`,{label:`try`,detail:`/ except block`,type:`keyword`}),c(`if \${}:
5
-
6
- `,{label:`if`,detail:`block`,type:`keyword`}),c(`if \${}:
7
- \${}
8
- else:
9
- \${}`,{label:`if`,detail:`/ else block`,type:`keyword`}),c("class ${name}:\n def __init__(self, ${params}):\n ${}",{label:`class`,detail:`definition`,type:`keyword`}),c("import ${module}",{label:`import`,detail:`statement`,type:`keyword`}),c("from ${module} import ${names}",{label:`from`,detail:`import`,type:`keyword`})],ft=ie(Y,re(X.concat(dt)));function Z(e){let{node:t,pos:n}=e,r=e.lineIndent(n,-1),i=null;for(;;){let a=t.childBefore(n);if(!a)break;if(a.name==`Comment`)n=a.from;else if(a.name==`Body`||a.name==`MatchBody`)e.baseIndentFor(a)+e.unit<=r&&(i=a),t=a;else if(a.name==`MatchClause`)t=a;else if(a.type.is(`Statement`))t=a;else break}return i}function Q(e,t){let n=e.baseIndentFor(t),r=e.lineAt(e.pos,-1),i=r.from+r.text.length;return/^\s*($|#)/.test(r.text)&&e.node.to<i+100&&!/\S/.test(e.state.sliceDoc(i,e.node.to))&&e.lineIndent(e.pos,-1)<=n||/^\s*(else:|elif |except |finally:|case\s+[^=:]+:)/.test(e.textAfter)&&e.lineIndent(e.pos,-1)>n?null:n+e.unit}var $=te.define({name:`python`,parser:ct.configure({props:[e.add({Body:e=>Q(e,/^\s*(#|$)/.test(e.textAfter)&&Z(e)||e.node)??e.continue(),MatchBody:e=>Q(e,Z(e)||e.node)??e.continue(),IfStatement:e=>/^\s*(else:|elif )/.test(e.textAfter)?e.baseIndent:e.continue(),"ForStatement WhileStatement":e=>/^\s*else:/.test(e.textAfter)?e.baseIndent:e.continue(),TryStatement:e=>/^\s*(except[ :]|finally:|else:)/.test(e.textAfter)?e.baseIndent:e.continue(),MatchStatement:e=>/^\s*case /.test(e.textAfter)?e.baseIndent+e.unit:e.continue(),"TupleExpression ComprehensionExpression ParamList ArgList ParenthesizedExpression":s({closing:`)`}),"DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression":s({closing:`}`}),"ArrayExpression ArrayComprehensionExpression":s({closing:`]`}),MemberExpression:e=>e.baseIndent+e.unit,"String FormatString":()=>null,Script:e=>{let t=Z(e);return(t&&Q(e,t))??e.continue()}}),ne.add({"ArrayExpression DictionaryExpression SetExpression TupleExpression":i,Body:(e,t)=>({from:e.from+1,to:e.to-(e.to==t.doc.length?0:1)}),"String FormatString":(e,t)=>({from:t.doc.lineAt(e.from).to,to:e.to})})]}),languageData:{closeBrackets:{brackets:[`(`,`[`,`{`,`'`,`"`,`'''`,`"""`],stringPrefixes:[`f`,`fr`,`rf`,`r`,`u`,`b`,`br`,`rb`,`F`,`FR`,`RF`,`R`,`U`,`B`,`BR`,`RB`]},commentTokens:{line:`#`},indentOnInput:/^\s*([\}\]\)]|else:|elif |except |finally:|case\s+[^:]*:?)$/}});function pt(){return new ee($,[$.data.of({autocomplete:ut}),$.data.of({autocomplete:ft})])}export{pt as python};
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{t as r}from"./cloud-CcPRoob1.js";import{t as i}from"./code-Dr6STnCn.js";import{t as a}from"./download-0rM8xVCe.js";import{K as o,U as s,W as c}from"./index-Cf23WD2V.js";var l=c(`apple`,[[`path`,{d:`M12 6.528V3a1 1 0 0 1 1-1h0`,key:`11qiee`}],[`path`,{d:`M18.237 21A15 15 0 0 0 22 11a6 6 0 0 0-10-4.472A6 6 0 0 0 2 11a15.1 15.1 0 0 0 3.763 10 3 3 0 0 0 3.648.648 5.5 5.5 0 0 1 5.178 0A3 3 0 0 0 18.237 21`,key:`110c12`}]]),u=c(`laptop`,[[`path`,{d:`M18 5a2 2 0 0 1 2 2v8.526a2 2 0 0 0 .212.897l1.068 2.127a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45l1.068-2.127A2 2 0 0 0 4 15.526V7a2 2 0 0 1 2-2z`,key:`1pdavp`}],[`path`,{d:`M20.054 15.987H3.946`,key:`14rxg9`}]]),d=c(`monitor`,[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`,key:`48i651`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`,key:`1svkeh`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`,key:`vw1qmm`}]]),f=t(e(),1),p=n(),m=`https://github.com/most-people/most/releases/latest`,h=`${`https://download.most.box`.replace(/\/+$/,``)}/releases/latest.json`,g=[{platform:`windows`,arch:`x64`,kind:`installer`,filename:`GitHub Releases`,githubUrl:m},{platform:`windows`,arch:`arm64`,kind:`installer`,filename:`GitHub Releases`,githubUrl:m},{platform:`macos`,arch:`x64`,kind:`installer`,filename:`GitHub Releases`,githubUrl:m},{platform:`macos`,arch:`arm64`,kind:`installer`,filename:`GitHub Releases`,githubUrl:m},{platform:`linux`,arch:`x64`,kind:`installer`,filename:`GitHub Releases`,githubUrl:m},{platform:`linux`,arch:`arm64`,kind:`installer`,filename:`GitHub Releases`,githubUrl:m}],_={windows:{name:`Windows`,ext:`.exe`,desc:`Windows 10 或更高版本`,icon:d},macos:{name:`macOS`,ext:`.dmg`,desc:`macOS 12 Monterey 或更高版本`,icon:l},linux:{name:`Linux`,ext:`.AppImage`,desc:`Ubuntu 20.04+ / Debian 11+ / 其他主流发行版`,icon:u}};function v(e){return typeof e==`object`&&!!e}function y(e){return v(e)?[`windows`,`macos`,`linux`].includes(String(e.platform))&&[`x64`,`arm64`].includes(String(e.arch))&&e.kind===`installer`&&typeof e.filename==`string`&&typeof e.githubUrl==`string`&&(typeof e.r2Url==`string`||e.r2Url===void 0):!1}function b(e){return!v(e)||typeof e.version!=`string`||typeof e.publishedAt!=`string`||!Array.isArray(e.assets)?!1:e.assets.every(y)}function x(){return[navigator.userAgentData?.platform,navigator.platform,navigator.userAgent].filter(Boolean).join(` `).toLowerCase()}function S(){if(typeof navigator>`u`)return`windows:x64`;let e=x(),t=/arm|aarch64/.test(e)?`arm64`:`x64`;return/mac|darwin/.test(e)?`macos:${t}`:/linux/.test(e)?`linux:${t}`:`windows:${t}`}function C(e){if(!e)return``;let t=e/1024/1024;return`${t.toFixed(t>=100?0:1)} MB`}function w(e){return e.r2Url?`Cloudflare R2 高速镜像`:`GitHub Releases`}function T(){let[e,t]=(0,f.useState)(null),[n,o]=(0,f.useState)(h?`loading`:`fallback`),[s,c]=(0,f.useState)(`windows:x64`),[l,u]=(0,f.useState)(`r2`);(0,f.useEffect)(()=>{c(S())},[]),(0,f.useEffect)(()=>{if(!h)return;let e=new AbortController;return fetch(h,{cache:`no-store`,signal:e.signal}).then(e=>{if(!e.ok)throw Error(`Manifest request failed: ${e.status}`);return e.json()}).then(e=>{if(!b(e))throw Error(`Invalid download manifest`);t(e),o(`ready`)}).catch(e=>{e instanceof DOMException&&e.name===`AbortError`||(t(null),o(`fallback`))}),()=>e.abort()},[]),(0,f.useEffect)(()=>{n===`fallback`&&u(`github`)},[n]);let d=e?.assets.length?e.assets:g,m=d.some(e=>e.r2Url),v=l===`r2`&&m?`r2`:`github`;return(0,p.jsxs)(`div`,{className:`download-options`,children:[(0,p.jsxs)(`div`,{className:`ui-segmented-control download-source-tabs`,role:`tablist`,"aria-label":`下载来源`,children:[(0,p.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":v===`r2`,disabled:!m,className:v===`r2`?`ui-segmented-option download-source-tab is-active`:`ui-segmented-option download-source-tab`,onClick:()=>u(`r2`),children:[(0,p.jsx)(r,{size:15}),`Cloudflare R2`]}),(0,p.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":v===`github`,className:v===`github`?`ui-segmented-option download-source-tab is-active`:`ui-segmented-option download-source-tab`,onClick:()=>u(`github`),children:[(0,p.jsx)(i,{size:15}),`GitHub Releases`]})]}),(0,p.jsx)(`p`,{className:`download-source-note`,children:n===`loading`?`正在获取 Cloudflare R2 高速镜像。`:n===`ready`&&e?`当前版本 ${e.version},可切换 Cloudflare R2 或 GitHub Releases 下载。`:`无法获取高速镜像信息,已切换到 GitHub Releases 备用下载。`}),(0,p.jsx)(`div`,{className:`download-platform-grid`,children:d.map(e=>{let t=_[e.platform],n=t.icon,r=`${e.platform}:${e.arch}`,i=v===`r2`&&e.r2Url?e.r2Url:e.githubUrl,o=r===s;return(0,p.jsxs)(`article`,{className:o?`download-platform-card is-recommended`:`download-platform-card`,children:[(0,p.jsx)(`div`,{className:`download-platform-icon`,children:(0,p.jsx)(n,{size:32})}),(0,p.jsxs)(`div`,{className:`download-platform-content`,children:[(0,p.jsxs)(`div`,{className:`download-platform-heading`,children:[(0,p.jsx)(`h3`,{children:t.name}),(0,p.jsx)(`span`,{children:e.arch})]}),(0,p.jsx)(`p`,{children:t.desc}),(0,p.jsxs)(`dl`,{className:`download-platform-meta`,children:[(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`dt`,{children:`来源`}),(0,p.jsx)(`dd`,{children:v===`r2`&&e.r2Url?w(e):`GitHub Releases`})]}),e.size?(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`dt`,{children:`大小`}),(0,p.jsx)(`dd`,{children:C(e.size)})]}):null,e.sha256?(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`dt`,{children:`SHA256`}),(0,p.jsx)(`dd`,{children:e.sha256.slice(0,12)})]}):null]}),(0,p.jsx)(`div`,{className:`download-platform-actions`,children:(0,p.jsxs)(`a`,{href:i,className:`btn btn-primary`,children:[(0,p.jsx)(a,{size:16}),`下载 `,t.ext]})})]}),o?(0,p.jsx)(`span`,{className:`download-recommended-badge`,children:`当前`}):null]},r)})})]})}var E=[{feature:`节点能力`,web:`连接已有节点`,desktop:`内置本地节点`},{feature:`P2P 文件分享`,web:`依赖所连节点`,desktop:`完整支持`},{feature:`下载校验`,web:`依赖所连节点`,desktop:`完整支持`},{feature:`持续做种`,web:`依赖所连节点`,desktop:`默认开启`},{feature:`大文件传输`,web:`依赖所连节点`,desktop:`10GB 上限内`}],D=`桌面客户端是当前 MVP 的首选入口,内置本地 P2P 节点,提供发布、下载校验和持续做种的完整能力。Web 端只连接已有 MostBox 节点。`,O=`使用 npm 入口请先安装 Node.js >= 22.12,然后运行 npx most-box@latest 启动本机完整节点。`;function k(){return(0,p.jsxs)(`div`,{className:`download-page`,children:[(0,p.jsx)(`nav`,{className:`mkt-nav`,children:(0,p.jsx)(`div`,{className:`mkt-nav-inner`,children:(0,p.jsxs)(o,{to:`/`,className:`mkt-nav-logo`,children:[(0,p.jsx)(s,{size:18}),(0,p.jsx)(`span`,{children:`MOST PEOPLE`})]})})}),(0,p.jsx)(`section`,{className:`download-hero`,children:(0,p.jsxs)(`div`,{className:`mkt-container`,children:[(0,p.jsx)(`div`,{className:`download-hero-icon`,children:(0,p.jsx)(a,{size:40})}),(0,p.jsx)(`h1`,{className:`download-hero-title`,children:`下载客户端`}),(0,p.jsx)(`p`,{className:`download-hero-desc`,children:D})]})}),(0,p.jsx)(`section`,{className:`download-platforms`,children:(0,p.jsxs)(`div`,{className:`mkt-container`,children:[(0,p.jsx)(`h2`,{className:`download-section-title`,children:`选择你的平台`}),(0,p.jsx)(T,{})]})}),(0,p.jsx)(`section`,{className:`download-comparison`,children:(0,p.jsxs)(`div`,{className:`mkt-container`,children:[(0,p.jsx)(`h2`,{className:`download-section-title`,children:`Web 端 vs 桌面端`}),(0,p.jsx)(`div`,{className:`download-table-wrap`,children:(0,p.jsxs)(`table`,{className:`download-table`,children:[(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{children:[(0,p.jsx)(`th`,{children:`功能`}),(0,p.jsx)(`th`,{children:`Web 端`}),(0,p.jsx)(`th`,{children:`桌面端`})]})}),(0,p.jsx)(`tbody`,{children:E.map(e=>(0,p.jsxs)(`tr`,{children:[(0,p.jsx)(`td`,{children:e.feature}),(0,p.jsx)(`td`,{className:`col-web`,children:e.web}),(0,p.jsx)(`td`,{className:`col-desktop`,children:e.desktop})]},e.feature))})]})})]})}),(0,p.jsx)(`section`,{className:`download-cta`,children:(0,p.jsx)(`div`,{className:`mkt-container`,children:(0,p.jsx)(`p`,{className:`download-hero-desc`,children:O})})}),(0,p.jsx)(`section`,{className:`download-cta`,children:(0,p.jsx)(`div`,{className:`mkt-container`,children:(0,p.jsx)(o,{to:`/`,className:`btn btn-primary`,children:`返回首页`})})}),(0,p.jsx)(`footer`,{className:`mkt-footer`,children:(0,p.jsx)(`div`,{className:`mkt-container`,children:(0,p.jsx)(`div`,{className:`mkt-footer-inner`,children:(0,p.jsx)(`p`,{className:`mkt-footer-copy`,children:`MostBox`})})})})]})}var A=k;export{A as component};
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{n as r}from"./trash-2-BhMrUgGM.js";import{r as i}from"./filePreview-BvbHWUTG.js";import{t as a}from"./music-BkZKq879.js";import{R as o,v as s,z as c}from"./index-Cf23WD2V.js";var l=t(e(),1),u=n();function d(e){return e===`image`||e===`video`||e===`audio`}function f({item:e,isBackendReady:t,getFileDownloadUrl:n,onClose:o}){let[f,p]=(0,l.useState)(``),[m,h]=(0,l.useState)(!1),[g,_]=(0,l.useState)(``),[v,y]=(0,l.useState)(``);return(0,l.useEffect)(()=>{if(e.subtype!==`text`)return;let r=!1;if(p(``),y(``),!t){p(`加载失败`);return}return h(!0),(async()=>{try{let t=await fetch(n(e.cid),{headers:{...await s(`GET`,`/api/files/${e.cid}/download`),Range:`bytes=0-9999`}});if(!t.ok)throw Error(`加载失败`);let i=await t.text();r||p(i||`(文件为空)`)}catch{r||p(`加载失败`)}finally{r||h(!1)}})(),()=>{r=!0}},[n,t,e.cid,e.subtype]),(0,l.useEffect)(()=>{if(!d(e.subtype)){_(``);return}if(_(``),y(``),!t){y(`加载失败`);return}let r=``,i=!1;return(async()=>{try{let t=await fetch(n(e.cid),{headers:await s(`GET`,`/api/files/${e.cid}/download`)});if(!t.ok)throw Error(`加载失败`);let a=URL.createObjectURL(await t.blob());r=a,i||_(a)}catch{i||y(`加载失败`)}})(),()=>{i=!0,r&&URL.revokeObjectURL(r)}},[n,t,e.cid,e.subtype]),(0,u.jsxs)(`div`,{className:`preview-overlay`,onClick:o,children:[(0,u.jsx)(`button`,{type:`button`,className:`preview-close`,onClick:o,"aria-label":`关闭预览`,children:(0,u.jsx)(c,{size:20})}),(0,u.jsxs)(`div`,{onClick:e=>e.stopPropagation(),children:[e.subtype===`image`&&(0,u.jsx)(`div`,{className:`preview-media-wrapper`,children:g?(0,u.jsx)(`img`,{src:g,alt:e.fileName}):v?(0,u.jsxs)(`div`,{className:`preview-unsupported`,children:[(0,u.jsx)(r,{size:48,className:`preview-file-icon`}),(0,u.jsx)(`p`,{children:e.fileName}),(0,u.jsx)(`p`,{className:`preview-unsupported-hint`,children:v})]}):(0,u.jsx)(`div`,{className:`preview-loading`,children:(0,u.jsx)(`div`,{className:`preview-loading-spinner`})})}),e.subtype===`video`&&(0,u.jsx)(`div`,{className:`preview-media-wrapper`,children:g?(0,u.jsx)(`video`,{src:g,controls:!0}):v?(0,u.jsxs)(`div`,{className:`preview-unsupported`,children:[(0,u.jsx)(r,{size:48,className:`preview-file-icon`}),(0,u.jsx)(`p`,{children:e.fileName}),(0,u.jsx)(`p`,{className:`preview-unsupported-hint`,children:v})]}):(0,u.jsx)(`div`,{className:`preview-loading`,children:(0,u.jsx)(`div`,{className:`preview-loading-spinner`})})}),e.subtype===`audio`&&(0,u.jsxs)(`div`,{className:`preview-audio`,children:[(0,u.jsx)(`div`,{className:`preview-audio-icon`,children:(0,u.jsx)(a,{size:36,color:`var(--accent)`})}),(0,u.jsx)(`p`,{className:`preview-audio-filename`,children:e.fileName}),g?(0,u.jsx)(`audio`,{className:`preview-audio-player`,src:g,controls:!0}):(0,u.jsx)(`div`,{className:`preview-text-loading`,children:v?(0,u.jsx)(`p`,{children:v}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(i,{size:24,className:`preview-text-spinner`}),(0,u.jsx)(`p`,{children:`正在加载音频预览...`})]})})]}),e.subtype===`file`&&(0,u.jsxs)(`div`,{className:`preview-unsupported`,children:[(0,u.jsx)(r,{size:48,className:`preview-file-icon`}),(0,u.jsx)(`p`,{children:e.fileName}),(0,u.jsx)(`p`,{className:`preview-unsupported-hint`,children:`无法预览`})]}),e.subtype===`text`&&(0,u.jsxs)(`div`,{className:`preview-text-container`,children:[(0,u.jsx)(`div`,{className:`preview-text-header`,children:(0,u.jsx)(`span`,{children:e.fileName})}),m?(0,u.jsxs)(`div`,{className:`preview-text-loading`,children:[(0,u.jsx)(i,{size:24,className:`preview-text-spinner`}),(0,u.jsx)(`p`,{children:`正在加载文本预览...`}),(0,u.jsx)(`p`,{className:`preview-text-loading-hint`,children:`如果是初次预览,可能需要等待 P2P 网络同步`})]}):(0,u.jsx)(`pre`,{className:`preview-text`,children:f||`(文件为空)`})]})]})]})}function p(e){if(!e||typeof e!=`string`)return{valid:!1,error:`CID must be a non-empty string`};let t;try{t=o.parse(e)}catch{return{valid:!1,error:`Invalid CID format`}}return t.version===1?t.multihash.digest.length===32?{valid:!0}:{valid:!1,error:`CID digest must be 32 bytes`}:{valid:!1,error:`Invalid CID format: CID v1 required`}}function m(e){if(!e||typeof e!=`string`)return{cid:``,error:`Link must be a non-empty string`};let t;try{t=new URL(e)}catch{return{cid:``,error:`Link must be a valid most:// URL`}}if(t.protocol!==`most:`)return{cid:``,error:`Link must use most:// protocol`};if(t.pathname&&t.pathname!==`/`)return{cid:``,error:`Link path is not supported`};let n=t.hostname,r=t.searchParams.get(`filename`),i=[...t.searchParams.keys()].find(e=>e!==`filename`),a=p(n);return a.valid?!r||!r.trim()?{cid:``,error:`filename is required`}:i?{cid:``,error:`Unsupported query parameter: ${i}`}:{cid:n,fileName:r}:{cid:``,error:a.error}}var h={timeout:`检测等待超时,暂时没有等到在线种子响应。请确认分享者或其他下载者仍在线做种,稍后再检测。`,offline:`无法连接本地节点,请确认 MostBox 后端正在运行后再检测。`,missingApi:`当前后端还没有检测接口,请重启 MostBox 后端后再试。`,validation:`链接格式不正确,请粘贴完整的 most://<cid>?filename=... 分享链接。`,nameConflict:`下载目录已有同名文件,请先重命名或移走后再检测。`,noPeer:`暂时没有发现在线种子。请确认分享者或其他下载者仍在线做种,稍后再检测。`,permission:`下载目录不可写,请检查目录权限后再检测。`,starting:`本地节点还没有启动完成,请稍等几秒后重新检测。`,server:`本地节点检测时出错,请稍后重试或查看节点日志。`,fallback:`检测未通过,请确认链接完整、发布者在线且本机网络正常。`},g={"Link must be a valid most:// URL":`链接无法解析,请粘贴完整的 most://<cid>?filename=... 分享链接。`,"Link must use most:// protocol":`链接协议不正确,应以 most:// 开头。`,"Link path is not supported":`链接里不应包含路径,请使用 most://<cid>?filename=... 格式。`,"Invalid CID format":`CID 无效,请确认 most:// 后面的内容没有缺失或被截断。`,"Invalid CID format: CID v1 required":`CID 格式不符合 MostBox 要求,请确认分享链接完整。`,"CID digest must be 32 bytes":`CID 格式不符合 MostBox 要求,请确认分享链接完整。`,"filename is required":`链接缺少 filename 参数,请复制完整分享链接后再检测。`};function _(e={},t=``){if(t===`TimeoutError`)return h.timeout;if(!e.status)return h.offline;if(e.status===404)return h.missingApi;switch(e.code){case`VALIDATION_ERROR`:return h.validation;case`CONFLICT`:return e.error?`${e.error},请先处理同名文件后再下载。`:h.nameConflict;case`PEER_NOT_FOUND`:return h.noPeer;case`PERMISSION_ERROR`:return e.error?`下载目录不可写:${e.error}`:h.permission;case`ENGINE_NOT_INITIALIZED`:return h.starting;default:break}return e.status===503?h.noPeer:e.status>=500?h.server:e.error?`检测未通过:${e.error}`:h.fallback}function v(e=``){let t=String(e||``).trim();if(!t)return`请先粘贴 most:// 分享链接。`;let n=m(t);return n.error?n.error.startsWith(`Unsupported query parameter: `)?`链接包含暂不支持的参数 ${n.error.slice(29)},请只保留 filename。`:g[n.error]||h.validation:n.fileName?.trim()?null:g[`filename is required`]}export{v as n,f as r,_ as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{q as t}from"./index-Cf23WD2V.js";var n=e(),r=()=>(0,n.jsx)(t,{to:`/web3/`,replace:!0});export{r as component};
@@ -1 +0,0 @@
1
- import{W as e}from"./index-Cf23WD2V.js";var t=e(`film`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M7 3v18`,key:`bbkbws`}],[`path`,{d:`M3 7.5h4`,key:`zfgn84`}],[`path`,{d:`M3 12h18`,key:`1i2n21`}],[`path`,{d:`M3 16.5h4`,key:`1230mu`}],[`path`,{d:`M17 3v18`,key:`in4fa5`}],[`path`,{d:`M17 7.5h4`,key:`myr1c1`}],[`path`,{d:`M17 16.5h4`,key:`go4c1d`}]]),n=e(`image`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]),r=e(`loader`,[[`path`,{d:`M12 2v4`,key:`3427ic`}],[`path`,{d:`m16.2 7.8 2.9-2.9`,key:`r700ao`}],[`path`,{d:`M18 12h4`,key:`wj9ykh`}],[`path`,{d:`m16.2 16.2 2.9 2.9`,key:`1bxg5t`}],[`path`,{d:`M12 18v4`,key:`jadmvz`}],[`path`,{d:`m4.9 19.1 2.9-2.9`,key:`bwix9q`}],[`path`,{d:`M2 12h4`,key:`j09sii`}],[`path`,{d:`m4.9 4.9 2.9 2.9`,key:`giyufr`}]]),i=e(`pen`,[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}]]);function a(e){let t=String(e||``).split(`.`).pop()?.toLowerCase()||``,n=[`jpg`,`jpeg`,`png`,`gif`,`webp`,`svg`,`bmp`,`ico`,`tiff`,`heic`,`heif`],r=[`mp4`,`webm`,`mov`,`avi`,`mkv`,`flv`,`wmv`,`m4v`,`mpeg`,`3gp`],i=[`mp3`,`wav`,`ogg`,`flac`,`aac`,`m4a`,`wma`,`opus`],a=`txt.md.js.ts.jsx.tsx.css.scss.less.json.xml.html.htm.yaml.yml.toml.ini.cfg.conf.log.sh.bash.py.rb.go.rs.java.c.cpp.h.hpp.cs.php.sql.graphql.env.gitignore.dockerfile.readme`.split(`.`);return n.includes(t)?`image`:r.includes(t)?`video`:i.includes(t)?`audio`:a.includes(t)?`text`:`file`}export{t as a,n as i,i as n,r,a as t};
@@ -1 +0,0 @@
1
- import{W as e}from"./index-Cf23WD2V.js";var t=e(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),n=e(`folder`,[[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]);export{t as n,n as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{q as t}from"./index-Cf23WD2V.js";var n=e(),r=()=>(0,n.jsx)(t,{to:`/game/gandengyan/`,replace:!0});export{r as component};
@@ -1 +0,0 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{t as r}from"./copy-CM-qWlbv.js";import{t as i}from"./AppShell-DmZQwVA9.js";import{n as a,t as o}from"./sun-C3IUQTpa.js";import{t as s}from"./play-BIl5vwqS.js";import{t as c}from"./send-DtQInX0y.js";import{i as ee,n as te,r as ne,t as re}from"./useGameRoom-C6UgmIGG.js";import{W as l,f as u,u as ie}from"./index-Cf23WD2V.js";var ae=l(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),d=t(e(),1),f=[`S`,`H`,`C`,`D`],p=[`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`J`,`Q`,`K`,`A`,`2`],m=p.filter(e=>e!==`2`),h=new Map(p.map((e,t)=>[e,t+3])),g=5,_=20,v=1e3;function oe({roomCode:e,ownerAddress:t,ownerName:n,players:r=[],random:i=Math.random}){let a=E(r);return a.some(e=>e.address===J(t))||a.unshift({address:J(t),name:Y(n)}),y({id:String(e||``).toUpperCase(),ownerAddress:J(t),status:`lobby`,seq:1,players:a.slice(0,6).map((e,t)=>({address:e.address,name:Y(e.name),seat:t,hand:[],handCount:0,score:v,playedCards:0})),deck:[],discard:[],table:null,currentSeat:0,lastWinnerSeat:null,previousWinnerSeat:null,passSeats:[],baseScore:1,bombCount:0,diceRolls:[],roundResult:null,log:[`房间已创建`],winnerSeat:null,random:i})}function se(e,t=[]){let n=b(e);if(!n||n.status!==`lobby`)return n;let r=new Map(n.players.map(e=>[e.address,e.score]));return n.players=E(t).slice(0,6).map((e,t)=>({address:e.address,name:Y(e.name),seat:t,hand:[],handCount:0,score:r.get(e.address)??v,playedCards:0})),n.seq+=1,y(n)}function ce(e,t=Math.random){let n=b(e);if(!n||n.players.length<2)throw Error(`至少需要 2 名玩家`);n.deck=N(M(),t),n.discard=[],n.table=null,n.passSeats=[],n.winnerSeat=null,n.roundResult=null,n.baseScore=1,n.bombCount=0,n.status=`playing`;for(let e of R(n))e.hand=P(n,g),e.handCount=e.hand.length,e.playedCards=0,F(e.hand);let r=k(n,t);return n.currentSeat=r.seat,n.lastWinnerSeat=null,n.log=[`新一局开始,${r.name} 先出牌`],n.diceRolls.length>0&&n.log.unshift(`骰子结果:${n.diceRolls.map(e=>`${e.name} ${e.value}`).join(`,`)}`),n.seq+=1,y(n)}function le(e,t,n){let r=b(e),i=I(r),a=J(t);if(!i||i.address!==a)return{ok:!1,error:`还没轮到你`,state:y(r)};let o=n.map(e=>i.hand.find(t=>t.id===e));if(o.length===0||o.some(e=>!e))return{ok:!1,error:`手牌不存在`,state:y(r)};let s=fe(o);return s?T(s,r.table?.combo)?(o.sort(H),i.hand=i.hand.filter(e=>!n.includes(e.id)),i.handCount=i.hand.length,i.playedCards+=o.length,r.discard.push(...o),r.table={seat:i.seat,playerName:i.name,cards:o,combo:s},r.passSeats=[],r.lastWinnerSeat=i.seat,s.type===`bomb`&&(r.bombCount+=1,r.baseScore*=2),r.log.unshift(`${i.name} 出 ${s.label} ${o.map(q).join(` `)}${s.type===`bomb`?`,底分 ${r.baseScore}`:``}`),i.hand.length===0?A(r,i):z(r),r.seq+=1,{ok:!0,state:y(r)}):{ok:!1,error:`出的牌压不过上一手`,state:y(r)}:{ok:!1,error:`这个牌型不合法`,state:y(r)}}function ue(e,t){let n=b(e),r=I(n),i=J(t);return!r||r.address!==i?{ok:!1,error:`还没轮到你`,state:y(n)}:n.table?(n.passSeats.includes(r.seat)||n.passSeats.push(r.seat),n.log.unshift(`${r.name} 不要`),L(n).map(e=>e.seat).filter(e=>e!==n.lastWinnerSeat).every(e=>n.passSeats.includes(e))?(j(n),n.currentSeat=n.lastWinnerSeat,n.table=null,n.passSeats=[],n.log.unshift(`本轮结束,所有玩家各补 1 张,重新领出`)):z(n),n.seq+=1,{ok:!0,state:y(n)}):{ok:!1,error:`领出时不能不要`,state:y(n)}}function de(e,t){let n=b(e);if(!n)return null;let r=J(t),i=n.players.findIndex(e=>e.address===r);if(i===-1)return y(n);let a=n.players[i],o=n.currentSeat===a.seat,s=n.lastWinnerSeat===a.seat;n.players.splice(i,1),n.passSeats=n.passSeats.filter(e=>e!==a.seat),n.log.unshift(`${a.name} 已退出房间`);let c=R(n);if(n.status===`playing`)if(c.length<=1)c.length===1?A(n,c[0]):(n.status=`finished`,n.log.unshift(`玩家不足,本局结束`));else{if(o){let e=L(n);if(e.length>0){let t=e.findIndex(e=>e.seat>a.seat);n.currentSeat=e[t>=0?t:0].seat}}s&&n.table&&(n.table=null,n.passSeats=[])}return n.seq+=1,y(n)}function y(e){return e?{id:e.id,ownerAddress:e.ownerAddress,status:e.status,seq:Number(e.seq||1),deck:Array.isArray(e.deck)?e.deck.map(K):[],deckCount:e.deck?.length||Number(e.deckCount||0),discard:Array.isArray(e.discard)?e.discard.map(K):[],discardCount:e.discard?.length||Number(e.discardCount||0),currentSeat:Number(e.currentSeat||0),lastWinnerSeat:e.lastWinnerSeat===null||e.lastWinnerSeat===void 0?null:Number(e.lastWinnerSeat),previousWinnerSeat:e.previousWinnerSeat===null||e.previousWinnerSeat===void 0?null:Number(e.previousWinnerSeat),baseScore:Number(e.baseScore||1),bombCount:Number(e.bombCount||0),diceRolls:Array.isArray(e.diceRolls)?e.diceRolls:[],roundResult:e.roundResult||null,table:e.table?{...e.table,cards:e.table.cards.map(K)}:null,passSeats:Array.isArray(e.passSeats)?e.passSeats:[],winnerSeat:e.winnerSeat===null||e.winnerSeat===void 0?null:Number(e.winnerSeat),log:Array.isArray(e.log)?e.log.slice(0,18):[],players:R(e).map(e=>({address:e.address,name:e.name,seat:e.seat,handCount:e.hand?.length??e.handCount??0,score:Number(e.score??v),playedCards:Number(e.playedCards||0),hand:Array.isArray(e.hand)?e.hand.map(K):[]}))}:null}function b(e){return!e||typeof e!=`object`?null:{id:String(e.id||``).toUpperCase(),ownerAddress:J(e.ownerAddress),status:e.status===`playing`||e.status===`finished`?e.status:`lobby`,seq:Number(e.seq||1),players:Array.isArray(e.players)?e.players.map(D).filter(Boolean):[],deck:Array.isArray(e.deck)?e.deck.map(pe).filter(Boolean):[],discard:Array.isArray(e.discard)?e.discard.map(O).filter(Boolean):[],table:e.table&&typeof e.table==`object`?{...e.table,cards:Array.isArray(e.table.cards)?e.table.cards.map(O).filter(Boolean):[]}:null,currentSeat:Number(e.currentSeat||0),lastWinnerSeat:e.lastWinnerSeat===null||e.lastWinnerSeat===void 0?null:Number(e.lastWinnerSeat),previousWinnerSeat:e.previousWinnerSeat===null||e.previousWinnerSeat===void 0?null:Number(e.previousWinnerSeat),passSeats:Array.isArray(e.passSeats)?e.passSeats.map(Number):[],baseScore:Number(e.baseScore||1),bombCount:Number(e.bombCount||0),diceRolls:Array.isArray(e.diceRolls)?e.diceRolls:[],roundResult:e.roundResult||null,log:Array.isArray(e.log)?e.log.map(String):[],winnerSeat:e.winnerSeat===null||e.winnerSeat===void 0?null:Number(e.winnerSeat)}}function fe(e){if(!e?.length)return null;e=[...e].sort(H);let t=e.filter(W).length,n=e.filter(e=>!W(e));if(n.length===0)return null;let r=x(e,n,t);if(r)return r;if(e.length===1&&t===0)return w(`single`,U(e[0]),1,[U(e[0])]);if(e.length===2&&B(n,t)){let e=V(n);return w(`pair`,e,2,[e,e])}return S(e)||C(e)}function x(e,t,n){if(e.length<3||!B(t,n))return null;let r=V(t);return w(`bomb`,r,e.length,Array(e.length).fill(r),n===0)}function S(e){if(e.length<3)return null;let t=e.filter(W).length,n=e.filter(e=>!W(e));for(let r=0;r<=m.length-e.length;r+=1){let i=m.slice(r,r+e.length).map(e=>h.get(e)),a=[...i],o=0;for(let e of n){let t=a.indexOf(U(e));t!==-1&&(a.splice(t,1),o+=1)}if(o+t===e.length&&a.length===t)return w(`straight`,i.at(-1),e.length,i)}return null}function C(e){if(e.length<4||e.length%2!=0)return null;let t=e.length/2,n=e.filter(W).length,r=e.filter(e=>!W(e));for(let i=0;i<=m.length-t;i+=1){let a=m.slice(i,i+t).map(e=>h.get(e)),o=a.flatMap(e=>[e,e]),s=0;for(let e of r){let t=o.indexOf(U(e));t!==-1&&(o.splice(t,1),s+=1)}if(s+n===e.length&&o.length===n){let t=a.flatMap(e=>[e,e]);return w(`pairStraight`,a.at(-1),e.length,t)}}return null}function w(e,t,n,r,i=!0){return{type:e,value:t,length:n,resolvedValues:r,pure:i,label:ge({type:e,value:t,length:n,resolvedValues:r,pure:i})}}function T(e,t){return e?!t||e.type===`bomb`&&t.type!==`bomb`?!0:e.type===t.type?e.type===`bomb`?e.length===t.length?e.value===t.value?e.pure&&!t.pure:e.value>t.value:e.length>t.length:e.length===t.length?e.type===`single`||e.type===`pair`?e.value===ve(t.value)||e.value===h.get(`2`)&&t.value!==h.get(`2`):e.value===ve(t.value):!1:!1:!1}function E(e){let t=new Set;return e.map(e=>({address:J(e.address),name:Y(e.name),publicKey:String(e.publicKey||``)})).filter(e=>!e.address||t.has(e.address)?!1:(t.add(e.address),!0))}function D(e){let t=J(e.address);return t?{address:t,name:Y(e.name),seat:Number(e.seat||0),hand:Array.isArray(e.hand)?e.hand.map(O).filter(Boolean):[],handCount:Number(e.handCount||0),score:Number(e.score??v),playedCards:Number(e.playedCards||0)}:null}function O(e){if(!e||typeof e!=`object`)return null;let t=String(e.rank||``),n=String(e.suit||``);return!h.has(t)&&t!==`SJ`&&t!==`BJ`||!f.includes(n)&&n!==`Joker`?null:{id:String(e.id||`${n}-${t}`),suit:n,rank:t,label:e.label||q({suit:n,rank:t}),color:e.color||he({suit:n,rank:t})}}function k(e,t){if(e.previousWinnerSeat!==null)return e.diceRolls=[],R(e).find(t=>t.seat===e.previousWinnerSeat)||R(e)[0];let n=R(e),r=[];for(;n.length>1;){r=n.map(e=>({seat:e.seat,name:e.name,value:ye(t)}));let i=Math.max(...r.map(e=>e.value)),a=r.filter(e=>e.value===i);if(a.length===1)return e.diceRolls=r,n.find(e=>e.seat===a[0].seat);n=n.filter(e=>a.some(t=>t.seat===e.seat))}return e.diceRolls=r,n[0]}function A(e,t){e.status=`finished`,e.winnerSeat=t.seat,e.previousWinnerSeat=t.seat;let n=[],r=0;for(let i of R(e)){if(i.seat===t.seat)continue;let a=i.playedCards===0,o=a?_:i.hand.length*e.baseScore*.5;i.score-=o,r+=o,n.push({seat:i.seat,name:i.name,loss:o,sealed:a,cardsLeft:i.hand.length})}t.score+=r,e.roundResult={winnerSeat:t.seat,winnerName:t.name,winnerGain:r,baseScore:e.baseScore,bombCount:e.bombCount,losers:n},e.log.unshift(`${t.name} 获胜,赢 ${r} 分`)}function j(e){for(let t of L(e)){if(e.deck.length===0)break;t.hand.push(...P(e,1)),t.handCount=t.hand.length,F(t.hand)}}function M(){let e=[];for(let t of f)for(let n of p)e.push({id:`${t}-${n}`,suit:t,rank:n});return e.push({id:`SJ`,suit:`Joker`,rank:`SJ`}),e.push({id:`BJ`,suit:`Joker`,rank:`BJ`}),e.map(K)}function N(e,t){let n=[...e];for(let e=n.length-1;e>0;--e){let r=Math.floor(t()*(e+1));[n[e],n[r]]=[n[r],n[e]]}return n}function P(e,t){return e.deck.splice(0,t)}function F(e){e.sort(H)}function I(e){return e.players.find(t=>t.seat===e.currentSeat)}function L(e){return R(e).filter(e=>e.hand.length>0)}function R(e){return[...e?.players||[]].sort((e,t)=>e.seat-t.seat)}function z(e){let t=L(e).map(e=>e.seat);e.currentSeat=t[(t.indexOf(e.currentSeat)+1)%t.length]}function B(e,t=0){if(e.length===0)return!1;let n=e[0].rank;return e.every(e=>e.rank===n)&&e.length+t>=2}function V(e){return U(e[0])}function H(e,t){return U(e)-U(t)||G(e.suit)-G(t.suit)}function U(e){return h.get(e.rank)||99}function W(e){return e.rank===`SJ`||e.rank===`BJ`}function G(e){return{D:0,C:1,H:2,S:3,Joker:4}[e]||0}function pe(e){if(typeof e==`string`){let[t,n]=e.split(`-`);return O({id:e,suit:t,rank:n})}return O(e)}function K(e){return{id:e.id,suit:e.suit,rank:e.rank,label:q(e),color:he(e)}}function q(e){return e.rank===`SJ`?`小王`:e.rank===`BJ`?`大王`:`${me(e.suit)}${e.rank}`}function me(e){return{S:`♠`,H:`♥`,C:`♣`,D:`♦`}[e]||``}function he(e){return e.suit===`H`||e.suit===`D`||e.rank===`BJ`?`red`:`black`}function ge(e){let t=e.resolvedValues?.length?`(${e.resolvedValues.map(_e).join(` `)})`:``;return`${{single:`单张`,pair:`对子`,straight:`顺子`,pairStraight:`连对`,bomb:e.pure?`纯炸弹`:`带王炸弹`}[e.type]}${t}`}function _e(e){return p.find(t=>h.get(t)===e)||String(e)}function ve(e){let t=p.findIndex(t=>h.get(t)===e);return t===-1||t>=p.length-1?null:h.get(p[t+1])}function ye(e){return Math.floor(e()*6)+1}function J(e){let t=String(e||``).trim();return/^0x[a-fA-F0-9]{40}$/.test(t)?t.toLowerCase():``}function Y(e){return String(e||`玩家`).trim().slice(0,16)||`玩家`}var X={page:`_page_4biq6_1`,headerActions:`_headerActions_4biq6_7`,entry:`_entry_4biq6_13`,entryBrand:`_entryBrand_4biq6_23`,cardMark:`_cardMark_4biq6_29`,entryPanel:`_entryPanel_4biq6_59`,panel:`_panel_4biq6_60`,handPanel:`_handPanel_4biq6_61`,accountLine:`_accountLine_4biq6_74`,scoreMeta:`_scoreMeta_4biq6_75`,roomBar:`_roomBar_4biq6_76`,badges:`_badges_4biq6_77`,actions:`_actions_4biq6_78`,joinForm:`_joinForm_4biq6_98`,status:`_status_4biq6_119`,gameGrid:`_gameGrid_4biq6_125`,tablePanel:`_tablePanel_4biq6_136`,seats:`_seats_4biq6_170`,player:`_player_4biq6_176`,active:`_active_4biq6_193`,winner:`_winner_4biq6_197`,avatar:`_avatar_4biq6_201`,centerTable:`_centerTable_4biq6_228`,deckBox:`_deckBox_4biq6_235`,playedBox:`_playedBox_4biq6_236`,playedCards:`_playedCards_4biq6_264`,notice:`_notice_4biq6_272`,resultDetail:`_resultDetail_4biq6_280`,sidePanel:`_sidePanel_4biq6_291`,scoreRow:`_scoreRow_4biq6_316`,logPanel:`_logPanel_4biq6_324`,hand:`_hand_4biq6_61`,cardButton:`_cardButton_4biq6_351`,picked:`_picked_4biq6_361`,card:`_card_4biq6_29`,red:`_red_4biq6_392`,black:`_black_4biq6_396`,small:`_small_4biq6_400`,preview:`_preview_4biq6_418`,valid:`_valid_4biq6_441`},Z=n(),Q=`gandengyan`;function $(...e){return e.filter(Boolean).join(` `)}function be(e,t){return String(e||``).toLowerCase()===String(t||``).toLowerCase()}function xe(e){if(typeof window>`u`||!(`speechSynthesis`in window)||!e)return;window.speechSynthesis.cancel();let t=new SpeechSynthesisUtterance(e);t.lang=`zh-CN`,t.rate=1.1,window.speechSynthesis.speak(t)}function Se(e){return e===`J`?`勾`:e===`Q`?`圈`:e===`A`?`坚`:e===`10`?`十`:e}function Ce(e){if(!e)return``;if(/不要/.test(e)||/本轮结束/.test(e))return`不要`;if(/新一局开始/.test(e))return`新一局开始`;if(/获胜/.test(e))return`游戏结束`;let t=e.match(/出\s+(\S+?)(?:(([^)]+)))?\s+(?:[♠♥♣♦]|小王|大王)/);if(!t)return``;let n=t[1],r=t[2];if(!r)return n;let i=r.split(/\s+/).map(Se);if(n===`对子`)return`对${i[0]}`;if(n===`单张`)return i[0];if(/炸弹/.test(n))return`${i[0]}炸`;if(n===`顺子`)return i.join(` `);if(n===`连对`){let e=[];for(let t=0;t<i.length;t+=2)e.push(i[t]);return`连对 `+e.flatMap(e=>[e,e]).join(` `)}return n}function we(){let e=u(e=>e.isDarkMode),t=u(e=>e.setIsDarkMode),n=u(e=>e.addToast),l=ie(e=>e.initializeUser),[f,p]=(0,d.useState)(``),[m,h]=(0,d.useState)([]),[g,_]=(0,d.useState)(!1),v=(0,d.useRef)(``),y=(0,d.useRef)(!1),b=re({gameId:Q,onError:e=>n(e,`error`)});(0,d.useEffect)(()=>{l()},[l]),(0,d.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get(`room`)?.toUpperCase();e&&(p(e),v.current=e)},[]),(0,d.useEffect)(()=>{let e=v.current;!e||y.current||!b.isBackendReady||!b.userIdentity||(y.current=!0,v.current=``,b.joinRoom(e).then(e=>{e&&n(`已进入房间`,`success`)}))},[b.isBackendReady,b.userIdentity,b.joinRoom,n]),(0,d.useEffect)(()=>{if(!b.roomCode)return;let e=`/game/gandengyan?room=${b.roomCode}`;`${window.location.pathname}${window.location.search}`!==e&&window.history.replaceState(null,``,e)},[b.roomCode]);let x=(0,d.useMemo)(()=>te(b.messages,b.roomCode?{gameId:Q,roomCode:b.roomCode}:{gameId:Q}),[b.messages,b.roomCode]),S=(0,d.useMemo)(()=>ne(b.messages,{gameId:Q,roomCode:b.roomCode}),[b.messages,b.roomCode]),C=S?.payload?.state,w=C?.players.find(e=>be(e.address,b.userIdentity?.address)),T=be(C?.ownerAddress||x.hostAddress,b.userIdentity?.address),E=C?.status===`playing`&&C.currentSeat===w?.seat,D=(0,d.useMemo)(()=>m.map(e=>w?.hand.find(t=>t.id===e)).filter(Boolean),[m,w]),O=(0,d.useMemo)(()=>fe(D),[D]),k=b.roomCode&&typeof window<`u`?`${window.location.origin}/game/gandengyan?room=${b.roomCode}`:``,A=(0,d.useRef)(-1),j=(0,d.useRef)(``),M=(0,d.useRef)(!1);(0,d.useEffect)(()=>{h([])},[C?.seq]),(0,d.useEffect)(()=>{if(!C)return;let e=C.seq;if(A.current<0){A.current=e;return}if(e===A.current)return;if(A.current=e,C.status!==`finished`&&(M.current=!1),C.status===`finished`&&C.winnerSeat!==null){M.current||(M.current=!0,xe(`游戏结束`));return}let t=C.log[0]||``;if(t&&t!==j.current){j.current=t;let e=Ce(t);e&&xe(e)}},[C?.seq]),(0,d.useEffect)(()=>{if(!T||!b.roomCode||!b.userIdentity||S||x.players.length===0)return;let e=oe({roomCode:b.roomCode,ownerAddress:b.userIdentity.address,ownerName:b.userIdentity.displayName||b.userIdentity.username,players:x.players});b.sendRoomEvent(`room:state`,{state:e,seq:e.seq})},[b,T,S,x.players]),(0,d.useEffect)(()=>{if(!C||!T||C.status!==`lobby`)return;let e=se(C,x.players);e&&e.players.length!==C.players.length&&b.sendRoomEvent(`room:state`,{state:e,seq:e.seq})},[b,T,x.players,C]);let N=(0,d.useRef)(0),P=(0,d.useMemo)(()=>b.roomEvents.filter(e=>e.event?.event===`player:leave`),[b.roomEvents]);(0,d.useEffect)(()=>{if(P.length<=N.current)return;let e=P.slice(N.current);N.current=P.length;for(let t of e)n(`${t.event?.payload?.player?.name||`玩家`} 已退出房间`,`info`)},[P,n]),(0,d.useEffect)(()=>{if(!C||!T||C.status!==`playing`)return;let e=new Set(x.players.map(e=>e.address.toLowerCase())),t=C.players.find(t=>!e.has(t.address.toLowerCase()));if(!t)return;let n=de(C,t.address);n&&R(n)},[b,T,x.players,C]);async function F(){await b.createRoom()&&n(`房间已创建`,`success`)}async function I(e){e.preventDefault(),await b.joinRoom(f)&&n(`已进入房间`,`success`)}async function L(){k&&(await navigator.clipboard.writeText(k),_(!0),setTimeout(()=>_(!1),1400))}async function R(e){await b.sendRoomEvent(`room:state`,{state:e,seq:e.seq})}async function z(){if(!(!C||!T))try{await R(ce(C))}catch(e){n(e instanceof Error?e.message:`开局失败`,`error`)}}async function B(){await z()}async function V(){if(!C||!b.userIdentity)return;let e=le(C,b.userIdentity.address,m);if(!e.ok){n(e.error||`出牌失败`,`error`);return}await R(e.state)}async function H(){if(!C||!b.userIdentity)return;let e=ue(C,b.userIdentity.address);if(!e.ok){n(e.error||`操作失败`,`error`);return}await R(e.state)}function U(e){h(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])}return(0,Z.jsx)(i,{sidebar:({closeSidebar:e})=>(0,Z.jsx)(ee,{activeGame:`gandengyan`,closeSidebar:e}),headerTitle:(0,Z.jsx)(`h2`,{className:`header-title`,children:`干瞪眼`}),headerRight:(0,Z.jsxs)(`div`,{className:X.headerActions,children:[C&&(0,Z.jsxs)(`button`,{className:`btn btn-sm`,onClick:L,children:[(0,Z.jsx)(r,{size:14}),g?`已复制`:`分享房间`]}),(0,Z.jsx)(`button`,{className:`btn btn-icon`,onClick:()=>t(!e),title:`切换主题`,children:e?(0,Z.jsx)(o,{size:16}):(0,Z.jsx)(a,{size:16})})]}),children:(0,Z.jsx)(`main`,{className:X.page,children:C?(0,Z.jsxs)(`section`,{className:X.gameGrid,children:[(0,Z.jsxs)(`div`,{className:X.tablePanel,children:[(0,Z.jsxs)(`div`,{className:X.roomBar,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsxs)(`strong`,{children:[`房间 `,C.id]}),(0,Z.jsx)(`span`,{children:C.status===`lobby`?`等待开局`:C.status===`finished`?`本局结束`:`进行中`})]}),(0,Z.jsx)(`div`,{className:X.badges,children:(0,Z.jsx)(`span`,{children:b.connected?`在线`:`离线`})})]}),(0,Z.jsx)(`div`,{className:X.seats,children:C.players.map(e=>(0,Z.jsx)(Te,{player:e,active:C.currentSeat===e.seat,winner:C.winnerSeat===e.seat,relation:De(w,e,C.players.length)},e.seat))}),(0,Z.jsxs)(`div`,{className:X.centerTable,children:[(0,Z.jsxs)(`div`,{className:X.deckBox,children:[(0,Z.jsx)(`span`,{children:`牌堆`}),(0,Z.jsx)(`strong`,{children:C.deckCount})]}),(0,Z.jsx)(`div`,{className:X.playedBox,children:C.table?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`strong`,{children:[C.table.playerName,` 出`,` `,C.table.combo?.label||`牌`]}),(0,Z.jsx)(`div`,{className:X.playedCards,children:C.table.cards.map(e=>(0,Z.jsx)(Ee,{card:e,small:!0},e.id))})]}):(0,Z.jsx)(`span`,{children:`等待领出`})}),(0,Z.jsxs)(`div`,{className:X.deckBox,children:[(0,Z.jsx)(`span`,{children:`底分`}),(0,Z.jsx)(`strong`,{children:C.baseScore})]})]}),(0,Z.jsx)(`div`,{className:X.notice,children:C.status===`finished`?C.roundResult?(0,Z.jsxs)(`div`,{className:X.resultDetail,children:[(0,Z.jsxs)(`p`,{children:[(0,Z.jsx)(`strong`,{children:C.roundResult.winnerName}),` 获胜,赢`,` `,C.roundResult.winnerGain,` 分`,C.roundResult.bombCount>0&&`(${C.roundResult.bombCount} 个炸弹)`]}),C.roundResult.losers.map(e=>(0,Z.jsxs)(`p`,{children:[e.name,e.sealed?`(封牌)扣 20 分`:`剩 ${e.cardsLeft} 张,扣 ${e.loss} 分`]},e.seat))]}):`${C.players.find(e=>e.seat===C.winnerSeat)?.name} 获胜`:E?`轮到你出牌`:`等待 ${C.players.find(e=>e.seat===C.currentSeat)?.name||`玩家`}`})]}),(0,Z.jsxs)(`aside`,{className:X.sidePanel,children:[(0,Z.jsxs)(`section`,{className:X.panel,children:[(0,Z.jsx)(`h3`,{children:`牌局`}),T&&C.status===`lobby`&&(0,Z.jsxs)(`button`,{className:`btn btn-primary`,disabled:C.players.length<2,onClick:z,children:[(0,Z.jsx)(s,{size:16}),`开始游戏`]}),T&&C.status===`finished`&&(0,Z.jsxs)(`button`,{className:`btn btn-primary`,onClick:B,children:[(0,Z.jsx)(ae,{size:16}),`再来一局`]}),!T&&(0,Z.jsx)(`p`,{className:X.status,children:`等待房主操作。`})]}),(0,Z.jsxs)(`section`,{className:X.panel,children:[(0,Z.jsx)(`h3`,{children:`分数`}),(0,Z.jsxs)(`div`,{className:X.scoreMeta,children:[(0,Z.jsxs)(`span`,{children:[`炸弹 `,C.bombCount,` 次`]}),(0,Z.jsxs)(`span`,{children:[`弃牌 `,C.discardCount,` 张`]})]}),C.players.map(e=>(0,Z.jsxs)(`div`,{className:X.scoreRow,children:[(0,Z.jsx)(`span`,{children:e.name}),(0,Z.jsx)(`strong`,{children:e.score})]},e.seat))]}),(0,Z.jsxs)(`section`,{className:$(X.panel,X.logPanel),children:[(0,Z.jsx)(`h3`,{children:`牌局记录`}),C.log.map((e,t)=>(0,Z.jsx)(`p`,{children:e},`${e}-${t}`))]})]}),(0,Z.jsxs)(`div`,{className:X.handPanel,children:[(0,Z.jsx)(Te,{player:w,active:E,winner:C.winnerSeat===w?.seat}),(0,Z.jsx)(`div`,{className:X.hand,children:w?.hand.map(e=>(0,Z.jsx)(`button`,{className:$(X.cardButton,m.includes(e.id)&&X.picked),onClick:()=>U(e.id),children:(0,Z.jsx)(Ee,{card:e})},e.id))}),(0,Z.jsxs)(`div`,{className:X.actions,children:[(0,Z.jsxs)(`div`,{className:$(X.preview,O&&X.valid),children:[(0,Z.jsx)(`strong`,{children:O?O.label:m.length?`牌型不合法`:`先选牌`}),(0,Z.jsx)(`span`,{children:D.map(e=>e.label).join(` `)||`按选择顺序解释大小王`})]}),(0,Z.jsxs)(`button`,{className:`btn btn-primary`,disabled:!E||m.length===0||!O,onClick:V,children:[(0,Z.jsx)(c,{size:16}),`出牌`]}),(0,Z.jsx)(`button`,{className:`btn`,disabled:!E||!C.table,onClick:H,children:`不要`})]})]})]}):(0,Z.jsxs)(`section`,{className:X.entry,children:[(0,Z.jsxs)(`div`,{className:X.entryBrand,children:[(0,Z.jsx)(`div`,{className:X.cardMark,children:`干`}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h1`,{children:`干瞪眼牌桌`}),(0,Z.jsx)(`p`,{children:`创建房间码邀请朋友加入,房间状态通过 MostBox P2P 频道同步。`})]})]}),(0,Z.jsxs)(`div`,{className:X.entryPanel,children:[(0,Z.jsxs)(`div`,{className:X.accountLine,children:[(0,Z.jsx)(`span`,{children:`当前账号`}),(0,Z.jsx)(`strong`,{children:b.userIdentity?.displayName||`未登录`})]}),(0,Z.jsxs)(`button`,{className:`btn btn-primary`,disabled:b.joining,onClick:F,children:[(0,Z.jsx)(s,{size:16}),`创建房间`]}),(0,Z.jsxs)(`form`,{onSubmit:I,className:X.joinForm,children:[(0,Z.jsxs)(`label`,{children:[`房间号`,(0,Z.jsx)(`input`,{value:f,maxLength:8,onChange:e=>p(e.target.value.toUpperCase()),placeholder:`输入房间号`})]}),(0,Z.jsx)(`button`,{className:`btn`,disabled:b.joining||!f,children:`加入房间`})]}),(0,Z.jsx)(`p`,{className:X.status,children:b.isBackendReady?`节点已连接`:`正在连接节点...`})]})]})})})}function Te({player:e,active:t,winner:n,relation:r=``}){return e?(0,Z.jsxs)(`div`,{className:$(X.player,t&&X.active,n&&X.winner),children:[(0,Z.jsx)(`div`,{className:X.avatar,children:e.name.slice(0,1)}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`strong`,{children:e.name}),(0,Z.jsxs)(`span`,{children:[r,r?` · `:``,e.handCount,` 张`]})]})]}):null}function Ee({card:e,small:t=!1}){return(0,Z.jsxs)(`div`,{className:$(X.card,X[e.color],t&&X.small),children:[(0,Z.jsx)(`span`,{children:e.label}),(0,Z.jsx)(`i`,{children:e.suit===`Joker`?`*`:e.label.slice(0,1)})]})}function De(e,t,n){if(!e)return`座位 ${t.seat+1}`;let r=(t.seat-e.seat+n)%n;return r===0?`我`:n===2?`对手位`:n===3?r===1?`下家/对手位`:`上家/对手位`:n===4?r===1?`下家/对手位`:r===2?`对家/队友位`:`上家/对手位`:r%2==0?`座位 ${t.seat+1}/队友位`:`座位 ${t.seat+1}/对手位`}var Oe=we;export{Oe as component};