feat(web): оформление сервера в настройках, рейке и приглашении

Фаза 4 (AGENT.md 7.4): интерфейс для иконки, баннера, splash и акцентного цвета.

- секция «Оформление» в настройках сервера: загрузка и удаление иконки,
  баннера и splash с превью, проверка типа и размера на клиенте, пресеты
  акцентного цвета;
- иконка сервера показывается в рейке (заглушка-буквы остаётся, если файла
  нет), акцентный цвет переопределяет `--color-accent` внутри приложения и
  снимается при значении 0;
- предпросмотр приглашения показывает splash фоном и иконку сервера;
- ответ сервера обновляет карточку и список серверов — оформление видно без
  перезагрузки;
- тесты: превью всех трёх видов, multipart-загрузка, удаление, применение и
  снятие акцента, отказ для не-изображения, скрытие секции без MANAGE_GUILD.
This commit is contained in:
2026-09-20 23:34:05 +03:00
parent 02a5b99418
commit 6882516340
11 changed files with 663 additions and 4 deletions
+8 -2
View File
@@ -4,7 +4,7 @@ import { NavLink } from 'react-router';
import { Avatar } from '@/components/ui/Avatar';
interface GuildRailProps {
guilds: { id: string; name: string }[];
guilds: { id: string; name: string; icon_file_id?: string | undefined }[];
selectedGuildId: string | null;
canCreate: boolean;
onCreate: () => void;
@@ -70,7 +70,13 @@ export function GuildRail({ guilds, selectedGuildId, canCreate, onCreate }: Guil
: 'hover:-translate-y-0.5 hover:rounded-[var(--radius-lg)] active:translate-y-0'
}`}
>
<Avatar name={guild.name} seed={guild.id} size="lg" shape="square" />
<Avatar
name={guild.name}
seed={guild.id}
fileId={guild.icon_file_id}
size="lg"
shape="square"
/>
</NavLink>
</li>
);