@emailmaker/emailmaker 1.1.72 → 1.1.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +376 -0
  2. package/README.md +37 -1
  3. package/{emailmaker-core.bd3c8144.js → emailmaker-core.705f9cde.js} +6 -6
  4. package/emailmaker-esm.js +4 -4
  5. package/{emailmaker-po.bd3c8144.js → emailmaker-po.705f9cde.js} +1 -1
  6. package/emailmaker.d.ts +4 -0
  7. package/emailmaker.js +3 -3
  8. package/iframe/js/amp.CcyAlXr8.js +1 -0
  9. package/iframe/js/iframe-eblock.js +1 -1
  10. package/iframe/js/iframe.js +1 -1
  11. package/iframe/js/rules.B-wCbIo7.js +1 -1
  12. package/package.json +30 -9
  13. package/static/core/{84e7cbac.js → 1f9bc4c3.js} +3 -3
  14. package/static/core/{ce8ca64c.js → 23d0be47.js} +3 -3
  15. package/static/core/{893bd50e.js → 3af12861.js} +17559 -15293
  16. package/static/core/{fab6e3c1.js → 4efbc972.js} +5 -5
  17. package/static/core/{34b3c6f9.js → 7093b78e.js} +53 -53
  18. package/static/core/{98529d8d2.js → 7af547562.js} +1304 -1240
  19. package/static/core/{dda6d713.js → 8e559366.js} +4 -4
  20. package/static/core/aaa151dc.js +2129 -0
  21. package/static/core/{ec8d567d2.js → baee7d8b2.js} +864 -819
  22. package/static/core/{ab6da7f5.js → d6093d8d.js} +7 -7
  23. package/static/core/{8815169a.js → e430193d.js} +5 -5
  24. package/static/core/{dd625043.js → e44c2cac.js} +6 -6
  25. package/static/core/{5da8610f.js → fb14792c.js} +1512 -1260
  26. package/static/umd-runtime/ui-kit.js +1171 -1103
  27. package/ui-kit/index.js +1541 -1469
  28. package/favicon-b.ico +0 -0
  29. package/favicon.ico +0 -0
  30. package/fonts/SegoeUI-Bold.woff2 +0 -0
  31. package/fonts/SegoeUI-Semibold.woff2 +0 -0
  32. package/fonts/SegoeUI.woff2 +0 -0
  33. package/iframe/js/amp.D4LpeCG3.js +0 -1
  34. package/js/amplitude.min.js +0 -10859
  35. package/js/sourcebuster.min.js +0 -672
  36. package/manifest.json +0 -17
  37. package/npm-publish.manifest.json +0 -65
  38. package/static/core/e84eccff.js +0 -2122
  39. package/static/media/image-editor/images/samples/large_sample.jpg +0 -0
  40. package/static/media/image-editor/images/samples/sample1.jpg +0 -0
  41. package/static/media/image-editor/images/samples/sample1_thumbnail.jpg +0 -0
  42. package/static/media/image-editor/images/samples/sample2.jpg +0 -0
  43. package/static/media/image-editor/images/samples/sample2_thumbnail.jpg +0 -0
  44. package/static/media/image-editor/images/samples/sample3.jpg +0 -0
  45. package/static/media/image-editor/images/samples/sample3_thumbnail.jpg +0 -0
  46. package/static/media/image-editor/images/samples/sample4.json +0 -871
  47. package/static/media/image-editor/images/samples/sample4_preview.jpg +0 -0
  48. package/test-font.otf +0 -0
  49. package/test-font.ttf +0 -0
  50. package/test-font.woff2 +0 -0
  51. package/tsconfig.json +0 -14
  52. package/two_step_headless_plugin.html +0 -558
  53. /package/iframe/{iframe-eblock.bd3c8144.html → iframe-eblock.705f9cde.html} +0 -0
  54. /package/iframe/{iframe.bd3c8144.html → iframe.705f9cde.html} +0 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,376 @@
1
+ # Changelog
2
+
3
+ Все значимые изменения проекта документируются в этом файле.
4
+
5
+ Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.0.0/).
6
+
7
+ ---
8
+
9
+ ## [1.1.71] - 2026-09-03
10
+
11
+ ### Добавлено
12
+
13
+ - Страница настроек проекта: одна страница с вкладками — описание и логотип, хранилище, фирменные
14
+ стили, участники и роли, интеграции, плагин. Фирменные шрифты и цвета проекта подхватываются
15
+ редактором, несохранённые правки не теряются при уходе со страницы
16
+ - Карточка проекта в списке показывает описание и логотип; в таблице участников появились роль,
17
+ дата приглашения, дата присоединения и последний вход
18
+ - Алгоритмический конвертер вёрстки Stripo в формат EmailMaker: параметр `stripoConverterEnabled`.
19
+ Работает локально и мгновенно, без обращения к ИИ. Письма с фиксированным дизайном конвертируются
20
+ в неадаптивном виде, адаптивные — с мобильными правилами
21
+ - Чат поддержки доступен всем пользователям: подключается напрямую, без Google Tag Manager, и узнаёт
22
+ вошедшего пользователя
23
+ - Режим предпросмотра письма без служебных маркеров скрытых блоков
24
+ - Тексты ошибок API переведены на русский, украинский, испанский и португальский; язык ответа
25
+ выбирается по профилю пользователя и заголовку `Accept-Language`
26
+
27
+ ### Исправлено
28
+
29
+ - Показ и сохранение письма в плагине: повторный `show()` того же письма не пересоздаёт холст,
30
+ переход на другое письмо не ждёт таймаут, первое сохранение не перезагружает редактор, а второе
31
+ идёт с уже присвоенным id и не плодит копию; после `destroy` запросов больше нет
32
+ - Тема и предзаголовок из вёрстки не теряются при сохранении, а ответ сохранения не откатывает
33
+ свежие метаданные письма
34
+ - Новое письмо из шаблона не теряет связь с родителем; история запрашивается по показанному письму
35
+ - Экспорт: письмо терялось из-за разметки после `</html>`; сбой сборки HTML больше не выдаётся за
36
+ пустой результат
37
+ - Конвертер вёрстки: блоки не теряются на письме BeeFree, правленном руками; кнопке без своей ширины
38
+ больше не навязываются 200px
39
+ - Социальные блоки различаются в панели настроек по позиции в документе
40
+ - Ссылки в письме больше не оборачиваются в `span` с подчёркиванием
41
+ - File Manager: имя файла не теряется в CDN-ссылке с query; настройки доходят до отдельного
42
+ редактора картинок
43
+ - Переводы: меню «Проект», окно о несохранённых изменениях, описания и статусы интеграций
44
+ - Каталог чужой локали больше не применяется, а пустой ответ не затирает кэш переводов
45
+ - Навигация в SaaS-версии
46
+
47
+ ---
48
+
49
+ ## [1.1.60] - 2026-08-14
50
+
51
+ ### Добавлено
52
+
53
+ - Экспорт письма PNG-архивом: в архиве десктопная и мобильная версии письма
54
+ - Пробный период: диалог с предложением попробовать платный тариф в редакторе и единый диалог
55
+ активации на странице тарифов
56
+ - Ограничения по тарифу владельца проекта: автосохранение и платные диалоги учитывают тариф
57
+ владельца, а не текущего пользователя; тариф владельца добавлен в доменную модель проекта
58
+ - File Manager: блокируемые вкладки библиотеки с бейджем
59
+
60
+ ### Исправлено
61
+
62
+ - Устойчивость плагина к сбоям бэкенда: отложенный переход в standalone-режим, failover не
63
+ срывается на ошибках авторизации и возвращается на основной origin после восстановления
64
+ - Производительность редактора: меньше лишних перерисовок панели письма и форм настроек,
65
+ плавный drag-and-drop
66
+ - Публичный предпросмотр письма больше не уводит на страницу входа
67
+ - Headless-контейнер без заданного размера ломал раскладку письма и сжимал картинки
68
+ - File Manager: превью показывает файл, пока миниатюра не готова; сжатие изображений отключается
69
+ при нулевых лимитах; убрано дублирование папок в дереве
70
+
71
+ ---
72
+
73
+ ## [1.1.47] - 2026-08-07
74
+
75
+ ### Добавлено
76
+
77
+ - Подключение собственного ИИ хоста вместо встроенного: колбэки `handleAITextRequest` (чат-ассистент
78
+ и генератор писем) и `handleAIImageRequest` (генерация картинок) в `init(options)`. Хост получает
79
+ прогресс через `onProgress`, частичный HTML через `onStreamChunk` и `AbortSignal` для отмены;
80
+ такие генерации не блокируются лимитами EmailMaker и не списываются в счётчики подписки.
81
+ - Публичный контракт `templateDirectives`: политика экранирования шаблонных директив ESP-синтаксисов,
82
+ единообразно применяется в редакторе, блочном редакторе и при экспорте (HTML, EML, ZIP)
83
+ - App-токены для интеграторов: `POST /auth/app/token`, конвертер вёрстки работает по app-токенам
84
+ с лимитами на клиента
85
+ - Headless-режим встраивания редактора
86
+ - Смена пароля в профиле пользователя
87
+ - File Manager: параллельное сжатие загружаемых файлов
88
+
89
+ ### Исправлено
90
+
91
+ - Отключён автоперевод страницы браузером — он ломал редактор
92
+ - Monaco: ESM-воркеры при cross-origin publicPath
93
+ - Кириллические имена файлов декодируются при загрузке по URL
94
+ - Стабильное встраивание в Angular и Module Federation хосты
95
+
96
+ ### Изменено
97
+
98
+ - Переход на React 19 (Redux Toolkit 2, собственный IframeResizer)
99
+ - Вход через Google, Яндекс и eLama, регистрация и капча переведены на новый Go-бэкенд
100
+ (`/api/v2/auth/*`)
101
+ - Страница проектов переводится на Go-бэкенд `/api/v2` (под флагом): участники и приглашения,
102
+ настройки одним сохранением, теги и папки, интеграции ESP, настройки хранилища
103
+ - File Manager: провайдер на Go-бэкенде (под флагом) — фоновая индексация старого дерева файлов
104
+ с индикатором прогресса, автоподгрузка миниатюр, корзина с восстановлением в выбранную папку
105
+
106
+ ---
107
+
108
+ ## [1.1.29] - 2026-07-14
109
+
110
+ ### Добавлено
111
+
112
+ - Конвертер чужой вёрстки в формат EmailMaker: раздельные параметры `beeFreeConverterEnabled` (детерминированная конвертация BeeFree/Stripo) и `aiLayoutConverterEnabled` (ИИ-конвертация прочей вёрстки)
113
+ - CAPTCHA на формах входа и регистрации (Cloudflare Turnstile, Yandex SmartCaptcha)
114
+ - UTM-метки и динамические подстановки в URL при экспорте
115
+ - Улучшения VML-кнопок для совместимости с Outlook
116
+
117
+ ### Исправлено
118
+
119
+ - Синхронизация контента между iframe и Monaco (эхо-цикл, автосохранение)
120
+ - Стабильный embed редактора во внешних React/Microfrontend-приложениях (StrictMode, publicPath)
121
+ - Читаемые тосты ошибок; автосохранение не блокирует пользовательские правки
122
+ - Белый экран при недоступном API локализации
123
+
124
+ ### Изменено
125
+
126
+ - UI Kit и интерфейс переведены на Ant Design 6
127
+ - File Manager обновлён до 1.1.0
128
+
129
+ ---
130
+
131
+ ## [1.1.25] - 2026-07-07
132
+
133
+ ### Добавлено
134
+
135
+ - Копирование float-блоков
136
+ - Глобальные блоки: доступны всем пользователям, переработана синхронизация
137
+ - Режим кода в боковой панели редактора
138
+ - Пустые состояния в таблицах писем и проектов
139
+ - Индикаторы загрузки сохранения и автосохранения
140
+
141
+ ### Исправлено
142
+
143
+ - Subject и preheader письма
144
+ - Восстановление автосохранения после сбоя
145
+ - Случайное удаление всех стилей в блоке
146
+ - Санитизация HTML от AdGuard и других расширений браузера
147
+ - Vite host plugin: public path в dev-режиме
148
+
149
+ ---
150
+
151
+ ## [1.1.7] - 2026-06-15
152
+
153
+ ### Добавлено
154
+
155
+ - Аналитика действий в iframe редактора письма
156
+ - Улучшен drag-and-drop вставки атомов в письмо
157
+
158
+ ### Исправлено
159
+
160
+ - Превью изображений и видео в настройках элемента (`SelectedImageForm`)
161
+ - Синхронизация meta и layout в форме соцблоков (`SelectedSocialForm`)
162
+ - Детекция и санитизация стилей, ломаемых расширениями браузера (adblock)
163
+ - Навигация по вкладкам панели настроек (`PanelFormTabsOverrides`)
164
+
165
+ ### Изменено
166
+
167
+ - Sentry: переход на переустановленный self-hosted инстанс
168
+
169
+ ---
170
+
171
+ ## [1.1.0] - 2026-06-08
172
+
173
+ ### Добавлено
174
+
175
+ - Система плагинов: extensions API, sandbox API, CLI для разработки плагинов, внутренние плагины; API получения настроек письма (DEV-11837)
176
+ - Глобальные блоки: создание, маркеры в превью, синхронизация изменений по всем шаблонам
177
+ - Страница проектов (DEV-11990): режим карточек, поиск и фильтры, роль Viewer, управление участниками из меню и списка, частые проекты в боковом меню
178
+ - Переключение светлой/тёмной темы в редакторе письма
179
+ - Автосохранение с механизмом повторных попыток; корректная обработка `projectId` для нового письма (DEV-14828)
180
+ - Откат письма к предыдущей версии (DEV-15046)
181
+ - Локализация компонентов UI Kit
182
+ - Аналитика изменений настроек элементов в панели (Amplitude `change_element_setting`)
183
+ - Нормализация ссылок в полях href
184
+ - EML-экспорт: встраивание изображений в base64
185
+
186
+ ### Исправлено
187
+
188
+ - Текстовый редактор: форматирование и редактирование текста (DEV-14640, DEV-14852)
189
+ - Редактирование переменных письма (DEV-14582)
190
+ - Тёмная тема в меню проектов и карточке входящих (DEV-14842)
191
+ - Стикеры в редакторе Pixie (DEV-14969)
192
+ - Monaco: воркеры при разных origin; ESM-сборка редактора
193
+ - Мобильное выравнивание текста и кнопок
194
+ - URL превью изображений переведены на env-переменные (DEV-15052)
195
+
196
+ ### Изменено
197
+
198
+ - Сборка переведена на Vite/ESM; монорепо на pnpm
199
+ - Prod-релизы и версия npm-пакетов определяются git-тегами (`emm-v*`)
200
+ - Санитизация HTML письма от вмешательства расширений браузера
201
+
202
+ ---
203
+
204
+ ## [1.0.117] - 2026-04-07
205
+
206
+ ### Добавлено
207
+
208
+ - Списки в текстовом редакторе (DEV-12615)
209
+ - Якорные ссылки
210
+ - Страница и UX биллинга: лимиты (`limitsApi`), статистика использования, модалки paywall и повышения лимита (`LimitUpgradeModal`, в том числе превышение `image_generate`), виджет тарифа в левом меню (`MenuTariffWidget`): триал, подписка, автопродление (DEV-11223 и связанные задачи)
211
+ - Модальные окна биллинга: выбор тарифа при оплате (`PlanCheckoutChoiceModal`), запрос счёта для юрлица с префилдом и синхронизацией полей (`TariffInvoiceRequestModal`)
212
+ - Переработка социальных блоков: drag-and-drop, подсказки в настройках, пользовательские иконки; платформа VK (`vkv`); контраст и фон атомов и ячеек; кнопка удаления в форме соцэлемента; обновление CDN URL и генерация ссылок на иконки (DEV-13666 и смежные правки)
213
+ - Опции форматирования текста в `SelectedTextCommonForm`
214
+ - Поддержка `commonStyles` в iframe и глубокое слияние стилей контента; доработка отступов панелей
215
+ - Удаление `width` и `max-width` у изображений в неадаптивных письмах (`stripImageWidthForNonResponsive`)
216
+ - Проверки явной ширины контент-колонок во многоколоночных структурах и корректный пересчёт ширин блоков
217
+
218
+ ### Исправлено
219
+
220
+ - Тема письма: пробелы и разбор тега `title` (`getSubject`)
221
+ - Вёрстка письма: ширина колонок с классом `em-insert-ignore`
222
+ - Интеграции: Dotdigital, Klaviyo, ActiveCampaign; URL справки по API-ключу Brevo
223
+ - Файловый менеджер: уведомление при дубликате папки (409), прокрутка списка папок в подменю «Переместить», доработки DataSource и копирования; исключение null в FloatingBlocks; обработка загрузки файлов
224
+ - Нормализация превью изображений для редактора Pixie и форматов отображения через `normalizeImageFormatForDisplay` в загрузчиках изображений
225
+ - Фон текста в письме (DEV-14472)
226
+ - Навигация к родительскому элементу кнопки (DEV-14443)
227
+ - Открытие центра изображений (DEV-14425)
228
+ - Соцблоки: селекторы корневых таблиц, стили форм и `ColorPickerInput`, отступы в `EmailPane` и социальной форме
229
+ - Переключение темы; ошибки halt, Sentry и Unisender; вычисление путей в плагине Vite
230
+ - Отключена проверка TypeScript в HTML в редакторе Monaco
231
+ - Кнопки: единые `height` и `line-height` с переменными темы в `Button.scss`
232
+
233
+ ### Изменено
234
+
235
+ - Обновлены версии Sentry, файлового менеджера и прочих зависимостей
236
+ - Обновлены базовые URL CDN-иконок соцсетей
237
+ - Биллинг: упрощение и рефакторинг `BillingPage`, баннеры и кнопки автопродления; замена сборки webhook на `buildLegacyWebhookRequest`; удалены прокси Streamline и Giphy; поддержка кастомного прокси (DEV-14043)
238
+ - Общие стили: специфичность шрифтов (`PanelForm`, `common.scss`), стили платёжных кнопок в `BillingBannerModal`
239
+ - Компонент `Ribbon` и уведомления; локализация части биллинга и интерфейса
240
+ - CI: удалена джоба Allure; настройки `GIT_CLONE_PATH` для тестовых VM
241
+
242
+ ---
243
+
244
+ ## [1.0.109] - 2026-04-07
245
+
246
+ ### Добавлено
247
+
248
+ - Списки в текстовом редакторе (DEV-12615)
249
+ - Учёт настроек AI: отключение запросов диалогов при выключенном ассистенте; расширение контекста для промпта
250
+ - Поля subscription в методах логирования (DEV-13876)
251
+ - Отправка ошибок из error boundary в статистику
252
+
253
+ ### Исправлено
254
+
255
+ - Тема письма: обработка пробелов и разбор тега `title` (getSubject)
256
+ - Файловый менеджер: уведомление при дубликате папки (409), прокрутка списка папок в подменю «Переместить», доработки DataSource и копирования
257
+ - Ссылки в формах: корректные протокол по умолчанию и пустые URL
258
+ - Песочница: drag-and-drop и перекрытие кликов (pointer-events)
259
+ - Регистрация `applicationElementSettingsSet` и фильтрация путей элементов
260
+ - Нормализация превью изображений для редактора Pixie
261
+
262
+ ### Изменено
263
+
264
+ - Обновлены версии Sentry и зависимостей
265
+
266
+ ---
267
+
268
+ ## [1.0.108] - 2026-03-26
269
+
270
+ ### Добавлено
271
+
272
+ - Вкладка интеграций в модальном окне проекта
273
+ - События data layer при экспорте письма
274
+ - Настройка локальной загрузки в центре изображений (`imageCenterLocalUploadEnabled`)
275
+
276
+ ### Исправлено
277
+
278
+ - Файловый менеджер: отказ от Redux во взаимодействии с FM (DEV-14018, DEV-13858), прокси, фронтовая пагинация, лишняя папка Edited при загрузке
279
+ - Редактор и sandbox: iframe contenteditable, вставка пустых списков (DEV-13612), редактирование текста (DEV-13608), удаление с конца блока (DEV-13558), мобильные свойства текста (DEV-13679)
280
+ - Кнопка в письме (DEV-13746); иконки выравнивания через `currentColor` (DEV-13790)
281
+ - Дублирование уведомлений при отправке тестового письма (DEV-10977)
282
+ - Сортировка в таблице проектов (DEV-13759)
283
+ - Автосохранение: проверка `revisionService`, `emailId` в revisionToApply
284
+
285
+ ### Изменено
286
+
287
+ - Таблицы Blocks / Emails / Projects / Members: вёрстка, меню, drag-and-drop на страницах блока и письма
288
+ - Webhook в компоненте кнопок письма
289
+
290
+ ---
291
+
292
+ ## [1.0.104-alpha.1] - 2026-03-02
293
+
294
+ ### Добавлено
295
+
296
+ **Интеграции:**
297
+
298
+ - Интеграция с Unisender и управление настройками
299
+ - Система доступности интеграций для конкретных приложений
300
+
301
+ **Редактор:**
302
+
303
+ - Ограничения для бесплатного плана в компоненте ButtonsEmail
304
+ - Поддержка mailto ссылок (subject, body) — DEV-13102
305
+ - Функциональность массовых блоков
306
+ - Сортировка элементов
307
+ - Вставка ссылки с нужным цветом — DEV-13172
308
+
309
+ **AI и UX:**
310
+
311
+ - AI-функциональность в EmailPageHeader с проверкой оплаты
312
+ - Улучшенные анимации модальных окон
313
+
314
+ **FileManager:**
315
+
316
+ - Поддержка задания нового имени при копировании файлов и папок
317
+ - Очистка кеша
318
+
319
+ ### Исправлено
320
+
321
+ **Редактор таблиц:**
322
+
323
+ - Вёрстка выпадающего меню элемента Таблица — DEV-13370
324
+ - Работа редактора таблиц — DEV-13371
325
+
326
+ **Вставка и ссылки:**
327
+
328
+ - Дублирование тегов при вставке текста — DEV-13293
329
+ - Дублирование ссылок при вставке — DEV-13378
330
+
331
+ **Элементы:**
332
+
333
+ - Добавление элемента Кнопка в письмо — DEV-13312
334
+ - Некорректное отображение настроек маркеров — DEV-13313
335
+ - Запрет переноса строки для уведомления — DEV-13143
336
+
337
+ **Данные и API:**
338
+
339
+ - Изменения тегов и групп при отправке данных письма — DEV-10189
340
+ - Расчёт суммы рекуррентного платежа с `is_only_first_period` — DEV-13377
341
+ - Уведомление при ошибке отправки тестового письма
342
+ - Локализация в yandexLoginProxyPage
343
+ - Проверка истечения JWT токена и обработка 401 ответа
344
+
345
+ ### Изменено
346
+
347
+ **Рефакторинг sandbox.js → TypeScript:**
348
+
349
+ - Миграция на модульную структуру с типами и централизованным состоянием
350
+ - Модули для обработки событий мыши, клавиатуры, drag-and-drop
351
+ - Обработчики настроек элементов (ссылки, переменные, отступы)
352
+ - Модули для аккордеонов, кнопок, каруселей, таблиц
353
+ - Утилиты для текстового форматирования, стилей и VML
354
+
355
+ **Интеграции:**
356
+
357
+ - IntegrationSettings переименован в IntegrationSettingsData
358
+ - Unisender интеграция мигрирована на гибкую структуру
359
+
360
+ **UI:**
361
+
362
+ - Обновлён layout для BlocksTable и EmailsTable
363
+ - Улучшены стили чекбоксов в таблицах
364
+
365
+ ### Тестирование
366
+
367
+ - Интеграционные тесты для html2Dom, dom2Html и export-пайплайна
368
+ - Функциональные тесты для css namespace в dom2Html
369
+ - Функциональные тесты html2Dom
370
+ - Тесты для функции createWrapper
371
+
372
+ ---
373
+
374
+ ## [1.0.103] - 2026-02-05
375
+
376
+ *Changelog не документирован*
package/README.md CHANGED
@@ -186,6 +186,42 @@ emailmaker
186
186
 
187
187
  ### React (обёртка)
188
188
 
189
+ В пакете есть готовый компонент: он сам создаёт контейнер, вызывает **`init`** при монтировании
190
+ и **`destroy`** при размонтировании.
191
+
192
+ ```tsx
193
+ import Emailmaker from '@emailmaker/emailmaker/react';
194
+
195
+ const content = { email: { id: 'new' }, templateId: 1 };
196
+ const editorConfig = { theme: 'light' };
197
+ const editorStyle = { height: '100vh' };
198
+
199
+ export function EmailmakerEditor({ project, getAuthToken }) {
200
+ return (
201
+ <Emailmaker
202
+ getAuthToken={getAuthToken}
203
+ project={project}
204
+ content={content}
205
+ config={editorConfig}
206
+ style={editorStyle}
207
+ />
208
+ );
209
+ }
210
+ ```
211
+
212
+ Компонент принимает те же опции, что и **`init`**, плюс `id`, `className`, `style` и `container`
213
+ (остальные атрибуты контейнера). **`element`** передавать не нужно — компонент подставляет свой
214
+ `div`. `react` версии 16.8 и выше должен быть в зависимостях вашего проекта: в пакет он не входит.
215
+
216
+ Два ограничения, о которых лучше знать заранее:
217
+
218
+ - Любое обновление props приводит к **`reset`** редактора. Держите объекты и колбэки стабильными
219
+ (`useMemo` / `useCallback`), иначе редактор будет пересоздаваться на каждый рендер родителя.
220
+ - Ошибки инициализации компонент не пробрасывает и никак не показывает. Если **`init`** падает,
221
+ вы увидите пустой контейнер — для диагностики вызовите **`init`** напрямую.
222
+
223
+ Когда нужен полный контроль над жизненным циклом, обёртку пишут руками.
224
+
189
225
  Минимальный каркас: монтирование, **`destroy`** при размонтировании.
190
226
 
191
227
  ```tsx
@@ -482,7 +518,7 @@ emailmaker.init({
482
518
  | handleTestEmailModal | Открыто окно тестовой отправки. |
483
519
  | handleDestroy | Перед уничтожением экземпляра. |
484
520
  | handleLoad | Завершена загрузка экземпляра; можно безопасно вызывать **`getEmail`** и др. |
485
- | handleLoadImage | Загрузка изображения пользователем; **`handleFileProxy`**, **`handleUrlProxy`** — прокси файлов/URL при необходимости. |
521
+ | handleLoadImage | Загрузка изображения пользователем; **`handleFileProxy`**, **`handleUrlProxy`** — прокси файлов/URL при необходимости. Вернуть URL; исключение из обработчика = отказ (редактор не грузит картинку на свой бэкенд), **`undefined`** — редактор дозагружает сам, кроме замкнутого контура (**`standaloneKey`**). |
486
522
  | handleNotify | Произвольное уведомление. |
487
523
  | handleError | Ошибка (можно переопределить UI). |
488
524
  | handleSuccess | Успешная операция. |
@@ -3,16 +3,16 @@ __emailmaker__.define("core", [
3
3
  "exports",
4
4
  "module",
5
5
  "static/core/7df48ae1.js",
6
- "static/core/5da8610f.js",
7
- "static/core/fab6e3c1.js",
8
- "static/core/84e7cbac.js"
6
+ "static/core/fb14792c.js",
7
+ "static/core/4efbc972.js",
8
+ "static/core/1f9bc4c3.js"
9
9
  ], function(f, E, me) {
10
10
  Object.defineProperties(E, {
11
11
  __esModule: { value: !0 },
12
12
  [Symbol.toStringTag]: { value: "Module" }
13
13
  });
14
14
  f("./static/core/7df48ae1.js");
15
- const n = f("./static/core/5da8610f.js"), l = f("./static/core/fab6e3c1.js"), m = f("./static/core/84e7cbac.js");
15
+ const n = f("./static/core/fb14792c.js"), l = f("./static/core/4efbc972.js"), m = f("./static/core/1f9bc4c3.js");
16
16
  var A = "Editor instance was destroyed and cannot be reused. A fresh instance will be created instead.";
17
17
  function w() {
18
18
  const e = new Error(A);
@@ -534,7 +534,7 @@ __emailmaker__.define("core", [
534
534
  R
535
535
  ];
536
536
  async function Z() {
537
- return (await Promise.resolve().then(() => f("./static/core/893bd50e.js"))).default;
537
+ return (await Promise.resolve().then(() => f("./static/core/3af12861.js"))).default;
538
538
  }
539
539
  var ee = (e) => {
540
540
  let t = null, o = !1;
@@ -669,5 +669,5 @@ __emailmaker__.define("core", [
669
669
  ampHtml: o
670
670
  };
671
671
  }
672
- E.init = ae, E.parseAMP = le, E.version = "1.1.72";
672
+ E.init = ae, E.parseAMP = le, E.version = "1.1.75";
673
673
  });
package/emailmaker-esm.js CHANGED
@@ -76,7 +76,7 @@ import { a as w, i as Te, n as Ue, r as J, t as _ } from "./static/esm/7cd4296a.
76
76
  } catch {
77
77
  return y.slice(-1) !== "/" && (y += "/"), t(y + m);
78
78
  }
79
- }), e.version || (e.version = "1.1.72");
79
+ }), e.version || (e.version = "1.1.75");
80
80
  var n = e.modules = /* @__PURE__ */ Object.create(null), r = import("./runtime/index.js"), s = import("./ui-kit/index.js");
81
81
  n.React = r.then(function(o) {
82
82
  return o.React;
@@ -786,8 +786,8 @@ import { a as w, i as Te, n as Ue, r as J, t as _ } from "./static/esm/7cd4296a.
786
786
  `)(e), typeof e.require == "function" && typeof e.require.config == "function" && e.require.config({
787
787
  baseUrl: "./",
788
788
  paths: {
789
- core: "emailmaker-core.bd3c8144.js",
790
- po: "emailmaker-po.bd3c8144.js"
789
+ core: "emailmaker-core.705f9cde.js",
790
+ po: "emailmaker-po.705f9cde.js"
791
791
  }
792
792
  });
793
793
  var p = typeof e.prefetch == "function" ? e.prefetch : void 0;
@@ -1761,7 +1761,7 @@ function N(e, ...n) {
1761
1761
  const r = _.get(e);
1762
1762
  n.some((s) => s !== void 0 && s === r) && _.delete(e);
1763
1763
  }
1764
- var Er = "1.1.72";
1764
+ var Er = "1.1.75";
1765
1765
  async function Ir(e) {
1766
1766
  await de(typeof window.__emailmaker__ < "u" ? window.__emailmaker__ : void 0);
1767
1767
  }
@@ -5941,5 +5941,5 @@ __emailmaker__.define("po", [
5941
5941
  });
5942
5942
  return ea(t?.locale_data?.default);
5943
5943
  }
5944
- ct.parsePoCatalog = ta, ct.version = "1.1.72";
5944
+ ct.parsePoCatalog = ta, ct.version = "1.1.75";
5945
5945
  });
package/emailmaker.d.ts CHANGED
@@ -1054,6 +1054,8 @@ export declare namespace ExportedApi {
1054
1054
  settingsEnabled: boolean;
1055
1055
  /** UTM parameters section in sidebar. */
1056
1056
  UTMEnabled: boolean;
1057
+ /** Gmail Promo Tab Annotations section in sidebar. */
1058
+ annotationsEnabled: boolean;
1057
1059
  /** Subject line field in sidebar. */
1058
1060
  subjectEnabled: boolean;
1059
1061
  /** Preheader field in sidebar. */
@@ -1225,6 +1227,8 @@ export declare namespace ExportedApi {
1225
1227
  aiLayoutConverterEnabled?: boolean;
1226
1228
  /** show export to text */
1227
1229
  exportTextEnabled?: boolean;
1230
+ /** show export to Markdown (nested under the text export menu item) */
1231
+ exportMarkdownEnabled?: boolean;
1228
1232
  /** show export to HTML */
1229
1233
  exportHtmlEnabled?: boolean;
1230
1234
  /** show export to ZIP */
package/emailmaker.js CHANGED
@@ -689,7 +689,7 @@ var __amdEnv = window.__emailmaker__ || (window.__emailmaker__ = {});
689
689
 
690
690
 
691
691
  // Configure AMD loader
692
- __amdEnv.require.config({ baseUrl: "./", paths: {"core":"emailmaker-core.bd3c8144.js","po":"emailmaker-po.bd3c8144.js"} });
692
+ __amdEnv.require.config({ baseUrl: "./", paths: {"core":"emailmaker-core.705f9cde.js","po":"emailmaker-po.705f9cde.js"} });
693
693
 
694
694
  // PublicPath (script detection: entry script lookup → document.currentScript)
695
695
  if (!__emailmaker__.publicPath) {
@@ -1037,7 +1037,7 @@ if (!ns.assetUrl) {
1037
1037
  }
1038
1038
 
1039
1039
  if (!ns.version) {
1040
- ns.version = "1.1.72";
1040
+ ns.version = "1.1.75";
1041
1041
  }
1042
1042
 
1043
1043
  var modules = ns.modules = Object.create(null);
@@ -2785,7 +2785,7 @@ __emailmaker__.define("emailmaker.js", [
2785
2785
  const r = S.get(e);
2786
2786
  t.some((n) => n !== void 0 && n === r) && S.delete(e);
2787
2787
  }
2788
- var rn = "1.1.72";
2788
+ var rn = "1.1.75";
2789
2789
  async function nn(e) {
2790
2790
  await _e(typeof __emailmaker__ < "u" ? __emailmaker__ : void 0);
2791
2791
  }