Skip to content
ФреймворкJavaScript

Параметры конфигурации Blok

Объект конфигурации, передаваемый конструктору Blok. Формально он разделён на два типа: `BlokMountOptions` — опции, фиксированные на всё время жизни экземпляра (holder, tools, i18n, колбэки, …) — и `BlokState`, «живые» поля: `readOnly` (включая `hideControls`), `hideToolbar` и `inlineToolbar`. У каждого поля `BlokState` есть документированный runtime-сеттер (`readOnly.set`, `toolbar.setHidden`, `tools.setInlineToolbar`), поэтому его изменение никогда не требует пересоздания редактора — а адаптеры React, Vue и Angular реагируют на эти props/inputs на месте. `BlokConfig = BlokMountOptions & BlokState`, так что существующий код компилируется без изменений.

TypeScript
import { Blok, type BlokConfig } from '@bloklabs/core';

const config: BlokConfig = {
  holder: 'editor',
  placeholder: 'Start writing...',
  autofocus: true,
  readOnly: false,
  minHeight: 300,
};

const editor = new Blok(config);

Конфигурация

ПараметрТипПо умолчаниюОписание
holderstring | HTMLElement'blok'Контейнер (ID или элемент DOM)
toolsRecord<string, ToolConstructable | ToolSettings>{}Доступные блочные и строчные инструменты
placeholderstring | falsefalseТекст-заполнитель, показываемый в первом блоке, когда редактор пуст; false отключает его
minHeightnumber300Высота в px нижней кликабельной зоны редактора
defaultBlockstring'paragraph'Тип блока по умолчанию
dataOutputData | LooseOutputDataundefinedНачальные данные для отображения. Принимается нестрогий формат: значения `null` для `data`, `id` или `time` блока (частые в backend-DTO) нормализуются на границе.
readOnlyboolean | { hideControls: boolean }falseВключить режим только для чтения. Передайте `{ hideControls: true }`, чтобы также скрыть hover-тулбар, настройки блока и строчную панель. Живое поле: меняется на лету через `readOnly.set(state, { hideControls })` — тот же экземпляр переключает режим на месте, сохраняя курсор, историю отмен и прокрутку.
onChange(api: API, event: BlockMutationEvent | BlockMutationEvent[]) => voidundefinedФункция обратного вызова при изменении; аргумент event несёт произошедшую мутацию (или массив мутаций, если несколько срабатывают одновременно)
onSave(data: OutputData, api: API) => voidundefinedРеактивный колбэк сохранения — срабатывает автоматически с полным сериализованным содержимым при каждом отложенном изменении, поэтому save() вручную вызывать не нужно.
onReady(blok?: Blok) => voidundefinedСрабатывает один раз, когда редактор становится готов, получая полностью инициализированный экземпляр Blok
onEnter(event: KeyboardEvent, api: API) => boolean | voidundefinedСрабатывает при нажатии Enter в блоке, прежде чем Blok разделит его или создаст новый. Верните true, чтобы пометить событие обработанным — Blok отменит своё разделение/создание блока (нативный перенос строки всё равно предотвращается). Не срабатывает для Shift+Enter, инструментов с enableLineBreaks и пока Enter принадлежит поповеру или тулбару. Подходит для чат-полей («Enter отправляет») — сочетайте с настройкой preserveBlank параграфа вместо наследования от Paragraph.
autofocusbooleanfalseЕсли true, устанавливает курсор в первый блок, как только редактор готов
inlineToolbarstring[] | booleantrueСтрочная панель по умолчанию для всех инструментов; массив ограничивает её перечисленными строчными инструментами, false отключает её. Живое поле: перенастраивается на лету через `tools.setInlineToolbar(config)`.
hideToolbarbooleanfalseСкрыть hover-тулбар блока (кнопку «плюс» / ручку перетаскивания) и убрать зарезервированный под него отступ редактора; меню по клавише "/" продолжает работать. Живое поле: переключается на лету через `toolbar.setHidden(hidden)`.
i18nI18nConfigundefinedКонфигурация интернационализации (локаль + словарь сообщений). Живое: меняйте язык на лету через `i18n.update({ locale, messages })` — редактор переименовывается на месте (`defaultLocale` остаётся только для монтирования).
theme'auto' | 'light' | 'dark''auto'Цветовая тема; 'auto' следует настройке ОС через prefers-color-scheme