@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
- /** Czech (Čeština) — `cs`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
2
- export const CS = {
3
- 'action.undoHint': 'Zpět — ⌘Z',
4
- 'action.redoHint': 'Znovu — ⌘⇧Z',
5
- 'action.chromeToDark': 'Tmavý',
6
- 'action.chromeToLight': 'Světlý',
7
- 'action.chromeHint': 'Motiv editoru světlý / tmavý',
8
- 'action.aiCopy': 'Text',
9
- 'action.aiCopyHint': 'Napsat text pomocí AI',
10
- 'action.code': 'Kód',
11
- 'action.codeHint': 'Upravit surové HTML s živým náhledem',
12
- 'action.preview': 'Náhled',
13
- 'action.export': 'Exportovat',
14
- 'device.desktop': 'Počítač',
15
- 'device.desktopHint': 'Šířka pro počítač',
16
- 'device.mobile': 'Mobil',
17
- 'device.mobileHint': 'Šířka pro mobil',
18
- 'device.dark': 'Tmavý',
19
- 'device.darkHint': 'Tmavý režim schránky',
20
- 'status.autosaveOn': 'automatické ukládání zapnuto',
21
- 'status.saved': 'uloženo {time}',
22
- 'status.saveFailed': 'neuloženo úložiště je plné',
23
- 'canvas.meta': '{rows} řádků · {blocks} bloků · {width}px',
24
- 'tab.design': 'Styl',
25
- 'tab.designHint': 'Stylovat výběr',
26
- 'tab.blocks': 'Bloky',
27
- 'tab.blocksHint': 'Bloky obsahu a proměnné',
28
- 'tab.rows': 'Sekce',
29
- 'tab.rowsHint': 'Rozvržení sekcí a model plátna',
30
- 'tab.files': 'Soubory',
31
- 'tab.filesHint': 'Knihovna souborů',
32
- 'tab.layers': 'Struktura',
33
- 'tab.layersHint': 'Struktura dokumentu',
34
- 'tab.theme': 'Motiv',
35
- 'tab.themeHint': 'Globální styly',
36
- 'tab.data': 'Prom.',
37
- 'tab.dataHint': 'Proměnné poskytnuté vaším kódem',
38
- 'inspector.blockProperties': 'Vlastnosti bloku',
39
- 'inspector.sectionProperties': 'Vlastnosti sekce',
40
- 'inspector.title': 'Inspektor',
41
- 'inspector.sectionLabel': 'Sekce',
42
- 'inspector.nothingSelected': 'Nic není vybráno',
43
- 'action.duplicateHint': 'Duplikovat — ⌘D',
44
- 'action.deleteHint': 'Smazat ',
45
- 'inspector.emptyBody':
46
- 'Vyberte řádek nebo blok na plátně a stylujte jej zde. Přetáhněte bloky z karty <strong style="color: var(--ed-text); font-weight: 600;">Bloky</strong>; dvojklikem na text jej upravíte přímo na místě.',
47
- 'inspector.shortcuts': 'Zkratky',
48
- 'shortcut.undoRedo': '⌘Z / ⌘⇧Z zpět, znovu',
49
- 'shortcut.duplicate': '⌘D — duplikovat výběr',
50
- 'shortcut.delete': 'smazat výběr',
51
- 'shortcut.export': '⌘Eexportovat HTML',
52
- 'shortcut.escape': 'ESCzrušit výběr, zavřít',
53
- 'blocks.dragHint': 'Přetáhněte na plátno',
54
- 'blocks.count': '{count} bloků',
55
- 'rows.sectionLayouts': 'Rozvržení sekcí',
56
- 'rows.customMarkup': 'Vlastní kód',
57
- 'rows.htmlRowHint': 'Přetáhněte pro vložení nebo klikněte pro přidání — řádek na celou šířku, který vyplníte surovým HTML',
58
- 'rows.rawHtmlSection': 'Sekce se surovým HTML',
59
- 'rows.rawHtmlDesc': 'Sekce na celou šířku, váš vlastní kód, stále přetažitelná',
60
- 'rows.canvasModel': 'Model plátna',
61
- 'rows.modeRowBased': 'Založeno na řádcích',
62
- 'rows.modeFreeStack': 'Volný zásobník',
63
- 'rows.hintRows':
64
- 'Založeno na sekcích: nejprve umístěte rozvržení, poté bloky do jeho sloupců — každá sekce má vlastní pozadí, ohraničení, nastavení flex nebo mřížky.',
65
- 'rows.hintStack': 'Volný zásobník: bez rozvržení — každý umístěný blok se stane vlastní sekcí na celou šířku, seřazenou postupně.',
66
- 'files.libraryCount': 'Knihovna{count} souborů',
67
- 'files.openManager': 'Otevřít správce souborů',
68
- 'files.dragToCanvas': 'Přetáhněte libovolný soubor přímo na plátno a umístěte jej jako obrazový blok.',
69
- 'layers.structure': 'Struktura',
70
- 'layers.sectionSingle': 'Sekce',
71
- 'layers.sectionMulti': 'Sekce · {count} sloupců',
72
- 'layers.blockCount': '{count} bl.',
73
- 'theme.globalStyles': 'Globální styly',
74
- 'vars.title': 'Proměnné',
75
- 'vars.fromCode': '{count} z vašeho kódu',
76
- 'vars.declaredNote': 'Deklarované vaší aplikací — plátno vždy zobrazuje token, nikdy hodnotu.',
77
- 'vars.filterPlaceholder': 'Filtrovat proměnné…',
78
- 'vars.insertHint': 'Klikněte pro vložení do vybraného textu, nadpisu nebo tlačítka',
79
- 'vars.insert': 'vložit',
80
- 'vars.noMatch': 'Žádná proměnná neodpovídá tomuto filtru.',
81
- 'vars.noneDeclared': 'Vaše aplikace zatím nedeklarovala žádné proměnné.',
82
- 'vars.rteHint': 'Při úpravě textu můžete proměnnou vybrat i přímo z rozbalovací nabídky vloženého panelu nástrojů.',
83
- 'modal.fileManager': 'Správce souborů',
84
- 'modal.assetsTitle': 'Zdroje',
85
- 'modal.replaceImage': 'Nahradit obrázek',
86
- 'library.searchPlaceholder': 'Hledat soubory…',
87
- 'action.upload': 'Nahrát',
88
- 'library.clickToPlace': 'Klikněte na soubor pro umístění · nebo přetáhněte soubor na plátno',
89
- 'library.clickToReplace': 'Klikněte na soubor pro nahrazení vybraného obrázku',
90
- 'library.storageLabel': '{count} souborů · {size}',
91
- 'library.folders': 'Složky',
92
- 'library.dropHint': 'Sem přetáhněte obrázkové soubory pro nahrání — nebo použijte tlačítko Nahrát.',
93
- 'library.deleteFileHint': 'Smazat soubor',
94
- 'library.del': 'SMAZ',
95
- 'toast.assetDeleted': '{name} smazán',
96
- 'modal.export': 'Exportovat',
97
- 'modal.exportTitle': 'HTML e-mailu založené na tabulkách',
98
- 'export.copy': 'Kopírovat',
99
- 'export.copied': 'Zkopírováno',
100
- 'action.download': 'Stáhnout',
101
- 'export.meta': '{kb} KB · tabulky + vložené styly · šířky bezpečné pro Outlook',
102
- 'modal.rawHtmlTitle': 'Surové HTML, živý náhled',
103
- 'code.statusEdited': 'Zobrazení kódu upravenonáhled živě, zatím neaplikováno',
104
- 'code.statusSynced': 'Zobrazení kódu synchronizováno s plátnem',
105
- 'action.reload': 'Znovu načíst',
106
- 'action.reloadHint': 'Znovu načíst zdroj z plátna',
107
- 'action.applyToCanvas': 'Použít na plátno',
108
- 'action.applyToCanvasHint': 'Znovu rozebrat zdroj na editovatelné řádky',
109
- 'action.closeWithoutApplyingHint': 'Zavřít bez použití',
110
- 'code.source': 'Zdroj',
111
- 'code.livePreview': 'Živý náhled',
112
- 'code.liveHtmlPreviewTitle': 'Živý náhled HTML',
113
- 'code.applyNote':
114
- 'Použití rozebere každý řádek tabulky nejvyšší úrovně do řádku plátna, který lze stále vybírat, přeuspořádávat a mazat ručně psaný kód proces přežije beze změny.',
115
- 'code.meta': '{kb} KB · {lines} řádků',
116
- 'toast.sourceReloaded': 'Zdroj znovu načten z plátna',
117
- 'toast.sourceAppliedOne': 'Zdroj použit — 1 řádek na plátně',
118
- 'toast.sourceAppliedMany': 'Zdroj použit — {rows} řádků na plátně',
119
- 'toast.parseError': 'Toto HTML se nepodařilo rozebrat',
120
- 'modal.copyAssist': 'Asistent pro text',
121
- 'modal.draftCopyTitle': 'Napsat text pro tuto kampaň',
122
- 'ai.goal': 'Cíl',
123
- 'ai.tone': 'Tón',
124
- 'ai.briefLabel': 'O čem tento e-mail je?',
125
- 'ai.briefPlaceholder': 'např. Podzimní kolekce, 15 % pro odběratele, doprava zdarma nad 150 €',
126
- 'ai.generate': 'Vygenerovat text',
127
- 'ai.writing': 'Píše se…',
128
- 'ai.kindHeadline': 'Nadpis',
129
- 'ai.kindBody': 'Hlavní text',
130
- 'ai.kindButton': 'Text tlačítka',
131
- 'ai.actionInsertHeading': 'Vložit jako nadpis',
132
- 'ai.actionInsertText': 'Vložit jako textový blok',
133
- 'ai.actionInsertButton': 'Vložit jako tlačítko',
134
- 'toast.headingAdded': 'Nadpis přidán',
135
- 'toast.textBlockAdded': 'Textový blok přidán',
136
- 'toast.buttonAdded': 'Tlačítko přidáno',
137
- 'preview.kickerMobile': 'Náhledmobil 375px',
138
- 'preview.kickerDark': 'Náhled tmavá schránka',
139
- 'preview.kickerDesktop': 'Náhled počítač {width}px',
140
- 'action.close': 'Zavřít',
141
- 'toast.duplicated': 'Duplikováno',
142
- 'toast.fileUploadedOne': 'Nahrán 1 soubor',
143
- 'toast.fileUploadedMany': 'Nahráno souborů: {count}',
144
- 'toast.imageReplaced': 'Obrázek nahrazen',
145
- 'toast.imageAdded': 'Obrázek přidán na plátno',
146
- 'toast.htmlCopied': 'HTML zkopírováno do schránky',
147
- 'toast.templateLoaded': '{name} načteno',
148
- 'toast.snippetDefaultLabel': 'Úryvek',
149
- 'toast.snippetInserted': '{name} vloženo',
150
- 'toast.snippetCopied': '{name} zkopírováno — vyberte textový blok pro vložení',
151
- };
152
-
1
+ /** Czech (Čeština) — `cs`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
2
+ export const CS = {
3
+ 'action.undoHint': 'Zpět — ⌘Z',
4
+ 'action.redoHint': 'Znovu — ⌘⇧Z',
5
+ 'action.chromeToDark': 'Tmavý',
6
+ 'action.chromeToLight': 'Světlý',
7
+ 'action.chromeHint': 'Motiv editoru světlý / tmavý',
8
+ 'action.chromeHintToDark': 'Tmavý režim',
9
+ 'action.chromeHintToLight': 'Světlý režim',
10
+ 'action.aiDraft': 'Návrh',
11
+ 'action.aiDraftHint': 'Napsat obsah e-mailu pomocí AI',
12
+ 'action.code': 'Kód',
13
+ 'action.codeHint': 'Upravit surové HTML s živým náhledem',
14
+ 'action.preview': 'Náhled',
15
+ 'action.previewHint': 'Náhled e-mailu',
16
+ 'action.export': 'Exportovat',
17
+ 'action.exportHint': 'Exportovat váš e-mail',
18
+ 'device.desktop': 'Počítač',
19
+ 'device.desktopHint': 'Šířka pro počítač',
20
+ 'device.mobile': 'Mobil',
21
+ 'device.mobileHint': 'Šířka pro mobil',
22
+ 'status.autosaveOn': 'automatické ukládání zapnuto',
23
+ 'status.saved': 'uloženo {time}',
24
+ 'status.saveFailed': 'neuloženo — úložiště je plné',
25
+ 'canvas.meta': '{rows} řádků · {blocks} bloků · {width}px',
26
+ 'tab.design': 'Styl',
27
+ 'tab.designHint': 'Stylovat výběr',
28
+ 'tab.blocks': 'Bloky',
29
+ 'tab.blocksHint': 'Bloky obsahu a proměnné',
30
+ 'tab.rows': 'Sekce',
31
+ 'tab.rowsHint': 'Rozvržení sekcí a model plátna',
32
+ 'tab.files': 'Soubory',
33
+ 'tab.filesHint': 'Knihovna souborů',
34
+ 'tab.layers': 'Struktura',
35
+ 'tab.layersHint': 'Struktura dokumentu',
36
+ 'tab.settings': 'Nastavení',
37
+ 'tab.settingsHint': 'Nastavení e-mailu',
38
+ 'tab.data': 'Prom.',
39
+ 'tab.dataHint': 'Proměnné poskytnuté vaším kódem',
40
+ 'inspector.blockProperties': 'Vlastnosti bloku',
41
+ 'inspector.sectionProperties': 'Vlastnosti sekce',
42
+ 'inspector.title': 'Inspektor',
43
+ 'inspector.sectionLabel': 'Sekce',
44
+ 'inspector.nothingSelected': 'Nic není vybráno',
45
+ 'action.duplicateHint': 'Duplikovat — ⌘D',
46
+ 'action.deleteHint': 'Smazat ',
47
+ 'inspector.emptyBody':
48
+ 'Vyberte řádek nebo blok na plátně a stylujte jej zde. Přetáhněte bloky z karty <strong style="color: var(--ed-text); font-weight: 600;">Bloky</strong>; dvojklikem na text jej upravíte přímo na místě.',
49
+ 'inspector.shortcuts': 'Zkratky',
50
+ 'shortcut.undoRedo': '⌘Z / ⌘⇧Z zpět, znovu',
51
+ 'shortcut.duplicate': '⌘Dduplikovat výběr',
52
+ 'shortcut.delete': 'smazat výběr',
53
+ 'shortcut.export': '⌘E exportovat HTML',
54
+ 'shortcut.escape': 'ESC — zrušit výběr, zavřít',
55
+ 'blocks.dragHint': 'Přetáhněte na plátno',
56
+ 'blocks.count': '{count} bloků',
57
+ 'rows.sectionLayouts': 'Rozvržení sekcí',
58
+ 'rows.customMarkup': 'Vlastní kód',
59
+ 'rows.htmlRowHint': 'Přetáhněte pro vložení nebo klikněte pro přidání — řádek na celou šířku, který vyplníte surovým HTML',
60
+ 'rows.rawHtmlSection': 'Sekce se surovým HTML',
61
+ 'rows.rawHtmlDesc': 'Sekce na celou šířku, váš vlastní kód, stále přetažitelná',
62
+ 'rows.canvasModel': 'Model plátna',
63
+ 'rows.modeRowBased': 'Založeno na řádcích',
64
+ 'rows.modeFreeStack': 'Volný zásobník',
65
+ 'rows.hintRows':
66
+ 'Založeno na sekcích: nejprve umístěte rozvržení, poté bloky do jeho sloupců každá sekce má vlastní pozadí, ohraničení, nastavení flex nebo mřížky.',
67
+ 'rows.hintStack': 'Volný zásobník: bez rozvržení — každý umístěný blok se stane vlastní sekcí na celou šířku, seřazenou postupně.',
68
+ 'files.libraryCount': 'Knihovna {count} souborů',
69
+ 'files.openManager': 'Otevřít správce souborů',
70
+ 'files.dragToCanvas': 'Přetáhněte libovolný soubor přímo na plátno a umístěte jej jako obrazový blok.',
71
+ 'layers.structure': 'Struktura',
72
+ 'layers.sectionSingle': 'Sekce',
73
+ 'layers.sectionMulti': 'Sekce · {count} sloupců',
74
+ 'layers.column': 'Sloupec {index}',
75
+ 'layers.blockCount': '{count} bl.',
76
+ 'vars.title': 'Proměnné',
77
+ 'vars.fromCode': '{count} z vašeho kódu',
78
+ 'vars.declaredNote': 'Deklarované vaší aplikací plátno vždy zobrazuje token, nikdy hodnotu.',
79
+ 'vars.filterPlaceholder': 'Filtrovat proměnné…',
80
+ 'vars.insertHint': 'Klikněte pro vložení do vybraného textu, nadpisu nebo tlačítka',
81
+ 'vars.insert': 'vložit',
82
+ 'vars.noMatch': 'Žádná proměnná neodpovídá tomuto filtru.',
83
+ 'vars.noneDeclared': 'Vaše aplikace zatím nedeklarovala žádné proměnné.',
84
+ 'vars.rteHint': 'Při úpravě textu můžete proměnnou vybrat i přímo z rozbalovací nabídky vloženého panelu nástrojů.',
85
+ 'modal.fileManager': 'Správce souborů',
86
+ 'modal.assetsTitle': 'Zdroje',
87
+ 'modal.replaceImage': 'Nahradit obrázek',
88
+ 'library.searchPlaceholder': 'Hledat soubory…',
89
+ 'action.upload': 'Nahrát',
90
+ 'library.clickToPlace': 'Klikněte na soubor pro umístění · nebo přetáhněte soubor na plátno',
91
+ 'library.clickToReplace': 'Klikněte na soubor pro nahrazení vybraného obrázku',
92
+ 'library.storageLabel': '{count} souborů · {size}',
93
+ 'library.folders': 'Složky',
94
+ 'library.dropHint': 'Sem přetáhněte obrázkové soubory pro nahrání — nebo použijte tlačítko Nahrát.',
95
+ 'library.deleteFileHint': 'Smazat soubor',
96
+ 'library.del': 'SMAZ',
97
+ 'toast.assetDeleted': '{name} smazán',
98
+ 'library.allFiles': 'Všechny soubory',
99
+ 'library.loadMore': 'Načíst další',
100
+ 'library.empty': 'Zatím tu nejsou žádné soubory.',
101
+ 'storage.loading': 'Načítání souborů…',
102
+ 'storage.uploading': 'Nahrávání {count}…',
103
+ 'storage.errLoadFailed': 'Knihovnu souborů se nepodařilo načíst {reason}',
104
+ 'storage.errNoLimits': 'Nahrávání je vypnuté: tato aplikace nenastavila žádné limity nahrávání.',
105
+ 'storage.errNoAccept': 'Nahrávání je vypnuté: nebyl povolen žádný formát souboru.',
106
+ 'storage.errNoMaxBytes': 'Nahrávání je vypnuté: není nastavena maximální velikost souboru.',
107
+ 'storage.errTooLarge': '{name} {size} — limit je {max}.',
108
+ 'storage.errFormat': '{name} je soubor typu {type}, který tu není povolen.',
109
+ 'storage.errSvg': '{name} je SVG, které tato aplikace nepřijímá.',
110
+ 'storage.errDimensions': '{name} má {w}×{ht}px — limit je {maxW}×{maxH}px.',
111
+ 'storage.errTooMany': 'Najednou lze nahrát jen {max} souborů.',
112
+ 'storage.errUnreadable': '{name} není čitelný obrázek.',
113
+ 'storage.errUploadFailed': '{name} se nepodařilo nahrát — {reason}',
114
+ 'storage.errDeleteFailed': '{name} se nepodařilo smazat{reason}',
115
+ 'modal.export': 'Exportovat',
116
+ 'modal.exportTitle': 'HTML e-mailu založené na tabulkách',
117
+ 'export.copy': 'Kopírovat',
118
+ 'export.copied': 'Zkopírováno',
119
+ 'action.download': 'Stáhnout',
120
+ 'export.meta': '{kb} KB · tabulky + vložené styly · šířky bezpečné pro Outlook',
121
+ 'modal.rawHtmlTitle': 'Surové HTML, živý náhled',
122
+ 'code.statusEdited': 'Zobrazení kódu — upraveno — náhled živě, zatím neaplikováno',
123
+ 'code.statusSynced': 'Zobrazení kódu — synchronizováno s plátnem',
124
+ 'action.reload': 'Znovu načíst',
125
+ 'action.reloadHint': 'Znovu načíst zdroj z plátna',
126
+ 'action.applyToCanvas': 'Použít na plátno',
127
+ 'action.applyToCanvasHint': 'Znovu rozebrat zdroj na editovatelné řádky',
128
+ 'action.closeWithoutApplyingHint': 'Zavřít bez použití',
129
+ 'code.source': 'Zdroj',
130
+ 'code.livePreview': 'Živý náhled',
131
+ 'code.liveHtmlPreviewTitle': 'Živý náhled HTML',
132
+ 'code.applyNote':
133
+ 'Použití rozebere každý řádek tabulky nejvyšší úrovně do řádku plátna, který lze stále vybírat, přeuspořádávat a mazat — ručně psaný kód proces přežije beze změny.',
134
+ 'code.meta': '{kb} KB · {lines} řádků',
135
+ 'toast.sourceReloaded': 'Zdroj znovu načten z plátna',
136
+ 'toast.sourceAppliedOne': 'Zdroj použit — 1 řádek na plátně',
137
+ 'toast.sourceAppliedMany': 'Zdroj použit {rows} řádků na plátně',
138
+ 'toast.parseError': 'Toto HTML se nepodařilo rozebrat',
139
+ 'modal.aiDraft': 'Asistent psaní s AI',
140
+ 'modal.aiDraftTitle': 'Napište svůj e-mail pomocí AI',
141
+ 'ai.disclosure': 'AI vytváří návrhy podle vašeho zadání. Před odesláním výsledek zkontrolujte a upravte.',
142
+ 'ai.goal': 'Cíl',
143
+ 'ai.tone': 'Tón',
144
+ 'ai.briefLabel': 'O čem tento e-mail je?',
145
+ 'ai.briefPlaceholder': 'např. Podzimní kolekce, 15 % pro odběratele, doprava zdarma nad 150 €',
146
+ 'ai.generate': 'Vygenerovat text',
147
+ 'ai.writing': 'Píše se…',
148
+ 'ai.kindHeadline': 'Nadpis',
149
+ 'ai.kindBody': 'Hlavní text',
150
+ 'ai.kindButton': 'Text tlačítka',
151
+ 'ai.actionInsertHeading': 'Vložit jako nadpis',
152
+ 'ai.actionInsertText': 'Vložit jako textový blok',
153
+ 'ai.actionInsertButton': 'Vložit jako tlačítko',
154
+ 'toast.headingAdded': 'Nadpis přidán',
155
+ 'toast.textBlockAdded': 'Textový blok přidán',
156
+ 'toast.buttonAdded': 'Tlačítko přidáno',
157
+ 'preview.kickerMobile': 'Náhled — mobil 375px',
158
+ 'preview.kickerDesktop': 'Náhled — počítač {width}px',
159
+ 'action.close': 'Zavřít',
160
+ 'toast.duplicated': 'Duplikováno',
161
+ 'toast.fileUploadedOne': 'Nahrán 1 soubor',
162
+ 'toast.fileUploadedMany': 'Nahráno souborů: {count}',
163
+ 'toast.imageReplaced': 'Obrázek nahrazen',
164
+ 'toast.imageAdded': 'Obrázek přidán na plátno',
165
+ 'toast.htmlCopied': 'HTML zkopírováno do schránky',
166
+ 'toast.templateLoaded': '{name} načteno',
167
+ 'toast.snippetDefaultLabel': 'Úryvek',
168
+ 'toast.snippetInserted': '{name} vloženo',
169
+ 'toast.snippetCopied': '{name} zkopírováno — vyberte textový blok pro vložení',
170
+ 'rte.textStyle': 'Styl textu',
171
+ 'rte.mergeTags': 'Slučovací pole',
172
+ 'rte.noMergeTags': 'Nejsou k dispozici žádná slučovací pole',
173
+ 'rte.textColor': 'Barva textu',
174
+ 'rte.highlightColor': 'Barva zvýraznění',
175
+ 'rte.removeHighlight': 'Odebrat zvýraznění',
176
+ 'rte.clearFormatting': 'Zrušit formátování',
177
+ 'action.downloadPng': 'Stáhnout PNG',
178
+ 'action.screenshot': 'Snímek',
179
+ 'action.screenshotHint': 'Zobrazit celou šablonu jako obrázek a stáhnout ji',
180
+ 'toast.pngSaved': 'Snímek stažen',
181
+ 'toast.pngFailed': 'Snímek se nezdařil — externí obrázek se nepodařilo načíst',
182
+ 'toast.pngCopied': 'Snímek zkopírován do schránky',
183
+ 'toast.pngCopyFailed': 'Tento prohlížeč nepřijal obrázek do schránky',
184
+ 'story.kicker': 'Snímek',
185
+ 'story.rendering': 'Vykreslování snímku',
186
+ 'story.renderingHint': 'Každý blok se kreslí ve 2× — u dlouhé šablony to chvíli trvá.',
187
+ 'story.failed': 'Snímek se nezdařil',
188
+ 'story.failedHint': 'Obrázek v šabloně se nepodařilo načíst pro zachycení.',
189
+ 'story.retry': 'Zkusit znovu',
190
+ 'story.play': 'Přehrát',
191
+ 'story.pause': 'Pozastavit',
192
+ 'story.replay': 'Přehrát znovu',
193
+ 'story.copy': 'Kopírovat',
194
+ 'story.meta': '{w}×{h} · obrazovka {i} z {n}',
195
+ 'footer.poweredBy': 'Běží na SELISE Blocks © 2026',
196
+ };