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
+19
View File
@@ -72,6 +72,25 @@ export function rejectFriendRequest(requestId: string, version?: number) {
return imPost<void>(`/friend-requests/${encodeURIComponent(requestId)}/reject`, version !== undefined ? { version } : {});
}
export interface UserProfile {
user_id: string;
display_name: string;
remark?: string;
avatar_file_id?: string;
gender?: string;
region?: string;
public_account?: string;
signature?: string;
relationship: string;
topic?: string;
}
/** `identifier` accepts `user_id`, `username`, or `public_account` -- P2P topic names are the peer's
* own user_id (Tinode convention), so DetailColumn can pass `topicId` straight through. */
export function getUserProfile(identifier: string) {
return imGet<UserProfile>(`/users/${encodeURIComponent(identifier)}/profile`);
}
export interface ConversationSettings {
pinned: boolean;
mute_notifications: boolean;