Skip to content

Темы

Библиотека Chotto использует гибкую систему тем для кастомизации внешнего вида интерфейса. Система поддерживает несколько готовых тем и позволяет создавать собственные темы через CSS переменные.

Доступные темы

Библиотека включает четыре готовые темы:

  • Default (light) — светлая тема по умолчанию
  • Dark — темная тема с нейтральными цветами
  • Green — зеленая тема с изумрудными акцентами
  • Mobilon1 — брендовая тема Mobilon

Импорт тем

Базовый импорт

javascript
// Импорт основных стилей библиотеки
import '@mobilon-dev/chotto/style.css'

Импорт конкретной темы

Если нужна конкретная тема, можно импортировать отдельно:

javascript
import '@mobilon-dev/chotto/themes/default.css'
import '@mobilon-dev/chotto/themes/dark.css'
import '@mobilon-dev/chotto/themes/green.css'
import '@mobilon-dev/chotto/themes/mobilon1.css'

Система переменных

Библиотека использует двухуровневую систему CSS переменных:

1. Глобальные переменные темы (--chotto-theme-*)

Глобальные переменные влияют на весь интерфейс чата. Они определяются через атрибут data-theme:

css
[data-theme="default"] {
  /* Основные цвета */
  --chotto-theme-primary-color: #ffffff;
  --chotto-theme-secondary-color: #faf6f4;
  --chotto-theme-tertiary-color: #a3a3a3;
  
  /* Цвета текста */
  --chotto-theme-primary-text-color: #1e1e1e;
  --chotto-theme-secondary-text-color: #5f5f5f;
  
  /* Типографика */
  --chotto-theme-font-family: 'Montserrat', sans-serif;
  --chotto-theme-header-font-size: 20px;
  --chotto-theme-text-font-size: 15px;
  
  /* Сообщения */
  --chotto-theme-message-right-bg: #d1fae5;
  --chotto-theme-message-left-bg: #e5e5e5;
  
  /* ... и другие переменные (всего 82 переменные) */
}

2. Переменные компонентов (--chotto-componentname-*)

Каждый компонент имеет свои CSS переменные, которые можно переопределять в вашем проекте. Например, для компонента CommunicationPanel:

css
[data-theme="default"] {
  /* Переменные компонента CommunicationPanel */
  --chotto-communicationpanel-background: #ffffff;
  --chotto-communicationpanel-border-color: #e5e5e5;
  --chotto-communicationpanel-btn-active-color: #007CFF;
  --chotto-communicationpanel-btn-hover-background: #f5f5f5;
  --chotto-communicationpanel-menu-background: #ffffff;
  /* ... и другие переменные компонента */
}

Преимущества двухуровневой системы:

  • ✅ Гибкая кастомизация отдельных компонентов
  • ✅ Все переменные имеют fallback значения
  • ✅ Можно использовать глобальные переменные темы: var(--chotto-theme-primary-color)
  • ✅ Полная типизация через TypeScript интерфейсы

Доступные значения data-theme: "default", "dark", "green", "mobilon1"

TypeScript типы

Все глобальные переменные темы типизированы через интерфейс ChottoThemeVariables:

typescript
import type { ChottoThemeVariables } from '@mobilon-dev/chotto'

// Использование типа для валидации переменных
const themeVariables: ChottoThemeVariables = {
  '--chotto-theme-primary-color': '#ffffff',
  '--chotto-theme-secondary-color': '#faf6f4',
  // ... остальные переменные
}

Переменные компонентов типизированы в интерфейсах вида ComponentNameThemeCSSVariables в соответствующих компонентах.

Глобальные переменные темы

Основные цвета

НаименованиеПредназначение
--chotto-theme-primary-colorОсновной цвет, применяемый в чате (чаще всего фон)
--chotto-theme-secondary-colorВторичный цвет
--chotto-theme-tertiary-colorТретичный цвет
--chotto-theme-quaternary-colorЧетвертичный цвет
--chotto-theme-quinary-colorПятиричный цвет
--chotto-theme-primary-text-colorЦвет основного текста
--chotto-theme-secondary-text-colorЦвет дополнительного текста

Семантические цвета

НаименованиеПредназначение
--chotto-theme-shadow-colorЦвет сильного затенения
--chotto-theme-shadow-light-colorЦвет теневой обводки элементов
--chotto-theme-status-color-receivedЦвет статуса сообщения — доставлено собеседнику
--chotto-theme-status-color-readЦвет статуса сообщения — прочитано собеседником
--chotto-theme-status-color-errorЦвет статуса сообщения — ошибка отправки
--chotto-theme-status-color-pendingЦвет статуса сообщения — отправка

Типографика

НаименованиеПредназначение
--chotto-theme-font-familyСемейство шрифтов для всего чата
--chotto-theme-header-fontШрифт заголовков
--chotto-theme-header-font-sizeКегль заголовков
--chotto-theme-header-font-colorЦвет заголовков
--chotto-theme-title-font-sizeКегль акцентных надписей
--chotto-theme-text-font-sizeКегль основного текста
--chotto-theme-additional-text-font-sizeКегль дополнительного текста
--chotto-theme-small-text-font-sizeКегль третичного информационного текста
--chotto-theme-context-menu-font-sizeКегль текста контекстного меню
--chotto-theme-header-font-weightТолщина начертания заголовков
--chotto-theme-title-font-weightТолщина начертания акцентных надписей
--chotto-theme-default-font-weightОсновная толщина шрифта для всего чата
--chotto-theme-small-text-font-weightТолщина начертания мелкого текста

Размеры иконок

НаименованиеПредназначение
--chotto-theme-button-icon-sizeРазмер иконки кнопки
--chotto-theme-text-icon-sizeРазмер иконки, сопоставимой с основным текстом
--chotto-theme-small-text-icon-sizeРазмер вторичных иконок
--chotto-theme-avatar-small-sizeДиаметр малого аватара
--chotto-theme-avatar-medium-sizeДиаметр среднего аватара

Кнопки

НаименованиеПредназначение
--chotto-theme-button-color-activeЦвет активной кнопки
--chotto-theme-button-color-hoverЦвет кнопки в момент наведения курсора мыши
--chotto-theme-button-color-disabledЦвет заблокированной кнопки
--chotto-theme-action-button-color-activeЦвет активной кнопки действия
--chotto-theme-action-button-color-hoverЦвет кнопки действия в момент наведения
--chotto-theme-action-button-color-disabledЦвет заблокированной кнопки действия

Состояния элементов

НаименованиеПредназначение
--chotto-theme-item-background-color-focusЦвет фона выбранного элемента плиточного типа
--chotto-theme-item-background-color-hoverЦвет фона элемента плиточного типа в момент наведения курсора мыши
--chotto-theme-item-border-colorЦвет границ для внутренних элементов чата
--chotto-theme-unread-background-colorЦвет фона индикатора непрочитанных сообщений
--chotto-theme-unread-text-colorЦвет надписи индикатора непрочитанных сообщений

Границы

НаименованиеПредназначение
--chotto-theme-borderТолщина, тип линии и цвет для границ контейнера и лэйаутов

Скроллбар

НаименованиеПредназначение
--chotto-theme-scrollbar-bgЦвет полосы прокрутки
--chotto-theme-scrollbar-thumb-bgЦвет подвижной части полосы прокрутки, показывающей текущее положение на странице

Сообщения

Общие переменные сообщений

НаименованиеПредназначение
--chotto-theme-message-right-bgФон сообщения, располагаемого справа
--chotto-theme-message-right-secondary-bgВторичный цвет для сообщений, располагаемых справа
--chotto-theme-message-left-bgФон сообщения, располагаемого слева
--chotto-theme-message-left-secondary-bgВторичный цвет для сообщений, располагаемых слева
--chotto-theme-message-accent-line-colorЦвет акцентного отделителя сопутствующего контента от основного сообщения
--chotto-theme-message-focused-colorЦвет выделения сообщения при поиске
--chotto-theme-message-marginОтступ контейнера сообщения
--chotto-theme-message-type-icon-bg-colorЦвет фона для иконки типа сообщения
--chotto-theme-message-type-icon-colorЦвет иконки типа сообщения
--chotto-theme-message-border-radiusРадиус скругления углов сообщения

Модальные окна сообщений

НаименованиеПредназначение
--chotto-theme-message-modal-paddingВнутренний отступ от края модального окна
--chotto-theme-message-modal-border-radiusРадиус скругления углов модального окна
--chotto-theme-message-modal-mask-backgroundЦвет маски, окружающей модальное окно
--chotto-theme-message-modal-overlay-shadowНастройка box-shadow для обводки модального окна
--chotto-theme-message-modal-bgЦвет фона модального окна

Переменные компонентов

Каждый компонент имеет свои специфические CSS переменные с префиксом --chotto-componentname-*. Эти переменные можно переопределять для кастомизации отдельных компонентов.

Примеры переменных компонентов

CommunicationPanel

css
--chotto-communicationpanel-background: #ffffff;
--chotto-communicationpanel-border-color: #e5e5e5;
--chotto-communicationpanel-btn-active-color: #007CFF;
--chotto-communicationpanel-btn-hover-background: #f5f5f5;
--chotto-communicationpanel-menu-background: #ffffff;

ChatInput

css
--chotto-chat-input-container-bg: #ffffff;
--chotto-chat-input-icon-color: #007CFF;
--chotto-chat-input-icon-color-disabled: #b4e8f9;

Tooltip

css
--chotto-tooltip-text-color: #ffffff;
--chotto-tooltip-bg-color: #262626;

WABATemplateSelector

css
--chotto-variable-placeholder-empty-color: #f5f5f5;
--chotto-variable-placeholder-filled-color: #e5e5e5;

WABAAttachmentSection

css
--chotto-attachment-section-color: #f5f5f5;
--chotto-attachment-section-hover-color: #e5e5e5;
--chotto-attachment-section-error-color: #dc2626;

WABAQuickReplyButtons

css
--chotto-quick-reply-buttons-color: #1e1e1e;

Полный список переменных компонентов типизирован в интерфейсах вида ComponentNameThemeCSSVariables в соответствующих компонентах.

Создание собственной темы

Для создания собственной темы:

  1. Определите переменные в CSS с атрибутом data-theme:
css
[data-theme="my-custom-theme"] {
  --chotto-theme-primary-color: #your-color;
  --chotto-theme-secondary-color: #your-color;
  /* ... остальные переменные */
}
  1. Используйте TypeScript типы для валидации:
typescript
import type { ChottoThemeVariables } from '@mobilon-dev/chotto'

const myTheme: ChottoThemeVariables = {
  '--chotto-theme-primary-color': '#your-color',
  // ... остальные переменные
}
  1. Примените тему к контейнеру:
vue
<template>
  <div data-theme="my-custom-theme">
    <BaseContainer>
      <!-- Ваш контент -->
    </BaseContainer>
  </div>
</template>

Валидация тем

Библиотека включает встроенную валидацию тем:

bash
# Проверка консистентности тем
npm run validate-themes

Скрипт валидации покажет:

  • ❌ Отсутствующие переменные
  • ⚠️ Лишние переменные
  • 📊 Статистику по темам
  • 🔍 Детальную информацию

Дополнительные ресурсы

  • Полный список глобальных переменных доступен в типе ChottoThemeVariables из @mobilon-dev/chotto
  • Переменные компонентов типизированы в интерфейсах вида ComponentNameThemeCSSVariables в соответствующих компонентах
  • Примеры использования тем можно найти в Storybook