dshmarket 1.11.2 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,9 +25,15 @@ dsh plugin --profile web add dshmarket
25
25
 
26
26
  Restart `dsh web`, then open **Settings → Plugin Market**.
27
27
 
28
+ **Requires dsh web 0.1.0-rc.6 or newer.** On an older host the market
29
+ disables itself and says so in the browser console rather than rendering
30
+ against primitives that are not there — if the Plugin Market entry never
31
+ appears, that is usually why. Worth checking when a desktop build bundles
32
+ its own dsh: it may be older than the one `npm` would give you (#139).
33
+
28
34
  ## What you get
29
35
 
30
- - **Browse & search** the full community catalog (800+ plugins, growing daily) — category filters, star counts, top/new sorting, bilingual descriptions that follow your UI language
36
+ - **Browse & search** the full community catalog (1250+ plugins, growing daily) — category filters, star counts, top/new sorting, bilingual descriptions that follow your UI language
31
37
  - **Screenshots** — AppStore-style screenshots in the install dialog: author-curated via the registry, with automatic README extraction as fallback; images load from GitHub hosting only, and only after you open the dialog
32
38
  - **Themes** — a dedicated tab for community themes and skins: install → active immediately, switch with one click (themes are mutually exclusive, your choice survives restarts), uninstall to revert
33
39
  - **One-click install** — confirm the source, watch live progress; most plugins go live after a page refresh, no restart
@@ -37,9 +43,11 @@ Restart `dsh web`, then open **Settings → Plugin Market**.
37
43
  - **Hot disable / enable** — toggles write `- id: …` + `disabled: true|false` into the profile's `cordis.patch.yml` (the official patch layer, mechanism ported from [dsh-plugin-hub](https://github.com/Noob-stupid/dsh-plugin-hub)): DSH's HMR re-composes within ~1s, no restart, and the loader re-applies the choice on every boot; hand-edited patch rows show as badges, host-infrastructure plugins are protected from toggling, and a malformed patch file is never made worse
38
44
  - **Restart when needed** — changes that cannot hot-load show a one-click restart beside the pending-change banner; the action is restricted to same-origin loopback requests
39
45
  - **Zero jargon** — if a component is missing (pnpm), the market detects it and offers a one-click automatic setup
40
- - **Log export** — one click produces a sanitized plain-text log for bug reports (home paths and credential shapes are masked; nothing is ever sent anywhere)
46
+ - **Log export** — one click produces a sanitized plain-text log for bug reports (home paths and credential shapes are masked; nothing is ever sent anywhere). The market's version sits next to the page heading, so a screenshot of a problem already carries it
47
+ - **Settings card** — on dsh 0.1.0-rc.7 and newer the market puts its own option (whether one-click restart is allowed) on **Settings → Plugins → Plugin configuration**, so a host owned by systemd, launchd or pm2 is a switch rather than a hand-edited YAML line
41
48
  - **Diagnostics** — the plugin load order and conflict surface, one page: bundle stack with official/community badges, duplicate loader entries, dependency version mismatches, multi-version core packages, overrides and invalid config entries. Plain-language terms, problem blocks highlighted, everything collapsible
42
49
 
50
+ - **Load order** — drag community bundles into the order you want, or take the suggested one derived from the plugins' own before/after rules. Nothing is written until a trial composition passes, and the panel tells you what the new order would change (overrides, invalid or duplicate entries) before you apply it
43
51
  - **AI fix** — one click copies a diagnostics-driven fix prompt (errors/warnings/order conflicts + conservative scope instructions) to the clipboard; you paste it into a new conversation and decide whether to send
44
52
 
45
53
  ## Speed
package/README.zh.md CHANGED
@@ -25,18 +25,27 @@ dsh plugin --profile web add dshmarket
25
25
 
26
26
  重启 `dsh web`,打开 **设置 → 插件市场**。
27
27
 
28
+ **需要 dsh web 0.1.0-rc.6 或更新版本。** 宿主太旧时市场会自我禁用,并在浏览器
29
+ 控制台说明原因,而不是拿缺失的原语去渲染——如果设置里根本没出现「插件市场」这
30
+ 一项,通常就是这个原因。桌面端要留意:它可能内置了比 `npm` 装到的更旧的 dsh(#139)。
31
+
28
32
  ## 你会得到
29
33
 
30
- - **逛与搜**——完整社区目录(800+ 插件,每天在涨),分类筛选、star 数、最热/最新排序,中英描述跟随界面语言
34
+ - **逛与搜**——完整社区目录(1250+ 插件,每天在涨),分类筛选、star 数、最热/最新排序,中英描述跟随界面语言
31
35
  - **截图展示**——安装弹窗内 App Store 式截图:作者可在 registry 里策展,没有则自动从 README 抽取;图片仅从 GitHub 图床加载,且只在你打开弹窗后才发请求
32
36
  - **主题**——独立主题页:装完立即生效,点一下切换(主题互斥、选择跨重启保留),卸载即恢复
33
37
  - **一键安装**——确认来源,实时进度;多数插件刷新页面即可用,无需重启
34
38
  - **备份与恢复**——把 profile 的插件清单与配置导出为可读 JSON,换机导入,存到 WebDAV 并每日自动备份,或通过私有 GitHub Gist 跨机器同步;恢复采用**合并**方式(备份之后新装的插件会保留),写入前校验、失败自动回滚
35
39
  - **更新**——逐插件检测(npm 版本或锁定 commit 对比 HEAD),一键更新或全部更新;市场自己也走同一通道升级
36
40
  - **卸载**——两步确认防误触;本次会话装的插件即点即卸
41
+ - **热禁用 / 启用**——开关会往 profile 的 `cordis.patch.yml`(官方补丁层,机制移植自 [dsh-plugin-hub](https://github.com/Noob-stupid/dsh-plugin-hub))写入 `- id: …` + `disabled: true|false`:DSH 的 HMR 约 1 秒内重新组合,无需重启,loader 每次启动都会重新应用这个选择;手工改过的补丁行会显示成徽标,宿主基础设施插件禁止开关,补丁文件格式不对时绝不会被写得更糟
37
42
  - **按需重启**——无法热加载的变更会在待重启提示旁显示一键重启;操作仅接受本机同源请求
38
43
  - **零术语**——缺组件(pnpm)时市场自己发现、一键自动装好,全程不见命令行
39
- - **导出日志**——一键生成脱敏纯文本日志方便反馈(home 路径与密钥形状已打码;任何数据都不会被上传)
44
+ - **导出日志**——一键生成脱敏纯文本日志方便反馈(home 路径与密钥形状已打码;任何数据都不会被上传)。市场版本号就在标题旁边,截图反馈时自带版本信息
45
+ - **设置卡片**——dsh 0.1.0-rc.7 起,市场把自己的选项(是否允许一键重启)放到 **设置 → 插件 → 插件配置** 里。宿主由 systemd / launchd / pm2 托管时,这就是一个开关,不用再手改 YAML
46
+ - **诊断**——插件加载顺序与冲突一页看全:bundle 栈(官方/社区徽标)、重复的 loader 条目、依赖版本不一致、核心包多版本共存、覆盖项与非法配置条目。术语说人话,问题块高亮,全部可折叠
47
+ - **加载顺序**——拖拽调整社区 bundle 的顺序,或直接采用按插件自身 before/after 规则推导出的建议顺序。写入前先跑一次静态组合校验,通过才落盘;应用之前面板会告诉你这个顺序会改变什么(多少处覆盖、多少无效或重复条目)
48
+ - **AI 修复**——一键把诊断结果生成的修复 prompt(错误/警告/顺序冲突 + 保守的改动范围约束)复制到剪贴板,你粘进新对话,自己决定发不发
40
49
 
41
50
  ## 速度
42
51
 
package/client/client.js CHANGED
@@ -34,6 +34,10 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
34
34
  /** zh/en dictionaries for the Market settings section and install toast. */
35
35
  const zh = {
36
36
  nav: "插件市场",
37
+ setCardDesc: "控制市场能否重启宿主进程。",
38
+ setAllowRestart: "允许一键重启",
39
+ setAllowRestartHint: "关掉之后市场不再重启宿主,只提示有待生效的变更。如果 DSH 由 systemd / launchd / pm2 托管,应该关掉——重启该由它们负责。",
40
+ setRevert: "恢复默认",
37
41
  versionHint: "插件市场版本 — 反馈问题时请把它一起截图",
38
42
  subtitle: "发现社区为 DeepSeek Harness 打造的能力",
39
43
  searchPh: "搜索插件,比如:通知、终端、记忆…",
@@ -313,6 +317,10 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
313
317
  };
314
318
  const en = {
315
319
  nav: "Plugin Market",
320
+ setCardDesc: "Whether the market may relaunch the host process.",
321
+ setAllowRestart: "Allow one-click restart",
322
+ setAllowRestartHint: "With this off the market never relaunches the host; it only reports that changes are pending. Turn it off when systemd, launchd or pm2 owns the process — restarting is theirs to do.",
323
+ setRevert: "Revert to default",
316
324
  versionHint: "Plugin market version — include it when reporting an issue",
317
325
  subtitle: "Discover community plugins for DeepSeek Harness",
318
326
  searchPh: "Search plugins: notify, terminal, memory…",
@@ -909,7 +917,7 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
909
917
  }
910
918
  //#endregion
911
919
  //#region \0dsh-css:src/client/Market.module.css.mjs
912
- const css = ".eGUBIq_root{min-width:0;height:100%;color:var(--dsw-alias-label-primary,#1f2328);flex-direction:column;display:flex;position:relative}.eGUBIq_head{flex-direction:column;gap:12px;padding:4px 4px 12px;display:flex}.eGUBIq_title{margin:0;font-size:16px;font-weight:500;line-height:24px}.eGUBIq_sub{color:var(--dsw-alias-label-tertiary,#8b93a1);align-items:center;gap:8px;margin:0;font-size:14px;line-height:22px;display:flex}.eGUBIq_tabs{border-bottom:1px solid var(--dsw-alias-border-l2,#e5e7eb);align-items:flex-end;gap:2px;display:flex}.eGUBIq_tab{font:inherit;color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;padding:7px 12px;font-size:13px}.eGUBIq_tab.eGUBIq_on{color:var(--dsw-alias-brand-primary,#4f6ef7);border-bottom-color:var(--dsw-alias-brand-primary,#4f6ef7);font-weight:600}.eGUBIq_banner{background:var(--dsw-alias-bg-layer-2,#fdf3e3);border:1px solid var(--dsw-alias-border-l2,#f3e3c3);border-radius:8px;align-items:center;gap:8px;margin:0;padding:8px 12px;font-size:12px;display:flex}.eGUBIq_bannerIcon{color:var(--dsw-alias-label-secondary,#6b7280);flex-shrink:0}.eGUBIq_bannerHint{color:var(--dsw-alias-label-tertiary,#8b93a1);cursor:help;display:inline-flex}.eGUBIq_body{flex:1;padding:12px 4px 24px;overflow-x:hidden;overflow-y:auto}.eGUBIq_cats{z-index:5;background:var(--dsw-alias-bg-layer-2,#f7f8fa);margin:-12px -4px 2px;padding:12px 4px 4px;position:sticky;top:-13px}.eGUBIq_catsRow{align-items:flex-start;gap:8px;display:flex;position:relative}.eGUBIq_star{color:var(--dsw-alias-label-secondary,#9ca3af);font-size:11px}.eGUBIq_top{z-index:20;display:inline-flex;position:absolute;bottom:18px;right:18px}.eGUBIq_topBtn{border-radius:99px;width:38px;height:38px;padding:0}.eGUBIq_tag{border:1px solid var(--dsw-alias-border-l3,#d9dde3);color:var(--dsw-alias-label-secondary,#6b7280);border-radius:4px;flex-shrink:0;padding:1px 6px;font-size:11px;line-height:16px}.eGUBIq_okState{color:var(--dsw-alias-state-success-primary,#16a34a);white-space:nowrap;font-size:12px;font-weight:600}.eGUBIq_catsWrap{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex}.eGUBIq_catsCollapsed{max-height:62px;overflow:hidden}.eGUBIq_catsToggle.eGUBIq_catsToggle{height:26px;min-height:26px;color:var(--dsw-alias-label-secondary,#6b7280);padding:0 6px}.eGUBIq_shots{-webkit-overflow-scrolling:touch;scrollbar-width:thin;gap:8px;margin:0 0 8px;padding:2px 0 6px;display:flex;overflow-x:auto}.eGUBIq_shot{object-fit:cover;border:1px solid var(--dsw-alias-border-default,#e5e7eb);background:var(--dsw-alias-bg-layer-2,#f3f4f6);border-radius:8px;flex:none;max-width:260px;height:150px}.eGUBIq_cmd{background:var(--dsw-alias-bg-layer-2,#f3f4f6);word-break:break-all;border-radius:6px;margin:8px 0 0;padding:8px 10px;font-family:ui-monospace,Menlo,monospace;font-size:11px;line-height:18px}.eGUBIq_warnLine{color:var(--dsw-alias-state-warn-primary,#b45309);align-items:center;gap:4px;margin:0;font-size:12px;font-weight:600;line-height:18px;display:flex}.eGUBIq_modalNote{color:var(--dsw-alias-label-tertiary,#8b93a1);align-items:center;gap:4px;margin:12px 0 0;font-size:12px;line-height:18px;display:flex}.eGUBIq_grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;display:grid}.eGUBIq_swatches{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:8px;gap:0;height:34px;display:flex;overflow:hidden}.eGUBIq_themesGrid{margin-bottom:12px}.eGUBIq_swatches i{flex:1}.eGUBIq_card{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;flex-direction:column;gap:12px;padding:12px 14px;display:flex}.eGUBIq_row1{align-items:center;gap:10px;min-width:0;display:flex}.eGUBIq_srcBtn{flex-shrink:0;align-self:flex-start}.eGUBIq_av{color:#fff;object-fit:cover;background:var(--dsw-alias-bg-layer-2,#f3f4f6);border-radius:8px;flex-shrink:0;place-items:center;width:32px;height:32px;font-size:14px;font-weight:700;display:grid}.eGUBIq_nm{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:22px;overflow:hidden}.eGUBIq_owner{color:var(--dsw-alias-label-secondary,#9ca3af);font-size:11px}.eGUBIq_desc{color:var(--dsw-alias-label-tertiary,#8b93a1);min-height:36px;margin:0;font-size:12px;line-height:18px}.eGUBIq_foot{align-items:center;gap:8px;margin-top:auto;display:flex}.eGUBIq_grow{flex:1}.eGUBIq_titleRow{align-items:center;gap:10px;display:flex}.eGUBIq_version{color:var(--dsw-alias-label-tertiary,#8b93a1);font-variant-numeric:tabular-nums;flex-shrink:0;font-size:12px;line-height:20px}.eGUBIq_descTight{min-height:0}.eGUBIq_src{color:var(--dsw-alias-label-secondary,#9ca3af);font-size:11px;text-decoration:none}.eGUBIq_src:hover{color:var(--dsw-alias-brand-primary,#4f6ef7)}.eGUBIq_dot{vertical-align:2px;margin-left:5px}.eGUBIq_act{flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px;font-size:11px;display:flex}.eGUBIq_actLive{color:var(--dsw-alias-state-success-primary,#16a34a);align-items:center;gap:4px;font-weight:600;display:inline-flex}.eGUBIq_actWarn{color:var(--dsw-alias-state-warn-primary,#b45309);align-items:center;gap:4px;font-weight:600;display:inline-flex}.eGUBIq_actBroken{color:var(--dsw-alias-state-error-primary,#dc2626);align-items:center;gap:4px;font-weight:600;display:inline-flex}.eGUBIq_actWhy{color:var(--dsw-alias-label-secondary,#6b7280);margin-top:2px}.eGUBIq_loading{color:var(--dsw-alias-label-secondary,#9ca3af);flex-direction:column;align-items:center;gap:12px;padding:48px;font-size:13px;display:flex}.eGUBIq_spin{color:var(--dsw-alias-brand-primary,#4f6ef7);flex-shrink:0;animation:.8s linear infinite eGUBIq_sp;display:inline-flex}@keyframes eGUBIq_sp{to{transform:rotate(360deg)}}.eGUBIq_progress{background:var(--dsw-alias-bg-layer-2,#f3f4f6);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);color:var(--dsw-alias-label-secondary,#6b7280);border-radius:8px;flex-wrap:wrap;align-items:center;gap:9px;margin:0;padding:8px 12px;font-size:12px;display:flex}.eGUBIq_bar{background:var(--dsw-alias-border-l1,#e5e7eb);border-radius:99px;width:100%;height:4px;overflow:hidden}.eGUBIq_barFill{background:var(--dsw-alias-brand-primary,#4f6ef7);border-radius:99px;height:100%;transition:width .6s}.eGUBIq_barWave{width:30%;animation:1.2s ease-in-out infinite eGUBIq_dshmSlide}@keyframes eGUBIq_dshmSlide{0%{margin-left:-30%}to{margin-left:100%}}.eGUBIq_irow .eGUBIq_progress{margin-top:8px}.eGUBIq_progress code{text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,Menlo,monospace;font-size:11px;overflow:hidden}.eGUBIq_empty{color:var(--dsw-alias-label-secondary,#9ca3af);text-align:center;padding:32px;font-size:13px}.eGUBIq_err{color:var(--dsw-alias-state-error-primary,#dc2626);white-space:pre-wrap;word-break:break-all;margin:8px 0;font-size:12px}.eGUBIq_irow{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;align-items:center;gap:10px;margin-bottom:8px;padding:12px 14px;display:flex}.eGUBIq_irowMissing{filter:grayscale();opacity:.5}.eGUBIq_irow>.eGUBIq_src,.eGUBIq_irow>.eGUBIq_owner,.eGUBIq_irow button{white-space:nowrap;flex-shrink:0}.eGUBIq_tabSearchRow{padding:0 4px 10px;display:flex}.eGUBIq_tabSearch{width:260px}.eGUBIq_spec{color:var(--dsw-alias-label-secondary,#9ca3af);overflow-wrap:anywhere;min-width:0;font-family:ui-monospace,Menlo,monospace;font-size:11px}.eGUBIq_specTag{white-space:nowrap;border-radius:4px;flex-shrink:0;align-items:center;height:16px;padding:0 5px;font-size:10px;font-weight:600;display:inline-flex}.eGUBIq_specTagGit{color:#0b7285;background:#12a3c41f}.eGUBIq_specTagFile{color:#b07d1b;background:#f0b42924}.eGUBIq_backupCheckList .eGUBIq_grow{white-space:nowrap;text-overflow:ellipsis;flex:70%;min-width:0;overflow:hidden}.eGUBIq_backupCheckList .eGUBIq_spec{text-align:right;white-space:nowrap;text-overflow:ellipsis;flex:0 30%;max-width:30%;overflow:hidden}.eGUBIq_staleAction{margin-top:8px}.eGUBIq_pct{color:var(--dsw-alias-label-secondary,#6b7280);flex-shrink:0;font-size:11px;font-weight:600}.eGUBIq_pager{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin:16px 0 4px;display:flex}.eGUBIq_pagerPages{flex-wrap:wrap;flex:1;justify-content:center;align-items:center;gap:6px;min-width:0;display:flex}.eGUBIq_pageEllipsis{color:var(--dsw-alias-label-secondary,#9ca3af);padding:0 2px;font-size:12px}.eGUBIq_pageInfo{color:var(--dsw-alias-label-secondary,#6b7280);white-space:nowrap;font-size:12px}.eGUBIq_depBadge{border:1px solid var(--dsw-alias-state-warn-primary,#b45309);color:var(--dsw-alias-state-warn-primary,#b45309);white-space:nowrap;border-radius:4px;flex-shrink:0;margin-left:6px;padding:1px 6px;font-size:11px;font-weight:600;line-height:16px}.eGUBIq_deprecate{color:var(--dsw-alias-state-warn-primary,#b45309);background:var(--dsw-alias-bg-layer-2,#fdf3e3);border:1px solid var(--dsw-alias-border-l2,#f3e3c3);border-radius:8px;margin:0;padding:8px 10px;font-size:12px;line-height:18px}.eGUBIq_deprecate a{color:var(--dsw-alias-state-warn-primary,#b45309);text-decoration:underline}.eGUBIq_deprecate .eGUBIq_src{margin-left:8px}.eGUBIq_depLine{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.eGUBIq_switch{border:1px solid var(--dsw-alias-border-l2,#d9dde3);background:var(--dsw-alias-bg-layer-2,#e5e7eb);cursor:pointer;border-radius:99px;flex-shrink:0;width:38px;height:22px;padding:0;transition:background .15s,border-color .15s;position:relative}.eGUBIq_switchOn{background:var(--dsw-alias-state-success-primary,#16a34a);border-color:var(--dsw-alias-state-success-primary,#16a34a)}.eGUBIq_switchMixed{background:var(--dsw-alias-state-warn-primary,#b45309);border-color:var(--dsw-alias-state-warn-primary,#b45309)}.eGUBIq_switchKnob{background:#fff;border-radius:99px;width:16px;height:16px;transition:left .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #00000040}.eGUBIq_switchOn .eGUBIq_switchKnob,.eGUBIq_switchMixed .eGUBIq_switchKnob{left:18px}.eGUBIq_switch:disabled{opacity:.5;cursor:default}.eGUBIq_viewBar{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:8px;align-items:center;gap:2px;width:fit-content;margin-bottom:12px;padding:2px;display:flex}.eGUBIq_viewBtn{font:inherit;color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:4px 10px;font-size:12px;line-height:18px}.eGUBIq_viewBtn:hover{color:var(--dsw-alias-brand-primary,#4f6ef7)}.eGUBIq_viewOn{background:var(--dsw-alias-bg-layer-2,#eef0f4);color:var(--dsw-alias-label-primary,#1f2328);font-weight:600}.eGUBIq_groupRow{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;margin-bottom:10px;padding:12px 14px}.eGUBIq_groupHead{align-items:center;gap:10px;min-width:0;display:flex}.eGUBIq_groupName{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;line-height:20px;overflow:hidden}.eGUBIq_groupActions{flex-shrink:0;align-items:center;gap:6px;display:flex}.eGUBIq_groupMembers{flex-direction:column;gap:6px;margin-top:10px;display:flex}.eGUBIq_groupMember{background:var(--dsw-alias-bg-layer-2,#f7f8fa);border-radius:8px;align-items:center;gap:8px;padding:6px 8px;font-size:12px;line-height:18px;display:flex}.eGUBIq_groupMember .eGUBIq_nm{flex:1;min-width:0;font-size:12px}.eGUBIq_groupAddPanel{border-top:1px dashed var(--dsw-alias-border-l2,#e5e7eb);flex-direction:column;gap:6px;margin-top:10px;padding-top:10px;display:flex}.eGUBIq_groupCreate{align-items:center;gap:8px;margin-bottom:10px;display:flex}.eGUBIq_inlineInput{flex:1;min-width:120px}.eGUBIq_assignRow{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.eGUBIq_assignSelect{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);background:var(--dsw-alias-bg-layer-1,#fff);color:var(--dsw-alias-label-primary,#1f2328);font:inherit;border-radius:6px;padding:3px 6px;font-size:12px;line-height:18px}.eGUBIq_groupHint{color:var(--dsw-alias-label-tertiary,#8b93a1);font-size:11px}.eGUBIq_sectAction{color:var(--dsw-alias-label-secondary,#6b7280);align-items:center;gap:8px;margin:14px 2px 8px;font-size:12px;font-weight:600;display:flex}.eGUBIq_backupGrid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;display:grid}.eGUBIq_backupCard{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;flex-direction:column;gap:10px;padding:16px;display:flex}.eGUBIq_backupCard h3{margin:0;font-size:14px}.eGUBIq_backupCard p{color:var(--dsw-alias-label-secondary,#6b7280);margin:0;font-size:12px;line-height:18px}.eGUBIq_backupActions{flex-wrap:wrap;gap:8px;display:flex;position:relative}.eGUBIq_hiddenFile{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.eGUBIq_backupInput{box-sizing:border-box;width:100%}.eGUBIq_backupCheck{cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.eGUBIq_backupWarn{margin:0;font-size:12px;line-height:18px;color:var(--dsw-alias-state-warn-primary,#b45309)!important}.eGUBIq_backupMessage{color:var(--dsw-alias-label-secondary,#6b7280);grid-column:1/-1;font-size:12px}.eGUBIq_backupCheckList{flex-direction:column;gap:6px;max-height:260px;margin:10px 0 4px;padding-right:4px;display:flex;overflow-y:auto}.eGUBIq_backupCheckList .eGUBIq_backupCheck{justify-content:space-between;gap:8px}.eGUBIq_diagPage{flex-direction:column;gap:12px;height:100%;min-height:0;display:flex;overflow-y:auto}.eGUBIq_diagSummary{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;flex-wrap:wrap;align-items:center;gap:12px;padding:10px 14px;font-size:12px;display:flex}.eGUBIq_diagSummaryItem{color:var(--dsw-alias-label-secondary,#6b7280);white-space:nowrap;align-items:center;gap:6px;display:inline-flex}.eGUBIq_diagSummaryMeta{color:var(--dsw-alias-label-tertiary,#9ca3af);text-overflow:ellipsis;white-space:nowrap;max-width:320px;font-family:ui-monospace,Menlo,monospace;font-size:11px;overflow:hidden}.eGUBIq_diagSection{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;flex-direction:column;gap:8px;padding:12px 14px;display:flex}.eGUBIq_diagSection h3{color:var(--dsw-alias-label-primary,#1f2328);margin:0;font-size:13px;font-weight:600}.eGUBIq_diagCount{color:var(--dsw-alias-label-tertiary,#9ca3af);font-size:11px;font-weight:400}.eGUBIq_diagEmpty{color:var(--dsw-alias-label-secondary,#9ca3af);padding:8px 0;font-size:12px}.eGUBIq_diagBundle{border-top:1px solid var(--dsw-alias-border-l2,#f0f1f3);flex-direction:column;gap:6px;padding-top:8px;display:flex}.eGUBIq_diagBundle:first-of-type{border-top:none;padding-top:0}.eGUBIq_diagRow{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;font-size:12px;line-height:18px;display:flex}.eGUBIq_diagMeta{align-items:baseline;gap:8px;min-width:0;font-size:12px;display:flex}.eGUBIq_diagKey{color:var(--dsw-alias-label-tertiary,#9ca3af);flex-shrink:0;min-width:64px;font-size:11px}.eGUBIq_diagVal{color:var(--dsw-alias-label-primary,#1f2328);overflow-wrap:anywhere;min-width:0;font-family:ui-monospace,Menlo,monospace;font-size:12px;font-weight:500}.eGUBIq_diagIndex{background:var(--dsw-alias-bg-layer-2,#f3f4f6);min-width:18px;height:18px;color:var(--dsw-alias-label-secondary,#6b7280);border-radius:9px;flex-shrink:0;justify-content:center;align-items:center;font-size:11px;font-weight:600;display:inline-flex}.eGUBIq_diagArrow{color:var(--dsw-alias-label-tertiary,#9ca3af);flex-shrink:0;font-size:12px}.eGUBIq_diagBadgeOfficial{background:var(--dsw-alias-brand-primary,#4f6ef7);color:#fff;border-radius:9px;flex-shrink:0;align-items:center;height:18px;padding:0 8px;font-size:11px;font-weight:600;display:inline-flex}.eGUBIq_diagBadgeCommunity{background:var(--dsw-alias-bg-layer-2,#f3f4f6);height:18px;color:var(--dsw-alias-label-secondary,#6b7280);border-radius:9px;flex-shrink:0;align-items:center;padding:0 8px;font-size:11px;display:inline-flex}.eGUBIq_diagBadgeShadow{background:var(--dsw-alias-state-error-primary,#dc2626);color:#fff;border-radius:9px;flex-shrink:0;align-items:center;height:18px;padding:0 8px;font-size:11px;font-weight:600;display:inline-flex}.eGUBIq_diagList{flex-direction:column;gap:6px;display:flex}.eGUBIq_sectionOverview{color:var(--dsw-alias-label-tertiary,#8b93a1);text-overflow:ellipsis;white-space:nowrap;max-width:100%;padding:2px 0 6px;font-size:12px;line-height:18px;overflow:hidden}.eGUBIq_diagAlert{color:var(--dsw-alias-state-warn-primary,#b45309)}.eGUBIq_ovRow{background:var(--dsw-alias-bg-layer-2,#f7f8fa);border-radius:8px;flex-wrap:wrap;align-items:center;gap:8px;min-width:0;padding:6px 10px;font-size:12px;line-height:18px;display:flex}.eGUBIq_ovArrow{color:var(--dsw-alias-label-tertiary,#9ca3af);flex-shrink:0;font-size:12px}.eGUBIq_ovByTag{background:var(--dsw-alias-brand-primary,#4f6ef7);color:#fff;text-overflow:ellipsis;white-space:nowrap;border-radius:9px;flex-shrink:0;align-items:center;max-width:260px;height:18px;padding:0 8px;font-size:11px;font-weight:600;display:inline-flex;overflow:hidden}.eGUBIq_ovFrom{color:var(--dsw-alias-label-secondary,#6b7280);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;overflow:hidden}.eGUBIq_orphRow{background:var(--dsw-alias-bg-layer-2,#f7f8fa);border-radius:8px;flex-wrap:wrap;align-items:center;gap:8px;min-width:0;padding:6px 10px;font-size:12px;line-height:18px;display:flex}.eGUBIq_orphBadge{background:var(--dsw-alias-state-warn-primary,#b45309);color:#fff;white-space:nowrap;border-radius:9px;flex-shrink:0;align-items:center;height:18px;padding:0 8px;font-size:11px;font-weight:600;display:inline-flex}.eGUBIq_dragHandle{width:20px;height:20px;color:var(--dsw-alias-label-tertiary,#9ca3af);cursor:grab;-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;line-height:20px;display:inline-flex}.eGUBIq_dragOver{outline:2px dashed var(--dsw-alias-brand-primary,#4f6ef7);outline-offset:2px;background:var(--dsw-alias-bg-layer-2,#f0f2f8);border-radius:8px}.eGUBIq_dragging{opacity:.45;background:var(--dsw-alias-bg-layer-2,#f3f4f6)}.eGUBIq_collapseHead{font:inherit;color:var(--dsw-alias-label-primary,#1f2328);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:8px;width:100%;padding:0;font-size:13px;font-weight:600;display:flex}.eGUBIq_collapseIcon{color:var(--dsw-alias-label-secondary,#6b7280);flex-shrink:0;display:inline-flex}.eGUBIq_collapseTitle{flex:1;min-width:0}.eGUBIq_collapseBody{border-top:1px solid var(--dsw-alias-border-l2,#f0f1f3);overflow-wrap:anywhere;flex-direction:column;gap:10px;min-width:0;margin-top:8px;padding-top:10px;display:flex}.eGUBIq_panelNote{color:var(--dsw-alias-label-secondary,#6b7280);margin:0;font-size:12px;line-height:18px}.eGUBIq_fixFallback{flex-direction:column;gap:6px;margin:8px 0;display:flex}.eGUBIq_fixFallbackText{box-sizing:border-box;width:100%;color:var(--dsw-alias-label-primary,#1f2328);background:var(--dsw-alias-bg-layer-2,#f3f4f6);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);resize:vertical;white-space:pre-wrap;word-break:break-all;border-radius:6px;padding:8px 10px;font-family:ui-monospace,Menlo,monospace;font-size:11px;line-height:16px}";
920
+ const css = ".eGUBIq_root{min-width:0;height:100%;color:var(--dsw-alias-label-primary,#1f2328);flex-direction:column;display:flex;position:relative}.eGUBIq_head{flex-direction:column;gap:12px;padding:4px 4px 12px;display:flex}.eGUBIq_title{margin:0;font-size:16px;font-weight:500;line-height:24px}.eGUBIq_sub{color:var(--dsw-alias-label-tertiary,#8b93a1);align-items:center;gap:8px;margin:0;font-size:14px;line-height:22px;display:flex}.eGUBIq_tabs{border-bottom:1px solid var(--dsw-alias-border-l2,#e5e7eb);align-items:flex-end;gap:2px;display:flex}.eGUBIq_tab{font:inherit;color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;padding:7px 12px;font-size:13px}.eGUBIq_tab.eGUBIq_on{color:var(--dsw-alias-brand-primary,#4f6ef7);border-bottom-color:var(--dsw-alias-brand-primary,#4f6ef7);font-weight:600}.eGUBIq_banner{background:var(--dsw-alias-bg-layer-2,#fdf3e3);border:1px solid var(--dsw-alias-border-l2,#f3e3c3);border-radius:8px;align-items:center;gap:8px;margin:0;padding:8px 12px;font-size:12px;display:flex}.eGUBIq_bannerIcon{color:var(--dsw-alias-label-secondary,#6b7280);flex-shrink:0}.eGUBIq_bannerHint{color:var(--dsw-alias-label-tertiary,#8b93a1);cursor:help;display:inline-flex}.eGUBIq_body{flex:1;padding:12px 4px 24px;overflow-x:hidden;overflow-y:auto}.eGUBIq_cats{z-index:5;background:var(--dsw-alias-bg-layer-2,#f7f8fa);margin:0 -4px 2px;padding:12px 4px 4px;position:sticky;top:-1px}.eGUBIq_catsRow{align-items:flex-start;gap:8px;display:flex;position:relative}.eGUBIq_star{color:var(--dsw-alias-label-secondary,#9ca3af);font-size:11px}.eGUBIq_top{z-index:20;display:inline-flex;position:absolute;bottom:18px;right:18px}.eGUBIq_topBtn{border-radius:99px;width:38px;height:38px;padding:0}.eGUBIq_tag{border:1px solid var(--dsw-alias-border-l3,#d9dde3);color:var(--dsw-alias-label-secondary,#6b7280);border-radius:4px;flex-shrink:0;padding:1px 6px;font-size:11px;line-height:16px}.eGUBIq_okState{color:var(--dsw-alias-state-success-primary,#16a34a);white-space:nowrap;font-size:12px;font-weight:600}.eGUBIq_catsWrap{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex}.eGUBIq_catsCollapsed{max-height:62px;overflow:hidden}.eGUBIq_catsToggle.eGUBIq_catsToggle{height:26px;min-height:26px;color:var(--dsw-alias-label-secondary,#6b7280);padding:0 6px}.eGUBIq_shots{-webkit-overflow-scrolling:touch;scrollbar-width:thin;gap:8px;margin:0 0 8px;padding:2px 0 6px;display:flex;overflow-x:auto}.eGUBIq_shot{object-fit:cover;border:1px solid var(--dsw-alias-border-default,#e5e7eb);background:var(--dsw-alias-bg-layer-2,#f3f4f6);border-radius:8px;flex:none;max-width:260px;height:150px}.eGUBIq_cmd{background:var(--dsw-alias-bg-layer-2,#f3f4f6);word-break:break-all;border-radius:6px;margin:8px 0 0;padding:8px 10px;font-family:ui-monospace,Menlo,monospace;font-size:11px;line-height:18px}.eGUBIq_warnLine{color:var(--dsw-alias-state-warn-primary,#b45309);align-items:center;gap:4px;margin:0;font-size:12px;font-weight:600;line-height:18px;display:flex}.eGUBIq_modalNote{color:var(--dsw-alias-label-tertiary,#8b93a1);align-items:center;gap:4px;margin:12px 0 0;font-size:12px;line-height:18px;display:flex}.eGUBIq_grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;display:grid}.eGUBIq_swatches{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:8px;gap:0;height:34px;display:flex;overflow:hidden}.eGUBIq_themesGrid{margin-bottom:12px}.eGUBIq_swatches i{flex:1}.eGUBIq_card{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;flex-direction:column;gap:12px;padding:12px 14px;display:flex}.eGUBIq_row1{align-items:center;gap:10px;min-width:0;display:flex}.eGUBIq_srcBtn{flex-shrink:0;align-self:flex-start}.eGUBIq_av{color:#fff;object-fit:cover;background:var(--dsw-alias-bg-layer-2,#f3f4f6);border-radius:8px;flex-shrink:0;place-items:center;width:32px;height:32px;font-size:14px;font-weight:700;display:grid}.eGUBIq_nm{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:22px;overflow:hidden}.eGUBIq_owner{color:var(--dsw-alias-label-secondary,#9ca3af);font-size:11px}.eGUBIq_desc{color:var(--dsw-alias-label-tertiary,#8b93a1);min-height:36px;margin:0;font-size:12px;line-height:18px}.eGUBIq_foot{align-items:center;gap:8px;margin-top:auto;display:flex}.eGUBIq_grow{flex:1}.eGUBIq_titleRow{align-items:center;gap:10px;display:flex}.eGUBIq_version{color:var(--dsw-alias-label-tertiary,#8b93a1);font-variant-numeric:tabular-nums;flex-shrink:0;font-size:12px;line-height:20px}.eGUBIq_descTight{min-height:0}.eGUBIq_src{color:var(--dsw-alias-label-secondary,#9ca3af);font-size:11px;text-decoration:none}.eGUBIq_src:hover{color:var(--dsw-alias-brand-primary,#4f6ef7)}.eGUBIq_dot{vertical-align:2px;margin-left:5px}.eGUBIq_act{flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px;font-size:11px;display:flex}.eGUBIq_actLive{color:var(--dsw-alias-state-success-primary,#16a34a);align-items:center;gap:4px;font-weight:600;display:inline-flex}.eGUBIq_actWarn{color:var(--dsw-alias-state-warn-primary,#b45309);align-items:center;gap:4px;font-weight:600;display:inline-flex}.eGUBIq_actBroken{color:var(--dsw-alias-state-error-primary,#dc2626);align-items:center;gap:4px;font-weight:600;display:inline-flex}.eGUBIq_actWhy{color:var(--dsw-alias-label-secondary,#6b7280);margin-top:2px}.eGUBIq_loading{color:var(--dsw-alias-label-secondary,#9ca3af);flex-direction:column;align-items:center;gap:12px;padding:48px;font-size:13px;display:flex}.eGUBIq_spin{color:var(--dsw-alias-brand-primary,#4f6ef7);flex-shrink:0;animation:.8s linear infinite eGUBIq_sp;display:inline-flex}@keyframes eGUBIq_sp{to{transform:rotate(360deg)}}.eGUBIq_progress{background:var(--dsw-alias-bg-layer-2,#f3f4f6);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);color:var(--dsw-alias-label-secondary,#6b7280);border-radius:8px;flex-wrap:wrap;align-items:center;gap:9px;margin:0;padding:8px 12px;font-size:12px;display:flex}.eGUBIq_bar{background:var(--dsw-alias-border-l1,#e5e7eb);border-radius:99px;width:100%;height:4px;overflow:hidden}.eGUBIq_barFill{background:var(--dsw-alias-brand-primary,#4f6ef7);border-radius:99px;height:100%;transition:width .6s}.eGUBIq_barWave{width:30%;animation:1.2s ease-in-out infinite eGUBIq_dshmSlide}@keyframes eGUBIq_dshmSlide{0%{margin-left:-30%}to{margin-left:100%}}.eGUBIq_irow .eGUBIq_progress{margin-top:8px}.eGUBIq_progress code{text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,Menlo,monospace;font-size:11px;overflow:hidden}.eGUBIq_empty{color:var(--dsw-alias-label-secondary,#9ca3af);text-align:center;padding:32px;font-size:13px}.eGUBIq_err{color:var(--dsw-alias-state-error-primary,#dc2626);white-space:pre-wrap;word-break:break-all;margin:8px 0;font-size:12px}.eGUBIq_irow{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;align-items:center;gap:10px;margin-bottom:8px;padding:12px 14px;display:flex}.eGUBIq_irowMissing{filter:grayscale();opacity:.5}.eGUBIq_irow>.eGUBIq_src,.eGUBIq_irow>.eGUBIq_owner,.eGUBIq_irow button{white-space:nowrap;flex-shrink:0}.eGUBIq_tabSearchRow{padding:0 4px 10px;display:flex}.eGUBIq_tabSearch{width:260px}.eGUBIq_spec{color:var(--dsw-alias-label-secondary,#9ca3af);overflow-wrap:anywhere;min-width:0;font-family:ui-monospace,Menlo,monospace;font-size:11px}.eGUBIq_specTag{white-space:nowrap;border-radius:4px;flex-shrink:0;align-items:center;height:16px;padding:0 5px;font-size:10px;font-weight:600;display:inline-flex}.eGUBIq_specTagGit{color:#0b7285;background:#12a3c41f}.eGUBIq_specTagFile{color:#b07d1b;background:#f0b42924}.eGUBIq_backupCheckList .eGUBIq_grow{white-space:nowrap;text-overflow:ellipsis;flex:70%;min-width:0;overflow:hidden}.eGUBIq_backupCheckList .eGUBIq_spec{text-align:right;white-space:nowrap;text-overflow:ellipsis;flex:0 30%;max-width:30%;overflow:hidden}.eGUBIq_staleAction{margin-top:8px}.eGUBIq_pct{color:var(--dsw-alias-label-secondary,#6b7280);flex-shrink:0;font-size:11px;font-weight:600}.eGUBIq_pager{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin:16px 0 4px;display:flex}.eGUBIq_pagerPages{flex-wrap:wrap;flex:1;justify-content:center;align-items:center;gap:6px;min-width:0;display:flex}.eGUBIq_pageEllipsis{color:var(--dsw-alias-label-secondary,#9ca3af);padding:0 2px;font-size:12px}.eGUBIq_pageInfo{color:var(--dsw-alias-label-secondary,#6b7280);white-space:nowrap;font-size:12px}.eGUBIq_depBadge{border:1px solid var(--dsw-alias-state-warn-primary,#b45309);color:var(--dsw-alias-state-warn-primary,#b45309);white-space:nowrap;border-radius:4px;flex-shrink:0;margin-left:6px;padding:1px 6px;font-size:11px;font-weight:600;line-height:16px}.eGUBIq_deprecate{color:var(--dsw-alias-state-warn-primary,#b45309);background:var(--dsw-alias-bg-layer-2,#fdf3e3);border:1px solid var(--dsw-alias-border-l2,#f3e3c3);border-radius:8px;margin:0;padding:8px 10px;font-size:12px;line-height:18px}.eGUBIq_deprecate a{color:var(--dsw-alias-state-warn-primary,#b45309);text-decoration:underline}.eGUBIq_deprecate .eGUBIq_src{margin-left:8px}.eGUBIq_depLine{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.eGUBIq_switch{border:1px solid var(--dsw-alias-border-l2,#d9dde3);background:var(--dsw-alias-bg-layer-2,#e5e7eb);cursor:pointer;border-radius:99px;flex-shrink:0;width:38px;height:22px;padding:0;transition:background .15s,border-color .15s;position:relative}.eGUBIq_switchOn{background:var(--dsw-alias-state-success-primary,#16a34a);border-color:var(--dsw-alias-state-success-primary,#16a34a)}.eGUBIq_switchMixed{background:var(--dsw-alias-state-warn-primary,#b45309);border-color:var(--dsw-alias-state-warn-primary,#b45309)}.eGUBIq_switchKnob{background:#fff;border-radius:99px;width:16px;height:16px;transition:left .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #00000040}.eGUBIq_switchOn .eGUBIq_switchKnob,.eGUBIq_switchMixed .eGUBIq_switchKnob{left:18px}.eGUBIq_switch:disabled{opacity:.5;cursor:default}.eGUBIq_viewBar{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:8px;align-items:center;gap:2px;width:fit-content;margin-bottom:12px;padding:2px;display:flex}.eGUBIq_viewBtn{font:inherit;color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:4px 10px;font-size:12px;line-height:18px}.eGUBIq_viewBtn:hover{color:var(--dsw-alias-brand-primary,#4f6ef7)}.eGUBIq_viewOn{background:var(--dsw-alias-bg-layer-2,#eef0f4);color:var(--dsw-alias-label-primary,#1f2328);font-weight:600}.eGUBIq_groupRow{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;margin-bottom:10px;padding:12px 14px}.eGUBIq_groupHead{align-items:center;gap:10px;min-width:0;display:flex}.eGUBIq_groupName{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;line-height:20px;overflow:hidden}.eGUBIq_groupActions{flex-shrink:0;align-items:center;gap:6px;display:flex}.eGUBIq_groupMembers{flex-direction:column;gap:6px;margin-top:10px;display:flex}.eGUBIq_groupMember{background:var(--dsw-alias-bg-layer-2,#f7f8fa);border-radius:8px;align-items:center;gap:8px;padding:6px 8px;font-size:12px;line-height:18px;display:flex}.eGUBIq_groupMember .eGUBIq_nm{flex:1;min-width:0;font-size:12px}.eGUBIq_groupAddPanel{border-top:1px dashed var(--dsw-alias-border-l2,#e5e7eb);flex-direction:column;gap:6px;margin-top:10px;padding-top:10px;display:flex}.eGUBIq_groupCreate{align-items:center;gap:8px;margin-bottom:10px;display:flex}.eGUBIq_inlineInput{flex:1;min-width:120px}.eGUBIq_assignRow{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.eGUBIq_assignSelect{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);background:var(--dsw-alias-bg-layer-1,#fff);color:var(--dsw-alias-label-primary,#1f2328);font:inherit;border-radius:6px;padding:3px 6px;font-size:12px;line-height:18px}.eGUBIq_groupHint{color:var(--dsw-alias-label-tertiary,#8b93a1);font-size:11px}.eGUBIq_sectAction{color:var(--dsw-alias-label-secondary,#6b7280);align-items:center;gap:8px;margin:14px 2px 8px;font-size:12px;font-weight:600;display:flex}.eGUBIq_backupGrid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;display:grid}.eGUBIq_backupCard{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;flex-direction:column;gap:10px;padding:16px;display:flex}.eGUBIq_backupCard h3{margin:0;font-size:14px}.eGUBIq_backupCard p{color:var(--dsw-alias-label-secondary,#6b7280);margin:0;font-size:12px;line-height:18px}.eGUBIq_backupActions{flex-wrap:wrap;gap:8px;display:flex;position:relative}.eGUBIq_hiddenFile{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.eGUBIq_backupInput{box-sizing:border-box;width:100%}.eGUBIq_backupCheck{cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.eGUBIq_backupWarn{margin:0;font-size:12px;line-height:18px;color:var(--dsw-alias-state-warn-primary,#b45309)!important}.eGUBIq_backupMessage{color:var(--dsw-alias-label-secondary,#6b7280);grid-column:1/-1;font-size:12px}.eGUBIq_backupCheckList{flex-direction:column;gap:6px;max-height:260px;margin:10px 0 4px;padding-right:4px;display:flex;overflow-y:auto}.eGUBIq_backupCheckList .eGUBIq_backupCheck{justify-content:space-between;gap:8px}.eGUBIq_diagPage{flex-direction:column;gap:12px;height:100%;min-height:0;display:flex;overflow-y:auto}.eGUBIq_diagSummary{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;flex-wrap:wrap;align-items:center;gap:12px;padding:10px 14px;font-size:12px;display:flex}.eGUBIq_diagSummaryItem{color:var(--dsw-alias-label-secondary,#6b7280);white-space:nowrap;align-items:center;gap:6px;display:inline-flex}.eGUBIq_diagSummaryMeta{color:var(--dsw-alias-label-tertiary,#9ca3af);text-overflow:ellipsis;white-space:nowrap;max-width:320px;font-family:ui-monospace,Menlo,monospace;font-size:11px;overflow:hidden}.eGUBIq_diagSection{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;flex-direction:column;gap:8px;padding:12px 14px;display:flex}.eGUBIq_diagSection h3{color:var(--dsw-alias-label-primary,#1f2328);margin:0;font-size:13px;font-weight:600}.eGUBIq_diagCount{color:var(--dsw-alias-label-tertiary,#9ca3af);font-size:11px;font-weight:400}.eGUBIq_diagEmpty{color:var(--dsw-alias-label-secondary,#9ca3af);padding:8px 0;font-size:12px}.eGUBIq_diagBundle{border-top:1px solid var(--dsw-alias-border-l2,#f0f1f3);flex-direction:column;gap:6px;padding-top:8px;display:flex}.eGUBIq_diagBundle:first-of-type{border-top:none;padding-top:0}.eGUBIq_diagRow{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;font-size:12px;line-height:18px;display:flex}.eGUBIq_diagMeta{align-items:baseline;gap:8px;min-width:0;font-size:12px;display:flex}.eGUBIq_diagKey{color:var(--dsw-alias-label-tertiary,#9ca3af);flex-shrink:0;min-width:64px;font-size:11px}.eGUBIq_diagVal{color:var(--dsw-alias-label-primary,#1f2328);overflow-wrap:anywhere;min-width:0;font-family:ui-monospace,Menlo,monospace;font-size:12px;font-weight:500}.eGUBIq_diagIndex{background:var(--dsw-alias-bg-layer-2,#f3f4f6);min-width:18px;height:18px;color:var(--dsw-alias-label-secondary,#6b7280);border-radius:9px;flex-shrink:0;justify-content:center;align-items:center;font-size:11px;font-weight:600;display:inline-flex}.eGUBIq_diagArrow{color:var(--dsw-alias-label-tertiary,#9ca3af);flex-shrink:0;font-size:12px}.eGUBIq_diagBadgeOfficial{background:var(--dsw-alias-brand-primary,#4f6ef7);color:#fff;border-radius:9px;flex-shrink:0;align-items:center;height:18px;padding:0 8px;font-size:11px;font-weight:600;display:inline-flex}.eGUBIq_diagBadgeCommunity{background:var(--dsw-alias-bg-layer-2,#f3f4f6);height:18px;color:var(--dsw-alias-label-secondary,#6b7280);border-radius:9px;flex-shrink:0;align-items:center;padding:0 8px;font-size:11px;display:inline-flex}.eGUBIq_diagBadgeShadow{background:var(--dsw-alias-state-error-primary,#dc2626);color:#fff;border-radius:9px;flex-shrink:0;align-items:center;height:18px;padding:0 8px;font-size:11px;font-weight:600;display:inline-flex}.eGUBIq_diagList{flex-direction:column;gap:6px;display:flex}.eGUBIq_sectionOverview{color:var(--dsw-alias-label-tertiary,#8b93a1);text-overflow:ellipsis;white-space:nowrap;max-width:100%;padding:2px 0 6px;font-size:12px;line-height:18px;overflow:hidden}.eGUBIq_diagAlert{color:var(--dsw-alias-state-warn-primary,#b45309)}.eGUBIq_ovRow{background:var(--dsw-alias-bg-layer-2,#f7f8fa);border-radius:8px;flex-wrap:wrap;align-items:center;gap:8px;min-width:0;padding:6px 10px;font-size:12px;line-height:18px;display:flex}.eGUBIq_ovArrow{color:var(--dsw-alias-label-tertiary,#9ca3af);flex-shrink:0;font-size:12px}.eGUBIq_ovByTag{background:var(--dsw-alias-brand-primary,#4f6ef7);color:#fff;text-overflow:ellipsis;white-space:nowrap;border-radius:9px;flex-shrink:0;align-items:center;max-width:260px;height:18px;padding:0 8px;font-size:11px;font-weight:600;display:inline-flex;overflow:hidden}.eGUBIq_ovFrom{color:var(--dsw-alias-label-secondary,#6b7280);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;overflow:hidden}.eGUBIq_orphRow{background:var(--dsw-alias-bg-layer-2,#f7f8fa);border-radius:8px;flex-wrap:wrap;align-items:center;gap:8px;min-width:0;padding:6px 10px;font-size:12px;line-height:18px;display:flex}.eGUBIq_orphBadge{background:var(--dsw-alias-state-warn-primary,#b45309);color:#fff;white-space:nowrap;border-radius:9px;flex-shrink:0;align-items:center;height:18px;padding:0 8px;font-size:11px;font-weight:600;display:inline-flex}.eGUBIq_dragHandle{width:20px;height:20px;color:var(--dsw-alias-label-tertiary,#9ca3af);cursor:grab;-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;line-height:20px;display:inline-flex}.eGUBIq_dragOver{outline:2px dashed var(--dsw-alias-brand-primary,#4f6ef7);outline-offset:2px;background:var(--dsw-alias-bg-layer-2,#f0f2f8);border-radius:8px}.eGUBIq_dragging{opacity:.45;background:var(--dsw-alias-bg-layer-2,#f3f4f6)}.eGUBIq_collapseHead{font:inherit;color:var(--dsw-alias-label-primary,#1f2328);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:8px;width:100%;padding:0;font-size:13px;font-weight:600;display:flex}.eGUBIq_collapseIcon{color:var(--dsw-alias-label-secondary,#6b7280);flex-shrink:0;display:inline-flex}.eGUBIq_collapseTitle{flex:1;min-width:0}.eGUBIq_collapseBody{border-top:1px solid var(--dsw-alias-border-l2,#f0f1f3);overflow-wrap:anywhere;flex-direction:column;gap:10px;min-width:0;margin-top:8px;padding-top:10px;display:flex}.eGUBIq_panelNote{color:var(--dsw-alias-label-secondary,#6b7280);margin:0;font-size:12px;line-height:18px}.eGUBIq_fixFallback{flex-direction:column;gap:6px;margin:8px 0;display:flex}.eGUBIq_fixFallbackText{box-sizing:border-box;width:100%;color:var(--dsw-alias-label-primary,#1f2328);background:var(--dsw-alias-bg-layer-2,#f3f4f6);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);resize:vertical;white-space:pre-wrap;word-break:break-all;border-radius:6px;padding:8px 10px;font-family:ui-monospace,Menlo,monospace;font-size:11px;line-height:16px}.eGUBIq_setCard{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;flex-direction:column;gap:14px;padding:16px 18px;display:flex}.eGUBIq_setHead{flex-direction:column;gap:4px;display:flex}.eGUBIq_setTitle{font-size:15px;font-weight:600;line-height:22px}.eGUBIq_setDesc{color:var(--dsw-alias-label-tertiary,#8b93a1);font-size:13px;line-height:20px}.eGUBIq_setRow{align-items:flex-start;gap:12px;display:flex}.eGUBIq_setLabelBox{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.eGUBIq_setLabel{font-size:13px;line-height:20px}.eGUBIq_setHint{color:var(--dsw-alias-label-tertiary,#8b93a1);font-size:12px;line-height:18px}.eGUBIq_setRevert{font:inherit;color:var(--dsw-alias-brand-primary,#4f6ef7);cursor:pointer;background:0 0;border:none;flex-shrink:0;padding:0;font-size:12px}.eGUBIq_setRevert:disabled{color:var(--dsw-alias-label-tertiary,#8b93a1);cursor:default}";
913
921
  const tagId = "dshmarket/Market.module.css";
914
922
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
915
923
  const tag = document.createElement("style");
@@ -919,146 +927,155 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
919
927
  document.head.appendChild(tag);
920
928
  }
921
929
  var Market_module_css_default = {
930
+ "sub": "eGUBIq_sub",
931
+ "nm": "eGUBIq_nm",
932
+ "err": "eGUBIq_err",
933
+ "setDesc": "eGUBIq_setDesc",
934
+ "diagKey": "eGUBIq_diagKey",
935
+ "grid": "eGUBIq_grid",
936
+ "collapseIcon": "eGUBIq_collapseIcon",
937
+ "root": "eGUBIq_root",
938
+ "depBadge": "eGUBIq_depBadge",
939
+ "dshmSlide": "eGUBIq_dshmSlide",
940
+ "groupAddPanel": "eGUBIq_groupAddPanel",
941
+ "catsToggle": "eGUBIq_catsToggle",
942
+ "bannerIcon": "eGUBIq_bannerIcon",
943
+ "diagSection": "eGUBIq_diagSection",
944
+ "groupHead": "eGUBIq_groupHead",
945
+ "diagBadgeOfficial": "eGUBIq_diagBadgeOfficial",
946
+ "ovByTag": "eGUBIq_ovByTag",
947
+ "sectionOverview": "eGUBIq_sectionOverview",
948
+ "backupCard": "eGUBIq_backupCard",
949
+ "diagSummaryMeta": "eGUBIq_diagSummaryMeta",
950
+ "diagSummary": "eGUBIq_diagSummary",
951
+ "empty": "eGUBIq_empty",
952
+ "modalNote": "eGUBIq_modalNote",
953
+ "descTight": "eGUBIq_descTight",
954
+ "topBtn": "eGUBIq_topBtn",
955
+ "actWarn": "eGUBIq_actWarn",
956
+ "assignRow": "eGUBIq_assignRow",
957
+ "catsCollapsed": "eGUBIq_catsCollapsed",
958
+ "switch": "eGUBIq_switch",
959
+ "assignSelect": "eGUBIq_assignSelect",
960
+ "orphBadge": "eGUBIq_orphBadge",
961
+ "fixFallbackText": "eGUBIq_fixFallbackText",
962
+ "setRevert": "eGUBIq_setRevert",
963
+ "barFill": "eGUBIq_barFill",
964
+ "groupMembers": "eGUBIq_groupMembers",
965
+ "diagIndex": "eGUBIq_diagIndex",
966
+ "diagList": "eGUBIq_diagList",
967
+ "fixFallback": "eGUBIq_fixFallback",
968
+ "setTitle": "eGUBIq_setTitle",
969
+ "backupCheck": "eGUBIq_backupCheck",
970
+ "top": "eGUBIq_top",
971
+ "loading": "eGUBIq_loading",
972
+ "dragging": "eGUBIq_dragging",
973
+ "progress": "eGUBIq_progress",
974
+ "backupCheckList": "eGUBIq_backupCheckList",
975
+ "depLine": "eGUBIq_depLine",
976
+ "diagBundle": "eGUBIq_diagBundle",
977
+ "sectAction": "eGUBIq_sectAction",
978
+ "av": "eGUBIq_av",
979
+ "groupMember": "eGUBIq_groupMember",
980
+ "diagPage": "eGUBIq_diagPage",
922
981
  "switchKnob": "eGUBIq_switchKnob",
923
- "warnLine": "eGUBIq_warnLine",
924
- "pageInfo": "eGUBIq_pageInfo",
982
+ "deprecate": "eGUBIq_deprecate",
983
+ "diagSummaryItem": "eGUBIq_diagSummaryItem",
984
+ "pagerPages": "eGUBIq_pagerPages",
985
+ "ovArrow": "eGUBIq_ovArrow",
925
986
  "sp": "eGUBIq_sp",
926
- "ovFrom": "eGUBIq_ovFrom",
927
- "backupCheckList": "eGUBIq_backupCheckList",
928
- "pageEllipsis": "eGUBIq_pageEllipsis",
929
- "barFill": "eGUBIq_barFill",
930
- "tabSearch": "eGUBIq_tabSearch",
931
- "switchOn": "eGUBIq_switchOn",
932
- "modalNote": "eGUBIq_modalNote",
933
987
  "diagVal": "eGUBIq_diagVal",
934
- "assignRow": "eGUBIq_assignRow",
935
- "collapseHead": "eGUBIq_collapseHead",
936
- "spec": "eGUBIq_spec",
937
988
  "orphRow": "eGUBIq_orphRow",
938
- "srcBtn": "eGUBIq_srcBtn",
939
- "card": "eGUBIq_card",
940
- "backupActions": "eGUBIq_backupActions",
989
+ "title": "eGUBIq_title",
990
+ "dragHandle": "eGUBIq_dragHandle",
991
+ "src": "eGUBIq_src",
992
+ "tabSearch": "eGUBIq_tabSearch",
993
+ "version": "eGUBIq_version",
994
+ "viewOn": "eGUBIq_viewOn",
995
+ "groupName": "eGUBIq_groupName",
941
996
  "diagBadgeShadow": "eGUBIq_diagBadgeShadow",
942
- "dragging": "eGUBIq_dragging",
943
- "tag": "eGUBIq_tag",
944
- "diagList": "eGUBIq_diagList",
945
- "diagBadgeOfficial": "eGUBIq_diagBadgeOfficial",
946
- "grow": "eGUBIq_grow",
947
- "actWarn": "eGUBIq_actWarn",
948
- "inlineInput": "eGUBIq_inlineInput",
949
- "spin": "eGUBIq_spin",
997
+ "body": "eGUBIq_body",
998
+ "viewBar": "eGUBIq_viewBar",
999
+ "setLabel": "eGUBIq_setLabel",
1000
+ "catsWrap": "eGUBIq_catsWrap",
1001
+ "viewBtn": "eGUBIq_viewBtn",
1002
+ "barWave": "eGUBIq_barWave",
1003
+ "groupHint": "eGUBIq_groupHint",
1004
+ "spec": "eGUBIq_spec",
1005
+ "cmd": "eGUBIq_cmd",
1006
+ "shot": "eGUBIq_shot",
1007
+ "groupRow": "eGUBIq_groupRow",
950
1008
  "panelNote": "eGUBIq_panelNote",
1009
+ "switchOn": "eGUBIq_switchOn",
1010
+ "setHead": "eGUBIq_setHead",
1011
+ "desc": "eGUBIq_desc",
1012
+ "setRow": "eGUBIq_setRow",
951
1013
  "collapseTitle": "eGUBIq_collapseTitle",
952
- "root": "eGUBIq_root",
953
- "groupName": "eGUBIq_groupName",
954
- "sub": "eGUBIq_sub",
955
- "irow": "eGUBIq_irow",
956
- "groupMembers": "eGUBIq_groupMembers",
957
- "diagBadgeCommunity": "eGUBIq_diagBadgeCommunity",
1014
+ "ovRow": "eGUBIq_ovRow",
1015
+ "swatches": "eGUBIq_swatches",
1016
+ "hiddenFile": "eGUBIq_hiddenFile",
1017
+ "warnLine": "eGUBIq_warnLine",
958
1018
  "backupWarn": "eGUBIq_backupWarn",
959
- "diagIndex": "eGUBIq_diagIndex",
960
- "diagArrow": "eGUBIq_diagArrow",
961
- "viewBar": "eGUBIq_viewBar",
962
- "sectionOverview": "eGUBIq_sectionOverview",
963
- "orphBadge": "eGUBIq_orphBadge",
964
- "bannerHint": "eGUBIq_bannerHint",
965
- "empty": "eGUBIq_empty",
966
- "act": "eGUBIq_act",
1019
+ "diagRow": "eGUBIq_diagRow",
1020
+ "actBroken": "eGUBIq_actBroken",
1021
+ "dragOver": "eGUBIq_dragOver",
1022
+ "catsRow": "eGUBIq_catsRow",
1023
+ "themesGrid": "eGUBIq_themesGrid",
1024
+ "staleAction": "eGUBIq_staleAction",
1025
+ "irow": "eGUBIq_irow",
1026
+ "card": "eGUBIq_card",
1027
+ "backupGrid": "eGUBIq_backupGrid",
1028
+ "foot": "eGUBIq_foot",
967
1029
  "groupActions": "eGUBIq_groupActions",
968
- "sectAction": "eGUBIq_sectAction",
969
- "diagEmpty": "eGUBIq_diagEmpty",
970
- "swatches": "eGUBIq_swatches",
971
- "dragHandle": "eGUBIq_dragHandle",
972
- "viewOn": "eGUBIq_viewOn",
973
- "cmd": "eGUBIq_cmd",
974
- "groupAddPanel": "eGUBIq_groupAddPanel",
975
- "assignSelect": "eGUBIq_assignSelect",
976
- "collapseIcon": "eGUBIq_collapseIcon",
977
- "ovByTag": "eGUBIq_ovByTag",
978
- "diagKey": "eGUBIq_diagKey",
1030
+ "act": "eGUBIq_act",
1031
+ "groupCreate": "eGUBIq_groupCreate",
1032
+ "backupInput": "eGUBIq_backupInput",
1033
+ "setLabelBox": "eGUBIq_setLabelBox",
1034
+ "ovFrom": "eGUBIq_ovFrom",
1035
+ "srcBtn": "eGUBIq_srcBtn",
1036
+ "spin": "eGUBIq_spin",
1037
+ "diagCount": "eGUBIq_diagCount",
979
1038
  "tab": "eGUBIq_tab",
980
- "backupGrid": "eGUBIq_backupGrid",
981
- "cats": "eGUBIq_cats",
982
- "catsRow": "eGUBIq_catsRow",
1039
+ "star": "eGUBIq_star",
1040
+ "bar": "eGUBIq_bar",
1041
+ "tag": "eGUBIq_tag",
1042
+ "collapseBody": "eGUBIq_collapseBody",
1043
+ "diagBadgeCommunity": "eGUBIq_diagBadgeCommunity",
1044
+ "pageEllipsis": "eGUBIq_pageEllipsis",
1045
+ "owner": "eGUBIq_owner",
1046
+ "specTag": "eGUBIq_specTag",
1047
+ "specTagGit": "eGUBIq_specTagGit",
1048
+ "shots": "eGUBIq_shots",
1049
+ "inlineInput": "eGUBIq_inlineInput",
1050
+ "titleRow": "eGUBIq_titleRow",
1051
+ "backupMessage": "eGUBIq_backupMessage",
1052
+ "on": "eGUBIq_on",
983
1053
  "actWhy": "eGUBIq_actWhy",
984
- "deprecate": "eGUBIq_deprecate",
985
- "nm": "eGUBIq_nm",
986
- "groupHint": "eGUBIq_groupHint",
987
- "diagRow": "eGUBIq_diagRow",
988
- "switch": "eGUBIq_switch",
989
- "groupHead": "eGUBIq_groupHead",
990
- "dot": "eGUBIq_dot",
1054
+ "pager": "eGUBIq_pager",
1055
+ "setHint": "eGUBIq_setHint",
991
1056
  "head": "eGUBIq_head",
992
- "top": "eGUBIq_top",
993
- "hiddenFile": "eGUBIq_hiddenFile",
994
- "backupInput": "eGUBIq_backupInput",
995
- "grid": "eGUBIq_grid",
996
- "irowMissing": "eGUBIq_irowMissing",
997
- "okState": "eGUBIq_okState",
998
- "diagPage": "eGUBIq_diagPage",
999
- "dshmSlide": "eGUBIq_dshmSlide",
1000
- "diagSection": "eGUBIq_diagSection",
1001
- "err": "eGUBIq_err",
1057
+ "actLive": "eGUBIq_actLive",
1002
1058
  "tabSearchRow": "eGUBIq_tabSearchRow",
1003
- "depBadge": "eGUBIq_depBadge",
1004
- "catsWrap": "eGUBIq_catsWrap",
1005
- "av": "eGUBIq_av",
1006
- "specTag": "eGUBIq_specTag",
1007
- "ovRow": "eGUBIq_ovRow",
1008
- "groupCreate": "eGUBIq_groupCreate",
1009
- "body": "eGUBIq_body",
1010
- "foot": "eGUBIq_foot",
1011
- "on": "eGUBIq_on",
1012
- "fixFallback": "eGUBIq_fixFallback",
1013
- "themesGrid": "eGUBIq_themesGrid",
1014
- "dragOver": "eGUBIq_dragOver",
1015
- "topBtn": "eGUBIq_topBtn",
1016
- "diagSummary": "eGUBIq_diagSummary",
1017
- "loading": "eGUBIq_loading",
1018
- "descTight": "eGUBIq_descTight",
1019
1059
  "row1": "eGUBIq_row1",
1020
- "desc": "eGUBIq_desc",
1021
- "banner": "eGUBIq_banner",
1022
- "owner": "eGUBIq_owner",
1023
- "staleAction": "eGUBIq_staleAction",
1024
- "actLive": "eGUBIq_actLive",
1025
- "pager": "eGUBIq_pager",
1026
- "diagBundle": "eGUBIq_diagBundle",
1027
- "shot": "eGUBIq_shot",
1028
- "pct": "eGUBIq_pct",
1029
- "diagMeta": "eGUBIq_diagMeta",
1030
- "specTagGit": "eGUBIq_specTagGit",
1031
- "fixFallbackText": "eGUBIq_fixFallbackText",
1032
- "groupRow": "eGUBIq_groupRow",
1033
- "src": "eGUBIq_src",
1034
- "diagCount": "eGUBIq_diagCount",
1035
- "actBroken": "eGUBIq_actBroken",
1036
- "backupCard": "eGUBIq_backupCard",
1060
+ "diagArrow": "eGUBIq_diagArrow",
1037
1061
  "diagAlert": "eGUBIq_diagAlert",
1038
- "catsCollapsed": "eGUBIq_catsCollapsed",
1039
- "barWave": "eGUBIq_barWave",
1062
+ "backupActions": "eGUBIq_backupActions",
1063
+ "bannerHint": "eGUBIq_bannerHint",
1064
+ "cats": "eGUBIq_cats",
1065
+ "grow": "eGUBIq_grow",
1066
+ "dot": "eGUBIq_dot",
1040
1067
  "switchMixed": "eGUBIq_switchMixed",
1041
- "star": "eGUBIq_star",
1042
- "depLine": "eGUBIq_depLine",
1043
- "viewBtn": "eGUBIq_viewBtn",
1044
- "backupMessage": "eGUBIq_backupMessage",
1045
- "progress": "eGUBIq_progress",
1046
- "pagerPages": "eGUBIq_pagerPages",
1047
- "shots": "eGUBIq_shots",
1048
- "ovArrow": "eGUBIq_ovArrow",
1068
+ "diagEmpty": "eGUBIq_diagEmpty",
1069
+ "okState": "eGUBIq_okState",
1049
1070
  "tabs": "eGUBIq_tabs",
1050
- "bar": "eGUBIq_bar",
1051
- "collapseBody": "eGUBIq_collapseBody",
1052
- "diagSummaryMeta": "eGUBIq_diagSummaryMeta",
1053
- "title": "eGUBIq_title",
1054
- "titleRow": "eGUBIq_titleRow",
1055
- "diagSummaryItem": "eGUBIq_diagSummaryItem",
1056
- "backupCheck": "eGUBIq_backupCheck",
1071
+ "diagMeta": "eGUBIq_diagMeta",
1072
+ "banner": "eGUBIq_banner",
1057
1073
  "specTagFile": "eGUBIq_specTagFile",
1058
- "groupMember": "eGUBIq_groupMember",
1059
- "catsToggle": "eGUBIq_catsToggle",
1060
- "version": "eGUBIq_version",
1061
- "bannerIcon": "eGUBIq_bannerIcon"
1074
+ "setCard": "eGUBIq_setCard",
1075
+ "pct": "eGUBIq_pct",
1076
+ "pageInfo": "eGUBIq_pageInfo",
1077
+ "collapseHead": "eGUBIq_collapseHead",
1078
+ "irowMissing": "eGUBIq_irowMissing"
1062
1079
  };
1063
1080
  //#endregion
1064
1081
  //#region src/client/Diagnostics.tsx
@@ -4256,7 +4273,7 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
4256
4273
  className: Market_module_css_default.catsRow,
4257
4274
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4258
4275
  ref: catsWrapRef,
4259
- className: catsOpen || visibleCats === null ? `${Market_module_css_default.catsWrap} ${Market_module_css_default.catsCollapsed}` : Market_module_css_default.catsWrap,
4276
+ className: visibleCats === null ? `${Market_module_css_default.catsWrap} ${Market_module_css_default.catsCollapsed}` : Market_module_css_default.catsWrap,
4260
4277
  children: (() => {
4261
4278
  const ordered = orderedCategories(categories, cat, catsOpen);
4262
4279
  const shown = catsOpen || visibleCats === null ? ordered : ordered.slice(0, Math.max(0, visibleCats - 1));
@@ -5207,6 +5224,59 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
5207
5224
  });
5208
5225
  }
5209
5226
  //#endregion
5227
+ //#region src/client/SettingsCard.tsx
5228
+ /**
5229
+ * The market's card on the plugin configuration page (dsh >= 0.1.0-rc.7).
5230
+ *
5231
+ * One switch: whether the market may relaunch the host. Turning it off is
5232
+ * the documented answer for a host owned by systemd, launchd or pm2, and
5233
+ * until this card the only way to say it was hand-editing YAML.
5234
+ *
5235
+ * The chrome is drawn here rather than imported: the section's own cards
5236
+ * come from `dsh-client-ui-settings-plugins`, and a VALUE import from that
5237
+ * package fails the client bundle-purity gate — a card is expected to own
5238
+ * its appearance. The switch reuses the market's existing one so a user
5239
+ * meets the same control on both pages.
5240
+ *
5241
+ * Writes go through the settings scope, which fences each one with the
5242
+ * revision it read, so two surfaces editing this namespace cannot silently
5243
+ * overwrite each other. A field counts as overridden by its PRESENCE in the
5244
+ * user layer, never by comparing values: an override that happens to equal
5245
+ * the composed default is still the user's choice, and reverting has to be
5246
+ * able to remove it.
5247
+ */
5248
+ /** Whether the user layer carries this field — presence, not value. */
5249
+ function isOverridden(user, field) {
5250
+ return typeof user === "object" && user !== null && Object.hasOwn(user, field);
5251
+ }
5252
+ function SettingsCard({ scope, t }) {
5253
+ const snapshot = (0, react.useSyncExternalStore)((0, react.useCallback)((listener) => scope.subscribe(listener), [scope]), (0, react.useCallback)(() => scope.getSnapshot(), [scope]));
5254
+ const allowRestart = snapshot.value?.allowRestart !== false;
5255
+ const onToggle = (0, react.useCallback)(() => {
5256
+ scope.set("allowRestart", !allowRestart);
5257
+ }, [scope, allowRestart]);
5258
+ const onRevert = (0, react.useCallback)(() => {
5259
+ scope.unset("allowRestart");
5260
+ }, [scope]);
5261
+ if (snapshot.status === "unavailable") return null;
5262
+ const busy = !snapshot.writable || snapshot.status === "loading";
5263
+ const overridden = isOverridden(snapshot.user, "allowRestart");
5264
+ return (0, react.createElement)("div", { className: Market_module_css_default.setCard }, (0, react.createElement)("div", { className: Market_module_css_default.setHead }, (0, react.createElement)("div", { className: Market_module_css_default.setTitle }, t("nav")), (0, react.createElement)("div", { className: Market_module_css_default.setDesc }, t("setCardDesc"))), (0, react.createElement)("div", { className: Market_module_css_default.setRow }, (0, react.createElement)("button", {
5265
+ type: "button",
5266
+ role: "switch",
5267
+ "aria-checked": allowRestart,
5268
+ "aria-label": t("setAllowRestart"),
5269
+ className: allowRestart ? `${Market_module_css_default.switch} ${Market_module_css_default.switchOn}` : Market_module_css_default.switch,
5270
+ disabled: busy,
5271
+ onClick: onToggle
5272
+ }, (0, react.createElement)("span", { className: Market_module_css_default.switchKnob })), (0, react.createElement)("div", { className: Market_module_css_default.setLabelBox }, (0, react.createElement)("div", { className: Market_module_css_default.setLabel }, t("setAllowRestart")), (0, react.createElement)("div", { className: Market_module_css_default.setHint }, t("setAllowRestartHint"))), overridden ? (0, react.createElement)("button", {
5273
+ type: "button",
5274
+ className: Market_module_css_default.setRevert,
5275
+ disabled: busy,
5276
+ onClick: onRevert
5277
+ }, t("setRevert")) : null));
5278
+ }
5279
+ //#endregion
5210
5280
  //#region src/client/index.ts
5211
5281
  /**
5212
5282
  * dsh-market client: registers a "Market" settings section rendering the
@@ -5265,6 +5335,18 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
5265
5335
  getSnapshot: () => ctx.theme.getTheme()
5266
5336
  }
5267
5337
  })));
5338
+ ctx.inject(["settingsScope"], (scoped) => {
5339
+ const scope = scoped.settingsScope.bind({ namespace: NS });
5340
+ scoped.slots.inject("settings.plugin.item", () => scoped.slots.register({
5341
+ name: "settings.plugin.item",
5342
+ key: NS,
5343
+ locale: NS,
5344
+ inject: () => ({ t })
5345
+ }, () => (0, react.createElement)(SettingsCard, {
5346
+ scope,
5347
+ t
5348
+ })));
5349
+ });
5268
5350
  const Toast = () => (0, react.createElement)(InstallToast, { t });
5269
5351
  ctx.slots.inject("shell.overlay", () => ctx.slots.register({
5270
5352
  name: "shell.overlay",