Вспомогательные функции, экспортируемые из пакета и доступные для использования в вашем приложении
Управление блокировкой прокрутки документа. Экспортируется из @mushket-co/block-builder/core.
setScrollLockHandlers — глобально переопределяет обработчики блокировки/разблокировки.lockBodyScroll/unlockBodyScroll — дефолтные реализации: добавляют/убирают CSS‑класс, учитывают ширину скроллбара.Если ваш фреймворк уже управляет блокировкой (например, сторонняя библиотека модалок), переопределите хендлеры через setScrollLockHandlers и делегируйте в библиотеку. Подробнее — API и пример →
Экспортируются из @mushket-co/block-builder/core: buildBlockHierarchy, cloneBlock, getAllChildren, isChildOf.
buildBlockHierarchy — преобразует плоский список в дерево по полям parent/children.cloneBlock — глубоко клонирует блок и назначает новый id; метаданные (даты, version) сбрасываются.getAllChildren — все потомки блока из плоского списка (любая глубина вложенности).isChildOf — проверяет, является ли childBlock потомком parentBlock в плоском списке.Рекомендуется нормализовать входные данные: гарантировать уникальные id и согласованность связей parent⇄children перед вызовами вспомогательных функций.
Экспортируются из @mushket-co/block-builder/core: DEFAULT_BREAKPOINTS, generateSpacingCSS, generateSpacingCSSVariables, getSpacingValue, mergeSpacing, setSpacingValue, validateSpacing.
generateSpacingCSSVariables — удобно для передачи padding через CSS‑переменные в компонент.generateSpacingCSS — пригодно для SSR/инъекции стилей на страницу (например, тег "<"style">").mergeSpacing — аккуратно объединяет конфигурации (не затирая отсутствующие ключи).validateSpacing — используйте в бек‑ или CI‑валидации конфигураций.В UI‑версии BlockBuilder применяет spacing автоматически. Эти вспомогательные функции полезны при ручной интеграции (/core) или для генерации стилей вне UI компонентов.
filterBlocksForDisplay(blocks, isEdit) — экспорт из core. В режиме просмотра скрытые блоки (visible: false) не попадают в DOM; в редактировании остаются с классом bb-opacity-hidden.
Нативное предупреждение браузера при уходе со страницы, если блоки менялись, но не сохранены (beforeunload). Работает только при нативном покидании страницы — закрытие вкладки, перезагрузка, переход по внешней ссылке или ввод URL в адресной строке. Клиентский роутинг экосистемы Vue (Vue Router) или React (React Router и аналоги) не перехватывается: при навигации внутри SPA предупреждение не показывается. Для таких переходов подключайте guard/hook роутера и те же утилиты сравнения блоков из core. В BlockBuilderComponent встроен только beforeunload; для своего UI — низкоуровневые утилиты из core.
Включите warnOnPageLeave — см. props Vue / props React. Работает только в режиме редактирования (isEdit !== false). После успешного onSave внутренний baseline обновляется — предупреждение снимается до следующего изменения. Не заменяет navigation guard вашего роутера.
Сравнение снимков блоков и подписка на beforeunload вручную — те же примитивы, что внутри Vue/React компонентов.
shouldActivatePageLeaveWarning({ warnOnPageLeave, isEdit }) — true только если включено и не режим просмотра.haveBlocksChanged(initial, current) — сравнивает списки блоков (id, type, props, settings, order, visible, parent).attachPageLeaveWarning(() => boolean) — подписка на уход; возвращает detach. На SSR — noop.createUnsavedChangesTracker(initial?) — setBaseline, resetBaseline, isDirty(current).Браузер показывает стандартный диалог — свой текст в beforeunload намеренно ограничен. Для SPA: Vue Router — onBeforeRouteLeave / router.beforeEach; React Router — useBlocker или кастомный guard; сравнение «грязности» — createUnsavedChangesTracker + haveBlocksChanged.
Для кастомного UI форм (без готового BlockBuilderComponent) — трекер и хелпер из @mushket-co/block-builder/core. В BlockBuilderComponent реактивная валидация включена автоматически: после неуспешного submit ошибки обновляются при каждом изменении поля.
touch() — вызывайте после неуспешного submit, чтобы включить перевалидацию на каждое изменение.revalidateIfTouched — возвращает актуальные ошибки или null, если форма ещё не «touched».applyFormErrors — атомарно заменяет объект ошибок (удобно для Vue reactive / React state).Хелперы для полей file-import: применение правил слияния после разбора JSON/CSV, объединение массивов, форматирование статистики для пользователя. Экспорт из @mushket-co/block-builder/core.
Единый валидатор для форм; экспортируется из @mushket-co/block-builder/core.
required, email, url, min/max, minLength/maxLength, pattern, custom.message необязательно; доступны тексты по умолчанию.Для сложных случаев используйте правило custom со своей функцией валидации. Возвращайте false при ошибке и задайте message для понятного текста.