Add "Frontend-State"
145
Frontend-State.-.md
Normal file
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`.
|
||||
Reference in New Issue
Block a user