feat(channels): фон комнаты и статичные превью при reduced-motion

- миграция 00014: background_file_id у комнаты (AGENT.md 7.5, 7.7)
- API: POST/DELETE /channels/{id}/background под MANAGE_CHANNEL_BACKGROUND,
  фон отдаётся в списке комнат и рассылается событием CHANNEL_UPDATE
- клиент: фон рисуется за лентой с затемнением, блок «Фон комнаты» в настройках
  комнаты (загрузка, замена, удаление)
- AnimatedImage: при «уменьшить движение» показывает статичный первый кадр,
  нарисованный на canvas, вместо анимации
- тесты: Go (загрузка, права, снятие) и Vitest (лента, настройки, reduced-motion)
This commit is contained in:
2026-09-21 18:08:21 +03:00
parent 91f415e36d
commit 0f0060e8a4
19 changed files with 733 additions and 16 deletions
+5
View File
@@ -30,6 +30,8 @@ type channelPayload struct {
CanView bool `json:"can_view"`
CanSend bool `json:"can_send"`
CanConnect bool `json:"can_connect"`
// BackgroundFileID — фон комнаты (AGENT.md 7.5, 7.7).
BackgroundFileID string `json:"background_file_id,omitempty"`
}
type rolePayload struct {
@@ -97,6 +99,9 @@ func channelFromStore(channel store.Channel, resolved *permissions.Resolved) cha
if channel.ParentID != nil {
payload.ParentID = formatSnowflake(*channel.ParentID)
}
if channel.BackgroundFileID != nil {
payload.BackgroundFileID = formatSnowflake(*channel.BackgroundFileID)
}
if resolved != nil {
payload.CanView = resolved.CanViewChannel()
payload.CanSend = resolved.Can(permissions.SendMessages)