Skip to content

fix(mobile): restore right sidebar entry - #126

Merged
shaobeichen merged 1 commit into
shaobeichen:mainfrom
ShawnKung:feat/mobile-rightbar-toggle
Sep 16, 2026
Merged

shaobeichen merged 1 commit into
shaobeichen:mainfrom
ShawnKung:feat/mobile-rightbar-toggle

Conversation

@ShawnKung

Copy link
Copy Markdown

Summary

  • 修复移动端样式误隐藏 DSH 原生右边栏入口的问题。
  • 使用稳定的 data-conversation-header-corner 标记替代依赖 DOM 顺序的选择器。
  • 增加“手机端右边栏”设置,默认显示,用户可按需关闭。
  • 支持设置持久化,并补充中英文文档与回归测试。

Fixes #122.

背景

在移动端使用 DSH 时,底部面板通常用于终端。需要查看会话信息或其他右边栏内容时,原生右边栏入口会更加方便。

普通手机的横向空间有限,部分用户可能更偏好紧凑的标题栏;折叠屏展开后通常具有更充足的左右空间,可以方便地同时使用终端底栏和右边栏。

因此,本 PR 在恢复原生右边栏入口的同时增加一个设置开关:

  • 默认开启:修复右边栏入口意外消失的问题。
  • 按需关闭:保留紧凑移动布局的选择。
  • 设置持久化,刷新页面后继续生效。
  • 恢复出厂设置后回到默认开启。

问题原因

Issue #122 指出,移动端样式使用了以下结构选择器:

[data-phase] header > :first-child > :last-child

该规则的注释表示它用于隐藏 headerUtilities。但在 DSH 0.1.5 中,标题栏 DOM 结构已经变化,:last-child 实际命中的是 headerCorner。

DSH 原生右边栏展开按钮注册在:

conversation.session.header.corner

因此,这条规则产生了两个问题:

  1. 没有隐藏注释中描述的 headerUtilities。
  2. 意外隐藏了 DSH 原生右边栏展开按钮。

这属于依赖 DOM 子元素顺序导致的兼容性 bug。

修复方式

本 PR 不再通过 :last-child 推断标题栏元素,而是使用宿主提供的稳定属性:

data-conversation-header-corner

右边栏入口默认保持显示。用户关闭“手机端右边栏”设置后,Pocket 才会通过该稳定属性隐藏入口。

开启右边栏时还会调整 Files 按钮位置,避免两个右上角按钮重叠。

右栏面板本身继续使用 DSH 原生行为:

  • 普通窄屏由 DSH 使用全屏右栏。
  • 较宽手机或折叠屏使用 DSH 当前的响应式布局。
  • Pocket 只控制入口可见性,不修改右栏内部状态或面板实现。

实现

  • 新增 mobileRightbarEnabled 持久化设置,默认 true。
  • 新增 mobile.rightbar.setEnabled RPC。
  • pocket.status 返回当前右边栏设置。
  • 设置页增加中英文开关和说明。
  • 移动端启动时读取持久化设置。
  • 设置切换后立即更新页面,无需刷新。
  • RPC 失败或旧配置不存在时默认显示右栏入口。
  • 恢复出厂设置时恢复默认开启。
  • 桌面端布局不受影响。

兼容性

  • 修复后默认恢复 DSH 原生右边栏入口。
  • 现有设置文件无需迁移。
  • 不修改右栏打开、关闭、标签或全屏逻辑。
  • 用户仍可关闭入口以维持紧凑标题栏。
  • PIN、代理、认证、Cookie 和隧道行为不受影响。

Test plan

  • 执行 npm run build:client
  • 执行 npm test
  • 174 项测试全部通过
  • 验证配置缺失时右边栏默认开启
  • 验证关闭和重新开启状态持久化
  • 验证 RPC 与 pocket.status 正确同步
  • 验证恢复出厂设置后恢复默认开启
  • 验证仅在设置为关闭时隐藏 headerCorner
  • 验证不再依赖标题栏子元素顺序
  • 验证客户端 bundle 包含新设置逻辑
  • 验证与现有 PIN PR 可自动合并

🤖 Generated with Claude Code

Restore the native mobile right-sidebar control hidden by a brittle header selector, while adding a persisted switch for compact layouts.

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
@shaobeichen
shaobeichen merged commit d2e0b46 into shaobeichen:main Sep 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] 移动端样式误隐藏宿主右侧栏展开按钮::last-child 命中 headerCorner(DSH 0.1.5)

2 participants