Skip to content

Commit ced0b4c

Browse files
authored
Merge pull request #25 from AHTu21/chore/release-v0.13.0
chore(release): v0.13.0 [version:skip]
2 parents 9005246 + 07fbb3c commit ced0b4c

8 files changed

Lines changed: 90 additions & 26 deletions

File tree

CHANGELOG.md

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,17 @@
88

99
## [Unreleased]
1010

11-
### Сообщения (`/messages`)
11+
_Черновик до следующего релиза; в окне «О программе» не показывается._
1212

13-
- **Раздел «Сообщения»** в меню приложения: личные чаты, **группы**, системные каналы (**Новости** — только чтение, **Поддержка** — диалог с командой и **быстрыми командами**).
14-
- **Левая колонка:** иконка **профиля** (аватар, ФИО, «Создать группу», переход в **Избранное**), поиск пользователя для нового диалога, список чатов с непрочитанными; при открытом профиле список **приглушается**.
15-
- **Переписка:** отправка текста и **вложений** (скрепка, Enter и иконка отправки без обязательного текста), **эмодзи** в поле ввода; превью и **скачивание** файлов (иконка загрузки).
16-
- **Сообщения (ПКМ):** ответ, редактирование своих, **удалить у всех** / **только у меня**, пересылка в **Избранное**; скрытие «у себя» с запасом в `localStorage`, если миграция БД ещё не применена.
17-
- **Избранное:** личный канал для заметок и пересланных сообщений.
18-
- **Группы:** в шапке чата — **Настройки** (фото группы как у профиля — только «Загрузить фото», увеличение по клику), список участников, **добавление** по поиску, **Покинуть группу**, **Удалить группу** (только создатель); лента при открытых настройках приглушается.
13+
<!-- changelog:user -->
1914

20-
### Интерфейс
15+
## [0.13.0] — 2026-05-28
2116

22-
- Пункт **«Сообщения»** в overflow-меню шапки (рядом с профилем и комнатами).
17+
### Профиль (`/profile`)
2318

24-
<!-- changelog:user -->
19+
- **Обзор:** блок «Заполнение профиля» можно **скрыть** вручную; при **100%** он скрывается сам; свёрнутый чек-лист можно снова развернуть.
20+
- **Оформление доски:** предупреждение о контрасте фона и шапки срабатывает только когда цвета **действительно сливаются**, а не на обычные светлые темы.
21+
- **Блокнот:** текст на **2px** выше линий разметки — символы вроде `[ ]` не наезжают на линию.
2522

2623
## [0.12.0] — 2026-05-28
2724

@@ -236,6 +233,7 @@
236233

237234
### API и сервер (история по релизам)
238235

236+
- **0.13.0:** только клиент — сворачивание чек-листа заполнения профиля (`retrogen_profile_progress_collapsed_v1`); порог подсказки контраста фона/шапки по Δ яркости; сдвиг линейки блокнота.
239237
- **0.12.0:** только клиент — редизайн `pages/profile/*` (sidebar + detail, панели секций, `profileOverviewUi`, `profileLobbyUi`, `profileNotepadUi`, `profileSecurityUi`, пресеты комнаты); миграция местоимений en→ru в `profilePrefs`; обрезка горизонтального overflow (`profile-no-scroll-x`).
240238
- **0.11.0 / мессенджер:** Prisma `Chat`, `ChatMember`, `Message`, `MessageAttachment`, `MessageHidden`; модуль `server/src/chat/`; REST `/api/chats`, вложения `/api/chat/attachments/:id`, группа (`PATCH …/group/avatar`, `POST …/group/members`, `POST …/leave`, `DELETE …/:chatId`); Socket.IO `chat:join`, `chat:message.created|updated|hidden`, `chat:list.updated`, `chat:typing`. Файлы вложений — `server/data/chat-attachments/``.gitignore`). Миграции `20260525180000_messenger`, `20260525200000_message_hidden`; после pull — `npm run db:deploy`.
241239
- **0.10.0:** только клиент — `retrogen_profile_v1` в `localStorage`, событие `retrogen-profile`; модули `pages/profile/*`, `profileAccent`, `profileRoomColors`; миграция legacy (аватар ≠ обои доски).

client/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "client",
3-
"version": "0.12.0",
3+
"version": "0.13.0",
44
"private": true,
55
"type": "module",
66
"scripts": {

client/src/lib/profileRoomColors.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,16 @@ function hexRelativeLuminance(hex: string): number {
6868
return 0.2126 * channel(0) + 0.7152 * channel(2) + 0.0722 * channel(4);
6969
}
7070

71-
/** Подсказка, если фон и шапка слишком близки по яркости (WCAG-упрощённо). */
71+
/** Подсказка, если фон и шапка сливаются по яркости (не общий WCAG-текст). */
7272
export function roomPaletteContrastHint(boardBackdrop: string, headerTint: string): string | null {
7373
const bg = normalizeBoardBackdropColor(boardBackdrop);
7474
const header = normalizeHeaderTintColor(headerTint);
7575
const bgL = hexRelativeLuminance(bg);
7676
const headerL = hexRelativeLuminance(header);
77-
const ratio = (Math.max(bgL, headerL) + 0.05) / (Math.min(bgL, headerL) + 0.05);
78-
if (ratio < 1.35) {
77+
const delta = Math.abs(bgL - headerL);
78+
// Старый порог по ratio (<1.35) срабатывал на нормальные светлые темы (#e4e4e7 + #fff).
79+
// Предупреждаем только когда яркости почти совпадают (тёмная шапка на тёмном фоне и т.п.).
80+
if (delta < 0.07) {
7981
return "Фон и шапка почти сливаются — выберите более контрастную пару.";
8082
}
8183
return null;

client/src/pages/profile/profileNotepadUi.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,12 +237,14 @@ export function NotepadWorkspace({
237237
<div className="bg-[var(--ph-notepad-bg)]">
238238
<textarea
239239
ref={textareaRef}
240-
className="block min-h-[min(22rem,55vh)] w-full resize-y border-0 bg-transparent px-4 pb-4 pt-1 font-[inherit] text-[0.9375rem] leading-[1.5rem] text-[var(--ph-text)] outline-none placeholder:text-[var(--ph-muted)] placeholder:opacity-80"
240+
className="block min-h-[min(22rem,55vh)] w-full resize-y border-0 bg-transparent px-4 pb-4 pt-1 font-[inherit] text-[0.9375rem] text-[var(--ph-text)] outline-none placeholder:text-[var(--ph-muted)] placeholder:opacity-80"
241241
style={{
242242
lineHeight,
243243
backgroundImage: notepadLinedBackground(),
244244
backgroundAttachment: "local",
245245
backgroundSize: `100% ${lineHeight}`,
246+
/* линии на 2px ниже — descenders ([ ]) не наезжают на разметку */
247+
backgroundPosition: "0 2px",
246248
}}
247249
value={value}
248250
placeholder={NOTEPAD_PLACEHOLDER}

client/src/pages/profile/profileOverviewUi.tsx

Lines changed: 67 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { ReactNode } from "react";
1+
import { useEffect, useState, type ReactNode } from "react";
22
import { Link } from "react-router-dom";
33
import type { AuthUserDto } from "../../api";
44
import type { UserProfilePrefs } from "../../lib/profilePrefs";
@@ -257,6 +257,24 @@ export function OverviewHub({
257257
);
258258
}
259259

260+
const PROFILE_PROGRESS_COLLAPSED_KEY = "retrogen_profile_progress_collapsed_v1";
261+
262+
function readProfileProgressCollapsed(): boolean {
263+
try {
264+
return localStorage.getItem(PROFILE_PROGRESS_COLLAPSED_KEY) === "1";
265+
} catch {
266+
return false;
267+
}
268+
}
269+
270+
function writeProfileProgressCollapsed(collapsed: boolean) {
271+
try {
272+
localStorage.setItem(PROFILE_PROGRESS_COLLAPSED_KEY, collapsed ? "1" : "0");
273+
} catch {
274+
/* ignore */
275+
}
276+
}
277+
260278
export function OverviewProfileProgress({
261279
d,
262280
tasks,
@@ -268,17 +286,61 @@ export function OverviewProfileProgress({
268286
}) {
269287
const done = tasks.filter((t) => t.done).length;
270288
const pct = Math.round((done / tasks.length) * 100);
289+
const [collapsed, setCollapsed] = useState(readProfileProgressCollapsed);
290+
291+
useEffect(() => {
292+
if (pct === 100) {
293+
setCollapsed(true);
294+
writeProfileProgressCollapsed(true);
295+
}
296+
}, [pct]);
297+
298+
const collapse = () => {
299+
setCollapsed(true);
300+
writeProfileProgressCollapsed(true);
301+
};
302+
303+
const expand = () => {
304+
setCollapsed(false);
305+
writeProfileProgressCollapsed(false);
306+
};
307+
308+
if (collapsed && pct === 100) {
309+
return null;
310+
}
311+
312+
if (collapsed) {
313+
return (
314+
<section className="px-0.5">
315+
<button
316+
type="button"
317+
onClick={expand}
318+
className={`flex w-full items-center justify-between gap-3 rounded-xl px-4 py-3 text-left ring-1 ring-[var(--ph-border)] transition hover:bg-[var(--ph-nav-hover)] ${d.rSm} bg-[var(--ph-surface)]`}
319+
>
320+
<span className="text-[0.8125rem] font-medium text-[var(--ph-text)]">Заполнение профиля</span>
321+
<span className={`shrink-0 text-[0.75rem] font-medium tabular-nums ${d.link}`}>{pct}% · показать</span>
322+
</button>
323+
</section>
324+
);
325+
}
271326

272327
return (
273328
<section className="space-y-2">
274329
<div className="flex flex-wrap items-end justify-between gap-2 px-0.5">
275-
<div>
330+
<div className="min-w-0 flex-1">
276331
<h2 className={d.groupTitle}>Заполнение профиля</h2>
277332
<p className={d.groupDesc}>Подсказки — что улучшить до следующего ретро</p>
278333
</div>
279-
<span className={`text-[0.8125rem] font-semibold tabular-nums ${pct === 100 ? "text-emerald-600 dark:text-emerald-400" : d.muted}`}>
280-
{pct}%
281-
</span>
334+
<div className="flex shrink-0 items-center gap-3">
335+
<span
336+
className={`text-[0.8125rem] font-semibold tabular-nums ${pct === 100 ? "text-emerald-600 dark:text-emerald-400" : d.muted}`}
337+
>
338+
{pct}%
339+
</span>
340+
<button type="button" className={`text-[0.75rem] font-medium ${d.link}`} onClick={collapse}>
341+
Скрыть
342+
</button>
343+
</div>
282344
</div>
283345
<div className={`${d.insetGroup} overflow-hidden`}>
284346
<div className="h-1.5 bg-[var(--ph-surface-elevated)]">

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "retrogen",
3-
"version": "0.12.0",
3+
"version": "0.13.0",
44
"private": true,
55
"workspaces": [
66
"client",

server/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "server",
3-
"version": "0.12.0",
3+
"version": "0.13.0",
44
"private": true,
55
"type": "module",
66
"scripts": {

0 commit comments

Comments
 (0)