Skip to content

fix(chat): 修复图片查看器打开后视口测量时序回归导致的黑框 - #603

Open
AlphaCatMeow wants to merge 1 commit into
Stack-Cairn:mainfrom
AlphaCatMeow:fix-image-preview-viewport
Open

fix(chat): 修复图片查看器打开后视口测量时序回归导致的黑框#603
AlphaCatMeow wants to merge 1 commit into
Stack-Cairn:mainfrom
AlphaCatMeow:fix-image-preview-viewport

Conversation

@AlphaCatMeow

@AlphaCatMeow AlphaCatMeow commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Linked issue

Closes #602

Summary

#448 将聊天图片查看器 ImagePreview 的模态实现迁移到了 @base-ui/reactDialog 组件,Dialog 内容改为异步挂载。但视口测量逻辑仍然用 useRefopen 状态变化的同一个 effect 里同步读取视口 DOM 节点并测量尺寸——此时 Dialog 内容尚未真正挂载,viewportRef.currentnullviewportSize 因此从未被正确设置,图片无法计算出正确渲染尺寸,表现为查看器打开后出现黑框、图片内容不渲染。

修复方式:viewport 引用从纯 useRef 改为 callback ref (setViewportRef) + state (viewportElement),测量 effect 依赖 [open, viewportElement],在节点真正挂载后才会重新触发测量。viewportRef 本身保留,供拖拽/滚轮锚点计算等其他逻辑继续同步读取。imagePreviewModel.ts 纯函数层未改动。GUI 与 Gateway WebUI 共用同一份 agent-ui 组件,无需分别修复。

Change scope

  • Modules: agent-ui(GUI 与 Gateway WebUI 共享)
  • Key paths: crates/agent-ui/src/components/chat/ImagePreview.tsx

Screenshots / preview

修复后:图片查看器正常打开,无黑框,图片内容清晰渲染,工具栏(缩放、旋转、下载、信息面板、关闭等)完整可用。

image viewer fixed

Verification

  • pnpm agent-gui build: 通过
  • pnpm agent-gui test:frontend: 通过
  • pnpm agent-gateway/web build: 通过
  • pnpm agent-gateway/web test: 通过
  • 任务文件 lint: 零错误
  • check-ui-boundaries: 通过(既有 3 个不合规文件与本次改动无关,未新增)
  • git diff --check: 通过,无空白错误
  • 人工 Tauri 验收(start-tauri-dev.bat 从本分支 HEAD 启动):已发送消息附件图片点击预览 ✅、composer 待发附件预览 ✅、缩放 ✅、旋转 ✅、拖拽 ✅、重置 ✅、全屏 ✅、信息面板 ✅。多图切换:确认该应用当前未提供切换上下张图片的按钮/交互(滚轮用于缩放),这是既有产品形态限制,非本次改动范围,不涉及回归

Pre-submit checklist

  • A requirement issue is linked (Closes 聊天图片查看器打开后黑框,图片内容不渲染 #602)
  • Synced with the target branch; no merge conflicts.
  • The change is focused, with no unrelated modifications.
  • No secrets, tokens, or personal data included.
  • Docs are updated for changes affecting user behavior, deployment, or configuration. — N/A,纯 bugfix,无用户可见行为/配置变更需要文档更新

Depends-On: none
Stack-Root: #603

Stack-Cairn#448 迁移到 base-ui Dialog 后,viewport 仍用 useRef 在 open 变化时同步读取
DOM 节点,但 Dialog 内容此时尚未挂载,导致测量 effect 拿到 null 而无法设置
viewportSize,查看器打开后出现黑框且图片不渲染。

将 viewport 引用改为 callback ref + state,测量 effect 依赖
[open, viewportElement],在节点真正挂载后才触发测量;viewportRef 保留供
拖拽/滚轮锚点同步读取。
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.

聊天图片查看器打开后黑框,图片内容不渲染

1 participant