BlockBuilder Logo/
Документация/Темизация и локализация
Быстрый стартAPIVueReactДемоИстория изменений
GitHub

Начало работы

Быстрый стартИстория изменений

Справочник API

Обзор APIМетодыСвойстваПоля формТемизация и локализацияУтилитыТипы

Vue 3

Быстрый стартКомпонентыСобытияNuxt (SSR)

React

Быстрый стартКомпонентыКолбэкиNext.js (SSR)
Следующая страница
Утилиты
→

Темизация и локализация UI

BlockBuilder (Vue/React) стилизует встроенный UI редактора через CSS custom properties на .bb-app. Можно переключать пресеты, переопределять токены и локализовать строки — без форка компонентов.

Как устроена темизация

BlockBuilderComponent рендерит корневой контейнер .bb-app. Токены темы применяются как inline style через resolveThemeVars(theme, themeVars) и используются в SCSS пакета через var(--bb-*).

На корень также ставится data-bb-theme="default" или data-bb-theme="dark" для селекторов на стороне приложения. Подключите стили: @mushket-co/block-builder/index.esm.css.

  • Область действия — токены влияют только на UI Block Builder (модалки, формы, контролы). Ваши компоненты блоков на канвасе этими переменными не стилизуются.
  • Не в core API — theme, themeVars, locale, uiStrings — props BlockBuilderComponent (Vue/React), а не IBlockBuilderOptions.
  • Порядок слияния — UI_THEME_COLORS_DEFAULT → тёмный пресет (если theme="dark") → ваши переопределения в themeVars.

Что можно кастомизировать

Весь встроенный chrome редактора читает токены --bb-*. Типичные зоны:

•Фиксированная панель — сохранить, очистить, счётчик блоков, добавить блок
•Тулбар блока — редактировать, переместить, дублировать, удалить, свернуть
•Модалка create/edit — заголовок, оверлей, ширина, скругления
•Поля форм — инпуты, лейблы, ошибки валидации, focus ring
•Select, ApiSelect, CustomDropdown — список, hover, загрузка
•Загрузка image/file — dropzone, превью, ошибки
•Repeater — добавить/удалить строку, счётчик элементов
•Matrix — вкладки, заголовки сетки, активная ячейка
•Редактор spacing — брейкпоинты, padding/margin
•Диалоги подтверждения — удаление блока, очистка всех

Три способа задать тему

1. Встроенный пресет

Передайте theme="dark" для тёмной палитры пакета (UI_THEME_COLORS_DARK). Без theme — светлая палитра по умолчанию.

2. Prop themeVars

Частичная карта токенов --bb-*. Переопределяются только переданные ключи; остальные берутся из default или dark.

3. CSS на .bb-app

Переопределение переменных в своём stylesheet — удобно для статичного брендинга или нескольких редакторов с одним классом темы.

Пресеты theme

Prop theme — тип TUiTheme: не указывать или default (светлая палитра) или dark. CSS variables записываются на корневой .bb-app.

Тёмный пресет переопределяет brand, surface, neutrals, overlays и danger/warning фоны — не все токены. Для полного тёмного бренда дополните themeVars.

В headless core без UI-рендера theme и locale не влияют на поведение.

Кастомизация themeVars

Тип IUiThemeVars — частичная запись { '--bb-color-primary'?: string, ... }. Можно переопределить любой токен из справочника ниже.

Экспорты пакета

Из @mushket-co/block-builder/vue или /react: UI_THEME_COLORS_DEFAULT, UI_THEME_COLORS_DARK, resolveThemeVars, IUiThemeVars, IUiThemeColorKey, TUiTheme.

Практические советы

  • Для быстрого бренда начните с --bb-color-primary, --bb-color-primary-dark, --bb-color-surface, --bb-color-neutral-8 (основной текст).
  • Плотность форм — --bb-form-control-height, --bb-form-control-radius, --bb-font-family.
  • Полупрозрачные поверхности: --bb-color-surface как rgba(...) и backdrop-filter в CSS приложения на панелях вокруг редактора.
  • Для hover/focus фонов используйте --bb-color-primary-alpha-* — они задействованы в кнопках и вкладках.

Справочник CSS-токенов

Значения по умолчанию — для светлой темы (theme не указан). Dark preset заменяет подмножество — остальное через themeVars.

Бренд

Основной акцент — кнопки, ссылки, активные состояния, focus ring.

ТокенПо умолчанию (light)Где используется
--bb-color-primary#2d2079Primary-кнопки, активные вкладки, ссылки, focus outline
--bb-color-primary-dark#120c39Hover и pressed у кнопок
--bb-color-primary-light#e0f0ffФон выделения, подсветка dropzone загрузки
--bb-color-primary-alpha-10rgba(45, 32, 121, 0.1)Лёгкий hover-фон
--bb-color-primary-alpha-15rgba(45, 32, 121, 0.15)Слегка тонированные панели
--bb-color-primary-alpha-20rgba(45, 32, 121, 0.2)Focus ring, тень индикатора вкладки
--bb-color-primary-alpha-30rgba(45, 32, 121, 0.3)Более насыщенные акцентные фоны

Поверхности и нейтрали

Фоны, границы, иерархия текста.

ТокенПо умолчанию (light)Где используется
--bb-color-white#ffffffТекст на тёмных оверлеях
--bb-color-surface#ffffffТело модалки, список dropdown, карточки
--bb-color-black#000000Редкие ссылки на чёрный
--bb-color-neutral-1#f8f9faФон секций, заголовки таблиц
--bb-color-neutral-2#e9ecefГраницы, разделители, disabled фон
--bb-color-neutral-3#ddddddГраницы инпутов, пунктир dropzone
--bb-color-neutral-4#ced4daУсиленные границы
--bb-color-neutral-5#999999Приглушённый текст, placeholder
--bb-color-neutral-6#666666Вторичные подписи, hints
--bb-color-neutral-7#495057Вторичный body-текст
--bb-color-neutral-8#0e2133Основной текст, заголовки
--bb-color-neutral-8-rgb44, 62, 80RGB-компоненты для rgba() в SCSS
--bb-color-neutral-alpha-30rgba(153, 153, 153, 0.3)Disabled оверлеи
--bb-color-neutral-alpha-50rgba(153, 153, 153, 0.5)Полупрозрачные маски

Акцент

Вторичные действия и тёмные акценты.

ТокенПо умолчанию (light)Где используется
--bb-color-dark#111243Тёмные UI-акценты
--bb-color-dark-alpha-20rgba(17, 18, 67, 0.2)Тёмные полупрозрачные оверлеи
--bb-color-secondary#6c757dSecondary-кнопки
--bb-color-secondary-dark#5a6268Hover secondary-кнопок

Статусные цвета

Валидация, успех, предупреждения.

ТокенПо умолчанию (light)Где используется
--bb-color-danger#dc3545Текст ошибок, деструктивные действия
--bb-color-danger-dark#c82333Hover danger-кнопок
--bb-color-danger-light#feeeeeФон поля с ошибкой
--bb-color-danger-border#f5c6cbГраница поля с ошибкой
--bb-color-danger-bg#fff5f5Фон сообщения об ошибке
--bb-color-danger-alpha-10rgba(220, 53, 69, 0.1)Лёгкая подсветка ошибки
--bb-color-success#28a745Индикаторы успеха
--bb-color-success-dark#218838Hover success
--bb-color-success-alpha-30rgba(40, 167, 69, 0.3)Свечение success
--bb-color-success-alpha-40rgba(16, 185, 129, 0.4)Градиентные success-акценты
--bb-color-warning#ffc107Иконки предупреждений
--bb-color-warning-border#ff9800Границы warning
--bb-color-warning-bg#fff3cdБаннеры warning
--bb-color-warning-text#856404Текст warning
--bb-color-info#17a2b8Информационные акценты

Оверлеи

Подложки модалок и превью изображений.

ТокенПо умолчанию (light)Где используется
--bb-color-overlayrgba(0, 0, 0, 0.5)Фон модалки
--bb-color-overlay-mediumrgba(0, 0, 0, 0.7)Оверлей превью изображения
--bb-color-overlay-darkrgba(0, 0, 0, 0.9)Плотный scrim при hover
--bb-color-overlay-alpha-10rgba(0, 0, 0, 0.1)Лёгкие inset-тени, фон вкладок

Утилиты

Code blocks и градиентные акценты.

ТокенПо умолчанию (light)Где используется
--bb-color-code-1#282c34Фон code block
--bb-color-code-2#abb2bfТекст code block
--bb-color-gradient-1#667eeaНачало градиента (декор)
--bb-color-gradient-2#764ba2Конец градиента
--bb-color-gradient-success-1#10b981Начало success-градиента
--bb-color-gradient-success-2#059669Конец success-градиента

Отступы

Внутренние gap в тулбарах, формах, модалках.

ТокенПо умолчанию (light)Где используется
--bb-spacing-xs4pxПлотные gap (padding иконок)
--bb-spacing-sm8pxКомпактные отступы
--bb-spacing-md12pxСтандартный gap между контролами
--bb-spacing-lg16pxОтступы секций
--bb-spacing-xl20pxPadding секций модалки
--bb-spacing-2xl24pxКрупные gap между секциями

Скругления

Углы карточек, инпутов, модалок.

ТокенПо умолчанию (light)Где используется
--bb-radius-sm4pxМелкие chips, теги
--bb-radius-md8pxИнпуты, кнопки, dropdown
--bb-radius-lg16pxМодалки, крупные карточки

Типографика

Шрифт и шкала размеров UI редактора.

ТокенПо умолчанию (light)Где используется
--bb-font-familysystem-ui, sans-serifВесь текст UI редактора
--bb-font-size-xs12pxОшибки, badges
--bb-font-size-sm14pxЛейблы, кнопки, инпуты
--bb-font-size-md16pxBody в модалках
--bb-font-size-lg18pxЗаголовки секций
--bb-font-size-xl20pxЗаголовки модалок

Тени

Elevation для dropdown, модалок, primary-кнопок.

ТокенПо умолчанию (light)Где используется
--bb-shadow-sm0 2px 4px rgba(0, 0, 0, 0.1)Лёгкое elevation
--bb-shadow-md0 4px 12px rgba(0, 0, 0, 0.15)Dropdown, плавающие панели
--bb-shadow-lg0 10px 30px rgba(0, 0, 0, 0.3)Модалки
--bb-shadow-sm-light0 2px 8px rgba(0, 0, 0, 0.08)Светлые карточки
--bb-shadow-primary0 4px 12px rgba(102, 126, 234, 0.4)Свечение primary-кнопки

Анимации

Длительность transition для hover/focus.

ТокенПо умолчанию (light)Где используется
--bb-transition-fast0.15s easeБыстрый feedback (checkbox, иконка)
--bb-transition-base0.2s easeСтандартный hover
--bb-transition-slow0.3s easeАнимации модалок и панелей

Z-index

Слои dropdown, модалок, tooltip.

ТокенПо умолчанию (light)Где используется
--bb-z-index-dropdown100Панели select/dropdown
--bb-z-index-modal1000Модалка create/edit
--bb-z-index-tooltip1100Tooltip поверх модалок

Контролы форм

Общие размеры инпутов, select, textarea.

ТокенПо умолчанию (light)Где используется
--bb-form-control-height40pxВысота инпута/select
--bb-form-control-border-width2pxТолщина границы инпута
--bb-form-control-padding-x12pxГоризонтальный padding внутри инпута
--bb-form-control-radiusvar(--bb-radius-md)Скругление инпута (часто ссылается на --bb-radius-md)
--bb-form-control-font-sizevar(--bb-font-size-sm)Размер текста в инпуте
--bb-form-label-font-sizevar(--bb-font-size-sm)Размер лейбла поля
--bb-form-label-font-weight500Жирность лейбла
--bb-form-error-font-sizevar(--bb-font-size-xs)Размер текста ошибки валидации

Модалка

Размеры диалога create/edit.

ТокенПо умолчанию (light)Где используется
--bb-modal-max-width650pxМаксимальная ширина модалки
--bb-modal-radiusvar(--bb-radius-lg)Скругление модалки

Кнопки

Padding primary/secondary действий.

ТокенПо умолчанию (light)Где используется
--bb-btn-padding-y10pxВертикальный padding кнопки
--bb-btn-padding-x20pxГоризонтальный padding кнопки

Примеры

Живое демо переключения тем — examples/vue3-theme в репозитории block-builder (default, dark, brand overrides, frosted glass).

Локализация UI

Пакет локализует только свой UI (кнопки, подписи контролов, сообщения валидации). Подписи полей в block-config задаёт приложение.

  • locale — 'ru' (по умолчанию) или 'en'
  • uiStrings / :ui-strings — точечные переопределения отдельных ключей из IUiStrings
  • Экспорт из /vue и /react: UI_STRINGS_RU, UI_STRINGS_EN, resolveUiStrings, IUiStrings

Строки UI резолвятся внутри дерева компонента. Переопределяйте через prop uiStrings; в кастомных рендерерах — useUiStrings() (Vue inject / React context).

Ключи IUiStrings

Полный список переопределяемых ключей (см. IUiStrings в пакете). Сгруппировано по зонам:

Панель и тулбар

save, clearAll, blocksTotal, addBlock, addBlockTitle

Действия с блоком

edit, moveUp, moveDown, duplicate, delete, hide, show, expand, collapse, copyIdTitle

Модалки и подтверждения

createBlock, editBlock, submitCreate, submitSave, cancelButtonText, blockTypeSelectionTitle, deleteBlockConfirmTitle, deleteBlockConfirmMessage, clearAllBlocksConfirmTitle, clearAllBlocksConfirmMessage, deleteBlockSimpleConfirm, clearAllSimpleConfirm

Контролы форм

selectPlaceholder, dropdownPlaceholder, dropdownLoading, dropdownEmpty, apiSelectPlaceholder, apiSelectLoading, apiSelectNoResults, apiSelectError, apiSelectConfigMissing, apiSelectLoadMore, chooseFile, chooseImage, replaceFile, changeImage, addFile, add, remove, removeFile, removeImage, imageAlt, validationErrorsAriaLabel

Repeater

repeaterAdd, repeaterRemove, repeaterItem, repeaterMin, repeaterMax

Matrix

matrixStructureTab, matrixContentTab, matrixColumn, matrixRow, matrixDeleteColumn, matrixDeleteRow

Редактор spacing

spacingDefaultLabel, spacingCssVariablesPreview, breakpointDesktop, breakpointTablet, breakpointMobile, spacingPaddingTop, spacingPaddingBottom, spacingMarginTop, spacingMarginBottom

Ошибки и уведомления

loading, saveNotEnabled, errorSaveFailed, successSaved, unknownError, blockConfigNotFound, blockCreationError, blockUpdateError, blockDuplicateError, blockDeleteError, blocksClearError, initialBlocksLoadError, formLoadError, formSaveError, apiSelectRequired, apiSelectUnavailable, customFieldRequired, customFieldsUnavailable, uploadServerError, uploadFileError, fileImportError, fileReadError, invalidImageFile, customFieldInitError, blockIdCopied, copyIdError, blockAnchorPlaceholder, blockAnchorCustomUrlPlaceholder

Teleported UI (dropdown)

Панели CustomDropdown монтируются в body и теряют наследование CSS variables. Пакет автоматически копирует theme vars с ближайшего .bb-app при открытии dropdown (Vue/React CustomDropdown).

Для своего teleported UI пакет использует внутренний хелпер readBbThemeVarsFromClosestApp (не входит в публичные npm-экспорты). Скопируйте паттерн из CustomDropdown в репозитории или продублируйте theme vars на корень teleported-элемента вручную.

См. также

  • Свойства — опции конструктора (blockConfigs, repository, …)
  • Vue — BlockBuilderComponent (props)
  • React — BlockBuilderComponent (props)
  • История изменений 1.12.0