Темизация
Тему виджета можно полностью перекрасить с хост-страницы без пересборки бандла. Все параметры темы проходят через единый пайплайн конфига (см. Конфигурацию): задавайте их в widget.config.js, window.MZBOT_CONFIG, атрибутом data-mz-* или вживую через MZBOT.setTheme({...}).
Цветовая схема
Четыре режима: light · white · dark · auto.
Через атрибут data-mz-theme на <html> (рекомендуется)
Виджет вживую отслеживает data-mz-theme на <html> и реагирует немедленно:
document.documentElement.setAttribute('data-mz-theme', 'dark'); // тёмная
document.documentElement.setAttribute('data-mz-theme', 'light'); // светлая
document.documentElement.setAttribute('data-mz-theme', 'white'); // намного светлее light
document.documentElement.setAttribute('data-mz-theme', 'auto'); // следовать за ОСМожно задать статически в разметке — применится на загрузке:
<html data-mz-theme="dark">Невалидные значения игнорируются; удаление атрибута оставляет текущую тему. Обратной петли нет: виджет пишет собственное состояние на хост <mz-bot>, но никогда обратно в <html>.
Через JS-API
MZBOT.setTheme('dark'); // короткая форма
MZBOT.setTheme({ theme: 'dark' }); // объектная форма
MZBOT.getTheme(); // → { theme, resolvedTheme, accent, ... }
MZBOT.subscribe((t) => console.log(t)); // подписка на изменения; возвращает unsubscribeНачальный конфиг (до загрузки бандла)
<script src="bundle.min.js" data-mz-theme="dark" data-mz-accent="#0dbb52" defer></script>
<!-- или -->
<script>window.MZBOT_CONFIG = { theme: 'dark' };</script>Акцент и паттерн
MZBOT.setTheme({
accent: '#0dbb52', // любой CSS-цвет — красит всё тематическое
pattern: 'mesh', // none | whisper | mesh | scales | bloom | cipher | prism
patternOpacity: 0.08, // 0..1
patternScale: 1.5, // 0.25..4
});Доступные паттерны: MZBOT.patterns. Анимации: MZBOT.animations. Темы: MZBOT.themes.
Акцентное свечение (glow)
Свечение (halo из box-shadow) вокруг открытого виджета, переключаемое по разрешённой теме.
// widget.config.js
theme: {
glow: {
dark: true, // свечение, когда активна тёмная тема
light: false, // без свечения на светлой
intensity: 1, // множитель силы (1 = дефолт; ~0.1..5)
},
}Рантайм:
MZBOT.setGlow({ dark: true, light: true, intensity: 2 });
MZBOT_CONFIG = { glow: { dark: true, intensity: 1.5 } };intensity масштабирует размытие halo и прозрачность акцента (clamp ~0.1–5). Свечение следует за активной темой автоматически (включая auto и живые переключения data-mz-theme): theme.js ставит data-mz-glow на хост, что переключает --mz-widget-shadow. Видно только при открытом виджете.
Фон чата
Две независимых ручки кастомизируют область сообщений.
Градиент / заливка (bgColors / bgAngle)
Перекрывает дефолтную поверхность темы своим цветом или градиентом:
MZBOT.setTheme({ bgColors: ['#1b2735', '#283e51', '#0a1622'], bgAngle: 160 }); // 3-цветный градиент
MZBOT.setTheme({ bgColors: ['#0d4f2b'] }); // один цвет = заливка
MZBOT.setTheme({ bgColors: 'radial-gradient(circle at 30% 0%, #2a5298, #0a1622)' }); // сырой CSS
MZBOT.setTheme({ bgColors: 'none' }); // вернуть поверхность темыbgColors— массив из 1..n CSS-цветов (1 = заливка; 2+ =linear-gradient), строка через запятую (удобно дляdata-mz-bg-colors), или полная CSS-background-строка (любой*-gradient(...)) — используется как есть.'none'очищает.bgAngle— направление градиента в градусах (дефолт160). Игнорируется для одного цвета и сырой строки.
Градиент заменяет поверхность во всех темах (это явный оверрайд) — подбирайте цвета под палитру.
Бесшовное изображение-оверлей (patternImage)
Тайлит прозрачное изображение-паттерн поверх фона. Либо/либо со встроенными pattern: когда задан patternImage, он заменяет SVG-паттерн (изображение побеждает); patternImage: 'none' возвращает SVG.
MZBOT.setTheme({
patternImage: 'https://cdn.morze.tech/patterns/topography.png',
patternImageOpacity: 0.5, // 0..1 (своя альфа PNG тоже применяется)
patternImageSize: 280, // px-тайл или любой CSS background-size
});
MZBOT.setTheme({ patternImage: 'none' }); // убрать оверлейpatternImage— URL. Принимаютсяhttp(s)://, протокол-относительные (//), корневые/относительные (/…,./…) иdata:image/…; остальное (или URL с небезопасными символами) отклоняется.'none'/''— выкл.patternImageSize— число (px-ширина тайла, высота авто) или любой CSSbackground-size.
Через атрибуты загружающего скрипта
<script src="bundle.min.js"
data-mz-bg-colors="#1b2735,#283e51,#0a1622"
data-mz-bg-angle="160"
data-mz-pattern-image="https://cdn.morze.tech/patterns/topography.png"
data-mz-pattern-image-opacity="0.5"
data-mz-pattern-image-size="280"
defer></script>Анимация сообщений
MZBOT.setTheme({ msgAnimation: 'unfurl' }); // bubble | unfurl | cascade | pop | breatheВсе методы темы — на странице JavaScript API.