@seliseblocks/mailcraft 0.1.0 → 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 +240 -12
  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 +242 -23
  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
- /** 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': 'Eelvaademobiil 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.errNoAccept': 'Üleslaadimine on välja lülitatud: ühtegi failivormingut pole lubatud.',
106
+ 'storage.errNoMaxBytes': 'Üleslaadimine on välja lülitatud: faili suurimat lubatud mahtu pole määratud.',
107
+ 'storage.errTooLarge': '{name} on {size} — piir on {max}.',
108
+ 'storage.errFormat': '{name} on {type}-fail, mis pole siin lubatud.',
109
+ 'storage.errSvg': '{name} on SVG, mida see rakendus vastu ei võta.',
110
+ 'storage.errDimensions': '{name} on {w}×{ht}px — piir on {maxW}×{maxH}px.',
111
+ 'storage.errTooMany': 'Korraga saab üles laadida ainult {max} faili.',
112
+ 'storage.errUnreadable': '{name} pole loetav pilt.',
113
+ 'storage.errUploadFailed': '{name} üleslaadimine ebaõnnestus — {reason}',
114
+ 'storage.errDeleteFailed': '{name} kustutamine ebaõnnestus{reason}',
115
+ 'modal.export': 'Ekspordi',
116
+ 'modal.exportTitle': 'Tabelipõhine e-kirja HTML',
117
+ 'export.copy': 'Kopeeri',
118
+ 'export.copied': 'Kopeeritud',
119
+ 'action.download': 'Laadi alla',
120
+ 'export.meta': '{kb} KB · tabelid + sisestiilid · Outlooki jaoks turvalised laiused',
121
+ 'modal.rawHtmlTitle': 'Töötlemata HTML, otseeelvaade',
122
+ 'code.statusEdited': 'Koodivaade — muudetud — eelvaade otse, veel rakendamata',
123
+ 'code.statusSynced': 'Koodivaade — lõuendiga sünkroonis',
124
+ 'action.reload': 'Laadi uuesti',
125
+ 'action.reloadHint': 'Laadi allikas lõuendilt uuesti',
126
+ 'action.applyToCanvas': 'Rakenda lõuendile',
127
+ 'action.applyToCanvasHint': 'Analüüsi allikas tagasi muudetavateks ridadeks',
128
+ 'action.closeWithoutApplyingHint': 'Sulge ilma rakendamata',
129
+ 'code.source': 'Allikas',
130
+ 'code.livePreview': 'Otseeelvaade',
131
+ 'code.liveHtmlPreviewTitle': 'HTML-i otseeelvaade',
132
+ 'code.applyNote':
133
+ 'Rakendamine analüüsib iga ülataseme tabelirea lõuendireaks, mida saad endiselt valida, ümber korraldada ja kustutada — käsitsi kirjutatud kood jääb protsessis muutumatuks.',
134
+ 'code.meta': '{kb} KB · {lines} rida',
135
+ 'toast.sourceReloaded': 'Allikas laaditi lõuendilt uuesti',
136
+ 'toast.sourceAppliedOne': 'Allikas rakendatud — 1 rida lõuendil',
137
+ 'toast.sourceAppliedMany': 'Allikas rakendatud {rows} rida lõuendil',
138
+ 'toast.parseError': 'Seda HTML-i ei õnnestunud analüüsida',
139
+ 'modal.aiDraft': 'Tehisintellekti kirjutamisabi',
140
+ 'modal.aiDraftTitle': 'Koosta oma e-kiri tehisintellektiga',
141
+ 'ai.disclosure': 'Tehisintellekt loob ettepanekud sinu lühikirjelduse põhjal. Vaata tulemus üle ja toimeta seda enne saatmist.',
142
+ 'ai.goal': 'Eesmärk',
143
+ 'ai.tone': 'Toon',
144
+ 'ai.briefLabel': 'Millest see e-kiri räägib?',
145
+ 'ai.briefPlaceholder': 'nt sügiskollektsioon, 15% tellijatele, tasuta tarne üle 150 €',
146
+ 'ai.generate': 'Genereeri tekst',
147
+ 'ai.writing': 'Kirjutamine…',
148
+ 'ai.kindHeadline': 'Pealkiri',
149
+ 'ai.kindBody': 'Põhitekst',
150
+ 'ai.kindButton': 'Nupu tekst',
151
+ 'ai.actionInsertHeading': 'Lisa pealkirjana',
152
+ 'ai.actionInsertText': 'Lisa tekstiplokina',
153
+ 'ai.actionInsertButton': 'Lisa nupuna',
154
+ 'toast.headingAdded': 'Pealkiri lisatud',
155
+ 'toast.textBlockAdded': 'Tekstiplokk lisatud',
156
+ 'toast.buttonAdded': 'Nupp lisatud',
157
+ 'preview.kickerMobile': 'Eelvaade — mobiil 375px',
158
+ 'preview.kickerDesktop': 'Eelvaade — arvuti {width}px',
159
+ 'action.close': 'Sulge',
160
+ 'toast.duplicated': 'Paljundatud',
161
+ 'toast.fileUploadedOne': '1 fail üles laaditud',
162
+ 'toast.fileUploadedMany': '{count} faili üles laaditud',
163
+ 'toast.imageReplaced': 'Pilt asendatud',
164
+ 'toast.imageAdded': 'Pilt lisatud lõuendile',
165
+ 'toast.htmlCopied': 'HTML kopeeritud lõikelauale',
166
+ 'toast.templateLoaded': '{name} laaditud',
167
+ 'toast.snippetDefaultLabel': 'Katke',
168
+ 'toast.snippetInserted': '{name} lisatud',
169
+ 'toast.snippetCopied': '{name} kopeeritud — vali tekstiplokk selle lisamiseks',
170
+ 'rte.textStyle': 'Teksti stiil',
171
+ 'rte.mergeTags': 'Liitmisväljad',
172
+ 'rte.noMergeTags': 'Liitmisvälju pole saadaval',
173
+ 'rte.textColor': 'Teksti värv',
174
+ 'rte.highlightColor': 'Esiletõstu värv',
175
+ 'rte.removeHighlight': 'Eemalda esiletõst',
176
+ 'rte.clearFormatting': 'Eemalda vorming',
177
+ 'action.downloadPng': 'Laadi PNG alla',
178
+ 'action.screenshot': 'Kuvatõmmis',
179
+ 'action.screenshotHint': 'Vaata kogu malli pildina ja laadi see alla',
180
+ 'toast.pngSaved': 'Kuvatõmmis laaditi alla',
181
+ 'toast.pngFailed': 'Kuvatõmmis ebaõnnestus — välist pilti ei õnnestunud laadida',
182
+ 'toast.pngCopied': 'Kuvatõmmis kopeeriti lõikelauale',
183
+ 'toast.pngCopyFailed': 'See brauser ei võtnud pilti lõikelauale vastu',
184
+ 'story.kicker': 'Kuvatõmmis',
185
+ 'story.rendering': 'Kuvatõmmise koostamine',
186
+ 'story.renderingHint': 'Iga plokk joonistatakse 2× suuruses — pika malli puhul võtab see hetke.',
187
+ 'story.failed': 'Kuvatõmmis ebaõnnestus',
188
+ 'story.failedHint': 'Malli üht pilti ei õnnestunud jäädvustamiseks laadida.',
189
+ 'story.retry': 'Proovi uuesti',
190
+ 'story.play': 'Esita',
191
+ 'story.pause': 'Peata',
192
+ 'story.replay': 'Esita uuesti',
193
+ 'story.copy': 'Kopeeri',
194
+ 'story.meta': '{w}×{h} · vaade {i}/{n}',
195
+ 'footer.poweredBy': 'Töötab SELISE Blocks © 2026 põhjal',
196
+ };