@linxin666/dsh-pet 0.1.12 → 0.1.13

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.
@@ -0,0 +1,6 @@
1
+ # Bilingual-pair consistency record (docs/i18n.md): the git blob hash of each
2
+ # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
+ # after editing either side, bring the other along and re-record with:
4
+ # node scripts/verify-docs.mjs --write <dir>
5
+ README.md: 6de6b9e5520f85dba7c98490157a939963e2865d
6
+ README.zh.md: ad16832b07def470629863af0f1701ad9ef90f94
package/README.md CHANGED
@@ -1,85 +1,85 @@
1
- # dsh-pet — 鲸鱼娘宠物插件
1
+ # dsh-pet — Whale-girl pet plugin
2
2
 
3
- ![version](https://img.shields.io/badge/version-0.1.0-4f8ef7) ![license](https://img.shields.io/badge/license-BSD--3--Clause-9b59b6) ![platform](https://img.shields.io/badge/platform-DSH%20Web-00c2a8) ![language](https://img.shields.io/badge/language-TypeScript-3178c6)
3
+ English | [中文](README.zh.md)
4
4
 
5
- > 一只软萌治愈的鲸鱼娘,陪你在 DeepSeek Harness 里工作。
5
+ > A soft, healing whale-girl who works alongside you in DeepSeek Harness.
6
6
 
7
- 模型思考的时候你在等,她在游。她会跟着模型的工作状态切换动画——干活、等待、思考、庆祝完成;你还可以摸头、喂小鱼干,看着她从幼鲸慢慢长成你的深海羁绊。
7
+ While the model thinks, you wait — she swims. She follows the model's working state and switches animations — working, waiting, thinking, celebrating completion; you can also pat her head, feed her dried fish, and watch her grow from a baby whale into your deep-sea bond.
8
8
 
9
- 复刻自 Codex 桌面版的宠物功能,以 DSH 官方插件形态实现(cordis bundlehost 半区 + client 半区单包)。
9
+ Re-implemented from the pet feature of the Codex desktop app, as an official DSH plugin shape (cordis bundle: host half + client half in one package).
10
10
 
11
- ## 功能
11
+ ## Features
12
12
 
13
- | 功能 | 说明 |
13
+ | Feature | Description |
14
14
  |---|---|
15
- | 状态动画 | 模型状态鲸鱼娘动画:`thinking/tool → 工作`、`waiting → 等待`、`done → 跳跃庆祝`、空闲 `idle` 呼吸待机 |
16
- | 摸头互动 | 点击鲸鱼娘气泡反馈 + 亲密度 +110s 冷却) |
17
- | 喂食 | 悬浮面板「喂食」→ 消耗 1 条小鱼干 + 亲密度 +530s 冷却) |
18
- | 饲料经济 | 小鱼干库存(上限 20):工作每 3 回合 +1 条、每 30 分钟 +1 条;库存不足会提示「多陪鲸鱼娘工作一会儿」 |
19
- | 亲密度 | 每完成一个回合 +14 个等级:幼鲸 → 伙伴 → 挚友 → 深海羁绊(100 点封顶) |
20
- | 自定义命名 | 悬浮面板「改名」→ 1–20 字符,持久化,召唤按钮/面板同步显示 |
21
- | 拖动 | 按住鲸鱼娘拖动重新摆放,位置持久化 |
22
- | 隐藏/召唤 | 悬浮面板「隐藏」;隐藏后输入选择行出现「召唤{名字}」按钮 |
23
- | 状态气泡 | 工作时显示模型当前状态短语 |
15
+ | State animation | Model state whale-girl animation: `thinking/tool → working`, `waiting → waiting`, `done → jumping celebration`, idle breathes standby |
16
+ | Head-pat interaction | Click the whale-girl bubble feedback + affinity +1 (10s cooldown) |
17
+ | Feeding | Hover panel "喂食" (Feed) → consumes 1 dried fish + affinity +5 (30s cooldown) |
18
+ | Treat economy | Dried-fish stock (cap 20): +1 every 3 rounds of work, +1 every 30 minutes; when low it prompts "多陪鲸鱼娘工作一会儿" (Work with the whale-girl a bit more) |
19
+ | Affinity | +1 per round completed; 4 levels: 幼鲸 (baby whale) → 伙伴 (companion) → 挚友 (close friend) 深海羁绊 (deep-sea bond, capped at 100) |
20
+ | Custom naming | Hover panel "改名" (Rename) → 1–20 characters, persisted, echoed in the summon button/panel |
21
+ | Dragging | Hold and drag the whale-girl to reposition; position persisted |
22
+ | Hide/Summon | Hover panel "隐藏" (Hide); after hiding, a "召唤{name}" (Summon {name}) button appears in the input selector row |
23
+ | Status bubble | While working, shows the model's current status phrase |
24
24
 
25
- ## 动画演示
25
+ ## Animation preview
26
26
 
27
- 素材为 8 × 9 行图集(192×208 单元),由 [hatch-pet](https://github.com/dsh2026) 流水线生成,以下为各状态动画预览:
27
+ The sprites are an 8-column × 9-row atlas (192×208 cells) generated by the [hatch-pet](https://github.com/dsh2026) pipeline; below are previews of each state:
28
28
 
29
- | idle 待机 | waiting 等待 | running 干活 | jumping 庆祝 |
29
+ | idle | waiting | running | jumping |
30
30
  |---|---|---|---|
31
31
  | ![idle](assets/whale/previews/idle.gif) | ![waiting](assets/whale/previews/waiting.gif) | ![running](assets/whale/previews/running.gif) | ![jumping](assets/whale/previews/jumping.gif) |
32
32
 
33
- | waving 挥手 | review 复盘 | failed 失败 | 左右移动 |
33
+ | waving | review | failed | move left/right |
34
34
  |---|---|---|---|
35
35
  | ![waving](assets/whale/previews/waving.gif) | ![review](assets/whale/previews/review.gif) | ![failed](assets/whale/previews/failed.gif) | ![running-left](assets/whale/previews/running-left.gif) ![running-right](assets/whale/previews/running-right.gif) |
36
36
 
37
- ## 架构
37
+ ## Architecture
38
38
 
39
39
  ```
40
40
  dsh-pet/
41
41
  |-- src/
42
- | |-- index.ts # host 半区:插件入口(cordis apply,注册路由)
43
- | |-- service.ts # PetService:宠物状态机 + 亲密度 + 配置(HTTP API 服务面)
44
- | |-- state.ts # 宠物状态机:activity/status phase → 9 状态动画
45
- | |-- affinity.ts # 亲密度账本(纯函数 + 冷却)
46
- | |-- treats.ts # 小鱼干库存账本
47
- | |-- persist.ts # 持久化($DSH_HOME/pet.json,原子写入)
48
- | |-- routes.ts # /api/pet/* JSON API + /pet/whale/* 素材静态路由
49
- | `-- client/ # 浏览器半区
50
- | |-- index.ts # 全局挂载(createRoot → body)+ 轮询(800ms)+ 交互接线(fetch
51
- | |-- PetDockEntry.tsx # 全局浮层入口(document.body,无会话/新会话/会话中全程显示)
52
- | |-- WhalePet.tsx # 浮层组件(portal + rAF 帧动画 + 拖动)
53
- | |-- spritesheet.ts # 图集几何 + 每状态动画轨道(帧/时长)
42
+ | |-- index.ts # host half: plugin entry (cordis apply, route registration)
43
+ | |-- service.ts # PetService: pet state machine + affinity + config (HTTP API service face)
44
+ | |-- state.ts # pet state machine: activity/status phase → 9 state animations
45
+ | |-- affinity.ts # affinity ledger (pure functions + cooldowns)
46
+ | |-- treats.ts # dried-fish stock ledger
47
+ | |-- persist.ts # persistence ($DSH_HOME/pet.json, atomic write)
48
+ | |-- routes.ts # /api/pet/* JSON API + /pet/whale/* static asset routes
49
+ | `-- client/ # browser half
50
+ | |-- index.ts # global mount (createRoot → body) + polling (800ms) + interaction wiring (fetch)
51
+ | |-- PetDockEntry.tsx # global floating entry (document.body, always shown: no session / new session / mid-session)
52
+ | |-- WhalePet.tsx # floating component (portal + rAF frame animation + dragging)
53
+ | |-- spritesheet.ts # atlas geometry + per-state animation tracks (frames/duration)
54
54
  | `-- pet.module.css
55
- |-- assets/whale/ # 鲸鱼娘素材(pet.json + spritesheet.webp + 动画预览)
56
- `-- cordis.patch.yml # bundle patch:插入 pet 插件行
55
+ |-- assets/whale/ # whale-girl assets (pet.json + spritesheet.webp + animation previews)
56
+ `-- cordis.patch.yml # bundle patch: inserts the pet plugin row
57
57
  ```
58
58
 
59
- ### 数据流
59
+ ### Data flow
60
60
 
61
61
  ```
62
- activity/status session 事件(原 working-activity 插件发布) --> PetServicehost
62
+ activity/status session events (published by the former working-activity plugin) --> PetService (host)
63
63
  | /api/pet/* JSON
64
- global React rootcreateRoot → document.body <-- 轮询 800ms -- pet-client(浏览器)
64
+ global React root (createRoot → document.body) <-- polling 800ms -- pet-client (browser)
65
65
  |
66
- WhalePet 浮层(portal + rAF
66
+ WhalePet floating layer (portal + rAF)
67
67
  ```
68
68
 
69
- - **状态源**:监听 `activity/status` 会话事件(phase: idle/waiting/thinking/tool/done + 状态短语),由 host 半区消费;该事件曾由 working-activity 插件发布,插件已从本仓库移除,未安装时宠物只随会话生命周期变化。
70
- - **挂载点**:`document.body`(全局 React root,无会话/新会话/会话中全程显示——旧挂载点 `conversation.composer.dock` 只在活跃会话渲染,导致新会话界面看不到宠物),组件内部 `createPortal` 渲染全局浮层。
71
- - **渲染**:CSS spritebackground-position)逐帧动画,帧时长来自 `spritesheet.ts` 的轨道定义。
72
- - **通信**:浏览器 ↔ host 走同源 `/api/pet/*` JSON 端点(state/interact/set-visible/set-config),图集从 `/pet/whale/spritesheet.webp` 加载——RPC 域与 `/plugins/` 静态服务都是平台注册的,插件自足地提供自己的 API 与素材(与 dsh-remote-web-ui `/api/pair` 同一模式)。
69
+ - **Status source**: listens to the `activity/status` session events (phase: idle/waiting/thinking/tool/done + status phrase), consumed by the host half; the event used to be published by the working-activity plugin, which has been removed from this repo, so without it the pet only changes with the session lifecycle.
70
+ - **Mount point**: `document.body` (global React root, always shown: no session / new session / mid-session — the old mount point `conversation.composer.dock` only rendered in an active session, hiding the pet in new sessions); the component uses `createPortal` internally to render the global floating layer.
71
+ - **Rendering**: CSS sprite (background-position) per-frame animation, frame durations from the track definitions in `spritesheet.ts`.
72
+ - **Communication**: browser ↔ host over the same-origin `/api/pet/*` JSON endpoints (state/interact/set-visible/set-config); the atlas loads from `/pet/whale/spritesheet.webp` — both the RPC domain and the `/plugins/` static service are platform-registered, and the plugin self-sufficiently provides its own API and assets (the same pattern as dsh-remote-web-ui's `/api/pair`).
73
73
 
74
- ## 安装
74
+ ## Install
75
75
 
76
- 推荐直接安装全家桶聚合包 `@linxin666/dsh-web-ui-all`(一个包装齐全部功能插件与皮肤),或单独安装本插件:
76
+ Install the family aggregate package `@linxin666/dsh-web-ui-all` (all plugins and skins in one) or this plugin alone:
77
77
 
78
78
  ```sh
79
- # 推荐:直接从 npm 安装
79
+ ### npm 安装(推荐)
80
80
  dsh plugin --profile web add @linxin666/dsh-pet
81
81
 
82
- # 或从仓库安装(开发调试)
82
+ ### 从仓库安装(开发调试)
83
83
  git clone https://github.com/zhu1090093659/dsh-web-ui.git
84
84
  cd dsh-web-ui
85
85
  pnpm install && pnpm -r build
@@ -87,23 +87,24 @@ dsh plugin --profile web add link:$(pwd)/packages/dsh-pet
87
87
 
88
88
  ```
89
89
 
90
- 安装后**重启 `dsh web`**,鲸鱼娘出现在界面右下角即生效。link 模式下改代码后重新 `pnpm build` 并刷新页面即可,无需重装。
90
+ After installing, **restart `dsh web`** — the whale-girl appears at the bottom-right of the interface. In link mode, `pnpm build` and refresh the page after a code change; no reinstall needed.
91
91
 
92
- ## 开发
92
+ ## Development
93
93
 
94
94
  ```sh
95
- pnpm build # tsc -b(类型+声明)&& tsdownnode 半区 + 浏览器 bundle
96
- pnpm test # vitest 单元测试(affinity / treats / persist / state
97
- pnpm prepare # 仅转译构建(无类型检查,供消费者安装)
98
- pnpm typecheck # 仅类型检查
95
+ pnpm build # tsc -b (types+declarations) && tsdown (node half + browser bundle)
96
+ pnpm test # vitest unit tests (affinity / treats / persist / state)
97
+ pnpm prepare # transpile-only build (no type checking, for consumer installs)
98
+ pnpm typecheck # type check only
99
99
  ```
100
100
 
101
- 浏览器 bundle `window.__ModuleLoader__.load` 契约,React/cordis 等由 loader 模块表解析(external);CSS Modules lightningcss 内联为 `<style data-plugin>`。
101
+ The browser bundle rides the `window.__ModuleLoader__.load` contract; React/cordis and so on resolve from the loader's module table (external); CSS Modules are inlined by lightningcss as `<style data-plugin>`.
102
102
 
103
- ## 素材与动画轨道校准
103
+ ## Sprites and animation-track calibration
104
104
 
105
- 鲸鱼娘图集由 hatch-pet 流水线按 9 状态 × 8 列生成:`assets/whale/spritesheet.webp`(1536×18728 × 9 192×208 单元)+ `assets/whale/pet.json`。每行实际帧数与节奏在 `src/client/spritesheet.ts` `TRACKS` 中定义。若素材重做导致帧数变化,只需更新该表(行序契约:0 idle / 1 running-right / 2 running-left / 3 waving / 4 jumping / 5 failed / 6 waiting / 7 running / 8 review)。
105
+ The whale-girl atlas is generated by the hatch-pet pipeline as 9 states × 8 columns: `assets/whale/spritesheet.webp` (1536×1872, 8 columns × 9 rows of 192×208 cells) + `assets/whale/pet.json`. The actual frame count and rhythm of each row are defined in `TRACKS` in `src/client/spritesheet.ts`. If the artwork is redone and the frame count changes, only that table needs updating (row-order contract: 0 idle / 1 running-right / 2 running-left / 3 waving / 4 jumping / 5 failed / 6 waiting / 7 running / 8 review).
106
106
 
107
107
  ## License
108
108
 
109
109
  [BSD-3-Clause](LICENSE)
110
+
package/README.zh.md ADDED
@@ -0,0 +1,109 @@
1
+ # dsh-pet — 鲸鱼娘宠物插件
2
+
3
+ [English](README.md) | 中文
4
+
5
+ > 一只软萌治愈的鲸鱼娘,陪你在 DeepSeek Harness 里工作。
6
+
7
+ 模型思考的时候你在等,她在游。她会跟着模型的工作状态切换动画——干活、等待、思考、庆祝完成;你还可以摸头、喂小鱼干,看着她从幼鲸慢慢长成你的深海羁绊。
8
+
9
+ 复刻自 Codex 桌面版的宠物功能,以 DSH 官方插件形态实现(cordis bundle:host 半区 + client 半区单包)。
10
+
11
+ ## 功能
12
+
13
+ | 功能 | 说明 |
14
+ |---|---|
15
+ | 状态动画 | 模型状态 → 鲸鱼娘动画:`thinking/tool → 工作`、`waiting → 等待`、`done → 跳跃庆祝`、空闲 `idle` 呼吸待机 |
16
+ | 摸头互动 | 点击鲸鱼娘 → 气泡反馈 + 亲密度 +1(10s 冷却) |
17
+ | 喂食 | 悬浮面板「喂食」→ 消耗 1 条小鱼干 + 亲密度 +5(30s 冷却) |
18
+ | 饲料经济 | 小鱼干库存(上限 20):工作每 3 回合 +1 条、每 30 分钟 +1 条;库存不足会提示「多陪鲸鱼娘工作一会儿」 |
19
+ | 亲密度 | 每完成一个回合 +1;4 个等级:幼鲸 → 伙伴 → 挚友 → 深海羁绊(100 点封顶) |
20
+ | 自定义命名 | 悬浮面板「改名」→ 1–20 字符,持久化,召唤按钮/面板同步显示 |
21
+ | 拖动 | 按住鲸鱼娘拖动重新摆放,位置持久化 |
22
+ | 隐藏/召唤 | 悬浮面板「隐藏」;隐藏后输入选择行出现「召唤{名字}」按钮 |
23
+ | 状态气泡 | 工作时显示模型当前状态短语 |
24
+
25
+ ## 动画演示
26
+
27
+ 素材为 8 列 × 9 行图集(192×208 单元),由 [hatch-pet](https://github.com/dsh2026) 流水线生成,以下为各状态动画预览:
28
+
29
+ | idle 待机 | waiting 等待 | running 干活 | jumping 庆祝 |
30
+ |---|---|---|---|
31
+ | ![idle](assets/whale/previews/idle.gif) | ![waiting](assets/whale/previews/waiting.gif) | ![running](assets/whale/previews/running.gif) | ![jumping](assets/whale/previews/jumping.gif) |
32
+
33
+ | waving 挥手 | review 复盘 | failed 失败 | 左右移动 |
34
+ |---|---|---|---|
35
+ | ![waving](assets/whale/previews/waving.gif) | ![review](assets/whale/previews/review.gif) | ![failed](assets/whale/previews/failed.gif) | ![running-left](assets/whale/previews/running-left.gif) ![running-right](assets/whale/previews/running-right.gif) |
36
+
37
+ ## 架构
38
+
39
+ ```
40
+ dsh-pet/
41
+ |-- src/
42
+ | |-- index.ts # host 半区:插件入口(cordis apply,注册路由)
43
+ | |-- service.ts # PetService:宠物状态机 + 亲密度 + 配置(HTTP API 服务面)
44
+ | |-- state.ts # 宠物状态机:activity/status phase → 9 状态动画
45
+ | |-- affinity.ts # 亲密度账本(纯函数 + 冷却)
46
+ | |-- treats.ts # 小鱼干库存账本
47
+ | |-- persist.ts # 持久化($DSH_HOME/pet.json,原子写入)
48
+ | |-- routes.ts # /api/pet/* JSON API + /pet/whale/* 素材静态路由
49
+ | `-- client/ # 浏览器半区
50
+ | |-- index.ts # 全局挂载(createRoot → body)+ 轮询(800ms)+ 交互接线(fetch)
51
+ | |-- PetDockEntry.tsx # 全局浮层入口(document.body,无会话/新会话/会话中全程显示)
52
+ | |-- WhalePet.tsx # 浮层组件(portal + rAF 帧动画 + 拖动)
53
+ | |-- spritesheet.ts # 图集几何 + 每状态动画轨道(帧/时长)
54
+ | `-- pet.module.css
55
+ |-- assets/whale/ # 鲸鱼娘素材(pet.json + spritesheet.webp + 动画预览)
56
+ `-- cordis.patch.yml # bundle patch:插入 pet 插件行
57
+ ```
58
+
59
+ ### 数据流
60
+
61
+ ```
62
+ activity/status session 事件(原 working-activity 插件发布) --> PetService(host)
63
+ | /api/pet/* JSON
64
+ global React root(createRoot → document.body) <-- 轮询 800ms -- pet-client(浏览器)
65
+ |
66
+ WhalePet 浮层(portal + rAF)
67
+ ```
68
+
69
+ - **状态源**:监听 `activity/status` 会话事件(phase: idle/waiting/thinking/tool/done + 状态短语),由 host 半区消费;该事件曾由 working-activity 插件发布,插件已从本仓库移除,未安装时宠物只随会话生命周期变化。
70
+ - **挂载点**:`document.body`(全局 React root,无会话/新会话/会话中全程显示——旧挂载点 `conversation.composer.dock` 只在活跃会话渲染,导致新会话界面看不到宠物),组件内部 `createPortal` 渲染全局浮层。
71
+ - **渲染**:CSS sprite(background-position)逐帧动画,帧时长来自 `spritesheet.ts` 的轨道定义。
72
+ - **通信**:浏览器 ↔ host 走同源 `/api/pet/*` JSON 端点(state/interact/set-visible/set-config),图集从 `/pet/whale/spritesheet.webp` 加载——RPC 域与 `/plugins/` 静态服务都是平台注册的,插件自足地提供自己的 API 与素材(与 dsh-remote-web-ui 的 `/api/pair` 同一模式)。
73
+
74
+ ## 安装
75
+
76
+ 推荐直接安装全家桶聚合包 `@linxin666/dsh-web-ui-all`(一个包装齐全部功能插件与皮肤),或单独安装本插件:
77
+
78
+ ```sh
79
+ ### 从 npm 安装(推荐)
80
+ dsh plugin --profile web add @linxin666/dsh-pet
81
+
82
+ ### 从仓库安装(开发调试)
83
+ git clone https://github.com/zhu1090093659/dsh-web-ui.git
84
+ cd dsh-web-ui
85
+ pnpm install && pnpm -r build
86
+ dsh plugin --profile web add link:$(pwd)/packages/dsh-pet
87
+
88
+ ```
89
+
90
+ 安装后**重启 `dsh web`**,鲸鱼娘出现在界面右下角即生效。link 模式下改代码后重新 `pnpm build` 并刷新页面即可,无需重装。
91
+
92
+ ## 开发
93
+
94
+ ```sh
95
+ pnpm build # tsc -b(类型+声明)&& tsdown(node 半区 + 浏览器 bundle)
96
+ pnpm test # vitest 单元测试(affinity / treats / persist / state)
97
+ pnpm prepare # 仅转译构建(无类型检查,供消费者安装)
98
+ pnpm typecheck # 仅类型检查
99
+ ```
100
+
101
+ 浏览器 bundle 走 `window.__ModuleLoader__.load` 契约,React/cordis 等由 loader 模块表解析(external);CSS Modules 由 lightningcss 内联为 `<style data-plugin>`。
102
+
103
+ ## 素材与动画轨道校准
104
+
105
+ 鲸鱼娘图集由 hatch-pet 流水线按 9 状态 × 8 列生成:`assets/whale/spritesheet.webp`(1536×1872,8 列 × 9 行 192×208 单元)+ `assets/whale/pet.json`。每行实际帧数与节奏在 `src/client/spritesheet.ts` 的 `TRACKS` 中定义。若素材重做导致帧数变化,只需更新该表(行序契约:0 idle / 1 running-right / 2 running-left / 3 waving / 4 jumping / 5 failed / 6 waiting / 7 running / 8 review)。
106
+
107
+ ## License
108
+
109
+ [BSD-3-Clause](LICENSE)
package/lib/client.js CHANGED
@@ -304,8 +304,8 @@ window.__ModuleLoader__.load({
304
304
  };
305
305
  }
306
306
  //#endregion
307
- //#region \0dsh-css:/home/runner/work/dsh-web-ui/dsh-web-ui/packages/dsh-pet/src/client/pet.module.css.mjs
308
- const css$1 = ".l0P8iq_float{pointer-events:auto;-webkit-user-select:none;user-select:none;flex-direction:column;align-items:center;display:flex;position:fixed}.l0P8iq_sprite{image-rendering:auto;touch-action:none;position:relative}.l0P8iq_bubble{white-space:nowrap;color:#fff;pointer-events:none;border-radius:999px;margin-bottom:6px;padding:4px 10px;font-size:12px;line-height:1.4;animation:2.6s ease-out forwards l0P8iq_pet-bubble-pop;position:absolute;bottom:100%;box-shadow:0 2px 8px #00000040}.l0P8iq_bubblePet{background:#f472b6eb}.l0P8iq_bubbleFeed{background:#38bdf8eb}@keyframes l0P8iq_pet-bubble-pop{0%{opacity:0;transform:translateY(6px)scale(.85)}15%{opacity:1;transform:translateY(0)scale(1.05)}25%{transform:translateY(0)scale(1)}75%{opacity:1}to{opacity:0;transform:translateY(-8px)scale(.95)}}.l0P8iq_panel{color:#e2e8f0;backdrop-filter:blur(6px);background:#0f172aeb;border:1px solid #94a3b859;border-radius:10px;flex-direction:column;gap:6px;min-width:132px;padding:8px 10px;font-size:12px;display:flex;position:absolute;bottom:100%;box-shadow:0 4px 16px #00000059}.l0P8iq_panel:after{content:\"\";height:14px;position:absolute;top:100%;left:0;right:0}.l0P8iq_rankRow{white-space:nowrap;justify-content:space-between;gap:10px;display:flex}.l0P8iq_nameCell{font-weight:600}.l0P8iq_renameRow{align-items:center;gap:6px;display:flex}.l0P8iq_nameInput{color:#e2e8f0;background:#1e293be6;border:1px solid #7dd3fc80;border-radius:6px;outline:none;flex:1;min-width:0;padding:3px 6px;font-size:12px}.l0P8iq_nameInput:focus{border-color:#38bdf8;box-shadow:0 0 0 2px #38bdf873}.l0P8iq_actions{gap:6px;display:flex}.l0P8iq_action{cursor:pointer;color:#0f172a;background:linear-gradient(#7dd3fc,#38bdf8);border:none;border-radius:6px;flex:1;padding:4px 8px;font-size:12px;transition:filter .12s,box-shadow .12s}.l0P8iq_action:hover{filter:brightness(1.08)}.l0P8iq_action:active{filter:brightness(.94)}.l0P8iq_action:focus-visible{outline:none;box-shadow:0 0 0 2px #38bdf8d9}.l0P8iq_summon{color:#7dd3fc;cursor:pointer;background:#0f172abf;border:1px dashed #7dd3fc99;border-radius:999px;padding:2px 10px;font-size:11px;transition:border-color .12s,color .12s,background .12s,box-shadow .12s}.l0P8iq_summon:hover{color:#bae6fd;background:#0f172ae6;border-color:#7dd3fcf2}.l0P8iq_summon:active{color:#7dd3fc;border-color:#7dd3fccc}.l0P8iq_summon:focus-visible{outline:none;box-shadow:0 0 0 2px #38bdf8d9}@media (prefers-reduced-motion:reduce){.l0P8iq_bubble{opacity:1;animation:none}.l0P8iq_action,.l0P8iq_summon{transition:none}}";
307
+ //#region \0dsh-css:packages/dsh-pet/src/client/pet.module.css.mjs
308
+ const css$1 = ".kz2Bea_float{pointer-events:auto;-webkit-user-select:none;user-select:none;flex-direction:column;align-items:center;display:flex;position:fixed}.kz2Bea_sprite{image-rendering:auto;touch-action:none;position:relative}.kz2Bea_bubble{white-space:nowrap;color:#fff;pointer-events:none;border-radius:999px;margin-bottom:6px;padding:4px 10px;font-size:12px;line-height:1.4;animation:2.6s ease-out forwards kz2Bea_pet-bubble-pop;position:absolute;bottom:100%;box-shadow:0 2px 8px #00000040}.kz2Bea_bubblePet{background:#f472b6eb}.kz2Bea_bubbleFeed{background:#38bdf8eb}@keyframes kz2Bea_pet-bubble-pop{0%{opacity:0;transform:translateY(6px)scale(.85)}15%{opacity:1;transform:translateY(0)scale(1.05)}25%{transform:translateY(0)scale(1)}75%{opacity:1}to{opacity:0;transform:translateY(-8px)scale(.95)}}.kz2Bea_panel{color:#e2e8f0;backdrop-filter:blur(6px);background:#0f172aeb;border:1px solid #94a3b859;border-radius:10px;flex-direction:column;gap:6px;min-width:132px;padding:8px 10px;font-size:12px;display:flex;position:absolute;bottom:100%;box-shadow:0 4px 16px #00000059}.kz2Bea_panel:after{content:\"\";height:14px;position:absolute;top:100%;left:0;right:0}.kz2Bea_rankRow{white-space:nowrap;justify-content:space-between;gap:10px;display:flex}.kz2Bea_nameCell{font-weight:600}.kz2Bea_renameRow{align-items:center;gap:6px;display:flex}.kz2Bea_nameInput{color:#e2e8f0;background:#1e293be6;border:1px solid #7dd3fc80;border-radius:6px;outline:none;flex:1;min-width:0;padding:3px 6px;font-size:12px}.kz2Bea_nameInput:focus{border-color:#38bdf8;box-shadow:0 0 0 2px #38bdf873}.kz2Bea_actions{gap:6px;display:flex}.kz2Bea_action{cursor:pointer;color:#0f172a;background:linear-gradient(#7dd3fc,#38bdf8);border:none;border-radius:6px;flex:1;padding:4px 8px;font-size:12px;transition:filter .12s,box-shadow .12s}.kz2Bea_action:hover{filter:brightness(1.08)}.kz2Bea_action:active{filter:brightness(.94)}.kz2Bea_action:focus-visible{outline:none;box-shadow:0 0 0 2px #38bdf8d9}.kz2Bea_summon{color:#7dd3fc;cursor:pointer;background:#0f172abf;border:1px dashed #7dd3fc99;border-radius:999px;padding:2px 10px;font-size:11px;transition:border-color .12s,color .12s,background .12s,box-shadow .12s}.kz2Bea_summon:hover{color:#bae6fd;background:#0f172ae6;border-color:#7dd3fcf2}.kz2Bea_summon:active{color:#7dd3fc;border-color:#7dd3fccc}.kz2Bea_summon:focus-visible{outline:none;box-shadow:0 0 0 2px #38bdf8d9}@media (prefers-reduced-motion:reduce){.kz2Bea_bubble{opacity:1;animation:none}.kz2Bea_action,.kz2Bea_summon{transition:none}}";
309
309
  const tagId$1 = "@linxin666/dsh-pet/pet.module.css";
310
310
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
311
311
  const tag = document.createElement("style");
@@ -315,20 +315,20 @@ window.__ModuleLoader__.load({
315
315
  document.head.appendChild(tag);
316
316
  }
317
317
  var pet_module_css_default = {
318
- "action": "l0P8iq_action",
319
- "actions": "l0P8iq_actions",
320
- "bubble": "l0P8iq_bubble",
321
- "bubbleFeed": "l0P8iq_bubbleFeed",
322
- "bubblePet": "l0P8iq_bubblePet",
323
- "float": "l0P8iq_float",
324
- "nameCell": "l0P8iq_nameCell",
325
- "nameInput": "l0P8iq_nameInput",
326
- "panel": "l0P8iq_panel",
327
- "pet-bubble-pop": "l0P8iq_pet-bubble-pop",
328
- "rankRow": "l0P8iq_rankRow",
329
- "renameRow": "l0P8iq_renameRow",
330
- "sprite": "l0P8iq_sprite",
331
- "summon": "l0P8iq_summon"
318
+ "action": "kz2Bea_action",
319
+ "actions": "kz2Bea_actions",
320
+ "bubble": "kz2Bea_bubble",
321
+ "bubbleFeed": "kz2Bea_bubbleFeed",
322
+ "bubblePet": "kz2Bea_bubblePet",
323
+ "float": "kz2Bea_float",
324
+ "nameCell": "kz2Bea_nameCell",
325
+ "nameInput": "kz2Bea_nameInput",
326
+ "panel": "kz2Bea_panel",
327
+ "pet-bubble-pop": "kz2Bea_pet-bubble-pop",
328
+ "rankRow": "kz2Bea_rankRow",
329
+ "renameRow": "kz2Bea_renameRow",
330
+ "sprite": "kz2Bea_sprite",
331
+ "summon": "kz2Bea_summon"
332
332
  };
333
333
  //#endregion
334
334
  //#region src/client/WhalePet.tsx
@@ -677,8 +677,8 @@ window.__ModuleLoader__.load({
677
677
  });
678
678
  }
679
679
  //#endregion
680
- //#region \0dsh-css:/home/runner/work/dsh-web-ui/dsh-web-ui/packages/dsh-pet/src/client/settings-card.module.css.mjs
681
- const css = ".bDVnfa_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:8px;list-style:none;transition:border-color .16s,background .16s;overflow:hidden}.bDVnfa_cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.bDVnfa_header{cursor:pointer;text-align:left;width:100%;font:inherit;background:0 0;border:0;align-items:center;gap:8px;padding:10px 14px;transition:background .12s;display:flex}.bDVnfa_header:hover{background:var(--dsw-alias-interactive-bg-hover)}.bDVnfa_header:active{background:var(--dsw-alias-interactive-bg-hover-solid)}.bDVnfa_header:focus-visible{box-shadow:inset 0 0 0 2px var(--dsw-alias-button-info-fill);outline:none}.bDVnfa_headText{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.bDVnfa_name{color:var(--dsw-alias-label-primary);font-weight:600}.bDVnfa_description{color:var(--dsw-alias-label-tertiary);font-size:12px}.bDVnfa_pending{color:var(--dsw-alias-state-warn-primary);font-size:12px}.bDVnfa_chevron{color:var(--dsw-alias-label-tertiary);transition:transform .12s}.bDVnfa_chevronOpen{transform:rotate(180deg)}.bDVnfa_body{flex-direction:column;gap:14px;padding:0 14px 14px;display:flex}.bDVnfa_readOnly{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px}.bDVnfa_notExposed{color:var(--dsw-alias-state-warn-primary);margin:0;font-size:12px;line-height:1.5}.bDVnfa_footer{justify-content:flex-end;align-items:center;gap:8px;display:flex}.bDVnfa_failed{color:var(--dsw-alias-state-error-primary);margin:0 auto 0 0;font-size:12px}.bDVnfa_discard,.bDVnfa_save{font:inherit;cursor:pointer;border-radius:6px;padding:5px 12px;font-size:13px;transition:color .12s,border-color .12s,background .12s,box-shadow .12s}.bDVnfa_discard{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}.bDVnfa_discard:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.bDVnfa_discard:active:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.bDVnfa_save{border:1px solid var(--dsw-alias-button-info-fill);background:var(--dsw-alias-button-info-fill);color:var(--dsw-alias-label-primary-foreground)}.bDVnfa_save:hover:not(:disabled){border-color:var(--dsw-alias-button-info-hover);background:var(--dsw-alias-button-info-hover)}.bDVnfa_save:active:not(:disabled){filter:brightness(.94)}.bDVnfa_discard:focus-visible:not(:disabled),.bDVnfa_save:focus-visible:not(:disabled){box-shadow:0 0 0 2px var(--dsw-alias-button-info-fill);outline:none}.bDVnfa_discard:disabled,.bDVnfa_save:disabled{opacity:.5;cursor:default}.bDVnfa_field{flex-direction:column;gap:4px;display:flex}.bDVnfa_head{align-items:center;gap:8px;display:flex}.bDVnfa_label{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500}.bDVnfa_badges{align-items:center;gap:6px;display:flex}.bDVnfa_badge{background:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-state-business-primary);border-radius:999px;padding:1px 6px;font-size:11px}.bDVnfa_reset{color:var(--dsw-alias-state-business-primary);cursor:pointer;background:0 0;border:0;border-radius:3px;padding:0;font-size:11px;transition:color .12s,box-shadow .12s}.bDVnfa_reset:hover:not(:disabled){color:var(--dsw-alias-label-primary-bluish);text-decoration:underline}.bDVnfa_reset:active:not(:disabled){color:var(--dsw-alias-state-business-primary)}.bDVnfa_reset:focus-visible:not(:disabled){box-shadow:0 0 0 2px var(--dsw-alias-button-info-fill);outline:none}.bDVnfa_reset:disabled{opacity:.5;cursor:default}.bDVnfa_input,.bDVnfa_select{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border-radius:6px;padding:6px 8px;font-size:13px}.bDVnfa_inputInvalid{border:1px solid var(--dsw-alias-state-error-primary);font:inherit;color:var(--dsw-alias-label-primary);border-radius:6px;padding:6px 8px;font-size:13px}.bDVnfa_input:disabled,.bDVnfa_select:disabled{opacity:.6}.bDVnfa_input:focus,.bDVnfa_select:focus{border-color:var(--dsw-alias-button-info-fill);box-shadow:0 0 0 2px var(--dsw-alias-button-info-fill);outline:none}.bDVnfa_inputInvalid:focus{box-shadow:0 0 0 2px var(--dsw-alias-state-error-primary);outline:none}.bDVnfa_hint{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px}.bDVnfa_invalid{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px}@media (prefers-reduced-motion:reduce){.bDVnfa_card,.bDVnfa_header,.bDVnfa_chevron,.bDVnfa_chevronOpen,.bDVnfa_reset,.bDVnfa_discard,.bDVnfa_save{transition:none}}";
680
+ //#region \0dsh-css:packages/dsh-pet/src/client/settings-card.module.css.mjs
681
+ const css = ".kKk9aW_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;list-style:none;transition:border-color .16s,background .16s}.kKk9aW_card:hover{border-color:var(--dsw-alias-label-dimmed)}.kKk9aW_cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.kKk9aW_header{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}.kKk9aW_header:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.kKk9aW_headText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.kKk9aW_name{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}.kKk9aW_description{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.kKk9aW_pending{white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.kKk9aW_chevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}.kKk9aW_chevronOpen{transform:rotate(180deg)}.kKk9aW_body{border-top:1px solid var(--dsw-alias-border-l2);margin:0 16px;padding-bottom:8px}.kKk9aW_readOnly{color:var(--dsw-alias-label-tertiary);margin:12px 0 0;font-size:12px;line-height:1.5}.kKk9aW_notExposed{color:var(--dsw-alias-state-warn-primary);margin:12px 0 0;font-size:12px;line-height:1.5}.kKk9aW_footer{border-top:1px solid var(--dsw-alias-border-l2);justify-content:flex-end;align-items:center;gap:8px;padding:12px 0 4px;display:flex}.kKk9aW_failed{min-width:0;color:var(--dsw-alias-label-error);flex:1;margin:0;font-size:12px;line-height:1.5}.kKk9aW_discard,.kKk9aW_save{appearance:none;font:inherit;cursor:pointer;border:1px solid #0000;border-radius:8px;padding:5px 14px;font-size:13px;line-height:1.5}.kKk9aW_discard{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}.kKk9aW_discard:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.kKk9aW_save{background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3)}.kKk9aW_discard:disabled,.kKk9aW_save:disabled{opacity:.4;cursor:default}.kKk9aW_discard:focus-visible,.kKk9aW_save:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.kKk9aW_field{flex-direction:column;gap:6px;padding:12px 0;display:flex}.kKk9aW_field+.kKk9aW_field{border-top:1px solid var(--dsw-alias-border-l2)}.kKk9aW_head{align-items:center;gap:8px;display:flex}.kKk9aW_label{min-width:0;color:var(--dsw-alias-label-primary);flex:1;font-size:13px;font-weight:500;line-height:1.5}.kKk9aW_badges{align-items:center;gap:8px;display:inline-flex}.kKk9aW_badge{white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.kKk9aW_reset{font:inherit;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px;line-height:1.5}.kKk9aW_reset:hover:not(:disabled){color:var(--dsw-alias-label-primary)}.kKk9aW_reset:disabled{cursor:default}.kKk9aW_reset:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.kKk9aW_input,.kKk9aW_select{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);height:34px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;padding:0 12px;font-size:13px;line-height:1.5}.kKk9aW_input:focus-visible,.kKk9aW_select:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:none}.kKk9aW_input:disabled,.kKk9aW_select:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.kKk9aW_inputInvalid{border:1px solid var(--dsw-alias-label-error);background:var(--dsw-alias-bg-layer-3);height:34px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;padding:0 12px;font-size:13px;line-height:1.5}.kKk9aW_inputInvalid:focus-visible{outline:2px solid var(--dsw-alias-label-error);outline-offset:1px;border-color:var(--dsw-alias-label-error)}.kKk9aW_invalid{color:var(--dsw-alias-label-error);margin:0;font-size:12px;line-height:1.5}.kKk9aW_hint{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:1.5}@media (prefers-reduced-motion:reduce){.kKk9aW_card,.kKk9aW_header,.kKk9aW_chevron,.kKk9aW_chevronOpen,.kKk9aW_discard,.kKk9aW_save{transition:none}}";
682
682
  const tagId = "@linxin666/dsh-pet/settings-card.module.css";
683
683
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
684
684
  const tag = document.createElement("style");
@@ -688,33 +688,33 @@ window.__ModuleLoader__.load({
688
688
  document.head.appendChild(tag);
689
689
  }
690
690
  var settings_card_module_css_default = {
691
- "badge": "bDVnfa_badge",
692
- "badges": "bDVnfa_badges",
693
- "body": "bDVnfa_body",
694
- "card": "bDVnfa_card",
695
- "cardOpen": "bDVnfa_cardOpen",
696
- "chevron": "bDVnfa_chevron",
697
- "chevronOpen": "bDVnfa_chevronOpen",
698
- "description": "bDVnfa_description",
699
- "discard": "bDVnfa_discard",
700
- "failed": "bDVnfa_failed",
701
- "field": "bDVnfa_field",
702
- "footer": "bDVnfa_footer",
703
- "head": "bDVnfa_head",
704
- "headText": "bDVnfa_headText",
705
- "header": "bDVnfa_header",
706
- "hint": "bDVnfa_hint",
707
- "input": "bDVnfa_input",
708
- "inputInvalid": "bDVnfa_inputInvalid",
709
- "invalid": "bDVnfa_invalid",
710
- "label": "bDVnfa_label",
711
- "name": "bDVnfa_name",
712
- "notExposed": "bDVnfa_notExposed",
713
- "pending": "bDVnfa_pending",
714
- "readOnly": "bDVnfa_readOnly",
715
- "reset": "bDVnfa_reset",
716
- "save": "bDVnfa_save",
717
- "select": "bDVnfa_select"
691
+ "badge": "kKk9aW_badge",
692
+ "badges": "kKk9aW_badges",
693
+ "body": "kKk9aW_body",
694
+ "card": "kKk9aW_card",
695
+ "cardOpen": "kKk9aW_cardOpen",
696
+ "chevron": "kKk9aW_chevron",
697
+ "chevronOpen": "kKk9aW_chevronOpen",
698
+ "description": "kKk9aW_description",
699
+ "discard": "kKk9aW_discard",
700
+ "failed": "kKk9aW_failed",
701
+ "field": "kKk9aW_field",
702
+ "footer": "kKk9aW_footer",
703
+ "head": "kKk9aW_head",
704
+ "headText": "kKk9aW_headText",
705
+ "header": "kKk9aW_header",
706
+ "hint": "kKk9aW_hint",
707
+ "input": "kKk9aW_input",
708
+ "inputInvalid": "kKk9aW_inputInvalid",
709
+ "invalid": "kKk9aW_invalid",
710
+ "label": "kKk9aW_label",
711
+ "name": "kKk9aW_name",
712
+ "notExposed": "kKk9aW_notExposed",
713
+ "pending": "kKk9aW_pending",
714
+ "readOnly": "kKk9aW_readOnly",
715
+ "reset": "kKk9aW_reset",
716
+ "save": "kKk9aW_save",
717
+ "select": "kKk9aW_select"
718
718
  };
719
719
  //#endregion
720
720
  //#region src/client/PluginSettingsCard.tsx
@@ -737,8 +737,9 @@ window.__ModuleLoader__.load({
737
737
  if (!state.available) return null;
738
738
  const title = props.t(props.titleKey);
739
739
  const blocked = !state.dirty || state.invalid || state.saving;
740
+ const cardClass = open ? `${settings_card_module_css_default.cardOpen} ${settings_card_module_css_default.card}` : settings_card_module_css_default.card;
740
741
  if (!state.exposed) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
741
- className: settings_card_module_css_default.card,
742
+ className: cardClass,
742
743
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
743
744
  type: "button",
744
745
  className: settings_card_module_css_default.header,
@@ -756,9 +757,17 @@ window.__ModuleLoader__.load({
756
757
  className: settings_card_module_css_default.description,
757
758
  children: props.t(props.descriptionKey)
758
759
  })]
759
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
760
- className: open ? settings_card_module_css_default.chevronOpen : settings_card_module_css_default.chevron,
761
- children: ""
760
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
761
+ width: "14",
762
+ height: "14",
763
+ viewBox: "0 0 14 14",
764
+ fill: "none",
765
+ xmlns: "http://www.w3.org/2000/svg",
766
+ className: open ? `${settings_card_module_css_default.chevron} ${settings_card_module_css_default.chevronOpen}` : settings_card_module_css_default.chevron,
767
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
768
+ d: "M11.8486 5.5L11.4238 5.92383L8.69727 8.65137C8.44157 8.90706 8.21562 9.13382 8.01172 9.29785C7.79912 9.46883 7.55595 9.61756 7.25 9.66602C7.08435 9.69222 6.91565 9.69222 6.75 9.66602C6.44405 9.61756 6.20088 9.46883 5.98828 9.29785C5.78438 9.13382 5.55843 8.90706 5.30273 8.65137L2.57617 5.92383L2.15137 5.5L3 4.65137L3.42383 5.07617L6.15137 7.80273C6.42595 8.07732 6.59876 8.24849 6.74023 8.3623C6.87291 8.46904 6.92272 8.47813 6.9375 8.48047C6.97895 8.48703 7.02105 8.48703 7.0625 8.48047C7.07728 8.47813 7.12709 8.46904 7.25977 8.3623C7.40124 8.24849 7.57405 8.07732 7.84863 7.80273L10.5762 5.07617L11 4.65137L11.8486 5.5Z",
769
+ fill: "currentColor"
770
+ })
762
771
  })]
763
772
  }), open ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
764
773
  className: settings_card_module_css_default.body,
@@ -770,7 +779,7 @@ window.__ModuleLoader__.load({
770
779
  }) : null]
771
780
  });
772
781
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
773
- className: settings_card_module_css_default.card,
782
+ className: cardClass,
774
783
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
775
784
  type: "button",
776
785
  className: settings_card_module_css_default.header,
@@ -794,9 +803,17 @@ window.__ModuleLoader__.load({
794
803
  className: settings_card_module_css_default.pending,
795
804
  children: props.t("settings.unsaved")
796
805
  }) : null,
797
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
798
- className: open ? settings_card_module_css_default.chevronOpen : settings_card_module_css_default.chevron,
799
- children: ""
806
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
807
+ width: "14",
808
+ height: "14",
809
+ viewBox: "0 0 14 14",
810
+ fill: "none",
811
+ xmlns: "http://www.w3.org/2000/svg",
812
+ className: open ? `${settings_card_module_css_default.chevron} ${settings_card_module_css_default.chevronOpen}` : settings_card_module_css_default.chevron,
813
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
814
+ d: "M11.8486 5.5L11.4238 5.92383L8.69727 8.65137C8.44157 8.90706 8.21562 9.13382 8.01172 9.29785C7.79912 9.46883 7.55595 9.61756 7.25 9.66602C7.08435 9.69222 6.91565 9.69222 6.75 9.66602C6.44405 9.61756 6.20088 9.46883 5.98828 9.29785C5.78438 9.13382 5.55843 8.90706 5.30273 8.65137L2.57617 5.92383L2.15137 5.5L3 4.65137L3.42383 5.07617L6.15137 7.80273C6.42595 8.07732 6.59876 8.24849 6.74023 8.3623C6.87291 8.46904 6.92272 8.47813 6.9375 8.48047C6.97895 8.48703 7.02105 8.48703 7.0625 8.48047C7.07728 8.47813 7.12709 8.46904 7.25977 8.3623C7.40124 8.24849 7.57405 8.07732 7.84863 7.80273L10.5762 5.07617L11 4.65137L11.8486 5.5Z",
815
+ fill: "currentColor"
816
+ })
800
817
  })
801
818
  ]
802
819
  }), open ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {