Add "Frontend-State"

2026-04-12 20:46:46 +00:00
parent cc26d7e753
commit a6a623e680

145
Frontend-State.-.md Normal file

@@ -0,0 +1,145 @@
# Frontend State
## Все переменные состояния App.svelte
### Авторизация
| Переменная | Тип | Описание |
|------------|-----|----------|
| `currentUser` | object | `{id, login, name, role, projects, theme, activePage, previewZoom}` |
| `authChecked` | bool | Проверка авторизации завершена |
| `loginForm` | object | `{login, password}` |
| `loginError` | string | Ошибка логина |
| `loginLoading` | bool | |
| `loginBg` | string | Случайный фон из 5 изображений |
### Блоки
| Переменная | Тип | Описание |
|------------|-----|----------|
| `availableBlocks` | array | Блоки из Block.pug |
| `assembledBlocks` | array | Текущие блоки в конструкторе. Каждый: `{id, name, content, collapsed, schema, addSpacing, spacing, segment, swapCenter}` |
| `customBlocksList` | array | Кастомные блоки из settings |
| `allBlocks` | array | Merged available + custom |
### Гендер
| Переменная | Тип | Описание |
|------------|-----|----------|
| `currentGenderVersion` | string | 'female' / 'male' |
| `segmentFlipped` | bool | Состояние toggle flip |
| `partsFiles` | array | Список pug-файлов header/footer |
### Превью
| Переменная | Тип | Описание |
|------------|-----|----------|
| `previewHtml` | string | HTML с подстановкой Mindbox |
| `rawPreviewHtml` | string | HTML без Mindbox |
| `previewLoading` | bool | |
| `previewError` | string | |
| `previewGeneratedAt` | string | ISO timestamp |
| `previewStale` | bool | Есть несохранённые изменения |
| `previewSourcePug` | string | PUG при последнем рендере |
| `previewZoom` | number | 40-100 |
| `outputPanelMode` | string | 'pug' / 'preview' / 'html' |
| `previewContentWidth/Height` | number | Размеры контента |
| `previewScale` | number | Масштаб для viewport |
### Фид / Mindbox
| Переменная | Тип | Описание |
|------------|-----|----------|
| `unavailableProducts` | array | Товары не в наличии |
| `feedSyncedAt` | number | Timestamp последней синхронизации |
| `suggestForProduct` | object | Товар для замены |
| `suggestResults` | array | Рекомендации замены |
### FTP
| Переменная | Тип | Описание |
|------------|-----|----------|
| `showFtpGalleryModal` | bool | |
| `ftpGalleryImages` | array | Файлы в галерее |
| `ftpGalleryFolder` | string | Текущая папка |
| `ftpGalleryCache` | object | `{folder: files[]}` |
| `ftpUploading` | bool | |
| `ftpUploadProgress` | string | Текст прогресса |
### План / Yonote
| Переменная | Тип | Описание |
|------------|-----|----------|
| `planRows` | array | Строки из Yonote |
| `planCalMonth` | Date | Текущий месяц календаря |
| `planCalSelectedDate` | string | Выбранная дата |
| `planShowDone` | bool | Показывать отправленные |
| `planPollingTimer` | number | ID интервала (3 мин) |
| `assemblyInfo` | object | Данные карточки сборки |
### Spell / Link check
| Переменная | Тип | Описание |
|------------|-----|----------|
| `spellCheckActive` | bool | |
| `spellErrors` | array | Найденные ошибки |
| `spellerHtml` | string | HTML с метками ошибок |
| `linkCheckActive` | bool | |
| `linkCheckResults` | array | Результаты проверки |
### Письма
| Переменная | Тип | Описание |
|------------|-----|----------|
| `letters` | array | Все письма юзера |
| `currentLetterId` | string | Текущее письмо |
| `currentLetterName/Title/Date` | string | Поля письма |
| `history` | array | Undo stack (макс 50) |
| `isDirty` | bool | Есть несохранённые изменения |
### UI
| Переменная | Тип | Описание |
|------------|-----|----------|
| `theme` | string | 'light' / 'dark' |
| `activePage` | string | 'builder' / 'settings' / 'presets' / 'notes' / 'plan' / 'stats' / 'admin' |
| `settingsTab` | string | Активная вкладка настроек |
| `toasts` | array | Уведомления |
## localStorage
| Ключ | Описание |
|------|----------|
| `va-theme` | 'light' / 'dark' |
| `va-active-page` | Последняя страница |
| `va-previewZoom` | Масштаб превью |
| `va-plan-cache` | Кэш плана `{rows, ts}` |
## Cookies
| Cookie | Описание |
|--------|----------|
| `va_token` | Сессия (HttpOnly, Secure, SameSite=Strict, 7 дней) |
## Keyboard Shortcuts
| Комбинация | Действие |
|------------|----------|
| `Ctrl/Cmd + S` | Сохранить |
| `Ctrl/Cmd + G` | Рендер превью |
| `Ctrl/Cmd + Z` | Undo (только вне input/textarea) |
| `Shift + Enter` | Вставить `<br>` в поле блока |
## CSS Темы
### Light (`:root`)
```css
--bg: #ffffff
--text: #130F33
--accent: #130F33
--accent-secondary: #AAC8C8
--panel: #ffffff
--pill: #f4f4f6
```
### Dark (`body.theme-dark`)
```css
--bg: #130F33
--text: #e4e7ec
--accent: #AAC8C8
--accent-contrast: #130F33
--panel: #1a1545
--pill: #221c52
```
Акцентный цвет проекта настраивается в settings → `accentColor` и устанавливается через CSS custom properties `--project-accent`.