@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
- /** Croatian (Hrvatski) — `hr`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
2
- export const HR = {
3
- 'action.undoHint': 'Poništi — ⌘Z',
4
- 'action.redoHint': 'Ponovi — ⌘⇧Z',
5
- 'action.chromeToDark': 'Tamno',
6
- 'action.chromeToLight': 'Svijetlo',
7
- 'action.chromeHint': 'Tema uređivača svijetla / tamna',
8
- 'action.aiCopy': 'Tekst',
9
- 'action.aiCopyHint': 'Napiši tekst uz pomoć AI',
10
- 'action.code': 'Kôd',
11
- 'action.codeHint': 'Uredi izvorni HTML uz prikaz uživo',
12
- 'action.preview': 'Pregled',
13
- 'action.export': 'Izvezi',
14
- 'device.desktop': 'Računalo',
15
- 'device.desktopHint': 'Širina za računalo',
16
- 'device.mobile': 'Mobitel',
17
- 'device.mobileHint': 'Širina za mobitel',
18
- 'device.dark': 'Tamno',
19
- 'device.darkHint': 'Tamni način sandučića',
20
- 'status.autosaveOn': 'automatsko spremanje uključeno',
21
- 'status.saved': 'spremljeno {time}',
22
- 'status.saveFailed': 'nije spremljeno — spremište je puno',
23
- 'canvas.meta': '{rows} redaka · {blocks} blokova · {width}px',
24
- 'tab.design': 'Stil',
25
- 'tab.designHint': 'Oblikuj odabir',
26
- 'tab.blocks': 'Blokovi',
27
- 'tab.blocksHint': 'Blokovi sadržaja i varijable',
28
- 'tab.rows': 'Odjeljci',
29
- 'tab.rowsHint': 'Rasporedi odjeljaka i model platna',
30
- 'tab.files': 'Datoteke',
31
- 'tab.filesHint': 'Knjižnica resursa',
32
- 'tab.layers': 'Struktura',
33
- 'tab.layersHint': 'Struktura dokumenta',
34
- 'tab.theme': 'Tema',
35
- 'tab.themeHint': 'Globalni stilovi',
36
- 'tab.data': 'Var.',
37
- 'tab.dataHint': 'Varijable koje pruža vaš kod',
38
- 'inspector.blockProperties': 'Svojstva bloka',
39
- 'inspector.sectionProperties': 'Svojstva odjeljka',
40
- 'inspector.title': 'Inspektor',
41
- 'inspector.sectionLabel': 'Odjeljak',
42
- 'inspector.nothingSelected': 'Ništa nije odabrano',
43
- 'action.duplicateHint': 'Dupliciraj — ⌘D',
44
- 'action.deleteHint': 'Izbriši ',
45
- 'inspector.emptyBody':
46
- 'Odaberite redak ili blok na platnu za oblikovanje ovdje. Povucite blokove s kartice <strong style="color: var(--ed-text); font-weight: 600;">Blokovi</strong>; dvaput kliknite tekst za izravno uređivanje.',
47
- 'inspector.shortcuts': 'Prečaci',
48
- 'shortcut.undoRedo': '⌘Z / ⌘⇧Z poništi, ponovi',
49
- 'shortcut.duplicate': '⌘D — dupliciraj odabir',
50
- 'shortcut.delete': 'izbriši odabir',
51
- 'shortcut.export': '⌘Eizvezi HTML',
52
- 'shortcut.escape': 'ESCponišti odabir, zatvori',
53
- 'blocks.dragHint': 'Povucite na platno',
54
- 'blocks.count': '{count} blokova',
55
- 'rows.sectionLayouts': 'Rasporedi odjeljaka',
56
- 'rows.customMarkup': 'Prilagođeni kôd',
57
- 'rows.htmlRowHint': 'Povucite za umetanje ili kliknite za dodavanje — redak preko cijele širine koji ispunjavate izvornim HTML-om',
58
- 'rows.rawHtmlSection': 'Odjeljak s izvornim HTML-om',
59
- 'rows.rawHtmlDesc': 'Odjeljak preko cijele širine, vaš vlastiti kôd, i dalje se može povlačiti',
60
- 'rows.canvasModel': 'Model platna',
61
- 'rows.modeRowBased': 'Temeljeno na recima',
62
- 'rows.modeFreeStack': 'Slobodni stog',
63
- 'rows.hintRows':
64
- 'Temeljeno na odjeljcima: prvo ispustite raspored, zatim blokove u njegove stupce — svaki odjeljak ima vlastitu pozadinu, obrub, flex ili grid postavke.',
65
- 'rows.hintStack': 'Slobodni stog: bez rasporeda — svaki ispušteni blok postaje vlastiti odjeljak preko cijele širine, poslagan redom.',
66
- 'files.libraryCount': 'Knjižnica{count} datoteka',
67
- 'files.openManager': 'Otvori upravitelja datoteka',
68
- 'files.dragToCanvas': 'Povucite bilo koju datoteku izravno na platno da je postavite kao slikovni blok.',
69
- 'layers.structure': 'Struktura',
70
- 'layers.sectionSingle': 'Odjeljak',
71
- 'layers.sectionMulti': 'Odjeljak · {count} stupaca',
72
- 'layers.blockCount': '{count} bl.',
73
- 'theme.globalStyles': 'Globalni stilovi',
74
- 'vars.title': 'Varijable',
75
- 'vars.fromCode': '{count} iz vašeg koda',
76
- 'vars.declaredNote': 'Deklarirane od strane vaše aplikacije — platno uvijek prikazuje token, nikad vrijednost.',
77
- 'vars.filterPlaceholder': 'Filtriraj varijable…',
78
- 'vars.insertHint': 'Kliknite za umetanje u odabrani tekst, naslov ili gumb',
79
- 'vars.insert': 'umetni',
80
- 'vars.noMatch': 'Nijedna varijabla ne odgovara ovom filtru.',
81
- 'vars.noneDeclared': 'Vaša aplikacija još nije deklarirala nijednu varijablu.',
82
- 'vars.rteHint': 'Tijekom uređivanja teksta varijablu možete odabrati i izravno iz padajućeg izbornika ugrađene alatne trake.',
83
- 'modal.fileManager': 'Upravitelj datoteka',
84
- 'modal.assetsTitle': 'Resursi',
85
- 'modal.replaceImage': 'Zamijeni sliku',
86
- 'library.searchPlaceholder': 'Pretraži datoteke…',
87
- 'action.upload': 'Prenesi',
88
- 'library.clickToPlace': 'Kliknite datoteku za postavljanje · ili povucite datoteku na platno',
89
- 'library.clickToReplace': 'Kliknite datoteku za zamjenu odabrane slike',
90
- 'library.storageLabel': '{count} datoteka · {size}',
91
- 'library.folders': 'Mape',
92
- 'library.dropHint': 'Ispustite slikovne datoteke ovdje za prijenos — ili upotrijebite gumb Prenesi.',
93
- 'library.deleteFileHint': 'Izbriši datoteku',
94
- 'library.del': 'IZBR',
95
- 'toast.assetDeleted': '{name} izbrisano',
96
- 'modal.export': 'Izvezi',
97
- 'modal.exportTitle': 'HTML e-pošte temeljen na tablicama',
98
- 'export.copy': 'Kopiraj',
99
- 'export.copied': 'Kopirano',
100
- 'action.download': 'Preuzmi',
101
- 'export.meta': '{kb} KB · tablice + ugrađeni stilovi · širine sigurne za Outlook',
102
- 'modal.rawHtmlTitle': 'Izvorni HTML, prikaz uživo',
103
- 'code.statusEdited': 'Prikaz koda uređenoprikaz uživo, još nije primijenjeno',
104
- 'code.statusSynced': 'Prikaz koda usklađeno s platnom',
105
- 'action.reload': 'Ponovno učitaj',
106
- 'action.reloadHint': 'Ponovno učitaj izvor s platna',
107
- 'action.applyToCanvas': 'Primijeni na platno',
108
- 'action.applyToCanvasHint': 'Ponovno raščlani izvor u uredive retke',
109
- 'action.closeWithoutApplyingHint': 'Zatvori bez primjene',
110
- 'code.source': 'Izvor',
111
- 'code.livePreview': 'Prikaz uživo',
112
- 'code.liveHtmlPreviewTitle': 'Prikaz HTML-a uživo',
113
- 'code.applyNote':
114
- 'Primjena raščlanjuje svaki redak tablice najviše razine u redak platna koji i dalje možete odabrati, preurediti i izbrisati — ručno napisani kôd preživi postupak nepromijenjen.',
115
- 'code.meta': '{kb} KB · {lines} redaka',
116
- 'toast.sourceReloaded': 'Izvor ponovno učitan s platna',
117
- 'toast.sourceAppliedOne': 'Izvor primijenjen — 1 redak na platnu',
118
- 'toast.sourceAppliedMany': 'Izvor primijenjen — {rows} redaka na platnu',
119
- 'toast.parseError': 'Taj HTML nije bilo moguće raščlaniti',
120
- 'modal.copyAssist': 'Pomoćnik za tekst',
121
- 'modal.draftCopyTitle': 'Napiši tekst za ovu kampanju',
122
- 'ai.goal': 'Cilj',
123
- 'ai.tone': 'Ton',
124
- 'ai.briefLabel': 'O čemu je ova e-pošta?',
125
- 'ai.briefPlaceholder': 'npr. jesenska kolekcija, 15% za pretplatnike, besplatna dostava iznad 150 €',
126
- 'ai.generate': 'Generiraj tekst',
127
- 'ai.writing': 'Pisanje…',
128
- 'ai.kindHeadline': 'Naslov',
129
- 'ai.kindBody': 'Glavni tekst',
130
- 'ai.kindButton': 'Tekst gumba',
131
- 'ai.actionInsertHeading': 'Umetni kao naslov',
132
- 'ai.actionInsertText': 'Umetni kao tekstualni blok',
133
- 'ai.actionInsertButton': 'Umetni kao gumb',
134
- 'toast.headingAdded': 'Naslov dodan',
135
- 'toast.textBlockAdded': 'Tekstualni blok dodan',
136
- 'toast.buttonAdded': 'Gumb dodan',
137
- 'preview.kickerMobile': 'Pregledmobitel 375px',
138
- 'preview.kickerDark': 'Pregled tamni sandučić',
139
- 'preview.kickerDesktop': 'Pregled računalo {width}px',
140
- 'action.close': 'Zatvori',
141
- 'toast.duplicated': 'Duplicirano',
142
- 'toast.fileUploadedOne': 'Prenesena 1 datoteka',
143
- 'toast.fileUploadedMany': 'Preneseno {count} datoteka',
144
- 'toast.imageReplaced': 'Slika zamijenjena',
145
- 'toast.imageAdded': 'Slika dodana na platno',
146
- 'toast.htmlCopied': 'HTML kopiran u međuspremnik',
147
- 'toast.templateLoaded': '{name} učitano',
148
- 'toast.snippetDefaultLabel': 'Isječak',
149
- 'toast.snippetInserted': '{name} umetnuto',
150
- 'toast.snippetCopied': '{name} kopirano — odaberite tekstualni blok za umetanje',
151
- };
152
-
1
+ /** Croatian (Hrvatski) — `hr`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
2
+ export const HR = {
3
+ 'action.undoHint': 'Poništi — ⌘Z',
4
+ 'action.redoHint': 'Ponovi — ⌘⇧Z',
5
+ 'action.chromeToDark': 'Tamno',
6
+ 'action.chromeToLight': 'Svijetlo',
7
+ 'action.chromeHint': 'Tema uređivača svijetla / tamna',
8
+ 'action.chromeHintToDark': 'Tamni način',
9
+ 'action.chromeHintToLight': 'Svijetli način',
10
+ 'action.aiDraft': 'Nacrt',
11
+ 'action.aiDraftHint': 'Napiši sadržaj e-pošte pomoću umjetne inteligencije',
12
+ 'action.code': 'Kôd',
13
+ 'action.codeHint': 'Uredi izvorni HTML uz prikaz uživo',
14
+ 'action.preview': 'Pregled',
15
+ 'action.previewHint': 'Pregledaj e-poštu',
16
+ 'action.export': 'Izvezi',
17
+ 'action.exportHint': 'Izvezi svoju e-poštu',
18
+ 'device.desktop': 'Računalo',
19
+ 'device.desktopHint': 'Širina za računalo',
20
+ 'device.mobile': 'Mobitel',
21
+ 'device.mobileHint': 'Širina za mobitel',
22
+ 'status.autosaveOn': 'automatsko spremanje uključeno',
23
+ 'status.saved': 'spremljeno {time}',
24
+ 'status.saveFailed': 'nije spremljeno — spremište je puno',
25
+ 'canvas.meta': '{rows} redaka · {blocks} blokova · {width}px',
26
+ 'tab.design': 'Stil',
27
+ 'tab.designHint': 'Oblikuj odabir',
28
+ 'tab.blocks': 'Blokovi',
29
+ 'tab.blocksHint': 'Blokovi sadržaja i varijable',
30
+ 'tab.rows': 'Odjeljci',
31
+ 'tab.rowsHint': 'Rasporedi odjeljaka i model platna',
32
+ 'tab.files': 'Datoteke',
33
+ 'tab.filesHint': 'Knjižnica resursa',
34
+ 'tab.layers': 'Struktura',
35
+ 'tab.layersHint': 'Struktura dokumenta',
36
+ 'tab.settings': 'Postavke',
37
+ 'tab.settingsHint': 'Postavke e-pošte',
38
+ 'tab.data': 'Var.',
39
+ 'tab.dataHint': 'Varijable koje pruža vaš kod',
40
+ 'inspector.blockProperties': 'Svojstva bloka',
41
+ 'inspector.sectionProperties': 'Svojstva odjeljka',
42
+ 'inspector.title': 'Inspektor',
43
+ 'inspector.sectionLabel': 'Odjeljak',
44
+ 'inspector.nothingSelected': 'Ništa nije odabrano',
45
+ 'action.duplicateHint': 'Dupliciraj — ⌘D',
46
+ 'action.deleteHint': 'Izbriši ',
47
+ 'inspector.emptyBody':
48
+ 'Odaberite redak ili blok na platnu za oblikovanje ovdje. Povucite blokove s kartice <strong style="color: var(--ed-text); font-weight: 600;">Blokovi</strong>; dvaput kliknite tekst za izravno uređivanje.',
49
+ 'inspector.shortcuts': 'Prečaci',
50
+ 'shortcut.undoRedo': '⌘Z / ⌘⇧Z poništi, ponovi',
51
+ 'shortcut.duplicate': '⌘Ddupliciraj odabir',
52
+ 'shortcut.delete': 'izbriši odabir',
53
+ 'shortcut.export': '⌘E izvezi HTML',
54
+ 'shortcut.escape': 'ESC — poništi odabir, zatvori',
55
+ 'blocks.dragHint': 'Povucite na platno',
56
+ 'blocks.count': '{count} blokova',
57
+ 'rows.sectionLayouts': 'Rasporedi odjeljaka',
58
+ 'rows.customMarkup': 'Prilagođeni kôd',
59
+ 'rows.htmlRowHint': 'Povucite za umetanje ili kliknite za dodavanje redak preko cijele širine koji ispunjavate izvornim HTML-om',
60
+ 'rows.rawHtmlSection': 'Odjeljak s izvornim HTML-om',
61
+ 'rows.rawHtmlDesc': 'Odjeljak preko cijele širine, vaš vlastiti kôd, i dalje se može povlačiti',
62
+ 'rows.canvasModel': 'Model platna',
63
+ 'rows.modeRowBased': 'Temeljeno na recima',
64
+ 'rows.modeFreeStack': 'Slobodni stog',
65
+ 'rows.hintRows':
66
+ 'Temeljeno na odjeljcima: prvo ispustite raspored, zatim blokove u njegove stupce svaki odjeljak ima vlastitu pozadinu, obrub, flex ili grid postavke.',
67
+ 'rows.hintStack': 'Slobodni stog: bez rasporeda — svaki ispušteni blok postaje vlastiti odjeljak preko cijele širine, poslagan redom.',
68
+ 'files.libraryCount': 'Knjižnica {count} datoteka',
69
+ 'files.openManager': 'Otvori upravitelja datoteka',
70
+ 'files.dragToCanvas': 'Povucite bilo koju datoteku izravno na platno da je postavite kao slikovni blok.',
71
+ 'layers.structure': 'Struktura',
72
+ 'layers.sectionSingle': 'Odjeljak',
73
+ 'layers.sectionMulti': 'Odjeljak · {count} stupaca',
74
+ 'layers.column': 'Stupac {index}',
75
+ 'layers.blockCount': '{count} bl.',
76
+ 'vars.title': 'Varijable',
77
+ 'vars.fromCode': '{count} iz vašeg koda',
78
+ 'vars.declaredNote': 'Deklarirane od strane vaše aplikacije — platno uvijek prikazuje token, nikad vrijednost.',
79
+ 'vars.filterPlaceholder': 'Filtriraj varijable…',
80
+ 'vars.insertHint': 'Kliknite za umetanje u odabrani tekst, naslov ili gumb',
81
+ 'vars.insert': 'umetni',
82
+ 'vars.noMatch': 'Nijedna varijabla ne odgovara ovom filtru.',
83
+ 'vars.noneDeclared': 'Vaša aplikacija još nije deklarirala nijednu varijablu.',
84
+ 'vars.rteHint': 'Tijekom uređivanja teksta varijablu možete odabrati i izravno iz padajućeg izbornika ugrađene alatne trake.',
85
+ 'modal.fileManager': 'Upravitelj datoteka',
86
+ 'modal.assetsTitle': 'Resursi',
87
+ 'modal.replaceImage': 'Zamijeni sliku',
88
+ 'library.searchPlaceholder': 'Pretraži datoteke…',
89
+ 'action.upload': 'Prenesi',
90
+ 'library.clickToPlace': 'Kliknite datoteku za postavljanje · ili povucite datoteku na platno',
91
+ 'library.clickToReplace': 'Kliknite datoteku za zamjenu odabrane slike',
92
+ 'library.storageLabel': '{count} datoteka · {size}',
93
+ 'library.folders': 'Mape',
94
+ 'library.dropHint': 'Ispustite slikovne datoteke ovdje za prijenos — ili upotrijebite gumb Prenesi.',
95
+ 'library.deleteFileHint': 'Izbriši datoteku',
96
+ 'library.del': 'IZBR',
97
+ 'toast.assetDeleted': '{name} izbrisano',
98
+ 'library.allFiles': 'Sve datoteke',
99
+ 'library.loadMore': 'Učitaj još',
100
+ 'library.empty': 'Ovdje još nema datoteka.',
101
+ 'storage.loading': 'Učitavanje datoteka…',
102
+ 'storage.uploading': 'Prijenos {count}…',
103
+ 'storage.errLoadFailed': 'Knjižnicu datoteka nije moguće učitati {reason}',
104
+ 'storage.errNoLimits': 'Prijenos je isključen: ova aplikacija nije postavila nikakva ograničenja prijenosa.',
105
+ 'storage.errNoAccept': 'Prijenos je isključen: nije dopušten nijedan format datoteke.',
106
+ 'storage.errNoMaxBytes': 'Prijenos je isključen: nije postavljena najveća veličina datoteke.',
107
+ 'storage.errTooLarge': '{name} je {size} — ograničenje je {max}.',
108
+ 'storage.errFormat': '{name} je datoteka vrste {type}, koja ovdje nije dopuštena.',
109
+ 'storage.errSvg': '{name} je SVG, koji ova aplikacija ne prihvaća.',
110
+ 'storage.errDimensions': '{name} je {w}×{ht}px — ograničenje je {maxW}×{maxH}px.',
111
+ 'storage.errTooMany': 'Odjednom je moguće prenijeti samo {max} datoteka.',
112
+ 'storage.errUnreadable': '{name} nije čitljiva slika.',
113
+ 'storage.errUploadFailed': '{name} nije moguće prenijeti — {reason}',
114
+ 'storage.errDeleteFailed': '{name} nije moguće izbrisati — {reason}',
115
+ 'modal.export': 'Izvezi',
116
+ 'modal.exportTitle': 'HTML e-pošte temeljen na tablicama',
117
+ 'export.copy': 'Kopiraj',
118
+ 'export.copied': 'Kopirano',
119
+ 'action.download': 'Preuzmi',
120
+ 'export.meta': '{kb} KB · tablice + ugrađeni stilovi · širine sigurne za Outlook',
121
+ 'modal.rawHtmlTitle': 'Izvorni HTML, prikaz uživo',
122
+ 'code.statusEdited': 'Prikaz koda — uređeno — prikaz uživo, još nije primijenjeno',
123
+ 'code.statusSynced': 'Prikaz koda — usklađeno s platnom',
124
+ 'action.reload': 'Ponovno učitaj',
125
+ 'action.reloadHint': 'Ponovno učitaj izvor s platna',
126
+ 'action.applyToCanvas': 'Primijeni na platno',
127
+ 'action.applyToCanvasHint': 'Ponovno raščlani izvor u uredive retke',
128
+ 'action.closeWithoutApplyingHint': 'Zatvori bez primjene',
129
+ 'code.source': 'Izvor',
130
+ 'code.livePreview': 'Prikaz uživo',
131
+ 'code.liveHtmlPreviewTitle': 'Prikaz HTML-a uživo',
132
+ 'code.applyNote':
133
+ 'Primjena raščlanjuje svaki redak tablice najviše razine u redak platna koji i dalje možete odabrati, preurediti i izbrisati — ručno napisani kôd preživi postupak nepromijenjen.',
134
+ 'code.meta': '{kb} KB · {lines} redaka',
135
+ 'toast.sourceReloaded': 'Izvor ponovno učitan s platna',
136
+ 'toast.sourceAppliedOne': 'Izvor primijenjen — 1 redak na platnu',
137
+ 'toast.sourceAppliedMany': 'Izvor primijenjen {rows} redaka na platnu',
138
+ 'toast.parseError': 'Taj HTML nije bilo moguće raščlaniti',
139
+ 'modal.aiDraft': 'AI pomoćnik za pisanje',
140
+ 'modal.aiDraftTitle': 'Napišite svoju e-poštu uz AI',
141
+ 'ai.disclosure': 'Umjetna inteligencija stvara prijedloge na temelju vašeg sažetka. Pregledajte i uredite rezultat prije slanja.',
142
+ 'ai.goal': 'Cilj',
143
+ 'ai.tone': 'Ton',
144
+ 'ai.briefLabel': 'O čemu je ova e-pošta?',
145
+ 'ai.briefPlaceholder': 'npr. jesenska kolekcija, 15% za pretplatnike, besplatna dostava iznad 150 €',
146
+ 'ai.generate': 'Generiraj tekst',
147
+ 'ai.writing': 'Pisanje…',
148
+ 'ai.kindHeadline': 'Naslov',
149
+ 'ai.kindBody': 'Glavni tekst',
150
+ 'ai.kindButton': 'Tekst gumba',
151
+ 'ai.actionInsertHeading': 'Umetni kao naslov',
152
+ 'ai.actionInsertText': 'Umetni kao tekstualni blok',
153
+ 'ai.actionInsertButton': 'Umetni kao gumb',
154
+ 'toast.headingAdded': 'Naslov dodan',
155
+ 'toast.textBlockAdded': 'Tekstualni blok dodan',
156
+ 'toast.buttonAdded': 'Gumb dodan',
157
+ 'preview.kickerMobile': 'Pregled — mobitel 375px',
158
+ 'preview.kickerDesktop': 'Pregled — računalo {width}px',
159
+ 'action.close': 'Zatvori',
160
+ 'toast.duplicated': 'Duplicirano',
161
+ 'toast.fileUploadedOne': 'Prenesena 1 datoteka',
162
+ 'toast.fileUploadedMany': 'Preneseno {count} datoteka',
163
+ 'toast.imageReplaced': 'Slika zamijenjena',
164
+ 'toast.imageAdded': 'Slika dodana na platno',
165
+ 'toast.htmlCopied': 'HTML kopiran u međuspremnik',
166
+ 'toast.templateLoaded': '{name} učitano',
167
+ 'toast.snippetDefaultLabel': 'Isječak',
168
+ 'toast.snippetInserted': '{name} umetnuto',
169
+ 'toast.snippetCopied': '{name} kopirano — odaberite tekstualni blok za umetanje',
170
+ 'rte.textStyle': 'Stil teksta',
171
+ 'rte.mergeTags': 'Polja za spajanje',
172
+ 'rte.noMergeTags': 'Nema dostupnih polja za spajanje',
173
+ 'rte.textColor': 'Boja teksta',
174
+ 'rte.highlightColor': 'Boja isticanja',
175
+ 'rte.removeHighlight': 'Ukloni isticanje',
176
+ 'rte.clearFormatting': 'Ukloni oblikovanje',
177
+ 'action.downloadPng': 'Preuzmi PNG',
178
+ 'action.screenshot': 'Snimka zaslona',
179
+ 'action.screenshotHint': 'Pogledaj cijeli predložak kao sliku i preuzmi ga',
180
+ 'toast.pngSaved': 'Snimka zaslona preuzeta',
181
+ 'toast.pngFailed': 'Snimka zaslona nije uspjela — vanjsku sliku nije bilo moguće učitati',
182
+ 'toast.pngCopied': 'Snimka zaslona kopirana u međuspremnik',
183
+ 'toast.pngCopyFailed': 'Ovaj preglednik nije prihvatio sliku u međuspremnik',
184
+ 'story.kicker': 'Snimka zaslona',
185
+ 'story.rendering': 'Izrada snimke zaslona',
186
+ 'story.renderingHint': 'Svaki se blok crta u 2× — kod dugog predloška to potraje trenutak.',
187
+ 'story.failed': 'Snimka zaslona nije uspjela',
188
+ 'story.failedHint': 'Sliku u predlošku nije bilo moguće učitati za snimanje.',
189
+ 'story.retry': 'Pokušaj ponovno',
190
+ 'story.play': 'Pokreni',
191
+ 'story.pause': 'Pauza',
192
+ 'story.replay': 'Ponovno pokreni',
193
+ 'story.copy': 'Kopiraj',
194
+ 'story.meta': '{w}×{h} · zaslon {i} od {n}',
195
+ 'footer.poweredBy': 'Pokreće SELISE Blocks © 2026',
196
+ };