@seliseblocks/mailcraft 0.1.1 → 0.2.0

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 (69) hide show
  1. package/DOCS.md +238 -10
  2. package/README.md +11 -3
  3. package/README.md.txt +134 -0
  4. package/dist/mailcraft-editor.bundle.js +51 -39
  5. package/dist/mailcraft-editor.bundle.js.map +3 -3
  6. package/examples/templates/order-confirmed.html +80 -80
  7. package/examples/vanilla.html +234 -22
  8. package/package.json +7 -2
  9. package/src/core/assets.js +10 -15
  10. package/src/core/binder.js +120 -118
  11. package/src/core/blocks.js +14 -1
  12. package/src/core/css-cascade.js +117 -117
  13. package/src/core/editor-core.js +1530 -1492
  14. package/src/core/export.js +142 -55
  15. package/src/core/i18n/ar.js +219 -177
  16. package/src/core/i18n/bg.js +196 -152
  17. package/src/core/i18n/bn.js +218 -176
  18. package/src/core/i18n/ca.js +196 -152
  19. package/src/core/i18n/cs.js +196 -152
  20. package/src/core/i18n/da.js +196 -152
  21. package/src/core/i18n/de-CH.js +196 -152
  22. package/src/core/i18n/de.js +196 -152
  23. package/src/core/i18n/dz.js +221 -179
  24. package/src/core/i18n/el.js +196 -152
  25. package/src/core/i18n/en.js +3 -10
  26. package/src/core/i18n/es.js +196 -152
  27. package/src/core/i18n/et.js +196 -152
  28. package/src/core/i18n/fi.js +196 -152
  29. package/src/core/i18n/fr.js +196 -152
  30. package/src/core/i18n/hr.js +196 -152
  31. package/src/core/i18n/hu.js +196 -152
  32. package/src/core/i18n/index.js +83 -83
  33. package/src/core/i18n/it.js +196 -152
  34. package/src/core/i18n/lt.js +196 -152
  35. package/src/core/i18n/lv.js +196 -152
  36. package/src/core/i18n/nb.js +196 -152
  37. package/src/core/i18n/nl.js +196 -152
  38. package/src/core/i18n/pl.js +196 -152
  39. package/src/core/i18n/pt.js +196 -152
  40. package/src/core/i18n/ro.js +196 -152
  41. package/src/core/i18n/ru.js +196 -152
  42. package/src/core/i18n/sk.js +196 -152
  43. package/src/core/i18n/sl.js +196 -152
  44. package/src/core/i18n/sv.js +196 -152
  45. package/src/core/i18n/tables.js +50 -50
  46. package/src/core/i18n/tr.js +196 -152
  47. package/src/core/i18n/uk.js +196 -152
  48. package/src/core/icons.js +237 -235
  49. package/src/core/ids.js +1 -1
  50. package/src/core/import-html.js +1025 -959
  51. package/src/core/layout-style.js +100 -100
  52. package/src/core/parse.js +10 -10
  53. package/src/core/placeholder.js +15 -15
  54. package/src/core/sanitize.js +141 -141
  55. package/src/core/storage-limits.js +184 -184
  56. package/src/core/storage.js +85 -85
  57. package/src/core/theme.js +1 -1
  58. package/src/core/variables.js +11 -11
  59. package/src/index.js +9 -9
  60. package/src/mailcraft-editor.js +26 -14
  61. package/src/render/block-body.js +49 -6
  62. package/src/render/canvas.js +31 -2
  63. package/src/render/fields.js +602 -588
  64. package/src/render/focus-preserve.js +158 -158
  65. package/src/render/rte.js +241 -212
  66. package/src/render/screenshot.js +132 -132
  67. package/src/render/story.js +415 -415
  68. package/src/render/style.js +8 -0
  69. package/types/index.d.ts +419 -0
@@ -1,152 +1,196 @@
1
- /** Bulgarian (Български) — `bg`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
2
- export const BG = {
3
- 'action.undoHint': 'Отмяна — ⌘Z',
4
- 'action.redoHint': 'Повторение — ⌘⇧Z',
5
- 'action.chromeToDark': 'Тъмна',
6
- 'action.chromeToLight': 'Светла',
7
- 'action.chromeHint': 'Тема на редактора светла / тъмна',
8
- 'action.aiCopy': 'Текст',
9
- 'action.aiCopyHint': 'Написване на текст с изкуствен интелект',
10
- 'action.code': 'Код',
11
- 'action.codeHint': 'Редактиране на суров HTML с преглед на живо',
12
- 'action.preview': 'Преглед',
13
- 'action.export': 'Изнасяне',
14
- 'device.desktop': 'Компютър',
15
- 'device.desktopHint': 'Ширина за компютър',
16
- 'device.mobile': 'Телефон',
17
- 'device.mobileHint': 'Ширина за телефон',
18
- 'device.dark': 'Тъмна',
19
- 'device.darkHint': 'Тъмен режим на пощата',
20
- 'status.autosaveOn': 'автоматичното запазване е включено',
21
- 'status.saved': 'запазено {time}',
22
- 'status.saveFailed': 'не е запазено — хранилището е пълно',
23
- 'canvas.meta': '{rows} реда · {blocks} блока · {width}px',
24
- 'tab.design': 'Стил',
25
- 'tab.designHint': 'Стилизиране на избраното',
26
- 'tab.blocks': 'Блокове',
27
- 'tab.blocksHint': 'Блокове съдържание и променливи',
28
- 'tab.rows': 'Секции',
29
- 'tab.rowsHint': 'Оформления на секции и модел на платното',
30
- 'tab.files': 'Файлове',
31
- 'tab.filesHint': 'Библиотека с ресурси',
32
- 'tab.layers': 'Структура',
33
- 'tab.layersHint': 'Структура на документа',
34
- 'tab.theme': 'Тема',
35
- 'tab.themeHint': 'Глобални стилове',
36
- 'tab.data': 'Промен.',
37
- 'tab.dataHint': 'Променливи, предоставени от вашия код',
38
- 'inspector.blockProperties': 'Свойства на блока',
39
- 'inspector.sectionProperties': 'Свойства на секцията',
40
- 'inspector.title': 'Инспектор',
41
- 'inspector.sectionLabel': 'Секция',
42
- 'inspector.nothingSelected': 'Нищо не е избрано',
43
- 'action.duplicateHint': 'Дублиране — ⌘D',
44
- 'action.deleteHint': 'Изтриване ',
45
- 'inspector.emptyBody':
46
- 'Изберете ред или блок на платното, за да го стилизирате тук. Плъзнете блокове от раздела <strong style="color: var(--ed-text); font-weight: 600;">Блокове</strong>; кликнете два пъти върху текст, за да го редактирате на място.',
47
- 'inspector.shortcuts': 'Клавишни комбинации',
48
- 'shortcut.undoRedo': '⌘Z / ⌘⇧Z отмяна, повторение',
49
- 'shortcut.duplicate': '⌘D — дублиране на избора',
50
- 'shortcut.delete': 'изтриване на избора',
51
- 'shortcut.export': '⌘Eизнасяне на HTML',
52
- 'shortcut.escape': 'ESCпремахване на избора, затваряне',
53
- 'blocks.dragHint': 'Плъзнете върху платното',
54
- 'blocks.count': '{count} блока',
55
- 'rows.sectionLayouts': 'Оформления на секции',
56
- 'rows.customMarkup': 'Персонализирана маркировка',
57
- 'rows.htmlRowHint': 'Плъзнете, за да вмъкнете, или кликнете, за да добавите — ред на цялата ширина, който запълвате със суров HTML',
58
- 'rows.rawHtmlSection': 'Секция със суров HTML',
59
- 'rows.rawHtmlDesc': 'Секция на цялата ширина, ваша собствена маркировка, все още може да се плъзга',
60
- 'rows.canvasModel': 'Модел на платното',
61
- 'rows.modeRowBased': 'Базирано на редове',
62
- 'rows.modeFreeStack': 'Свободно подреждане',
63
- 'rows.hintRows':
64
- 'Базирано на секции: първо пуснете оформление, после блокове в неговите колони — всяка секция има собствен фон, рамка, flex или grid настройки.',
65
- 'rows.hintStack': 'Свободно подреждане: без оформления — всеки пуснат блок става собствена секция на цялата ширина, подредена по ред.',
66
- 'files.libraryCount': 'Библиотека{count} файла',
67
- 'files.openManager': 'Отваряне на файловия мениджър',
68
- 'files.dragToCanvas': 'Плъзнете произволен файл директно върху платното, за да го поставите като блок с изображение.',
69
- 'layers.structure': 'Структура',
70
- 'layers.sectionSingle': 'Секция',
71
- 'layers.sectionMulti': 'Секция · {count} колони',
72
- 'layers.blockCount': '{count} бл.',
73
- 'theme.globalStyles': 'Глобални стилове',
74
- 'vars.title': 'Променливи',
75
- 'vars.fromCode': '{count} от вашия код',
76
- 'vars.declaredNote': 'Декларирани от вашето приложение — платното винаги показва токена, никога стойност.',
77
- 'vars.filterPlaceholder': 'Филтриране на променливи…',
78
- 'vars.insertHint': 'Кликнете, за да вмъкнете в избрания текст, заглавие или бутон',
79
- 'vars.insert': 'вмъкване',
80
- 'vars.noMatch': 'Няма променлива, отговаряща на този филтър.',
81
- 'vars.noneDeclared': 'Вашето приложение все още не е декларирало променливи.',
82
- 'vars.rteHint': 'При редактиране на текст можете да изберете променлива и директно от падащото меню на вградената лента с инструменти.',
83
- 'modal.fileManager': 'Файлов мениджър',
84
- 'modal.assetsTitle': 'Ресурси',
85
- 'modal.replaceImage': 'Замяна на изображение',
86
- 'library.searchPlaceholder': 'Търсене на файлове…',
87
- 'action.upload': 'Качване',
88
- 'library.clickToPlace': 'Кликнете върху файл, за да го поставите · или плъзнете файл върху платното',
89
- 'library.clickToReplace': 'Кликнете върху файл, за да замените избраното изображение',
90
- 'library.storageLabel': '{count} файла · {size}',
91
- 'library.folders': 'Папки',
92
- 'library.dropHint': 'Пуснете файлове с изображения тук за качване — или използвайте бутона Качване.',
93
- 'library.deleteFileHint': 'Изтриване на файл',
94
- 'library.del': 'ИЗТР',
95
- 'toast.assetDeleted': '{name} изтрит',
96
- 'modal.export': 'Изнасяне',
97
- 'modal.exportTitle': 'HTML на имейл, базиран на таблици',
98
- 'export.copy': 'Копиране',
99
- 'export.copied': 'Копирано',
100
- 'action.download': 'Изтегляне',
101
- 'export.meta': '{kb} KB · таблици + вградени стилове · ширини, безопасни за Outlook',
102
- 'modal.rawHtmlTitle': 'Суров HTML, преглед на живо',
103
- 'code.statusEdited': 'Изглед на кода редактиран преглед на живо, все още не е приложен',
104
- 'code.statusSynced': 'Изглед на кода синхронизиран с платното',
105
- 'action.reload': 'Презареждане',
106
- 'action.reloadHint': 'Презареждане на изходния код от платното',
107
- 'action.applyToCanvas': 'Приложи върху платното',
108
- 'action.applyToCanvasHint': 'Анализиране на изходния код обратно в редактируеми редове',
109
- 'action.closeWithoutApplyingHint': 'Затваряне без прилагане',
110
- 'code.source': 'Изходен код',
111
- 'code.livePreview': 'Преглед на живо',
112
- 'code.liveHtmlPreviewTitle': 'Преглед на HTML на живо',
113
- 'code.applyNote':
114
- 'Прилагането анализира всеки ред на таблица от най-високо ниво в ред на платното, който все още можете да избирате, преподреждате и изтривате ръчно написаната маркировка преминава непроменена.',
115
- 'code.meta': '{kb} KB · {lines} реда',
116
- 'toast.sourceReloaded': 'Изходният код е презареден от платното',
117
- 'toast.sourceAppliedOne': 'Изходният код е приложен — 1 ред на платното',
118
- 'toast.sourceAppliedMany': 'Изходният код е приложен — {rows} реда на платното',
119
- 'toast.parseError': 'Този HTML не можа да бъде анализиран',
120
- 'modal.copyAssist': 'Помощник за текст',
121
- 'modal.draftCopyTitle': 'Напишете текст за тази кампания',
122
- 'ai.goal': 'Цел',
123
- 'ai.tone': 'Тон',
124
- 'ai.briefLabel': 'За какво е този имейл?',
125
- 'ai.briefPlaceholder': 'напр. Есенна колекция, 15% за абонати, безплатна доставка над 150 лв',
126
- 'ai.generate': 'Генериране на текст',
127
- 'ai.writing': 'Пишем…',
128
- 'ai.kindHeadline': 'Заглавие',
129
- 'ai.kindBody': 'Основен текст',
130
- 'ai.kindButton': 'Текст на бутона',
131
- 'ai.actionInsertHeading': 'Вмъкни като заглавие',
132
- 'ai.actionInsertText': 'Вмъкни като текстов блок',
133
- 'ai.actionInsertButton': 'Вмъкни като бутон',
134
- 'toast.headingAdded': 'Заглавието е добавено',
135
- 'toast.textBlockAdded': 'Текстовият блок е добавен',
136
- 'toast.buttonAdded': 'Бутонът е добавен',
137
- 'preview.kickerMobile': 'Прегледтелефон 375px',
138
- 'preview.kickerDark': 'Преглед тъмна пощенска кутия',
139
- 'preview.kickerDesktop': 'Преглед компютър {width}px',
140
- 'action.close': 'Затваряне',
141
- 'toast.duplicated': 'Дублирано',
142
- 'toast.fileUploadedOne': 'Качен е 1 файл',
143
- 'toast.fileUploadedMany': 'Качени са {count} файла',
144
- 'toast.imageReplaced': 'Изображението е заменено',
145
- 'toast.imageAdded': 'Изображението е добавено към платното',
146
- 'toast.htmlCopied': 'HTML е копиран в клипборда',
147
- 'toast.templateLoaded': '{name} е зареден',
148
- 'toast.snippetDefaultLabel': 'Откъс',
149
- 'toast.snippetInserted': '{name} е вмъкнат',
150
- 'toast.snippetCopied': '{name} е копиран — изберете текстов блок, за да го вмъкнете',
151
- };
152
-
1
+ /** Bulgarian (Български) — `bg`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
2
+ export const BG = {
3
+ 'action.undoHint': 'Отмяна — ⌘Z',
4
+ 'action.redoHint': 'Повторение — ⌘⇧Z',
5
+ 'action.chromeToDark': 'Тъмна',
6
+ 'action.chromeToLight': 'Светла',
7
+ 'action.chromeHint': 'Тема на редактора светла / тъмна',
8
+ 'action.chromeHintToDark': 'Тъмен режим',
9
+ 'action.chromeHintToLight': 'Светъл режим',
10
+ 'action.aiDraft': 'Чернова',
11
+ 'action.aiDraftHint': 'Създаване на съдържание с изкуствен интелект',
12
+ 'action.code': 'Код',
13
+ 'action.codeHint': 'Редактиране на суров HTML с преглед на живо',
14
+ 'action.preview': 'Преглед',
15
+ 'action.previewHint': 'Преглед на имейла',
16
+ 'action.export': 'Изнасяне',
17
+ 'action.exportHint': 'Изнасяне на имейла',
18
+ 'device.desktop': 'Компютър',
19
+ 'device.desktopHint': 'Ширина за компютър',
20
+ 'device.mobile': 'Телефон',
21
+ 'device.mobileHint': 'Ширина за телефон',
22
+ 'status.autosaveOn': 'автоматичното запазване е включено',
23
+ 'status.saved': 'запазено {time}',
24
+ 'status.saveFailed': 'не е запазено — хранилището е пълно',
25
+ 'canvas.meta': '{rows} реда · {blocks} блока · {width}px',
26
+ 'tab.design': 'Стил',
27
+ 'tab.designHint': 'Стилизиране на избраното',
28
+ 'tab.blocks': 'Блокове',
29
+ 'tab.blocksHint': 'Блокове съдържание и променливи',
30
+ 'tab.rows': 'Секции',
31
+ 'tab.rowsHint': 'Оформления на секции и модел на платното',
32
+ 'tab.files': 'Файлове',
33
+ 'tab.filesHint': 'Библиотека с ресурси',
34
+ 'tab.layers': 'Структура',
35
+ 'tab.layersHint': 'Структура на документа',
36
+ 'tab.settings': 'Настройки',
37
+ 'tab.settingsHint': 'Настройки на имейла',
38
+ 'tab.data': 'Промен.',
39
+ 'tab.dataHint': 'Променливи, предоставени от вашия код',
40
+ 'inspector.blockProperties': 'Свойства на блока',
41
+ 'inspector.sectionProperties': 'Свойства на секцията',
42
+ 'inspector.title': 'Инспектор',
43
+ 'inspector.sectionLabel': 'Секция',
44
+ 'inspector.nothingSelected': 'Нищо не е избрано',
45
+ 'action.duplicateHint': 'Дублиране — ⌘D',
46
+ 'action.deleteHint': 'Изтриване ',
47
+ 'inspector.emptyBody':
48
+ 'Изберете ред или блок на платното, за да го стилизирате тук. Плъзнете блокове от раздела <strong style="color: var(--ed-text); font-weight: 600;">Блокове</strong>; кликнете два пъти върху текст, за да го редактирате на място.',
49
+ 'inspector.shortcuts': 'Клавишни комбинации',
50
+ 'shortcut.undoRedo': '⌘Z / ⌘⇧Z отмяна, повторение',
51
+ 'shortcut.duplicate': '⌘Dдублиране на избора',
52
+ 'shortcut.delete': 'изтриване на избора',
53
+ 'shortcut.export': '⌘E изнасяне на HTML',
54
+ 'shortcut.escape': 'ESC — премахване на избора, затваряне',
55
+ 'blocks.dragHint': 'Плъзнете върху платното',
56
+ 'blocks.count': '{count} блока',
57
+ 'rows.sectionLayouts': 'Оформления на секции',
58
+ 'rows.customMarkup': 'Персонализирана маркировка',
59
+ 'rows.htmlRowHint': 'Плъзнете, за да вмъкнете, или кликнете, за да добавите ред на цялата ширина, който запълвате със суров HTML',
60
+ 'rows.rawHtmlSection': 'Секция със суров HTML',
61
+ 'rows.rawHtmlDesc': 'Секция на цялата ширина, ваша собствена маркировка, все още може да се плъзга',
62
+ 'rows.canvasModel': 'Модел на платното',
63
+ 'rows.modeRowBased': 'Базирано на редове',
64
+ 'rows.modeFreeStack': 'Свободно подреждане',
65
+ 'rows.hintRows':
66
+ 'Базирано на секции: първо пуснете оформление, после блокове в неговите колони всяка секция има собствен фон, рамка, flex или grid настройки.',
67
+ 'rows.hintStack': 'Свободно подреждане: без оформления — всеки пуснат блок става собствена секция на цялата ширина, подредена по ред.',
68
+ 'files.libraryCount': 'Библиотека {count} файла',
69
+ 'files.openManager': 'Отваряне на файловия мениджър',
70
+ 'files.dragToCanvas': 'Плъзнете произволен файл директно върху платното, за да го поставите като блок с изображение.',
71
+ 'layers.structure': 'Структура',
72
+ 'layers.sectionSingle': 'Секция',
73
+ 'layers.sectionMulti': 'Секция · {count} колони',
74
+ 'layers.column': 'Колона {index}',
75
+ 'layers.blockCount': '{count} бл.',
76
+ 'vars.title': 'Променливи',
77
+ 'vars.fromCode': '{count} от вашия код',
78
+ 'vars.declaredNote': 'Декларирани от вашето приложение платното винаги показва токена, никога стойност.',
79
+ 'vars.filterPlaceholder': 'Филтриране на променливи…',
80
+ 'vars.insertHint': 'Кликнете, за да вмъкнете в избрания текст, заглавие или бутон',
81
+ 'vars.insert': 'вмъкване',
82
+ 'vars.noMatch': 'Няма променлива, отговаряща на този филтър.',
83
+ 'vars.noneDeclared': 'Вашето приложение все още не е декларирало променливи.',
84
+ 'vars.rteHint': 'При редактиране на текст можете да изберете променлива и директно от падащото меню на вградената лента с инструменти.',
85
+ 'modal.fileManager': 'Файлов мениджър',
86
+ 'modal.assetsTitle': 'Ресурси',
87
+ 'modal.replaceImage': 'Замяна на изображение',
88
+ 'library.searchPlaceholder': 'Търсене на файлове…',
89
+ 'action.upload': 'Качване',
90
+ 'library.clickToPlace': 'Кликнете върху файл, за да го поставите · или плъзнете файл върху платното',
91
+ 'library.clickToReplace': 'Кликнете върху файл, за да замените избраното изображение',
92
+ 'library.storageLabel': '{count} файла · {size}',
93
+ 'library.folders': 'Папки',
94
+ 'library.dropHint': 'Пуснете файлове с изображения тук за качване — или използвайте бутона Качване.',
95
+ 'library.deleteFileHint': 'Изтриване на файл',
96
+ 'library.del': 'ИЗТР',
97
+ 'toast.assetDeleted': '{name} изтрит',
98
+ 'library.allFiles': 'Всички файлове',
99
+ 'library.loadMore': 'Зареждане на още',
100
+ 'library.empty': 'Тук още няма файлове.',
101
+ 'storage.loading': 'Файловете се зареждат…',
102
+ 'storage.uploading': 'Качване на {count}…',
103
+ 'storage.errLoadFailed': 'Библиотеката с файлове не можа да се зареди {reason}',
104
+ 'storage.errNoLimits': 'Качването е изключено: това приложение не е задало ограничения за качване.',
105
+ 'storage.errNoAccept': 'Качването е изключено: не са разрешени файлови формати.',
106
+ 'storage.errNoMaxBytes': 'Качването е изключено: не е зададен максимален размер на файл.',
107
+ 'storage.errTooLarge': '{name} е {size} — ограничението е {max}.',
108
+ 'storage.errFormat': '{name} е файл от тип {type}, който не е разрешен тук.',
109
+ 'storage.errSvg': '{name} е SVG, който това приложение не приема.',
110
+ 'storage.errDimensions': '{name} е {w}×{ht}px — ограничението е {maxW}×{maxH}px.',
111
+ 'storage.errTooMany': 'Наведнъж могат да се качат само {max} файла.',
112
+ 'storage.errUnreadable': '{name} не е четимо изображение.',
113
+ 'storage.errUploadFailed': '{name} не можа да бъде качен — {reason}',
114
+ 'storage.errDeleteFailed': '{name} не можа да бъде изтрит{reason}',
115
+ 'modal.export': 'Изнасяне',
116
+ 'modal.exportTitle': 'HTML на имейл, базиран на таблици',
117
+ 'export.copy': 'Копиране',
118
+ 'export.copied': 'Копирано',
119
+ 'action.download': 'Изтегляне',
120
+ 'export.meta': '{kb} KB · таблици + вградени стилове · ширини, безопасни за Outlook',
121
+ 'modal.rawHtmlTitle': 'Суров HTML, преглед на живо',
122
+ 'code.statusEdited': 'Изглед на кода — редактиран — преглед на живо, все още не е приложен',
123
+ 'code.statusSynced': 'Изглед на кода — синхронизиран с платното',
124
+ 'action.reload': 'Презареждане',
125
+ 'action.reloadHint': 'Презареждане на изходния код от платното',
126
+ 'action.applyToCanvas': 'Приложи върху платното',
127
+ 'action.applyToCanvasHint': 'Анализиране на изходния код обратно в редактируеми редове',
128
+ 'action.closeWithoutApplyingHint': 'Затваряне без прилагане',
129
+ 'code.source': 'Изходен код',
130
+ 'code.livePreview': 'Преглед на живо',
131
+ 'code.liveHtmlPreviewTitle': 'Преглед на HTML на живо',
132
+ 'code.applyNote':
133
+ 'Прилагането анализира всеки ред на таблица от най-високо ниво в ред на платното, който все още можете да избирате, преподреждате и изтривате — ръчно написаната маркировка преминава непроменена.',
134
+ 'code.meta': '{kb} KB · {lines} реда',
135
+ 'toast.sourceReloaded': 'Изходният код е презареден от платното',
136
+ 'toast.sourceAppliedOne': 'Изходният код е приложен — 1 ред на платното',
137
+ 'toast.sourceAppliedMany': 'Изходният код е приложен {rows} реда на платното',
138
+ 'toast.parseError': 'Този HTML не можа да бъде анализиран',
139
+ 'modal.aiDraft': 'Асистент за писане с ИИ',
140
+ 'modal.aiDraftTitle': 'Напишете имейла си с изкуствен интелект',
141
+ 'ai.disclosure': 'Изкуственият интелект създава предложения по вашето задание. Прегледайте и редактирайте резултата преди изпращане.',
142
+ 'ai.goal': 'Цел',
143
+ 'ai.tone': 'Тон',
144
+ 'ai.briefLabel': 'За какво е този имейл?',
145
+ 'ai.briefPlaceholder': 'напр. Есенна колекция, 15% за абонати, безплатна доставка над 150 лв',
146
+ 'ai.generate': 'Генериране на текст',
147
+ 'ai.writing': 'Пишем…',
148
+ 'ai.kindHeadline': 'Заглавие',
149
+ 'ai.kindBody': 'Основен текст',
150
+ 'ai.kindButton': 'Текст на бутона',
151
+ 'ai.actionInsertHeading': 'Вмъкни като заглавие',
152
+ 'ai.actionInsertText': 'Вмъкни като текстов блок',
153
+ 'ai.actionInsertButton': 'Вмъкни като бутон',
154
+ 'toast.headingAdded': 'Заглавието е добавено',
155
+ 'toast.textBlockAdded': 'Текстовият блок е добавен',
156
+ 'toast.buttonAdded': 'Бутонът е добавен',
157
+ 'preview.kickerMobile': 'Преглед — телефон 375px',
158
+ 'preview.kickerDesktop': 'Преглед — компютър {width}px',
159
+ 'action.close': 'Затваряне',
160
+ 'toast.duplicated': 'Дублирано',
161
+ 'toast.fileUploadedOne': 'Качен е 1 файл',
162
+ 'toast.fileUploadedMany': 'Качени са {count} файла',
163
+ 'toast.imageReplaced': 'Изображението е заменено',
164
+ 'toast.imageAdded': 'Изображението е добавено към платното',
165
+ 'toast.htmlCopied': 'HTML е копиран в клипборда',
166
+ 'toast.templateLoaded': '{name} е зареден',
167
+ 'toast.snippetDefaultLabel': 'Откъс',
168
+ 'toast.snippetInserted': '{name} е вмъкнат',
169
+ 'toast.snippetCopied': '{name} е копиран — изберете текстов блок, за да го вмъкнете',
170
+ 'rte.textStyle': 'Стил на текста',
171
+ 'rte.mergeTags': 'Полета за сливане',
172
+ 'rte.noMergeTags': 'Няма налични полета за сливане',
173
+ 'rte.textColor': 'Цвят на текста',
174
+ 'rte.highlightColor': 'Цвят на маркиране',
175
+ 'rte.removeHighlight': 'Премахване на маркирането',
176
+ 'rte.clearFormatting': 'Изчистване на форматирането',
177
+ 'action.downloadPng': 'Изтегляне на PNG',
178
+ 'action.screenshot': 'Екранна снимка',
179
+ 'action.screenshotHint': 'Прегледайте целия шаблон като изображение и го изтеглете',
180
+ 'toast.pngSaved': 'Екранната снимка е изтеглена',
181
+ 'toast.pngFailed': 'Екранната снимка се провали — външно изображение не можа да се зареди',
182
+ 'toast.pngCopied': 'Екранната снимка е копирана в клипборда',
183
+ 'toast.pngCopyFailed': 'Този браузър не прие изображение в клипборда',
184
+ 'story.kicker': 'Екранна снимка',
185
+ 'story.rendering': 'Екранната снимка се изготвя',
186
+ 'story.renderingHint': 'Всеки блок се рисува при 2× — при дълъг шаблон отнема момент.',
187
+ 'story.failed': 'Екранната снимка се провали',
188
+ 'story.failedHint': 'Изображение в шаблона не можа да се зареди за заснемане.',
189
+ 'story.retry': 'Опитайте отново',
190
+ 'story.play': 'Пускане',
191
+ 'story.pause': 'Пауза',
192
+ 'story.replay': 'Отначало',
193
+ 'story.copy': 'Копиране',
194
+ 'story.meta': '{w}×{h} · екран {i} от {n}',
195
+ 'footer.poweredBy': 'С технологията на SELISE Blocks © 2026',
196
+ };