dsh-plugin 1.3.6 → 1.3.8
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.en.md +43 -18
- package/README.md +43 -18
- package/client/client.js +486 -334
- package/client/client.js.map +1 -1
- package/lib/http/routes.js +84 -5
- package/lib/services/probe.js +43 -0
- package/lib/types/services/probe.d.ts +11 -0
- package/package.json +3 -3
- package/src/client/components/PluginHubSection.tsx +35 -0
- package/src/client/components/catalog/CatalogList.tsx +11 -3
- package/src/client/components/modals/NotificationsModal.tsx +18 -2
- package/src/client/components/modals/modals.tsx +18 -3
- package/src/client/components/views/DiagnosticsView.tsx +14 -4
- package/src/client/components/views/MarketView.tsx +5 -1
- package/src/client/components/views/SettingsView.tsx +75 -14
- package/src/client/hooks/useTaskQueue.ts +6 -2
- package/src/client/locales.ts +31 -4
- package/src/client/logic/failures.ts +38 -9
- package/src/client/logic/renderMarkdown.ts +2 -2
- package/src/client/logic/urls.ts +24 -17
- package/src/client/styles/List.module.css +24 -1
- package/src/client/styles/Modal.module.css +48 -7
- package/src/client/styles/SettingsView.module.css +24 -0
- package/src/server/http/routes.ts +81 -6
- package/src/server/services/probe.ts +43 -0
package/client/client.js
CHANGED
|
@@ -31,7 +31,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
31
31
|
fork: "Fork",
|
|
32
32
|
loading: "正在加载插件数据…",
|
|
33
33
|
failed: "插件数据加载失败",
|
|
34
|
-
|
|
34
|
+
failedDescNoProxy: "你的网络似乎不通,无法获取插件目录数据。请检查网络连接后重试;或点击右上角按钮在浏览器中打开插件中心。",
|
|
35
|
+
failedDescProxy: "你的网络似乎不通,或设置里的 HTTP 代理地址不可达,无法获取插件目录数据。请检查代理设置与网络连接后重试;或点击右上角按钮在浏览器中打开插件中心。",
|
|
35
36
|
retry: "重试",
|
|
36
37
|
install: "安装",
|
|
37
38
|
cliOnlyHint: "此插件可能需命令行辅助,失败时复制上方命令到 dsh 终端",
|
|
@@ -110,6 +111,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
110
111
|
settingsCheckOnStartDesc: "打开插件中心时检查已安装插件是否有新版,发现更新会提示",
|
|
111
112
|
settingsProxy: "HTTP 代理",
|
|
112
113
|
settingsProxyDesc: "npm / git / 目录数据请求统一走该代理;留空直连",
|
|
114
|
+
proxyCheckChecking: "正在测试该代理地址…",
|
|
115
|
+
proxyCheckOk: "测试可达,安装与目录请求将统一走该代理",
|
|
116
|
+
proxyCheckFail: "此地址测试不通,仍可保存;请确认代理已开启、地址与端口无误",
|
|
113
117
|
settingsMirror: "npm 镜像源",
|
|
114
118
|
settingsMirrorDesc: "默认跟随本机 npm 配置;官方源慢可换国内镜像",
|
|
115
119
|
mirrorNone: "未配置(跟随本机 npm 配置)",
|
|
@@ -183,6 +187,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
183
187
|
diagNpmUnset: "未配置(跟随本机 npm 配置)",
|
|
184
188
|
diagGithub: "GitHub",
|
|
185
189
|
diagCatalog: "目录站点",
|
|
190
|
+
diagProxy: "HTTP 代理",
|
|
186
191
|
diagOk: "OK",
|
|
187
192
|
diagChecking: "检测中…",
|
|
188
193
|
diagIdle: "未检测",
|
|
@@ -279,9 +284,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
279
284
|
failIssueBig: "一键提交 BUG 到 GitHub Issue 为开源作贡献",
|
|
280
285
|
failPrepareHint: "该插件安装时的构建脚本执行失败(git 分发常缺失子模块或构建产物),属插件打包分发问题。请向作者仓库提交 Issue 反馈。",
|
|
281
286
|
failPackagingHint: "该插件不支持官方默认安装方式:其 git 分发缺少构建产物(package.json 声明的入口文件在仓库中不存在),说明作者未适配官方安装流程。请到作者仓库提交 Issue 反馈,请其提交构建产物或发布 npm 版。",
|
|
282
|
-
failIgnoredBuild: "
|
|
287
|
+
failIgnoredBuild: "该插件或其依赖需要执行构建脚本,被 pnpm 的安全白名单(allowBuilds)默认拦截导致安装失败(如原生模块 node-pty、或 git 安装时插件的 prepare 脚本)—— 其他插件不受影响,属该插件的依赖/打包问题。建议向作者仓库一键反馈,请作者改用预编译版本(如 node-pty-prebuilt-multiarch)或移除安装期构建。",
|
|
283
288
|
failNpmTooLow: "怀疑本机 npm 版本过低:npm 解析插件依赖时内部崩溃(这是 npm 自身的已知缺陷,不是插件问题)。请升级 npm 后重试:npm install -g npm@latest",
|
|
284
289
|
failNpmTooLowV: "本机 npm 版本过低(当前 v{v}):npm 解析插件依赖时内部崩溃(这是 npm 自身的已知缺陷,不是插件问题)。请升级 npm 后重试:npm install -g npm@latest",
|
|
290
|
+
failNetworkHint: "安装前检测到网络不通:无法连接到安装源(可能是断网、DNS 解析失败、被防火墙拦截,或代理配置有问题)。这不是插件本身的问题 —— 请检查网络连接,或到「设置」里确认 HTTP 代理配置,再到「系统诊断」运行一次连通性检测,然后重试。",
|
|
291
|
+
failNetworkTarget: "无法访问 {url} —— 你的网络连接不通",
|
|
292
|
+
failNetworkRunDiag: "去系统诊断检测网络",
|
|
285
293
|
reportIssue: "去插件仓库提交 Issue",
|
|
286
294
|
detail: "打开详情",
|
|
287
295
|
noResult: "没有找到匹配的插件",
|
|
@@ -336,7 +344,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
336
344
|
fork: "Fork",
|
|
337
345
|
loading: "Loading plugin data…",
|
|
338
346
|
failed: "Failed to load plugin data",
|
|
339
|
-
|
|
347
|
+
failedDescNoProxy: "Your network seems unreachable, so the plugin catalog could not be loaded. Please check your connection and retry; or open the hub in your browser with the button above.",
|
|
348
|
+
failedDescProxy: "Your network seems unreachable, or the HTTP proxy in Settings is unreachable, so the plugin catalog could not be loaded. Please check the proxy address and your connection, then retry; or open the hub in your browser with the button above.",
|
|
340
349
|
retry: "Retry",
|
|
341
350
|
install: "Install",
|
|
342
351
|
cliOnlyHint: "This plugin may need command-line help; if it fails, copy the command above and run it in your dsh terminal",
|
|
@@ -417,6 +426,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
417
426
|
settingsAutoInstallDesc: "Install detected updates in the background without asking (a host restart applies them)",
|
|
418
427
|
settingsProxy: "HTTP proxy",
|
|
419
428
|
settingsProxyDesc: "Route npm, git and catalog requests through this proxy; leave empty to connect directly",
|
|
429
|
+
proxyCheckChecking: "Testing this proxy address…",
|
|
430
|
+
proxyCheckOk: "Reachable — installs and catalog requests will route through it",
|
|
431
|
+
proxyCheckFail: "Unreachable, but you can still save it; make sure the proxy is running and the address and port are correct",
|
|
420
432
|
settingsMirror: "npm mirror",
|
|
421
433
|
settingsMirrorDesc: "Unset by default — follows local npm config; pick a domestic mirror if slow",
|
|
422
434
|
mirrorNone: "Unset (follow local npm config)",
|
|
@@ -490,6 +502,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
490
502
|
diagNpmUnset: "Unset (follow local npm config)",
|
|
491
503
|
diagGithub: "GitHub",
|
|
492
504
|
diagCatalog: "Catalog site",
|
|
505
|
+
diagProxy: "HTTP proxy",
|
|
493
506
|
diagOk: "OK",
|
|
494
507
|
diagChecking: "Checking…",
|
|
495
508
|
diagIdle: "Not checked",
|
|
@@ -587,9 +600,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
587
600
|
failIssueBig: "Report this bug to GitHub — contribute to open source",
|
|
588
601
|
failPrepareHint: "This plugin failed while running its build scripts during install (git tarballs often miss submodules or build output). This is a packaging issue of the plugin itself — please report it to the author repository.",
|
|
589
602
|
failPackagingHint: "This plugin does not support the official default install method: its git distribution lacks the build output (the entry file declared in package.json is not in the repository), so it has not been adapted to the official install flow. Please file an Issue on the author's repo asking for committed build output or an npm release.",
|
|
590
|
-
failIgnoredBuild: "This plugin
|
|
603
|
+
failIgnoredBuild: "This plugin (or its dependencies) needs to run build scripts, which pnpm blocks by default via its allowBuilds allowlist, so the install fails (e.g. native modules like node-pty, or the plugin's own prepare script on git installs) — other plugins are unaffected. This is a dependency/packaging issue of the plugin itself. Please report it to the author repository and ask the author to ship a prebuilt variant (e.g. node-pty-prebuilt-multiarch) or drop install-time builds.",
|
|
591
604
|
failNpmTooLow: "Your local npm may be too old: npm crashed internally while resolving the plugin's dependencies (a known npm bug — not a plugin issue). Please upgrade npm and retry: npm install -g npm@latest",
|
|
592
605
|
failNpmTooLowV: "Your local npm is too old (v{v}): npm crashed internally while resolving the plugin's dependencies (a known npm bug — not a plugin issue). Please upgrade npm and retry: npm install -g npm@latest",
|
|
606
|
+
failNetworkHint: "The network could not be reached before install: the install source is unreachable (offline, DNS failure, firewall block, or a misconfigured proxy). This is not a problem with the plugin itself — please check your connection, confirm the HTTP proxy in Settings, run a connectivity check under System Diagnostics, then retry.",
|
|
607
|
+
failNetworkTarget: "Cannot reach {url} — your network connection is down",
|
|
608
|
+
failNetworkRunDiag: "Run a network diagnostic",
|
|
593
609
|
reportIssue: "Report an Issue to the plugin repo",
|
|
594
610
|
detail: "Open details",
|
|
595
611
|
noResult: "No plugins match your search",
|
|
@@ -642,46 +658,46 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
642
658
|
css: css$11
|
|
643
659
|
});
|
|
644
660
|
var Header_module_css_default = {
|
|
661
|
+
"headerRight": "qikqja_headerRight",
|
|
662
|
+
"resultCount": "qikqja_resultCount",
|
|
645
663
|
"adBanner": "qikqja_adBanner",
|
|
664
|
+
"segLabel": "qikqja_segLabel",
|
|
665
|
+
"adBadge": "qikqja_adBadge",
|
|
666
|
+
"search": "qikqja_search",
|
|
667
|
+
"root": "qikqja_root",
|
|
668
|
+
"headerTitleRow": "qikqja_headerTitleRow",
|
|
669
|
+
"resultSeg": "qikqja_resultSeg",
|
|
670
|
+
"tabCount": "qikqja_tabCount",
|
|
646
671
|
"githubIcon": "qikqja_githubIcon",
|
|
647
|
-
"
|
|
648
|
-
"segBtnActive": "qikqja_segBtnActive",
|
|
672
|
+
"title": "qikqja_title",
|
|
649
673
|
"segBtn": "qikqja_segBtn",
|
|
650
|
-
"aboutBtn": "qikqja_aboutBtn",
|
|
651
|
-
"version": "qikqja_version",
|
|
652
|
-
"segGroup": "qikqja_segGroup",
|
|
653
674
|
"tabs": "qikqja_tabs",
|
|
675
|
+
"versionBtn": "qikqja_versionBtn",
|
|
676
|
+
"aboutBtn": "qikqja_aboutBtn",
|
|
677
|
+
"logoIcon": "qikqja_logoIcon",
|
|
678
|
+
"controls": "qikqja_controls",
|
|
654
679
|
"taglineLink": "qikqja_taglineLink",
|
|
655
|
-
"
|
|
656
|
-
"
|
|
657
|
-
"
|
|
658
|
-
"
|
|
680
|
+
"hubUpdateBadge": "qikqja_hubUpdateBadge",
|
|
681
|
+
"copyIcon": "qikqja_copyIcon",
|
|
682
|
+
"segBtnActive": "qikqja_segBtnActive",
|
|
683
|
+
"searchRow": "qikqja_searchRow",
|
|
659
684
|
"adText": "qikqja_adText",
|
|
660
|
-
"root": "qikqja_root",
|
|
661
|
-
"langBtn": "qikqja_langBtn",
|
|
662
|
-
"sortGroup": "qikqja_sortGroup",
|
|
663
|
-
"adArrow": "qikqja_adArrow",
|
|
664
|
-
"controls": "qikqja_controls",
|
|
665
685
|
"tabActive": "qikqja_tabActive",
|
|
666
|
-
"
|
|
667
|
-
"
|
|
668
|
-
"
|
|
686
|
+
"githubLink": "qikqja_githubLink",
|
|
687
|
+
"tabsRow": "qikqja_tabsRow",
|
|
688
|
+
"sortGroup": "qikqja_sortGroup",
|
|
669
689
|
"header": "qikqja_header",
|
|
670
|
-
"
|
|
671
|
-
"
|
|
672
|
-
"
|
|
690
|
+
"langBtn": "qikqja_langBtn",
|
|
691
|
+
"brandTitle": "qikqja_brandTitle",
|
|
692
|
+
"tagline": "qikqja_tagline",
|
|
673
693
|
"tab": "qikqja_tab",
|
|
674
|
-
"
|
|
675
|
-
"
|
|
676
|
-
"
|
|
677
|
-
"copyIcon": "qikqja_copyIcon",
|
|
678
|
-
"githubLink": "qikqja_githubLink",
|
|
679
|
-
"searchRow": "qikqja_searchRow",
|
|
680
|
-
"segLabel": "qikqja_segLabel"
|
|
694
|
+
"segGroup": "qikqja_segGroup",
|
|
695
|
+
"version": "qikqja_version",
|
|
696
|
+
"adArrow": "qikqja_adArrow"
|
|
681
697
|
};
|
|
682
698
|
//#endregion
|
|
683
699
|
//#region \0dsh-css:src/client/styles/Modal.module.css.mjs
|
|
684
|
-
const css$10 = ".BiQ1zG_overlay{z-index:998;-webkit-user-select:none;user-select:none;background:#00000061;justify-content:center;align-items:center;animation:.16s ease-out BiQ1zG_overlayIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.BiQ1zG_modal,.BiQ1zG_errorModal{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:10px;flex-direction:column;gap:10px;width:420px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);padding:14px 16px;animation:.18s ease-out BiQ1zG_modalIn;display:flex;box-shadow:0 12px 40px #0000003d}.BiQ1zG_errorModal{width:640px;max-width:calc(100vw - 48px)}.BiQ1zG_modalWide{width:560px;max-width:calc(100vw - 48px)}.BiQ1zG_helpModal{width:720px;max-width:calc(100vw - 48px)}.BiQ1zG_logModal{width:780px;max-width:calc(100vw - 48px);height:min(540px,100vh - 64px)}.BiQ1zG_modalHead{flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;display:flex}.BiQ1zG_modalTitle{color:var(--hub-text-primary);font-size:14px;font-weight:600;line-height:20px}.BiQ1zG_modalTitleBusy{color:var(--hub-brand)}.BiQ1zG_modalTitleQueued{color:var(--hub-warning)}.BiQ1zG_modalClose{width:24px;height:24px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;font-size:16px;line-height:1;display:inline-flex}.BiQ1zG_modalClose:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_modalCloseIcon{flex-shrink:0;width:14px;height:14px}.BiQ1zG_confirmIconWrap{justify-content:center;padding:2px 0 6px;display:flex}.BiQ1zG_confirmIcon{background:var(--hub-brand);border-radius:50%;flex:none;justify-content:center;align-items:center;width:48px;height:48px;display:inline-flex;box-shadow:0 4px 12px #4f6ef747}.BiQ1zG_confirmIconDanger{background:var(--hub-danger);box-shadow:0 4px 12px #d1242f4d}.BiQ1zG_dangerConfirm{color:#fff;background:var(--hub-danger);border:1px solid var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;height:28px;padding:0 14px;font-size:12px;font-weight:600;transition:background-color .12s,border-color .12s}.BiQ1zG_dangerConfirm:hover:not(:disabled){background:var(--hub-danger-hover);border-color:var(--hub-danger-hover)}.BiQ1zG_dangerConfirm:disabled{opacity:.55;cursor:default}.BiQ1zG_confirmPrimary{color:#fff;background:var(--hub-brand);border:1px solid var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;height:28px;padding:0 14px;font-size:12px;font-weight:600;transition:filter .12s}.BiQ1zG_confirmPrimary:hover:not(:disabled){filter:brightness(1.08)}.BiQ1zG_confirmPrimary:disabled{opacity:.55;cursor:default}.BiQ1zG_modalDesc{color:var(--hub-text-secondary);font-size:12px;line-height:18px}.BiQ1zG_trustHint{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:18px}.BiQ1zG_cliOnlyHint{color:var(--hub-text-secondary);background:var(--hub-bg-hover);border-radius:6px;padding:6px 10px;font-size:12px;line-height:18px}.BiQ1zG_failedCopyHint{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:18px}.BiQ1zG_modalRow{align-items:baseline;gap:8px;min-width:0;font-size:12px;line-height:18px;display:flex}.BiQ1zG_modalLabel{min-width:64px;color:var(--hub-text-tertiary);flex-shrink:0}.BiQ1zG_modalValue{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-text-primary);font-weight:500;overflow:hidden}.BiQ1zG_modalLink{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex;overflow:hidden}.BiQ1zG_modalLink:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_linkIcon{flex-shrink:0}.BiQ1zG_modalCmd{color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:space-between;align-items:center;gap:8px;padding:6px 6px 6px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:18px;transition:border-color .12s,background .12s;display:flex}.BiQ1zG_modalCmd:hover{border-color:var(--hub-border-ghost);background:var(--hub-bg-3)}.BiQ1zG_modalCmdText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.BiQ1zG_modalCmdCopy{color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;gap:3px;padding:1px 7px;font-family:inherit;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_modalCmdCopy:hover{color:var(--hub-brand-hover);background:var(--hub-bg-2)}.BiQ1zG_modalActions{justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;display:flex}.BiQ1zG_modalBody{flex-direction:column;flex:auto;gap:10px;min-height:0;display:flex;overflow-y:auto}.BiQ1zG_toast{z-index:1000;background:var(--hub-btn-fill);color:var(--hub-text-on-fill);pointer-events:none;white-space:nowrap;border:none;border-radius:8px;padding:10px 16px;font-size:12px;font-weight:500;line-height:18px;animation:.22s ease-out BiQ1zG_toastIn;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 6px 24px #00000047}@keyframes BiQ1zG_toastIn{0%{opacity:0;transform:translate(-50%,-44%)}to{opacity:1;transform:translate(-50%,-50%)}}.BiQ1zG_toastFail{background:var(--hub-danger);color:#fff;border-color:#ffffff3d}.BiQ1zG_queueSection{flex-direction:column;gap:6px;display:flex}.BiQ1zG_queueSectionTitle{color:var(--hub-text-secondary);padding:4px 2px 0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_pendingRowStatus{color:var(--hub-warn);flex-shrink:0;font-weight:500}.BiQ1zG_pendingRowActions{flex-shrink:0;gap:8px;margin-left:auto;display:flex}.BiQ1zG_queueRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;flex-direction:column;gap:5px;padding:8px 10px;font-size:12px;line-height:18px;transition:background .12s;display:flex}.BiQ1zG_queueRow:hover{background:var(--hub-brand-tint)}.BiQ1zG_queueRowHead{align-items:center;gap:10px;display:flex}.BiQ1zG_queueRowTarget{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-text-primary);flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:hidden}.BiQ1zG_queueRowDesc{color:var(--hub-text-tertiary);-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.BiQ1zG_queueRowBody{align-items:center;gap:8px;display:flex}.BiQ1zG_queueRowStatus{color:var(--hub-brand);flex-shrink:0;font-weight:500}.BiQ1zG_queueRowTrack{flex:1;min-width:0}.BiQ1zG_queueRowPct{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0}.BiQ1zG_stripCancel{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;flex-shrink:0;padding:2px 10px;font-size:12px;line-height:18px;transition:background .12s,color .12s}.BiQ1zG_stripCancel:hover{background:var(--hub-danger-tint);color:var(--hub-danger-text)}.BiQ1zG_stripCancel:disabled{opacity:.45;cursor:default}.BiQ1zG_queuedHint{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);border-radius:6px;padding:5px 10px;font-size:12px;line-height:18px}.BiQ1zG_errorTitle{color:var(--hub-danger-text);font-size:14px;font-weight:600;line-height:20px}.BiQ1zG_errorBox{border:1px solid var(--hub-danger-border);background:var(--hub-danger-tint-weak);max-height:240px;color:var(--hub-text-primary);white-space:pre-wrap;word-break:break-word;-webkit-user-select:none;user-select:none;border-radius:6px;margin:0;padding:10px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:17px;overflow:auto}.BiQ1zG_errorCopySoft{color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;padding:2px 8px;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_errorCopySoft:hover{color:var(--hub-text-secondary);background:var(--hub-bg-2)}.BiQ1zG_errorHint{color:var(--hub-text-tertiary);font-size:12px;line-height:18px}.BiQ1zG_modalCancel,.BiQ1zG_modalCopy{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_modalCancel:hover,.BiQ1zG_modalCopy:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_modalInstall{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_modalInstall:hover{background:var(--hub-btn-hover)}.BiQ1zG_modalCopy:disabled,.BiQ1zG_modalInstall:disabled,.BiQ1zG_modalCancel:disabled,.BiQ1zG_modalClose:disabled,.BiQ1zG_uninstallConfirm:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_uninstallConfirm{color:#fff;background:var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_uninstallConfirm:hover{background:var(--hub-danger-hover)}.BiQ1zG_result{text-align:center;flex-direction:column;align-items:center;gap:5px;padding:10px 0 2px;display:flex}.BiQ1zG_resultCheck{background:var(--hub-success-tint);width:40px;height:40px;color:var(--hub-success);border-radius:50%;justify-content:center;align-items:center;margin-bottom:3px;display:inline-flex}.BiQ1zG_resultCheckIcon{flex-shrink:0;width:20px;height:20px}.BiQ1zG_resultTitle{color:var(--hub-text-primary);font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_resultDesc{color:var(--hub-text-secondary);font-size:12px;line-height:18px}.BiQ1zG_resultRestarting{color:var(--hub-text-tertiary);padding:12px 0 6px;font-size:12px;line-height:18px}.BiQ1zG_restartLater{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_restartLater:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_restartNow{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_restartNow:hover{background:var(--hub-btn-hover)}.BiQ1zG_restartNow:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_restartNowWarning{color:#fff;background:var(--hub-warning);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_restartNowWarning:hover{background:var(--hub-warning-hover)}.BiQ1zG_restartNowWarning:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_result .BiQ1zG_modalActions{justify-content:center;gap:10px;margin-top:0;padding:6px 0 2px}.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartLater,.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartNow,.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartNowWarning{min-width:100px}.BiQ1zG_progress{margin:10px 0 2px}.BiQ1zG_progressHead{justify-content:flex-end;align-items:center;margin-bottom:3px;display:flex}.BiQ1zG_progressText{color:var(--hub-text-secondary);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:14px}.BiQ1zG_progressTrack{background:var(--hub-border-2);border-radius:2px;height:4px;overflow:hidden}.BiQ1zG_progressFill{background:var(--hub-brand);border-radius:2px;height:100%;transition:width .32s}.BiQ1zG_progressFillFail{background:var(--hub-danger)}@keyframes BiQ1zG_overlayIn{0%{opacity:0}to{opacity:1}}@keyframes BiQ1zG_modalIn{0%{opacity:0;transform:translateY(6px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.BiQ1zG_failList{flex-direction:column;gap:12px;padding-right:2px;display:flex}.BiQ1zG_failRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);border-radius:8px;flex-direction:column;gap:8px;padding:10px 12px;display:flex}.BiQ1zG_failHead{align-items:center;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeList{flex-direction:column;gap:10px;padding-right:2px;display:flex}.BiQ1zG_noticeRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);border-radius:8px;flex-direction:column;align-items:stretch;gap:6px;padding:10px 12px;display:flex}.BiQ1zG_noticeRowMain{align-items:center;gap:10px;width:100%;min-width:0;display:flex}.BiQ1zG_noticeBadgeOk,.BiQ1zG_noticeBadgeFail{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex;box-shadow:0 2px 6px #0000002e}.BiQ1zG_noticeBadgeOk{background:var(--hub-success)}.BiQ1zG_noticeBadgeFail{background:var(--hub-danger)}.BiQ1zG_noticeBadgeIcon{flex-shrink:0;width:12px;height:12px}.BiQ1zG_noticeMain{flex-direction:column;flex:1;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeHead{align-items:center;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeTextOk{color:var(--hub-success);flex-shrink:0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_noticeTextFail{color:var(--hub-danger-text);flex-shrink:0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_noticeFoot{justify-content:flex-end;align-items:center;display:flex}.BiQ1zG_noticeTime{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0;font-size:11px;line-height:16px}.BiQ1zG_noticeRemove{width:22px;height:22px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;margin-left:auto;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_noticeRemove:hover{color:var(--hub-danger-text);background:var(--hub-danger-tint)}.BiQ1zG_noticeRowOk .BiQ1zG_noticeRemove{margin-left:0}.BiQ1zG_noticeRowOk .BiQ1zG_noticeTime{margin-left:auto}.BiQ1zG_noticeRowUpdate{cursor:pointer;transition:border-color .12s,background .12s}.BiQ1zG_noticeRowUpdate:hover{border-color:var(--hub-brand);background:var(--hub-brand-tint)}.BiQ1zG_noticeVersion{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border);font-variant-numeric:tabular-nums;border-radius:5px;flex-shrink:0;padding:0 6px;font-size:11px;font-weight:600;line-height:18px}.BiQ1zG_noticeUpdateGo{color:#fff;background:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:5px;flex-shrink:0;margin-left:2px;padding:2px 8px;font-size:11px;font-weight:600;line-height:16px;transition:background .12s}.BiQ1zG_noticeUpdateGo:hover{background:var(--hub-brand-hover)}.BiQ1zG_noticeIgnore{color:var(--hub-text-secondary);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border-radius:5px;flex-shrink:0;margin-left:2px;padding:1px 8px;font-size:11px;font-weight:500;line-height:16px;transition:color .12s,border-color .12s,background .12s}.BiQ1zG_noticeIgnore:hover{color:var(--hub-danger-text);border-color:var(--hub-danger-border);background:var(--hub-danger-tint)}.BiQ1zG_failKind{border:1px solid #0000;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;font-weight:500;line-height:16px}.BiQ1zG_failKindInstall{color:var(--hub-danger-text);border-color:var(--hub-danger-border);background:var(--hub-danger-tint)}.BiQ1zG_failKindUninstall{color:var(--hub-warn);border-color:var(--hub-warn-border);background:var(--hub-warn-tint)}.BiQ1zG_failRepo{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:18px;text-decoration:none;overflow:hidden}.BiQ1zG_failRepo:hover{text-decoration:underline}.BiQ1zG_failCopy{color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;padding:2px 8px;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_failCopy:hover{color:var(--hub-text-secondary);background:var(--hub-bg-2)}.BiQ1zG_failEmpty{text-align:center;color:var(--hub-text-tertiary);padding:24px 0;font-size:12px;line-height:18px}.BiQ1zG_failClear{color:var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_failClear:hover{color:#fff;background:var(--hub-danger)}.BiQ1zG_failBigIssue{box-sizing:border-box;text-align:center;color:#fff;background:var(--hub-danger);border:1px solid var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;width:100%;margin-top:4px;padding:3px 16px;font-size:13px;font-weight:600;line-height:18px;text-decoration:none;transition:background .12s,border-color .12s,box-shadow .12s;display:block}.BiQ1zG_failBigIssue:hover{background:var(--hub-danger-hover);border-color:var(--hub-danger-hover);box-shadow:0 3px 10px #d1242f59}.BiQ1zG_failPrepareHint{color:var(--hub-warning);background:var(--hub-warning-tint);border:1px solid var(--hub-warning-border);border-radius:6px;margin-top:6px;padding:8px 12px;font-size:12px;line-height:18px}.BiQ1zG_aboutModal{width:460px;max-width:calc(100vw - 48px)}.BiQ1zG_aboutContent{min-height:0;max-height:340px;color:var(--hub-text-secondary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:8px;flex:auto;padding:10px 12px;font-size:12px;line-height:18px;overflow-y:auto}.BiQ1zG_aboutContent>:first-child{margin-top:0}.BiQ1zG_aboutContent>:last-child{margin-bottom:0}.BiQ1zG_aboutContent h2,.BiQ1zG_aboutContent h3,.BiQ1zG_aboutContent h4,.BiQ1zG_aboutContent h5{color:var(--hub-text-primary);margin:10px 0 4px;font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_aboutContent h2{font-size:14px}.BiQ1zG_aboutContent p{margin:4px 0}.BiQ1zG_aboutContent ul,.BiQ1zG_aboutContent ol{margin:4px 0;padding-left:18px}.BiQ1zG_aboutContent li{margin:2px 0}.BiQ1zG_aboutContent code{background:var(--hub-bg-hover);color:var(--hub-text-primary);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.BiQ1zG_aboutContent pre{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:6px;margin:6px 0;padding:8px 10px;overflow-x:auto}.BiQ1zG_aboutContent pre code{background:0 0;border-radius:0;padding:0}.BiQ1zG_aboutContent blockquote{border-left:3px solid var(--hub-brand);background:var(--hub-bg-hover);color:var(--hub-text-tertiary);border-radius:0 6px 6px 0;margin:6px 0;padding:2px 10px}.BiQ1zG_aboutContent a{color:var(--hub-brand);text-decoration:none}.BiQ1zG_aboutContent a:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_aboutContent img{border-radius:8px;max-width:100%;max-height:220px;margin:8px auto;display:block;box-shadow:0 2px 8px #0000001f}.BiQ1zG_aboutContent img[width=\"250\"]{object-fit:contain;width:250px;height:250px;max-height:250px}.BiQ1zG_aboutMeta{color:var(--hub-text-tertiary);font-size:11px;line-height:16px}.BiQ1zG_hubUpdateModal{width:520px;max-width:calc(100vw - 48px)}.BiQ1zG_hubUpdateMeta{flex-wrap:wrap;align-items:center;gap:4px 14px;font-size:12px;line-height:18px;display:flex}.BiQ1zG_hubUpdateMetaItem{color:var(--hub-text-tertiary)}.BiQ1zG_hubUpdateNotes{min-height:0;max-height:300px;color:var(--hub-text-secondary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:8px;flex:auto;padding:10px 12px;font-size:12px;line-height:18px;overflow-y:auto}.BiQ1zG_hubUpdateNotes>:first-child{margin-top:0}.BiQ1zG_hubUpdateNotes>:last-child{margin-bottom:0}.BiQ1zG_hubUpdateNotes h2,.BiQ1zG_hubUpdateNotes h3,.BiQ1zG_hubUpdateNotes h4,.BiQ1zG_hubUpdateNotes h5{color:var(--hub-text-primary);margin:10px 0 4px;font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_hubUpdateNotes h2{font-size:14px}.BiQ1zG_hubUpdateNotes p{margin:4px 0}.BiQ1zG_hubUpdateNotes ul,.BiQ1zG_hubUpdateNotes ol{margin:4px 0;padding-left:18px}.BiQ1zG_hubUpdateNotes li{margin:2px 0}.BiQ1zG_hubUpdateNotes code{background:var(--hub-bg-hover);color:var(--hub-text-primary);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.BiQ1zG_hubUpdateNotes pre{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:6px;margin:6px 0;padding:8px 10px;overflow-x:auto}.BiQ1zG_hubUpdateNotes pre code{background:0 0;border-radius:0;padding:0}.BiQ1zG_hubUpdateNotes blockquote{border-left:3px solid var(--hub-brand);background:var(--hub-bg-hover);color:var(--hub-text-tertiary);border-radius:0 6px 6px 0;margin:6px 0;padding:2px 10px}.BiQ1zG_hubUpdateNotes a{color:var(--hub-brand);text-decoration:none}.BiQ1zG_hubUpdateNotes a:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_detailModal{width:480px;max-width:calc(100vw - 48px)}.BiQ1zG_detailUpdateHint{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;line-height:18px}.BiQ1zG_detailGrid{flex-direction:column;gap:6px;display:flex}.BiQ1zG_detailRow{align-items:baseline;gap:10px;min-width:0;font-size:12px;line-height:20px;display:flex}.BiQ1zG_detailLabel{text-align:right;width:76px;color:var(--hub-text-tertiary);flex-shrink:0}.BiQ1zG_detailValue{min-width:0;color:var(--hub-text-primary);flex-wrap:wrap;flex:auto;align-items:baseline;gap:4px 6px;font-weight:500;display:flex}.BiQ1zG_detailMono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;font-weight:500}.BiQ1zG_detailArrow{color:var(--hub-text-tertiary);align-items:baseline;gap:4px;display:inline-flex}.BiQ1zG_detailDim{color:var(--hub-text-tertiary);font-size:11px;font-weight:400}.BiQ1zG_detailLink{min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex}.BiQ1zG_detailLink:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_detailStars{color:#b45309;font-weight:600}.BiQ1zG_detailPath{min-width:0;color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:6px;flex:auto;justify-content:space-between;align-items:center;gap:6px;padding:3px 3px 3px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:18px;transition:border-color .12s,background .12s;display:flex}.BiQ1zG_detailPath:hover{border-color:var(--hub-border-ghost);background:var(--hub-bg-3)}.BiQ1zG_detailPathText{text-overflow:ellipsis;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;min-width:0;overflow:hidden}.BiQ1zG_detailPathActions{flex-shrink:0;align-items:center;gap:4px;display:inline-flex}.BiQ1zG_detailPathBtn{width:28px;height:28px;color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:center;align-items:center;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.BiQ1zG_detailPathBtn svg{width:15px;height:15px}.BiQ1zG_detailPathBtn:hover{color:#fff;background:var(--hub-brand);border-color:var(--hub-brand)}.BiQ1zG_detailStatusRunning,.BiQ1zG_detailStatusPending{border-radius:50%;flex-shrink:0;align-self:center;width:8px;height:8px}.BiQ1zG_detailStatusRunning{background:var(--hub-success)}.BiQ1zG_detailStatusPending{background:var(--hub-warning)}.BiQ1zG_detailStatusText{font-weight:500}";
|
|
700
|
+
const css$10 = ".BiQ1zG_overlay{z-index:998;-webkit-user-select:none;user-select:none;background:#00000061;justify-content:center;align-items:center;animation:.16s ease-out BiQ1zG_overlayIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.BiQ1zG_modal,.BiQ1zG_errorModal{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:10px;flex-direction:column;gap:10px;width:420px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);padding:14px 16px;animation:.18s ease-out BiQ1zG_modalIn;display:flex;box-shadow:0 12px 40px #0000003d}.BiQ1zG_errorModal{width:640px;max-width:calc(100vw - 48px)}.BiQ1zG_modalWide{width:560px;max-width:calc(100vw - 48px)}.BiQ1zG_helpModal{width:720px;max-width:calc(100vw - 48px)}.BiQ1zG_logModal{width:780px;max-width:calc(100vw - 48px);height:min(540px,100vh - 64px)}.BiQ1zG_modalHead{flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;display:flex}.BiQ1zG_modalTitle{color:var(--hub-text-primary);font-size:14px;font-weight:600;line-height:20px}.BiQ1zG_modalTitleBusy{color:var(--hub-brand)}.BiQ1zG_modalTitleQueued{color:var(--hub-warning)}.BiQ1zG_modalClose{width:24px;height:24px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;font-size:16px;line-height:1;display:inline-flex}.BiQ1zG_modalClose:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_modalCloseIcon{flex-shrink:0;width:14px;height:14px}.BiQ1zG_confirmIconWrap{justify-content:center;padding:2px 0 6px;display:flex}.BiQ1zG_confirmIcon{background:var(--hub-brand);border-radius:50%;flex:none;justify-content:center;align-items:center;width:48px;height:48px;display:inline-flex;box-shadow:0 4px 12px #4f6ef747}.BiQ1zG_confirmIconDanger{background:var(--hub-danger);box-shadow:0 4px 12px #d1242f4d}.BiQ1zG_dangerConfirm{color:#fff;background:var(--hub-danger);border:1px solid var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;height:28px;padding:0 14px;font-size:12px;font-weight:600;transition:background-color .12s,border-color .12s}.BiQ1zG_dangerConfirm:hover:not(:disabled){background:var(--hub-danger-hover);border-color:var(--hub-danger-hover)}.BiQ1zG_dangerConfirm:disabled{opacity:.55;cursor:default}.BiQ1zG_confirmPrimary{color:#fff;background:var(--hub-brand);border:1px solid var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;height:28px;padding:0 14px;font-size:12px;font-weight:600;transition:filter .12s}.BiQ1zG_confirmPrimary:hover:not(:disabled){filter:brightness(1.08)}.BiQ1zG_confirmPrimary:disabled{opacity:.55;cursor:default}.BiQ1zG_modalDesc{color:var(--hub-text-secondary);font-size:12px;line-height:18px}.BiQ1zG_trustHint{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:18px}.BiQ1zG_cliOnlyHint{color:var(--hub-text-secondary);background:var(--hub-bg-hover);border-radius:6px;padding:6px 10px;font-size:12px;line-height:18px}.BiQ1zG_failedCopyHint{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:18px}.BiQ1zG_modalRow{align-items:baseline;gap:8px;min-width:0;font-size:12px;line-height:18px;display:flex}.BiQ1zG_modalLabel{min-width:64px;color:var(--hub-text-tertiary);flex-shrink:0}.BiQ1zG_modalValue{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-text-primary);font-weight:500;overflow:hidden}.BiQ1zG_modalLink{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex;overflow:hidden}.BiQ1zG_modalLink:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_linkIcon{flex-shrink:0}.BiQ1zG_modalCmd{color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:space-between;align-items:center;gap:8px;padding:6px 6px 6px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:18px;transition:border-color .12s,background .12s;display:flex}.BiQ1zG_modalCmd:hover{border-color:var(--hub-border-ghost);background:var(--hub-bg-3)}.BiQ1zG_modalCmdText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.BiQ1zG_modalCmdCopy{color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;gap:3px;padding:1px 7px;font-family:inherit;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_modalCmdCopy:hover{color:var(--hub-brand-hover);background:var(--hub-bg-2)}.BiQ1zG_modalActions{justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;display:flex}.BiQ1zG_modalBody{flex-direction:column;flex:auto;gap:10px;min-height:0;display:flex;overflow-y:auto}.BiQ1zG_toast{z-index:1000;background:var(--hub-btn-fill);color:var(--hub-text-on-fill);pointer-events:none;white-space:nowrap;border:none;border-radius:8px;padding:10px 16px;font-size:12px;font-weight:500;line-height:18px;animation:.22s ease-out BiQ1zG_toastIn;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 6px 24px #00000047}@keyframes BiQ1zG_toastIn{0%{opacity:0;transform:translate(-50%,-44%)}to{opacity:1;transform:translate(-50%,-50%)}}.BiQ1zG_toastFail{background:var(--hub-danger);color:#fff;border-color:#ffffff3d}.BiQ1zG_queueSection{flex-direction:column;gap:6px;display:flex}.BiQ1zG_queueSectionTitle{color:var(--hub-text-secondary);padding:4px 2px 0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_pendingRowStatus{color:var(--hub-warn);flex-shrink:0;font-weight:500}.BiQ1zG_pendingRowActions{flex-shrink:0;gap:8px;margin-left:auto;display:flex}.BiQ1zG_queueRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;flex-direction:column;gap:5px;padding:8px 10px;font-size:12px;line-height:18px;transition:background .12s;display:flex}.BiQ1zG_queueRow:hover{background:var(--hub-brand-tint)}.BiQ1zG_queueRowHead{align-items:center;gap:10px;display:flex}.BiQ1zG_queueRowTarget{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-text-primary);flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:hidden}.BiQ1zG_queueRowDesc{color:var(--hub-text-tertiary);-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.BiQ1zG_queueRowBody{align-items:center;gap:8px;display:flex}.BiQ1zG_queueRowStatus{color:var(--hub-brand);flex-shrink:0;font-weight:500}.BiQ1zG_queueRowTrack{flex:1;min-width:0}.BiQ1zG_queueRowPct{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0}.BiQ1zG_stripCancel{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;flex-shrink:0;padding:2px 10px;font-size:12px;line-height:18px;transition:background .12s,color .12s}.BiQ1zG_stripCancel:hover{background:var(--hub-danger-tint);color:var(--hub-danger-text)}.BiQ1zG_stripCancel:disabled{opacity:.45;cursor:default}.BiQ1zG_queuedHint{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);border-radius:6px;padding:5px 10px;font-size:12px;line-height:18px}.BiQ1zG_errorTitle{color:var(--hub-danger-text);font-size:14px;font-weight:600;line-height:20px}.BiQ1zG_errorBox{border:1px solid var(--hub-danger-border);background:var(--hub-danger-tint-weak);max-height:240px;color:var(--hub-text-primary);white-space:pre-wrap;word-break:break-word;-webkit-user-select:none;user-select:none;border-radius:6px;margin:0;padding:10px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:17px;overflow:auto}.BiQ1zG_errorCopySoft{color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;padding:2px 8px;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_errorCopySoft:hover{color:var(--hub-text-secondary);background:var(--hub-bg-2)}.BiQ1zG_errorHint{color:var(--hub-text-tertiary);font-size:12px;line-height:18px}.BiQ1zG_modalCancel,.BiQ1zG_modalCopy{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_modalCancel:hover,.BiQ1zG_modalCopy:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_modalInstall{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_modalInstall:hover{background:var(--hub-btn-hover)}.BiQ1zG_modalCopy:disabled,.BiQ1zG_modalInstall:disabled,.BiQ1zG_modalCancel:disabled,.BiQ1zG_modalClose:disabled,.BiQ1zG_uninstallConfirm:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_uninstallConfirm{color:#fff;background:var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_uninstallConfirm:hover{background:var(--hub-danger-hover)}.BiQ1zG_result{text-align:center;flex-direction:column;align-items:center;gap:5px;padding:10px 0 2px;display:flex}.BiQ1zG_resultCheck{background:var(--hub-success-tint);width:40px;height:40px;color:var(--hub-success);border-radius:50%;justify-content:center;align-items:center;margin-bottom:3px;display:inline-flex}.BiQ1zG_resultCheckIcon{flex-shrink:0;width:20px;height:20px}.BiQ1zG_resultTitle{color:var(--hub-text-primary);font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_resultDesc{color:var(--hub-text-secondary);font-size:12px;line-height:18px}.BiQ1zG_resultRestarting{color:var(--hub-text-tertiary);padding:12px 0 6px;font-size:12px;line-height:18px}.BiQ1zG_restartLater{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_restartLater:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_restartNow{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_restartNow:hover{background:var(--hub-btn-hover)}.BiQ1zG_restartNow:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_restartNowWarning{color:#fff;background:var(--hub-warning);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_restartNowWarning:hover{background:var(--hub-warning-hover)}.BiQ1zG_restartNowWarning:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_result .BiQ1zG_modalActions{justify-content:center;gap:10px;margin-top:0;padding:6px 0 2px}.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartLater,.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartNow,.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartNowWarning{min-width:100px}.BiQ1zG_progress{margin:10px 0 2px}.BiQ1zG_progressHead{justify-content:flex-end;align-items:center;margin-bottom:3px;display:flex}.BiQ1zG_progressText{color:var(--hub-text-secondary);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:14px}.BiQ1zG_progressTrack{background:var(--hub-border-2);border-radius:2px;height:4px;overflow:hidden}.BiQ1zG_progressFill{background:var(--hub-brand);border-radius:2px;height:100%;transition:width .32s}.BiQ1zG_progressFillFail{background:var(--hub-danger)}@keyframes BiQ1zG_overlayIn{0%{opacity:0}to{opacity:1}}@keyframes BiQ1zG_modalIn{0%{opacity:0;transform:translateY(6px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.BiQ1zG_failList{flex-direction:column;gap:12px;padding-right:2px;display:flex}.BiQ1zG_failRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);border-radius:8px;flex-direction:column;gap:8px;padding:10px 12px;display:flex}.BiQ1zG_failHead{align-items:center;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeList{flex-direction:column;gap:10px;padding-right:2px;display:flex}.BiQ1zG_noticeRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);border-radius:8px;flex-direction:column;align-items:stretch;gap:6px;padding:10px 12px;display:flex}.BiQ1zG_noticeRowMain{align-items:center;gap:10px;width:100%;min-width:0;display:flex}.BiQ1zG_noticeBadgeOk,.BiQ1zG_noticeBadgeFail{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex;box-shadow:0 2px 6px #0000002e}.BiQ1zG_noticeBadgeOk{background:var(--hub-success)}.BiQ1zG_noticeBadgeFail{background:var(--hub-danger)}.BiQ1zG_noticeBadgeIcon{flex-shrink:0;width:12px;height:12px}.BiQ1zG_noticeMain{flex-direction:column;flex:1;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeHead{align-items:center;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeTextOk{color:var(--hub-success);flex-shrink:0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_noticeTextFail{color:var(--hub-danger-text);flex-shrink:0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_noticeFoot{justify-content:flex-end;align-items:center;display:flex}.BiQ1zG_noticeTime{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0;font-size:11px;line-height:16px}.BiQ1zG_noticeRemove{width:22px;height:22px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;margin-left:auto;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_noticeRemove:hover{color:var(--hub-danger-text);background:var(--hub-danger-tint)}.BiQ1zG_noticeRowOk .BiQ1zG_noticeRemove{margin-left:0}.BiQ1zG_noticeRowOk .BiQ1zG_noticeTime{margin-left:auto}.BiQ1zG_noticeRowUpdate{cursor:pointer;transition:border-color .12s,background .12s}.BiQ1zG_noticeRowUpdate:hover{border-color:var(--hub-brand);background:var(--hub-brand-tint)}.BiQ1zG_noticeVersion{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border);font-variant-numeric:tabular-nums;border-radius:5px;flex-shrink:0;padding:0 6px;font-size:11px;font-weight:600;line-height:18px}.BiQ1zG_noticeUpdateGo{color:#fff;background:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:5px;flex-shrink:0;margin-left:2px;padding:2px 8px;font-size:11px;font-weight:600;line-height:16px;transition:background .12s}.BiQ1zG_noticeUpdateGo:hover{background:var(--hub-brand-hover)}.BiQ1zG_noticeIgnore{color:var(--hub-text-secondary);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border-radius:5px;flex-shrink:0;margin-left:2px;padding:1px 8px;font-size:11px;font-weight:500;line-height:16px;transition:color .12s,border-color .12s,background .12s}.BiQ1zG_noticeIgnore:hover{color:var(--hub-danger-text);border-color:var(--hub-danger-border);background:var(--hub-danger-tint)}.BiQ1zG_failKind{border:1px solid #0000;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;font-weight:500;line-height:16px}.BiQ1zG_failKindInstall{color:var(--hub-danger-text);border-color:var(--hub-danger-border);background:var(--hub-danger-tint)}.BiQ1zG_failKindUninstall{color:var(--hub-warn);border-color:var(--hub-warn-border);background:var(--hub-warn-tint)}.BiQ1zG_failRepo{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:18px;text-decoration:none;overflow:hidden}.BiQ1zG_failRepo:hover{text-decoration:underline}.BiQ1zG_failCopy{color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;padding:2px 8px;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_failCopy:hover{color:var(--hub-text-secondary);background:var(--hub-bg-2)}.BiQ1zG_failEmpty{text-align:center;color:var(--hub-text-tertiary);padding:24px 0;font-size:12px;line-height:18px}.BiQ1zG_failClear{color:var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_failClear:hover{color:#fff;background:var(--hub-danger)}.BiQ1zG_failBigIssue{box-sizing:border-box;text-align:center;color:#fff;background:var(--hub-danger);border:1px solid var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;width:100%;margin-top:4px;padding:3px 16px;font-size:13px;font-weight:600;line-height:18px;text-decoration:none;transition:background .12s,border-color .12s,box-shadow .12s;display:block}.BiQ1zG_failBigIssue:hover{background:var(--hub-danger-hover);border-color:var(--hub-danger-hover);box-shadow:0 3px 10px #d1242f59}.BiQ1zG_failPrepareHint{color:var(--hub-warning);background:var(--hub-warning-tint);border:1px solid var(--hub-warning-border);border-radius:6px;margin-top:6px;padding:8px 12px;font-size:12px;line-height:18px}.BiQ1zG_failDiagBtn{box-sizing:border-box;text-align:center;width:100%;color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:8px;margin-top:8px;padding:5px 16px;font-size:13px;font-weight:600;line-height:18px;transition:background .12s,box-shadow .12s;display:block}.BiQ1zG_failDiagBtn:hover{background:var(--hub-btn-hover);box-shadow:0 3px 10px #0000001f}.BiQ1zG_failNetworkTarget{word-break:break-all;color:var(--hub-danger);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border);border-radius:6px;margin-top:6px;padding:8px 12px;font-size:13px;font-weight:700;line-height:20px}.BiQ1zG_aboutModal{width:460px;max-width:calc(100vw - 48px)}.BiQ1zG_aboutContent{min-height:0;max-height:340px;color:var(--hub-text-secondary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:8px;flex:auto;padding:10px 12px;font-size:12px;line-height:18px;overflow-y:auto}.BiQ1zG_aboutContent>:first-child{margin-top:0}.BiQ1zG_aboutContent>:last-child{margin-bottom:0}.BiQ1zG_aboutContent h2,.BiQ1zG_aboutContent h3,.BiQ1zG_aboutContent h4,.BiQ1zG_aboutContent h5{color:var(--hub-text-primary);margin:10px 0 4px;font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_aboutContent h2{font-size:14px}.BiQ1zG_aboutContent p{margin:4px 0}.BiQ1zG_aboutContent ul,.BiQ1zG_aboutContent ol{margin:4px 0;padding-left:18px}.BiQ1zG_aboutContent li{margin:2px 0}.BiQ1zG_aboutContent code{background:var(--hub-bg-hover);color:var(--hub-text-primary);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.BiQ1zG_aboutContent pre{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:6px;margin:6px 0;padding:8px 10px;overflow-x:auto}.BiQ1zG_aboutContent pre code{background:0 0;border-radius:0;padding:0}.BiQ1zG_aboutContent blockquote{border-left:3px solid var(--hub-brand);background:var(--hub-bg-hover);color:var(--hub-text-tertiary);border-radius:0 6px 6px 0;margin:6px 0;padding:2px 10px}.BiQ1zG_aboutContent a{color:var(--hub-brand);text-decoration:none}.BiQ1zG_aboutContent a:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_aboutContent img{border-radius:8px;max-width:100%;max-height:220px;margin:8px auto;display:block;box-shadow:0 2px 8px #0000001f}.BiQ1zG_aboutContent img[width=\"100\"]{object-fit:contain;width:100px;height:100px;max-height:100px}.BiQ1zG_aboutMeta{color:var(--hub-text-tertiary);font-size:11px;line-height:16px}.BiQ1zG_hubUpdateModal{width:520px;max-width:calc(100vw - 48px)}.BiQ1zG_hubUpdateMeta{flex-wrap:wrap;align-items:center;gap:4px 14px;font-size:12px;line-height:18px;display:flex}.BiQ1zG_hubUpdateMetaItem{color:var(--hub-text-tertiary)}.BiQ1zG_hubUpdateNotes{min-height:0;max-height:300px;color:var(--hub-text-secondary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:8px;flex:auto;padding:10px 12px;font-size:12px;line-height:18px;overflow-y:auto}.BiQ1zG_hubUpdateNotes>:first-child{margin-top:0}.BiQ1zG_hubUpdateNotes>:last-child{margin-bottom:0}.BiQ1zG_hubUpdateNotes h2,.BiQ1zG_hubUpdateNotes h3,.BiQ1zG_hubUpdateNotes h4,.BiQ1zG_hubUpdateNotes h5{color:var(--hub-text-primary);margin:10px 0 4px;font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_hubUpdateNotes h2{font-size:14px}.BiQ1zG_hubUpdateNotes p{margin:4px 0}.BiQ1zG_hubUpdateNotes ul,.BiQ1zG_hubUpdateNotes ol{margin:4px 0;padding-left:18px}.BiQ1zG_hubUpdateNotes li{margin:2px 0}.BiQ1zG_hubUpdateNotes code{background:var(--hub-bg-hover);color:var(--hub-text-primary);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.BiQ1zG_hubUpdateNotes pre{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:6px;margin:6px 0;padding:8px 10px;overflow-x:auto}.BiQ1zG_hubUpdateNotes pre code{background:0 0;border-radius:0;padding:0}.BiQ1zG_hubUpdateNotes blockquote{border-left:3px solid var(--hub-brand);background:var(--hub-bg-hover);color:var(--hub-text-tertiary);border-radius:0 6px 6px 0;margin:6px 0;padding:2px 10px}.BiQ1zG_hubUpdateNotes a{color:var(--hub-brand);text-decoration:none}.BiQ1zG_hubUpdateNotes a:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_detailModal{width:480px;max-width:calc(100vw - 48px)}.BiQ1zG_detailUpdateHint{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;line-height:18px}.BiQ1zG_detailGrid{flex-direction:column;gap:6px;display:flex}.BiQ1zG_detailRow{align-items:baseline;gap:10px;min-width:0;font-size:12px;line-height:20px;display:flex}.BiQ1zG_detailLabel{text-align:right;width:76px;color:var(--hub-text-tertiary);flex-shrink:0}.BiQ1zG_detailValue{min-width:0;color:var(--hub-text-primary);flex-wrap:wrap;flex:auto;align-items:baseline;gap:4px 6px;font-weight:500;display:flex}.BiQ1zG_detailMono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;font-weight:500}.BiQ1zG_detailArrow{color:var(--hub-text-tertiary);align-items:baseline;gap:4px;display:inline-flex}.BiQ1zG_detailDim{color:var(--hub-text-tertiary);font-size:11px;font-weight:400}.BiQ1zG_detailLink{min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex}.BiQ1zG_detailLink:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_detailStars{color:#b45309;font-weight:600}.BiQ1zG_detailPath{min-width:0;color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:6px;flex:auto;justify-content:space-between;align-items:center;gap:6px;padding:3px 3px 3px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:18px;transition:border-color .12s,background .12s;display:flex}.BiQ1zG_detailPath:hover{border-color:var(--hub-border-ghost);background:var(--hub-bg-3)}.BiQ1zG_detailPathText{text-overflow:ellipsis;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;min-width:0;overflow:hidden}.BiQ1zG_detailPathActions{flex-shrink:0;align-items:center;gap:4px;display:inline-flex}.BiQ1zG_detailPathBtn{width:28px;height:28px;color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:center;align-items:center;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.BiQ1zG_detailPathBtn svg{width:15px;height:15px}.BiQ1zG_detailPathBtn:hover{color:#fff;background:var(--hub-brand);border-color:var(--hub-brand)}.BiQ1zG_detailStatusRunning,.BiQ1zG_detailStatusPending{border-radius:50%;flex-shrink:0;align-self:center;width:8px;height:8px}.BiQ1zG_detailStatusRunning{background:var(--hub-success)}.BiQ1zG_detailStatusPending{background:var(--hub-warning)}.BiQ1zG_detailStatusText{font-weight:500}";
|
|
685
701
|
const tagId$10 = "dsh-plugin/Modal.module.css";
|
|
686
702
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$10) + "]") === null) {
|
|
687
703
|
const tag = document.createElement("style");
|
|
@@ -696,134 +712,136 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
696
712
|
css: css$10
|
|
697
713
|
});
|
|
698
714
|
var Modal_module_css_default = {
|
|
699
|
-
"
|
|
700
|
-
"
|
|
701
|
-
"
|
|
702
|
-
"
|
|
703
|
-
"
|
|
704
|
-
"
|
|
705
|
-
"uninstallConfirm": "BiQ1zG_uninstallConfirm",
|
|
706
|
-
"noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
|
|
707
|
-
"noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
|
|
708
|
-
"detailModal": "BiQ1zG_detailModal",
|
|
709
|
-
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
710
|
-
"detailUpdateHint": "BiQ1zG_detailUpdateHint",
|
|
711
|
-
"modalWide": "BiQ1zG_modalWide",
|
|
712
|
-
"modalDesc": "BiQ1zG_modalDesc",
|
|
713
|
-
"modalLink": "BiQ1zG_modalLink",
|
|
714
|
-
"resultTitle": "BiQ1zG_resultTitle",
|
|
715
|
-
"noticeRowMain": "BiQ1zG_noticeRowMain",
|
|
716
|
-
"detailPathBtn": "BiQ1zG_detailPathBtn",
|
|
717
|
-
"errorBox": "BiQ1zG_errorBox",
|
|
718
|
-
"trustHint": "BiQ1zG_trustHint",
|
|
719
|
-
"queueRowHead": "BiQ1zG_queueRowHead",
|
|
720
|
-
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
721
|
-
"modalTitleBusy": "BiQ1zG_modalTitleBusy",
|
|
722
|
-
"queueSectionTitle": "BiQ1zG_queueSectionTitle",
|
|
715
|
+
"modalClose": "BiQ1zG_modalClose",
|
|
716
|
+
"queuedHint": "BiQ1zG_queuedHint",
|
|
717
|
+
"resultCheckIcon": "BiQ1zG_resultCheckIcon",
|
|
718
|
+
"modalActions": "BiQ1zG_modalActions",
|
|
719
|
+
"logModal": "BiQ1zG_logModal",
|
|
720
|
+
"modalCopy": "BiQ1zG_modalCopy",
|
|
723
721
|
"restartLater": "BiQ1zG_restartLater",
|
|
724
|
-
"
|
|
725
|
-
"confirmIcon": "BiQ1zG_confirmIcon",
|
|
726
|
-
"toastIn": "BiQ1zG_toastIn",
|
|
727
|
-
"resultCheck": "BiQ1zG_resultCheck",
|
|
728
|
-
"modalInstall": "BiQ1zG_modalInstall",
|
|
729
|
-
"result": "BiQ1zG_result",
|
|
722
|
+
"queueSectionTitle": "BiQ1zG_queueSectionTitle",
|
|
730
723
|
"noticeMain": "BiQ1zG_noticeMain",
|
|
731
|
-
"
|
|
732
|
-
"
|
|
733
|
-
"
|
|
734
|
-
"
|
|
735
|
-
"
|
|
736
|
-
"
|
|
737
|
-
"
|
|
738
|
-
"
|
|
739
|
-
"
|
|
724
|
+
"failRepo": "BiQ1zG_failRepo",
|
|
725
|
+
"noticeList": "BiQ1zG_noticeList",
|
|
726
|
+
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
727
|
+
"modalTitleBusy": "BiQ1zG_modalTitleBusy",
|
|
728
|
+
"detailLabel": "BiQ1zG_detailLabel",
|
|
729
|
+
"detailPathActions": "BiQ1zG_detailPathActions",
|
|
730
|
+
"modalDesc": "BiQ1zG_modalDesc",
|
|
731
|
+
"modalCloseIcon": "BiQ1zG_modalCloseIcon",
|
|
732
|
+
"noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
|
|
740
733
|
"modalLabel": "BiQ1zG_modalLabel",
|
|
741
|
-
"
|
|
742
|
-
"
|
|
743
|
-
"hubUpdateModal": "BiQ1zG_hubUpdateModal",
|
|
744
|
-
"logModal": "BiQ1zG_logModal",
|
|
745
|
-
"linkIcon": "BiQ1zG_linkIcon",
|
|
746
|
-
"aboutContent": "BiQ1zG_aboutContent",
|
|
747
|
-
"pendingRowStatus": "BiQ1zG_pendingRowStatus",
|
|
734
|
+
"modalLink": "BiQ1zG_modalLink",
|
|
735
|
+
"failDiagBtn": "BiQ1zG_failDiagBtn",
|
|
748
736
|
"restartNowWarning": "BiQ1zG_restartNowWarning",
|
|
749
|
-
"
|
|
750
|
-
"
|
|
751
|
-
"
|
|
752
|
-
"
|
|
753
|
-
"
|
|
737
|
+
"trustHint": "BiQ1zG_trustHint",
|
|
738
|
+
"linkIcon": "BiQ1zG_linkIcon",
|
|
739
|
+
"detailStatusPending": "BiQ1zG_detailStatusPending",
|
|
740
|
+
"detailStatusRunning": "BiQ1zG_detailStatusRunning",
|
|
741
|
+
"failCopy": "BiQ1zG_failCopy",
|
|
742
|
+
"progressHead": "BiQ1zG_progressHead",
|
|
743
|
+
"detailPathBtn": "BiQ1zG_detailPathBtn",
|
|
744
|
+
"progress": "BiQ1zG_progress",
|
|
745
|
+
"hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
|
|
746
|
+
"resultDesc": "BiQ1zG_resultDesc",
|
|
754
747
|
"confirmPrimary": "BiQ1zG_confirmPrimary",
|
|
755
|
-
"
|
|
756
|
-
"
|
|
757
|
-
"
|
|
758
|
-
"errorModal": "BiQ1zG_errorModal",
|
|
759
|
-
"modalActions": "BiQ1zG_modalActions",
|
|
760
|
-
"detailMono": "BiQ1zG_detailMono",
|
|
761
|
-
"failRepo": "BiQ1zG_failRepo",
|
|
762
|
-
"detailPathActions": "BiQ1zG_detailPathActions",
|
|
763
|
-
"failKind": "BiQ1zG_failKind",
|
|
764
|
-
"modalValue": "BiQ1zG_modalValue",
|
|
765
|
-
"toastFail": "BiQ1zG_toastFail",
|
|
766
|
-
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
767
|
-
"queuedHint": "BiQ1zG_queuedHint",
|
|
768
|
-
"detailDim": "BiQ1zG_detailDim",
|
|
769
|
-
"queueRowPct": "BiQ1zG_queueRowPct",
|
|
770
|
-
"noticeHead": "BiQ1zG_noticeHead",
|
|
748
|
+
"noticeTime": "BiQ1zG_noticeTime",
|
|
749
|
+
"queueRowBody": "BiQ1zG_queueRowBody",
|
|
750
|
+
"failNetworkTarget": "BiQ1zG_failNetworkTarget",
|
|
771
751
|
"noticeVersion": "BiQ1zG_noticeVersion",
|
|
772
|
-
"
|
|
773
|
-
"
|
|
752
|
+
"modal": "BiQ1zG_modal",
|
|
753
|
+
"failKindInstall": "BiQ1zG_failKindInstall",
|
|
754
|
+
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
755
|
+
"detailStatusText": "BiQ1zG_detailStatusText",
|
|
756
|
+
"modalCancel": "BiQ1zG_modalCancel",
|
|
757
|
+
"result": "BiQ1zG_result",
|
|
758
|
+
"errorTitle": "BiQ1zG_errorTitle",
|
|
759
|
+
"modalCmdText": "BiQ1zG_modalCmdText",
|
|
760
|
+
"progressFill": "BiQ1zG_progressFill",
|
|
761
|
+
"toastIn": "BiQ1zG_toastIn",
|
|
762
|
+
"confirmIconDanger": "BiQ1zG_confirmIconDanger",
|
|
763
|
+
"noticeRow": "BiQ1zG_noticeRow",
|
|
764
|
+
"noticeRowOk": "BiQ1zG_noticeRowOk",
|
|
774
765
|
"modalIn": "BiQ1zG_modalIn",
|
|
775
|
-
"
|
|
776
|
-
"
|
|
777
|
-
"
|
|
778
|
-
"
|
|
766
|
+
"cliOnlyHint": "BiQ1zG_cliOnlyHint",
|
|
767
|
+
"queueRowStatus": "BiQ1zG_queueRowStatus",
|
|
768
|
+
"failEmpty": "BiQ1zG_failEmpty",
|
|
769
|
+
"detailMono": "BiQ1zG_detailMono",
|
|
779
770
|
"stripCancel": "BiQ1zG_stripCancel",
|
|
780
|
-
"aboutModal": "BiQ1zG_aboutModal",
|
|
781
771
|
"errorCopySoft": "BiQ1zG_errorCopySoft",
|
|
782
|
-
"
|
|
783
|
-
"
|
|
772
|
+
"toastFail": "BiQ1zG_toastFail",
|
|
773
|
+
"resultCheck": "BiQ1zG_resultCheck",
|
|
774
|
+
"helpModal": "BiQ1zG_helpModal",
|
|
775
|
+
"modalCmdCopy": "BiQ1zG_modalCmdCopy",
|
|
784
776
|
"hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
|
|
785
|
-
"
|
|
786
|
-
"
|
|
787
|
-
"
|
|
788
|
-
"confirmIconWrap": "BiQ1zG_confirmIconWrap",
|
|
789
|
-
"modalBody": "BiQ1zG_modalBody",
|
|
790
|
-
"noticeRemove": "BiQ1zG_noticeRemove",
|
|
791
|
-
"detailStatusRunning": "BiQ1zG_detailStatusRunning",
|
|
792
|
-
"detailGrid": "BiQ1zG_detailGrid",
|
|
793
|
-
"overlay": "BiQ1zG_overlay",
|
|
794
|
-
"failRow": "BiQ1zG_failRow",
|
|
795
|
-
"hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
|
|
796
|
-
"aboutMeta": "BiQ1zG_aboutMeta",
|
|
797
|
-
"detailLabel": "BiQ1zG_detailLabel",
|
|
798
|
-
"noticeRow": "BiQ1zG_noticeRow",
|
|
799
|
-
"progress": "BiQ1zG_progress",
|
|
800
|
-
"detailValue": "BiQ1zG_detailValue",
|
|
801
|
-
"modalTitle": "BiQ1zG_modalTitle",
|
|
802
|
-
"modalCopy": "BiQ1zG_modalCopy",
|
|
777
|
+
"dangerConfirm": "BiQ1zG_dangerConfirm",
|
|
778
|
+
"queueRow": "BiQ1zG_queueRow",
|
|
779
|
+
"confirmIcon": "BiQ1zG_confirmIcon",
|
|
803
780
|
"noticeTextFail": "BiQ1zG_noticeTextFail",
|
|
804
|
-
"
|
|
781
|
+
"hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
|
|
805
782
|
"failHead": "BiQ1zG_failHead",
|
|
806
|
-
"
|
|
807
|
-
"
|
|
808
|
-
"
|
|
809
|
-
"
|
|
810
|
-
"
|
|
811
|
-
"noticeList": "BiQ1zG_noticeList",
|
|
812
|
-
"detailStatusPending": "BiQ1zG_detailStatusPending",
|
|
813
|
-
"overlayIn": "BiQ1zG_overlayIn",
|
|
814
|
-
"modalCloseIcon": "BiQ1zG_modalCloseIcon",
|
|
815
|
-
"queueRow": "BiQ1zG_queueRow",
|
|
816
|
-
"resultDesc": "BiQ1zG_resultDesc",
|
|
817
|
-
"resultCheckIcon": "BiQ1zG_resultCheckIcon",
|
|
818
|
-
"errorHint": "BiQ1zG_errorHint",
|
|
819
|
-
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
783
|
+
"aboutContent": "BiQ1zG_aboutContent",
|
|
784
|
+
"aboutMeta": "BiQ1zG_aboutMeta",
|
|
785
|
+
"detailRow": "BiQ1zG_detailRow",
|
|
786
|
+
"resultRestarting": "BiQ1zG_resultRestarting",
|
|
787
|
+
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
820
788
|
"failClear": "BiQ1zG_failClear",
|
|
789
|
+
"errorHint": "BiQ1zG_errorHint",
|
|
790
|
+
"modalValue": "BiQ1zG_modalValue",
|
|
791
|
+
"toast": "BiQ1zG_toast",
|
|
792
|
+
"queueRowDesc": "BiQ1zG_queueRowDesc",
|
|
793
|
+
"progressText": "BiQ1zG_progressText",
|
|
794
|
+
"modalRow": "BiQ1zG_modalRow",
|
|
795
|
+
"errorModal": "BiQ1zG_errorModal",
|
|
796
|
+
"modalBody": "BiQ1zG_modalBody",
|
|
821
797
|
"queueRowTarget": "BiQ1zG_queueRowTarget",
|
|
822
|
-
"
|
|
798
|
+
"errorBox": "BiQ1zG_errorBox",
|
|
799
|
+
"queueSection": "BiQ1zG_queueSection",
|
|
800
|
+
"detailStars": "BiQ1zG_detailStars",
|
|
801
|
+
"detailPathText": "BiQ1zG_detailPathText",
|
|
802
|
+
"pendingRowStatus": "BiQ1zG_pendingRowStatus",
|
|
803
|
+
"failPrepareHint": "BiQ1zG_failPrepareHint",
|
|
804
|
+
"noticeHead": "BiQ1zG_noticeHead",
|
|
805
|
+
"failList": "BiQ1zG_failList",
|
|
806
|
+
"resultTitle": "BiQ1zG_resultTitle",
|
|
807
|
+
"noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
|
|
808
|
+
"progressTrack": "BiQ1zG_progressTrack",
|
|
809
|
+
"failKind": "BiQ1zG_failKind",
|
|
810
|
+
"detailPath": "BiQ1zG_detailPath",
|
|
811
|
+
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
812
|
+
"detailDim": "BiQ1zG_detailDim",
|
|
813
|
+
"queueRowTrack": "BiQ1zG_queueRowTrack",
|
|
814
|
+
"modalInstall": "BiQ1zG_modalInstall",
|
|
815
|
+
"noticeRemove": "BiQ1zG_noticeRemove",
|
|
816
|
+
"queueRowPct": "BiQ1zG_queueRowPct",
|
|
817
|
+
"overlay": "BiQ1zG_overlay",
|
|
818
|
+
"uninstallConfirm": "BiQ1zG_uninstallConfirm",
|
|
819
|
+
"confirmIconWrap": "BiQ1zG_confirmIconWrap",
|
|
820
|
+
"failBigIssue": "BiQ1zG_failBigIssue",
|
|
821
|
+
"noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
|
|
822
|
+
"detailArrow": "BiQ1zG_detailArrow",
|
|
823
|
+
"detailLink": "BiQ1zG_detailLink",
|
|
824
|
+
"detailValue": "BiQ1zG_detailValue",
|
|
825
|
+
"detailModal": "BiQ1zG_detailModal",
|
|
823
826
|
"modalCmd": "BiQ1zG_modalCmd",
|
|
824
|
-
"hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
|
|
825
827
|
"noticeFoot": "BiQ1zG_noticeFoot",
|
|
826
|
-
"
|
|
828
|
+
"modalTitleQueued": "BiQ1zG_modalTitleQueued",
|
|
829
|
+
"noticeTextOk": "BiQ1zG_noticeTextOk",
|
|
830
|
+
"progressFillFail": "BiQ1zG_progressFillFail",
|
|
831
|
+
"noticeRowMain": "BiQ1zG_noticeRowMain",
|
|
832
|
+
"overlayIn": "BiQ1zG_overlayIn",
|
|
833
|
+
"restartNow": "BiQ1zG_restartNow",
|
|
834
|
+
"failRow": "BiQ1zG_failRow",
|
|
835
|
+
"modalTitle": "BiQ1zG_modalTitle",
|
|
836
|
+
"modalHead": "BiQ1zG_modalHead",
|
|
837
|
+
"pendingRowActions": "BiQ1zG_pendingRowActions",
|
|
838
|
+
"modalWide": "BiQ1zG_modalWide",
|
|
839
|
+
"detailGrid": "BiQ1zG_detailGrid",
|
|
840
|
+
"aboutModal": "BiQ1zG_aboutModal",
|
|
841
|
+
"detailUpdateHint": "BiQ1zG_detailUpdateHint",
|
|
842
|
+
"hubUpdateModal": "BiQ1zG_hubUpdateModal",
|
|
843
|
+
"failKindUninstall": "BiQ1zG_failKindUninstall",
|
|
844
|
+
"queueRowHead": "BiQ1zG_queueRowHead"
|
|
827
845
|
};
|
|
828
846
|
//#endregion
|
|
829
847
|
//#region src/client/logic/install-command.ts
|
|
@@ -893,7 +911,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
893
911
|
* tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
|
|
894
912
|
* node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
|
|
895
913
|
*/
|
|
896
|
-
const PLUGIN_VERSION = "1.3.
|
|
914
|
+
const PLUGIN_VERSION = "1.3.8";
|
|
897
915
|
const CATEGORY_ORDER = [
|
|
898
916
|
"interface",
|
|
899
917
|
"session",
|
|
@@ -1526,7 +1544,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1526
1544
|
*/
|
|
1527
1545
|
const hubHasUpdate = (() => {
|
|
1528
1546
|
if (!hubUpdateInfo) return false;
|
|
1529
|
-
return hubUpdateInfo.version !== "1.3.
|
|
1547
|
+
return hubUpdateInfo.version !== "1.3.8";
|
|
1530
1548
|
})();
|
|
1531
1549
|
(0, react.useMemo)(() => {
|
|
1532
1550
|
if (!plugins) return [];
|
|
@@ -1705,23 +1723,28 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1705
1723
|
return next;
|
|
1706
1724
|
}
|
|
1707
1725
|
/**
|
|
1708
|
-
*
|
|
1726
|
+
* 失败归类,五态。无论底层机制如何(pnpm 白名单拦截 / 构建脚本被忽略 / prepare 失败),
|
|
1709
1727
|
* 对用户而言结果都一样 —— 当前安装通道(npm 或 git)装不上,就是插件分发/依赖的问题,
|
|
1710
|
-
* 一律引导提 Issue
|
|
1728
|
+
* 一律引导提 Issue;唯一的两个例外是本机环境问题(npm 版本过低 / 网络不通):
|
|
1711
1729
|
* - npmTooOld:失败输出含 npm arborist 的 `edgesOut` 崩溃特征(build-ideal-tree.js 解 peer 依赖时
|
|
1712
1730
|
* 内部抛错,npm 11.6.0 前必现的已知缺陷,npm/cli#8261、#9787),或服务端已核实本机版本低于
|
|
1713
1731
|
* 阈值并打了 `[npm-too-low]` 标记 —— 是本机 npm 版本过低/自身缺陷,不是插件问题 → 引导升级 npm
|
|
1714
|
-
* -
|
|
1715
|
-
*
|
|
1716
|
-
*
|
|
1732
|
+
* - network:安装前连通性预检拦截(服务端 `[network]` 标记)或底层连接失败
|
|
1733
|
+
* (ERR_PNPM_GIT_FETCH_FAILED / ETIMEDOUT / DNS 解析 / TLS 握手 / 代理拒绝)——
|
|
1734
|
+
* 是本机网络不通/被墙/代理有问题,不是插件问题 → 提示检查网络,不引导提 Issue
|
|
1735
|
+
* - pnpmIgnoredBuild:插件自身或依赖的构建脚本被 pnpm 安全白名单(allowBuilds)默认拦截
|
|
1736
|
+
* (`ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED` / `ERR_PNPM_IGNORED_BUILDS`)。只影响带安装期
|
|
1737
|
+
* 构建的插件,其他插件不受影响 —— 差异在插件的依赖/打包方式,属插件依赖/打包问题
|
|
1738
|
+
* → 引导去仓库提 Issue(建议改用预编译版本或关闭安装期构建)
|
|
1717
1739
|
* - pluginPrepare:插件的 prepare/构建脚本实际执行失败(git tarball 常因缺失子模块或
|
|
1718
1740
|
* 构建产物导致)—— 属插件打包/分发问题,应引导去仓库提 Issue
|
|
1719
1741
|
* - repo:其余失败(含 git prepare 被 pnpm 白名单拦截等),默认按插件仓库问题引导提 Issue
|
|
1720
1742
|
*/
|
|
1721
1743
|
function classifyFailure(message) {
|
|
1722
1744
|
if (/\[npm-too-low\]|edgesOut/i.test(message)) return "npmTooOld";
|
|
1745
|
+
if (/ERR_PNPM_IGNORED_BUILDS|Ignored build scripts:|ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED/i.test(message)) return "pnpmIgnoredBuild";
|
|
1746
|
+
if (/\[network\]|ERR_PNPM_GIT_FETCH_FAILED|ETIMEDOUT|ECONNREFUSED|ECONNRESET|ENOTFOUND|EAI_AGAIN|EPIPE|EHOSTUNREACH|ENETUNREACH|getaddrinfo|Could not connect|Could not resolve host|Network unreachable|Failed to connect|socket hang up|CERT_HAS_EXPIRED|SSL certificate problem|\bTLS\b|\bSSL\b/i.test(message)) return "network";
|
|
1723
1747
|
if (/\[packaging\]|entry file missing/i.test(message)) return "pluginPrepare";
|
|
1724
|
-
if (/ERR_PNPM_IGNORED_BUILDS|Ignored build scripts:/i.test(message)) return "pnpmIgnoredBuild";
|
|
1725
1748
|
if (/ERR_PNPM_PREPARE_PACKAGE|ELIFECYCLE|Command failed|prepare-guard/i.test(message)) return "pluginPrepare";
|
|
1726
1749
|
return "repo";
|
|
1727
1750
|
}
|
|
@@ -1772,6 +1795,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1772
1795
|
const m = message.match(/\[?ERR_[A-Z_]+\]?/);
|
|
1773
1796
|
return m ? m[0].replace(/^\[|\]$/g, "") : null;
|
|
1774
1797
|
}
|
|
1798
|
+
/**
|
|
1799
|
+
* 从网络类失败消息里提取「具体连不上的地址」,供弹窗精准提示(你的网络无法访问什么)。
|
|
1800
|
+
* 优先取服务端 [network] 预检消息括号里的探测地址(中文「(…)」/ 英文「(…)」),
|
|
1801
|
+
* 否则取消息里出现的第一个 URL(git fetch 的仓库地址、registry 域名等)。
|
|
1802
|
+
* 提取不到返回 null —— 调用方据此跳过地址行。
|
|
1803
|
+
*/
|
|
1804
|
+
function unreachableTargetOf(message) {
|
|
1805
|
+
const paren = message.match(/[((](https?:\/\/[^\s'"`<>()+]+)[))]/);
|
|
1806
|
+
if (paren) return paren[1];
|
|
1807
|
+
const url = message.match(/https?:\/\/[^\s'"`<>()()]+/);
|
|
1808
|
+
return url ? url[0].replace(/[.,;:))\]]+$/, "") : null;
|
|
1809
|
+
}
|
|
1775
1810
|
//#endregion
|
|
1776
1811
|
//#region src/client/logic/urls.ts
|
|
1777
1812
|
/** dsh-plugin.org 中文页挂在 /zh/ 前缀下,英文在根路径。 */
|
|
@@ -1793,17 +1828,21 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1793
1828
|
function pluginSiteUrl(repo) {
|
|
1794
1829
|
return `${SITE_URL}plugins/${repo}`;
|
|
1795
1830
|
}
|
|
1796
|
-
/**
|
|
1797
|
-
*
|
|
1798
|
-
*
|
|
1799
|
-
function
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1831
|
+
/** 按失败类型给出简洁的错误原因标题(对外用英文):
|
|
1832
|
+
* 标题直接点明问题出在哪一侧(构建白名单/分发物/本机 npm/网络/插件侧),
|
|
1833
|
+
* 作者与用户扫一眼列表就能分流 —— 不再用含糊的 Install/Remove 动作词。 */
|
|
1834
|
+
function reasonTitleOf(kind) {
|
|
1835
|
+
switch (kind) {
|
|
1836
|
+
case "npmTooOld": return "npm too old to install";
|
|
1837
|
+
case "pnpmIgnoredBuild": return "build scripts blocked by pnpm allowlist";
|
|
1838
|
+
case "pluginPrepare": return "plugin distribution incomplete";
|
|
1839
|
+
case "network": return "network failure on the user side";
|
|
1840
|
+
default: return "plugin install failed";
|
|
1841
|
+
}
|
|
1803
1842
|
}
|
|
1804
1843
|
/**
|
|
1805
|
-
* 一键反馈 GitHub Issue 的预填链接:标题带「来自 dsh-plugin.org
|
|
1806
|
-
*
|
|
1844
|
+
* 一键反馈 GitHub Issue 的预填链接:标题带「来自 dsh-plugin.org」标识 + 错误原因,
|
|
1845
|
+
* 正文只带核心信息 —— 原因判定 + 关键错误代码 + 尝试过的安装方式 + 宿主机器环境快照 +
|
|
1807
1846
|
* 错误核心摘要(完整日志太长,塞进 URL 会被 GitHub 以「request URL too long」拒绝,
|
|
1808
1847
|
* 故只收集重点)。错误弹窗、失败记录共用此逻辑。
|
|
1809
1848
|
* env 取不到时为 null,链接照常生成、只是少环境段。
|
|
@@ -1811,9 +1850,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1811
1850
|
* 组织 scope 与 GitHub 用户名不一致时也能直接指认正确的 npm 包名。
|
|
1812
1851
|
*/
|
|
1813
1852
|
function pluginIssueUrl(repo, message, env, command, attempts) {
|
|
1814
|
-
const title = `[dsh-plugin.org | dsh-plugin-hub] ${actionLabelOf(command)} failed: ${repo}`;
|
|
1815
1853
|
const kind = classifyFailure(message);
|
|
1816
|
-
const
|
|
1854
|
+
const title = `[dsh-plugin.org | dsh-plugin-hub] ${reasonTitleOf(kind)}: ${repo}`;
|
|
1855
|
+
const reason = /\[packaging\]/i.test(message) ? "plugin distribution is incomplete — the entry file declared in package.json is missing from the published package (github tarball or npm package); please commit build output or publish a complete package" : kind === "network" ? "network connectivity issue on the user side (DNS, proxy, firewall, or a blocked connection)" : kind === "pluginPrepare" ? "plugin prepare/build script failed during install (packaging/distribution issue)" : kind === "pnpmIgnoredBuild" ? "plugin depends on a native module whose build script pnpm blocks by default (use a prebuilt variant)" : "plugin-side install failure";
|
|
1817
1856
|
const code = coreErrorCode(message);
|
|
1818
1857
|
const build = (coreChars) => {
|
|
1819
1858
|
const body = [
|
|
@@ -1997,7 +2036,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1997
2036
|
* 给足余量;超时主动中止,避免服务端 preflight 网络挂起时前端永久卡「安装中 0%」。 */
|
|
1998
2037
|
const REQUEST_TIMEOUT_MS = 6e4;
|
|
1999
2038
|
function useTaskQueue(opts) {
|
|
2000
|
-
const { t, refreshInstalled, onInstallDone, onUninstallDone, onError, installPlugin, installCustomTarget, installGlobalTarget, uninstallPlugin, uninstallName, installedName, resolvePending } = opts;
|
|
2039
|
+
const { t, langKey, refreshInstalled, onInstallDone, onUninstallDone, onError, installPlugin, installCustomTarget, installGlobalTarget, uninstallPlugin, uninstallName, installedName, resolvePending } = opts;
|
|
2001
2040
|
const [queue, setQueue] = (0, react.useState)([]);
|
|
2002
2041
|
const queueRef = (0, react.useRef)([]);
|
|
2003
2042
|
/** 待重启列表(服务端内存态 + 本地展示信息补齐);与 queue 一样以 ref 为唯一事实来源。 */
|
|
@@ -2307,6 +2346,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2307
2346
|
display: input.repo,
|
|
2308
2347
|
source: input.source,
|
|
2309
2348
|
mode: input.update ? "update" : void 0,
|
|
2349
|
+
...langKey ? { lang: langKey } : {},
|
|
2310
2350
|
...input.globalNpm && input.globalNpm.length > 0 ? { globalNpm: input.globalNpm } : {}
|
|
2311
2351
|
}),
|
|
2312
2352
|
signal: controller.signal
|
|
@@ -3142,7 +3182,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3142
3182
|
}
|
|
3143
3183
|
/** 预填插件仓库的 GitHub Issue 链接:标题带插件名,正文附完整错误信息,方便用户一键反馈。 */
|
|
3144
3184
|
/** 安装/卸载失败弹窗:布局与失败记录一致(类型徽标 + 仓库超链接 + 隐蔽复制按钮),报错完整展示,底部一键提交 Issue。 */
|
|
3145
|
-
function ErrorModal({ message, repo, kind, command, attempts, t, env, onCopy, onClose }) {
|
|
3185
|
+
function ErrorModal({ message, repo, kind, command, attempts, t, env, onCopy, onClose, onRunDiagnostics }) {
|
|
3146
3186
|
const failureKind = classifyFailure(message);
|
|
3147
3187
|
const npmVersion = npmTooLowVersion(message);
|
|
3148
3188
|
const copyText = [
|
|
@@ -3172,7 +3212,17 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3172
3212
|
}, repo) : null, (0, react.createElement)("button", {
|
|
3173
3213
|
className: Modal_module_css_default.errorCopySoft,
|
|
3174
3214
|
onClick: () => onCopy(copyText)
|
|
3175
|
-
}, t("errorCopy"))), (0, react.createElement)("pre", { className: Modal_module_css_default.errorBox }, message), failureKind === "npmTooOld" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(npmVersion ? "failNpmTooLowV" : "failNpmTooLow", npmVersion ? { v: npmVersion } : void 0)) : failureKind === "
|
|
3215
|
+
}, t("errorCopy"))), (0, react.createElement)("pre", { className: Modal_module_css_default.errorBox }, message), failureKind === "npmTooOld" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(npmVersion ? "failNpmTooLowV" : "failNpmTooLow", npmVersion ? { v: npmVersion } : void 0)) : failureKind === "network" ? (0, react.createElement)("div", null, [
|
|
3216
|
+
(() => {
|
|
3217
|
+
const target = unreachableTargetOf(message);
|
|
3218
|
+
return target ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failNetworkTarget", { url: target })) : null;
|
|
3219
|
+
})(),
|
|
3220
|
+
(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNetworkHint")),
|
|
3221
|
+
onRunDiagnostics ? (0, react.createElement)("button", {
|
|
3222
|
+
className: Modal_module_css_default.failDiagBtn,
|
|
3223
|
+
onClick: onRunDiagnostics
|
|
3224
|
+
}, t("failNetworkRunDiag")) : null
|
|
3225
|
+
]) : failureKind === "pluginPrepare" || failureKind === "pnpmIgnoredBuild" ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, failureKind === "pnpmIgnoredBuild" ? t("failIgnoredBuild") : /\[packaging\]/i.test(message) ? t("failPackagingHint") : t("failPrepareHint")), repo ? (0, react.createElement)("a", {
|
|
3176
3226
|
className: Modal_module_css_default.failBigIssue,
|
|
3177
3227
|
href: pluginIssueUrl(repo, message, env, command, attempts),
|
|
3178
3228
|
target: "_blank",
|
|
@@ -3259,7 +3309,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3259
3309
|
out = out.replace(/!\[([^\]]*)\]\(([^)\s]+)\)/g, (m, alt, url) => {
|
|
3260
3310
|
const src = String(url);
|
|
3261
3311
|
if (!/^https?:\/\//i.test(src) || /[\u0000]/.test(src)) return m;
|
|
3262
|
-
if (/\/dsh-plugin-user-group-qr-[^/]*$/i.test(src)) return `<img src="${src}" alt="${String(alt)}" width="
|
|
3312
|
+
if (/\/dsh-plugin-user-group-qr-[^/]*$/i.test(src)) return `<img src="${src}" alt="${String(alt)}" width="100" height="100" loading="lazy">`;
|
|
3263
3313
|
return `<img src="${src}" alt="${String(alt)}" loading="lazy">`;
|
|
3264
3314
|
});
|
|
3265
3315
|
out = out.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g, (m, text, url) => /^https?:\/\//i.test(String(url)) && !/[\u0000]/.test(String(url)) ? `<a href="${String(url)}" target="_blank" rel="noopener noreferrer">${String(text)}</a>` : m);
|
|
@@ -3604,7 +3654,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3604
3654
|
strokeLinecap: "round"
|
|
3605
3655
|
}));
|
|
3606
3656
|
}
|
|
3607
|
-
function NotificationsModal({ records, tasks, pendingRestarts, t, env, onClose, onCopy, onClear, onRemove, onUpdate, onIgnoreUpdate, cancelTask, restarting, onRestart, resolveRepo }) {
|
|
3657
|
+
function NotificationsModal({ records, tasks, pendingRestarts, t, env, onClose, onCopy, onClear, onRemove, onUpdate, onIgnoreUpdate, cancelTask, restarting, onRestart, onRunDiagnostics, resolveRepo }) {
|
|
3608
3658
|
const [confirmClear, setConfirmClear] = (0, react.useState)(false);
|
|
3609
3659
|
const [confirmRemoveId, setConfirmRemoveId] = (0, react.useState)(null);
|
|
3610
3660
|
return (0, react.createElement)("div", {
|
|
@@ -3713,6 +3763,17 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3713
3763
|
const v = npmTooLowVersion(r.message);
|
|
3714
3764
|
return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(v ? "failNpmTooLowV" : "failNpmTooLow", v ? { v } : void 0));
|
|
3715
3765
|
}
|
|
3766
|
+
if (kind === "network") return (0, react.createElement)("div", null, [
|
|
3767
|
+
(() => {
|
|
3768
|
+
const target = unreachableTargetOf(r.message);
|
|
3769
|
+
return target ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failNetworkTarget", { url: target })) : null;
|
|
3770
|
+
})(),
|
|
3771
|
+
(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNetworkHint")),
|
|
3772
|
+
onRunDiagnostics ? (0, react.createElement)("button", {
|
|
3773
|
+
className: Modal_module_css_default.failDiagBtn,
|
|
3774
|
+
onClick: onRunDiagnostics
|
|
3775
|
+
}, t("failNetworkRunDiag")) : null
|
|
3776
|
+
]);
|
|
3716
3777
|
if (kind === "pluginPrepare" || kind === "pnpmIgnoredBuild") return (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, kind === "pnpmIgnoredBuild" ? t("failIgnoredBuild") : /\[packaging\]/i.test(r.message) ? t("failPackagingHint") : t("failPrepareHint")), r.repo && shownRepo ? (0, react.createElement)("a", {
|
|
3717
3778
|
className: Modal_module_css_default.failBigIssue,
|
|
3718
3779
|
href: pluginIssueUrl(shownRepo, r.message, env, r.command, r.attempts),
|
|
@@ -3892,7 +3953,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3892
3953
|
}
|
|
3893
3954
|
//#endregion
|
|
3894
3955
|
//#region \0dsh-css:src/client/styles/List.module.css.mjs
|
|
3895
|
-
const css$9 = "._3XaZHa_body{flex-direction:column;flex:1;min-height:0;display:flex}._3XaZHa_list{flex-direction:column;flex:1;gap:6px;min-height:0;padding:2px 4px 4px 2px;display:flex;overflow-y:auto}._3XaZHa_moreSentinel{flex-shrink:0;height:1px}._3XaZHa_card{border:1px solid var(--hub-border-2);background:var(--hub-bg-1);border-radius:8px;justify-content:space-between;align-items:stretch;gap:12px;padding:9px 12px;transition:border-color .12s,background .12s;display:flex}._3XaZHa_card:hover{border-color:var(--hub-brand);background:var(--hub-bg-2)}._3XaZHa_cardMain{flex-direction:column;gap:4px;min-width:0;display:flex}._3XaZHa_cardHead{align-items:center;gap:6px;min-width:0;display:flex}._3XaZHa_cardTitle{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}._3XaZHa_categoryBadge,._3XaZHa_verified,._3XaZHa_versionBadge,._3XaZHa_updateBadge{border:1px solid #0000;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;line-height:16px}._3XaZHa_categoryBadge{color:var(--hub-brand);border-color:var(--hub-border-ghost)}._3XaZHa_verified{color:var(--hub-success);border-color:var(--hub-success-border)}._3XaZHa_versionBadge{color:var(--hub-text-secondary);border-color:var(--hub-border-input)}._3XaZHa_updateBadge{color:var(--hub-warn);border-color:var(--hub-warn-border);background:var(--hub-warn-tint)}._3XaZHa_desc{color:var(--hub-text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}._3XaZHa_topics{flex-wrap:wrap;align-items:center;gap:4px;min-width:0;display:flex}._3XaZHa_topic{color:var(--hub-text-tertiary);background:var(--hub-bg-3);white-space:nowrap;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;line-height:16px}._3XaZHa_cardSide{flex-direction:column;flex-shrink:0;justify-content:space-between;align-items:flex-end;gap:6px;display:flex}._3XaZHa_stats{flex-direction:column;align-items:flex-end;gap:1px;display:flex}._3XaZHa_star{color:var(--hub-warn);white-space:nowrap;font-size:11px;line-height:16px}._3XaZHa_fork{color:var(--hub-text-tertiary);white-space:nowrap;font-size:11px;line-height:16px}._3XaZHa_date{color:var(--hub-text-tertiary);white-space:nowrap;font-size:10px;line-height:14px}._3XaZHa_installBtn,._3XaZHa_installBtnCopied,._3XaZHa_installBtnInstalled,._3XaZHa_installBtnUpdate,._3XaZHa_uninstallBtn,._3XaZHa_detailBtn{cursor:pointer;border-radius:6px;padding:2px 10px;font-size:11px;line-height:18px;transition:color .12s,border-color .12s,background .12s}._3XaZHa_installBtnInstalled{color:var(--hub-success);background:var(--hub-success-tint);cursor:default;-webkit-user-select:none;user-select:none;border:none}._3XaZHa_installBtnUpdate{color:#fff;background:var(--hub-warn);-webkit-user-select:none;user-select:none;border:none;font-weight:500}._3XaZHa_installBtnUpdate:hover{background:var(--hub-warn-strong)}._3XaZHa_uninstallBtn{color:var(--hub-danger);background:var(--hub-danger-tint);-webkit-user-select:none;user-select:none;border:none}._3XaZHa_uninstallBtn:hover{color:#fff;background:var(--hub-danger-hover)}body[data-ds-dark-theme] ._3XaZHa_uninstallBtn{color:#fff;background:var(--hub-danger)}body[data-ds-dark-theme] ._3XaZHa_uninstallBtn:hover{background:var(--hub-danger-hover)}._3XaZHa_installBtn{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);-webkit-user-select:none;user-select:none;border:none;font-weight:500}._3XaZHa_installBtn:hover{background:var(--hub-btn-hover)}._3XaZHa_detailBtn{color:var(--hub-text-secondary);-webkit-user-select:none;user-select:none;background:0 0;border:none;align-items:center;text-decoration:none;display:inline-flex}._3XaZHa_detailBtn:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._3XaZHa_actions{align-items:center;gap:6px;display:flex}._3XaZHa_installBtnCopied{color:var(--hub-success);background:var(--hub-success-tint);-webkit-user-select:none;user-select:none;border:none}._3XaZHa_state{text-align:center;min-height:160px;color:var(--hub-text-tertiary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px;font-size:12px;line-height:18px;display:flex}._3XaZHa_stateTitle{color:var(--hub-text-primary);font-size:13px;font-weight:600}._3XaZHa_stateDesc{max-width:420px}._3XaZHa_retryBtn{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;
|
|
3956
|
+
const css$9 = "._3XaZHa_body{flex-direction:column;flex:1;min-height:0;display:flex}._3XaZHa_list{flex-direction:column;flex:1;gap:6px;min-height:0;padding:2px 4px 4px 2px;display:flex;overflow-y:auto}._3XaZHa_moreSentinel{flex-shrink:0;height:1px}._3XaZHa_card{border:1px solid var(--hub-border-2);background:var(--hub-bg-1);border-radius:8px;justify-content:space-between;align-items:stretch;gap:12px;padding:9px 12px;transition:border-color .12s,background .12s;display:flex}._3XaZHa_card:hover{border-color:var(--hub-brand);background:var(--hub-bg-2)}._3XaZHa_cardMain{flex-direction:column;gap:4px;min-width:0;display:flex}._3XaZHa_cardHead{align-items:center;gap:6px;min-width:0;display:flex}._3XaZHa_cardTitle{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}._3XaZHa_categoryBadge,._3XaZHa_verified,._3XaZHa_versionBadge,._3XaZHa_updateBadge{border:1px solid #0000;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;line-height:16px}._3XaZHa_categoryBadge{color:var(--hub-brand);border-color:var(--hub-border-ghost)}._3XaZHa_verified{color:var(--hub-success);border-color:var(--hub-success-border)}._3XaZHa_versionBadge{color:var(--hub-text-secondary);border-color:var(--hub-border-input)}._3XaZHa_updateBadge{color:var(--hub-warn);border-color:var(--hub-warn-border);background:var(--hub-warn-tint)}._3XaZHa_desc{color:var(--hub-text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}._3XaZHa_topics{flex-wrap:wrap;align-items:center;gap:4px;min-width:0;display:flex}._3XaZHa_topic{color:var(--hub-text-tertiary);background:var(--hub-bg-3);white-space:nowrap;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;line-height:16px}._3XaZHa_cardSide{flex-direction:column;flex-shrink:0;justify-content:space-between;align-items:flex-end;gap:6px;display:flex}._3XaZHa_stats{flex-direction:column;align-items:flex-end;gap:1px;display:flex}._3XaZHa_star{color:var(--hub-warn);white-space:nowrap;font-size:11px;line-height:16px}._3XaZHa_fork{color:var(--hub-text-tertiary);white-space:nowrap;font-size:11px;line-height:16px}._3XaZHa_date{color:var(--hub-text-tertiary);white-space:nowrap;font-size:10px;line-height:14px}._3XaZHa_installBtn,._3XaZHa_installBtnCopied,._3XaZHa_installBtnInstalled,._3XaZHa_installBtnUpdate,._3XaZHa_uninstallBtn,._3XaZHa_detailBtn{cursor:pointer;border-radius:6px;padding:2px 10px;font-size:11px;line-height:18px;transition:color .12s,border-color .12s,background .12s}._3XaZHa_installBtnInstalled{color:var(--hub-success);background:var(--hub-success-tint);cursor:default;-webkit-user-select:none;user-select:none;border:none}._3XaZHa_installBtnUpdate{color:#fff;background:var(--hub-warn);-webkit-user-select:none;user-select:none;border:none;font-weight:500}._3XaZHa_installBtnUpdate:hover{background:var(--hub-warn-strong)}._3XaZHa_uninstallBtn{color:var(--hub-danger);background:var(--hub-danger-tint);-webkit-user-select:none;user-select:none;border:none}._3XaZHa_uninstallBtn:hover{color:#fff;background:var(--hub-danger-hover)}body[data-ds-dark-theme] ._3XaZHa_uninstallBtn{color:#fff;background:var(--hub-danger)}body[data-ds-dark-theme] ._3XaZHa_uninstallBtn:hover{background:var(--hub-danger-hover)}._3XaZHa_installBtn{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);-webkit-user-select:none;user-select:none;border:none;font-weight:500}._3XaZHa_installBtn:hover{background:var(--hub-btn-hover)}._3XaZHa_detailBtn{color:var(--hub-text-secondary);-webkit-user-select:none;user-select:none;background:0 0;border:none;align-items:center;text-decoration:none;display:inline-flex}._3XaZHa_detailBtn:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._3XaZHa_actions{align-items:center;gap:6px;display:flex}._3XaZHa_installBtnCopied{color:var(--hub-success);background:var(--hub-success-tint);-webkit-user-select:none;user-select:none;border:none}._3XaZHa_state{text-align:center;min-height:160px;color:var(--hub-text-tertiary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px;font-size:12px;line-height:18px;display:flex}._3XaZHa_stateTitle{color:var(--hub-text-primary);font-size:13px;font-weight:600}._3XaZHa_stateDesc{max-width:420px}._3XaZHa_retryBtn{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:4px 12px;font-size:12px;line-height:18px}._3XaZHa_retryBtn:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._3XaZHa_stateActions{align-items:center;gap:8px;margin-top:4px;display:flex}._3XaZHa_diagBtn{color:#fff;background:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:4px 12px;font-size:12px;line-height:18px}._3XaZHa_diagBtn:hover{background:var(--hub-brand-hover)}._3XaZHa_footer{border-top:1px solid var(--hub-border-1);flex-shrink:0;justify-content:flex-end;align-items:center;gap:8px;padding:6px 4px 0;display:flex}._3XaZHa_footLink{color:var(--hub-brand);white-space:nowrap;-webkit-user-select:none;user-select:none;font-size:11px;line-height:16px;text-decoration:none}._3XaZHa_footLink:hover{text-decoration:underline}";
|
|
3896
3957
|
const tagId$9 = "dsh-plugin/List.module.css";
|
|
3897
3958
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$9) + "]") === null) {
|
|
3898
3959
|
const tag = document.createElement("style");
|
|
@@ -3907,37 +3968,39 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3907
3968
|
css: css$9
|
|
3908
3969
|
});
|
|
3909
3970
|
var List_module_css_default = {
|
|
3971
|
+
"desc": "_3XaZHa_desc",
|
|
3972
|
+
"fork": "_3XaZHa_fork",
|
|
3973
|
+
"installBtn": "_3XaZHa_installBtn",
|
|
3974
|
+
"retryBtn": "_3XaZHa_retryBtn",
|
|
3975
|
+
"uninstallBtn": "_3XaZHa_uninstallBtn",
|
|
3976
|
+
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
3977
|
+
"state": "_3XaZHa_state",
|
|
3978
|
+
"diagBtn": "_3XaZHa_diagBtn",
|
|
3979
|
+
"cardMain": "_3XaZHa_cardMain",
|
|
3910
3980
|
"cardSide": "_3XaZHa_cardSide",
|
|
3911
|
-
"card": "_3XaZHa_card",
|
|
3912
|
-
"actions": "_3XaZHa_actions",
|
|
3913
3981
|
"topics": "_3XaZHa_topics",
|
|
3914
|
-
"
|
|
3915
|
-
"
|
|
3916
|
-
"
|
|
3917
|
-
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
3982
|
+
"detailBtn": "_3XaZHa_detailBtn",
|
|
3983
|
+
"cardHead": "_3XaZHa_cardHead",
|
|
3984
|
+
"stateActions": "_3XaZHa_stateActions",
|
|
3918
3985
|
"footer": "_3XaZHa_footer",
|
|
3919
|
-
"
|
|
3920
|
-
"
|
|
3921
|
-
"
|
|
3922
|
-
"
|
|
3986
|
+
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
3987
|
+
"actions": "_3XaZHa_actions",
|
|
3988
|
+
"list": "_3XaZHa_list",
|
|
3989
|
+
"stateTitle": "_3XaZHa_stateTitle",
|
|
3990
|
+
"updateBadge": "_3XaZHa_updateBadge",
|
|
3923
3991
|
"topic": "_3XaZHa_topic",
|
|
3924
|
-
"fork": "_3XaZHa_fork",
|
|
3925
|
-
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
3926
|
-
"versionBadge": "_3XaZHa_versionBadge",
|
|
3927
|
-
"installBtn": "_3XaZHa_installBtn",
|
|
3928
|
-
"detailBtn": "_3XaZHa_detailBtn",
|
|
3929
|
-
"desc": "_3XaZHa_desc",
|
|
3930
|
-
"verified": "_3XaZHa_verified",
|
|
3931
3992
|
"star": "_3XaZHa_star",
|
|
3932
|
-
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
3933
3993
|
"stateDesc": "_3XaZHa_stateDesc",
|
|
3994
|
+
"verified": "_3XaZHa_verified",
|
|
3995
|
+
"stats": "_3XaZHa_stats",
|
|
3996
|
+
"date": "_3XaZHa_date",
|
|
3997
|
+
"card": "_3XaZHa_card",
|
|
3998
|
+
"cardTitle": "_3XaZHa_cardTitle",
|
|
3999
|
+
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
3934
4000
|
"footLink": "_3XaZHa_footLink",
|
|
3935
|
-
"
|
|
4001
|
+
"body": "_3XaZHa_body",
|
|
3936
4002
|
"moreSentinel": "_3XaZHa_moreSentinel",
|
|
3937
|
-
"
|
|
3938
|
-
"stats": "_3XaZHa_stats",
|
|
3939
|
-
"stateTitle": "_3XaZHa_stateTitle",
|
|
3940
|
-
"cardHead": "_3XaZHa_cardHead",
|
|
4003
|
+
"versionBadge": "_3XaZHa_versionBadge",
|
|
3941
4004
|
"installBtnCopied": "_3XaZHa_installBtnCopied"
|
|
3942
4005
|
};
|
|
3943
4006
|
//#endregion
|
|
@@ -4041,7 +4104,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4041
4104
|
* the category or install-status filter changes so the replaced content is
|
|
4042
4105
|
* not mistaken for a no-op update.
|
|
4043
4106
|
*/
|
|
4044
|
-
function CatalogList({ plugins, failed, visible, total, t, langPath, reload, category, copied, installedName, installedVersion, hasUpdate, langKey, onInstall, onUninstall }) {
|
|
4107
|
+
function CatalogList({ plugins, failed, visible, total, t, langPath, reload, category, copied, installedName, installedVersion, hasUpdate, langKey, onInstall, onUninstall, hasProxy, onOpenDiagnostics }) {
|
|
4045
4108
|
/** 列表滚动容器:分类/搜索切换后列表内容替换但 scrollTop 保留,会让用户误以为列表没更新,需重置回顶部 */
|
|
4046
4109
|
const listRef = (0, react.useRef)(null);
|
|
4047
4110
|
/** 增量渲染:全量目录太大(4400+),只渲染首批,滚动接近底部时自动追加下一批 */
|
|
@@ -4052,10 +4115,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4052
4115
|
return (0, react.createElement)("div", { className: List_module_css_default.body }, (0, react.createElement)("div", {
|
|
4053
4116
|
ref: listRef,
|
|
4054
4117
|
className: List_module_css_default.list
|
|
4055
|
-
}, plugins === null && !failed && (0, react.createElement)("div", { className: List_module_css_default.state }, t("loading")), failed && (0, react.createElement)("div", { className: List_module_css_default.state }, (0, react.createElement)("div", { className: List_module_css_default.stateTitle }, t("failed")), (0, react.createElement)("div", { className: List_module_css_default.stateDesc }, t("
|
|
4118
|
+
}, plugins === null && !failed && (0, react.createElement)("div", { className: List_module_css_default.state }, t("loading")), failed && (0, react.createElement)("div", { className: List_module_css_default.state }, (0, react.createElement)("div", { className: List_module_css_default.stateTitle }, t("failed")), (0, react.createElement)("div", { className: List_module_css_default.stateDesc }, t(hasProxy ? "failedDescProxy" : "failedDescNoProxy")), (0, react.createElement)("div", { className: List_module_css_default.stateActions }, (0, react.createElement)("button", {
|
|
4056
4119
|
className: List_module_css_default.retryBtn,
|
|
4057
4120
|
onClick: () => reload()
|
|
4058
|
-
}, t("retry"))
|
|
4121
|
+
}, t("retry")), (0, react.createElement)("button", {
|
|
4122
|
+
className: List_module_css_default.diagBtn,
|
|
4123
|
+
onClick: onOpenDiagnostics
|
|
4124
|
+
}, t("failNetworkRunDiag")))), plugins !== null && !failed && visible.length === 0 && (0, react.createElement)("div", { className: List_module_css_default.state }, (0, react.createElement)("div", { className: List_module_css_default.stateTitle }, t("noResult")), (0, react.createElement)("div", { className: List_module_css_default.stateDesc }, t("noResultDesc"))), plugins !== null && !failed && shown.map((p) => (0, react.createElement)(PluginCard, {
|
|
4059
4125
|
key: p.ownerSlug ? `${p.ownerSlug}/${p.slug}` : p.slug,
|
|
4060
4126
|
plugin: p,
|
|
4061
4127
|
copied,
|
|
@@ -4090,7 +4156,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4090
4156
|
* it wires catalog state (query/sort/filter/category) to the small
|
|
4091
4157
|
* presentational components so PluginHubSection stays free of view internals.
|
|
4092
4158
|
*/
|
|
4093
|
-
function MarketView({ catalog, t, langPath, langKey, copied, resultText, onInstall, onUninstall }) {
|
|
4159
|
+
function MarketView({ catalog, t, langPath, langKey, copied, resultText, onInstall, onUninstall, hasProxy, onOpenDiagnostics }) {
|
|
4094
4160
|
return (0, react.createElement)(react.Fragment, null, (0, react.createElement)(CategoryTabs, {
|
|
4095
4161
|
category: catalog.category,
|
|
4096
4162
|
setCategory: catalog.setCategory,
|
|
@@ -4120,7 +4186,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4120
4186
|
hasUpdate: catalog.hasUpdate,
|
|
4121
4187
|
langKey,
|
|
4122
4188
|
onInstall,
|
|
4123
|
-
onUninstall
|
|
4189
|
+
onUninstall,
|
|
4190
|
+
hasProxy,
|
|
4191
|
+
onOpenDiagnostics
|
|
4124
4192
|
}));
|
|
4125
4193
|
}
|
|
4126
4194
|
//#endregion
|
|
@@ -4140,15 +4208,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4140
4208
|
css: css$8
|
|
4141
4209
|
});
|
|
4142
4210
|
var SectionTabs_module_css_default = {
|
|
4143
|
-
"
|
|
4211
|
+
"tabCountActive": "_7tvizq_tabCountActive",
|
|
4144
4212
|
"tabActive": "_7tvizq_tabActive",
|
|
4145
|
-
"tabIcon": "_7tvizq_tabIcon",
|
|
4146
4213
|
"noticeIcon": "_7tvizq_noticeIcon",
|
|
4214
|
+
"tabIcon": "_7tvizq_tabIcon",
|
|
4147
4215
|
"noticeBtn": "_7tvizq_noticeBtn",
|
|
4148
4216
|
"noticeCount": "_7tvizq_noticeCount",
|
|
4149
4217
|
"root": "_7tvizq_root",
|
|
4150
|
-
"
|
|
4151
|
-
"
|
|
4218
|
+
"tabCount": "_7tvizq_tabCount",
|
|
4219
|
+
"tab": "_7tvizq_tab"
|
|
4152
4220
|
};
|
|
4153
4221
|
//#endregion
|
|
4154
4222
|
//#region src/client/components/layout/SectionTabs.tsx
|
|
@@ -4225,42 +4293,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4225
4293
|
css: css$7
|
|
4226
4294
|
});
|
|
4227
4295
|
var InstalledView_module_css_default = {
|
|
4228
|
-
"segBtn": "_1nXeGW_segBtn",
|
|
4229
4296
|
"list": "_1nXeGW_list",
|
|
4230
|
-
"
|
|
4231
|
-
"
|
|
4232
|
-
"
|
|
4233
|
-
"segBtnActive": "_1nXeGW_segBtnActive",
|
|
4234
|
-
"statusInactive": "_1nXeGW_statusInactive",
|
|
4235
|
-
"rowCategory": "_1nXeGW_rowCategory",
|
|
4236
|
-
"emptyDesc": "_1nXeGW_emptyDesc",
|
|
4237
|
-
"rowTitleLine": "_1nXeGW_rowTitleLine",
|
|
4238
|
-
"segLabel": "_1nXeGW_segLabel",
|
|
4239
|
-
"row": "_1nXeGW_row",
|
|
4240
|
-
"statusDot": "_1nXeGW_statusDot",
|
|
4241
|
-
"rowMeta": "_1nXeGW_rowMeta",
|
|
4242
|
-
"searchInput": "_1nXeGW_searchInput",
|
|
4243
|
-
"updateBadge": "_1nXeGW_updateBadge",
|
|
4244
|
-
"searchWrap": "_1nXeGW_searchWrap",
|
|
4245
|
-
"root": "_1nXeGW_root",
|
|
4246
|
-
"rowSourceTag": "_1nXeGW_rowSourceTag",
|
|
4247
|
-
"exampleRow": "_1nXeGW_exampleRow",
|
|
4248
|
-
"rowDesc": "_1nXeGW_rowDesc",
|
|
4249
|
-
"segRow": "_1nXeGW_segRow",
|
|
4297
|
+
"rowDetail": "_1nXeGW_rowDetail",
|
|
4298
|
+
"rowMain": "_1nXeGW_rowMain",
|
|
4299
|
+
"exampleBadge": "_1nXeGW_exampleBadge",
|
|
4250
4300
|
"emptyTitle": "_1nXeGW_emptyTitle",
|
|
4251
|
-
"rowActions": "_1nXeGW_rowActions",
|
|
4252
|
-
"versionBadge": "_1nXeGW_versionBadge",
|
|
4253
4301
|
"segGroup": "_1nXeGW_segGroup",
|
|
4254
|
-
"statusPending": "_1nXeGW_statusPending",
|
|
4255
4302
|
"rowTitle": "_1nXeGW_rowTitle",
|
|
4256
|
-
"
|
|
4257
|
-
"empty": "_1nXeGW_empty",
|
|
4303
|
+
"root": "_1nXeGW_root",
|
|
4258
4304
|
"rowRepo": "_1nXeGW_rowRepo",
|
|
4259
4305
|
"rowRestart": "_1nXeGW_rowRestart",
|
|
4260
|
-
"
|
|
4306
|
+
"emptyDesc": "_1nXeGW_emptyDesc",
|
|
4307
|
+
"row": "_1nXeGW_row",
|
|
4308
|
+
"segBtn": "_1nXeGW_segBtn",
|
|
4261
4309
|
"rowUninstall": "_1nXeGW_rowUninstall",
|
|
4310
|
+
"searchInput": "_1nXeGW_searchInput",
|
|
4311
|
+
"versionBadge": "_1nXeGW_versionBadge",
|
|
4312
|
+
"rowUpdate": "_1nXeGW_rowUpdate",
|
|
4313
|
+
"exampleRow": "_1nXeGW_exampleRow",
|
|
4314
|
+
"searchWrap": "_1nXeGW_searchWrap",
|
|
4315
|
+
"segLabel": "_1nXeGW_segLabel",
|
|
4316
|
+
"rowMeta": "_1nXeGW_rowMeta",
|
|
4262
4317
|
"toolbar": "_1nXeGW_toolbar",
|
|
4263
|
-
"
|
|
4318
|
+
"updateBadge": "_1nXeGW_updateBadge",
|
|
4319
|
+
"rowActions": "_1nXeGW_rowActions",
|
|
4320
|
+
"segBtnActive": "_1nXeGW_segBtnActive",
|
|
4321
|
+
"statusPending": "_1nXeGW_statusPending",
|
|
4322
|
+
"segRow": "_1nXeGW_segRow",
|
|
4323
|
+
"rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
|
|
4324
|
+
"rowTitleLine": "_1nXeGW_rowTitleLine",
|
|
4325
|
+
"empty": "_1nXeGW_empty",
|
|
4326
|
+
"rowDesc": "_1nXeGW_rowDesc",
|
|
4327
|
+
"statusInactive": "_1nXeGW_statusInactive",
|
|
4328
|
+
"rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
|
|
4329
|
+
"rowCategory": "_1nXeGW_rowCategory",
|
|
4330
|
+
"statusDot": "_1nXeGW_statusDot",
|
|
4331
|
+
"rowSourceTag": "_1nXeGW_rowSourceTag"
|
|
4264
4332
|
};
|
|
4265
4333
|
//#endregion
|
|
4266
4334
|
//#region src/client/components/views/InstalledView.tsx
|
|
@@ -4506,28 +4574,28 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4506
4574
|
css: css$6
|
|
4507
4575
|
});
|
|
4508
4576
|
var CustomInstallView_module_css_default = {
|
|
4509
|
-
"installInput": "zISxCG_installInput",
|
|
4510
|
-
"installExample": "zISxCG_installExample",
|
|
4511
4577
|
"desc": "zISxCG_desc",
|
|
4512
|
-
"installCards": "zISxCG_installCards",
|
|
4513
|
-
"installInsertBtn": "zISxCG_installInsertBtn",
|
|
4514
|
-
"helpNote": "zISxCG_helpNote",
|
|
4515
4578
|
"installLabel": "zISxCG_installLabel",
|
|
4516
|
-
"
|
|
4579
|
+
"installInsertBtn": "zISxCG_installInsertBtn",
|
|
4580
|
+
"installExample": "zISxCG_installExample",
|
|
4581
|
+
"installBtn": "zISxCG_installBtn",
|
|
4582
|
+
"channelOff": "zISxCG_channelOff",
|
|
4583
|
+
"helpBody": "zISxCG_helpBody",
|
|
4584
|
+
"installCards": "zISxCG_installCards",
|
|
4585
|
+
"installInput": "zISxCG_installInput",
|
|
4517
4586
|
"channelOffBtn": "zISxCG_channelOffBtn",
|
|
4587
|
+
"helpNote": "zISxCG_helpNote",
|
|
4588
|
+
"helpCmd": "zISxCG_helpCmd",
|
|
4589
|
+
"installCard": "zISxCG_installCard",
|
|
4518
4590
|
"helpLine": "zISxCG_helpLine",
|
|
4591
|
+
"installRow": "zISxCG_installRow",
|
|
4592
|
+
"installHelpBtn": "zISxCG_installHelpBtn",
|
|
4519
4593
|
"installCardDisabled": "zISxCG_installCardDisabled",
|
|
4520
4594
|
"root": "zISxCG_root",
|
|
4521
|
-
"channelOff": "zISxCG_channelOff",
|
|
4522
|
-
"helpBody": "zISxCG_helpBody",
|
|
4523
4595
|
"installCardHead": "zISxCG_installCardHead",
|
|
4524
|
-
"installHelpBtn": "zISxCG_installHelpBtn",
|
|
4525
|
-
"installRow": "zISxCG_installRow",
|
|
4526
|
-
"installBtn": "zISxCG_installBtn",
|
|
4527
|
-
"helpCmd": "zISxCG_helpCmd",
|
|
4528
4596
|
"installInputError": "zISxCG_installInputError",
|
|
4529
|
-
"
|
|
4530
|
-
"
|
|
4597
|
+
"installError": "zISxCG_installError",
|
|
4598
|
+
"channelOffText": "zISxCG_channelOffText"
|
|
4531
4599
|
};
|
|
4532
4600
|
//#endregion
|
|
4533
4601
|
//#region src/client/components/views/CustomInstallView.tsx
|
|
@@ -4799,7 +4867,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4799
4867
|
}
|
|
4800
4868
|
//#endregion
|
|
4801
4869
|
//#region \0dsh-css:src/client/styles/SettingsView.module.css.mjs
|
|
4802
|
-
const css$5 = "._506LLG_root{flex:1;align-items:stretch;min-width:0;min-height:0;display:flex}._506LLG_sidebar{border-right:1px solid var(--hub-border-1);flex-direction:column;flex:none;gap:2px;padding:8px 6px;display:flex;overflow-y:auto}._506LLG_navItem,._506LLG_navItemActive{box-sizing:border-box;text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:7px;align-items:center;gap:8px;width:100%;padding:7px 10px;font-size:12.5px;line-height:18px;transition:color .12s,background-color .12s;display:flex}._506LLG_navItem{color:var(--hub-text-secondary);background:0 0}._506LLG_navItem:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._506LLG_navItemActive{color:var(--hub-brand);background:var(--hub-brand-tint);font-weight:600}._506LLG_navIcon{flex:none;display:inline-flex}._506LLG_content{flex-direction:column;flex:1;min-width:0;min-height:0;padding:14px 16px 18px;display:flex;overflow-y:auto}._506LLG_pageHeader{margin-bottom:12px}._506LLG_pageTitle{color:var(--hub-text-primary);font-size:14px;font-weight:600;line-height:20px}._506LLG_pageDesc{color:var(--hub-text-tertiary);margin-top:3px;font-size:11.5px;line-height:16px}._506LLG_card{border:1px solid var(--hub-border-1);background:var(--hub-bg-1);border-radius:8px;flex-direction:column;min-width:0;display:flex}._506LLG_settingRow{border-bottom:1px solid var(--hub-border-1);justify-content:space-between;align-items:center;gap:16px;min-width:0;padding:10px 12px;display:flex}._506LLG_settingRow:last-child{border-bottom:none}._506LLG_settingLabel{flex:1;min-width:0}._506LLG_settingTitle{color:var(--hub-text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:12.5px;font-weight:500;line-height:18px;overflow:hidden}._506LLG_settingDesc{color:var(--hub-text-tertiary);margin-top:2px;font-size:11px;line-height:15px}._506LLG_settingControl{flex:none;align-items:center;display:flex}._506LLG_settingRowStack{border-bottom:1px solid var(--hub-border-1);flex-direction:column;align-items:stretch;gap:8px;min-width:0;padding:10px 12px;display:flex}._506LLG_settingRowStack:last-child{border-bottom:none}._506LLG_settingControlStack{align-items:center;display:flex}._506LLG_settingControlStack ._506LLG_textInput{width:100%}._506LLG_controlDropdown{min-width:180px}._506LLG_textInput{width:240px;height:28px;color:var(--hub-text-primary);background:var(--hub-bg-1);border:1px solid var(--hub-border-input);border-radius:6px;outline:none;padding:0 9px;font-family:inherit;font-size:12px;transition:border-color .15s}._506LLG_textInput:focus{border-color:var(--hub-brand-border)}._506LLG_textInput::placeholder{color:var(--hub-text-disabled)}._506LLG_resetBtn{cursor:pointer;height:28px;color:var(--hub-danger-text);border:1px solid var(--hub-danger-border);background:0 0;border-radius:6px;flex:none;padding:0 14px;font-size:12px;font-weight:500;transition:background-color .15s,border-color .15s,color .15s}._506LLG_resetBtn:hover{background:var(--hub-danger-tint);border-color:var(--hub-danger-text)}";
|
|
4870
|
+
const css$5 = "._506LLG_root{flex:1;align-items:stretch;min-width:0;min-height:0;display:flex}._506LLG_sidebar{border-right:1px solid var(--hub-border-1);flex-direction:column;flex:none;gap:2px;padding:8px 6px;display:flex;overflow-y:auto}._506LLG_navItem,._506LLG_navItemActive{box-sizing:border-box;text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:7px;align-items:center;gap:8px;width:100%;padding:7px 10px;font-size:12.5px;line-height:18px;transition:color .12s,background-color .12s;display:flex}._506LLG_navItem{color:var(--hub-text-secondary);background:0 0}._506LLG_navItem:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._506LLG_navItemActive{color:var(--hub-brand);background:var(--hub-brand-tint);font-weight:600}._506LLG_navIcon{flex:none;display:inline-flex}._506LLG_content{flex-direction:column;flex:1;min-width:0;min-height:0;padding:14px 16px 18px;display:flex;overflow-y:auto}._506LLG_pageHeader{margin-bottom:12px}._506LLG_pageTitle{color:var(--hub-text-primary);font-size:14px;font-weight:600;line-height:20px}._506LLG_pageDesc{color:var(--hub-text-tertiary);margin-top:3px;font-size:11.5px;line-height:16px}._506LLG_card{border:1px solid var(--hub-border-1);background:var(--hub-bg-1);border-radius:8px;flex-direction:column;min-width:0;display:flex}._506LLG_settingRow{border-bottom:1px solid var(--hub-border-1);justify-content:space-between;align-items:center;gap:16px;min-width:0;padding:10px 12px;display:flex}._506LLG_settingRow:last-child{border-bottom:none}._506LLG_settingLabel{flex:1;min-width:0}._506LLG_settingTitle{color:var(--hub-text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:12.5px;font-weight:500;line-height:18px;overflow:hidden}._506LLG_settingDesc{color:var(--hub-text-tertiary);margin-top:2px;font-size:11px;line-height:15px}._506LLG_settingControl{flex:none;align-items:center;display:flex}._506LLG_settingRowStack{border-bottom:1px solid var(--hub-border-1);flex-direction:column;align-items:stretch;gap:8px;min-width:0;padding:10px 12px;display:flex}._506LLG_settingRowStack:last-child{border-bottom:none}._506LLG_settingControlStack{align-items:center;display:flex}._506LLG_settingControlStack ._506LLG_textInput{width:100%}._506LLG_proxyControl{flex-direction:column;align-items:stretch;gap:5px;width:100%;display:flex}._506LLG_proxyHint{color:var(--hub-text-disabled);font-size:11px;line-height:1.4}._506LLG_proxyHintOk{color:var(--hub-success)}._506LLG_proxyHintFail{color:var(--hub-warning)}._506LLG_controlDropdown{min-width:180px}._506LLG_textInput{width:240px;height:28px;color:var(--hub-text-primary);background:var(--hub-bg-1);border:1px solid var(--hub-border-input);border-radius:6px;outline:none;padding:0 9px;font-family:inherit;font-size:12px;transition:border-color .15s}._506LLG_textInput:focus{border-color:var(--hub-brand-border)}._506LLG_textInput::placeholder{color:var(--hub-text-disabled)}._506LLG_resetBtn{cursor:pointer;height:28px;color:var(--hub-danger-text);border:1px solid var(--hub-danger-border);background:0 0;border-radius:6px;flex:none;padding:0 14px;font-size:12px;font-weight:500;transition:background-color .15s,border-color .15s,color .15s}._506LLG_resetBtn:hover{background:var(--hub-danger-tint);border-color:var(--hub-danger-text)}";
|
|
4803
4871
|
const tagId$5 = "dsh-plugin/SettingsView.module.css";
|
|
4804
4872
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
|
|
4805
4873
|
const tag = document.createElement("style");
|
|
@@ -4814,26 +4882,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4814
4882
|
css: css$5
|
|
4815
4883
|
});
|
|
4816
4884
|
var SettingsView_module_css_default = {
|
|
4817
|
-
"
|
|
4818
|
-
"navItem": "_506LLG_navItem",
|
|
4819
|
-
"pageHeader": "_506LLG_pageHeader",
|
|
4820
|
-
"settingDesc": "_506LLG_settingDesc",
|
|
4885
|
+
"proxyControl": "_506LLG_proxyControl",
|
|
4821
4886
|
"settingRowStack": "_506LLG_settingRowStack",
|
|
4887
|
+
"settingDesc": "_506LLG_settingDesc",
|
|
4888
|
+
"pageDesc": "_506LLG_pageDesc",
|
|
4889
|
+
"proxyHintFail": "_506LLG_proxyHintFail",
|
|
4822
4890
|
"controlDropdown": "_506LLG_controlDropdown",
|
|
4823
|
-
"
|
|
4824
|
-
"
|
|
4825
|
-
"
|
|
4826
|
-
"pageTitle": "_506LLG_pageTitle",
|
|
4891
|
+
"pageHeader": "_506LLG_pageHeader",
|
|
4892
|
+
"root": "_506LLG_root",
|
|
4893
|
+
"navItem": "_506LLG_navItem",
|
|
4827
4894
|
"content": "_506LLG_content",
|
|
4895
|
+
"settingControl": "_506LLG_settingControl",
|
|
4828
4896
|
"textInput": "_506LLG_textInput",
|
|
4829
|
-
"pageDesc": "_506LLG_pageDesc",
|
|
4830
|
-
"settingControlStack": "_506LLG_settingControlStack",
|
|
4831
|
-
"resetBtn": "_506LLG_resetBtn",
|
|
4832
|
-
"sidebar": "_506LLG_sidebar",
|
|
4833
4897
|
"navIcon": "_506LLG_navIcon",
|
|
4898
|
+
"proxyHint": "_506LLG_proxyHint",
|
|
4899
|
+
"proxyHintOk": "_506LLG_proxyHintOk",
|
|
4900
|
+
"navItemActive": "_506LLG_navItemActive",
|
|
4901
|
+
"card": "_506LLG_card",
|
|
4902
|
+
"resetBtn": "_506LLG_resetBtn",
|
|
4834
4903
|
"settingTitle": "_506LLG_settingTitle",
|
|
4904
|
+
"settingLabel": "_506LLG_settingLabel",
|
|
4905
|
+
"pageTitle": "_506LLG_pageTitle",
|
|
4906
|
+
"sidebar": "_506LLG_sidebar",
|
|
4835
4907
|
"settingRow": "_506LLG_settingRow",
|
|
4836
|
-
"
|
|
4908
|
+
"settingControlStack": "_506LLG_settingControlStack"
|
|
4837
4909
|
};
|
|
4838
4910
|
//#endregion
|
|
4839
4911
|
//#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
|
|
@@ -4852,18 +4924,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4852
4924
|
css: css$4
|
|
4853
4925
|
});
|
|
4854
4926
|
var Dropdown_module_css_default = {
|
|
4927
|
+
"dropdownCount": "B_Gxsq_dropdownCount",
|
|
4855
4928
|
"dropdownBtn": "B_Gxsq_dropdownBtn",
|
|
4856
|
-
"dropdownArrow": "B_Gxsq_dropdownArrow",
|
|
4857
|
-
"dropdownItem": "B_Gxsq_dropdownItem",
|
|
4858
|
-
"dropdownFill": "B_Gxsq_dropdownFill",
|
|
4859
|
-
"dropdown": "B_Gxsq_dropdown",
|
|
4860
|
-
"dropdownLabel": "B_Gxsq_dropdownLabel",
|
|
4861
|
-
"dropdownItemActive": "B_Gxsq_dropdownItemActive",
|
|
4862
4929
|
"dropdownCountActive": "B_Gxsq_dropdownCountActive",
|
|
4930
|
+
"dropdownItemActive": "B_Gxsq_dropdownItemActive",
|
|
4931
|
+
"dropdownLabel": "B_Gxsq_dropdownLabel",
|
|
4863
4932
|
"dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
|
|
4933
|
+
"dropdownFill": "B_Gxsq_dropdownFill",
|
|
4934
|
+
"dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
|
|
4935
|
+
"dropdown": "B_Gxsq_dropdown",
|
|
4864
4936
|
"dropdownPanel": "B_Gxsq_dropdownPanel",
|
|
4865
|
-
"
|
|
4866
|
-
"
|
|
4937
|
+
"dropdownArrow": "B_Gxsq_dropdownArrow",
|
|
4938
|
+
"dropdownItem": "B_Gxsq_dropdownItem"
|
|
4867
4939
|
};
|
|
4868
4940
|
//#endregion
|
|
4869
4941
|
//#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
|
|
@@ -4882,9 +4954,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4882
4954
|
css: css$3
|
|
4883
4955
|
});
|
|
4884
4956
|
var Toggle_module_css_default = {
|
|
4885
|
-
"knob": "k-cD4G_knob",
|
|
4886
4957
|
"toggle": "k-cD4G_toggle",
|
|
4887
|
-
"toggleOn": "k-cD4G_toggleOn"
|
|
4958
|
+
"toggleOn": "k-cD4G_toggleOn",
|
|
4959
|
+
"knob": "k-cD4G_knob"
|
|
4888
4960
|
};
|
|
4889
4961
|
//#endregion
|
|
4890
4962
|
//#region src/client/components/ui/Toggle.tsx
|
|
@@ -4984,29 +5056,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4984
5056
|
css: css$2
|
|
4985
5057
|
});
|
|
4986
5058
|
var DiagnosticsView_module_css_default = {
|
|
4987
|
-
"badgeFail": "k9eRya_badgeFail",
|
|
4988
|
-
"row": "k9eRya_row",
|
|
4989
|
-
"badge": "k9eRya_badge",
|
|
4990
|
-
"summaryOk": "k9eRya_summaryOk",
|
|
4991
|
-
"summaryRunning": "k9eRya_summaryRunning",
|
|
4992
|
-
"head": "k9eRya_head",
|
|
4993
5059
|
"envLabel": "k9eRya_envLabel",
|
|
4994
|
-
"name": "k9eRya_name",
|
|
4995
5060
|
"runBtn": "k9eRya_runBtn",
|
|
4996
|
-
"envDesc": "k9eRya_envDesc",
|
|
4997
|
-
"meta": "k9eRya_meta",
|
|
4998
|
-
"envTitle": "k9eRya_envTitle",
|
|
4999
|
-
"badgeIdle": "k9eRya_badgeIdle",
|
|
5000
|
-
"summary": "k9eRya_summary",
|
|
5001
|
-
"summaryFail": "k9eRya_summaryFail",
|
|
5002
5061
|
"panel": "k9eRya_panel",
|
|
5003
|
-
"
|
|
5062
|
+
"row": "k9eRya_row",
|
|
5063
|
+
"summaryFail": "k9eRya_summaryFail",
|
|
5064
|
+
"head": "k9eRya_head",
|
|
5004
5065
|
"display": "k9eRya_display",
|
|
5005
5066
|
"diagPulse": "k9eRya_diagPulse",
|
|
5067
|
+
"badgeRunning": "k9eRya_badgeRunning",
|
|
5068
|
+
"badgeIdle": "k9eRya_badgeIdle",
|
|
5006
5069
|
"envCopyBtn": "k9eRya_envCopyBtn",
|
|
5007
|
-
"headHint": "k9eRya_headHint",
|
|
5008
5070
|
"badgeOk": "k9eRya_badgeOk",
|
|
5009
|
-
"
|
|
5071
|
+
"badgeFail": "k9eRya_badgeFail",
|
|
5072
|
+
"envTitle": "k9eRya_envTitle",
|
|
5073
|
+
"name": "k9eRya_name",
|
|
5074
|
+
"meta": "k9eRya_meta",
|
|
5075
|
+
"summaryOk": "k9eRya_summaryOk",
|
|
5076
|
+
"envDesc": "k9eRya_envDesc",
|
|
5077
|
+
"summary": "k9eRya_summary",
|
|
5078
|
+
"summaryRunning": "k9eRya_summaryRunning",
|
|
5079
|
+
"headHint": "k9eRya_headHint",
|
|
5080
|
+
"envRow": "k9eRya_envRow",
|
|
5081
|
+
"badge": "k9eRya_badge"
|
|
5010
5082
|
};
|
|
5011
5083
|
//#endregion
|
|
5012
5084
|
//#region src/client/components/views/DiagnosticsView.tsx
|
|
@@ -5044,7 +5116,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5044
5116
|
},
|
|
5045
5117
|
{
|
|
5046
5118
|
key: "github",
|
|
5047
|
-
display: "github.com",
|
|
5119
|
+
display: "github.com/dshplugin/hello-dsh",
|
|
5048
5120
|
nameKey: "diagGithub",
|
|
5049
5121
|
status: "idle",
|
|
5050
5122
|
ms: null,
|
|
@@ -5059,8 +5131,19 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5059
5131
|
statusCode: null
|
|
5060
5132
|
}
|
|
5061
5133
|
];
|
|
5062
|
-
function DiagnosticsView({ t, env, onCopy }) {
|
|
5063
|
-
const [rows, setRows] = (0, react.useState)(
|
|
5134
|
+
function DiagnosticsView({ t, env, proxy, onCopy }) {
|
|
5135
|
+
const [rows, setRows] = (0, react.useState)(() => {
|
|
5136
|
+
const base = INITIAL_ROWS.map((r) => ({ ...r }));
|
|
5137
|
+
if (proxy.trim() !== "") base.push({
|
|
5138
|
+
key: "proxy",
|
|
5139
|
+
display: proxy.trim(),
|
|
5140
|
+
nameKey: "diagProxy",
|
|
5141
|
+
status: "idle",
|
|
5142
|
+
ms: null,
|
|
5143
|
+
statusCode: null
|
|
5144
|
+
});
|
|
5145
|
+
return base;
|
|
5146
|
+
});
|
|
5064
5147
|
/** 当前探测请求:重测/卸载时 abort 旧请求,避免乱序结果覆盖 */
|
|
5065
5148
|
const runningRef = (0, react.useRef)(null);
|
|
5066
5149
|
const patchRows = (key, patch) => {
|
|
@@ -5170,57 +5253,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5170
5253
|
css: css$1
|
|
5171
5254
|
});
|
|
5172
5255
|
var LogsView_module_css_default = {
|
|
5173
|
-
"
|
|
5174
|
-
"footActions": "_3j77BW_footActions",
|
|
5175
|
-
"catBadge": "_3j77BW_catBadge",
|
|
5176
|
-
"catInstall": "_3j77BW_catInstall",
|
|
5177
|
-
"pathDialogFoot": "_3j77BW_pathDialogFoot",
|
|
5178
|
-
"pathDialogHint": "_3j77BW_pathDialogHint",
|
|
5179
|
-
"badgeWarn": "_3j77BW_badgeWarn",
|
|
5180
|
-
"badgeDebug": "_3j77BW_badgeDebug",
|
|
5181
|
-
"catSystem": "_3j77BW_catSystem",
|
|
5182
|
-
"badge": "_3j77BW_badge",
|
|
5183
|
-
"linkBtn": "_3j77BW_linkBtn",
|
|
5184
|
-
"actions": "_3j77BW_actions",
|
|
5185
|
-
"pathDialogDesc": "_3j77BW_pathDialogDesc",
|
|
5186
|
-
"head": "_3j77BW_head",
|
|
5187
|
-
"more": "_3j77BW_more",
|
|
5256
|
+
"filterBar": "_3j77BW_filterBar",
|
|
5188
5257
|
"list": "_3j77BW_list",
|
|
5189
5258
|
"pathDialogRow": "_3j77BW_pathDialogRow",
|
|
5190
|
-
"
|
|
5191
|
-
"
|
|
5192
|
-
"
|
|
5259
|
+
"pathLabel": "_3j77BW_pathLabel",
|
|
5260
|
+
"pathText": "_3j77BW_pathText",
|
|
5261
|
+
"badge": "_3j77BW_badge",
|
|
5262
|
+
"badgeSuccess": "_3j77BW_badgeSuccess",
|
|
5263
|
+
"badgeError": "_3j77BW_badgeError",
|
|
5264
|
+
"catSystem": "_3j77BW_catSystem",
|
|
5193
5265
|
"empty": "_3j77BW_empty",
|
|
5266
|
+
"pathDialogReset": "_3j77BW_pathDialogReset",
|
|
5267
|
+
"previewRow": "_3j77BW_previewRow",
|
|
5268
|
+
"filterChip": "_3j77BW_filterChip",
|
|
5269
|
+
"actions": "_3j77BW_actions",
|
|
5270
|
+
"time": "_3j77BW_time",
|
|
5194
5271
|
"headHint": "_3j77BW_headHint",
|
|
5272
|
+
"panel": "_3j77BW_panel",
|
|
5273
|
+
"headActions": "_3j77BW_headActions",
|
|
5274
|
+
"linkBtn": "_3j77BW_linkBtn",
|
|
5275
|
+
"pathDialogFoot": "_3j77BW_pathDialogFoot",
|
|
5276
|
+
"foot": "_3j77BW_foot",
|
|
5277
|
+
"catInstall": "_3j77BW_catInstall",
|
|
5195
5278
|
"catDiagnostics": "_3j77BW_catDiagnostics",
|
|
5196
|
-
"clearBtn": "_3j77BW_clearBtn",
|
|
5197
|
-
"event": "_3j77BW_event",
|
|
5198
|
-
"footPath": "_3j77BW_footPath",
|
|
5199
|
-
"catUninstall": "_3j77BW_catUninstall",
|
|
5200
|
-
"catSettings": "_3j77BW_catSettings",
|
|
5201
|
-
"logList": "_3j77BW_logList",
|
|
5202
|
-
"moreEnd": "_3j77BW_moreEnd",
|
|
5203
|
-
"message": "_3j77BW_message",
|
|
5204
|
-
"pathLabel": "_3j77BW_pathLabel",
|
|
5205
5279
|
"pathDraft": "_3j77BW_pathDraft",
|
|
5206
|
-
"
|
|
5207
|
-
"
|
|
5208
|
-
"
|
|
5209
|
-
"badgeInfo": "_3j77BW_badgeInfo",
|
|
5280
|
+
"clearBtn": "_3j77BW_clearBtn",
|
|
5281
|
+
"footActions": "_3j77BW_footActions",
|
|
5282
|
+
"head": "_3j77BW_head",
|
|
5210
5283
|
"footFail": "_3j77BW_footFail",
|
|
5211
|
-
"foot": "_3j77BW_foot",
|
|
5212
|
-
"catUpdate": "_3j77BW_catUpdate",
|
|
5213
5284
|
"entry": "_3j77BW_entry",
|
|
5214
|
-
"
|
|
5215
|
-
"
|
|
5216
|
-
"
|
|
5217
|
-
"
|
|
5218
|
-
"
|
|
5285
|
+
"logList": "_3j77BW_logList",
|
|
5286
|
+
"more": "_3j77BW_more",
|
|
5287
|
+
"badgeDebug": "_3j77BW_badgeDebug",
|
|
5288
|
+
"footCount": "_3j77BW_footCount",
|
|
5289
|
+
"catSettings": "_3j77BW_catSettings",
|
|
5290
|
+
"btn": "_3j77BW_btn",
|
|
5291
|
+
"event": "_3j77BW_event",
|
|
5219
5292
|
"search": "_3j77BW_search",
|
|
5293
|
+
"pathRow": "_3j77BW_pathRow",
|
|
5294
|
+
"badgeWarn": "_3j77BW_badgeWarn",
|
|
5295
|
+
"message": "_3j77BW_message",
|
|
5296
|
+
"filterChipActive": "_3j77BW_filterChipActive",
|
|
5297
|
+
"pathDialogDesc": "_3j77BW_pathDialogDesc",
|
|
5298
|
+
"moreEnd": "_3j77BW_moreEnd",
|
|
5299
|
+
"footPath": "_3j77BW_footPath",
|
|
5220
5300
|
"pathDialog": "_3j77BW_pathDialog",
|
|
5221
|
-
"
|
|
5222
|
-
"
|
|
5223
|
-
"
|
|
5301
|
+
"badgeInfo": "_3j77BW_badgeInfo",
|
|
5302
|
+
"catUpdate": "_3j77BW_catUpdate",
|
|
5303
|
+
"searchInput": "_3j77BW_searchInput",
|
|
5304
|
+
"catBadge": "_3j77BW_catBadge",
|
|
5305
|
+
"catUninstall": "_3j77BW_catUninstall",
|
|
5306
|
+
"pathDialogHint": "_3j77BW_pathDialogHint"
|
|
5224
5307
|
};
|
|
5225
5308
|
//#endregion
|
|
5226
5309
|
//#region src/client/components/modals/LogsModal.tsx
|
|
@@ -5847,12 +5930,52 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5847
5930
|
function SettingRow({ title, desc, children, stack = false }) {
|
|
5848
5931
|
return (0, react.createElement)("div", { className: stack ? SettingsView_module_css_default.settingRowStack : SettingsView_module_css_default.settingRow }, (0, react.createElement)("div", { className: SettingsView_module_css_default.settingLabel }, (0, react.createElement)("div", { className: SettingsView_module_css_default.settingTitle }, title), desc ? (0, react.createElement)("div", { className: SettingsView_module_css_default.settingDesc }, desc) : null), (0, react.createElement)("div", { className: stack ? SettingsView_module_css_default.settingControlStack : SettingsView_module_css_default.settingControl }, children));
|
|
5849
5932
|
}
|
|
5850
|
-
function SettingsView({ t, settings, update, reset, env, onCopy }) {
|
|
5933
|
+
function SettingsView({ t, settings, update, reset, env, onCopy, openSection, onConsumedOpenSection }) {
|
|
5851
5934
|
/** 当前激活的分组:左侧导航点击切换,右侧只渲染这一组 */
|
|
5852
5935
|
const [section, setSection] = (0, react.useState)("updates");
|
|
5853
5936
|
/** 恢复默认确认弹窗:点按钮先弹窗询问,确认后才真正 reset(不做两段式按钮) */
|
|
5854
5937
|
const [resetConfirm, setResetConfirm] = (0, react.useState)(false);
|
|
5855
|
-
|
|
5938
|
+
(0, react.useEffect)(() => {
|
|
5939
|
+
if (!openSection) return;
|
|
5940
|
+
setSection(openSection);
|
|
5941
|
+
onConsumedOpenSection?.();
|
|
5942
|
+
}, [openSection, onConsumedOpenSection]);
|
|
5943
|
+
const [proxyProbe, setProxyProbe] = (0, react.useState)("idle");
|
|
5944
|
+
const proxyProbeTimer = (0, react.useRef)(null);
|
|
5945
|
+
const proxyProbeSeq = (0, react.useRef)(0);
|
|
5946
|
+
(0, react.useEffect)(() => () => {
|
|
5947
|
+
if (proxyProbeTimer.current !== null) window.clearTimeout(proxyProbeTimer.current);
|
|
5948
|
+
proxyProbeSeq.current += 1;
|
|
5949
|
+
}, []);
|
|
5950
|
+
(0, react.useEffect)(() => {
|
|
5951
|
+
if (settings.proxy === "") setProxyProbe("idle");
|
|
5952
|
+
}, [settings.proxy]);
|
|
5953
|
+
const probeProxyNow = (value) => {
|
|
5954
|
+
const v = value.trim();
|
|
5955
|
+
if (v === "") {
|
|
5956
|
+
setProxyProbe("idle");
|
|
5957
|
+
return;
|
|
5958
|
+
}
|
|
5959
|
+
const seq = ++proxyProbeSeq.current;
|
|
5960
|
+
setProxyProbe("checking");
|
|
5961
|
+
fetch("/dsh-plugin-hub/proxy-check", {
|
|
5962
|
+
method: "POST",
|
|
5963
|
+
headers: { "content-type": "application/json" },
|
|
5964
|
+
body: JSON.stringify({ proxy: v }),
|
|
5965
|
+
cache: "no-store"
|
|
5966
|
+
}).then((res) => res.json()).then((data) => {
|
|
5967
|
+
if (seq !== proxyProbeSeq.current) return;
|
|
5968
|
+
setProxyProbe(data.ok ? "ok" : "fail");
|
|
5969
|
+
}).catch(() => {
|
|
5970
|
+
if (seq === proxyProbeSeq.current) setProxyProbe("fail");
|
|
5971
|
+
});
|
|
5972
|
+
};
|
|
5973
|
+
const onProxyChange = (e) => {
|
|
5974
|
+
const value = e.target.value;
|
|
5975
|
+
update({ proxy: value });
|
|
5976
|
+
if (proxyProbeTimer.current !== null) window.clearTimeout(proxyProbeTimer.current);
|
|
5977
|
+
proxyProbeTimer.current = window.setTimeout(() => probeProxyNow(value), 700);
|
|
5978
|
+
};
|
|
5856
5979
|
const onMirrorChange = (value) => update({ npmRegistry: value });
|
|
5857
5980
|
/** 每个分组的页面副标题(导航标题之上再补一句说明,保持桌面设置质感) */
|
|
5858
5981
|
const pageDesc = {
|
|
@@ -5889,14 +6012,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5889
6012
|
title: t("settingsProxy"),
|
|
5890
6013
|
desc: t("settingsProxyDesc"),
|
|
5891
6014
|
stack: true,
|
|
5892
|
-
children: (0, react.createElement)("input", {
|
|
6015
|
+
children: (0, react.createElement)("div", { className: SettingsView_module_css_default.proxyControl }, (0, react.createElement)("input", {
|
|
5893
6016
|
className: SettingsView_module_css_default.textInput,
|
|
5894
6017
|
type: "text",
|
|
5895
6018
|
value: settings.proxy,
|
|
5896
6019
|
placeholder: "http://127.0.0.1:7890",
|
|
5897
6020
|
spellCheck: false,
|
|
5898
6021
|
onChange: onProxyChange
|
|
5899
|
-
})
|
|
6022
|
+
}), proxyProbe === "checking" ? (0, react.createElement)("div", { className: SettingsView_module_css_default.proxyHint }, t("proxyCheckChecking")) : proxyProbe === "ok" ? (0, react.createElement)("div", { className: `${SettingsView_module_css_default.proxyHint} ${SettingsView_module_css_default.proxyHintOk}` }, t("proxyCheckOk")) : proxyProbe === "fail" ? (0, react.createElement)("div", { className: `${SettingsView_module_css_default.proxyHint} ${SettingsView_module_css_default.proxyHintFail}` }, t("proxyCheckFail")) : null)
|
|
5900
6023
|
}));
|
|
5901
6024
|
const securityCard = (0, react.createElement)("div", { className: SettingsView_module_css_default.card }, (0, react.createElement)(SettingRow, {
|
|
5902
6025
|
title: t("settingsEnableNpm"),
|
|
@@ -5926,6 +6049,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5926
6049
|
const diagnosticsCard = (0, react.createElement)("div", { className: SettingsView_module_css_default.card }, (0, react.createElement)(DiagnosticsView, {
|
|
5927
6050
|
t,
|
|
5928
6051
|
env,
|
|
6052
|
+
proxy: settings.proxy,
|
|
5929
6053
|
onCopy
|
|
5930
6054
|
}));
|
|
5931
6055
|
const logsCard = (0, react.createElement)("div", { className: SettingsView_module_css_default.card }, (0, react.createElement)(LogsView, {
|
|
@@ -5998,6 +6122,27 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5998
6122
|
const { settings: hubSettings, ready: settingsReady, update: updateSettings, reset: resetSettings } = useSettings();
|
|
5999
6123
|
/** 一级导航:插件中心 / 已安装 / 自定义安装 / 设置 */
|
|
6000
6124
|
const [view, setView] = (0, react.useState)("market");
|
|
6125
|
+
/** 外部跳转设置分组的一次性信号(错误弹窗「去系统诊断」→ 设置 → 系统诊断):
|
|
6126
|
+
* 传给 SettingsView 消费后即清空,避免下次进设置被强制带跳 */
|
|
6127
|
+
const [settingsSection, setSettingsSection] = (0, react.useState)(null);
|
|
6128
|
+
/** 网络不通提示的「去系统诊断」直达:关掉所有弹窗(错误/通知/安装确认进度等,
|
|
6129
|
+
* 否则 InstallModal 失败后仍停驻原地盖住设置页)→ 切到设置页 → 切到系统诊断分组(自动跑连通性检测) */
|
|
6130
|
+
const openDiagnostics = () => {
|
|
6131
|
+
setErrorMsg(null);
|
|
6132
|
+
setShowNotifications(false);
|
|
6133
|
+
setConfirmPlugin(null);
|
|
6134
|
+
setConfirmCustomTarget(null);
|
|
6135
|
+
setConfirmGlobalNpm(null);
|
|
6136
|
+
setUninstallPlugin(null);
|
|
6137
|
+
setUninstallItem(null);
|
|
6138
|
+
setDetailItem(null);
|
|
6139
|
+
setShowHubUpdate(false);
|
|
6140
|
+
setShowAbout(false);
|
|
6141
|
+
setIgnoreTarget(null);
|
|
6142
|
+
setShowRestartConfirm(false);
|
|
6143
|
+
setView("settings");
|
|
6144
|
+
setSettingsSection("diagnostics");
|
|
6145
|
+
};
|
|
6001
6146
|
/** 全局反馈 Toast:{id} 用于重复触发时重新走入场动画,kind 决定文案与配色 */
|
|
6002
6147
|
const [toast, setToast] = (0, react.useState)(null);
|
|
6003
6148
|
/** 复制反馈:记录刚复制安装命令的仓库,按钮短暂切换为「已复制」样式 */
|
|
@@ -6058,6 +6203,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6058
6203
|
}, [view]);
|
|
6059
6204
|
const queue = useTaskQueue({
|
|
6060
6205
|
t,
|
|
6206
|
+
langKey,
|
|
6061
6207
|
refreshInstalled: catalog.refreshInstalled,
|
|
6062
6208
|
onInstallDone: (viaModal, repo, needsRestart, update) => {
|
|
6063
6209
|
setInstallNeedsRestart(needsRestart);
|
|
@@ -6328,7 +6474,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6328
6474
|
setUninstallDone(false);
|
|
6329
6475
|
queue.clearModalTask();
|
|
6330
6476
|
setUninstallPlugin(p);
|
|
6331
|
-
}
|
|
6477
|
+
},
|
|
6478
|
+
hasProxy: (hubSettings.proxy ?? "").trim() !== "",
|
|
6479
|
+
onOpenDiagnostics: openDiagnostics
|
|
6332
6480
|
}) : view === "installed" ? (0, react.createElement)(InstalledView, {
|
|
6333
6481
|
items: catalog.installedItems,
|
|
6334
6482
|
langKey,
|
|
@@ -6390,9 +6538,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6390
6538
|
id: Date.now(),
|
|
6391
6539
|
kind: "copied"
|
|
6392
6540
|
});
|
|
6393
|
-
}
|
|
6541
|
+
},
|
|
6542
|
+
openSection: settingsSection,
|
|
6543
|
+
onConsumedOpenSection: () => setSettingsSection(null)
|
|
6394
6544
|
}), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
|
|
6395
|
-
info: catalog.hubUpdateInfo ?? { version: "1.3.
|
|
6545
|
+
info: catalog.hubUpdateInfo ?? { version: "1.3.8" },
|
|
6396
6546
|
lang,
|
|
6397
6547
|
t,
|
|
6398
6548
|
hasUpdate: catalog.hubHasUpdate,
|
|
@@ -6443,6 +6593,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6443
6593
|
cancelTask: queue.cancelTask,
|
|
6444
6594
|
restarting,
|
|
6445
6595
|
onRestart: () => setShowRestartConfirm(true),
|
|
6596
|
+
onRunDiagnostics: openDiagnostics,
|
|
6446
6597
|
resolveRepo: (repo) => issueRepoOf(repo, catalog.installedItems, catalog.plugins)
|
|
6447
6598
|
}), ignoreTarget && (0, react.createElement)("div", {
|
|
6448
6599
|
className: Modal_module_css_default.overlay,
|
|
@@ -6607,6 +6758,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6607
6758
|
kind: "errCopied"
|
|
6608
6759
|
});
|
|
6609
6760
|
},
|
|
6761
|
+
onRunDiagnostics: openDiagnostics,
|
|
6610
6762
|
onClose: () => setErrorMsg(null)
|
|
6611
6763
|
}), showRestartConfirm && (0, react.createElement)(RestartConfirmModal, {
|
|
6612
6764
|
t,
|