Docs: sync Front#40 Mood AppShell + week scroll. Fixes EventHub/EventHubSpec#17

Refs EventHub/EventHubFront#40 (7c092d1 / db11c41).
This commit is contained in:
2026-07-28 22:09:59 +03:00
parent 86e53b5f0b
commit 8451bb352d
4 changed files with 42 additions and 21 deletions
+15 -11
View File
@@ -57,12 +57,16 @@ Deep-link на календарь, владельцем которого явл
Время на list-карточках — вторичное к title (`.eh-book-list-time`).
- В **Ещё**: язык (`LanguageSwitcher`); пункт входящих specialist invites скрыт при
`pending=0`; при `pending > 0` — badge со счётчиком (deep-link `/invites` работает).
**Mood в Ещё нет**только chip в chrome workspace календаря (Front#39).
- **Mood + Lens (workspace, Front#39):** в chrome календаря — mood chip (FLOW/MOMENTUM/
CONTROL → sheet picker); отдельно lens «Обзор / Сегодня / Записи» (desktop segment /
mobile sheet); над сеткой — collapsible lens strip (Front-only derive из уже
загруженных events/bookings). Без flip календаря; без 4-го CREATOR. Strip по
умолчанию раскрыт на desktop, свёрнут на mobile. Нет на HTML-архиве месяца.
**Mood в Ещё нет**chip в AppShell рядом с BrandWordmark (Front#40; ранее Front#39
в chrome workspace).
- **Mood + Lens (Front#39/#40):** mood chip (FLOW/MOMENTUM/CONTROL → sheet picker) —
в **AppShell** рядом с логотипом (**не** в toolbar Month/Week/Day). Отдельно lens
«Обзор / Сегодня / Записи» (desktop segment / mobile sheet); над сеткой —
collapsible lens strip (Front-only derive из уже загруженных events/bookings).
Без flip календаря; без 4-го CREATOR. Strip по умолчанию раскрыт на desktop,
свёрнут на mobile. Нет на HTML-архиве месяца.
- **Week view (Front#40):** одна строка day-headers (без дубля заголовков
`WeekDayColumn`); горизонтальный скролл через `.eh-cal-week-scroll` (mobile ~390).
- Контекст виджета: свой календарь (селектор) или чужой (browse после поиска). Чужой `personal`
только просмотр; чужой `commercial` с `booking_open=true` — запись; при `booking_open=false`
(restricted / нет подписки владельца) — просмотр + сообщение «Запись временно недоступна».
@@ -88,8 +92,8 @@ Deep-link на календарь, владельцем которого явл
discovery tops без ухода из Popular; в строке результата — id snippet и `calendar_title` для event.
- CRUD своих календарей — `/calendars` (из «Ещё»). Legacy `/discover`, `/calendars/:id` → redirects.
- На мобиле — bottom tab bar (+ safe-area); на desktop — **одна строка** chrome:
logo | nav tabs | nickname + logout (не два ряда header+nav). Сырой email в chrome
не показывать — primary identity = `nickname` (fallback без `@`).
logo + mood chip | nav tabs | nickname + logout (не два ряда header+nav). Сырой email
в chrome не показывать — primary identity = `nickname` (fallback без `@`).
Nav `aria-current` синхронизирован с `useLocation` (без remount `Outlet` по pathname).
- Mood themes — см. §3.2.
@@ -107,8 +111,8 @@ Deep-link на календарь, владельцем которого явл
**Где mood:**
- Auth (`/login`, `/register`, `/verify`, forgot/reset) — compact `MoodSwitcher` (+ language).
- Calendar workspace — primary control: **mood chip** → dialog/sheet (не в `/more`).
- App shell header — wordmark + nickname + logout (**без** mood/lang). Desktop: logo \| nav \| logout.
- AppShell — primary control: **mood chip** рядом с BrandWordmark → dialog/sheet
(**не** в `/more`, **не** в calendar toolbar Month/Week/Day). Desktop: logo + mood \| nav \| nickname + logout.
**Lens** (отдельно от mood и от view month/week/day): `overview` / `today` / `bookings`
(UI: Обзор / Сегодня / Записи). Persist только `localStorage` (`eh.calendar.lens` +
@@ -149,7 +153,7 @@ Redirects: `/discover` → `/search`; `/calendars/:id` → `/c/:id`; `/calendars
Регистрация, верификация, вход, восстановление сессии.
### 5.2. Профиль
`GET /v1/user/me` + форма на `/profile`. Редактируемые через `PATCH /v1/user/me`: `nickname`, `phone`, `timezone`, `avatar_url`, `language`; смена пароля — `current_password` + `password`. Read-only в UI: `id`, `email`, `role`, `status`. Mood — chip в calendar workspace (+ compact на auth); persist `preferences.mood` через `PATCH /v1/user/me` (**не** в `/more`). Язык при первом визите — из браузера; при первом логине без `language` — пишется в профиль. Mood по умолчанию `calm`, при логине не сидится. Lens — только localStorage (не профиль).
`GET /v1/user/me` + форма на `/profile`. Редактируемые через `PATCH /v1/user/me`: `nickname`, `phone`, `timezone`, `avatar_url`, `language`; смена пароля — `current_password` + `password`. Read-only в UI: `id`, `email`, `role`, `status`. Mood — chip в AppShell рядом с BrandWordmark (+ compact на auth); persist `preferences.mood` через `PATCH /v1/user/me` (**не** в `/more`, **не** в calendar toolbar). Язык при первом визите — из браузера; при первом логине без `language` — пишется в профиль. Mood по умолчанию `calm`, при логине не сидится. Lens — только localStorage (не профиль).
### 5.3. Поиск (участник)
`GET /v1/search` — фильтры (`type`, `q`, `tags`, даты, `lat`/`lon`/`radius`, sort, order, пагинация). Без `q`/дат/tags/geo/sort — топы календарей и событий; иначе — поиск. В списке бейдж типа — `calendar`|`event` (не `personal`/`commercial`). Даты, теги, geo и сортировка свёрнуты по умолчанию. Переход к `/c/:id` или `/c/:id/e/:eventId`.