Создайте один экземпляр
Host — CSS-селектор или HTMLElement. Конструктор добавляет собственную оболочку, не удаляя чужие элементы. Уничтожайте прежний экземпляр перед созданием нового в том же месте.
const editor = new ViText(host, {
content: '# Начало', contentType: 'markdown', language: 'ru'
});
await editor.whenReady();
editor.focus();
Начальные HTML/JSON создаются синхронно. Markdown/CSS ждут codecs; whenReady отклоняется при ошибке. Начальная загрузка не должна перезаписать документ, изменённый пользователем во время ожидания.
Подпишитесь и освободите ресурсы
const off = editor.on('change', event => console.log(event.revision));
// При уходе:
off();
editor.destroy();
Destroy снимает UI/подписки/плагины, закрывает диалоги, отменяет upload и поздние проверки. Повторный вызов безопасен. Не вызывайте методы уничтоженного экземпляра. Ошибку cleanup плагина хост сообщает после освобождения остальных ресурсов.
SSR и source
Создавайте ViText только в браузере. Импорт ESM можно отложить до клиентского mounted. HTML-поля монтируются отдельно: setMode('html'); await whenSourceReady(). После ошибки ленивой загрузки возможен повтор при переоткрытии. Nuxt-пример.