@emailmaker/emailmaker 1.1.109 → 1.2.3
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.
- package/README.md +58 -1
- package/emailmaker-core.8c2b05d7.js +859 -0
- package/emailmaker-esm.js +11 -11
- package/{emailmaker-po.7b3c64f5.js → emailmaker-po.8c2b05d7.js} +1 -1
- package/emailmaker.d.ts +254 -3
- package/emailmaker.js +12 -12
- package/iframe/.vite/manifest.json +4 -4
- package/iframe/{iframe-eblock.7b3c64f5.html → iframe-eblock.8c2b05d7.html} +2 -2
- package/iframe/{iframe.7b3c64f5.html → iframe.8c2b05d7.html} +2 -2
- package/iframe/js/elMarkupHelper.DnlKn-Lc.js +277 -0
- package/iframe/js/iframe-eblock.body.8c2b05d7.js +9 -0
- package/iframe/js/iframe-eblock.js +2 -2
- package/iframe/js/iframe.body.8c2b05d7.js +129 -0
- package/iframe/js/iframe.js +2 -2
- package/package.json +1 -1
- package/runtime/react/index.js +1 -1
- package/static/core/{efb5b933.js → 1687225b.js} +1 -1
- package/static/core/{86b377fd.js → 1912a30e.js} +1 -1
- package/static/core/{2f32a31d.js → 286097e2.js} +2 -2
- package/static/core/{874f77d2.js → 316f71b7.js} +1 -1
- package/static/core/{26971a74.js → 42ec1ce9.js} +2 -2
- package/static/core/466f98bb.js +28 -0
- package/static/core/{8c37b60d.js → 48e93de9.js} +1 -1
- package/static/core/{26473b73.js → 492992bb.js} +1 -1
- package/static/core/{98ab1508.js → 60b75c99.js} +1 -1
- package/static/core/{f115f982.js → 6535dd13.js} +7 -7
- package/static/core/{5c4304c8.js → 6e548251.js} +1 -1
- package/static/core/844fbb88.js +1 -0
- package/static/core/{9ef544f4.js → 97aabe39.js} +1 -1
- package/static/core/{cebc7ae2.js → 9e7c400d.js} +10 -10
- package/static/core/9ff19e12.js +4 -0
- package/static/core/{b35140b6.js → aab84cf4.js} +1 -1
- package/static/core/{a85c7f02.js → b6999cba.js} +1 -1
- package/static/core/{1157da89.js → b752ed52.js} +1 -1
- package/static/core/{ee6c9aa1.js → b99f4f42.js} +1 -1
- package/static/core/{213ffad0.js → bbb11e65.js} +1 -1
- package/static/core/{6314ae82.js → c2daae71.js} +1 -1
- package/static/core/{3bfab25b.js → c6cd3dc2.js} +1 -1
- package/static/core/{2e29db3c.js → c7b2d60e.js} +1 -1
- package/static/core/{850805d7.js → d2a90b69.js} +1 -1
- package/static/core/{756e184f.js → dfbe3ba4.js} +1 -1
- package/static/core/{87dcdb89.js → e13d6875.js} +1 -1
- package/static/core/{e8fa95c8.js → ed4586a5.js} +1 -1
- package/static/core/{dfcb8d34.js → ee6a6899.js} +1 -1
- package/static/esm/ea997fe3.js +1 -0
- package/static/umd-runtime/runtime.BqNyFZPj.js +1 -0
- package/vendor/@emailmaker/ui-kit/package.json +1 -1
- package/emailmaker-core.7b3c64f5.js +0 -859
- package/iframe/js/elMarkupHelper.BcpgksI_.js +0 -279
- package/iframe/js/iframe-eblock.body.7b3c64f5.js +0 -9
- package/iframe/js/iframe.body.7b3c64f5.js +0 -129
- package/static/core/6fb2f217.js +0 -4
- package/static/core/e4b8362a.js +0 -28
- package/static/core/e90908e7.js +0 -1
- package/static/esm/73c89921.js +0 -1
- package/static/umd-runtime/runtime.DaVzSc6X.js +0 -1
package/README.md
CHANGED
|
@@ -555,8 +555,11 @@ HTML-разметка письма.
|
|
|
555
555
|
| nextButtonText | Текст на второстепенной кнопке. | '' |
|
|
556
556
|
| saveButtonEnabled | Показ основной кнопки. | true |
|
|
557
557
|
| saveButtonText | Текст основной кнопки. | '' |
|
|
558
|
+
| saveHotkeyEnabled | Сохранение по Ctrl+S / Cmd+S. `false` отключает его; диалог браузера «Сохранить страницу» всё равно не открывается. | true |
|
|
558
559
|
| commandButtonsEnabled | Показ основной и второстепенной кнопки. | true |
|
|
559
560
|
| | | |
|
|
561
|
+
| lockEditor | Режим только для чтения: письмо нельзя изменить. Закрывает холст, редактор кода, поля темы и прехедера, импорт, отмену и повтор (кнопки и клавиши), историю версий, настройки письма и UTM-метки, ИИ-чат, конвертер раскладки и аннотации Gmail. Кнопки остаются на месте, но неактивны; иконка ИИ у темы и прехедера скрывается. Методы API (`show`, `setEmail`, отмена через API) не закрываются. Переключается через `setConfig`. | false |
|
|
562
|
+
| | | |
|
|
560
563
|
| sidePanelFloating | Плавающая боковая панель. | true |
|
|
561
564
|
| desktopMobileSwitchRule | Полоса переключения режимов. | true |
|
|
562
565
|
| desktopMobileSwitchPanel | Панель переключения режимов. | false |
|
|
@@ -771,7 +774,8 @@ emailmaker.init({
|
|
|
771
774
|
| handleShareEmail | Поделиться. |
|
|
772
775
|
| handleLivePreviewEmail | Живой предпросмотр. |
|
|
773
776
|
| handlePreviewEmail | Предпросмотр. |
|
|
774
|
-
| handleValidate |
|
|
777
|
+
| handleValidate | Ошибки редактора кода (**`CodeError[]`**) — то, что он подчёркивает. Приходит после проверки текста в редакторе: пока ошибки есть — на каждую правку, и один раз, когда они исчезли; если ошибок не было и нет — не приходит. Только после того, как режим кода хоть раз открывали. Проверить письмо по требованию — **`validateCode()`**. |
|
|
778
|
+
| handleImportValidate | Ошибки разметки импортируемого файла (**`{ errors: CodeError[], fileName }`**), найденные до разбора браузером: браузер молча «чинит» сбитую разметку, и редактор ошибок уже не увидит. Файл проверяется, только если на событие есть подписчики. Импорт событие не задерживает и не отменяет; у чистого файла **`errors`** пустой. |
|
|
775
779
|
| handleTestEmailSend | Отправка тестового письма. |
|
|
776
780
|
| handleTestEmailModal | Открыто окно тестовой отправки. |
|
|
777
781
|
| handleDestroy | Перед уничтожением экземпляра. |
|
|
@@ -783,9 +787,60 @@ emailmaker.init({
|
|
|
783
787
|
| handleReadLocale | Язык интерфейса (**`AppConfigMixin`**). Каталог возвращается текстом **`.po`**, JSON-строкой или готовым объектом **`LocaleData`**. |
|
|
784
788
|
| handleTranslate | Пользовательский перевод строк. |
|
|
785
789
|
| handleLimitUsage | Отображение квот / лимитов. |
|
|
790
|
+
| handleAnalyticsEvent | Действие пользователя в редакторе — для вашей аналитики; см. ниже. |
|
|
786
791
|
|
|
787
792
|
Полный перечень и сигнатуры — в **`emailmaker.d.ts`** (**`ExportedApi.DataMixin.Events`** и смежные миксины).
|
|
788
793
|
|
|
794
|
+
#### Аналитика: `handleAnalyticsEvent`
|
|
795
|
+
|
|
796
|
+
Редактор сообщает о действиях пользователя — для вашей аналитики (Amplitude, GA и т. п.). Событие —
|
|
797
|
+
**`{ name, properties }`**:
|
|
798
|
+
|
|
799
|
+
- **`name`** — имя вида `editor_<объект>_<действие>`: `editor_email_saved`, `editor_layout_convert_succeeded`;
|
|
800
|
+
- **`properties`** — только закрытые списки значений, числа и флажки. Идентификаторов, имён, текста
|
|
801
|
+
письма и адресов в событиях нет. Связать событие со своим письмом или пользователем — ваша часть:
|
|
802
|
+
добавьте свой идентификатор при передаче в аналитику.
|
|
803
|
+
|
|
804
|
+
Обработчик не ждут: его результат не используется, исключение в нём на редактор не влияет. События
|
|
805
|
+
приходят независимо от **`pushToGTM`**. Частые события — правка настройки элемента, ширина холста —
|
|
806
|
+
приходят одним, после паузы.
|
|
807
|
+
|
|
808
|
+
```javascript
|
|
809
|
+
emailmaker.init({
|
|
810
|
+
element: '#editor',
|
|
811
|
+
content: { email: { id: '1' } },
|
|
812
|
+
getAuthToken,
|
|
813
|
+
handleAnalyticsEvent: ({ name, properties }) => {
|
|
814
|
+
amplitude.track(name, { ...properties, letter_id: currentLetterId });
|
|
815
|
+
},
|
|
816
|
+
});
|
|
817
|
+
```
|
|
818
|
+
|
|
819
|
+
Конвертация чужой вёрстки (BeeFree, Stripo и прочей):
|
|
820
|
+
|
|
821
|
+
| Событие | Когда | Свойства |
|
|
822
|
+
| --- | --- | --- |
|
|
823
|
+
| `editor_layout_convert_offered` | Показано предложение сконвертировать | `source`, `trigger` |
|
|
824
|
+
| `editor_layout_convert_declined` | Предложение отклонено | `source`, `trigger`, `never_suggest` |
|
|
825
|
+
| `editor_layout_convert_started` | Начата попытка | `source`, `method`, `trigger` |
|
|
826
|
+
| `editor_layout_convert_succeeded` | Результат в редакторе | `source`, `method`, `trigger`, `duration_ms`, `fallback_to_ai` |
|
|
827
|
+
| `editor_layout_convert_failed` | Попытка не удалась | `source`, `method`, `trigger`, `duration_ms`, `error_code` |
|
|
828
|
+
|
|
829
|
+
`source` — `beefree` / `stripo` / `unknown`; `method` — `algorithm` / `ai`; `trigger` — `prompt` (предложение
|
|
830
|
+
при открытии письма), `import`, `menu`, `retry`.
|
|
831
|
+
|
|
832
|
+
Остальные события:
|
|
833
|
+
|
|
834
|
+
| Область | События |
|
|
835
|
+
| --- | --- |
|
|
836
|
+
| Письмо и блок | `editor_email_saved`, `editor_block_saved`, `editor_back_clicked`, `editor_email_deleted`, `editor_email_delete_clicked`, `editor_email_delete_modal_opened`, `editor_email_duplicate_clicked`, `editor_email_duplicated`, `editor_email_import_clicked`, `editor_email_imported`, `editor_email_exported`, `editor_email_locked`, `editor_email_unlocked`, `editor_block_locked`, `editor_block_unlocked` |
|
|
837
|
+
| Холст и панели | `editor_element_added`, `editor_element_setting_changed`, `editor_canvas_resized`, `editor_pane_tab_opened`, `editor_config_mode_changed`, `editor_mode_changed`, `editor_code_mode_activated`, `editor_breadcrumb_clicked` |
|
|
838
|
+
| Проверки и предпросмотр | `editor_code_checked`, `editor_links_checked`, `editor_images_checked`, `editor_spam_checked`, `editor_preview_opened`, `editor_test_email_modal_opened`, `editor_test_email_sent`, `editor_email_shared`, `editor_inbox_tests_opened`, `editor_version_history_opened`, `editor_web_version_opened` |
|
|
839
|
+
| ИИ и обсуждение | `editor_ai_message_sent`, `editor_ai_reply_received`, `editor_ai_role_selected`, `editor_ai_subject_inserted`, `editor_ai_preheader_inserted`, `editor_comment_sent`, `editor_ai_image_generation_started` |
|
|
840
|
+
|
|
841
|
+
Свойства каждого события и их значения — в **`emailmaker.d.ts`**, **`ExportedApi.DataMixin.AnalyticsEventMap`**.
|
|
842
|
+
Событие приходит, только если соответствующая функция включена в конфигурации.
|
|
843
|
+
|
|
789
844
|
#### Восстановление автосохранения
|
|
790
845
|
|
|
791
846
|
- Восстановленное содержимое редактор считает текущим: событий правки (**`handleEmailChanged`**, **`handleHtmlChanged`**) не будет, пока пользователь не изменит письмо. Автосохранение при этом остаётся у вас, поэтому при следующем открытии письмо восстановится снова.
|
|
@@ -899,6 +954,7 @@ emailmaker.init({
|
|
|
899
954
|
| `trashPath` | `string` | Путь к корзине/папке для удаленных файлов | - |
|
|
900
955
|
| `tempPath` | `string` | Путь к временной папке для загрузок | - |
|
|
901
956
|
| `useSoftDelete` | `boolean` | Включить программное мягкое удаление | `false` |
|
|
957
|
+
| `trashSupportsFolders` | `boolean` | Корзина принимает папки (при `useSoftDelete`) | `true` |
|
|
902
958
|
| `ensureFolderTrailingSlash` | `boolean` | Добавлять к путям папок завершающий слэш | `true` |
|
|
903
959
|
| `validateDuplicates` | `boolean` | Проверка на существование при операциях с файлами и папками | - |
|
|
904
960
|
|
|
@@ -938,6 +994,7 @@ emailmaker.init({
|
|
|
938
994
|
##### Важные примечания
|
|
939
995
|
|
|
940
996
|
- **Мягкое удаление**: Когда `useSoftDelete=true`, операции удаления перемещают элементы в `trashPath`
|
|
997
|
+
- **Корзина без папок**: Если бэкенд не принимает папки в корзине, задайте `trashSupportsFolders=false`: при удалении папки файлы всего её поддерева переносятся в корзину плоским списком (совпавшее имя получает номер, `photo (1).png`, если реализован `renameItem`), а опустевшие папки удаляются навсегда. Если хоть один файл не перенёсся, папка не удаляется
|
|
941
998
|
- **Корневая папка**: Используйте `rootId` или пустую строку для операций с корневой папкой
|
|
942
999
|
- **Разрешение путей**: `trashPath` и `tempPath` преобразуются в реальные идентификаторы папок
|
|
943
1000
|
- **Загрузка по URL**: Должна проверять, существует ли файл уже на текущем сервере
|