@seliseblocks/mailcraft 0.1.1 → 0.2.1

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 (86) hide show
  1. package/DOCS.md +243 -16
  2. package/README.md +15 -6
  3. package/README.md.txt +135 -0
  4. package/dist/mailcraft-editor.bundle.js +87 -47
  5. package/dist/mailcraft-editor.bundle.js.map +3 -3
  6. package/examples/templates/activate-your-account.html +1 -1
  7. package/examples/templates/back-in-stock.html +1 -1
  8. package/examples/templates/cart-left-behind.html +1 -1
  9. package/examples/templates/community-giveaway.html +1 -1
  10. package/examples/templates/frontend-futures-invite.html +1 -1
  11. package/examples/templates/give-25-get-25.html +1 -1
  12. package/examples/templates/invoice-paid.html +1 -1
  13. package/examples/templates/meet-nova-launch.html +1 -1
  14. package/examples/templates/mega-weekend-sale.html +1 -1
  15. package/examples/templates/order-confirmed.html +80 -80
  16. package/examples/templates/rate-your-headphones.html +1 -1
  17. package/examples/templates/reset-your-password.html +1 -1
  18. package/examples/templates/thankyou-promo-code.html +1 -1
  19. package/examples/templates/the-sunday-brief.html +1 -1
  20. package/examples/templates/welcome-to-your-workspace.html +1 -1
  21. package/examples/templates/your-order-shipped.html +1 -1
  22. package/examples/templates/your-password-was-changed.html +1 -1
  23. package/examples/templates/your-signin-code.html +1 -1
  24. package/examples/vanilla.html +261 -47
  25. package/package.json +7 -2
  26. package/src/core/assets.js +10 -15
  27. package/src/core/binder.js +140 -118
  28. package/src/core/blocks.js +14 -1
  29. package/src/core/css-cascade.js +117 -117
  30. package/src/core/editor-core.js +1540 -1492
  31. package/src/core/export.js +158 -55
  32. package/src/core/i18n/ar.js +218 -177
  33. package/src/core/i18n/bg.js +195 -152
  34. package/src/core/i18n/bn.js +217 -176
  35. package/src/core/i18n/ca.js +195 -152
  36. package/src/core/i18n/cs.js +195 -152
  37. package/src/core/i18n/da.js +195 -152
  38. package/src/core/i18n/de-CH.js +195 -152
  39. package/src/core/i18n/de.js +195 -152
  40. package/src/core/i18n/dz.js +220 -179
  41. package/src/core/i18n/el.js +195 -152
  42. package/src/core/i18n/en.js +3 -11
  43. package/src/core/i18n/es.js +195 -152
  44. package/src/core/i18n/et.js +195 -152
  45. package/src/core/i18n/fi.js +195 -152
  46. package/src/core/i18n/fr.js +195 -152
  47. package/src/core/i18n/hr.js +195 -152
  48. package/src/core/i18n/hu.js +195 -152
  49. package/src/core/i18n/index.js +83 -83
  50. package/src/core/i18n/it.js +195 -152
  51. package/src/core/i18n/lt.js +195 -152
  52. package/src/core/i18n/lv.js +195 -152
  53. package/src/core/i18n/nb.js +195 -152
  54. package/src/core/i18n/nl.js +195 -152
  55. package/src/core/i18n/pl.js +195 -152
  56. package/src/core/i18n/pt.js +195 -152
  57. package/src/core/i18n/ro.js +195 -152
  58. package/src/core/i18n/ru.js +195 -152
  59. package/src/core/i18n/sk.js +195 -152
  60. package/src/core/i18n/sl.js +195 -152
  61. package/src/core/i18n/sv.js +195 -152
  62. package/src/core/i18n/tables.js +50 -50
  63. package/src/core/i18n/tr.js +195 -152
  64. package/src/core/i18n/uk.js +195 -152
  65. package/src/core/icons.js +237 -235
  66. package/src/core/ids.js +1 -1
  67. package/src/core/import-html.js +1047 -959
  68. package/src/core/layout-style.js +100 -100
  69. package/src/core/parse.js +10 -10
  70. package/src/core/placeholder.js +15 -15
  71. package/src/core/sanitize.js +141 -141
  72. package/src/core/storage-limits.js +189 -184
  73. package/src/core/storage.js +85 -85
  74. package/src/core/theme.js +15 -1
  75. package/src/core/variables.js +11 -11
  76. package/src/index.js +9 -9
  77. package/src/mailcraft-editor.js +64 -25
  78. package/src/render/block-body.js +49 -6
  79. package/src/render/canvas.js +74 -8
  80. package/src/render/fields.js +619 -588
  81. package/src/render/focus-preserve.js +158 -158
  82. package/src/render/rte.js +241 -212
  83. package/src/render/screenshot.js +138 -132
  84. package/src/render/story.js +415 -415
  85. package/src/render/style.js +44 -8
  86. package/types/index.d.ts +422 -0
@@ -1,152 +1,195 @@
1
- /** Estonian (Eesti) — `et`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
2
- export const ET = {
3
- 'action.undoHint': 'Võta tagasi — ⌘Z',
4
- 'action.redoHint': 'Tee uuesti — ⌘⇧Z',
5
- 'action.chromeToDark': 'Tume',
6
- 'action.chromeToLight': 'Hele',
7
- 'action.chromeHint': 'Redaktori teema hele / tume',
8
- 'action.aiCopy': 'Tekst',
9
- 'action.aiCopyHint': 'Koosta tekst tehisintellektiga',
10
- 'action.code': 'Kood',
11
- 'action.codeHint': 'Muuda töötlemata HTML-i otseeelvaatega',
12
- 'action.preview': 'Eelvaade',
13
- 'action.export': 'Ekspordi',
14
- 'device.desktop': 'Arvuti',
15
- 'device.desktopHint': 'Arvuti laius',
16
- 'device.mobile': 'Mobiil',
17
- 'device.mobileHint': 'Mobiili laius',
18
- 'device.dark': 'Tume',
19
- 'device.darkHint': 'Postkasti tume režiim',
20
- 'status.autosaveOn': 'automaatne salvestamine sees',
21
- 'status.saved': 'salvestatud {time}',
22
- 'status.saveFailed': 'ei salvestatud — talletusruum täis',
23
- 'canvas.meta': '{rows} rida · {blocks} plokki · {width}px',
24
- 'tab.design': 'Stiil',
25
- 'tab.designHint': 'Vali stiil valikule',
26
- 'tab.blocks': 'Plokid',
27
- 'tab.blocksHint': 'Sisuplokid ja muutujad',
28
- 'tab.rows': 'Sektsioonid',
29
- 'tab.rowsHint': 'Sektsioonide paigutused ja lõuendi mudel',
30
- 'tab.files': 'Failid',
31
- 'tab.filesHint': 'Ressursside teek',
32
- 'tab.layers': 'Struktuur',
33
- 'tab.layersHint': 'Dokumendi struktuur',
34
- 'tab.theme': 'Teema',
35
- 'tab.themeHint': 'Globaalsed stiilid',
36
- 'tab.data': 'Muut.',
37
- 'tab.dataHint': 'Sinu koodi pakutavad muutujad',
38
- 'inspector.blockProperties': 'Ploki omadused',
39
- 'inspector.sectionProperties': 'Sektsiooni omadused',
40
- 'inspector.title': 'Inspektor',
41
- 'inspector.sectionLabel': 'Sektsioon',
42
- 'inspector.nothingSelected': 'Midagi pole valitud',
43
- 'action.duplicateHint': 'Paljunda — ⌘D',
44
- 'action.deleteHint': 'Kustuta ',
45
- 'inspector.emptyBody':
46
- 'Vali lõuendil rida või plokk, et seda siin kujundada. Lohista plokke vahekaardilt <strong style="color: var(--ed-text); font-weight: 600;">Plokid</strong>; topeltklõpsa mistahes tekstil, et seda otse muuta.',
47
- 'inspector.shortcuts': 'Kiirklahvid',
48
- 'shortcut.undoRedo': '⌘Z / ⌘⇧Z võta tagasi, tee uuesti',
49
- 'shortcut.duplicate': '⌘D — paljunda valik',
50
- 'shortcut.delete': 'kustuta valik',
51
- 'shortcut.export': '⌘Eekspordi HTML',
52
- 'shortcut.escape': 'ESCtühista valik, sulge',
53
- 'blocks.dragHint': 'Lohista lõuendile',
54
- 'blocks.count': '{count} plokki',
55
- 'rows.sectionLayouts': 'Sektsioonide paigutused',
56
- 'rows.customMarkup': 'Kohandatud kood',
57
- 'rows.htmlRowHint': 'Lohista lisamiseks või klõpsa lisamiseks — täislaiuses rida, mille täidad töötlemata HTML-iga',
58
- 'rows.rawHtmlSection': 'Töötlemata HTML-i sektsioon',
59
- 'rows.rawHtmlDesc': 'Täislaiuses sektsioon, sinu enda kood, endiselt lohistatav',
60
- 'rows.canvasModel': 'Lõuendi mudel',
61
- 'rows.modeRowBased': 'Ridadel põhinev',
62
- 'rows.modeFreeStack': 'Vaba virn',
63
- 'rows.hintRows':
64
- 'Sektsioonidel põhinev: aseta esmalt paigutus, seejärel plokid selle veergudesse — igal sektsioonil on oma taust, äär, flex- või ruudustiku seaded.',
65
- 'rows.hintStack': 'Vaba virn: ilma paigutusteta — iga asetatud plokk saab oma täislaiuses sektsiooniks, virnastatuna järjekorras.',
66
- 'files.libraryCount': 'Teek{count} faili',
67
- 'files.openManager': 'Ava failihaldur',
68
- 'files.dragToCanvas': 'Lohista mistahes fail otse lõuendile, et paigutada see pildiplokina.',
69
- 'layers.structure': 'Struktuur',
70
- 'layers.sectionSingle': 'Sektsioon',
71
- 'layers.sectionMulti': 'Sektsioon · {count} veergu',
72
- 'layers.blockCount': '{count} plokki',
73
- 'theme.globalStyles': 'Globaalsed stiilid',
74
- 'vars.title': 'Muutujad',
75
- 'vars.fromCode': '{count} sinu koodist',
76
- 'vars.declaredNote': 'Sinu rakenduse deklareeritud — lõuend näitab alati tokenit, mitte kunagi väärtust.',
77
- 'vars.filterPlaceholder': 'Filtreeri muutujaid…',
78
- 'vars.insertHint': 'Klõpsa, et lisada valitud teksti, pealkirja või nupu sisse',
79
- 'vars.insert': 'lisa',
80
- 'vars.noMatch': 'Ükski muutuja ei vasta sellele filtrile.',
81
- 'vars.noneDeclared': 'Sinu rakendus pole veel muutujaid deklareerinud.',
82
- 'vars.rteHint': 'Teksti muutmisel saad valida muutuja ka otse sisseehitatud tööriistariba rippmenüüst.',
83
- 'modal.fileManager': 'Failihaldur',
84
- 'modal.assetsTitle': 'Ressursid',
85
- 'modal.replaceImage': 'Asenda pilt',
86
- 'library.searchPlaceholder': 'Otsi faile…',
87
- 'action.upload': 'Laadi üles',
88
- 'library.clickToPlace': 'Klõpsa failil, et see paigutada · või lohista fail lõuendile',
89
- 'library.clickToReplace': 'Klõpsa failil, et asendada valitud pilt',
90
- 'library.storageLabel': '{count} faili · {size}',
91
- 'library.folders': 'Kaustad',
92
- 'library.dropHint': 'Lohista pildifailid siia üleslaadimiseks — või kasuta nuppu Laadi üles.',
93
- 'library.deleteFileHint': 'Kustuta fail',
94
- 'library.del': 'KUSTUTA',
95
- 'toast.assetDeleted': '{name} kustutatud',
96
- 'modal.export': 'Ekspordi',
97
- 'modal.exportTitle': 'Tabelipõhine e-kirja HTML',
98
- 'export.copy': 'Kopeeri',
99
- 'export.copied': 'Kopeeritud',
100
- 'action.download': 'Laadi alla',
101
- 'export.meta': '{kb} KB · tabelid + sisestiilid · Outlooki jaoks turvalised laiused',
102
- 'modal.rawHtmlTitle': 'Töötlemata HTML, otseeelvaade',
103
- 'code.statusEdited': 'Koodivaade muudetudeelvaade otse, veel rakendamata',
104
- 'code.statusSynced': 'Koodivaade lõuendiga sünkroonis',
105
- 'action.reload': 'Laadi uuesti',
106
- 'action.reloadHint': 'Laadi allikas lõuendilt uuesti',
107
- 'action.applyToCanvas': 'Rakenda lõuendile',
108
- 'action.applyToCanvasHint': 'Analüüsi allikas tagasi muudetavateks ridadeks',
109
- 'action.closeWithoutApplyingHint': 'Sulge ilma rakendamata',
110
- 'code.source': 'Allikas',
111
- 'code.livePreview': 'Otseeelvaade',
112
- 'code.liveHtmlPreviewTitle': 'HTML-i otseeelvaade',
113
- 'code.applyNote':
114
- 'Rakendamine analüüsib iga ülataseme tabelirea lõuendireaks, mida saad endiselt valida, ümber korraldada ja kustutada — käsitsi kirjutatud kood jääb protsessis muutumatuks.',
115
- 'code.meta': '{kb} KB · {lines} rida',
116
- 'toast.sourceReloaded': 'Allikas laaditi lõuendilt uuesti',
117
- 'toast.sourceAppliedOne': 'Allikas rakendatud — 1 rida lõuendil',
118
- 'toast.sourceAppliedMany': 'Allikas rakendatud — {rows} rida lõuendil',
119
- 'toast.parseError': 'Seda HTML-i ei õnnestunud analüüsida',
120
- 'modal.copyAssist': 'Tekstiabiline',
121
- 'modal.draftCopyTitle': 'Koosta tekst sellele kampaaniale',
122
- 'ai.goal': 'Eesmärk',
123
- 'ai.tone': 'Toon',
124
- 'ai.briefLabel': 'Millest see e-kiri räägib?',
125
- 'ai.briefPlaceholder': 'nt sügiskollektsioon, 15% tellijatele, tasuta tarne üle 150 €',
126
- 'ai.generate': 'Genereeri tekst',
127
- 'ai.writing': 'Kirjutamine…',
128
- 'ai.kindHeadline': 'Pealkiri',
129
- 'ai.kindBody': 'Põhitekst',
130
- 'ai.kindButton': 'Nupu tekst',
131
- 'ai.actionInsertHeading': 'Lisa pealkirjana',
132
- 'ai.actionInsertText': 'Lisa tekstiplokina',
133
- 'ai.actionInsertButton': 'Lisa nupuna',
134
- 'toast.headingAdded': 'Pealkiri lisatud',
135
- 'toast.textBlockAdded': 'Tekstiplokk lisatud',
136
- 'toast.buttonAdded': 'Nupp lisatud',
137
- 'preview.kickerMobile': 'Eelvaade mobiil 375px',
138
- 'preview.kickerDark': 'Eelvaade — tume postkast',
139
- 'preview.kickerDesktop': 'Eelvaade arvuti {width}px',
140
- 'action.close': 'Sulge',
141
- 'toast.duplicated': 'Paljundatud',
142
- 'toast.fileUploadedOne': '1 fail üles laaditud',
143
- 'toast.fileUploadedMany': '{count} faili üles laaditud',
144
- 'toast.imageReplaced': 'Pilt asendatud',
145
- 'toast.imageAdded': 'Pilt lisatud lõuendile',
146
- 'toast.htmlCopied': 'HTML kopeeritud lõikelauale',
147
- 'toast.templateLoaded': '{name} laaditud',
148
- 'toast.snippetDefaultLabel': 'Katke',
149
- 'toast.snippetInserted': '{name} lisatud',
150
- 'toast.snippetCopied': '{name} kopeeritud — vali tekstiplokk selle lisamiseks',
151
- };
152
-
1
+ /** Estonian (Eesti) — `et`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
2
+ export const ET = {
3
+ 'action.undoHint': 'Võta tagasi — ⌘Z',
4
+ 'action.redoHint': 'Tee uuesti — ⌘⇧Z',
5
+ 'action.chromeToDark': 'Tume',
6
+ 'action.chromeToLight': 'Hele',
7
+ 'action.chromeHint': 'Redaktori teema hele / tume',
8
+ 'action.chromeHintToDark': 'Tume režiim',
9
+ 'action.chromeHintToLight': 'Hele režiim',
10
+ 'action.aiDraft': 'Mustand',
11
+ 'action.aiDraftHint': 'Koosta e-kirja sisu tehisintellektiga',
12
+ 'action.code': 'Kood',
13
+ 'action.codeHint': 'Muuda töötlemata HTML-i otseeelvaatega',
14
+ 'action.preview': 'Eelvaade',
15
+ 'action.previewHint': 'Vaata e-kirja eelvaadet',
16
+ 'action.export': 'Ekspordi',
17
+ 'action.exportHint': 'Ekspordi oma e-kiri',
18
+ 'device.desktop': 'Arvuti',
19
+ 'device.desktopHint': 'Arvuti laius',
20
+ 'device.mobile': 'Mobiil',
21
+ 'device.mobileHint': 'Mobiili laius',
22
+ 'status.autosaveOn': 'automaatne salvestamine sees',
23
+ 'status.saved': 'salvestatud {time}',
24
+ 'status.saveFailed': 'ei salvestatud — talletusruum täis',
25
+ 'canvas.meta': '{rows} rida · {blocks} plokki · {width}px',
26
+ 'tab.design': 'Stiil',
27
+ 'tab.designHint': 'Vali stiil valikule',
28
+ 'tab.blocks': 'Plokid',
29
+ 'tab.blocksHint': 'Sisuplokid ja muutujad',
30
+ 'tab.rows': 'Sektsioonid',
31
+ 'tab.rowsHint': 'Sektsioonide paigutused ja lõuendi mudel',
32
+ 'tab.files': 'Failid',
33
+ 'tab.filesHint': 'Ressursside teek',
34
+ 'tab.layers': 'Struktuur',
35
+ 'tab.layersHint': 'Dokumendi struktuur',
36
+ 'tab.settings': 'Seaded',
37
+ 'tab.settingsHint': 'E-kirja seaded',
38
+ 'tab.data': 'Muut.',
39
+ 'tab.dataHint': 'Sinu koodi pakutavad muutujad',
40
+ 'inspector.blockProperties': 'Ploki omadused',
41
+ 'inspector.sectionProperties': 'Sektsiooni omadused',
42
+ 'inspector.title': 'Inspektor',
43
+ 'inspector.sectionLabel': 'Sektsioon',
44
+ 'inspector.nothingSelected': 'Midagi pole valitud',
45
+ 'action.duplicateHint': 'Paljunda — ⌘D',
46
+ 'action.deleteHint': 'Kustuta ',
47
+ 'inspector.emptyBody':
48
+ 'Vali lõuendil rida või plokk, et seda siin kujundada. Lohista plokke vahekaardilt <strong style="color: var(--ed-text); font-weight: 600;">Plokid</strong>; topeltklõpsa mistahes tekstil, et seda otse muuta.',
49
+ 'inspector.shortcuts': 'Kiirklahvid',
50
+ 'shortcut.undoRedo': '⌘Z / ⌘⇧Z võta tagasi, tee uuesti',
51
+ 'shortcut.duplicate': '⌘Dpaljunda valik',
52
+ 'shortcut.delete': 'kustuta valik',
53
+ 'shortcut.export': '⌘E — ekspordi HTML',
54
+ 'shortcut.escape': 'ESC — tühista valik, sulge',
55
+ 'blocks.dragHint': 'Lohista lõuendile',
56
+ 'blocks.count': '{count} plokki',
57
+ 'rows.sectionLayouts': 'Sektsioonide paigutused',
58
+ 'rows.customMarkup': 'Kohandatud kood',
59
+ 'rows.htmlRowHint': 'Lohista lisamiseks või klõpsa lisamiseks — täislaiuses rida, mille täidad töötlemata HTML-iga',
60
+ 'rows.rawHtmlSection': 'Töötlemata HTML-i sektsioon',
61
+ 'rows.rawHtmlDesc': 'Täislaiuses sektsioon, sinu enda kood, endiselt lohistatav',
62
+ 'rows.canvasModel': 'Lõuendi mudel',
63
+ 'rows.modeRowBased': 'Ridadel põhinev',
64
+ 'rows.modeFreeStack': 'Vaba virn',
65
+ 'rows.hintRows':
66
+ 'Sektsioonidel põhinev: aseta esmalt paigutus, seejärel plokid selle veergudesse igal sektsioonil on oma taust, äär, flex- või ruudustiku seaded.',
67
+ 'rows.hintStack': 'Vaba virn: ilma paigutusteta — iga asetatud plokk saab oma täislaiuses sektsiooniks, virnastatuna järjekorras.',
68
+ 'files.libraryCount': 'Teek {count} faili',
69
+ 'files.openManager': 'Ava failihaldur',
70
+ 'files.dragToCanvas': 'Lohista mistahes fail otse lõuendile, et paigutada see pildiplokina.',
71
+ 'layers.structure': 'Struktuur',
72
+ 'layers.sectionSingle': 'Sektsioon',
73
+ 'layers.sectionMulti': 'Sektsioon · {count} veergu',
74
+ 'layers.column': 'Veerg {index}',
75
+ 'layers.blockCount': '{count} plokki',
76
+ 'vars.title': 'Muutujad',
77
+ 'vars.fromCode': '{count} sinu koodist',
78
+ 'vars.declaredNote': 'Sinu rakenduse deklareeritud lõuend näitab alati tokenit, mitte kunagi väärtust.',
79
+ 'vars.filterPlaceholder': 'Filtreeri muutujaid…',
80
+ 'vars.insertHint': 'Klõpsa, et lisada valitud teksti, pealkirja või nupu sisse',
81
+ 'vars.insert': 'lisa',
82
+ 'vars.noMatch': 'Ükski muutuja ei vasta sellele filtrile.',
83
+ 'vars.noneDeclared': 'Sinu rakendus pole veel muutujaid deklareerinud.',
84
+ 'vars.rteHint': 'Teksti muutmisel saad valida muutuja ka otse sisseehitatud tööriistariba rippmenüüst.',
85
+ 'modal.fileManager': 'Failihaldur',
86
+ 'modal.assetsTitle': 'Ressursid',
87
+ 'modal.replaceImage': 'Asenda pilt',
88
+ 'library.searchPlaceholder': 'Otsi faile…',
89
+ 'action.upload': 'Laadi üles',
90
+ 'library.clickToPlace': 'Klõpsa failil, et see paigutada · või lohista fail lõuendile',
91
+ 'library.clickToReplace': 'Klõpsa failil, et asendada valitud pilt',
92
+ 'library.storageLabel': '{count} faili · {size}',
93
+ 'library.folders': 'Kaustad',
94
+ 'library.dropHint': 'Lohista pildifailid siia üleslaadimiseks — või kasuta nuppu Laadi üles.',
95
+ 'library.deleteFileHint': 'Kustuta fail',
96
+ 'library.del': 'KUSTUTA',
97
+ 'toast.assetDeleted': '{name} kustutatud',
98
+ 'library.allFiles': 'Kõik failid',
99
+ 'library.loadMore': 'Lae veel',
100
+ 'library.empty': 'Siin pole veel ühtegi faili.',
101
+ 'storage.loading': 'Failide laadimine…',
102
+ 'storage.uploading': 'Laadin üles {count}…',
103
+ 'storage.errLoadFailed': 'Failikogu laadimine ebaõnnestus{reason}',
104
+ 'storage.errNoLimits': 'Üleslaadimine on välja lülitatud: see rakendus pole määranud üleslaadimispiiranguid.',
105
+ 'storage.errNoMaxBytes': 'Üleslaadimine on välja lülitatud: faili suurimat lubatud mahtu pole määratud.',
106
+ 'storage.errTooLarge': '{name} on {size} — piir on {max}.',
107
+ 'storage.errFormat': '{name} on {type}-fail, mis pole siin lubatud.',
108
+ 'storage.errSvg': '{name} on SVG, mida see rakendus vastu ei võta.',
109
+ 'storage.errDimensions': '{name} on {w}×{ht}px — piir on {maxW}×{maxH}px.',
110
+ 'storage.errTooMany': 'Korraga saab üles laadida ainult {max} faili.',
111
+ 'storage.errUnreadable': '{name} pole loetav pilt.',
112
+ 'storage.errUploadFailed': '{name} üleslaadimine ebaõnnestus — {reason}',
113
+ 'storage.errDeleteFailed': '{name} kustutamine ebaõnnestus — {reason}',
114
+ 'modal.export': 'Ekspordi',
115
+ 'modal.exportTitle': 'Tabelipõhine e-kirja HTML',
116
+ 'export.copy': 'Kopeeri',
117
+ 'export.copied': 'Kopeeritud',
118
+ 'action.download': 'Laadi alla',
119
+ 'export.meta': '{kb} KB · tabelid + sisestiilid · Outlooki jaoks turvalised laiused',
120
+ 'modal.rawHtmlTitle': 'Töötlemata HTML, otseeelvaade',
121
+ 'code.statusEdited': 'Koodivaade muudetud — eelvaade otse, veel rakendamata',
122
+ 'code.statusSynced': 'Koodivaade — lõuendiga sünkroonis',
123
+ 'action.reload': 'Laadi uuesti',
124
+ 'action.reloadHint': 'Laadi allikas lõuendilt uuesti',
125
+ 'action.applyToCanvas': 'Rakenda lõuendile',
126
+ 'action.applyToCanvasHint': 'Analüüsi allikas tagasi muudetavateks ridadeks',
127
+ 'action.closeWithoutApplyingHint': 'Sulge ilma rakendamata',
128
+ 'code.source': 'Allikas',
129
+ 'code.livePreview': 'Otseeelvaade',
130
+ 'code.liveHtmlPreviewTitle': 'HTML-i otseeelvaade',
131
+ 'code.applyNote':
132
+ 'Rakendamine analüüsib iga ülataseme tabelirea lõuendireaks, mida saad endiselt valida, ümber korraldada ja kustutada — käsitsi kirjutatud kood jääb protsessis muutumatuks.',
133
+ 'code.meta': '{kb} KB · {lines} rida',
134
+ 'toast.sourceReloaded': 'Allikas laaditi lõuendilt uuesti',
135
+ 'toast.sourceAppliedOne': 'Allikas rakendatud — 1 rida lõuendil',
136
+ 'toast.sourceAppliedMany': 'Allikas rakendatud — {rows} rida lõuendil',
137
+ 'toast.parseError': 'Seda HTML-i ei õnnestunud analüüsida',
138
+ 'modal.aiDraft': 'Tehisintellekti kirjutamisabi',
139
+ 'modal.aiDraftTitle': 'Koosta oma e-kiri tehisintellektiga',
140
+ 'ai.disclosure': 'Tehisintellekt loob ettepanekud sinu lühikirjelduse põhjal. Vaata tulemus üle ja toimeta seda enne saatmist.',
141
+ 'ai.goal': 'Eesmärk',
142
+ 'ai.tone': 'Toon',
143
+ 'ai.briefLabel': 'Millest see e-kiri räägib?',
144
+ 'ai.briefPlaceholder': 'nt sügiskollektsioon, 15% tellijatele, tasuta tarne üle 150 €',
145
+ 'ai.generate': 'Genereeri tekst',
146
+ 'ai.writing': 'Kirjutamine…',
147
+ 'ai.kindHeadline': 'Pealkiri',
148
+ 'ai.kindBody': 'Põhitekst',
149
+ 'ai.kindButton': 'Nupu tekst',
150
+ 'ai.actionInsertHeading': 'Lisa pealkirjana',
151
+ 'ai.actionInsertText': 'Lisa tekstiplokina',
152
+ 'ai.actionInsertButton': 'Lisa nupuna',
153
+ 'toast.headingAdded': 'Pealkiri lisatud',
154
+ 'toast.textBlockAdded': 'Tekstiplokk lisatud',
155
+ 'toast.buttonAdded': 'Nupp lisatud',
156
+ 'preview.kickerMobile': 'Eelvaade — mobiil 375px',
157
+ 'preview.kickerDesktop': 'Eelvaade — arvuti {width}px',
158
+ 'action.close': 'Sulge',
159
+ 'toast.duplicated': 'Paljundatud',
160
+ 'toast.fileUploadedOne': '1 fail üles laaditud',
161
+ 'toast.fileUploadedMany': '{count} faili üles laaditud',
162
+ 'toast.imageReplaced': 'Pilt asendatud',
163
+ 'toast.imageAdded': 'Pilt lisatud lõuendile',
164
+ 'toast.htmlCopied': 'HTML kopeeritud lõikelauale',
165
+ 'toast.templateLoaded': '{name} laaditud',
166
+ 'toast.snippetDefaultLabel': 'Katke',
167
+ 'toast.snippetInserted': '{name} lisatud',
168
+ 'toast.snippetCopied': '{name} kopeeritud — vali tekstiplokk selle lisamiseks',
169
+ 'rte.textStyle': 'Teksti stiil',
170
+ 'rte.mergeTags': 'Liitmisväljad',
171
+ 'rte.noMergeTags': 'Liitmisvälju pole saadaval',
172
+ 'rte.textColor': 'Teksti värv',
173
+ 'rte.highlightColor': 'Esiletõstu värv',
174
+ 'rte.removeHighlight': 'Eemalda esiletõst',
175
+ 'rte.clearFormatting': 'Eemalda vorming',
176
+ 'action.downloadPng': 'Laadi PNG alla',
177
+ 'action.screenshot': 'Kuvatõmmis',
178
+ 'action.screenshotHint': 'Vaata kogu malli pildina ja laadi see alla',
179
+ 'toast.pngSaved': 'Kuvatõmmis laaditi alla',
180
+ 'toast.pngFailed': 'Kuvatõmmis ebaõnnestus — välist pilti ei õnnestunud laadida',
181
+ 'toast.pngCopied': 'Kuvatõmmis kopeeriti lõikelauale',
182
+ 'toast.pngCopyFailed': 'See brauser ei võtnud pilti lõikelauale vastu',
183
+ 'story.kicker': 'Kuvatõmmis',
184
+ 'story.rendering': 'Kuvatõmmise koostamine',
185
+ 'story.renderingHint': 'Iga plokk joonistatakse 2× suuruses — pika malli puhul võtab see hetke.',
186
+ 'story.failed': 'Kuvatõmmis ebaõnnestus',
187
+ 'story.failedHint': 'Malli üht pilti ei õnnestunud jäädvustamiseks laadida.',
188
+ 'story.retry': 'Proovi uuesti',
189
+ 'story.play': 'Esita',
190
+ 'story.pause': 'Peata',
191
+ 'story.replay': 'Esita uuesti',
192
+ 'story.copy': 'Kopeeri',
193
+ 'story.meta': '{w}×{h} · vaade {i}/{n}',
194
+ 'footer.poweredBy': 'Töötab SELISE Blocks © 2026 põhjal',
195
+ };