@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
- /** Turkish (Türkçe) — `tr`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
2
- export const TR = {
3
- 'action.undoHint': 'Geri al — ⌘Z',
4
- 'action.redoHint': 'Yinele — ⌘⇧Z',
5
- 'action.chromeToDark': 'Koyu',
6
- 'action.chromeToLight': 'Açık',
7
- 'action.chromeHint': 'Düzenleyici teması açık / koyu',
8
- 'action.aiCopy': 'Metin',
9
- 'action.aiCopyHint': 'Yapay zeka ile metin yaz',
10
- 'action.code': 'Kod',
11
- 'action.codeHint': 'Ham HTML’yi canlı önizlemeyle düzenle',
12
- 'action.preview': 'Önizleme',
13
- 'action.export': 'Dışa aktar',
14
- 'device.desktop': 'Masaüstü',
15
- 'device.desktopHint': 'Masaüstü genişliği',
16
- 'device.mobile': 'Mobil',
17
- 'device.mobileHint': 'Mobil genişliği',
18
- 'device.dark': 'Koyu',
19
- 'device.darkHint': 'Koyu gelen kutusu modu',
20
- 'status.autosaveOn': 'otomatik kayıt açık',
21
- 'status.saved': 'kaydedildi {time}',
22
- 'status.saveFailed': 'kaydedilmedi depolama alanı dolu',
23
- 'canvas.meta': '{rows} satır · {blocks} blok · {width}px',
24
- 'tab.design': 'Stil',
25
- 'tab.designHint': 'Seçimi biçimlendir',
26
- 'tab.blocks': 'Bloklar',
27
- 'tab.blocksHint': 'İçerik blokları ve değişkenler',
28
- 'tab.rows': 'Bölümler',
29
- 'tab.rowsHint': 'Bölüm düzenleri ve tuval modeli',
30
- 'tab.files': 'Dosyalar',
31
- 'tab.filesHint': 'Varlık kitaplığı',
32
- 'tab.layers': 'Yapı',
33
- 'tab.layersHint': 'Belge yapısı',
34
- 'tab.theme': 'Tema',
35
- 'tab.themeHint': 'Genel stiller',
36
- 'tab.data': 'Değ.',
37
- 'tab.dataHint': 'Kodunuz tarafından sağlanan değişkenler',
38
- 'inspector.blockProperties': 'Blok özellikleri',
39
- 'inspector.sectionProperties': 'Bölüm özellikleri',
40
- 'inspector.title': 'Denetçi',
41
- 'inspector.sectionLabel': 'Bölüm',
42
- 'inspector.nothingSelected': 'Hiçbir şey seçilmedi',
43
- 'action.duplicateHint': 'Çoğalt — ⌘D',
44
- 'action.deleteHint': 'Sil ',
45
- 'inspector.emptyBody':
46
- 'Burada biçimlendirmek için tuval üzerinde bir satır veya blok seçin. Blokları <strong style="color: var(--ed-text); font-weight: 600;">Bloklar</strong> sekmesinden sürükleyin; herhangi bir metni doğrudan düzenlemek için üzerine çift tıklayın.',
47
- 'inspector.shortcuts': 'Kısayollar',
48
- 'shortcut.undoRedo': '⌘Z / ⌘⇧Z geri al, yinele',
49
- 'shortcut.duplicate': '⌘D — seçimi çoğalt',
50
- 'shortcut.delete': 'seçimi sil',
51
- 'shortcut.export': '⌘EHTML dışa aktar',
52
- 'shortcut.escape': 'ESC — seçimi kaldır, kapat',
53
- 'blocks.dragHint': 'Tuvale sürükleyin',
54
- 'blocks.count': '{count} blok',
55
- 'rows.sectionLayouts': 'Bölüm düzenleri',
56
- 'rows.customMarkup': 'Özel işaretleme',
57
- 'rows.htmlRowHint': 'Eklemek için sürükleyin veya eklemek için tıklayın — ham HTML ile doldurduğunuz tam genişlikte bir satır',
58
- 'rows.rawHtmlSection': 'Ham HTML bölümü',
59
- 'rows.rawHtmlDesc': 'Tam genişlikte bölüm, kendi işaretlemeniz, hâlâ sürüklenebilir',
60
- 'rows.canvasModel': 'Tuval modeli',
61
- 'rows.modeRowBased': 'Satır tabanlı',
62
- 'rows.modeFreeStack': 'Serbest yığın',
63
- 'rows.hintRows':
64
- 'Bölüm tabanlı: önce bir düzen bırakın, ardından sütunlarına bloklar bırakın — her bölümün kendi arka planı, kenarlığı, flex veya ızgara ayarları vardır.',
65
- 'rows.hintStack': 'Serbest yığın: düzen olmadan — bıraktığınız her blok, sırayla istiflenen kendi tam genişlikteki bölümü haline gelir.',
66
- 'files.libraryCount': 'Kitaplık{count} dosya',
67
- 'files.openManager': 'Dosya yöneticisini ',
68
- 'files.dragToCanvas': 'Görsel blok olarak yerleştirmek için herhangi bir dosyayı doğrudan tuvale sürükleyin.',
69
- 'layers.structure': 'Yapı',
70
- 'layers.sectionSingle': 'Bölüm',
71
- 'layers.sectionMulti': 'Bölüm · {count} sütun',
72
- 'layers.blockCount': '{count} blok',
73
- 'theme.globalStyles': 'Genel stiller',
74
- 'vars.title': 'Değişkenler',
75
- 'vars.fromCode': 'Kodunuzdan {count}',
76
- 'vars.declaredNote': 'Uygulamanız tarafından tanımlandı — tuval her zaman değeri değil, jetonu gösterir.',
77
- 'vars.filterPlaceholder': 'Değişkenleri filtrele…',
78
- 'vars.insertHint': 'Seçili metne, başlığa veya düğmeye eklemek için tıklayın',
79
- 'vars.insert': 'ekle',
80
- 'vars.noMatch': 'Bu filtreyle eşleşen değişken yok.',
81
- 'vars.noneDeclared': 'Uygulamanız henüz herhangi bir değişken tanımlamadı.',
82
- 'vars.rteHint': 'Metni düzenlerken, satır içi araç çubuğunun açılır menüsünden doğrudan bir değişken de seçebilirsiniz.',
83
- 'modal.fileManager': 'Dosya yöneticisi',
84
- 'modal.assetsTitle': 'Varlıklar',
85
- 'modal.replaceImage': 'Görseli değiştir',
86
- 'library.searchPlaceholder': 'Dosyaları ara…',
87
- 'action.upload': 'Yükle',
88
- 'library.clickToPlace': 'Yerleştirmek için bir dosyaya tıklayın · veya bir dosyayı tuvale sürükleyin',
89
- 'library.clickToReplace': 'Seçili görseli değiştirmek için bir dosyaya tıklayın',
90
- 'library.storageLabel': '{count} dosya · {size}',
91
- 'library.folders': 'Klasörler',
92
- 'library.dropHint': 'Yüklemek için görsel dosyalarını buraya bırakın — veya Yükle düğmesini kullanın.',
93
- 'library.deleteFileHint': 'Dosyayı sil',
94
- 'library.del': 'SİL',
95
- 'toast.assetDeleted': '{name} silindi',
96
- 'modal.export': 'Dışa aktar',
97
- 'modal.exportTitle': 'Tabloya dayalı e-posta HTML’si',
98
- 'export.copy': 'Kopyala',
99
- 'export.copied': 'Kopyalandı',
100
- 'action.download': 'İndir',
101
- 'export.meta': '{kb} KB · tablolar + satır içi stiller · Outlook için güvenli genişlikler',
102
- 'modal.rawHtmlTitle': 'Ham HTML, canlı önizleme',
103
- 'code.statusEdited': 'Kod görünümü düzenlendi önizleme canlı, henüz uygulanmadı',
104
- 'code.statusSynced': 'Kod görünümü tuvalle senkronize',
105
- 'action.reload': 'Yeniden yükle',
106
- 'action.reloadHint': 'Kaynağı tuvalden yeniden yükle',
107
- 'action.applyToCanvas': 'Tuvale uygula',
108
- 'action.applyToCanvasHint': 'Kaynağı tekrar düzenlenebilir satırlara ayrıştır',
109
- 'action.closeWithoutApplyingHint': 'Uygulamadan kapat',
110
- 'code.source': 'Kaynak',
111
- 'code.livePreview': 'Canlı önizleme',
112
- 'code.liveHtmlPreviewTitle': 'Canlı HTML önizlemesi',
113
- 'code.applyNote':
114
- 'Uygulama, en üst düzey her tablo satırını, hâlâ seçebileceğiniz, yeniden sıralayabileceğiniz ve silebileceğiniz bir tuval satırına ayrıştırır elle yazılmış kod bu süreçten değişmeden çıkar.',
115
- 'code.meta': '{kb} KB · {lines} satır',
116
- 'toast.sourceReloaded': 'Kaynak tuvalden yeniden yüklendi',
117
- 'toast.sourceAppliedOne': 'Kaynak uygulandı — tuvalde 1 satır',
118
- 'toast.sourceAppliedMany': 'Kaynak uygulandı — tuvalde {rows} satır',
119
- 'toast.parseError': 'Bu HTML ayrıştırılamadı',
120
- 'modal.copyAssist': 'Metin asistanı',
121
- 'modal.draftCopyTitle': 'Bu kampanya için metin yazın',
122
- 'ai.goal': 'Hedef',
123
- 'ai.tone': 'Ton',
124
- 'ai.briefLabel': 'Bu e-posta ne hakkında?',
125
- 'ai.briefPlaceholder': 'örn. Sonbahar koleksiyonu, aboneler için %15, 150₺ üzeri ücretsiz kargo',
126
- 'ai.generate': 'Metin oluştur',
127
- 'ai.writing': 'Yazılıyor…',
128
- 'ai.kindHeadline': 'Başlık',
129
- 'ai.kindBody': 'Gövde metni',
130
- 'ai.kindButton': 'Düğme metni',
131
- 'ai.actionInsertHeading': 'Başlık olarak ekle',
132
- 'ai.actionInsertText': 'Metin bloğu olarak ekle',
133
- 'ai.actionInsertButton': 'Düğme olarak ekle',
134
- 'toast.headingAdded': 'Başlık eklendi',
135
- 'toast.textBlockAdded': 'Metin bloğu eklendi',
136
- 'toast.buttonAdded': 'Düğme eklendi',
137
- 'preview.kickerMobile': 'Önizlememobil 375px',
138
- 'preview.kickerDark': 'Önizleme koyu gelen kutusu',
139
- 'preview.kickerDesktop': 'Önizleme masaüstü {width}px',
140
- 'action.close': 'Kapat',
141
- 'toast.duplicated': 'Çoğaltıldı',
142
- 'toast.fileUploadedOne': '1 dosya yüklendi',
143
- 'toast.fileUploadedMany': '{count} dosya yüklendi',
144
- 'toast.imageReplaced': 'Görsel değiştirildi',
145
- 'toast.imageAdded': 'Görsel tuvale eklendi',
146
- 'toast.htmlCopied': 'HTML panoya kopyalandı',
147
- 'toast.templateLoaded': '{name} yüklendi',
148
- 'toast.snippetDefaultLabel': 'Snippet',
149
- 'toast.snippetInserted': '{name} eklendi',
150
- 'toast.snippetCopied': '{name} kopyalandı — eklemek için bir metin bloğu seçin',
151
- };
152
-
1
+ /** Turkish (Türkçe) — `tr`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
2
+ export const TR = {
3
+ 'action.undoHint': 'Geri al — ⌘Z',
4
+ 'action.redoHint': 'Yinele — ⌘⇧Z',
5
+ 'action.chromeToDark': 'Koyu',
6
+ 'action.chromeToLight': 'Açık',
7
+ 'action.chromeHint': 'Düzenleyici teması açık / koyu',
8
+ 'action.chromeHintToDark': 'Koyu mod',
9
+ 'action.chromeHintToLight': 'Açık mod',
10
+ 'action.aiDraft': 'Taslak',
11
+ 'action.aiDraftHint': 'E-posta içeriğini yapay zekâ ile yaz',
12
+ 'action.code': 'Kod',
13
+ 'action.codeHint': 'Ham HTML’yi canlı önizlemeyle düzenle',
14
+ 'action.preview': 'Önizleme',
15
+ 'action.previewHint': 'E-postayı önizleyin',
16
+ 'action.export': 'Dışa aktar',
17
+ 'action.exportHint': 'E-postanızı dışa aktarın',
18
+ 'device.desktop': 'Masaüstü',
19
+ 'device.desktopHint': 'Masaüstü genişliği',
20
+ 'device.mobile': 'Mobil',
21
+ 'device.mobileHint': 'Mobil genişliği',
22
+ 'status.autosaveOn': 'otomatik kayıt açık',
23
+ 'status.saved': 'kaydedildi {time}',
24
+ 'status.saveFailed': 'kaydedilmedi — depolama alanı dolu',
25
+ 'canvas.meta': '{rows} satır · {blocks} blok · {width}px',
26
+ 'tab.design': 'Stil',
27
+ 'tab.designHint': 'Seçimi biçimlendir',
28
+ 'tab.blocks': 'Bloklar',
29
+ 'tab.blocksHint': 'İçerik blokları ve değişkenler',
30
+ 'tab.rows': 'Bölümler',
31
+ 'tab.rowsHint': 'Bölüm düzenleri ve tuval modeli',
32
+ 'tab.files': 'Dosyalar',
33
+ 'tab.filesHint': 'Varlık kitaplığı',
34
+ 'tab.layers': 'Yapı',
35
+ 'tab.layersHint': 'Belge yapısı',
36
+ 'tab.settings': 'Ayarlar',
37
+ 'tab.settingsHint': 'E-posta ayarları',
38
+ 'tab.data': 'Değ.',
39
+ 'tab.dataHint': 'Kodunuz tarafından sağlanan değişkenler',
40
+ 'inspector.blockProperties': 'Blok özellikleri',
41
+ 'inspector.sectionProperties': 'Bölüm özellikleri',
42
+ 'inspector.title': 'Denetçi',
43
+ 'inspector.sectionLabel': 'Bölüm',
44
+ 'inspector.nothingSelected': 'Hiçbir şey seçilmedi',
45
+ 'action.duplicateHint': 'Çoğalt — ⌘D',
46
+ 'action.deleteHint': 'Sil ',
47
+ 'inspector.emptyBody':
48
+ 'Burada biçimlendirmek için tuval üzerinde bir satır veya blok seçin. Blokları <strong style="color: var(--ed-text); font-weight: 600;">Bloklar</strong> sekmesinden sürükleyin; herhangi bir metni doğrudan düzenlemek için üzerine çift tıklayın.',
49
+ 'inspector.shortcuts': 'Kısayollar',
50
+ 'shortcut.undoRedo': '⌘Z / ⌘⇧Z geri al, yinele',
51
+ 'shortcut.duplicate': '⌘Dseçimi çoğalt',
52
+ 'shortcut.delete': ' — seçimi sil',
53
+ 'shortcut.export': '⌘E — HTML dışa aktar',
54
+ 'shortcut.escape': 'ESC — seçimi kaldır, kapat',
55
+ 'blocks.dragHint': 'Tuvale sürükleyin',
56
+ 'blocks.count': '{count} blok',
57
+ 'rows.sectionLayouts': 'Bölüm düzenleri',
58
+ 'rows.customMarkup': 'Özel işaretleme',
59
+ 'rows.htmlRowHint': 'Eklemek için sürükleyin veya eklemek için tıklayın — ham HTML ile doldurduğunuz tam genişlikte bir satır',
60
+ 'rows.rawHtmlSection': 'Ham HTML bölümü',
61
+ 'rows.rawHtmlDesc': 'Tam genişlikte bölüm, kendi işaretlemeniz, hâlâ sürüklenebilir',
62
+ 'rows.canvasModel': 'Tuval modeli',
63
+ 'rows.modeRowBased': 'Satır tabanlı',
64
+ 'rows.modeFreeStack': 'Serbest yığın',
65
+ 'rows.hintRows':
66
+ 'Bölüm tabanlı: önce bir düzen bırakın, ardından sütunlarına bloklar bırakın her bölümün kendi arka planı, kenarlığı, flex veya ızgara ayarları vardır.',
67
+ 'rows.hintStack': 'Serbest yığın: düzen olmadan — bıraktığınız her blok, sırayla istiflenen kendi tam genişlikteki bölümü haline gelir.',
68
+ 'files.libraryCount': 'Kitaplık {count} dosya',
69
+ 'files.openManager': 'Dosya yöneticisini aç',
70
+ 'files.dragToCanvas': 'Görsel blok olarak yerleştirmek için herhangi bir dosyayı doğrudan tuvale sürükleyin.',
71
+ 'layers.structure': 'Yapı',
72
+ 'layers.sectionSingle': 'Bölüm',
73
+ 'layers.sectionMulti': 'Bölüm · {count} sütun',
74
+ 'layers.column': 'Sütun {index}',
75
+ 'layers.blockCount': '{count} blok',
76
+ 'vars.title': 'Değişkenler',
77
+ 'vars.fromCode': 'Kodunuzdan {count}',
78
+ 'vars.declaredNote': 'Uygulamanız tarafından tanımlandı tuval her zaman değeri değil, jetonu gösterir.',
79
+ 'vars.filterPlaceholder': 'Değişkenleri filtrele…',
80
+ 'vars.insertHint': 'Seçili metne, başlığa veya düğmeye eklemek için tıklayın',
81
+ 'vars.insert': 'ekle',
82
+ 'vars.noMatch': 'Bu filtreyle eşleşen değişken yok.',
83
+ 'vars.noneDeclared': 'Uygulamanız henüz herhangi bir değişken tanımlamadı.',
84
+ 'vars.rteHint': 'Metni düzenlerken, satır içi araç çubuğunun açılır menüsünden doğrudan bir değişken de seçebilirsiniz.',
85
+ 'modal.fileManager': 'Dosya yöneticisi',
86
+ 'modal.assetsTitle': 'Varlıklar',
87
+ 'modal.replaceImage': 'Görseli değiştir',
88
+ 'library.searchPlaceholder': 'Dosyaları ara…',
89
+ 'action.upload': 'Yükle',
90
+ 'library.clickToPlace': 'Yerleştirmek için bir dosyaya tıklayın · veya bir dosyayı tuvale sürükleyin',
91
+ 'library.clickToReplace': 'Seçili görseli değiştirmek için bir dosyaya tıklayın',
92
+ 'library.storageLabel': '{count} dosya · {size}',
93
+ 'library.folders': 'Klasörler',
94
+ 'library.dropHint': 'Yüklemek için görsel dosyalarını buraya bırakın — veya Yükle düğmesini kullanın.',
95
+ 'library.deleteFileHint': 'Dosyayı sil',
96
+ 'library.del': 'SİL',
97
+ 'toast.assetDeleted': '{name} silindi',
98
+ 'library.allFiles': 'Tüm dosyalar',
99
+ 'library.loadMore': 'Daha fazla yükle',
100
+ 'library.empty': 'Burada henüz dosya yok.',
101
+ 'storage.loading': 'Dosyalar yükleniyor…',
102
+ 'storage.uploading': '{count} yükleniyor…',
103
+ 'storage.errLoadFailed': 'Dosya kitaplığı yüklenemedi{reason}',
104
+ 'storage.errNoLimits': 'Yüklemeler kapalı: bu uygulama hiçbir yükleme sınırı belirlemedi.',
105
+ 'storage.errNoAccept': 'Yüklemeler kapalı: hiçbir dosya biçimine izin verilmedi.',
106
+ 'storage.errNoMaxBytes': 'Yüklemeler kapalı: en büyük dosya boyutu belirlenmedi.',
107
+ 'storage.errTooLarge': '{name} {size} — sınır {max}.',
108
+ 'storage.errFormat': '{name} bir {type} dosyası ve burada izin verilmiyor.',
109
+ 'storage.errSvg': '{name} bir SVG ve bu uygulama SVG kabul etmiyor.',
110
+ 'storage.errDimensions': '{name} {w}×{ht}px — sınır {maxW}×{maxH}px.',
111
+ 'storage.errTooMany': 'Bir seferde yalnızca {max} dosya yüklenebilir.',
112
+ 'storage.errUnreadable': '{name} okunabilir bir görsel değil.',
113
+ 'storage.errUploadFailed': '{name} yüklenemedi — {reason}',
114
+ 'storage.errDeleteFailed': '{name} silinemedi{reason}',
115
+ 'modal.export': 'Dışa aktar',
116
+ 'modal.exportTitle': 'Tabloya dayalı e-posta HTML’si',
117
+ 'export.copy': 'Kopyala',
118
+ 'export.copied': 'Kopyalandı',
119
+ 'action.download': 'İndir',
120
+ 'export.meta': '{kb} KB · tablolar + satır içi stiller · Outlook için güvenli genişlikler',
121
+ 'modal.rawHtmlTitle': 'Ham HTML, canlı önizleme',
122
+ 'code.statusEdited': 'Kod görünümü — düzenlendi — önizleme canlı, henüz uygulanmadı',
123
+ 'code.statusSynced': 'Kod görünümü — tuvalle senkronize',
124
+ 'action.reload': 'Yeniden yükle',
125
+ 'action.reloadHint': 'Kaynağı tuvalden yeniden yükle',
126
+ 'action.applyToCanvas': 'Tuvale uygula',
127
+ 'action.applyToCanvasHint': 'Kaynağı tekrar düzenlenebilir satırlara ayrıştır',
128
+ 'action.closeWithoutApplyingHint': 'Uygulamadan kapat',
129
+ 'code.source': 'Kaynak',
130
+ 'code.livePreview': 'Canlı önizleme',
131
+ 'code.liveHtmlPreviewTitle': 'Canlı HTML önizlemesi',
132
+ 'code.applyNote':
133
+ 'Uygulama, en üst düzey her tablo satırını, hâlâ seçebileceğiniz, yeniden sıralayabileceğiniz ve silebileceğiniz bir tuval satırına ayrıştırır — elle yazılmış kod bu süreçten değişmeden çıkar.',
134
+ 'code.meta': '{kb} KB · {lines} satır',
135
+ 'toast.sourceReloaded': 'Kaynak tuvalden yeniden yüklendi',
136
+ 'toast.sourceAppliedOne': 'Kaynak uygulandı — tuvalde 1 satır',
137
+ 'toast.sourceAppliedMany': 'Kaynak uygulandı tuvalde {rows} satır',
138
+ 'toast.parseError': 'Bu HTML ayrıştırılamadı',
139
+ 'modal.aiDraft': 'Yapay zekâ yazma asistanı',
140
+ 'modal.aiDraftTitle': 'E-postanızı yapay zekâ ile yazın',
141
+ 'ai.disclosure': 'Yapay zekâ, özetinizden öneriler üretir. Göndermeden önce sonucu gözden geçirin ve düzenleyin.',
142
+ 'ai.goal': 'Hedef',
143
+ 'ai.tone': 'Ton',
144
+ 'ai.briefLabel': 'Bu e-posta ne hakkında?',
145
+ 'ai.briefPlaceholder': 'örn. Sonbahar koleksiyonu, aboneler için %15, 150₺ üzeri ücretsiz kargo',
146
+ 'ai.generate': 'Metin oluştur',
147
+ 'ai.writing': 'Yazılıyor…',
148
+ 'ai.kindHeadline': 'Başlık',
149
+ 'ai.kindBody': 'Gövde metni',
150
+ 'ai.kindButton': 'Düğme metni',
151
+ 'ai.actionInsertHeading': 'Başlık olarak ekle',
152
+ 'ai.actionInsertText': 'Metin bloğu olarak ekle',
153
+ 'ai.actionInsertButton': 'Düğme olarak ekle',
154
+ 'toast.headingAdded': 'Başlık eklendi',
155
+ 'toast.textBlockAdded': 'Metin bloğu eklendi',
156
+ 'toast.buttonAdded': 'Düğme eklendi',
157
+ 'preview.kickerMobile': 'Önizleme — mobil 375px',
158
+ 'preview.kickerDesktop': 'Önizleme — masaüstü {width}px',
159
+ 'action.close': 'Kapat',
160
+ 'toast.duplicated': 'Çoğaltıldı',
161
+ 'toast.fileUploadedOne': '1 dosya yüklendi',
162
+ 'toast.fileUploadedMany': '{count} dosya yüklendi',
163
+ 'toast.imageReplaced': 'Görsel değiştirildi',
164
+ 'toast.imageAdded': 'Görsel tuvale eklendi',
165
+ 'toast.htmlCopied': 'HTML panoya kopyalandı',
166
+ 'toast.templateLoaded': '{name} yüklendi',
167
+ 'toast.snippetDefaultLabel': 'Snippet',
168
+ 'toast.snippetInserted': '{name} eklendi',
169
+ 'toast.snippetCopied': '{name} kopyalandı — eklemek için bir metin bloğu seçin',
170
+ 'rte.textStyle': 'Metin stili',
171
+ 'rte.mergeTags': 'Birleştirme alanları',
172
+ 'rte.noMergeTags': 'Kullanılabilir birleştirme alanı yok',
173
+ 'rte.textColor': 'Metin rengi',
174
+ 'rte.highlightColor': 'Vurgu rengi',
175
+ 'rte.removeHighlight': 'Vurguyu kaldır',
176
+ 'rte.clearFormatting': 'Biçimlendirmeyi temizle',
177
+ 'action.downloadPng': 'PNG indir',
178
+ 'action.screenshot': 'Ekran görüntüsü',
179
+ 'action.screenshotHint': 'Şablonun tamamını görsel olarak görün, sonra indirin',
180
+ 'toast.pngSaved': 'Ekran görüntüsü indirildi',
181
+ 'toast.pngFailed': 'Ekran görüntüsü alınamadı — dış bir görsel yüklenemedi',
182
+ 'toast.pngCopied': 'Ekran görüntüsü panoya kopyalandı',
183
+ 'toast.pngCopyFailed': 'Bu tarayıcı panoya görsel almayı kabul etmedi',
184
+ 'story.kicker': 'Ekran görüntüsü',
185
+ 'story.rendering': 'Ekran görüntüsü oluşturuluyor',
186
+ 'story.renderingHint': 'Her blok 2× çiziliyor — uzun bir şablonda bu biraz sürer.',
187
+ 'story.failed': 'Ekran görüntüsü alınamadı',
188
+ 'story.failedHint': 'Şablondaki bir görsel, yakalama için yüklenemedi.',
189
+ 'story.retry': 'Yeniden deneyin',
190
+ 'story.play': 'Oynat',
191
+ 'story.pause': 'Duraklat',
192
+ 'story.replay': 'Yeniden oynat',
193
+ 'story.copy': 'Kopyala',
194
+ 'story.meta': '{w}×{h} · ekran {i}/{n}',
195
+ 'footer.poweredBy': 'SELISE Blocks tarafından desteklenir © 2026',
196
+ };