feat(web): друзья, личные беседы и вход только по приглашению

Раздел «Друзья» по запросу пользователя:

- первая иконка рейки — «Друзья», серверы ниже за разделителем; личные беседы
  не засоряют список серверов;
- сайдбар друзей: беседы с точками статуса и бейджами непрочитанного,
  список друзей с кликом на беседу;
- контент: пустое состояние «Добавь друзей для общения» с поиском, поиск по
  логину (debounce), добавление в друзья, входящие и исходящие заявки,
  меню «…» (удалить/заблокировать), поповер последнего входа в часовом поясе
  пользователя (по умолчанию МСК), блок «Присоединиться по приглашению»
  с предпросмотром сервера;
- личный чат на существующих компонентах: права по can_send канала, заголовок
  с именем и статусом собеседника, поиск, пины, ack и typing работают;
- realtime: READY dm_channels, события DM_CHANNEL_CREATE, RELATIONSHIP_UPDATE,
  PRESENCE_UPDATE и MESSAGE_CREATE в беседах;
- новый пользователь: «У вас пока нет серверов», создание сервера и вход по
  приглашению (автовступления нет);
- 239 тестов Vitest (было 219), тест паритета ключей i18n (527 ключей).
This commit is contained in:
2026-09-20 01:52:27 +03:00
parent d02ef7527a
commit bcfc275bb3
15 changed files with 967 additions and 87 deletions
+4 -2
View File
@@ -176,7 +176,8 @@
},
"empty": {
"title": "You have no servers yet",
"body": "Create your own server or join one with an invite."
"body": "Create your own server or join one with an invite.",
"create": "Create your own server"
},
"leave": "Leave server",
"leaveConfirm": "Leave the server “{{name}}”?",
@@ -249,7 +250,8 @@
"adding": "Sending…",
"requested": "Request sent",
"friend": "Already friends",
"message": "Message"
"message": "Message",
"open": "Search friends"
},
"requests": {
"incoming": "Incoming requests",
+4 -2
View File
@@ -176,7 +176,8 @@
},
"empty": {
"title": "У вас пока нет серверов",
"body": "Создайте свой сервер или присоединитесь по приглашению."
"body": "Создайте свой сервер или присоединитесь по приглашению.",
"create": "Создать свой сервер"
},
"leave": "Покинуть сервер",
"leaveConfirm": "Покинуть сервер «{{name}}»?",
@@ -249,7 +250,8 @@
"adding": "Отправляем…",
"requested": "Заявка отправлена",
"friend": "Уже в друзьях",
"message": "Написать"
"message": "Написать",
"open": "Поиск друзей"
},
"requests": {
"incoming": "Входящие заявки",