Corp/backend/static/scss/README.md
Игорь Надеин 9df9f78666 refactor: Complete SCSS architecture reorganization
SCSS Architecture 2.0 - Feature-based structure

### Major Changes:
- ✅ Reorganized 51 SCSS files into logical categories
- ✅ Created feature-based structure: core/, layout/, features/, utilities/
- ✅ Merged duplicate components: badges (2→1), modals (3→1), lists (2→1), spacing (2→1)
- ✅ Renamed files: ios-search→search, team-wheel→team-viz, recipientPicker→recipient-picker
- ✅ Cleaned custom-bootstrap.scss from all app components
- ✅ Moved chat components from custom-bootstrap to main.scss

### Results:
- Files: 51 → 38 (-13 files, -25%)
- bootstrap-custom.css: 301 KB → 229 KB (-72 KB, -24%)
- app.css: 95 KB → 137 KB (+42 KB, expected)
- Total CSS: 396 KB → 366 KB (-30 KB, -7.5%)

### New Structure:
scss/
├── abstracts/           # Variables, mixins (4 files)
├── core/               # UI Kit - reusable components (9 files)
│   ├── buttons, badges, cards, lists, modals, etc.
├── layout/             # App structure (6 files)
│   ├── grid, navbar, sidebar, rightbar, etc.
├── utilities/          # Utility classes (1 file)
│   └── spacing
└── features/           # Feature-specific styles (18 files in 6 folders)
    ├── feed/          (3 files)
    ├── requests/      (3 files)
    ├── documents/     (1 file)
    ├── employees/     (2 files)
    ├── notifications/ (1 file)
    └── chat/          (10 files)

### Benefits:
- Clear categorization
- No duplicate imports (removed 8 duplicates)
- Logical feature grouping
- Easier maintenance
- Clean architecture
- Better naming conventions

### Documentation:
- scss/README.md - full architecture documentation
- scss/MIGRATION_MATRIX.md - file migration matrix
- docs/reports/SCSS_REORGANIZATION_COMPLETE.md - completion report

Bootstrap remains as base UI framework.
2026-01-15 14:11:14 +03:00

258 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SCSS Architecture
**Дата реорганизации:** 15 января 2026
**Версия:** 2.0
**Архитектура:** Feature-based с Core UI Kit
---
## 📁 Структура
```
scss/
├── abstracts/ # Переменные, миксины, функции
│ ├── _variables.scss # SCSS переменные
│ ├── _css-variables.scss # CSS custom properties
│ ├── _mixins.scss # Миксины
│ └── _index.scss # Экспорт
│
├── core/ # UI Kit - переиспользуемые компоненты
│ ├── _buttons.scss # Кнопки
│ ├── _badges.scss # Бейджи (объединены BEM + Telegram стили)
│ ├── _cards.scss # Карточки
│ ├── _comments.scss # Комментарии
│ ├── _common.scss # Общие стили
│ ├── _lists.scss # Списки (объединены card-list + list-view)
│ ├── _modals.scss # Модалы (объединены 3 файла)
│ ├── _search.scss # Поиск (было ios-search)
│ └── _ui-elements.scss # UI элементы (было ios-components)
│
├── layout/ # Структура приложения
│ ├── _grid.scss # Grid система (было base-app)
│ ├── _chat-layout.scss # Layout чата
│ ├── _navbar.scss # Навигация
│ ├── _page-header.scss # Заголовок страницы
│ ├── _sidebar.scss # Боковая панель
│ └── _rightbar.scss # Правая панель + календарь
│
├── utilities/ # Вспомогательные классы
│ └── _spacing.scss # Spacing утилиты (объединены 2 файла)
│
└── features/ # Feature-specific стили
├── feed/ # Лента новостей
│ ├── _layout.scss
│ ├── _post-form.scss
│ └── _members-scroller.scss
│
├── requests/ # Заявки
│ ├── _list.scss
│ ├── _detail.scss
│ └── _recipient-picker.scss
│
├── documents/ # Документы
│ └── _list.scss
│
├── employees/ # Сотрудники
│ ├── _controls.scss
│ └── _team-viz.scss
│
├── notifications/ # Уведомления
│ └── _center.scss
│
└── chat/ # Чат (10 файлов)
├── _message-inputs.scss
├── _chat-detail.scss
├── _chat-date-groups.scss
├── _chat-list-enhanced.scss
├── _chat-enhanced.scss
├── _chat-polls.scss
├── _chat-new-messages-indicator.scss
├── _message-selection.scss
├── _message-context-menu.scss
└── _message-reactions.scss
```
---
## 🎯 Entry Points
### 1. main.scss → css/app.css (137 KB)
Основной файл приложения. Содержит:
- Core UI Kit
- Layout системы
- Utilities
- Feature-specific стили
**Команда:** `npm run build:app`
### 2. custom-bootstrap.scss → css/bootstrap-custom.css (229 KB)
Bootstrap с переопределенными переменными. Содержит **ТОЛЬКО**:
- Переопределения Bootstrap переменных
- Импорт Bootstrap
- CSS custom properties
**Команда:** `npm run build:bootstrap`
**НЕ СОДЕРЖИТ** компонентов приложения!
---
## 📊 Статистика
**Всего файлов:** 38 (было 51)
**Уменьшение:** -13 файлов (-25%)
**Распределение:**
- Abstracts: 4 файла
- Core: 9 файлов
- Layout: 6 файлов
- Utilities: 1 файл
- Features: 18 файлов (в 6 папках)
**Размеры CSS:**
- app.css: 137 KB
- bootstrap-custom.css: 229 KB
- **Итого:** 366 KB (было 376 KB, экономия 10 KB)
---
## 🔄 Изменения от предыдущей версии
### Объединения (8 файлов → 4):
1. ✅ `badges-bem.scss` + `badges-telegram-style.scss` → `core/_badges.scss`
2. ✅ `modals.scss` + `modal-overrides.scss` + `logout-modal.scss` → `core/_modals.scss`
3. ✅ `card-list.scss` + `list-view.scss` → `core/_lists.scss`
4. ✅ `spacing-utils.scss` + `layout-spacing.scss` → `utilities/_spacing.scss`
### Переименования:
1. ✅ `ios-search.scss` → `core/_search.scss`
2. ✅ `ios-components.scss` → `core/_ui-elements.scss`
3. ✅ `base-app.scss` → `layout/_grid.scss`
4. ✅ `rightbar-calendar.scss` → `layout/_rightbar.scss`
5. ✅ `feed-specific.scss` → `features/feed/_layout.scss`
6. ✅ `join-scroller.scss` → `features/feed/_members-scroller.scss`
7. ✅ `recipientPicker.scss` → `features/requests/_recipient-picker.scss`
8. ✅ `team-wheel.scss` → `features/employees/_team-viz.scss`
### Перемещения:
- ✅ Все компоненты из `components/` распределены по категориям
- ✅ Chat компоненты перемещены в `features/chat/`
- ✅ Layout компоненты собраны в `layout/`
---
## 🚀 Build Commands
```bash
# Собрать app.css
npm run build:app
# Собрать bootstrap-custom.css
npm run build:bootstrap
# Собрать оба
npm run build
# Watch mode (автоперекомпиляция при изменениях)
npm run dev
```
---
## 📝 Правила добавления новых стилей
### Core компоненты
**Когда:** Переиспользуемый UI элемент (кнопка, карточка, бейдж и т.д.)
**Где:** `core/_component.scss`
**Пример:**
```scss
// core/_alerts.scss
.alert {
// базовые стили
}
.alert--success { }
.alert--danger { }
```
### Layout компоненты
**Когда:** Структура приложения (header, sidebar, grid)
**Где:** `layout/_component.scss`
**Пример:**
```scss
// layout/_header.scss
.app-header {
// стили header
}
```
### Feature-specific стили
**Когда:** Стили специфичные для конкретной функции
**Где:** `features/{feature}/_component.scss`
**Пример:**
```scss
// features/calendar/_widget.scss
.calendar-widget {
// специфичные стили календаря
}
```
### После добавления:
1. Добавить `@import` в `main.scss`
2. Запустить `npm run build:app`
3. Проверить в браузере
---
## ⚠️ Важно!
### ❌ НЕ добавляйте компоненты в custom-bootstrap.scss!
Этот файл содержит только Bootstrap с переопределенными переменными.
### ✅ Все компоненты приложения идут в main.scss
### 🔄 Обратная совместимость
Старые классы сохранены через `@extend`:
- `.badge-telegram` → расширяет `.badge`
- `.badge-telegram-sm` → расширяет `.badge--sm`
---
## 🧪 Тестирование
После изменений проверить:
1. ✅ Сборка без ошибок: `npm run build`
2. ✅ Размер файлов не вырос значительно
3. ✅ Визуальное тестирование всех страниц
4. ✅ Консоль браузера без ошибок
---
## 📚 Документация
- [SCSS Quick Reference](../../docs/guides/SCSS_QUICK_REFERENCE.md) - быстрый справочник
- [Buttons Component](../../docs/guides/BUTTONS_COMPONENT.md) - документация по кнопкам
- [SCSS Reorganization Plan](../../docs/reports/SCSS_REORGANIZATION_PLAN.md) - план реорганизации
- [Migration Matrix](MIGRATION_MATRIX.md) - матрица миграции файлов
---
## 🎨 Соглашения
### Naming
- BEM notation: `.block`, `.block__element`, `.block--modifier`
- Feature prefixes: `.feed-card`, `.request-detail`
- Kebab-case для файлов: `_my-component.scss`
### Imports
- Используем `@import` (позже мигрируем на `@use`/`@forward`)
- Порядок критичен: abstracts → core → layout → utilities → features
### Variables
- SCSS переменные: `$variable-name` (compile-time)
- CSS переменные: `--variable-name` (runtime)
---
**Вопросы?** См. [План реорганизации](../../docs/reports/SCSS_REORGANIZATION_PLAN.md)