fix(web): code review round 1 remaining UI fixes

- EmojiPanel: add missing 手势/物品 categories, 12-column grid per README §3.3
- DetailColumn: add 投诉举报 row, real ID/region/签名 via new getUserProfile
  API, chevron_right icons now use --color-icon-arrow token (were tertiary
  text color), regroup rows so dividers only sit between sections not every
  row (matches design-code reference exactly)
- MessageBubble/ConversationView: right-clicked message bubble now gets the
  spec's outline while its context menu is open
- ChatListColumn/AppShell: pinned 系统消息/文件助手 rows using confirmed
  bootstrap entries/entry_badges topic names ("sys"/"slf"); route to the
  existing SectionPlaceholder pattern since their own dedicated layouts are
  Phase 8, not built yet

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Your Name
2026-09-08 03:58:06 +08:00
co-authored by Claude Sonnet 5
parent a7da4dc079
commit 93d4077d1e
9 changed files with 191 additions and 42 deletions
+6 -1
View File
@@ -1,5 +1,6 @@
import { Outlet } from 'react-router-dom';
import { useBootstrap } from '@/lib/api/hooks';
import { useChatList } from '@/lib/tinode/hooks';
import { BottomTabBar } from './BottomTabBar';
@@ -13,7 +14,11 @@ import { NavRail } from './NavRail';
*/
export function AppShell() {
const contacts = useChatList();
const unreadMessages = contacts.reduce((sum, c) => sum + (c.unread || 0), 0);
const bootstrap = useBootstrap();
const unreadMessages =
contacts.reduce((sum, c) => sum + (c.unread || 0), 0) +
(bootstrap.data?.entry_badges?.system_unread_count || 0) +
(bootstrap.data?.entry_badges?.file_assistant_unread_count || 0);
return (
<div className="flex h-dvh w-full overflow-hidden bg-surface-page">