Compare commits

...

4 Commits

Author SHA1 Message Date
Sanaei 5b80d4562d chore(docs): bump docs dependencies
Update fumadocs-core/mdx/ui to 16.14.3, lucide-react to 1.31.0, @types/node to 26.2.0, typescript-eslint to 8.67.0, esbuild to 0.28.2, shiki to 4.4.3, and various other transitive dependencies.
2026-08-12 19:59:41 +02:00
dependabot[bot] e2f75acad2 chore(deps): bump github.com/klauspost/compress from 1.19.1 to 1.19.2 (#6212)
Bumps [github.com/klauspost/compress](https://github.com/klauspost/compress) from 1.19.1 to 1.19.2.
- [Release notes](https://github.com/klauspost/compress/releases)
- [Commits](https://github.com/klauspost/compress/compare/v1.19.1...v1.19.2)

---
updated-dependencies:
- dependency-name: github.com/klauspost/compress
  dependency-version: 1.19.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-12 16:57:37 +02:00
Chen, Ting-An 69a8237581 fix(i18n): localize Chinese Xray labels (#6202)
* fix(i18n): localize Traditional Chinese Xray labels

Several navigation, outbound, balancer, VPN, and DNS labels still displayed their English source text in the zh-TW interface. Translate the non-protocol labels while retaining established Xray terminology.

* fix(i18n): localize Simplified Chinese Xray labels

Mirror the reviewed Xray UI coverage in zh-CN so the same labels no longer fall back to English there.

Signed-off-by: 陳廷安 <73953029+nrps9909@users.noreply.github.com>

---------

Signed-off-by: 陳廷安 <73953029+nrps9909@users.noreply.github.com>
Co-authored-by: Sanaei <ho3ein.sanaei@gmail.com>
2026-08-12 16:56:11 +02:00
Sanaei f3f57e66f5 fix(frontend): wait out Collapse fade before a11y scan in ConfigBlock story
Collapse animates opacity in over motionDurationMid; the Collapsed story's
play function only waited for visibility, so the addon-a11y color-contrast
check could sample a mid-fade, lower-contrast frame and fail flakily in CI.
Wait for the panel's opacity to settle to 1 first.
2026-08-12 16:43:57 +02:00
7 changed files with 536 additions and 570 deletions
+6 -6
View File
@@ -19,12 +19,12 @@
},
"dependencies": {
"@orama/orama": "^3.1.18",
"fumadocs-core": "^16.14.1",
"fumadocs-core": "^16.14.3",
"fumadocs-docgen": "^3.1.0",
"fumadocs-mdx": "^15.2.2",
"fumadocs-mdx": "^15.2.3",
"fumadocs-openapi": "^11.2.3",
"fumadocs-ui": "^16.14.1",
"lucide-react": "^1.29.0",
"fumadocs-ui": "^16.14.3",
"lucide-react": "^1.31.0",
"mermaid": "^11.16.1",
"next": "16.3.0",
"next-themes": "^0.4.6",
@@ -38,7 +38,7 @@
"devDependencies": {
"@tailwindcss/postcss": "^4.3.3",
"@types/mdx": "^2.0.14",
"@types/node": "^26.1.2",
"@types/node": "^26.2.0",
"@types/react": "^19.2.18",
"@types/react-dom": "^19.2.4",
"eslint": "^9.39.5",
@@ -50,5 +50,5 @@
"typescript": "6.0.3",
"vitest": "^4.1.10"
},
"packageManager": "pnpm@11.20.0"
"packageManager": "pnpm@11.21.0+sha512.521705bce689924eac72f5a3587122f362689ef6571e55ba80076fd637c11132ecffada26fad4ea79c485bfddbfd3d5a2a5b05805a77e893de71ec8a6cca3bb1"
}
+503 -543
View File
File diff suppressed because it is too large Load Diff
@@ -36,11 +36,17 @@ const sampleLink = 'vless://11112222-3333-4444-5555-666677778888@panel.example.c
export const Collapsed: Story = {
args: { label: 'vless', text: sampleLink, fileName: 'client-config.txt' },
play: async ({ canvas, userEvent }) => {
play: async ({ canvas, canvasElement, userEvent }) => {
await expect(canvas.queryByText(/vless:\/\/11112222/)).not.toBeInTheDocument();
await userEvent.click(canvas.getByText('vless'));
const configText = await canvas.findByText(/vless:\/\/11112222/);
await waitFor(() => expect(configText).toBeVisible());
// Collapse fades content in over motionDurationMid; wait it out so the a11y
// scan doesn't sample a mid-transition, lower-contrast opacity.
await waitFor(() => {
const panel = canvasElement.querySelector('.ant-collapse-panel');
expect(panel && getComputedStyle(panel).opacity).toBe('1');
});
await expect(canvas.getByRole('button', { name: 'Copy' })).toBeVisible();
await expect(canvas.getByRole('button', { name: 'Download' })).toBeVisible();
await expect(canvas.getByRole('button', { name: 'QR Code' })).toBeVisible();
+1 -1
View File
@@ -64,7 +64,7 @@ require (
github.com/jinzhu/now v1.1.5 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/juju/ratelimit v1.0.2 // indirect
github.com/klauspost/compress v1.19.1
github.com/klauspost/compress v1.19.2
github.com/klauspost/cpuid/v2 v2.4.0 // indirect
github.com/leodido/go-urn v1.5.0 // indirect
github.com/lufia/plan9stats v0.0.0-20260802145828-341c2f0c90b5 // indirect
+2 -2
View File
@@ -115,8 +115,8 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/juju/ratelimit v1.0.2 h1:sRxmtRiajbvrcLQT7S+JbqU0ntsb9W2yhSdNN8tWfaI=
github.com/juju/ratelimit v1.0.2/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk=
github.com/klauspost/compress v1.19.1 h1:VsB4HPswih7mmZ8WleSFQ75c/Ui1M4trX5oAsJnhSlk=
github.com/klauspost/compress v1.19.1/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
github.com/klauspost/compress v1.19.2 h1:hMRETovs/pu/dVWN7zIT1PGG8t509MwT6bO7XSi26R8=
github.com/klauspost/compress v1.19.2/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
github.com/klauspost/cpuid/v2 v2.4.0 h1:S6Hrbc7+ywsr0r+RLapfGBHfyefhCTwEh3A0tV913Dw=
github.com/klauspost/cpuid/v2 v2.4.0/go.mod h1:19jmZ9mjzoF//ddRSUsv0zfBTJWh3QJh9FNxZTMrGxU=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+8 -8
View File
@@ -1503,8 +1503,8 @@
},
"outbound": {
"tag": "标签",
"egress": "Egress",
"egressHint": "Run an HTTP test to show egress IP and country.",
"egress": "出口",
"egressHint": "执行 HTTP 测试以显示出口 IP 和所在国家/地区。",
"outboundStatus": "出站状态",
"sendThrough": "发送通过",
"targetStrategy": "目标解析策略",
@@ -1607,14 +1607,14 @@
"tagDuplicate": "该标签已被其他均衡器使用",
"tagPlaceholder": "唯一均衡器标签",
"selector": "选择器",
"fallback": "Fallback",
"fallback": "备用负载均衡器",
"cycleTooltip": "循环: {path} → (回到 {start})",
"expected": "期望",
"expectedPlaceholder": "最佳节点数",
"maxRtt": "最大 RTT",
"tolerance": "容差",
"baselines": "Baselines",
"costs": "Costs",
"baselines": "基准值",
"costs": "成本设置",
"costMatch": "标签匹配模式",
"costValue": "权重",
"costRegexp": "正则表达式匹配",
@@ -1635,7 +1635,7 @@
"userLevel": "用户级别"
},
"nord": {
"accessToken": "Access token",
"accessToken": "访问令牌",
"privateKey": "私钥",
"noServers": "未找到选定国家/地区的服务器",
"noPublicKey": "选定的服务器未公布 NordLynx 公钥。",
@@ -1651,7 +1651,7 @@
"licenseError": "设置 WARP 许可证失败。",
"fetchFirst": "请先获取 WARP 配置。",
"createAccount": "创建 WARP 账户",
"accessToken": "Access token",
"accessToken": "访问令牌",
"deviceId": "设备 ID",
"licenseKey": "许可证密钥",
"privateKey": "私钥",
@@ -1702,7 +1702,7 @@
"timeoutMs": "超时 (毫秒)",
"skipFallback": "跳过回退",
"finalQuery": "最终查询",
"hosts": "Hosts",
"hosts": "主机映射",
"hostsAdd": "添加 Host",
"hostsEmpty": "未定义任何 Host",
"hostsDomain": "域名 (例如 domain:example.com)",
+9 -9
View File
@@ -107,7 +107,7 @@
"outbounds": "出站",
"apiDocs": "API 文件",
"donate": "捐贈",
"hosts": "Hosts",
"hosts": "主機",
"docs": "文件",
"openMenu": "開啟選單",
"pinSidebar": "固定側邊欄",
@@ -1503,8 +1503,8 @@
},
"outbound": {
"tag": "標籤",
"egress": "Egress",
"egressHint": "Run an HTTP test to show egress IP and country.",
"egress": "出口",
"egressHint": "執行 HTTP 測試以顯示出口 IP 與所在國家/地區。",
"outboundStatus": "出站狀態",
"sendThrough": "傳送通過",
"targetStrategy": "目標解析策略",
@@ -1607,14 +1607,14 @@
"tagDuplicate": "該標籤已被其他均衡器使用",
"tagPlaceholder": "唯一均衡器標籤",
"selector": "選擇器",
"fallback": "Fallback",
"fallback": "備用負載平衡器",
"cycleTooltip": "循環: {path} → (回到 {start})",
"expected": "期望",
"expectedPlaceholder": "最佳節點數",
"maxRtt": "最大 RTT",
"tolerance": "容差",
"baselines": "Baselines",
"costs": "Costs",
"baselines": "基準值",
"costs": "成本設定",
"costMatch": "標籤比對模式",
"costValue": "權重",
"costRegexp": "正規表示式比對",
@@ -1635,7 +1635,7 @@
"userLevel": "用戶級別"
},
"nord": {
"accessToken": "Access token",
"accessToken": "存取權杖",
"privateKey": "私鑰",
"noServers": "未找到選定國家/地區的伺服器",
"noPublicKey": "選定的伺服器未公布 NordLynx 公鑰。",
@@ -1651,7 +1651,7 @@
"licenseError": "設定 WARP 授權失敗。",
"fetchFirst": "請先取得 WARP 設定。",
"createAccount": "建立 WARP 帳號",
"accessToken": "Access token",
"accessToken": "存取權杖",
"deviceId": "裝置 ID",
"licenseKey": "授權金鑰",
"privateKey": "私鑰",
@@ -1702,7 +1702,7 @@
"timeoutMs": "逾時 (毫秒)",
"skipFallback": "跳過回退",
"finalQuery": "最終查詢",
"hosts": "Hosts",
"hosts": "主機對應",
"hostsAdd": "新增 Host",
"hostsEmpty": "未定義任何 Host",
"hostsDomain": "網域 (例如 domain:example.com)",