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
+15 -6
View File
@@ -117,18 +117,27 @@ export function findRequest(
}
/** Сброс всех сторов к исходному состоянию (изоляция между тестами). */
export function resetStores(): void {
useSessionStore.getState().reset();
useMessagesStore.getState().reset();
useVoiceStore.getState().reset();
useFriendsStore.getState().reset();
// Окно настроек — обычное состояние UI: между тестами оно должно быть закрыто.
/**
* Сброс UI-стора к начальному состоянию: окно настроек закрыто, список друзей
* свёрнут. Нужен и внутри `renderApp`, и в тестах, которые меняют настройки
* вида без перерисовки приложения.
*/
export function resetUiStore(): void {
useUiStore.setState({
guildCreateOpen: false,
settingsOpen: false,
settingsSection: 'profile',
settingsProfileTab: 'main',
friendsListOpen: false,
});
}
export function resetStores(): void {
useSessionStore.getState().reset();
useMessagesStore.getState().reset();
useVoiceStore.getState().reset();
useFriendsStore.getState().reset();
resetUiStore();
// `reset` закрывает и общее соединение шлюза: иначе колбэки прошлого теста
// (переподключение, статус) меняли бы стор уже следующего.
useGatewayStore.getState().reset();