most-box 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -24
- package/electron/main.js +19 -2
- package/electron/preload.cjs +8 -0
- package/out/admin/index.html +0 -0
- package/out/app/index.html +0 -0
- package/out/assets/AccountMenu-BgbcUc0m.js +1 -0
- package/out/assets/AppTop-DZFTO9-m.js +1 -0
- package/out/assets/CopyButton-B03fpFFc.js +1 -0
- package/out/assets/FilePreviewOverlay-CA04_Ved.js +1 -0
- package/out/assets/MarketingHeader-BVJy8hXd.js +1 -0
- package/out/assets/MarketingLayout-Cltu-DRw.js +1 -0
- package/out/assets/{MilkdownEditor-BTq9bDAf.js → MilkdownEditor-Dw_ze7EE.js} +92 -92
- package/out/assets/OpenSidebarButton-C2UJYXKh.js +1 -0
- package/out/assets/arrow-right-CXzRt0Fp.js +1 -0
- package/out/assets/chatJoinInvite-BcPz_IV5.js +1 -0
- package/out/assets/chatNoteDraft-CYbvcEvC.js +1 -0
- package/out/assets/check-iBCQl0yr.js +1 -0
- package/out/assets/circle-alert-dfN4T6Nq.js +1 -0
- package/out/assets/cobol-DHLQUbN7.js +1 -0
- package/out/assets/copy-B7pPZ2MP.js +1 -0
- package/out/assets/{dist-DCX0ws1K.js → dist-1jNICPWO.js} +1 -1
- package/out/assets/{dist-BAJKKN4w.js → dist-B3unnv5t.js} +1 -1
- package/out/assets/{dist-DJdv-Ma3.js → dist-B5MBMmGa.js} +1 -1
- package/out/assets/{dist-CMmmtl3f.js → dist-BAqJdUtV.js} +1 -1
- package/out/assets/{dist-C3lbe8SW.js → dist-BBJOmVU3.js} +1 -1
- package/out/assets/{dist-IN8WN7NI.js → dist-BV5CqsJD.js} +1 -1
- package/out/assets/{dist-DBnWo8ZP.js → dist-Ba7fxbV-.js} +1 -1
- package/out/assets/{dist-BzqqCPi2.js → dist-BxxtNKuo.js} +1 -1
- package/out/assets/{dist-DvWZsW-D.js → dist-C8Ue2rSs.js} +1 -1
- package/out/assets/{dist-C-Tg23jc.js → dist-CIn7Xx5U.js} +1 -1
- package/out/assets/{dist-CbTzBiwL.js → dist-CSyRxrry.js} +3 -3
- package/out/assets/{dist-DTL5jL08.js → dist-CZIuQqmV.js} +1 -1
- package/out/assets/{dist-8QDHqrPN.js → dist-CaaBTHCc.js} +1 -1
- package/out/assets/{dist-yZ96GF-e.js → dist-CgReC0ZE.js} +1 -1
- package/out/assets/{dist-D94V9Zlh.js → dist-Ct90qYA2.js} +1 -1
- package/out/assets/{dist-IGpXmkFm.js → dist-DIFFjNuO.js} +1 -1
- package/out/assets/{dist-CqQavSZV.js → dist-DUB2IhWu.js} +1 -1
- package/out/assets/{dist-B0JrbG7f.js → dist-DheA_Tyz.js} +1 -1
- package/out/assets/{dist-Br_5lLVO.js → dist-DyZh1ncm.js} +1 -1
- package/out/assets/{dist-BPs0Xns9.js → dist-E74uGTy3.js} +1 -1
- package/out/assets/{dist-BFSyuOuw.js → dist-K2s-Uj08.js} +1 -1
- package/out/assets/{dist-zyJb88Zz.js → dist-RU_cpjXQ.js} +1 -1
- package/out/assets/{dist-chOCTzB2.js → dist-eIeCvp_6.js} +1 -1
- package/out/assets/{dist-CfU9fwWz.js → dist-hEE2Ub__.js} +1 -1
- package/out/assets/download-COQOcPqI.js +1 -0
- package/out/assets/downloadValidation-Zvllo2SZ.js +1 -0
- package/out/assets/external-link-D6tHlYgS.js +1 -0
- package/out/assets/file-text-DiyIGL1I.js +1 -0
- package/out/assets/folder-DAcox9xz.js +1 -0
- package/out/assets/folder-open-Di0oALaC.js +1 -0
- package/out/assets/hard-drive-Cqa7Rstj.js +1 -0
- package/out/assets/index-B6acG3-t.css +1 -0
- package/out/assets/index-DjBN7bZV.js +31 -0
- package/out/assets/index.lazy-BUODxlbz.js +1 -0
- package/out/assets/index.lazy-Ba2rqd32.js +3 -0
- package/out/assets/index.lazy-Bdh8QUOx.js +1 -0
- package/out/assets/index.lazy-BfAHB94y.js +1 -0
- package/out/assets/index.lazy-Bo0LfJNK.js +2 -0
- package/out/assets/index.lazy-C9-w4fAF.js +3 -0
- package/out/assets/index.lazy-CNQbNKyf.js +1 -0
- package/out/assets/index.lazy-Cd0znkpY.js +1 -0
- package/out/assets/index.lazy-CtUrBLS0.js +1 -0
- package/out/assets/index.lazy-CyNgk0ta.js +1 -0
- package/out/assets/index.lazy-D3HxQTg_.js +1 -0
- package/out/assets/index.lazy-DSsE3iyf.js +1 -0
- package/out/assets/index.lazy-DWXndrGa.js +1 -0
- package/out/assets/index.lazy-Dk7cmQ-j.js +2 -0
- package/out/assets/key-round-JR8M3aHl.js +1 -0
- package/out/assets/loader-CwyHYZdX.js +1 -0
- package/out/assets/lock-CuwwlXlx.js +1 -0
- package/out/assets/message-square-BgsNXPft.js +1 -0
- package/out/assets/mp-Dv12gDTx.js +1 -0
- package/out/assets/music-Dn9nm9Qb.js +1 -0
- package/out/assets/notebook-pen-SWT-zZ4v.js +1 -0
- package/out/assets/play-CvWKSMwY.js +1 -0
- package/out/assets/refresh-cw-D4BsHvhi.js +1 -0
- package/out/assets/save-B02sbO9Y.js +1 -0
- package/out/assets/scheme-tChLYBuY.js +1 -0
- package/out/assets/search-HW4oPOBP.js +1 -0
- package/out/assets/send-4dhnJGuS.js +1 -0
- package/out/assets/shield-check-Boae7Nc6.js +1 -0
- package/out/assets/smartphone-JXH-zQXB.js +1 -0
- package/out/assets/textile-CyzeGT9J.js +1 -0
- package/out/assets/trash-2-BLwoM0ME.js +1 -0
- package/out/assets/triangle-alert-B9sMiA9l.js +1 -0
- package/out/assets/upload-DVuXJt_o.js +1 -0
- package/out/assets/useAppStore-DOnk608w.js +4 -0
- package/out/assets/{useChannelMessages-DOaWHdAP.js → useChannelMessages-CDvw-f_x.js} +1 -1
- package/out/assets/useGameRoom-B1_r6bc7.js +1 -0
- package/out/assets/userProfile-BZvkCuet.js +1 -0
- package/out/assets/wallet-D9Iw4YWE.js +1 -0
- package/out/assets/wifi-ljEI_ySA.js +1 -0
- package/out/chat/index.html +0 -0
- package/out/chat/join/demo/index.html +0 -0
- package/out/chat/join/index.html +0 -0
- package/out/download/index.html +2 -2
- package/out/game/gandengyan/index.html +0 -0
- package/out/game/index.html +0 -0
- package/out/game/zhajinhua/index.html +0 -0
- package/out/index.html +2 -2
- package/out/note/index.html +0 -0
- package/out/ping/index.html +2 -2
- package/out/profile/index.html +0 -0
- package/out/web3/index.html +0 -0
- package/package.json +28 -28
- package/server/index.js +3 -0
- package/server/src/config.js +0 -1
- package/server/src/core/gameRoom.js +12 -19
- package/server/src/http/app.js +2 -0
- package/server/src/http/routePolicy.js +1 -0
- package/server/src/http/routes/noteVaultRoutes.js +155 -0
- package/server/src/index.js +9 -0
- package/server/src/utils/accountBackup.js +8 -0
- package/server/src/utils/api.js +0 -14
- package/server/src/utils/auth.js +0 -7
- package/server/src/utils/avatar.js +6 -6
- package/server/src/utils/noteVault.js +522 -0
- package/electron/preload.js +0 -6
- package/out/assets/FilePreviewOverlay-CM5IqnZD.js +0 -1
- package/out/assets/LanguageToggle-CSQtRZ3A.js +0 -1
- package/out/assets/MarketingHeader-B45AaM29.js +0 -1
- package/out/assets/MarketingLayout-A00pEOa2.js +0 -1
- package/out/assets/MarketingThemeToggle-CIKP8x9W.js +0 -1
- package/out/assets/OpenSidebarButton-D8qfUGzU.js +0 -1
- package/out/assets/SidebarAccount-_RBE5K_o.js +0 -1
- package/out/assets/SidebarHomeLink-qMFEGjZt.js +0 -1
- package/out/assets/arrow-right-BU9c_SL4.js +0 -1
- package/out/assets/circle-alert-iuHzciph.js +0 -1
- package/out/assets/cobol-B_OZ4V-R.js +0 -1
- package/out/assets/copy-DEzFUzeX.js +0 -1
- package/out/assets/download-jEPn2njL.js +0 -1
- package/out/assets/downloadValidation-CSXwoQKW.js +0 -1
- package/out/assets/external-link-BFaoZeK0.js +0 -1
- package/out/assets/file-text-DPA1riJ_.js +0 -1
- package/out/assets/folder-Cfgc70_F.js +0 -1
- package/out/assets/hard-drive-Dar_AZEq.js +0 -1
- package/out/assets/i18n-NjvOSuV6.js +0 -1
- package/out/assets/index-BHZhApbo.css +0 -1
- package/out/assets/index-C-_ZwxuN.js +0 -31
- package/out/assets/index.lazy-0YYV0CR3.js +0 -1
- package/out/assets/index.lazy-BTYGr9Vb.js +0 -1
- package/out/assets/index.lazy-BVAtQtTa.js +0 -3
- package/out/assets/index.lazy-BbdLA2L-.js +0 -1
- package/out/assets/index.lazy-CbiLtziY.js +0 -1
- package/out/assets/index.lazy-CcEdBg3i.js +0 -2
- package/out/assets/index.lazy-CePHsLXG.js +0 -1
- package/out/assets/index.lazy-DG_3_VdF.js +0 -1
- package/out/assets/index.lazy-DR0rWEWZ.js +0 -2
- package/out/assets/index.lazy-DSyTSCJD.js +0 -1
- package/out/assets/index.lazy-DUhsuPLv.js +0 -1
- package/out/assets/index.lazy-DVnhWbzH.js +0 -1
- package/out/assets/index.lazy-DZpkg1DJ.js +0 -1
- package/out/assets/key-round-DNcpSuMw.js +0 -1
- package/out/assets/loader-BXQtdens.js +0 -1
- package/out/assets/lock-CLIE8cct.js +0 -1
- package/out/assets/message-square-Dp09WY1I.js +0 -1
- package/out/assets/mp-B6kdA94c.js +0 -1
- package/out/assets/music-B19Tg557.js +0 -1
- package/out/assets/notebook-pen-C8TlK5sB.js +0 -1
- package/out/assets/play-B-BjsTZz.js +0 -1
- package/out/assets/plus-4hygj-1Z.js +0 -1
- package/out/assets/save-BjrbPwhJ.js +0 -1
- package/out/assets/scheme-CyDdOh7e.js +0 -1
- package/out/assets/search-DSkiWdvX.js +0 -1
- package/out/assets/send-BL4d5iOt.js +0 -1
- package/out/assets/shield-check-DzDuWO8r.js +0 -1
- package/out/assets/smartphone-tRRFFO0a.js +0 -1
- package/out/assets/textile-DWBqthVk.js +0 -1
- package/out/assets/trash-2-V12tJ8lI.js +0 -1
- package/out/assets/triangle-alert-DGWc8ZHu.js +0 -1
- package/out/assets/ui-BpDGD3IR.js +0 -4
- package/out/assets/upload-CoCptKya.js +0 -1
- package/out/assets/useGameRoom-hHkV65ii.js +0 -1
- package/out/assets/userProfile-DwZip0Dt.js +0 -1
- package/out/assets/wallet-T7ONZ3Kg.js +0 -1
- package/out/assets/wifi-Bgo8eHY0.js +0 -1
package/README.md
CHANGED
|
@@ -1,26 +1,29 @@
|
|
|
1
|
-
# MostBox
|
|
1
|
+
# MostBox:聊天优先的 P2P 工具箱
|
|
2
2
|
|
|
3
3
|
[](https://npmjs.com/package/most-box)
|
|
4
4
|
[](https://nodejs.org)
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
|
|
7
|
-
> P2P
|
|
7
|
+
> 用户之间直接连接的 P2P 工具箱。
|
|
8
|
+
> 从聊天开始,直连传文件,把重要内容整理成知识库。
|
|
9
|
+
>
|
|
10
|
+
> Channel 承载消息、文件附件和知识库入口。文件分享仍使用 `most://` 链接、CID 校验和下载后做种;游戏和 Web3 工具箱保留独立能力,但暂不进入聊天详情主流程。
|
|
8
11
|
>
|
|
9
12
|
> CID 是 MostBox 的文件身份:发布、做种、发现、下载和校验都围绕 CID 进行。文件名和目录只用于展示与本地保存路径,不作为内容是否存在或是否可信的依据。
|
|
10
13
|
|
|
11
14
|
## 为什么用 MostBox?
|
|
12
15
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
16
|
+
| 入口 | 用户理解 | 协议边界 |
|
|
17
|
+
| ---- | -------- | -------- |
|
|
18
|
+
| 聊天 | 先创建聊天或房间,分享房间 ID 给朋友 | Channel + WebSocket + Corestore/Hypercore |
|
|
19
|
+
| 附件 | 在聊天里直接传文件 | `most://` + CID 校验 + 下载后做种 |
|
|
20
|
+
| 知识库 | 把重要消息和想法沉淀成 Markdown | `/note/` 保留现有本地笔记库能力 |
|
|
21
|
+
| 游戏 | 独立游戏页面保留 | `game.*` channel 事件,不新增独立后端协议 |
|
|
22
|
+
| Web3 | 密钥、钱包和地址工具 | 独立工具箱,不是聊天或文件分享前置条件 |
|
|
20
23
|
|
|
21
24
|
## 演示
|
|
22
25
|
|
|
23
|
-
在线 Web 入口:[
|
|
26
|
+
在线 Web 入口:[MostBox](https://Most.Box)
|
|
24
27
|
|
|
25
28
|
> Web 入口只负责连接已有 MostBox 节点;要在本机发布、下载、校验和持续做种,优先使用桌面客户端,或在本机运行 `npx most-box@latest` 启动完整节点。
|
|
26
29
|
|
|
@@ -28,13 +31,21 @@
|
|
|
28
31
|
|
|
29
32
|
### 方式一:桌面客户端(推荐)
|
|
30
33
|
|
|
31
|
-
前往 [
|
|
34
|
+
前往 [MostBox 下载页](https://Most.Box/download) 下载客户端,支持 Windows、macOS 和 Linux。桌面端内置本地 MostBox 节点,提供完整 P2P 文件分享、下载校验和持续做种能力,无需单独安装 Node.js。
|
|
32
35
|
|
|
33
36
|
### 移动端 App 计划
|
|
34
37
|
|
|
35
|
-
移动端优先按 Android
|
|
38
|
+
移动端优先按 Android 聊天优先完整种子 MVP 推进,参考 Keet/Pear 的“P2P 核心端 + 平台 UI 壳”分层:手机端先验证自己能加入聊天、收发消息、用 `most://` 附件传文件、下载校验并在前台继续做种,再扩展后台能力、iOS 和商店分发。详细范围见 [docs/mobile-android-plan.md](docs/mobile-android-plan.md)。
|
|
39
|
+
|
|
40
|
+
Android 工程入口以 `mobile/android/` 子包为准,仓库根目录不提供 `android:start`、`android:test` 或 `android:build` 包装脚本。本地开发、测试和打包命令统一在子包目录执行:
|
|
36
41
|
|
|
37
|
-
|
|
42
|
+
```bash
|
|
43
|
+
cd mobile/android
|
|
44
|
+
npm install
|
|
45
|
+
npm start # 启动 Expo Dev Client 并打开 Android 真机/模拟器
|
|
46
|
+
npm test # 运行移动端 CID、most://、Channel 和 Bare Worklet IPC 测试
|
|
47
|
+
npm run build # 生成内部 Alpha APK 和 SHA256 校验文件
|
|
48
|
+
```
|
|
38
49
|
|
|
39
50
|
### 方式二:npm 包
|
|
40
51
|
|
|
@@ -46,7 +57,7 @@ npx most-box@latest
|
|
|
46
57
|
|
|
47
58
|
> 使用 `@latest` 确保每次运行最新版本。
|
|
48
59
|
|
|
49
|
-
|
|
60
|
+
启动后在浏览器打开 **http://localhost:1976**
|
|
50
61
|
|
|
51
62
|
## 需求
|
|
52
63
|
|
|
@@ -58,7 +69,7 @@ npx most-box@latest
|
|
|
58
69
|
## 开发
|
|
59
70
|
|
|
60
71
|
```bash
|
|
61
|
-
git clone
|
|
72
|
+
git clone https://github.com/most-people/most.git
|
|
62
73
|
cd most
|
|
63
74
|
npm i
|
|
64
75
|
npm run dev
|
|
@@ -72,27 +83,32 @@ node server/index.js
|
|
|
72
83
|
前端源码集中在 `src/`:
|
|
73
84
|
|
|
74
85
|
- `src/routes/`:TanStack Router file-based routes。`index.tsx` 保留路由关键配置,`index.lazy.tsx` 加载页面组件。
|
|
75
|
-
- `src/features
|
|
86
|
+
- `src/features/`:页面和业务实现,例如文件分享、聊天、知识库、管理台、游戏和 Web3 工具箱。
|
|
76
87
|
- `src/components/`:跨功能共享 UI。
|
|
77
88
|
- `src/hooks/`、`src/lib/`、`src/stores/`、`src/styles/`:共享 hooks、工具、状态和样式。
|
|
78
89
|
- `src/lib/i18n/messages/*.ts`:按域拆分的中英文文案 catalog,由 `src/lib/i18n/messages.ts` 聚合。
|
|
79
90
|
- `server/`:daemon、HTTP API、P2P 引擎和协议测试。
|
|
91
|
+
- `mobile/android/`:聊天优先 Android Alpha 应用和 Bare Worklet P2P 核心。
|
|
80
92
|
|
|
81
93
|
## 测试
|
|
82
94
|
|
|
83
95
|
```bash
|
|
84
|
-
npm test
|
|
85
|
-
npm run test:unit
|
|
96
|
+
npm test # 运行全部后端测试
|
|
97
|
+
npm run test:unit # 只运行后端单元测试
|
|
98
|
+
npm run test:protocol # 运行 CID / 发布 / 下载 / P2P 接力协议回归
|
|
99
|
+
|
|
100
|
+
cd mobile/android
|
|
101
|
+
npm test # 运行 Android 子包协议、Channel 和 IPC 测试
|
|
86
102
|
```
|
|
87
103
|
|
|
88
104
|
## 访问场景
|
|
89
105
|
|
|
90
|
-
| 场景 | 方式
|
|
91
|
-
| ---------- |
|
|
92
|
-
| 本地 | 桌面客户端或 `npx most-box@latest`
|
|
93
|
-
| 局域网/NAS | 监听 `0.0.0.0`,仅信任家庭局域网
|
|
94
|
-
| 远程管理 | SSH 隧道 + `/admin/`
|
|
95
|
-
| 外网 | Caddy 反向代理
|
|
106
|
+
| 场景 | 方式 | 访问地址 |
|
|
107
|
+
| ---------- | ---------------------------------- | ----------------------- |
|
|
108
|
+
| 本地 | 桌面客户端或 `npx most-box@latest` | `http://localhost:1976` |
|
|
109
|
+
| 局域网/NAS | 监听 `0.0.0.0`,仅信任家庭局域网 | `http://NAS-IP:1976` |
|
|
110
|
+
| 远程管理 | SSH 隧道 + `/admin/` | `http://localhost:1976` |
|
|
111
|
+
| 外网 | Caddy 反向代理 | `https://your-domain` |
|
|
96
112
|
|
|
97
113
|
### 飞牛 OS / NAS 局域网部署
|
|
98
114
|
|
|
@@ -222,6 +238,10 @@ mostbox.example.com {
|
|
|
222
238
|
|
|
223
239
|
这里的登录是本地身份,不是云端账号注册。MostBox 用它隔离同一节点上的不同用户文件列表,并为本地 HTTP API 请求生成短期签名;知道 `most://` 链接的人仍然可以尝试下载对应 CID 内容。
|
|
224
240
|
|
|
241
|
+
### 知识库云备份和文件分享是什么关系?
|
|
242
|
+
|
|
243
|
+
知识库、笔记和账号备份属于独立工具箱能力;云备份只覆盖对应工具箱数据,不会把 MostBox 发布的文件上传成云盘,也不参与 `most://` 文件下载、CID 校验或做种传播闭环。
|
|
244
|
+
|
|
225
245
|
### 支持大文件吗?
|
|
226
246
|
|
|
227
247
|
支持。目前默认单文件上限为 **10GB**,可在本地节点策略中调整;传输采用流式处理,内存占用低。
|
|
@@ -263,6 +283,7 @@ npx most-box@latest
|
|
|
263
283
|
- **后端**: Hono + @hono/node-server + WebSocket
|
|
264
284
|
- **P2P**: Hyperswarm 4.x, Hyperdrive 13.x, Corestore 7.x
|
|
265
285
|
- **桌面**: Electron 42, electron-builder
|
|
286
|
+
- **移动端**: Expo 56, React Native 0.85, react-native-bare-kit / Bare Worklet
|
|
266
287
|
- **测试**: Node.js built-in test runner
|
|
267
288
|
|
|
268
289
|
## CI/CD
|
package/electron/main.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
app,
|
|
3
3
|
BrowserWindow,
|
|
4
|
+
ipcMain,
|
|
4
5
|
Menu,
|
|
5
6
|
Tray,
|
|
6
7
|
dialog,
|
|
@@ -84,7 +85,7 @@ function getLocalAppUrl(routePath = '/') {
|
|
|
84
85
|
}
|
|
85
86
|
|
|
86
87
|
function getInitialWindowUrl() {
|
|
87
|
-
const initialUrl = pendingDeepLinkUrl || getLocalAppUrl('/')
|
|
88
|
+
const initialUrl = pendingDeepLinkUrl || getLocalAppUrl('/chat/')
|
|
88
89
|
pendingDeepLinkUrl = ''
|
|
89
90
|
return initialUrl
|
|
90
91
|
}
|
|
@@ -144,6 +145,21 @@ function createTray() {
|
|
|
144
145
|
tray.on('double-click', showMainWindow)
|
|
145
146
|
}
|
|
146
147
|
|
|
148
|
+
function registerNoteVaultIpc() {
|
|
149
|
+
ipcMain.handle('note-vault:select-directory', async () => {
|
|
150
|
+
const result = await dialog.showOpenDialog(mainWindow, {
|
|
151
|
+
title: '选择 Markdown 笔记库',
|
|
152
|
+
properties: ['openDirectory', 'createDirectory'],
|
|
153
|
+
})
|
|
154
|
+
|
|
155
|
+
if (result.canceled || result.filePaths.length === 0) {
|
|
156
|
+
return null
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return result.filePaths[0]
|
|
160
|
+
})
|
|
161
|
+
}
|
|
162
|
+
|
|
147
163
|
function createWindow() {
|
|
148
164
|
const iconPath = getIconPath()
|
|
149
165
|
|
|
@@ -158,7 +174,7 @@ function createWindow() {
|
|
|
158
174
|
webPreferences: {
|
|
159
175
|
nodeIntegration: false,
|
|
160
176
|
contextIsolation: true,
|
|
161
|
-
preload: path.join(__dirname, 'preload.
|
|
177
|
+
preload: path.join(__dirname, 'preload.cjs'),
|
|
162
178
|
},
|
|
163
179
|
})
|
|
164
180
|
|
|
@@ -273,6 +289,7 @@ if (!gotSingleInstanceLock) {
|
|
|
273
289
|
app.whenReady().then(async () => {
|
|
274
290
|
try {
|
|
275
291
|
await startServer()
|
|
292
|
+
registerNoteVaultIpc()
|
|
276
293
|
createWindow()
|
|
277
294
|
createTray()
|
|
278
295
|
Menu.setApplicationMenu(null)
|
package/out/admin/index.html
CHANGED
|
Binary file
|
package/out/app/index.html
CHANGED
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{B as t,E as n,W as r,t as i}from"./useAppStore-DOnk608w.js";import{t as a}from"./check-iBCQl0yr.js";import{A as o,M as s,f as c,g as l,j as u}from"./index-DjBN7bZV.js";var d=t(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),f=t(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),p=t(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),m=t(`user`,[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`,key:`975kel`}],[`circle`,{cx:`12`,cy:`7`,r:`4`,key:`17ys0d`}]]),h=e();function g(){let{locale:e,setLocale:t,t:n}=o(),r=n(`common.locale.choose`);return(0,h.jsx)(l,{ariaLabel:r,className:`language-toggle`,items:u.map(n=>({key:n,label:s[n],icon:n===e?(0,h.jsx)(a,{size:16}):(0,h.jsx)(`span`,{className:`language-toggle-placeholder`,"aria-hidden":`true`}),onSelect:()=>{n!==e&&t(n)}})),renderTrigger:e=>(0,h.jsx)(`button`,{...e,className:`header-tool-btn`,title:r,"aria-label":r,children:(0,h.jsx)(d,{size:16})})})}function _(){let{t:e}=o(),t=i(e=>e.isDarkMode),n=i(e=>e.setIsDarkMode),r=e(`common.theme.toggle`);return(0,h.jsx)(`button`,{type:`button`,className:`header-tool-btn`,title:r,"aria-label":r,"aria-pressed":t,onClick:()=>n(!t),children:t?(0,h.jsx)(p,{size:16}):(0,h.jsx)(f,{size:16})})}function v(){let{t:e}=o(),t=n(e=>e.identity),i=c(t?.address,t?.avatar),a=e(`nav.profile`);return(0,h.jsx)(r,{to:`/profile/`,className:`account-profile-link`,title:a,"aria-label":a,children:t?(0,h.jsx)(`img`,{className:`account-profile-link-avatar`,src:i,alt:``,"aria-hidden":`true`}):(0,h.jsx)(m,{size:18})})}export{m as i,_ as n,g as r,v as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r,W as i}from"./useAppStore-DOnk608w.js";import{n as a,r as o,t as s}from"./AccountMenu-BgbcUc0m.js";import{A as c,E as l}from"./index-DjBN7bZV.js";var u=r(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),d=t(e(),1);function f(e,t){return typeof t==`boolean`?t:typeof window<`u`&&`matchMedia`in window?window.matchMedia(e).matches:!1}function p(e,t,{getInitialValueInEffect:n}={getInitialValueInEffect:!0}){let[r,i]=(0,d.useState)(n?t:f(e));return(0,d.useEffect)(()=>{try{if(`matchMedia`in window){let t=window.matchMedia(e);i(t.matches);let n=e=>i(e.matches);return t.addEventListener(`change`,n),()=>{t.removeEventListener(`change`,n)}}}catch{return}},[e]),r||!1}function m(e=!1,t={}){let[n,r]=(0,d.useState)(e),i=(0,d.useCallback)(()=>{r(e=>e||(t.onOpen?.(),!0))},[t.onOpen]),a=(0,d.useCallback)(()=>{r(e=>e&&(t.onClose?.(),!1))},[t.onClose]);return[n,{open:i,close:a,toggle:(0,d.useCallback)(()=>{n?a():i()},[a,i,n]),set:r}]}var h=n(),g=(0,d.createContext)(null);function _(){let e=(0,d.useContext)(g);if(!e)throw Error(`useAppShell must be used within AppShell`);return e}function v({sidebar:e,className:t=``,headerTitle:n,headerRight:r,sidebarToggleReplacement:i,defaultHide:l=!1,hideAccountMenu:f=!1,children:_}){let[v,y]=m(!1),[b,x]=(0,d.useState)(l),S=(0,d.useRef)(l),C=p(`(max-width: 768px)`),{t:w}=c(),T=(0,d.useCallback)((e={})=>{y.close(),e.collapse&&x(!0)},[y]);(0,d.useEffect)(()=>{l!==S.current&&(l?T({collapse:!0}):x(!1),S.current=l)},[l,T]);let E=()=>{C?y.toggle():x(!b)},D=()=>{C?y.open():x(!1)},O=C?v:!b;return(0,h.jsx)(g.Provider,{value:{closeSidebar:T,openSidebar:D,isSidebarVisible:O},children:(0,h.jsxs)(`div`,{className:[`app-layout`,t].filter(Boolean).join(` `),children:[(0,h.jsx)(`div`,{className:`sidebar-overlay ${v?`visible`:``}`,onClick:()=>T()}),(0,h.jsx)(`div`,{className:`sidebar ${v?`open`:``} ${b?`collapsed`:``}`,children:e({closeSidebar:T,openSidebar:D})}),(0,h.jsxs)(`div`,{className:`main-content`,children:[(0,h.jsxs)(`header`,{className:`app-header`,children:[(0,h.jsxs)(`div`,{className:`header-left`,children:[i??(0,h.jsx)(`button`,{onClick:E,className:`btn btn-icon sidebar-toggle-btn`,"aria-label":w(C?`appShell.openMenu`:b?`appShell.expandSidebar`:`appShell.collapseSidebar`),children:(0,h.jsx)(u,{size:16})}),n]}),(0,h.jsxs)(`div`,{className:`header-right`,children:[r,(0,h.jsx)(a,{}),(0,h.jsx)(o,{}),!f&&(0,h.jsx)(s,{})]})]}),_]})]})})}function y({onNavigate:e}){let{t}=c(),n=t(`common.brand`);return(0,h.jsxs)(i,{to:`/`,className:`sidebar-header sidebar-header-link`,onClick:e,"aria-label":n,title:n,children:[(0,h.jsx)(l,{size:18}),(0,h.jsx)(`h1`,{children:n})]})}export{m as i,v as n,_ as r,y as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{t as r}from"./check-iBCQl0yr.js";import{t as i}from"./copy-B7pPZ2MP.js";import{A as a}from"./index-DjBN7bZV.js";var o=t(e(),1),s=n();function c({text:e,label:t,copiedLabel:n,className:c=`btn btn-icon`,iconSize:l=14}){let{t:u}=a(),[d,f]=(0,o.useState)(!1),p=n||u(`common.copied`),m=t||u(`common.copy`);async function h(){try{await navigator.clipboard.writeText(e),f(!0),setTimeout(()=>f(!1),1500)}catch{}}return(0,s.jsxs)(`button`,{type:`button`,className:c,onClick:h,title:d?p:m,children:[d?(0,s.jsx)(r,{size:l}):(0,s.jsx)(i,{size:l}),t?d?p:t:null]})}export{c as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r,c as i}from"./useAppStore-DOnk608w.js";import{t as a}from"./file-text-DiyIGL1I.js";import{t as o}from"./loader-CwyHYZdX.js";import{t as s}from"./music-Dn9nm9Qb.js";import{A as c,S as l}from"./index-DjBN7bZV.js";var u=r(`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`}]]),d=r(`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`}]]),f=r(`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`}]]);function p(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`}var m=t(e(),1),h=n();function g(e){return e===`image`||e===`video`||e===`audio`}function _({item:e,isBackendReady:t,getFileDownloadUrl:n,onClose:r}){let{t:u}=c(),[d,f]=(0,m.useState)(``),[p,_]=(0,m.useState)(!1),[v,y]=(0,m.useState)(``),[b,x]=(0,m.useState)(``);return(0,m.useEffect)(()=>{if(e.subtype!==`text`)return;let r=!1;if(f(``),x(``),!t){f(u(`preview.loadFailed`));return}return _(!0),(async()=>{try{let t=await fetch(n(e.cid),{headers:{...await i(`GET`,`/api/files/${e.cid}/download`),Range:`bytes=0-9999`}});if(!t.ok)throw Error(u(`preview.loadFailed`));let a=await t.text();r||f(a||u(`preview.emptyFile`))}catch{r||f(u(`preview.loadFailed`))}finally{r||_(!1)}})(),()=>{r=!0}},[n,t,e.cid,e.subtype]),(0,m.useEffect)(()=>{if(!g(e.subtype)){y(``);return}if(y(``),x(``),!t){x(u(`preview.loadFailed`));return}let r=``,a=!1;return(async()=>{try{let t=await fetch(n(e.cid),{headers:await i(`GET`,`/api/files/${e.cid}/download`)});if(!t.ok)throw Error(u(`preview.loadFailed`));let o=URL.createObjectURL(await t.blob());r=o,a||y(o)}catch{a||x(u(`preview.loadFailed`))}})(),()=>{a=!0,r&&URL.revokeObjectURL(r)}},[n,t,e.cid,e.subtype]),(0,h.jsxs)(`div`,{className:`preview-overlay`,onClick:r,children:[(0,h.jsx)(`button`,{type:`button`,className:`preview-close`,onClick:r,"aria-label":u(`preview.close`),children:(0,h.jsx)(l,{size:20})}),(0,h.jsxs)(`div`,{onClick:e=>e.stopPropagation(),children:[e.subtype===`image`&&(0,h.jsx)(`div`,{className:`preview-media-wrapper`,children:v?(0,h.jsx)(`img`,{src:v,alt:e.fileName,translate:`no`}):b?(0,h.jsxs)(`div`,{className:`preview-unsupported`,children:[(0,h.jsx)(a,{size:48,className:`preview-file-icon`}),(0,h.jsx)(`p`,{translate:`no`,children:e.fileName}),(0,h.jsx)(`p`,{className:`preview-unsupported-hint`,children:b})]}):(0,h.jsx)(`div`,{className:`preview-loading`,children:(0,h.jsx)(`div`,{className:`preview-loading-spinner`})})}),e.subtype===`video`&&(0,h.jsx)(`div`,{className:`preview-media-wrapper`,children:v?(0,h.jsx)(`video`,{src:v,controls:!0}):b?(0,h.jsxs)(`div`,{className:`preview-unsupported`,children:[(0,h.jsx)(a,{size:48,className:`preview-file-icon`}),(0,h.jsx)(`p`,{translate:`no`,children:e.fileName}),(0,h.jsx)(`p`,{className:`preview-unsupported-hint`,children:b})]}):(0,h.jsx)(`div`,{className:`preview-loading`,children:(0,h.jsx)(`div`,{className:`preview-loading-spinner`})})}),e.subtype===`audio`&&(0,h.jsxs)(`div`,{className:`preview-audio`,children:[(0,h.jsx)(`div`,{className:`preview-audio-icon`,children:(0,h.jsx)(s,{size:36,color:`var(--accent)`})}),(0,h.jsx)(`p`,{className:`preview-audio-filename`,translate:`no`,children:e.fileName}),v?(0,h.jsx)(`audio`,{className:`preview-audio-player`,src:v,controls:!0}):(0,h.jsx)(`div`,{className:`preview-text-loading`,children:b?(0,h.jsx)(`p`,{children:b}):(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(o,{size:24,className:`preview-text-spinner`}),(0,h.jsx)(`p`,{children:u(`preview.audioLoading`)})]})})]}),e.subtype===`file`&&(0,h.jsxs)(`div`,{className:`preview-unsupported`,children:[(0,h.jsx)(a,{size:48,className:`preview-file-icon`}),(0,h.jsx)(`p`,{translate:`no`,children:e.fileName}),(0,h.jsx)(`p`,{className:`preview-unsupported-hint`,children:u(`preview.unsupported`)})]}),e.subtype===`text`&&(0,h.jsxs)(`div`,{className:`preview-text-container`,children:[(0,h.jsx)(`div`,{className:`preview-text-header`,children:(0,h.jsx)(`span`,{translate:`no`,children:e.fileName})}),p?(0,h.jsxs)(`div`,{className:`preview-text-loading`,children:[(0,h.jsx)(o,{size:24,className:`preview-text-spinner`}),(0,h.jsx)(`p`,{children:u(`preview.textLoading`)}),(0,h.jsx)(`p`,{className:`preview-text-loading-hint`,children:u(`preview.firstSyncHint`)})]}):(0,h.jsx)(`pre`,{className:`preview-text`,translate:`no`,children:d||u(`preview.emptyFile`)})]})]})]})}export{u as a,d as i,p as n,f as r,_ as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{n as t,r as n,t as r}from"./AccountMenu-BgbcUc0m.js";import{E as i,x as a}from"./index-DjBN7bZV.js";var o=e();function s(){return(0,o.jsx)(`nav`,{className:`mkt-nav`,children:(0,o.jsxs)(`div`,{className:`mkt-nav-inner`,children:[(0,o.jsxs)(`button`,{type:`button`,className:`mkt-nav-logo`,onClick:a(),children:[(0,o.jsx)(i,{size:18}),(0,o.jsx)(`span`,{children:`MOST PEOPLE`})]}),(0,o.jsxs)(`div`,{className:`mkt-nav-cta`,children:[(0,o.jsx)(t,{}),(0,o.jsx)(n,{}),(0,o.jsx)(r,{})]})]})})}export{s as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{W as t}from"./useAppStore-DOnk608w.js";import{t as n}from"./download-COQOcPqI.js";import{n as r,r as i,t as a}from"./AccountMenu-BgbcUc0m.js";import{A as o,b as s}from"./index-DjBN7bZV.js";import{t as c}from"./LogoIcon-B2fFe0l1.js";var l={name:`most-box`,version:`0.3.2`,description:`MostBox - chat-first P2P toolbox for files, notes, and game rooms`,type:`module`,main:`electron/main.js`,bin:{"most-box":`server/cli.js`},files:[`out`,`public`,`electron`,`server/src`,`server/index.js`,`server/cli.js`],scripts:{start:`vite`,server:`node --watch server/index.js`,desktop:`npm run electron:dev`,build:`vite build && node scripts/prepare-start-static.mjs`,preview:`vite preview`,serve:`npm run build && node server/index.js`,test:`node --test server/tests/**/*.test.js`,"test:unit":`node --test server/tests/unit/*.test.js`,"test:desktop":`node --test electron/*.test.js`,"test:frontend":`node --test src/tests/*.test.js`,"test:protocol":`node --test --test-name-pattern "extracts CID and filename|matches golden CID samples|publishes a file from Buffer|lists published files|pulls through local seed nodes" server/tests/unit/cid.test.js server/tests/integration/cid.test.js server/tests/integration/engine.test.js`,typecheck:`tsc -p tsconfig.typecheck.json`,"typecheck:strict-router":`tsc -p tsconfig.strict-router.json`,"check:static-output":`node scripts/check-static-output.mjs`,format:`npx prettier --write .`,lint:`npx eslint .`,"r2:cors":`node scripts/configure-r2-cors.mjs`,"electron:dev":`concurrently "npm run build" "wait-on out/index.html && electron ."`,"electron:rebuild":`electron-rebuild -f -w sodium-native`,"electron:build":`npm run build && npm run electron:rebuild && electron-builder`,"electron:build:win":`npm run build && npm run electron:rebuild && electron-builder --win`,"electron:build:win:x64":`npm run electron:build:win -- --x64`,"electron:build:win:arm64":`npm run electron:build:win -- --arm64`,"electron:build:mac":`npm run build && npm run electron:rebuild && electron-builder --mac`,"electron:build:linux":`npm run build && npm run electron:rebuild && electron-builder --linux`},keywords:[`p2p`,`chat`,`file-sharing`,`file-transfer`,`hyperswarm`,`hypercore`,`hyperdrive`],license:`MIT`,dependencies:{"@dicebear/core":`^10.3.0`,"@dicebear/styles":`^10.2.0`,"@hono/node-server":`^2.0.6`,"@tanstack/react-router":`^1.170.16`,"@tanstack/react-start":`^1.168.26`,b4a:`^1.8.1`,busboy:`^1.6.0`,corestore:`^7.11.0`,dayjs:`^1.11.21`,ethers:`^6.17.0`,eventemitter3:`^5.0.4`,hono:`^4.12.27`,hypercore:`^11.33.2`,hyperdrive:`^13.3.2`,hyperswarm:`^4.17.0`,"ipfs-unixfs-importer":`^17.0.1`,multiformats:`^14.0.2`,tweetnacl:`^1.0.3`,ws:`^8.21.0`},devDependencies:{"@electron/rebuild":`^4.0.4`,"@eslint/js":`^10.0.1`,"@iconify/react":`^6.0.2`,"@mantine/hooks":`^9.4.0`,"@milkdown/crepe":`^7.21.2`,"@milkdown/utils":`^7.21.2`,"@types/react":`^19.2.17`,"@vitejs/plugin-react":`^6.0.3`,concurrently:`^10.0.3`,electron:`^42.5.0`,"electron-builder":`^26.15.3`,esbuild:`^0.28.1`,eslint:`^10.5.0`,globals:`^17.7.0`,ky:`^2.0.2`,"lucide-react":`^1.21.0`,prettier:`^3.8.4`,"qrcode.react":`^4.2.0`,react:`^19.2.7`,"react-dom":`^19.2.7`,typescript:`6.0.3`,"typescript-eslint":`^8.62.0`,vite:`^8.1.0`,"wait-on":`^9.0.10`,zustand:`^5.0.14`},overrides:{"brace-expansion":`5.0.6`,postcss:`8.5.15`,ws:`$ws`},build:{appId:`com.mostbox.app`,productName:`MostBox`,publish:[{provider:`github`,releaseType:`release`}],directories:{output:`dist`},afterPack:`electron/afterPack.cjs`,files:[`out/**/*`,`electron/**/*`,`server/src/**/*`,`server/index.js`,`server/cli.js`,`package.json`,`!**/*.map`,`!electron/**/*.test.js`,`!server/tests/**/*`],asarUnpack:[`**/*.node`,`**/sodium-native/**`],protocols:[{name:`MostBox Link`,schemes:[`most`]}],win:{target:[`nsis`],artifactName:"${productName}-${version}-win-${arch}-setup.${ext}",icon:`public/logo.ico`},nsis:{oneClick:!1,allowToChangeInstallationDirectory:!0,createDesktopShortcut:!0,createStartMenuShortcut:!0,shortcutName:`MostBox`},mac:{artifactName:"${productName}-${version}-mac-${arch}.${ext}",target:[{target:`dmg`,arch:[`x64`,`arm64`]}],icon:`public/logo-512.png`,category:`public.app-category.utilities`},dmg:{contents:[{x:130,y:220},{x:410,y:220,type:`link`,path:`/Applications`}]},linux:{artifactName:"${productName}-${version}-linux-${arch}.${ext}",target:[{target:`AppImage`,arch:[`x64`,`arm64`]}],icon:`public/logo-512.png`,category:`Utility`}}},u=e(),d=[{to:`/`,labelKey:`footer.about`},{to:`/ping/`,labelKey:`footer.network`},{href:`https://github.com/most-people/most`,labelKey:null,label:`GitHub`,external:!0}],f=l.version;function p(){let{t:e}=o();return(0,u.jsx)(`footer`,{className:`mkt-footer`,children:(0,u.jsx)(`div`,{className:`mkt-container`,children:(0,u.jsxs)(`div`,{className:`mkt-footer-inner`,children:[(0,u.jsx)(`div`,{className:`mkt-footer-links`,children:d.map(n=>`external`in n?(0,u.jsx)(`a`,{href:n.href,target:`_blank`,rel:`noopener noreferrer`,children:n.label},n.href):(0,u.jsx)(t,{to:n.to,children:e(n.labelKey)},n.to))}),(0,u.jsxs)(`span`,{className:`mkt-footer-copy`,children:[`© `,new Date().getFullYear(),` MOST PEOPLE · MIT License`]}),(0,u.jsxs)(`span`,{className:`mkt-footer-build`,translate:`no`,children:[`v`,f]})]})})})}function m({children:e,header:t}){return(0,u.jsxs)(`div`,{className:`mkt-layout`,children:[t??(0,u.jsx)(h,{}),(0,u.jsx)(`main`,{className:`mkt-layout-main`,children:e}),(0,u.jsx)(p,{})]})}function h(){let{t:e}=o(),l=s();return(0,u.jsx)(`nav`,{className:`mkt-nav`,children:(0,u.jsxs)(`div`,{className:`mkt-nav-inner`,children:[(0,u.jsxs)(t,{to:`/`,className:`mkt-nav-logo`,children:[(0,u.jsx)(c,{}),`MOST PEOPLE`]}),(0,u.jsxs)(`div`,{className:`mkt-nav-cta`,children:[(0,u.jsx)(r,{}),(0,u.jsx)(i,{}),!l&&(0,u.jsxs)(t,{to:`/download/`,className:`btn btn-primary mkt-nav-preview`,children:[(0,u.jsx)(n,{size:16}),e(`nav.downloadClient`)]}),(0,u.jsx)(a,{})]})]})})}export{m as t};
|