@nonamelego/dsh-catppuccin 0.6.2-beta.0 → 0.6.2-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.en.md CHANGED
@@ -85,6 +85,8 @@ Catppuccin theme automatically.
85
85
  - 🔄 **Update check**: one-click "Check for updates" in Settings compares the latest npm
86
86
  version and gives you a copyable upgrade command; **auto-check is on by default** (once at
87
87
  startup, then every 6 hours) and the release channel switches between stable and beta
88
+ - 💬 **Feedback & support**: GitHub links at the bottom of the settings section and the
89
+ plugin's detail page — open an issue when something breaks, star the repo if you like it
88
90
  - 💻 **[dsh-TUI](https://github.com/ccch1mneyyy/dsh-TUI) terminal themes**: one command installs into
89
91
  dsh-TUI; the four themes sync to `~/.dsh-tui/themes/` automatically
90
92
  (see [Installation · dsh-TUI](#dsh-tui-terminal-themes))
@@ -226,9 +228,9 @@ installing, launch `dsh --profile dsh-tui` and pick the theme with `/theme` —
226
228
  you had before enabling Catppuccin (light / dark / follow system) instead of forcing a reset.
227
229
 
228
230
  > **Second entrance**: open this plugin's own card on the **Plugins** page and the middle of
229
- > its detail page shows the **same settings** (Catppuccin theme / Glass / Check for updates) —
230
- > both read and write one set of preferences, so either place works. That area comes from the
231
- > host's plugin detail page (`0.2.0-rc.2` and later); older versions do not have it.
231
+ > its detail page shows the **same settings** (Catppuccin theme / Glass / Check for updates /
232
+ > Feedback & support) — both read and write one set of preferences, so either place works.
233
+ > That area comes from the host's plugin detail page (`0.2.0-rc.2` and later); older versions do not have it.
232
234
 
233
235
  ### Other options in the Catppuccin row
234
236
 
package/README.md CHANGED
@@ -77,6 +77,7 @@ Catppuccin 主题。
77
77
  纯色背景跟随主题底色——内容滚入视口边缘时柔化穿过,层次更立体
78
78
  - 🎨 玻璃配色自动跟随当前 Catppuccin 主题
79
79
  - 🔄 **检查 Catppuccin 插件更新**:设置页一键检测本插件(dsh-catppuccin)在 npm 上的最新版本,发现新版直接给出可复制的升级命令;**默认开启自动检查**(启动后一次 + 每 6 小时),更新渠道可选稳定版 / Beta
80
+ - 💬 **反馈与支持**:设置区底部与插件详情页附 GitHub 链接——遇到问题可提 Issue,喜欢就点个 Star ⭐
80
81
  - 💻 **[dsh-TUI](https://github.com/ccch1mneyyy/dsh-TUI) 终端主题**:一条安装命令装进 dsh-TUI,四套主题自动同步到 `~/.dsh-tui/themes/`,见[安装 · dsh-TUI](#dsh-tui终端版主题)
81
82
 
82
83
  ## 预览
@@ -198,7 +199,7 @@ dsh plugin --profile dsh-tui add https://github.com/NoNameLeGo/dsh-catppuccin-th
198
199
  的官方偏好(浅色 / 深色 / 跟随系统),而不是强制重置。
199
200
 
200
201
  > **另一处入口**:在 **插件页**(Plugins)点开本插件自己的卡片,中间会出现**同一组设置**
201
- > (Catppuccin 主题 / 玻璃质感 / 检查更新)——两处读写的是同一份偏好,改哪边都一样。
202
+ > (Catppuccin 主题 / 玻璃质感 / 检查更新 / 反馈与支持)——两处读写的是同一份偏好,改哪边都一样。
202
203
  > 该区域由宿主(≥ `0.2.0-rc.2` 的插件详情页)提供,更旧的版本上没有。
203
204
 
204
205
  ### Catppuccin 行里的其它选项
package/lib/client.js CHANGED
@@ -590,7 +590,7 @@ window.__ModuleLoader__.load({
590
590
  * (item II — lazy CSS), so editing the stylesheet means editing
591
591
  * glass.module.css and rebuilding.
592
592
  */
593
- const GLASS_CSS_TEXT = "[data-dsh-glass] body{--dsh-glass-card:color-mix(in srgb, var(--dsw-alias-bg-layer-1) calc(52% * var(--dsh-glass-frost,1)), transparent);--dsh-glass-card-raised:color-mix(in srgb, var(--dsw-alias-bg-layer-1) calc(64% * var(--dsh-glass-frost,1)), transparent);--dsh-glass-card-hover:color-mix(in srgb, var(--dsw-alias-bg-layer-1) calc(76% * var(--dsh-glass-frost,1)), transparent);--dsh-glass-rim:color-mix(in srgb, var(--dsw-alias-label-primary) 18%, transparent);--dsh-glass-rim-soft:color-mix(in srgb, var(--dsw-alias-label-primary) 12%, transparent);--dsh-glass-edge:inset 0 1px 0 #ffffff6b;--dsh-glass-drop:0 10px 32px color-mix(in srgb, var(--dsw-alias-bg-mask-2) 38%, transparent)}[data-dsh-glass] body[data-ds-dark-theme]{--dsh-glass-rim:color-mix(in srgb, var(--dsw-alias-label-primary) 24%, transparent);--dsh-glass-rim-soft:color-mix(in srgb, var(--dsw-alias-label-primary) 16%, transparent);--dsh-glass-edge:inset 0 1px 0 #ffffff14;--dsh-glass-drop:0 10px 32px #02060e73}[data-dsh-glass] body{background:color-mix(in srgb, color-mix(in srgb, var(--dsw-alias-bg-base), #fff calc(var(--dsh-glass-brightness-white,0) * 100%)), #000 calc(var(--dsh-glass-brightness-black,0) * 100%))}[data-dsh-glass] [data-dsh-glass-frame],[data-dsh-glass] [data-phase],[data-dsh-glass] [data-dsh-glass-details]{background:0 0}[data-dsh-glass-float] [data-phase=active] header{z-index:8;position:relative}[data-dsh-glass-float] [class*=banner]{position:static}[data-dsh-glass-float] [data-phase=active] [data-conversation-scroll]{margin-top:-95px;padding-top:107px}[data-dsh-glass] [data-phase] [class*=composerSeat][class*=composerSeat]{background:0 0}[data-dsh-glass] [data-dsh-glass-fade]{z-index:7;pointer-events:none;backdrop-filter:blur(5px);background:#ffffff2e;height:13px;position:fixed;left:0;right:0}[data-dsh-glass] body[data-ds-dark-theme] [data-dsh-glass-fade]{background:#00000024}[data-dsh-glass] [data-dsh-glass-fade=top]{top:0;-webkit-mask-image:linear-gradient(#000 0%,#0000 100%);mask-image:linear-gradient(#000 0%,#0000 100%)}[data-dsh-glass][data-windows-titlebar] [data-dsh-glass-fade=top]{display:none}[data-dsh-glass] [data-dsh-glass-fade=bottom]{bottom:0;-webkit-mask-image:linear-gradient(#0000 0%,#000 100%);mask-image:linear-gradient(#0000 0%,#000 100%)}[data-dsh-glass-float] [role=menu],[data-dsh-glass-float] [role=dialog],[data-dsh-glass-float] [role=alert],[data-dsh-glass-float] [data-trigger-menu],[data-dsh-glass-float] [data-dsh-glass-surface]{border-radius:14px}[data-dsh-glass-float] [role=menuitem],[data-dsh-glass-float] [role=tooltip],[data-dsh-glass-float] [class*=pill]{border-radius:8px}[data-dsh-glass-float] button[class*=button]{border-radius:10px}[data-dsh-glass-float] [class*=iconButton],[data-dsh-glass-float] [class*=searchButton]{border-radius:8px}[data-dsh-glass-float] [class*=block]{--dsl-code-block-border-radius:14px;--dsl-diff-radius:14px;--dsl-read-radius:14px;--dsl-terminal-radius:14px;--dsl-web-radius:14px;--dsl-search-radius:14px;border-radius:14px}[data-dsh-glass-float] [data-dsh-glass-add]{background:var(--dsh-glass-card-raised);border:1px solid var(--dsh-glass-rim);box-shadow:var(--dsh-glass-edge);backdrop-filter:blur(var(--dsh-glass-blur,14px))}[data-dsh-glass-float] [data-dsh-glass-add]:hover:not(:disabled){background:var(--dsh-glass-card-hover)}[data-dsh-glass-float] [data-dsh-glass-surface]{background:var(--dsh-glass-card-raised);border:1px solid var(--dsh-glass-rim);box-shadow:var(--dsh-glass-edge);backdrop-filter:blur(var(--dsh-glass-blur,14px))}[data-dsh-glass-float] [data-dsh-glass-surface]:hover:not(:disabled){background:var(--dsh-glass-card-hover)}[data-dsh-glass-float] [data-conversation-scroll] [class*=bubble]{border:1px solid var(--dsh-glass-rim-soft);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) calc(46% * var(--dsh-glass-frost,1)), transparent);border-radius:14px}[data-dsh-glass-float] [class*=card]{border-radius:14px}[data-dsh-glass] [data-dsh-glass-settings]{--dsh-glass-settings-raised:calc(38% + 38% * var(--dsh-glass-frost,1));--dsh-glass-settings-soft:calc(30% + 30% * var(--dsh-glass-frost,1));--dsw-alias-bg-module-platform:color-mix(in srgb, var(--dsw-static-neutral-bluish-800) var(--dsh-glass-settings-raised), transparent);--dsw-alias-bg-layer-3:color-mix(in srgb, var(--dsw-static-neutral-bluish-800) var(--dsh-glass-settings-soft), transparent);--dsw-alias-bg-layer-2:color-mix(in srgb, var(--dsw-static-neutral-bluish-850) var(--dsh-glass-settings-raised), transparent);--dsw-alias-bg-layer-1:color-mix(in srgb, var(--dsw-static-neutral-bluish-850) var(--dsh-glass-settings-soft), transparent);--dsw-specific-sidebar-nav-item-active:color-mix(in srgb, var(--dsw-static-neutral-bluish-750) var(--dsh-glass-settings-raised), transparent);--dsw-specific-sidebar-nav-item-hover:color-mix(in srgb, var(--dsw-static-neutral-bluish-850) var(--dsh-glass-settings-soft), transparent)}[data-dsh-glass] body:not([data-ds-dark-theme]) [data-dsh-glass-settings]{--dsw-alias-bg-module-platform:color-mix(in srgb, var(--dsw-static-neutral-bluish-60) var(--dsh-glass-settings-raised), transparent);--dsw-alias-bg-layer-3:color-mix(in srgb, var(--dsw-static-neutral-bluish-00) var(--dsh-glass-settings-soft), transparent);--dsw-alias-bg-layer-2:color-mix(in srgb, var(--dsw-static-neutral-bluish-00) var(--dsh-glass-settings-raised), transparent);--dsw-alias-bg-layer-1:color-mix(in srgb, var(--dsw-static-neutral-bluish-00) var(--dsh-glass-settings-soft), transparent);--dsw-specific-sidebar-nav-item-active:color-mix(in srgb, var(--dsw-static-neutral-bluish-100) var(--dsh-glass-settings-raised), transparent);--dsw-specific-sidebar-nav-item-hover:color-mix(in srgb, var(--dsw-static-neutral-bluish-75) var(--dsh-glass-settings-soft), transparent)}[data-dsh-glass-float] [data-phase] header{border:1px solid var(--dsh-glass-rim);background:var(--dsh-glass-card);box-shadow:var(--dsh-glass-edge), var(--dsh-glass-drop);backdrop-filter:blur(var(--dsh-glass-blur,14px));border-radius:20px;margin:12px 16px 0;padding:10px 16px 8px}[data-dsh-glass-float] [data-phase] header:after{display:none}[data-dsh-glass-float] [data-dsh-glass-frame][data-sidebar-collapsed] [data-phase] header{margin-left:28px}[data-dsh-glass-float] [class*=sidebarCol]{--dsw-specific-sidebar-fill:transparent;z-index:9;border:1px solid var(--dsh-glass-rim);border-right-color:color-mix(in srgb, var(--dsw-alias-brand-primary-new-colorprimary-new-color) 40%, transparent);box-shadow:var(--dsh-glass-drop);border-radius:20px;margin:12px;padding:10px 12px 14px;position:relative;overflow:hidden}[data-dsh-glass-float] [class*=sidebarCol]:before{content:\"\";border-radius:inherit;background:var(--dsh-glass-card);box-shadow:var(--dsh-glass-edge);z-index:-1;pointer-events:none;transition:border-radius .15s var(--ds-ease-in-out);position:absolute;inset:0}[data-dsh-glass-float] body[data-ds-dark-theme] [class*=sidebarCol]{border-right-color:color-mix(in srgb, var(--dsw-alias-brand-primary-new-colorprimary-new-color) 22%, transparent)}[data-dsh-glass-float] [data-dsh-glass-frame][data-sidebar-collapsed] [class*=sidebarCol]{transition:margin .15s var(--ds-ease-in-out), border-radius .15s var(--ds-ease-in-out);border-radius:16px;margin:12px -12px 12px 12px;padding:0}[data-dsh-glass-float] [data-dsh-glass-frame]:not([data-sidebar-collapsed]) [data-dsh-glass-sidebar-root]{width:100%!important}[data-dsh-glass-float] [data-dsh-glass-trajectory]{border:1px solid var(--dsh-glass-rim);background:var(--dsh-glass-card);width:calc(100% - 32px);height:calc(100% - 20px);box-shadow:var(--dsh-glass-edge), var(--dsh-glass-drop);border-radius:20px;margin:8px 16px 12px;overflow:hidden}[data-dsh-glass-float] [data-dsh-glass-trajectory] [role=toolbar],[data-dsh-glass-float] [data-dsh-glass-trajectory] section[aria-label=Trajectory\\ timeline]{background:0 0}[data-dsh-glass-float] [data-composer-card],[data-dsh-glass-float] [data-composer-card]:after{border-radius:24px}[data-dsh-glass-float] [data-composer-card]{z-index:8;isolation:isolate;border:1px solid var(--dsh-glass-rim);box-shadow:var(--dsh-glass-drop);background:0 0;position:relative}[data-dsh-glass-float] [data-composer-card]:before{content:\"\";z-index:-1;border-radius:inherit;background:var(--dsh-glass-card);box-shadow:var(--dsh-glass-edge);backdrop-filter:blur(var(--dsh-glass-blur,14px));pointer-events:none;position:absolute;inset:0}[data-dsh-glass-float] [data-dsh-glass-inputbar]:not([class*=hero]):not(:has([data-dsh-glass-stats])){padding-bottom:12px}[data-dsh-glass][data-dsh-glass-float] [data-dsh-glass-inputbar]:has([data-dsh-glass-stats]){isolation:isolate;border:1px solid var(--dsh-glass-rim);box-shadow:var(--dsh-glass-drop);background:0 0;border-radius:24px;margin:0 auto 12px;padding:0;position:relative;width:var(--dsh-composer-card-max-width)!important;max-width:var(--dsh-composer-card-max-width)!important}[data-dsh-glass][data-dsh-glass-float] [data-dsh-glass-inputbar]:has([data-dsh-glass-stats]):before{content:\"\";z-index:-1;border-radius:inherit;background:var(--dsh-glass-card);box-shadow:var(--dsh-glass-edge);backdrop-filter:blur(var(--dsh-glass-blur,14px));pointer-events:none;position:absolute;inset:0}[data-dsh-glass-float] [data-dsh-glass-inputbar]:has([data-dsh-glass-stats]) [data-composer-card]{box-shadow:none;backdrop-filter:none;background:0 0;border:none;border-radius:0}[data-dsh-glass-float] [data-dsh-glass-inputbar]:has([data-dsh-glass-stats]) [data-composer-card]:before,[data-dsh-glass-float] [data-dsh-glass-inputbar]:has([data-dsh-glass-stats]) [data-composer-card]:after{display:none}[data-dsh-glass][data-dsh-glass-float] [data-dsh-glass-inputbar]:has([data-dsh-glass-stats]) [data-slot]{border:none;border-top:1px solid var(--dsh-glass-rim-soft);box-shadow:none;backdrop-filter:none;background:0 0;border-radius:0;margin:0;padding:2px 16px 6px;width:100%!important;max-width:none!important}[data-dsh-glass][data-dsh-glass-float] [data-dsh-glass-inputbar] [data-slot] [data-dsh-glass-stats]{min-width:0;box-shadow:none;backdrop-filter:none;background:0 0;border:none;border-radius:0;margin:0;width:100%!important;padding:4px 0 0!important}[data-dsh-glass][data-dsh-glass-float] [data-dsh-glass-inputbar] [data-slot] [data-dsh-live-tps]{padding-right:0}[data-dsh-glass-float] [role=treeitem][aria-selected=true]{background:color-mix(in srgb, var(--dsw-specific-sidebar-nav-item-active) 40%, transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--dsw-alias-brand-primary-new-colorprimary-new-color) 24%, transparent), 0 0 14px color-mix(in srgb, var(--dsw-alias-brand-primary-new-colorprimary-new-color) 12%, transparent)}[data-dsh-glass-float] button[class*=button]:hover:not(:disabled),[data-dsh-glass-float] [role=menuitem]:hover:not(:disabled){box-shadow:0 0 12px color-mix(in srgb, var(--dsw-alias-brand-primary-new-colorprimary-new-color) 20%, transparent), inset 0 0 0 1px color-mix(in srgb, var(--dsw-alias-border-l3) 60%, transparent)}[data-dsh-glass-float] [role=menu]{background:var(--dsh-glass-card-raised);border:1px solid var(--dsh-glass-rim-soft);backdrop-filter:blur(var(--dsh-glass-blur,14px))}[data-dsh-glass-float] [role=menu]:has([role=group]>[role=menuitemradio]){background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 70%, transparent)}[data-dsh-glass-float] [role=menu] [role=group]:has(>[role=menuitemradio])>:first-child{border:1px solid var(--dsh-glass-rim);background:var(--dsh-glass-card-raised);backdrop-filter:blur(var(--dsh-glass-blur,14px));border-radius:999px;align-items:center;width:fit-content;margin:3px 0 5px 6px;padding:3px 10px;display:inline-flex}[data-dsh-glass-float] [role=dialog][aria-modal=true]{background:var(--dsh-glass-card-raised);border:1px solid var(--dsh-glass-rim);box-shadow:var(--dsh-glass-edge);backdrop-filter:blur(var(--dsh-glass-blur,14px))}[data-dsh-glass] [data-conversation-scroll]{text-shadow:0 0 1px #ffffff80}[data-dsh-glass] body[data-ds-dark-theme] [data-conversation-scroll]{text-shadow:0 0 1px #0006}[data-dsh-glass-float] [data-dsh-glass-inputbar] [data-slot]{color:var(--dsw-alias-label-secondary)}[data-dsh-glass]{--dsh-glass-entry-scale:1}[data-dsh-glass-compat]{--dsh-glass-entry-scale:0}[data-dsh-glass] [data-phase=hero]{animation:dsh-glass-in calc(.32s * var(--dsh-glass-entry-scale,1)) var(--ds-ease-in-out)}[data-dsh-glass] [data-phase=active]{animation:dsh-glass-in calc(.3s * var(--dsh-glass-entry-scale,1)) var(--ds-ease-in-out)}[data-dsh-glass] [data-testid^=view-]{animation:dsh-glass-in calc(.26s * var(--dsh-glass-entry-scale,1)) var(--ds-ease-in-out)}[data-dsh-glass] [data-tool]{animation:dsh-glass-rise calc(.3s * var(--dsh-glass-entry-scale,1)) var(--ds-ease-in-out) both}[data-dsh-glass] [role=dialog]{animation:dsh-glass-dialog-in calc(.24s * var(--dsh-glass-entry-scale,1)) var(--ds-ease-in-out)}@keyframes dsh-glass-in{0%{opacity:0}}@keyframes dsh-glass-rise{0%{opacity:0;transform:translateY(6px)}}@keyframes dsh-glass-dialog-in{0%{opacity:0;transform:translateY(8px)scale(.985)}}[data-dsh-glass] :focus-visible{outline:2px solid color-mix(in srgb, var(--dsw-alias-brand-primary-new-colorprimary-new-color) 85%, transparent);outline-offset:1px}[data-dsh-glass] ::selection{background:color-mix(in srgb, var(--dsw-alias-brand-primary-new-colorprimary-new-color) 35%, transparent)}[data-dsh-glass-compat] [role=menu],[data-dsh-glass-compat] [class*=popover],[data-dsh-glass-compat] [class*=dropdown],[data-dsh-glass-compat] [data-sidebar-right-panel][data-sidebar-right-open],[data-dsh-glass-compat] [data-sidebar-right-panel][data-sidebar-right-open] [class*=panel]{backdrop-filter:blur(12px)}[data-dsh-glass-compat] [role=menu],[data-dsh-glass-compat] [class*=popover],[data-dsh-glass-compat] [class*=dropdown]{background:var(--dsh-glass-card-raised)}[data-dsh-glass-compat] [data-composer-card]{isolation:isolate;backdrop-filter:none;background:0 0;position:relative}[data-dsh-glass-compat] [data-composer-card]:before{content:\"\";z-index:-1;border-radius:inherit;background:var(--dsh-glass-card-raised);backdrop-filter:blur(12px);pointer-events:none;position:absolute;inset:0}[data-dsh-glass-compat] [role=menu]:not(:focus-visible),[data-dsh-glass-compat] [data-composer-card]:not(:focus-visible),[data-dsh-glass-compat] [class*=popover]:not(:focus-visible),[data-dsh-glass-compat] [class*=dropdown]:not(:focus-visible){outline:1px solid var(--dsh-glass-rim);outline-offset:-1px}[data-dsh-glass-compat] [role=dialog][aria-modal=true]{background:var(--dsh-glass-card-raised);border:1px solid var(--dsh-glass-rim);backdrop-filter:blur(var(--dsh-glass-blur,12px))}@media (prefers-reduced-motion:reduce){[data-dsh-glass] [data-phase=hero],[data-dsh-glass] [data-phase=active],[data-dsh-glass] [data-testid^=view-],[data-dsh-glass] [data-tool],[data-dsh-glass] [role=dialog]{animation:none}}";
593
+ const GLASS_CSS_TEXT = "[data-dsh-glass] body{--dsh-glass-card:color-mix(in srgb, var(--dsw-alias-bg-layer-1) calc(52% * var(--dsh-glass-frost,1)), transparent);--dsh-glass-card-raised:color-mix(in srgb, var(--dsw-alias-bg-layer-1) calc(64% * var(--dsh-glass-frost,1)), transparent);--dsh-glass-card-hover:color-mix(in srgb, var(--dsw-alias-bg-layer-1) calc(76% * var(--dsh-glass-frost,1)), transparent);--dsh-glass-rim:color-mix(in srgb, var(--dsw-alias-label-primary) 18%, transparent);--dsh-glass-rim-soft:color-mix(in srgb, var(--dsw-alias-label-primary) 12%, transparent);--dsh-glass-rim-strong:color-mix(in srgb, var(--dsw-alias-label-primary) 30%, transparent);--dsh-glass-edge:inset 0 1px 0 #ffffff6b;--dsh-glass-drop:0 10px 32px color-mix(in srgb, var(--dsw-alias-bg-mask-2) 38%, transparent);--dsh-glass-input-shadow:0 1px 2px color-mix(in srgb, var(--dsw-alias-bg-mask-2) 65%, transparent), 0 8px 24px color-mix(in srgb, var(--dsw-alias-bg-mask-2) 80%, transparent)}[data-dsh-glass] body[data-ds-dark-theme]{--dsh-glass-rim:color-mix(in srgb, var(--dsw-alias-label-primary) 24%, transparent);--dsh-glass-rim-soft:color-mix(in srgb, var(--dsw-alias-label-primary) 16%, transparent);--dsh-glass-rim-strong:color-mix(in srgb, var(--dsw-alias-label-primary) 30%, transparent);--dsh-glass-edge:inset 0 1px 0 #ffffff14;--dsh-glass-drop:0 10px 32px #02060e73;--dsh-glass-input-shadow:0 1px 2px color-mix(in srgb, var(--dsw-alias-bg-mask-2) 65%, transparent), 0 8px 24px color-mix(in srgb, var(--dsw-alias-bg-mask-2) 80%, transparent)}[data-dsh-glass] body{background:color-mix(in srgb, color-mix(in srgb, var(--dsw-alias-bg-base), #fff calc(var(--dsh-glass-brightness-white,0) * 100%)), #000 calc(var(--dsh-glass-brightness-black,0) * 100%))}[data-dsh-glass] [data-dsh-glass-frame],[data-dsh-glass] [data-phase],[data-dsh-glass] [data-dsh-glass-details]{background:0 0}[data-dsh-glass-float] [data-phase=active] header{z-index:8;position:relative}[data-dsh-glass-float] [class*=banner]{position:static}[data-dsh-glass-float] [data-phase=active] [data-conversation-scroll]{margin-top:-95px;padding-top:107px}[data-dsh-glass] [data-phase] [class*=composerSeat][class*=composerSeat]{background:0 0}[data-dsh-glass] [data-dsh-glass-fade]{z-index:7;pointer-events:none;backdrop-filter:blur(5px);background:#ffffff2e;height:13px;position:fixed;left:0;right:0}[data-dsh-glass] body[data-ds-dark-theme] [data-dsh-glass-fade]{background:#00000024}[data-dsh-glass] [data-dsh-glass-fade=top]{top:0;-webkit-mask-image:linear-gradient(#000 0%,#0000 100%);mask-image:linear-gradient(#000 0%,#0000 100%)}[data-dsh-glass][data-windows-titlebar] [data-dsh-glass-fade=top]{display:none}[data-dsh-glass] [data-dsh-glass-fade=bottom]{bottom:0;-webkit-mask-image:linear-gradient(#0000 0%,#000 100%);mask-image:linear-gradient(#0000 0%,#000 100%)}[data-dsh-glass-float] [data-menu-material=translucent],[data-dsh-glass-float] [role=menu]:not([data-menu-material]):not([data-menu-material] *),[data-dsh-glass-float] [role=dialog],[data-dsh-glass-float] [role=alert],[data-dsh-glass-float] [data-trigger-menu],[data-dsh-glass-float] [data-dsh-glass-surface]{border-radius:14px}[data-dsh-glass-float] [role=menuitem],[data-dsh-glass-float] [role=tooltip],[data-dsh-glass-float] [class*=pill]{border-radius:8px}[data-dsh-glass-float] button[class*=button]{border-radius:10px}[data-dsh-glass-float] [class*=iconButton],[data-dsh-glass-float] [class*=searchButton]{border-radius:8px}[data-dsh-glass-float] [class*=block]{--dsl-code-block-border-radius:14px;--dsl-diff-radius:14px;--dsl-read-radius:14px;--dsl-terminal-radius:14px;--dsl-web-radius:14px;--dsl-search-radius:14px;border-radius:14px}[data-dsh-glass-float] [data-dsh-glass-add]{background:var(--dsh-glass-card-raised);border:1px solid var(--dsh-glass-rim);box-shadow:var(--dsh-glass-edge);backdrop-filter:blur(var(--dsh-glass-blur,14px))}[data-dsh-glass-float] [data-dsh-glass-add]:hover:not(:disabled){background:var(--dsh-glass-card-hover)}[data-dsh-glass-float] [data-dsh-glass-surface]{background:var(--dsh-glass-card-raised);border:1px solid var(--dsh-glass-rim);box-shadow:var(--dsh-glass-edge);backdrop-filter:blur(var(--dsh-glass-blur,14px))}[data-dsh-glass-float] [data-dsh-glass-surface]:hover:not(:disabled){background:var(--dsh-glass-card-hover)}[data-dsh-glass-float] [data-conversation-scroll] [class*=bubble]{border:1px solid var(--dsh-glass-rim-soft);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) calc(46% * var(--dsh-glass-frost,1)), transparent);border-radius:14px}[data-dsh-glass-float] [class*=card]{border-radius:14px}[data-dsh-glass] [data-dsh-glass-settings]{--dsh-glass-settings-raised:calc(38% + 38% * var(--dsh-glass-frost,1));--dsh-glass-settings-soft:calc(30% + 30% * var(--dsh-glass-frost,1));--dsw-alias-bg-module-platform:color-mix(in srgb, var(--dsw-static-neutral-bluish-800) var(--dsh-glass-settings-raised), transparent);--dsw-alias-bg-layer-3:color-mix(in srgb, var(--dsw-static-neutral-bluish-800) var(--dsh-glass-settings-soft), transparent);--dsw-alias-bg-layer-2:color-mix(in srgb, var(--dsw-static-neutral-bluish-850) var(--dsh-glass-settings-raised), transparent);--dsw-alias-bg-layer-1:color-mix(in srgb, var(--dsw-static-neutral-bluish-850) var(--dsh-glass-settings-soft), transparent);--dsw-specific-sidebar-nav-item-active:color-mix(in srgb, var(--dsw-static-neutral-bluish-750) var(--dsh-glass-settings-raised), transparent);--dsw-specific-sidebar-nav-item-hover:color-mix(in srgb, var(--dsw-static-neutral-bluish-850) var(--dsh-glass-settings-soft), transparent)}[data-dsh-glass] body:not([data-ds-dark-theme]) [data-dsh-glass-settings]{--dsw-alias-bg-module-platform:color-mix(in srgb, var(--dsw-static-neutral-bluish-60) var(--dsh-glass-settings-raised), transparent);--dsw-alias-bg-layer-3:color-mix(in srgb, var(--dsw-static-neutral-bluish-00) var(--dsh-glass-settings-soft), transparent);--dsw-alias-bg-layer-2:color-mix(in srgb, var(--dsw-static-neutral-bluish-00) var(--dsh-glass-settings-raised), transparent);--dsw-alias-bg-layer-1:color-mix(in srgb, var(--dsw-static-neutral-bluish-00) var(--dsh-glass-settings-soft), transparent);--dsw-specific-sidebar-nav-item-active:color-mix(in srgb, var(--dsw-static-neutral-bluish-100) var(--dsh-glass-settings-raised), transparent);--dsw-specific-sidebar-nav-item-hover:color-mix(in srgb, var(--dsw-static-neutral-bluish-75) var(--dsh-glass-settings-soft), transparent)}[data-dsh-glass-float] [data-phase] header{border:1px solid var(--dsh-glass-rim);background:var(--dsh-glass-card);box-shadow:var(--dsh-glass-edge), var(--dsh-glass-drop);backdrop-filter:blur(var(--dsh-glass-blur,14px));border-radius:20px;margin:12px 16px 0;padding:10px 16px 8px}[data-dsh-glass-float] [data-phase] header:after{display:none}[data-dsh-glass-float] [data-dsh-glass-frame][data-sidebar-collapsed] [data-phase] header{margin-left:28px}[data-dsh-glass-float] [class*=sidebarCol]{--dsw-specific-sidebar-fill:transparent;z-index:9;border:1px solid var(--dsh-glass-rim);box-shadow:var(--dsh-glass-drop);border-radius:20px;margin:12px;padding:10px 12px 14px;position:relative;overflow:hidden}[data-dsh-glass-float] [class*=sidebarCol]:before{content:\"\";border-radius:inherit;background:var(--dsh-glass-card);box-shadow:var(--dsh-glass-edge);z-index:-1;pointer-events:none;transition:border-radius .15s var(--ds-ease-in-out);position:absolute;inset:0}[data-dsh-glass-float] [data-dsh-glass-frame][data-sidebar-collapsed] [class*=sidebarCol]{transition:margin .15s var(--ds-ease-in-out), border-radius .15s var(--ds-ease-in-out);border-radius:16px;margin:12px -12px 12px 12px;padding:0}[data-dsh-glass-float] [data-dsh-glass-frame]:not([data-sidebar-collapsed]) [data-dsh-glass-sidebar-root]{width:100%!important}[data-dsh-glass-float] [data-dsh-glass-trajectory]{border:1px solid var(--dsh-glass-rim);background:var(--dsh-glass-card);width:calc(100% - 32px);height:calc(100% - 20px);box-shadow:var(--dsh-glass-edge), var(--dsh-glass-drop);border-radius:20px;margin:8px 16px 12px;overflow:hidden}[data-dsh-glass-float] [data-dsh-glass-trajectory] [role=toolbar],[data-dsh-glass-float] [data-dsh-glass-trajectory] section[aria-label=Trajectory\\ timeline]{background:0 0}[data-dsh-glass-float] [data-composer-card],[data-dsh-glass-float] [data-composer-card]:after{border-radius:24px}[data-dsh-glass-float] [data-composer-card]{z-index:8;isolation:isolate;border:1px solid var(--dsh-glass-rim-strong);box-shadow:var(--dsh-glass-input-shadow);background:0 0;position:relative}[data-dsh-glass-float] [data-composer-card]:before{content:\"\";z-index:-1;border-radius:inherit;background:var(--dsh-glass-card);box-shadow:var(--dsh-glass-edge);backdrop-filter:blur(var(--dsh-glass-blur,14px));pointer-events:none;position:absolute;inset:0}[data-dsh-glass-float] [data-dsh-glass-inputbar]:not([class*=hero]):not(:has([data-dsh-glass-stats])){padding-bottom:12px}[data-dsh-glass-float] [role=treeitem][aria-selected=true]{background:color-mix(in srgb, var(--dsw-specific-sidebar-nav-item-active) 40%, transparent);box-shadow:0 0 14px color-mix(in srgb, var(--dsw-alias-brand-primary-new-colorprimary-new-color) 12%, transparent)}[data-dsh-glass-float] button[class*=button]:hover:not(:disabled),[data-dsh-glass-float] [role=menuitem]:hover:not(:disabled){box-shadow:0 0 12px color-mix(in srgb, var(--dsw-alias-brand-primary-new-colorprimary-new-color) 20%, transparent)}[data-dsh-glass-float] [data-menu-material=translucent]:not(:focus-visible){--dsw-menu-surface-fill:var(--dsh-glass-card-raised);--dsw-menu-backdrop-filter:blur(var(--dsh-glass-blur,14px));outline:1px solid var(--dsh-glass-rim-soft);outline-offset:-1px}[data-dsh-glass-float] [role=menu]:not([data-menu-material]):not([data-menu-material] *){background:var(--dsh-glass-card-raised);border:1px solid var(--dsh-glass-rim-soft);backdrop-filter:blur(var(--dsh-glass-blur,14px))}[data-dsh-glass-float] [data-menu-material=translucent]:has([role=group]>[role=menuitemradio]){--dsw-menu-surface-fill:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 70%, transparent)}[data-dsh-glass-float] [data-menu-group]:has(>[role=menuitemradio])>[data-menu-group-heading]{border:1px solid var(--dsh-glass-rim);background:var(--dsh-glass-card-raised);backdrop-filter:blur(var(--dsh-glass-blur,14px));border-radius:999px;align-items:center;width:fit-content;margin:3px 0 5px 6px;padding:3px 10px;display:inline-flex}[data-dsh-glass-float] [role=dialog][aria-modal=true]{background:var(--dsh-glass-card-raised);border:1px solid var(--dsh-glass-rim);box-shadow:var(--dsh-glass-edge);backdrop-filter:blur(var(--dsh-glass-blur,14px))}[data-dsh-glass] [data-conversation-scroll]{text-shadow:0 0 1px #ffffff80}[data-dsh-glass] body[data-ds-dark-theme] [data-conversation-scroll]{text-shadow:0 0 1px #0006}[data-dsh-glass-float] [data-dsh-glass-inputbar] [data-slot]{color:var(--dsw-alias-label-secondary)}[data-dsh-glass]{--dsh-glass-entry-scale:1}[data-dsh-glass-compat]{--dsh-glass-entry-scale:0}[data-dsh-glass] [data-phase=hero]{animation:dsh-glass-in calc(.32s * var(--dsh-glass-entry-scale,1)) var(--ds-ease-in-out)}[data-dsh-glass] [data-phase=active]{animation:dsh-glass-in calc(.3s * var(--dsh-glass-entry-scale,1)) var(--ds-ease-in-out)}[data-dsh-glass] [data-testid^=view-]{animation:dsh-glass-in calc(.26s * var(--dsh-glass-entry-scale,1)) var(--ds-ease-in-out)}[data-dsh-glass] [data-tool]{animation:dsh-glass-rise calc(.3s * var(--dsh-glass-entry-scale,1)) var(--ds-ease-in-out) both}[data-dsh-glass] [role=dialog]{animation:dsh-glass-dialog-in calc(.24s * var(--dsh-glass-entry-scale,1)) var(--ds-ease-in-out)}@keyframes dsh-glass-in{0%{opacity:0}}@keyframes dsh-glass-rise{0%{opacity:0;transform:translateY(6px)}}@keyframes dsh-glass-dialog-in{0%{opacity:0;transform:translateY(8px)scale(.985)}}[data-dsh-glass] :focus-visible{outline:2px solid color-mix(in srgb, var(--dsw-alias-brand-primary-new-colorprimary-new-color) 85%, transparent);outline-offset:1px}[data-dsh-glass] ::selection{background:color-mix(in srgb, var(--dsw-alias-brand-primary-new-colorprimary-new-color) 35%, transparent)}[data-dsh-glass-compat] [role=menu]:not([data-menu-material]):not([data-menu-material] *),[data-dsh-glass-compat] [class*=popover],[data-dsh-glass-compat] [class*=dropdown]{backdrop-filter:blur(12px)}[data-dsh-glass-compat] [data-menu-material=translucent]:not(:focus-visible){--dsw-menu-surface-fill:var(--dsh-glass-card-raised);--dsw-menu-backdrop-filter:blur(12px);outline:1px solid var(--dsh-glass-rim);outline-offset:-1px}[data-dsh-glass-compat] [data-sidebar-right-panel][data-sidebar-right-open],[data-dsh-glass-compat] [data-sidebar-right-panel][data-sidebar-right-open] [class*=panel]{backdrop-filter:blur(12px)}[data-dsh-glass-compat] [role=menu]:not([data-menu-material]):not([data-menu-material] *),[data-dsh-glass-compat] [class*=popover],[data-dsh-glass-compat] [class*=dropdown]{background:var(--dsh-glass-card-raised)}[data-dsh-glass-compat] [data-composer-card]{isolation:isolate;backdrop-filter:none;background:0 0;position:relative}[data-dsh-glass-compat] [data-composer-card]:before{content:\"\";z-index:-1;border-radius:inherit;background:var(--dsh-glass-card-raised);backdrop-filter:blur(12px);pointer-events:none;position:absolute;inset:0}[data-dsh-glass-compat] [role=menu]:not([data-menu-material]):not([data-menu-material] *):not(:focus-visible),[data-dsh-glass-compat] [data-composer-card]:not(:focus-visible),[data-dsh-glass-compat] [class*=popover]:not(:focus-visible),[data-dsh-glass-compat] [class*=dropdown]:not(:focus-visible){outline:1px solid var(--dsh-glass-rim);outline-offset:-1px}[data-dsh-glass-compat] [role=dialog][aria-modal=true]{background:var(--dsh-glass-card-raised);border:1px solid var(--dsh-glass-rim);backdrop-filter:blur(var(--dsh-glass-blur,12px))}@media (prefers-reduced-motion:reduce){[data-dsh-glass] [data-phase=hero],[data-dsh-glass] [data-phase=active],[data-dsh-glass] [data-testid^=view-],[data-dsh-glass] [data-tool],[data-dsh-glass] [role=dialog]{animation:none}}";
594
594
  /** Legacy settings namespace (DSH <= 0.1.6-alpha.2): the Host registers it
595
595
  * through `settings.installSection`, the Client binds it through
596
596
  * `ctx.settingsScope` (see `src/settings-catppuccin.ts`). */
@@ -638,7 +638,7 @@ window.__ModuleLoader__.load({
638
638
  const DEFAULT_GLASS = {
639
639
  enabled: false,
640
640
  mode: "mica",
641
- blur: 2,
641
+ blur: 5,
642
642
  frost: 20,
643
643
  brightness: 50
644
644
  };
@@ -766,7 +766,7 @@ window.__ModuleLoader__.load({
766
766
  * Shipped knob defaults — the knob-only view of `DEFAULT_GLASS` in
767
767
  * `src/state.ts` (the single source of truth, inlined into both bundles).
768
768
  * The shipped look aligns with the reference project
769
- * (DSH-Transparent-UI-Plugin / Aqua): mica mode, blur 2px, frost 20
769
+ * (DSH-Transparent-UI-Plugin / Aqua): mica mode, blur 5px, frost 20
770
770
  * (the 0-100 slider maps to a 0-1.4 alpha multiplier via frost/50, so 20
771
771
  * reads as a light frost) and neutral backdrop brightness.
772
772
  */
@@ -1424,6 +1424,67 @@ window.__ModuleLoader__.load({
1424
1424
  });
1425
1425
  }
1426
1426
  //#endregion
1427
+ //#region src/client/LinksRow.tsx
1428
+ /**
1429
+ * GitHub repository — where a star lands. Keep the `-theme` name: it is the
1430
+ * current repo name (the pre-rename URL only redirects), and only COMPLETE
1431
+ * GitHub URLs use it (AGENTS.md「项目身份速览:三套名字」).
1432
+ */
1433
+ const REPO_URL = "https://github.com/NoNameLeGo/dsh-catppuccin-theme";
1434
+ /** GitHub issue tracker — where feedback lands. */
1435
+ const ISSUES_URL = `${REPO_URL}/issues`;
1436
+ /** The row's links: token-coloured, underlined, quiet. */
1437
+ const linkStyle = {
1438
+ color: "var(--dsw-alias-state-business-primary)",
1439
+ fontSize: 12,
1440
+ lineHeight: "18px",
1441
+ textDecoration: "underline",
1442
+ textUnderlineOffset: 3
1443
+ };
1444
+ /**
1445
+ * Render the feedback row: a title and the two links.
1446
+ * @param props - composed slot props.
1447
+ * @returns the row element tree.
1448
+ */
1449
+ function LinksRow({ t }) {
1450
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1451
+ style: {
1452
+ borderBottom: "1px solid var(--dsw-alias-border-l2)",
1453
+ display: "flex",
1454
+ flexDirection: "column",
1455
+ gap: "10px",
1456
+ padding: "16px 0"
1457
+ },
1458
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1459
+ style: {
1460
+ color: "var(--dsw-alias-label-primary)",
1461
+ fontSize: 14,
1462
+ lineHeight: "22px"
1463
+ },
1464
+ children: t("links.title")
1465
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1466
+ style: {
1467
+ display: "flex",
1468
+ flexWrap: "wrap",
1469
+ gap: "16px"
1470
+ },
1471
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
1472
+ href: ISSUES_URL,
1473
+ target: "_blank",
1474
+ rel: "noreferrer noopener",
1475
+ style: linkStyle,
1476
+ children: t("links.issue")
1477
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
1478
+ href: REPO_URL,
1479
+ target: "_blank",
1480
+ rel: "noreferrer noopener",
1481
+ style: linkStyle,
1482
+ children: t("links.star")
1483
+ })]
1484
+ })]
1485
+ });
1486
+ }
1487
+ //#endregion
1427
1488
  //#region src/client/UpdateRow.tsx
1428
1489
  /**
1429
1490
  * Update-check settings row — one General-section preference row that asks
@@ -1950,7 +2011,7 @@ window.__ModuleLoader__.load({
1950
2011
  //#endregion
1951
2012
  //#region src/client/detail-card.tsx
1952
2013
  /**
1953
- * Render the three preference rows on the plugin's own detail page.
2014
+ * Render the four preference rows on the plugin's own detail page.
1954
2015
  *
1955
2016
  * The rows carry their own title, help affordance and spacing (a bottom
1956
2017
  * border each), so the card is a plain column — the page owns the section
@@ -1977,7 +2038,8 @@ window.__ModuleLoader__.load({
1977
2038
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(UpdateRow, {
1978
2039
  ...props.update,
1979
2040
  t: props.t
1980
- })
2041
+ }),
2042
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LinksRow, { t: props.t })
1981
2043
  ]
1982
2044
  });
1983
2045
  }
@@ -2063,7 +2125,10 @@ window.__ModuleLoader__.load({
2063
2125
  "update.err.noTags": "npm registry 未返回可用的版本标签。",
2064
2126
  "update.err.invalid": "npm registry 返回了无法解析的数据。",
2065
2127
  "update.err.networkLocal": "无法连接插件宿主——请检查你的网络后刷新页面重试。",
2066
- "update.err.networkUpstream": "npm registry 暂时不可用(请求超时),请稍后重试。"
2128
+ "update.err.networkUpstream": "npm registry 暂时不可用(请求超时),请稍后重试。",
2129
+ "links.title": "反馈与支持",
2130
+ "links.issue": "对 Catppuccin 外观插件有问题或建议?欢迎在 GitHub 提 Issue",
2131
+ "links.star": "喜欢这个 Catppuccin 外观插件?点一个 Star ⭐"
2067
2132
  };
2068
2133
  /** English dictionary, checked complete against the zh key set. */
2069
2134
  const en = {
@@ -2140,7 +2205,10 @@ window.__ModuleLoader__.load({
2140
2205
  "update.err.noTags": "The npm registry returned no usable version tags.",
2141
2206
  "update.err.invalid": "The npm registry returned unparseable data.",
2142
2207
  "update.err.networkLocal": "Could not reach the plugin host — check your network, then refresh the page.",
2143
- "update.err.networkUpstream": "The npm registry is temporarily unavailable (request timed out) — try again later."
2208
+ "update.err.networkUpstream": "The npm registry is temporarily unavailable (request timed out) — try again later.",
2209
+ "links.title": "Feedback & support",
2210
+ "links.issue": "Found a problem with the Catppuccin appearance plugin, or have an idea? Open an issue",
2211
+ "links.star": "Enjoying this Catppuccin appearance plugin? Star it on GitHub ⭐"
2144
2212
  };
2145
2213
  /** Japanese dictionary. */
2146
2214
  const ja = {
@@ -2217,7 +2285,10 @@ window.__ModuleLoader__.load({
2217
2285
  "update.err.noTags": "npm registry が利用可能なバージョンタグを返しませんでした。",
2218
2286
  "update.err.invalid": "npm registry が解析不能なデータを返しました。",
2219
2287
  "update.err.networkLocal": "プラグインのホストに接続できません。ネットワークを確認してページを更新してください。",
2220
- "update.err.networkUpstream": "npm registry が一時的に利用できません(タイムアウト)。後で再試行してください。"
2288
+ "update.err.networkUpstream": "npm registry が一時的に利用できません(タイムアウト)。後で再試行してください。",
2289
+ "links.title": "フィードバックとサポート",
2290
+ "links.issue": "Catppuccin 外観プラグインの問題や提案がありますか?Issue を作成",
2291
+ "links.star": "この Catppuccin 外観プラグインが気に入ったら GitHub でスターを ⭐"
2221
2292
  };
2222
2293
  /** Korean dictionary. */
2223
2294
  const ko = {
@@ -2294,7 +2365,10 @@ window.__ModuleLoader__.load({
2294
2365
  "update.err.noTags": "npm registry가 사용 가능한 버전 태그를 반환하지 않았습니다.",
2295
2366
  "update.err.invalid": "npm registry가 해석할 수 없는 데이터를 반환했습니다.",
2296
2367
  "update.err.networkLocal": "플러그인 호스트에 연결할 수 없습니다. 네트워크를 확인한 뒤 페이지를 새로고침하세요.",
2297
- "update.err.networkUpstream": "npm registry를 일시적으로 사용할 수 없습니다(시간 초과). 잠시 후 다시 시도하세요."
2368
+ "update.err.networkUpstream": "npm registry를 일시적으로 사용할 수 없습니다(시간 초과). 잠시 후 다시 시도하세요.",
2369
+ "links.title": "피드백 및 지원",
2370
+ "links.issue": "Catppuccin 테마 플러그인에 문제나 제안이 있나요? 이슈를 남겨 주세요",
2371
+ "links.star": "이 Catppuccin 테마 플러그인이 마음에 드셨다면 GitHub에서 스타를 ⭐"
2298
2372
  };
2299
2373
  /** Spanish dictionary. */
2300
2374
  const es = {
@@ -2371,7 +2445,10 @@ window.__ModuleLoader__.load({
2371
2445
  "update.err.noTags": "npm registry no devolvió etiquetas de versión utilizables.",
2372
2446
  "update.err.invalid": "npm registry devolvió datos no analizables.",
2373
2447
  "update.err.networkLocal": "No se pudo conectar con el host del plugin: revisa tu red y recarga la página.",
2374
- "update.err.networkUpstream": "npm registry no está disponible temporalmente (tiempo de espera agotado); inténtalo más tarde."
2448
+ "update.err.networkUpstream": "npm registry no está disponible temporalmente (tiempo de espera agotado); inténtalo más tarde.",
2449
+ "links.title": "Comentarios y soporte",
2450
+ "links.issue": "¿Un problema o una idea con el plugin de apariencia Catppuccin? Abre un issue",
2451
+ "links.star": "¿Te gusta este plugin de apariencia Catppuccin? Dale una estrella en GitHub ⭐"
2375
2452
  };
2376
2453
  /** French dictionary. */
2377
2454
  const fr = {
@@ -2448,7 +2525,10 @@ window.__ModuleLoader__.load({
2448
2525
  "update.err.noTags": "npm registry n'a renvoyé aucune étiquette de version utile.",
2449
2526
  "update.err.invalid": "npm registry a renvoyé des données non analysables.",
2450
2527
  "update.err.networkLocal": "Impossible de joindre l'hôte du plugin — vérifiez votre réseau puis rechargez la page.",
2451
- "update.err.networkUpstream": "npm registry est temporairement indisponible (délai dépassé) — réessayez plus tard."
2528
+ "update.err.networkUpstream": "npm registry est temporairement indisponible (délai dépassé) — réessayez plus tard.",
2529
+ "links.title": "Retours et support",
2530
+ "links.issue": "Un problème ou une idée pour le plugin d'apparence Catppuccin ? Ouvrez une issue",
2531
+ "links.star": "Vous aimez ce plugin d'apparence Catppuccin ? Laissez une Star sur GitHub ⭐"
2452
2532
  };
2453
2533
  /** German dictionary. */
2454
2534
  const de = {
@@ -2525,7 +2605,10 @@ window.__ModuleLoader__.load({
2525
2605
  "update.err.noTags": "npm registry lieferte keine brauchbaren Versions-Tags.",
2526
2606
  "update.err.invalid": "npm registry lieferte nicht analysierbare Daten.",
2527
2607
  "update.err.networkLocal": "Plugin-Host nicht erreichbar – prüfen Sie Ihre Verbindung und laden Sie die Seite neu.",
2528
- "update.err.networkUpstream": "npm registry ist vorübergehend nicht verfügbar (Zeitüberschreitung) – versuchen Sie es später erneut."
2608
+ "update.err.networkUpstream": "npm registry ist vorübergehend nicht verfügbar (Zeitüberschreitung) – versuchen Sie es später erneut.",
2609
+ "links.title": "Feedback & Support",
2610
+ "links.issue": "Problem oder Idee zum Catppuccin-Design-Plugin? Eröffnen Sie ein Issue",
2611
+ "links.star": "Gefällt Ihnen dieses Catppuccin-Design-Plugin? Geben Sie ihm einen Star auf GitHub ⭐"
2529
2612
  };
2530
2613
  const CATPPUCCIN_FLAVORS = [
2531
2614
  {
@@ -3446,6 +3529,50 @@ window.__ModuleLoader__.load({
3446
3529
  * slow-but-alive registry lookup is never cut off client-side. */
3447
3530
  const UPDATE_CHECK_CLIENT_TIMEOUT_MS = 15e3;
3448
3531
  //#endregion
3532
+ //#region src/registration-tolerance.ts
3533
+ /**
3534
+ * Fault-tolerant registration for the plugin's boot-critical wiring.
3535
+ *
3536
+ * Client and Host share one failure shape: an entry whose `apply()` throws is
3537
+ * marked `failed`, the assembly aborts the whole boot (`web boot: N entries
3538
+ * did not activate`), and the official desktop's crash rescue then runs
3539
+ * `disableAllPlugins()` — taking EVERY third-party plugin down with it. A peer
3540
+ * plugin already owning what we are about to register is the realistic
3541
+ * trigger (language packs and their BCP 47 ids — issue #23; a duplicate
3542
+ * install and its route / slot / theme ids), and the right answer to
3543
+ * "someone else already did this" is to skip OUR copy — never to fail the
3544
+ * boot. Full evidence chain and the per-call-site audit live in
3545
+ * `docs/issue-23-registration-tolerance.md`.
3546
+ *
3547
+ * Known "already owned" shapes are skipped quietly — the peer's registration
3548
+ * stands, matching `dsh-locale-pack`'s own tolerance. Anything else is logged
3549
+ * and skipped too: no registration in this plugin is worth the user's whole
3550
+ * plugin set. (To restore fail-fast for a class of errors, `throw error` in
3551
+ * the warn branch — every call site routes through here on purpose.)
3552
+ */
3553
+ /** The "another party already owns this" messages the runtimes throw, checked
3554
+ * against the 0.2.0-rc.2 sources (table in the doc's §6):
3555
+ * - `locale "ja" is already registered` (dsh-client-locale addLanguage)
3556
+ * - `locale namespace "…" already has locale "…"` (dsh-client-locale register)
3557
+ * - `theme "…" is already registered` (dsh-client-ui-theme register)
3558
+ * - `list slot "…" already has an entry with id "…"` (dsh-client-ui-slots)
3559
+ * - `webserver: duplicate exact route "…"` (dsh-host-webserver register) */
3560
+ const ALREADY_OWNED = /already (?:registered|has locale|has an entry)|duplicate .*route/u;
3561
+ /**
3562
+ * Run one registration call, degrading any failure to a no-op disposer.
3563
+ * @param run - the registration call, returning its disposer (if any).
3564
+ * @returns the real disposer, or a no-op when the registration was skipped.
3565
+ */
3566
+ function tolerantRegistration(run) {
3567
+ try {
3568
+ return run() ?? (() => {});
3569
+ } catch (error) {
3570
+ const message = error instanceof Error ? error.message : String(error);
3571
+ if (!ALREADY_OWNED.test(message)) console.warn(`[dsh-catppuccin] registration skipped — ${message}`);
3572
+ return () => {};
3573
+ }
3574
+ }
3575
+ //#endregion
3449
3576
  //#region src/client/state-sync.ts
3450
3577
  /** The snapshot an unbound scope reports: the pre-0.5.0 "transport absent"
3451
3578
  * degradation, where localStorage is the only store. */
@@ -3968,40 +4095,40 @@ window.__ModuleLoader__.load({
3968
4095
  function apply(ctx) {
3969
4096
  ctx.effect(() => {
3970
4097
  const disposers = [
3971
- ctx.locale.register(NS, {
4098
+ tolerantRegistration(() => ctx.locale.register(NS, {
3972
4099
  zh,
3973
4100
  en
3974
- }),
3975
- ctx.locale.register(NS, "ja", ja),
3976
- ctx.locale.register(NS, "ko", ko),
3977
- ctx.locale.register(NS, "es", es),
3978
- ctx.locale.register(NS, "fr", fr),
3979
- ctx.locale.register(NS, "de", de),
3980
- ctx.locale.addLanguage({
4101
+ })),
4102
+ tolerantRegistration(() => ctx.locale.register(NS, "ja", ja)),
4103
+ tolerantRegistration(() => ctx.locale.register(NS, "ko", ko)),
4104
+ tolerantRegistration(() => ctx.locale.register(NS, "es", es)),
4105
+ tolerantRegistration(() => ctx.locale.register(NS, "fr", fr)),
4106
+ tolerantRegistration(() => ctx.locale.register(NS, "de", de)),
4107
+ tolerantRegistration(() => ctx.locale.addLanguage({
3981
4108
  id: "ja",
3982
4109
  label: "日本語",
3983
4110
  fallback: "en"
3984
- }),
3985
- ctx.locale.addLanguage({
4111
+ })),
4112
+ tolerantRegistration(() => ctx.locale.addLanguage({
3986
4113
  id: "ko",
3987
4114
  label: "한국어",
3988
4115
  fallback: "en"
3989
- }),
3990
- ctx.locale.addLanguage({
4116
+ })),
4117
+ tolerantRegistration(() => ctx.locale.addLanguage({
3991
4118
  id: "es",
3992
4119
  label: "Español",
3993
4120
  fallback: "en"
3994
- }),
3995
- ctx.locale.addLanguage({
4121
+ })),
4122
+ tolerantRegistration(() => ctx.locale.addLanguage({
3996
4123
  id: "fr",
3997
4124
  label: "Français",
3998
4125
  fallback: "en"
3999
- }),
4000
- ctx.locale.addLanguage({
4126
+ })),
4127
+ tolerantRegistration(() => ctx.locale.addLanguage({
4001
4128
  id: "de",
4002
4129
  label: "Deutsch",
4003
4130
  fallback: "en"
4004
- })
4131
+ }))
4005
4132
  ];
4006
4133
  return () => {
4007
4134
  for (const dispose of disposers) dispose();
@@ -4013,7 +4140,7 @@ window.__ModuleLoader__.load({
4013
4140
  if (themeDisposers.has(flavor.themeId)) return;
4014
4141
  const flavorId = flavor.themeId.replace("catppuccin-", "");
4015
4142
  const shiki = SHIKI_TOKENS[flavorId][readShikiStyle()];
4016
- const disposer = theme.register({
4143
+ const disposer = tolerantRegistration(() => theme.register({
4017
4144
  id: flavor.themeId,
4018
4145
  colorScheme: flavor.colorScheme,
4019
4146
  tokens: {
@@ -4022,7 +4149,7 @@ window.__ModuleLoader__.load({
4022
4149
  ...menuSurfaceFor(hostHasMenuBlur()),
4023
4150
  ...readOverrides()
4024
4151
  }
4025
- });
4152
+ }));
4026
4153
  themeDisposers.set(flavor.themeId, disposer);
4027
4154
  };
4028
4155
  const ensureThemeRegistered = (themeId) => {
@@ -4228,7 +4355,9 @@ window.__ModuleLoader__.load({
4228
4355
  select: (choice) => {
4229
4356
  if (choice === "off") {
4230
4357
  writeFlavor("off");
4231
- theme.setTheme(readRestoredPreference());
4358
+ try {
4359
+ theme.setTheme(readRestoredPreference());
4360
+ } catch {}
4232
4361
  queuePersist();
4233
4362
  return;
4234
4363
  }
@@ -4236,7 +4365,9 @@ window.__ModuleLoader__.load({
4236
4365
  if (!flavor) return;
4237
4366
  writeFlavor(flavor.themeId);
4238
4367
  ensureThemeRegistered(flavor.themeId);
4239
- theme.setTheme(flavor.themeId);
4368
+ try {
4369
+ theme.setTheme(flavor.themeId);
4370
+ } catch {}
4240
4371
  queuePersist();
4241
4372
  },
4242
4373
  overrides: overridesSnapshot,
@@ -4260,13 +4391,13 @@ window.__ModuleLoader__.load({
4260
4391
  };
4261
4392
  }
4262
4393
  });
4263
- ctx.slots.inject("settings.general.item", () => ctx.slots.register({
4394
+ ctx.slots.inject("settings.general.item", () => tolerantRegistration(() => ctx.slots.register({
4264
4395
  name: "settings.general.item",
4265
4396
  id: "catppuccin",
4266
4397
  order: 20,
4267
4398
  locale: NS,
4268
4399
  inject: injected
4269
- }, CatppuccinRow));
4400
+ }, CatppuccinRow)));
4270
4401
  const glassInjected = () => ({
4271
4402
  getState: () => glass.getSnapshot(),
4272
4403
  subscribe: (listener) => glass.subscribe(listener),
@@ -4289,13 +4420,13 @@ window.__ModuleLoader__.load({
4289
4420
  glass.resetDefaults();
4290
4421
  }
4291
4422
  });
4292
- ctx.slots.inject("settings.general.item", () => ctx.slots.register({
4423
+ ctx.slots.inject("settings.general.item", () => tolerantRegistration(() => ctx.slots.register({
4293
4424
  name: "settings.general.item",
4294
4425
  id: "catppuccin-glass",
4295
4426
  order: 21,
4296
4427
  locale: NS,
4297
4428
  inject: glassInjected
4298
- }, GlassRow));
4429
+ }, GlassRow)));
4299
4430
  const updateInjected = () => ({
4300
4431
  check: async (channel) => {
4301
4432
  try {
@@ -4341,13 +4472,19 @@ window.__ModuleLoader__.load({
4341
4472
  activeLocale: () => ctx.locale.getLocale().active,
4342
4473
  subscribeLocale: (listener) => ctx.locale.subscribe(listener)
4343
4474
  });
4344
- ctx.slots.inject("settings.general.item", () => ctx.slots.register({
4475
+ ctx.slots.inject("settings.general.item", () => tolerantRegistration(() => ctx.slots.register({
4345
4476
  name: "settings.general.item",
4346
4477
  id: "catppuccin-update",
4347
4478
  order: 22,
4348
4479
  locale: NS,
4349
4480
  inject: updateInjected
4350
- }, UpdateRow));
4481
+ }, UpdateRow)));
4482
+ ctx.slots.inject("settings.general.item", () => tolerantRegistration(() => ctx.slots.register({
4483
+ name: "settings.general.item",
4484
+ id: "catppuccin-links",
4485
+ order: 23,
4486
+ locale: NS
4487
+ }, LinksRow)));
4351
4488
  const detailInjected = () => ({
4352
4489
  flavor: injected(),
4353
4490
  glass: glassInjected(),
@@ -4356,12 +4493,12 @@ window.__ModuleLoader__.load({
4356
4493
  ctx.inject(["configForms"], (formsCtx) => {
4357
4494
  const forms = formsCtx.configForms;
4358
4495
  if (typeof forms.whileServed !== "function") return;
4359
- return forms.whileServed([CATPPUCCIN_ENTRY_ID], () => ctx.slots.inject("plugins.bundle.config", () => ctx.slots.register({
4496
+ return forms.whileServed([CATPPUCCIN_ENTRY_ID], () => ctx.slots.inject("plugins.bundle.config", () => tolerantRegistration(() => ctx.slots.register({
4360
4497
  name: "plugins.bundle.config",
4361
4498
  key: PACKAGE_NAME,
4362
4499
  locale: NS,
4363
4500
  inject: detailInjected
4364
- }, CatppuccinDetailCard)));
4501
+ }, CatppuccinDetailCard))));
4365
4502
  });
4366
4503
  }
4367
4504
  //#endregion