@emailmaker/emailmaker 1.0.111 → 1.0.113

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 (226) hide show
  1. package/CHANGELOG.en.md +11 -0
  2. package/CHANGELOG.md +11 -0
  3. package/README.md +133 -100
  4. package/asset-manifest.json +202 -195
  5. package/emailmaker-esm.js +1 -1
  6. package/emailmaker.d.ts +7 -0
  7. package/emailmaker.js +1 -1
  8. package/iframe/429.js +1 -1
  9. package/iframe/766.js +1 -1
  10. package/iframe/css/sandbox-darktheme.css +23 -7
  11. package/iframe/css/sandbox.css +24 -12
  12. package/iframe/iframe-eblock.0cb76e5c188260f00df6.html +1 -0
  13. package/iframe/iframe.0cb76e5c188260f00df6.html +1 -0
  14. package/iframe/index.html +1 -1
  15. package/iframe/js/525.b23a9b7e.js +1 -0
  16. package/iframe/js/667.43e50d38.js +1 -0
  17. package/iframe/js/882.d1c8c97b.js +1 -0
  18. package/iframe/sandbox-eblock.js +1 -1
  19. package/js/amplitude.min.js +8 -10
  20. package/js/browser-image-compression.js +3054 -1
  21. package/js/sourcebuster.min.js +0 -1
  22. package/package.json +1 -1
  23. package/static/css/{8778.3f22f159.chunk.css → 2557.2ede4a53.chunk.css} +2 -2
  24. package/static/css/{6310.ce3b451b.chunk.css → 6310.49bbc429.chunk.css} +2 -2
  25. package/static/css/9617.36fe0d8e.chunk.css +2 -0
  26. package/static/css/main.dec6a584.css +2 -0
  27. package/static/js/1241.e3e56034.js +2 -0
  28. package/static/js/1330.ef930318.js +2 -0
  29. package/static/js/1332.0cb959b4.js +2 -0
  30. package/static/js/1377.2c61acc1.js +2 -0
  31. package/static/js/1454.84d2c0a8.js +2 -0
  32. package/static/js/1502.8a2f6e6b.js +2 -0
  33. package/static/js/1510.e74cce46.js +2 -0
  34. package/static/js/1626.3320a5f3.js +2 -0
  35. package/static/js/1640.27be7178.js +2 -0
  36. package/static/js/1788.d2bc729b.js +2 -0
  37. package/static/js/{1807.edd17ae4.js → 1807.0ba6ab90.js} +3 -3
  38. package/static/js/1872.43ec6943.js +2 -0
  39. package/static/js/{1902.a37551ca.js → 1902.f48fb9a9.js} +2 -2
  40. package/static/js/{1940.18a1ab22.js → 1940.524f0244.js} +3 -3
  41. package/static/js/197.6d76c202.js +2 -0
  42. package/static/js/2066.c62582aa.js +2 -0
  43. package/static/js/2114.e385ca42.js +2 -0
  44. package/static/js/2139.775a0a57.js +3 -0
  45. package/static/js/2408.c5572548.js +2 -0
  46. package/static/js/2438.712814b0.js +2 -0
  47. package/static/js/2491.d65e25c3.js +3 -0
  48. package/static/js/2491.d65e25c3.js.LICENSE.txt +163 -0
  49. package/static/js/2557.c5dfa9a5.js +2 -0
  50. package/static/js/2827.36a23b69.js +2 -0
  51. package/static/js/284.efb80df6.js +2 -0
  52. package/static/js/2844.54191136.js +2 -0
  53. package/static/js/290.b615a90b.js +2 -0
  54. package/static/js/2917.a6e819bf.js +2 -0
  55. package/static/js/2988.2496986e.js +2 -0
  56. package/static/js/327.31ca6e0d.js +3 -0
  57. package/static/js/327.31ca6e0d.js.LICENSE.txt +29 -0
  58. package/static/js/3302.84e32b62.js +2 -0
  59. package/static/js/3411.311c6ae0.js +2 -0
  60. package/static/js/3624.c30f383e.js +2 -0
  61. package/static/js/3628.0deca530.js +3 -0
  62. package/static/js/3711.102a68ee.js +2 -0
  63. package/static/js/3816.8f941c79.js +2 -0
  64. package/static/js/3914.72124e24.js +2 -0
  65. package/static/js/4425.47aa4461.js +2 -0
  66. package/static/js/4607.f88cf27a.js +2 -0
  67. package/static/js/4686.180d7a12.js +2 -0
  68. package/static/js/4702.eb86f466.js +2 -0
  69. package/static/js/4813.b282e8cb.js +2 -0
  70. package/static/js/4823.ddb0914d.js +2 -0
  71. package/static/js/494.447cdadd.js +2 -0
  72. package/static/js/5108.b3eccf14.js +2 -0
  73. package/static/js/5261.8499aaa1.js +2 -0
  74. package/static/js/5322.413feb5a.js +2 -0
  75. package/static/js/5432.a1089dad.js +2 -0
  76. package/static/js/5466.50904f4e.js +2 -0
  77. package/static/js/5641.7f2999ab.js +3 -0
  78. package/static/js/{2076.a35d6556.js.LICENSE.txt → 5641.7f2999ab.js.LICENSE.txt} +0 -9
  79. package/static/js/5653.016de6aa.js +2 -0
  80. package/static/js/566.a759ee99.js +3 -0
  81. package/static/js/566.a759ee99.js.LICENSE.txt +20 -0
  82. package/static/js/5827.9dcc9443.js +2 -0
  83. package/static/js/5862.faad8f74.js +2 -0
  84. package/static/js/5864.6033ee51.js +2 -0
  85. package/static/js/5902.33cce976.js +2 -0
  86. package/static/js/5980.d73d6b51.js +2 -0
  87. package/static/js/6033.eb6097f0.js +2 -0
  88. package/static/js/6135.3b810692.js +2 -0
  89. package/static/js/6310.cafc9a48.js +2 -0
  90. package/static/js/6418.59058d0d.js +2 -0
  91. package/static/js/6428.57a30f96.js +2 -0
  92. package/static/js/6552.271c84f5.js +2 -0
  93. package/static/js/6618.feb19bcb.js +2 -0
  94. package/static/js/6764.2a43d6d5.js +2 -0
  95. package/static/js/6832.2e6f8499.js +2 -0
  96. package/static/js/7234.d3966e99.js +2 -0
  97. package/static/js/7288.efae06f4.js +2 -0
  98. package/static/js/737.b395c2b2.js +2 -0
  99. package/static/js/7426.1de30709.js +2 -0
  100. package/static/js/7673.2db4eeee.js +3 -0
  101. package/static/js/{5255.9c7c7b3d.js.LICENSE.txt → 7673.2db4eeee.js.LICENSE.txt} +9 -0
  102. package/static/js/77.9fcf0459.js +2 -0
  103. package/static/js/7974.db4992e0.js +2 -0
  104. package/static/js/8013.2ada21e8.js +2 -0
  105. package/static/js/8466.d3339ec9.js +2 -0
  106. package/static/js/8534.a012d026.js +2 -0
  107. package/static/js/8580.1528b456.js +2 -0
  108. package/static/js/8590.3e646adc.js +2 -0
  109. package/static/js/8682.b39ae089.js +2 -0
  110. package/static/js/8796.27f3a38e.js +2 -0
  111. package/static/js/8839.75fb5ef2.js +2 -0
  112. package/static/js/912.42ae1bb7.js +3 -0
  113. package/static/js/9169.a1d48107.js +2 -0
  114. package/static/js/9200.f1b7e119.js +2 -0
  115. package/static/js/9487.6209c75a.js +3 -0
  116. package/static/js/9487.6209c75a.js.LICENSE.txt +24 -0
  117. package/static/js/9508.4fb40b12.js +2 -0
  118. package/static/js/9578.eb817052.js +2 -0
  119. package/static/js/9617.a3001b3b.js +3 -0
  120. package/static/js/9716.e99deec1.js +2 -0
  121. package/static/js/emailmaker_core.b7120b7c.js +3 -0
  122. package/iframe/iframe-eblock.dfbe43189ad0132f9332.html +0 -1
  123. package/iframe/iframe.dfbe43189ad0132f9332.html +0 -1
  124. package/iframe/js/174.65a3f00f.js +0 -1
  125. package/iframe/js/525.590fe008.js +0 -1
  126. package/iframe/js/882.f76853fe.js +0 -1
  127. package/static/css/3934.8026f9d8.chunk.css +0 -2
  128. package/static/css/main.4042dfaa.css +0 -2
  129. package/static/js/1117.2e051755.js +0 -3
  130. package/static/js/1117.2e051755.js.LICENSE.txt +0 -40
  131. package/static/js/1157.1e6829d5.js +0 -3
  132. package/static/js/1157.1e6829d5.js.LICENSE.txt +0 -9
  133. package/static/js/1241.9f7c977b.js +0 -2
  134. package/static/js/1330.607183c7.js +0 -2
  135. package/static/js/1332.3eba834b.js +0 -2
  136. package/static/js/1377.b486b1f4.js +0 -2
  137. package/static/js/1454.23356a65.js +0 -2
  138. package/static/js/1502.6be06fc7.js +0 -2
  139. package/static/js/1510.32a77efc.js +0 -2
  140. package/static/js/1626.0cd4dd3f.js +0 -2
  141. package/static/js/1640.7ae88653.js +0 -2
  142. package/static/js/1788.e7e85733.js +0 -2
  143. package/static/js/1872.610556e1.js +0 -2
  144. package/static/js/197.64f9fd6b.js +0 -2
  145. package/static/js/2066.a4cfddd1.js +0 -2
  146. package/static/js/2076.a35d6556.js +0 -3
  147. package/static/js/2114.dff67863.js +0 -2
  148. package/static/js/2139.fe670ca3.js +0 -3
  149. package/static/js/2408.8dcea713.js +0 -2
  150. package/static/js/2438.02617e55.js +0 -2
  151. package/static/js/2827.e02551c9.js +0 -2
  152. package/static/js/284.89002158.js +0 -2
  153. package/static/js/2844.4c02df45.js +0 -2
  154. package/static/js/290.3b771060.js +0 -2
  155. package/static/js/2917.f75d7ce1.js +0 -2
  156. package/static/js/2988.6d43f35a.js +0 -2
  157. package/static/js/3302.9b320bc9.js +0 -2
  158. package/static/js/3411.69f4008b.js +0 -2
  159. package/static/js/3624.a7076f34.js +0 -2
  160. package/static/js/3628.d51bff41.js +0 -3
  161. package/static/js/3711.d621dbad.js +0 -2
  162. package/static/js/3816.bf684fe1.js +0 -2
  163. package/static/js/3914.c63f1b85.js +0 -2
  164. package/static/js/3934.0fa3a225.js +0 -3
  165. package/static/js/4425.39579a63.js +0 -2
  166. package/static/js/4607.25f2d561.js +0 -2
  167. package/static/js/4686.6a800b56.js +0 -2
  168. package/static/js/4702.de98cbd5.js +0 -2
  169. package/static/js/4813.ca2fe39e.js +0 -2
  170. package/static/js/4823.d4ba65be.js +0 -2
  171. package/static/js/494.87c48e86.js +0 -2
  172. package/static/js/5108.473a7fe1.js +0 -2
  173. package/static/js/5255.9c7c7b3d.js +0 -3
  174. package/static/js/5261.3e64116f.js +0 -2
  175. package/static/js/5279.3b38adf9.js +0 -2
  176. package/static/js/5322.ce259c32.js +0 -2
  177. package/static/js/5466.a0f769cb.js +0 -2
  178. package/static/js/5612.37f3811e.js +0 -3
  179. package/static/js/5612.37f3811e.js.LICENSE.txt +0 -30
  180. package/static/js/5653.5f06277c.js +0 -2
  181. package/static/js/5827.6555a26a.js +0 -2
  182. package/static/js/5862.225d9aac.js +0 -2
  183. package/static/js/5864.340bc721.js +0 -2
  184. package/static/js/5902.73cb2cc4.js +0 -2
  185. package/static/js/5980.fbc691ed.js +0 -2
  186. package/static/js/6033.71847c1c.js +0 -2
  187. package/static/js/6135.ceb22131.js +0 -2
  188. package/static/js/6310.27dbb05e.js +0 -2
  189. package/static/js/6418.5c3bf780.js +0 -2
  190. package/static/js/6428.8b233458.js +0 -2
  191. package/static/js/6552.9d811323.js +0 -2
  192. package/static/js/6618.8866f1fa.js +0 -2
  193. package/static/js/6764.9e4a7f5f.js +0 -2
  194. package/static/js/6832.4c4f3da7.js +0 -2
  195. package/static/js/7288.170ea51b.js +0 -2
  196. package/static/js/737.fae14b35.js +0 -2
  197. package/static/js/7394.ff9436a5.js +0 -3
  198. package/static/js/7426.eaa2cbe4.js +0 -2
  199. package/static/js/77.6ea8ad5d.js +0 -2
  200. package/static/js/7974.5b71f208.js +0 -2
  201. package/static/js/8466.ae622785.js +0 -2
  202. package/static/js/8534.10b79ff1.js +0 -2
  203. package/static/js/8559.e923c875.js +0 -2
  204. package/static/js/8580.dd55156b.js +0 -2
  205. package/static/js/8590.2779de33.js +0 -2
  206. package/static/js/8682.ec99bbfe.js +0 -2
  207. package/static/js/8778.f3616411.js +0 -2
  208. package/static/js/8796.a6838d71.js +0 -2
  209. package/static/js/8839.25cace14.js +0 -2
  210. package/static/js/9169.dee65ca6.js +0 -2
  211. package/static/js/9200.63433716.js +0 -2
  212. package/static/js/9508.a68ced7b.js +0 -2
  213. package/static/js/9716.fb4af6bc.js +0 -2
  214. package/static/js/emailmaker_core.5b5a28fd.js +0 -3
  215. package/static/media/icon-border-radius.2a56b93a7711558098a622296b7ae2e1.svg +0 -1
  216. package/static/media/icon-create-block.0b077f4000bf7907b9ea871d28c7fb1e.svg +0 -1
  217. /package/iframe/js/{525.590fe008.js.LICENSE.txt → 525.b23a9b7e.js.LICENSE.txt} +0 -0
  218. /package/iframe/js/{174.65a3f00f.js.LICENSE.txt → 667.43e50d38.js.LICENSE.txt} +0 -0
  219. /package/iframe/js/{882.f76853fe.js.LICENSE.txt → 882.d1c8c97b.js.LICENSE.txt} +0 -0
  220. /package/static/js/{1807.edd17ae4.js.LICENSE.txt → 1807.0ba6ab90.js.LICENSE.txt} +0 -0
  221. /package/static/js/{1940.18a1ab22.js.LICENSE.txt → 1940.524f0244.js.LICENSE.txt} +0 -0
  222. /package/static/js/{2139.fe670ca3.js.LICENSE.txt → 2139.775a0a57.js.LICENSE.txt} +0 -0
  223. /package/static/js/{3628.d51bff41.js.LICENSE.txt → 3628.0deca530.js.LICENSE.txt} +0 -0
  224. /package/static/js/{3934.0fa3a225.js.LICENSE.txt → 912.42ae1bb7.js.LICENSE.txt} +0 -0
  225. /package/static/js/{7394.ff9436a5.js.LICENSE.txt → 9617.a3001b3b.js.LICENSE.txt} +0 -0
  226. /package/static/js/{emailmaker_core.5b5a28fd.js.LICENSE.txt → emailmaker_core.b7120b7c.js.LICENSE.txt} +0 -0
package/CHANGELOG.en.md CHANGED
@@ -64,10 +64,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
64
64
  ### Added
65
65
 
66
66
  **Integrations:**
67
+
67
68
  - Unisender integration and settings management
68
69
  - App-specific integration availability system
69
70
 
70
71
  **Editor:**
72
+
71
73
  - Free plan restrictions in ButtonsEmail component
72
74
  - mailto link support (subject, body) — DEV-13102
73
75
  - Mass blocks functionality
@@ -75,29 +77,35 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
75
77
  - Insert link with correct color — DEV-13172
76
78
 
77
79
  **AI & UX:**
80
+
78
81
  - AI functionality in EmailPageHeader with payment verification
79
82
  - Improved modal animations
80
83
 
81
84
  **FileManager:**
85
+
82
86
  - Support for custom names when copying files and folders
83
87
  - Cache clearing
84
88
 
85
89
  ### Fixed
86
90
 
87
91
  **Table Editor:**
92
+
88
93
  - Dropdown menu layout for Table element — DEV-13370
89
94
  - Table editor functionality — DEV-13371
90
95
 
91
96
  **Paste & Links:**
97
+
92
98
  - Tag duplication when pasting text — DEV-13293
93
99
  - Link duplication when pasting — DEV-13378
94
100
 
95
101
  **Elements:**
102
+
96
103
  - Adding Button element to email — DEV-13312
97
104
  - Incorrect marker settings display — DEV-13313
98
105
  - Line break restriction for notifications — DEV-13143
99
106
 
100
107
  **Data & API:**
108
+
101
109
  - Tag and group changes when sending email data — DEV-10189
102
110
  - Recurring payment calculation with `is_only_first_period` — DEV-13377
103
111
  - Notification on test email send error
@@ -107,6 +115,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
107
115
  ### Changed
108
116
 
109
117
  **sandbox.js → TypeScript Refactoring:**
118
+
110
119
  - Migration to modular structure with types and centralized state
111
120
  - Modules for mouse, keyboard, and drag-and-drop event handling
112
121
  - Element settings handlers (links, variables, padding)
@@ -114,10 +123,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
114
123
  - Utilities for text formatting, styles, and VML
115
124
 
116
125
  **Integrations:**
126
+
117
127
  - IntegrationSettings renamed to IntegrationSettingsData
118
128
  - Unisender integration migrated to flexible structure
119
129
 
120
130
  **UI:**
131
+
121
132
  - Updated layout for BlocksTable and EmailsTable
122
133
  - Improved checkbox styles in tables
123
134
 
package/CHANGELOG.md CHANGED
@@ -59,10 +59,12 @@
59
59
  ### Добавлено
60
60
 
61
61
  **Интеграции:**
62
+
62
63
  - Интеграция с Unisender и управление настройками
63
64
  - Система доступности интеграций для конкретных приложений
64
65
 
65
66
  **Редактор:**
67
+
66
68
  - Ограничения для бесплатного плана в компоненте ButtonsEmail
67
69
  - Поддержка mailto ссылок (subject, body) — DEV-13102
68
70
  - Функциональность массовых блоков
@@ -70,29 +72,35 @@
70
72
  - Вставка ссылки с нужным цветом — DEV-13172
71
73
 
72
74
  **AI и UX:**
75
+
73
76
  - AI-функциональность в EmailPageHeader с проверкой оплаты
74
77
  - Улучшенные анимации модальных окон
75
78
 
76
79
  **FileManager:**
80
+
77
81
  - Поддержка задания нового имени при копировании файлов и папок
78
82
  - Очистка кеша
79
83
 
80
84
  ### Исправлено
81
85
 
82
86
  **Редактор таблиц:**
87
+
83
88
  - Вёрстка выпадающего меню элемента Таблица — DEV-13370
84
89
  - Работа редактора таблиц — DEV-13371
85
90
 
86
91
  **Вставка и ссылки:**
92
+
87
93
  - Дублирование тегов при вставке текста — DEV-13293
88
94
  - Дублирование ссылок при вставке — DEV-13378
89
95
 
90
96
  **Элементы:**
97
+
91
98
  - Добавление элемента Кнопка в письмо — DEV-13312
92
99
  - Некорректное отображение настроек маркеров — DEV-13313
93
100
  - Запрет переноса строки для уведомления — DEV-13143
94
101
 
95
102
  **Данные и API:**
103
+
96
104
  - Изменения тегов и групп при отправке данных письма — DEV-10189
97
105
  - Расчёт суммы рекуррентного платежа с `is_only_first_period` — DEV-13377
98
106
  - Уведомление при ошибке отправки тестового письма
@@ -102,6 +110,7 @@
102
110
  ### Изменено
103
111
 
104
112
  **Рефакторинг sandbox.js → TypeScript:**
113
+
105
114
  - Миграция на модульную структуру с типами и централизованным состоянием
106
115
  - Модули для обработки событий мыши, клавиатуры, drag-and-drop
107
116
  - Обработчики настроек элементов (ссылки, переменные, отступы)
@@ -109,10 +118,12 @@
109
118
  - Утилиты для текстового форматирования, стилей и VML
110
119
 
111
120
  **Интеграции:**
121
+
112
122
  - IntegrationSettings переименован в IntegrationSettingsData
113
123
  - Unisender интеграция мигрирована на гибкую структуру
114
124
 
115
125
  **UI:**
126
+
116
127
  - Обновлён layout для BlocksTable и EmailsTable
117
128
  - Улучшены стили чекбоксов в таблицах
118
129
 
package/README.md CHANGED
@@ -3,45 +3,59 @@
3
3
  </p>
4
4
 
5
5
  # Установка
6
+
6
7
  Выполните этот код в командной строке:
7
8
 
8
9
  ```cmd
9
- $ npm i @emailmaker/emailmaker@1.0.111 -save
10
+ $ npm i @emailmaker/emailmaker@1.0.113 -save
10
11
  ```
11
12
 
12
13
  Добавьте EmailMaker plugin в ваш App config.
14
+
13
15
  ### Для сборщика Webpack
16
+
14
17
  Импорт пакета:
18
+
15
19
  ```javascript
16
- const emailMakerPlugin = require('@emailmaker/emailmaker/webpack')
20
+ const emailMakerPlugin = require('@emailmaker/emailmaker/webpack');
17
21
  ```
22
+
18
23
  Определение пакета в приложении:
24
+
19
25
  ```javascript
20
26
  module.exports = {
21
- plugins: [
22
- new EmailmakerWebpackPlugin(),
23
- ]
24
- }
27
+ plugins: [new EmailmakerWebpackPlugin()],
28
+ };
25
29
  ```
30
+
26
31
  ### Для сборщика Vite
32
+
27
33
  Импорт пакета:
34
+
28
35
  ```javascript
29
- import emailMakerPlugin from 'emailmaker/vite'
36
+ import emailMakerPlugin from 'emailmaker/vite';
30
37
  ```
38
+
31
39
  Определение пакета в приложении:
40
+
32
41
  ```javascript
33
42
  export default defineConfig({
34
- plugins: [emailMakerPlugin()],
35
- })
43
+ plugins: [emailMakerPlugin()],
44
+ });
36
45
  ```
46
+
37
47
  # Инициализация
48
+
38
49
  Импортируйте EmailMaker plugin в вашем компоненте:
50
+
39
51
  ```javascript
40
- import * as emailmaker from "@emailmaker/emailmaker"
52
+ import * as emailmaker from '@emailmaker/emailmaker';
41
53
  ```
54
+
42
55
  Параметры инициализации плагина содержат параметр `getAuthToken`. В него должна быть передана функция, которая запрашивает авторизационный OAuth токен по Client ID и Client Secret.
43
56
 
44
57
  ### Получение OAuth токена на бэкенде
58
+
45
59
  ```curl
46
60
  curl --location 'https://api.emailmaker.ru/oauth/token' \
47
61
  --header 'Content-Type: application/x-www-form-urlencoded' \
@@ -51,27 +65,34 @@ curl --location 'https://api.emailmaker.ru/oauth/token' \
51
65
  ```
52
66
 
53
67
  ### Создание сущности EmailMaker plugin
68
+
54
69
  ```javascript
55
- emailmaker.init({
56
- getAuthToken: getAuthToken,
57
- element: "#test",
58
- content: {
59
- title: "Email subject",
60
- html: `КОД_ПИСЬМА`,
61
- },
62
- config: { }
63
- }).then(instance => { })
70
+ emailmaker
71
+ .init({
72
+ getAuthToken: getAuthToken,
73
+ element: '#test',
74
+ content: {
75
+ title: 'Email subject',
76
+ html: `КОД_ПИСЬМА`,
77
+ },
78
+ config: {},
79
+ })
80
+ .then((instance) => {});
64
81
  ```
82
+
65
83
  КОД_ПИСЬМА можно взять из <a href="https://emcdn.ru/plugin/new-email.html" target="_blank">нашего образца</a> или вставить HTML-код своего письма.
66
84
 
67
85
  # Конфигурация
86
+
68
87
  Конфигурация плагина представляет собой JSON с несколькими уровнями вложенности. В конфигурации вы можете настроить внешний вид, содержимое, с которым будет работать плагин и логику.
69
88
 
70
89
  ### element
90
+
71
91
  Вы можете передать строку `element` в конфигурацию плагина. Это селектор DOM-элемента, внутри которого нужно инициализировать плагин. Если элемент не определен, приложение будет запущено в фоновом режиме.
72
92
 
73
93
  ### content
74
- Секция `content` содержит параметры письма, которое нужно отобразить в редакторе.
94
+
95
+ Секция `content` содержит параметры письма, которое нужно отобразить в редакторе.
75
96
  В этот параметр может быть передано:
76
97
 
77
98
  #### {string}
@@ -79,6 +100,7 @@ emailmaker.init({
79
100
  HTML верстка письма.
80
101
 
81
102
  #### {object} email options
103
+
82
104
  ```javascript
83
105
  {
84
106
  id?: string; // Уникальный ID проекта в вашей системе.
@@ -89,6 +111,7 @@ HTML верстка письма.
89
111
  ```
90
112
 
91
113
  #### {object} full description
114
+
92
115
  ```javascript
93
116
  {
94
117
  temlateId?: string; // ID шаблона внутри EmailMaker.
@@ -100,8 +123,10 @@ HTML верстка письма.
100
123
 
101
124
  Можно изменить содержимое в любой момент после инициализации с помощью метода `instance.show(content)`.
102
125
 
103
- ### config
126
+ ### config
127
+
104
128
  Раздел для настройки внешнего вида и настроек редактора. Вы можете изменить конфигурацию этого раздела после инициализации, используя `emailmaker.setConfig` или `emailmaker.updateConfig`.
129
+
105
130
  ##### Список параметров секции config
106
131
  | Параметр | Описание | Значение по умолчанию |
107
132
  | -------------------------------------- | --------------------------------------------------------------------------- | --------------------- |
@@ -240,10 +265,12 @@ HTML верстка письма.
240
265
  | imageCenterEditorEnabled | Таб редактора изображений. | true |
241
266
  | compressMaxSize | Макс. вес картинки после оптимизации, Мб. | true |
242
267
  | compressMaxWidthOrHeight | Макс. ширина картинки после оптимизации, px. | true |
243
-
244
268
  ### Обработка событий
269
+
245
270
  События могут быть переданы в конфигурации или добавлены после при работе с экземпляром плагина. Все подписчики событий могут быть асинхронными функциями.
246
- #### Пример
271
+
272
+ #### Пример
273
+
247
274
  ```javascript
248
275
  emailmaker.init({
249
276
  ....,
@@ -256,8 +283,11 @@ emailmaker.init({
256
283
  const dispose = instance.handleSaveEmail(async (e) => {});
257
284
  });
258
285
  ```
286
+
259
287
  Передавая асинхронную функцию, вы можете реализовать асинхронную загрузку данных.
260
- #### Пример
288
+
289
+ #### Пример
290
+
261
291
  ```javascript
262
292
  emailmaker.init({
263
293
  element: "#test",
@@ -267,54 +297,58 @@ emailmaker.init({
267
297
  handleReadEmail: async (id) => {
268
298
  return await fetchData(id); // Ваша функция получения данных.
269
299
  }
270
- }).then((instance) => {
300
+ }).then((instance) => {
271
301
  setTimeout(() => instance.show({ id: "2" }), 1000)
272
302
  });
273
303
  ```
304
+
274
305
  ### События
275
- | Обработчик события | Описание |
276
- | ------------------------- | -------------------------------------------- |
277
- | handleReadEmail | Чтение письма |
278
- | handleSaveEmail | Сохранение / обновление письма |
279
- | handleReadEmailRevisions | Чтение списка автосохранений |
280
- | handleEmailAutosave | Автосохранение |
281
- | handleReadBlocks | Чтение списка блоков проекта |
282
- | handleSaveBlock | Сохранение / обновление блока проекта |
283
- | handleRemoveBlock | Удаление блока проекта |
284
- | handleReadComments | Чтение списка комментариев письма |
285
- | handleSaveComment | Сохранение / обновление комментария |
286
- | handleRemoveComment | Удаление комментария письма |
287
- | handleSaveButtonClick | Нажатие кнопки сохранения письма |
288
- | handleNextButtonClick | Нажатие кнопки Далее |
289
- | handlePreviousButtonClick | Нажатие кнопки Назад |
290
- | handleEmailChanged | Изменение любого параметра письма |
291
- | handleHtmlChanged | Изменение кода письма |
292
- | handleDestroy | Деструкция плагина |
293
- | handleLoad | Окончание инициализации экземпляра плагина |
294
- | handleLoadImage | Загрузка изображений |
295
- | handleNotify | Уведомление |
296
- | handleError | Уведомление типа Ошибка |
297
- | handleSuccess | Уведомление типа Успех |
298
- | handleTestEmailSend | Отправка тестового письма |
299
- | handleTestEmailModal | Открытие модального окна тестового письма |
306
+
307
+ | Обработчик события | Описание |
308
+ | ------------------------- | ------------------------------------------ |
309
+ | handleReadEmail | Чтение письма |
310
+ | handleSaveEmail | Сохранение / обновление письма |
311
+ | handleReadEmailRevisions | Чтение списка автосохранений |
312
+ | handleEmailAutosave | Автосохранение |
313
+ | handleReadBlocks | Чтение списка блоков проекта |
314
+ | handleSaveBlock | Сохранение / обновление блока проекта |
315
+ | handleRemoveBlock | Удаление блока проекта |
316
+ | handleReadComments | Чтение списка комментариев письма |
317
+ | handleSaveComment | Сохранение / обновление комментария |
318
+ | handleRemoveComment | Удаление комментария письма |
319
+ | handleSaveButtonClick | Нажатие кнопки сохранения письма |
320
+ | handleNextButtonClick | Нажатие кнопки Далее |
321
+ | handlePreviousButtonClick | Нажатие кнопки Назад |
322
+ | handleEmailChanged | Изменение любого параметра письма |
323
+ | handleHtmlChanged | Изменение кода письма |
324
+ | handleDestroy | Деструкция плагина |
325
+ | handleLoad | Окончание инициализации экземпляра плагина |
326
+ | handleLoadImage | Загрузка изображений |
327
+ | handleNotify | Уведомление |
328
+ | handleError | Уведомление типа Ошибка |
329
+ | handleSuccess | Уведомление типа Успех |
330
+ | handleTestEmailSend | Отправка тестового письма |
331
+ | handleTestEmailModal | Открытие модального окна тестового письма |
332
+
300
333
  ### Методы
301
- | Метод | Описание |
302
- | ------------------------- | -------------------------------------------- |
303
- | init | Инициализация (async) |
304
- | show | Изменение содержимого после инициализации |
305
- | destroy | Деструкция экземпляра |
306
- | reset | Сброс всей конфигурации |
307
- | getEmail | Получение текущего письма |
308
- | getConfig | Получение конфигурации |
309
- | getBlocks | Получение блоков проекта |
310
- | getComments | Получение комментариев письма |
311
- | getEmailRevisions | Получение списка контроля версий |
312
- | setConfig | Установка новых парамеров config |
313
- | updateConfig | Добавление к параметрам config |
314
- | notify | Показ уведомлений |
315
- | getElement | Получение элемента инициализации |
316
- | save | Сохраенние письма. |
317
- | compileEmail | Получение скопмилированного письма |
334
+
335
+ | Метод | Описание |
336
+ | ----------------- | ----------------------------------------- |
337
+ | init | Инициализация (async) |
338
+ | show | Изменение содержимого после инициализации |
339
+ | destroy | Деструкция экземпляра |
340
+ | reset | Сброс всей конфигурации |
341
+ | getEmail | Получение текущего письма |
342
+ | getConfig | Получение конфигурации |
343
+ | getBlocks | Получение блоков проекта |
344
+ | getComments | Получение комментариев письма |
345
+ | getEmailRevisions | Получение списка контроля версий |
346
+ | setConfig | Установка новых парамеров config |
347
+ | updateConfig | Добавление к параметрам config |
348
+ | notify | Показ уведомлений |
349
+ | getElement | Получение элемента инициализации |
350
+ | save | Сохраенние письма. |
351
+ | compileEmail | Получение скопмилированного письма |
318
352
 
319
353
  ### 📂 Файловый менеджер
320
354
 
@@ -376,45 +410,44 @@ emailmaker.init({
376
410
  - **comparator** — функция сравнения двух файлов для сортировки. По умолчанию сравнение по имени
377
411
  - **filterMatch** — функция проверки, проходит ли файл текущий фильтр. По умолчанию поиск по имени
378
412
 
379
-
380
413
  ### Интерфейс `StorageProvider`
381
414
 
382
415
  #### Свойства
383
416
 
384
- | Свойство | Тип | Описание | По умолчанию |
385
- |----------|------|-------------|---------|
386
- | `pathMode` | `boolean` | Использовать путь как идентификатор для папок | - |
387
- | `rootId` | `string` | Пользовательский идентификатор корневой папки | `''` |
388
- | `trashPath` | `string` | Путь к корзине/папке для удаленных файлов | - |
389
- | `tempPath` | `string` | Путь к временной папке для загрузок | - |
390
- | `useSoftDelete` | `boolean` | Включить программное мягкое удаление | `false` |
391
- | `ensureFolderTrailingSlash` | `boolean` | Добавлять к путям папок завершающий слэш | `true` |
392
- | `validateDuplicates` | `boolean` | Проверка на существование при операциях с файлами и папками | - |
417
+ | Свойство | Тип | Описание | По умолчанию |
418
+ | --------------------------- | --------- | ----------------------------------------------------------- | ------------ |
419
+ | `pathMode` | `boolean` | Использовать путь как идентификатор для папок | - |
420
+ | `rootId` | `string` | Пользовательский идентификатор корневой папки | `''` |
421
+ | `trashPath` | `string` | Путь к корзине/папке для удаленных файлов | - |
422
+ | `tempPath` | `string` | Путь к временной папке для загрузок | - |
423
+ | `useSoftDelete` | `boolean` | Включить программное мягкое удаление | `false` |
424
+ | `ensureFolderTrailingSlash` | `boolean` | Добавлять к путям папок завершающий слэш | `true` |
425
+ | `validateDuplicates` | `boolean` | Проверка на существование при операциях с файлами и папками | - |
393
426
 
394
427
  #### Методы
395
428
 
396
- ##### Основные методы
397
-
398
- | Метод | Параметры | Возвращает | Описание |
399
- |--------|------------|---------|-------------|
400
- | **getItems** | `options`:<br>- `folderId?: string`<br>- `search?: string`<br>- `sortBy?: string`<br>- `sortOrder?: 'asc'\|'desc'`<br>- `page?: number`<br>- `limit?: number`<br>- `itemType: 'all'\|'file'\|'folder'` | `{ items: FileSystemItem[], pagination?: Partial<ApiPaginationResponse> }` | Получить список файлов и папок с фильтрацией, сортировкой, пагинацией |
401
- | **createFolder** | `name: string`, `parentid?: string` | `FileSystemItem` | Создать новую папку |
402
- | uploadFile | `file`: <br>- `name: string`<br>- `size: number`<br>- `type: string`<br>- `folderId?: string`<br>- `data: Blob \| string`<br>- `thumbnail?: string`<br>- `dimensions?: string`<br>- `aspectRatio?: string`<br>- `extension?: string` | `FileSystemItemUpdate` | Загрузить файл с метаданными |
403
- | uploadFiles | `request`:<br>- `items`: массив объектов:<br>&nbsp;&nbsp;&nbsp;&nbsp;- `requestId?: string` — необязательный идентификатор для сопоставления результата<br>&nbsp;&nbsp;&nbsp;&nbsp;- `name: string` — имя файла<br>&nbsp;&nbsp;&nbsp;&nbsp;- `size: number` — размер файла в байтах<br>&nbsp;&nbsp;&nbsp;&nbsp;- `type: string` — MIME-тип файла<br>&nbsp;&nbsp;&nbsp;&nbsp;- `folderId?: string \| null` — целевая папка<br>&nbsp;&nbsp;&nbsp;&nbsp;- `data: Blob \| string` — содержимое файла<br>&nbsp;&nbsp;&nbsp;&nbsp;- `extension?: string` — расширение файла<br>- `folderId?: string \| null` — папка для загрузки по умолчанию | `BatchResult<UploadFileResultData>` | Загрузить несколько файлов. Порядок элементов важен — при отсутствии `requestId` результаты сопоставляются по индексу |
404
- | **uploadFileByUrl** | `url: string`, `folderId?: string` | `FileSystemItem` | Загрузить файл по URL (проверять существующие файлы) |
405
- | `findItemByPath` | `path: string` | `FileSystemItem \| undefined` | Найти системные файлы/папки по пути |
406
- | `setController` | `controller: StorageProviderController` | `void` | Установить контроллер управления кэшем |
407
- | `getFileData` | `file: FileSystemItem` | `Blob` | Получить содержимое файла как blob |
408
- | `getUrl` | `file: FileSystemItem` | `string` | Получить URL для доступа к файлу |
409
- | `getThumbnailUrl` | `file: FileSystemItem` | `string` | Получить URL миниатюры |
410
- | `renameItem` | `item: FileSystemItem`, `newName: string` | `FileSystemItemUpdate` | Переименовать файл/папку |
411
- | `deleteItem` | `item: FileSystemItem` | `void` | Удалить один элемент (перемещает в корзину при мягком удалении) |
412
- | `deleteItems` | `items: FileSystemItem[]` | `BatchResult<never>` | Удалить несколько элементов |
413
- | `moveItem` | `item: FileSystemItem`, `targetFolderId?: string` | `FileSystemItemUpdate` | Переместить один элемент |
414
- | `moveItems` | `items: FileSystemItem[]`, `targetFolderId?: string` | `BatchResult<FileSystemItemUpdate>` | Переместить несколько элементов |
415
- | `copyItem` | `item: FileSystemItem`, `targetFolderId?: string` | `FileSystemItemUpdate` | Копировать один элемент |
416
- | `copyItems` | `items: FileSystemItem[]`, `targetFolderId?: string` | `BatchResult<FileSystemItemUpdate>` | Копировать несколько элементов |
417
- | `updateFile` | `file: FileSystemItem`, `updates`: объект с метаданными | `FileSystemItemUpdate` | Обновить метаданные/содержимое файла |
429
+ ##### Основные методы
430
+
431
+ | Метод | Параметры | Возвращает | Описание |
432
+ | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
433
+ | **getItems** | `options`:<br>- `folderId?: string`<br>- `search?: string`<br>- `sortBy?: string`<br>- `sortOrder?: 'asc'\|'desc'`<br>- `page?: number`<br>- `limit?: number`<br>- `itemType: 'all'\|'file'\|'folder'` | `{ items: FileSystemItem[], pagination?: Partial<ApiPaginationResponse> }` | Получить список файлов и папок с фильтрацией, сортировкой, пагинацией |
434
+ | **createFolder** | `name: string`, `parentid?: string` | `FileSystemItem` | Создать новую папку |
435
+ | uploadFile | `file`: <br>- `name: string`<br>- `size: number`<br>- `type: string`<br>- `folderId?: string`<br>- `data: Blob \| string`<br>- `thumbnail?: string`<br>- `dimensions?: string`<br>- `aspectRatio?: string`<br>- `extension?: string` | `FileSystemItemUpdate` | Загрузить файл с метаданными |
436
+ | uploadFiles | `request`:<br>- `items`: массив объектов:<br>&nbsp;&nbsp;&nbsp;&nbsp;- `requestId?: string` — необязательный идентификатор для сопоставления результата<br>&nbsp;&nbsp;&nbsp;&nbsp;- `name: string` — имя файла<br>&nbsp;&nbsp;&nbsp;&nbsp;- `size: number` — размер файла в байтах<br>&nbsp;&nbsp;&nbsp;&nbsp;- `type: string` — MIME-тип файла<br>&nbsp;&nbsp;&nbsp;&nbsp;- `folderId?: string \| null` — целевая папка<br>&nbsp;&nbsp;&nbsp;&nbsp;- `data: Blob \| string` — содержимое файла<br>&nbsp;&nbsp;&nbsp;&nbsp;- `extension?: string` — расширение файла<br>- `folderId?: string \| null` — папка для загрузки по умолчанию | `BatchResult<UploadFileResultData>` | Загрузить несколько файлов. Порядок элементов важен — при отсутствии `requestId` результаты сопоставляются по индексу |
437
+ | **uploadFileByUrl** | `url: string`, `folderId?: string` | `FileSystemItem` | Загрузить файл по URL (проверять существующие файлы) |
438
+ | `findItemByPath` | `path: string` | `FileSystemItem \| undefined` | Найти системные файлы/папки по пути |
439
+ | `setController` | `controller: StorageProviderController` | `void` | Установить контроллер управления кэшем |
440
+ | `getFileData` | `file: FileSystemItem` | `Blob` | Получить содержимое файла как blob |
441
+ | `getUrl` | `file: FileSystemItem` | `string` | Получить URL для доступа к файлу |
442
+ | `getThumbnailUrl` | `file: FileSystemItem` | `string` | Получить URL миниатюры |
443
+ | `renameItem` | `item: FileSystemItem`, `newName: string` | `FileSystemItemUpdate` | Переименовать файл/папку |
444
+ | `deleteItem` | `item: FileSystemItem` | `void` | Удалить один элемент (перемещает в корзину при мягком удалении) |
445
+ | `deleteItems` | `items: FileSystemItem[]` | `BatchResult<never>` | Удалить несколько элементов |
446
+ | `moveItem` | `item: FileSystemItem`, `targetFolderId?: string` | `FileSystemItemUpdate` | Переместить один элемент |
447
+ | `moveItems` | `items: FileSystemItem[]`, `targetFolderId?: string` | `BatchResult<FileSystemItemUpdate>` | Переместить несколько элементов |
448
+ | `copyItem` | `item: FileSystemItem`, `targetFolderId?: string` | `FileSystemItemUpdate` | Копировать один элемент |
449
+ | `copyItems` | `items: FileSystemItem[]`, `targetFolderId?: string` | `BatchResult<FileSystemItemUpdate>` | Копировать несколько элементов |
450
+ | `updateFile` | `file: FileSystemItem`, `updates`: объект с метаданными | `FileSystemItemUpdate` | Обновить метаданные/содержимое файла |
418
451
 
419
452
  ##### Определения типов
420
453
 
@@ -431,4 +464,4 @@ emailmaker.init({
431
464
  - **Разрешение путей**: `trashPath` и `tempPath` преобразуются в реальные идентификаторы папок
432
465
  - **Загрузка по URL**: Должна проверять, существует ли файл уже на текущем сервере
433
466
  - **Управление кэшем**: Используйте `setController` для запросов инвалидации кэша
434
- - **Двойное мягкое удаление**: Если бэкенд уже реализует мягкое удаление, оставьте `useSoftDelete=false`
467
+ - **Двойное мягкое удаление**: Если бэкенд уже реализует мягкое удаление, оставьте `useSoftDelete=false`