- Исправлен PollSerializer для создания опросов с опциями - Добавлено поле read_only_fields для корректной валидации - Реализована отправка WebSocket уведомлений при создании опроса - Исправлен импорт serialize_message из communications.serialization - Добавлен обработчик poll_update в UserConsumer для WebSocket событий - Исправлен эндпоинт /results/ для возврата user_voted_option_ids - Добавлено поле voters в PollOptionSerializer для списка проголосовавших - Реализована инициализация poll виджетов после рендера сообщений - Добавлено игнорирование poll_update в notification-manager - Исправлены стили для request list badges (height, word-break, flex) - Восстановлены стили team-wheel (.wheel-focus, .scroll-arc) из git истории - Реализовано отображение forwarded message info в messageRendererV2 - Множественные улучшения UI и UX для опросов Fixes: создание опросов, голосование, отображение результатов, список проголосовавших
213 lines
10 KiB
SCSS
213 lines
10 KiB
SCSS
// =============================================================================
|
||
// Custom Bootstrap Configuration
|
||
// =============================================================================
|
||
// Этот файл переопределяет переменные Bootstrap ДО его компиляции
|
||
// Результат: полностью кастомизированный Bootstrap с нашей системой отступов
|
||
|
||
// =============================================================================
|
||
// 1. ИМПОРТ НАШИХ ПЕРЕМЕННЫХ
|
||
// =============================================================================
|
||
// Сначала импортируем наши CSS переменные (для справки)
|
||
// Реальные значения ниже в SCSS переменных
|
||
|
||
// =============================================================================
|
||
// 2. ПЕРЕОПРЕДЕЛЕНИЕ BOOTSTRAP ПЕРЕМЕННЫХ
|
||
// =============================================================================
|
||
|
||
// ──────────────────────────────────────────────────────────────
|
||
// 2.1 Система отступов (8px grid)
|
||
// ──────────────────────────────────────────────────────────────
|
||
// Bootstrap использует $spacer для всех utility классов (.p-*, .m-* и т.д.)
|
||
// Переопределяем его на нашу 8px сетку
|
||
|
||
$spacer: 1rem !default; // 16px - базовое значение
|
||
|
||
// Переопределение всей шкалы spacing
|
||
$spacers: (
|
||
0: 0, // 0px
|
||
1: 0.25rem, // 4px - var(--space-1)
|
||
2: 0.5rem, // 8px - var(--space-2)
|
||
3: 0.75rem, // 12px - var(--space-3)
|
||
4: 1rem, // 16px - var(--space-4)
|
||
5: 1.5rem, // 24px - var(--space-5)
|
||
) !default;
|
||
|
||
// ──────────────────────────────────────────────────────────────
|
||
// 2.2 Grid система
|
||
// ──────────────────────────────────────────────────────────────
|
||
$grid-gutter-width: 0.5rem !default; // 8px - var(--space-2)
|
||
|
||
// ──────────────────────────────────────────────────────────────
|
||
// 2.3 Компоненты - Padding
|
||
// ──────────────────────────────────────────────────────────────
|
||
// Переопределяем padding для всех Bootstrap компонентов
|
||
|
||
// Cards
|
||
$card-spacer-y: 1rem !default; // var(--space-2)
|
||
$card-spacer-x: 1rem !default; // var(--space-2)
|
||
|
||
// Alerts
|
||
$alert-padding-y: 1rem !default; // var(--space-2)
|
||
$alert-padding-x: 1rem !default; // var(--space-2)
|
||
|
||
// Buttons
|
||
$btn-padding-y: 0.5rem !default; // var(--space-1)
|
||
$btn-padding-x: 1rem !default; // var(--space-2)
|
||
|
||
$btn-padding-y-sm: 0.5rem !default; // var(--space-1)
|
||
$btn-padding-x-sm: 0.5rem !default; // var(--space-1)
|
||
|
||
$btn-padding-y-lg: 1rem !default; // var(--space-2)
|
||
$btn-padding-x-lg: 1.5rem !default; // var(--space-3)
|
||
|
||
// Form controls
|
||
$input-padding-y: 0.5rem !default; // var(--space-1)
|
||
$input-padding-x: 1rem !default; // var(--space-2)
|
||
|
||
$input-padding-y-sm: 0.5rem !default; // var(--space-1)
|
||
$input-padding-x-sm: 0.5rem !default; // var(--space-1)
|
||
|
||
$input-padding-y-lg: 1rem !default; // var(--space-2)
|
||
$input-padding-x-lg: 1.5rem !default; // var(--space-3)
|
||
|
||
// Modals
|
||
$modal-inner-padding: 1rem !default; // var(--space-2)
|
||
$modal-header-padding-y: 1rem !default; // var(--space-2)
|
||
$modal-header-padding-x: 1rem !default; // var(--space-2)
|
||
|
||
// Dropdowns
|
||
$dropdown-padding-x: 0 !default;
|
||
$dropdown-padding-y: 8px !default; // var(--space-1)
|
||
$dropdown-item-padding-y: 8px !default; // var(--space-1)
|
||
$dropdown-item-padding-x: 16px !default; // var(--space-2)
|
||
|
||
// Navs
|
||
$nav-link-padding-y: 8px !default; // var(--space-1)
|
||
$nav-link-padding-x: 16px !default; // var(--space-2)
|
||
|
||
// Navbar
|
||
$navbar-padding-y: 8px !default; // var(--space-1)
|
||
$navbar-padding-x: 16px !default; // var(--space-2)
|
||
|
||
// Pagination
|
||
$pagination-padding-y: 8px !default; // var(--space-1)
|
||
$pagination-padding-x: 16px !default; // var(--space-2)
|
||
|
||
$pagination-padding-y-sm: 8px !default; // var(--space-1)
|
||
$pagination-padding-x-sm: 8px !default; // var(--space-1)
|
||
|
||
$pagination-padding-y-lg: 16px !default; // var(--space-2)
|
||
$pagination-padding-x-lg: 24px !default; // var(--space-3)
|
||
|
||
// List groups
|
||
$list-group-item-padding-y: 1rem !default; // var(--space-2)
|
||
$list-group-item-padding-x: 1rem !default; // var(--space-2)
|
||
|
||
// Breadcrumbs
|
||
$breadcrumb-padding-y: 0.5rem !default; // var(--space-1)
|
||
$breadcrumb-padding-x: 1rem !default; // var(--space-2)
|
||
|
||
// Toasts
|
||
$toast-padding-x: 1rem !default; // var(--space-2)
|
||
$toast-padding-y: 0.5rem !default; // var(--space-1)
|
||
|
||
// Offcanvas
|
||
$offcanvas-padding-y: 1rem !default; // var(--space-2)
|
||
$offcanvas-padding-x: 1rem !default; // var(--space-2)
|
||
|
||
// Badges
|
||
$badge-padding-y: 0.5rem !default; // var(--space-1)
|
||
$badge-padding-x: 0.5rem !default; // var(--space-1)
|
||
|
||
// ──────────────────────────────────────────────────────────────
|
||
// 2.4 Cards - переопределяем стили карточек (GLASSMORPHISM)
|
||
// ──────────────────────────────────────────────────────────────
|
||
$card-border-radius: 18px !default;
|
||
$card-border-width: 1px !default;
|
||
$card-border-color: rgba(255, 255, 255, 0.1) !default; // Светлая граница для glassmorphism
|
||
$card-bg: rgba(255, 255, 255, 0.05) !default; // Полупрозрачный для эффекта стекла
|
||
$card-box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37) !default; // Глубокая тень
|
||
|
||
// Card header/footer
|
||
$card-cap-padding-y: 1rem !default;
|
||
$card-cap-padding-x: 1rem !default;
|
||
$card-cap-bg: transparent !default; // Прозрачный header/footer
|
||
$card-cap-color: null !default;
|
||
|
||
// ──────────────────────────────────────────────────────────────
|
||
// 2.5 Дополнительные настройки (опционально)
|
||
// ──────────────────────────────────────────────────────────────
|
||
|
||
// Border radius (если хотите унифицировать)
|
||
// $border-radius: 10px !default; // var(--radius-md)
|
||
// $border-radius-sm: 6px !default; // var(--radius-sm)
|
||
// $border-radius-lg: 14px !default; // var(--radius-lg)
|
||
|
||
// =============================================================================
|
||
// 3. ИМПОРТ ABSTRACTS (Design Tokens & Mixins)
|
||
// =============================================================================
|
||
// Импортируем переменные и миксины ДО Bootstrap
|
||
@import "abstracts/variables";
|
||
@import "abstracts/mixins";
|
||
|
||
// =============================================================================
|
||
// 4. ИМПОРТ BOOTSTRAP
|
||
// =============================================================================
|
||
// Импортируем Bootstrap ПОСЛЕ переопределения переменных
|
||
@import "../node_modules/bootstrap/scss/bootstrap";
|
||
|
||
// =============================================================================
|
||
// 4.5 CSS ПЕРЕМЕННЫЕ (RUNTIME)
|
||
// =============================================================================
|
||
// CSS custom properties для использования в браузере
|
||
@import "abstracts/css-variables";
|
||
|
||
// =============================================================================
|
||
// 5. КАСТОМНЫЕ КОМПОНЕНТЫ
|
||
// =============================================================================
|
||
|
||
// Layout
|
||
@import "layout/chat-layout";
|
||
|
||
// Базовые компоненты
|
||
@import "components/common";
|
||
@import "components/navbar";
|
||
@import "components/sidebar";
|
||
@import "components/page-header";
|
||
@import "components/cards";
|
||
|
||
// Badge компоненты
|
||
@import "components/badges-bem";
|
||
|
||
// Чат компоненты (в подпапке chat/)
|
||
@import "components/chat/message-inputs";
|
||
@import "components/chat/chat-detail";
|
||
@import "components/chat/chat-date-groups";
|
||
@import "components/chat/chat-list-enhanced";
|
||
|
||
// Bubble модули (BEM архитектура)
|
||
@import "components/chat/bubble-base"; // Базовые стили блока
|
||
@import "components/chat/bubble-variants"; // Модификаторы типов (me/other/system)
|
||
@import "components/chat/bubble-content"; // Вложенный контент (существующий)
|
||
@import "components/chat/bubble-attachments"; // Вложения (медиа, файлы)
|
||
@import "components/chat/bubble-polls"; // Голосования
|
||
@import "components/chat/bubble-states"; // Интерактивные состояния (hover/focus)
|
||
|
||
@import "components/chat/chat-enhanced";
|
||
@import "components/chat/chat-polls";
|
||
@import "components/chat/chat-new-messages-indicator";
|
||
@import "components/chat/message-selection";
|
||
@import "components/chat/message-context-menu";
|
||
@import "components/chat/message-reactions";
|
||
|
||
// Дополнительные компоненты
|
||
@import "components/comments";
|
||
@import "components/modals";
|
||
@import "components/request-list";
|
||
@import "components/team-wheel";
|
||
|
||
// Остальные компоненты (загружаются напрямую из CSS - не мигрировано)
|
||
// TODO: Мигрировать buttons, card-list, document-list,
|
||
// ios-search, feed-specific, base-app, request-detail
|
||
|