feat(web): профиль с аватаром, панель в углу, настройки сервера, скрытые ID

Правки пользователя:

- в «Профиль → Основной» сверху квадратный аватар слева, справа от него
  настройки имени, «О себе», состояния и эмодзи во всю высоту; смена аватара —
  клик по нему, форматы (JPEG, PNG, WebP, GIF до 8 МБ) — в подсказке;
- убраны дубли: часовой пояс только в «Язык и регион», статус — только в
  мини-профиле панели;
- панель пользователя переехала в нижний левый угол под сайдбар, подсказка о
  выходе из сервера — на её прежнее место; панель ужата под 240 px;
- шестерёнка сервера открывает новый пункт настроек «Сервер» (список серверов,
  общее, участники, роли, опасная зона), а «Профиль → Сервер» оставлен только
  для ника и «Применить ко всем серверам»;
- окно настроек получило статический размер 70% рабочей области со скроллом;
- ID пользователей скрыты везде, кроме раздела «Инстанс» у администратора;
- список друзей свёрнут под кнопкой «Друзья (N)» и раскрывается снизу вверх;
- 249 тестов Vitest (было 239), check/lint/test/build зелёные.
This commit is contained in:
2026-09-20 11:24:09 +03:00
parent bd5f09336b
commit 4c8f888b3e
27 changed files with 1071 additions and 419 deletions
+14 -15
View File
@@ -266,7 +266,8 @@
"more": "Actions: {{name}}",
"menu": "Actions for {{name}}",
"remove": "Remove friend",
"block": "Block"
"block": "Block",
"toggle": "Friends ({{count}})"
},
"lastSeen": {
"label": "Last seen",
@@ -406,7 +407,6 @@
"logout": "Sign out",
"loggingOut": "Signing out…",
"statusLabel": "Status: {{status}}",
"copyId": "Copy ID",
"status": {
"online": "Online",
"idle": "Idle",
@@ -463,11 +463,14 @@
"security": "Security",
"appearance": "Appearance",
"notifications": "Notifications",
"server": "Server",
"voice": "Audio & video",
"language": "Language & region",
"instance": "Instance"
},
"profile": {
"avatar.change": "Change avatar",
"avatar.uploading": "Uploading…",
"title": "Profile",
"description": "How other members see you.",
"displayName": "Display name",
@@ -477,11 +480,8 @@
"customStatusPlaceholder": "For example, “Writing code”",
"customStatusEmoji": "Status emoji",
"customStatusEmojiPlaceholder": "🚀",
"status": "Presence status",
"locale": "Interface language",
"saved": "Profile saved.",
"username": "Username",
"userId": "User ID",
"badges": "Badges",
"noBadges": "none",
"tabsLabel": "Profile tabs",
@@ -489,18 +489,15 @@
"main": "General",
"server": "Server"
},
"timezone": "Time zone",
"timezoneHint": "Used to show message times.",
"timezoneDefault": "default (MSK)",
"avatar": {
"title": "Avatar",
"hint": "Everyone can see this picture.",
"preview": "Avatar preview",
"choose": "Choose an avatar file",
"upload": "Upload avatar",
"change": "Change avatar",
"choose": "Choose avatar file",
"remove": "Remove avatar",
"limit": "Up to {{limit}}; PNG, JPEG, WebP or GIF.",
"tooLarge": "The file is larger than {{limit}} — pick a smaller image."
"formats": "JPEG, PNG, WebP, GIF",
"limit": "{{formats}} up to {{limit}}",
"tooLarge": "The file is larger than {{limit}} — pick a smaller image.",
"uploading": "Uploading…"
},
"decorations": {
"title": "Decorations",
@@ -568,13 +565,15 @@
"settingsEmpty": "No settings configured.",
"guilds": "Servers ({{count}})",
"guildsEmpty": "No servers.",
"userId": "User ID",
"users": "Users ({{count}})",
"usersEmpty": "No users.",
"audit": "Audit log (last {{count}})",
"auditEmpty": "No entries.",
"memberCount": "{{count}} members",
"adminBadge": "admin",
"mainBadge": "main"
"mainBadge": "main",
"usersIdHint": "User IDs are visible to the instance administrator only."
},
"servers": {
"pickerLabel": "My servers",
+13 -14
View File
@@ -266,7 +266,8 @@
"more": "Действия: {{name}}",
"menu": "Действия с {{name}}",
"remove": "Удалить из друзей",
"block": "Заблокировать"
"block": "Заблокировать",
"toggle": "Друзья ({{count}})"
},
"lastSeen": {
"label": "Последний вход",
@@ -406,7 +407,6 @@
"logout": "Выйти",
"loggingOut": "Выходим…",
"statusLabel": "Статус: {{status}}",
"copyId": "Скопировать ID",
"status": {
"online": "В сети",
"idle": "Неактивен",
@@ -463,11 +463,14 @@
"security": "Безопасность",
"appearance": "Внешний вид",
"notifications": "Уведомления",
"server": "Сервер",
"voice": "Аудио-видео",
"language": "Язык и регион",
"instance": "Инстанс"
},
"profile": {
"avatar.change": "Сменить аватар",
"avatar.uploading": "Загружаем…",
"title": "Профиль",
"description": "Как вас видят другие участники.",
"displayName": "Отображаемое имя",
@@ -477,11 +480,8 @@
"customStatusPlaceholder": "Например, «Пишу код»",
"customStatusEmoji": "Эмодзи состояния",
"customStatusEmojiPlaceholder": "🚀",
"status": "Статус присутствия",
"locale": "Язык интерфейса",
"saved": "Профиль сохранён.",
"username": "Имя пользователя",
"userId": "ID пользователя",
"badges": "Значки",
"noBadges": "нет",
"tabsLabel": "Вкладки профиля",
@@ -489,18 +489,15 @@
"main": "Основной",
"server": "Сервер"
},
"timezone": "Часовой пояс",
"timezoneHint": "По нему показывается время сообщений.",
"timezoneDefault": "по умолчанию (МСК)",
"avatar": {
"title": "Аватар",
"hint": "Картинку видят все участники.",
"preview": "Предпросмотр аватара",
"change": "Сменить аватар",
"choose": "Выбрать файл аватара",
"upload": "Загрузить аватар",
"remove": "Удалить аватар",
"limit": "До {{limit}}; PNG, JPEG, WebP или GIF.",
"tooLarge": "Файл больше {{limit}} — выберите картинку поменьше."
"formats": "JPEG, PNG, WebP, GIF",
"limit": "{{formats}} до {{limit}}",
"tooLarge": "Файл больше {{limit}} — выберите картинку поменьше.",
"uploading": "Загружаем…"
},
"decorations": {
"title": "Украшения",
@@ -568,13 +565,15 @@
"settingsEmpty": "Настройки не заданы.",
"guilds": "Серверы ({{count}})",
"guildsEmpty": "Серверов нет.",
"userId": "ID пользователя",
"users": "Пользователи ({{count}})",
"usersEmpty": "Пользователей нет.",
"audit": "Журнал аудита (последние {{count}})",
"auditEmpty": "Записей нет.",
"memberCount": "{{count}} участн.",
"adminBadge": "админ",
"mainBadge": "главный"
"mainBadge": "главный",
"usersIdHint": "ID пользователей видны только администратору инстанса."
},
"servers": {
"pickerLabel": "Мои серверы",