@seliseblocks/mailcraft 0.1.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 (89) hide show
  1. package/DOCS.md +557 -0
  2. package/LICENSE +21 -0
  3. package/README.md +126 -0
  4. package/dist/mailcraft-editor.bundle.js +519 -0
  5. package/dist/mailcraft-editor.bundle.js.map +7 -0
  6. package/examples/templates/activate-your-account.html +54 -0
  7. package/examples/templates/back-in-stock.html +63 -0
  8. package/examples/templates/cart-left-behind.html +74 -0
  9. package/examples/templates/community-giveaway.html +81 -0
  10. package/examples/templates/frontend-futures-invite.html +69 -0
  11. package/examples/templates/give-25-get-25.html +69 -0
  12. package/examples/templates/invoice-paid.html +77 -0
  13. package/examples/templates/meet-nova-launch.html +69 -0
  14. package/examples/templates/mega-weekend-sale.html +57 -0
  15. package/examples/templates/order-confirmed.html +80 -0
  16. package/examples/templates/rate-your-headphones.html +71 -0
  17. package/examples/templates/reset-your-password.html +54 -0
  18. package/examples/templates/thankyou-promo-code.html +68 -0
  19. package/examples/templates/the-sunday-brief.html +47 -0
  20. package/examples/templates/welcome-to-your-workspace.html +62 -0
  21. package/examples/templates/your-order-shipped.html +74 -0
  22. package/examples/templates/your-password-was-changed.html +58 -0
  23. package/examples/templates/your-signin-code.html +58 -0
  24. package/examples/vanilla.html +1574 -0
  25. package/package.json +66 -0
  26. package/src/core/accent.js +194 -0
  27. package/src/core/assets.js +15 -0
  28. package/src/core/binder.js +119 -0
  29. package/src/core/blocks.js +256 -0
  30. package/src/core/css-cascade.js +117 -0
  31. package/src/core/editor-core.js +1492 -0
  32. package/src/core/export.js +58 -0
  33. package/src/core/footer.js +73 -0
  34. package/src/core/i18n/ar.js +177 -0
  35. package/src/core/i18n/bg.js +152 -0
  36. package/src/core/i18n/bn.js +176 -0
  37. package/src/core/i18n/ca.js +152 -0
  38. package/src/core/i18n/cs.js +152 -0
  39. package/src/core/i18n/da.js +152 -0
  40. package/src/core/i18n/de-CH.js +152 -0
  41. package/src/core/i18n/de.js +152 -0
  42. package/src/core/i18n/dz.js +179 -0
  43. package/src/core/i18n/el.js +152 -0
  44. package/src/core/i18n/en.js +269 -0
  45. package/src/core/i18n/es.js +152 -0
  46. package/src/core/i18n/et.js +152 -0
  47. package/src/core/i18n/fi.js +152 -0
  48. package/src/core/i18n/fr.js +152 -0
  49. package/src/core/i18n/hr.js +152 -0
  50. package/src/core/i18n/hu.js +152 -0
  51. package/src/core/i18n/index.js +83 -0
  52. package/src/core/i18n/it.js +152 -0
  53. package/src/core/i18n/lt.js +152 -0
  54. package/src/core/i18n/lv.js +152 -0
  55. package/src/core/i18n/nb.js +152 -0
  56. package/src/core/i18n/nl.js +152 -0
  57. package/src/core/i18n/pl.js +152 -0
  58. package/src/core/i18n/pt.js +152 -0
  59. package/src/core/i18n/ro.js +152 -0
  60. package/src/core/i18n/ru.js +152 -0
  61. package/src/core/i18n/sk.js +152 -0
  62. package/src/core/i18n/sl.js +152 -0
  63. package/src/core/i18n/sv.js +152 -0
  64. package/src/core/i18n/tables.js +50 -0
  65. package/src/core/i18n/tr.js +152 -0
  66. package/src/core/i18n/uk.js +152 -0
  67. package/src/core/icons.js +235 -0
  68. package/src/core/ids.js +1 -0
  69. package/src/core/import-html.js +959 -0
  70. package/src/core/layout-style.js +115 -0
  71. package/src/core/parse.js +10 -0
  72. package/src/core/placeholder.js +15 -0
  73. package/src/core/sanitize.js +141 -0
  74. package/src/core/storage-limits.js +184 -0
  75. package/src/core/storage.js +85 -0
  76. package/src/core/theme.js +1 -0
  77. package/src/core/toolbar.js +67 -0
  78. package/src/core/variables.js +11 -0
  79. package/src/create-editor.js +109 -0
  80. package/src/index.js +9 -0
  81. package/src/mailcraft-editor.js +1862 -0
  82. package/src/render/block-body.js +295 -0
  83. package/src/render/canvas.js +284 -0
  84. package/src/render/fields.js +609 -0
  85. package/src/render/focus-preserve.js +158 -0
  86. package/src/render/rte.js +212 -0
  87. package/src/render/screenshot.js +132 -0
  88. package/src/render/story.js +415 -0
  89. package/src/render/style.js +452 -0
@@ -0,0 +1,152 @@
1
+ /** Slovenian (Slovenščina) — `sl`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
2
+ export const SL = {
3
+ 'action.undoHint': 'Razveljavi — ⌘Z',
4
+ 'action.redoHint': 'Ponovi — ⌘⇧Z',
5
+ 'action.chromeToDark': 'Temno',
6
+ 'action.chromeToLight': 'Svetlo',
7
+ 'action.chromeHint': 'Tema urejevalnika svetla / temna',
8
+ 'action.aiCopy': 'Besedilo',
9
+ 'action.aiCopyHint': 'Napiši besedilo z UI',
10
+ 'action.code': 'Koda',
11
+ 'action.codeHint': 'Uredi surovi HTML z ogledom v živo',
12
+ 'action.preview': 'Predogled',
13
+ 'action.export': 'Izvozi',
14
+ 'device.desktop': 'Namizje',
15
+ 'device.desktopHint': 'Širina za namizje',
16
+ 'device.mobile': 'Mobilna naprava',
17
+ 'device.mobileHint': 'Širina za mobilno napravo',
18
+ 'device.dark': 'Temno',
19
+ 'device.darkHint': 'Temen način nabiralnika',
20
+ 'status.autosaveOn': 'samodejno shranjevanje vklopljeno',
21
+ 'status.saved': 'shranjeno {time}',
22
+ 'status.saveFailed': 'ni shranjeno — pomnilnik je poln',
23
+ 'canvas.meta': '{rows} vrstic · {blocks} blokov · {width}px',
24
+ 'tab.design': 'Slog',
25
+ 'tab.designHint': 'Oblikuj izbor',
26
+ 'tab.blocks': 'Bloki',
27
+ 'tab.blocksHint': 'Vsebinski bloki in spremenljivke',
28
+ 'tab.rows': 'Odseki',
29
+ 'tab.rowsHint': 'Postavitve odsekov in model platna',
30
+ 'tab.files': 'Datoteke',
31
+ 'tab.filesHint': 'Knjižnica virov',
32
+ 'tab.layers': 'Struktura',
33
+ 'tab.layersHint': 'Struktura dokumenta',
34
+ 'tab.theme': 'Tema',
35
+ 'tab.themeHint': 'Globalni slogi',
36
+ 'tab.data': 'Spr.',
37
+ 'tab.dataHint': 'Spremenljivke, ki jih zagotavlja vaša koda',
38
+ 'inspector.blockProperties': 'Lastnosti bloka',
39
+ 'inspector.sectionProperties': 'Lastnosti odseka',
40
+ 'inspector.title': 'Inšpektor',
41
+ 'inspector.sectionLabel': 'Odsek',
42
+ 'inspector.nothingSelected': 'Nič ni izbrano',
43
+ 'action.duplicateHint': 'Podvoji — ⌘D',
44
+ 'action.deleteHint': 'Izbriši — ⌫',
45
+ 'inspector.emptyBody':
46
+ 'Izberite vrstico ali blok na platnu, da ga oblikujete tukaj. Povlecite bloke iz zavihka <strong style="color: var(--ed-text); font-weight: 600;">Bloki</strong>; dvokliknite besedilo za urejanje na mestu.',
47
+ 'inspector.shortcuts': 'Bližnjice',
48
+ 'shortcut.undoRedo': '⌘Z / ⌘⇧Z — razveljavi, ponovi',
49
+ 'shortcut.duplicate': '⌘D — podvoji izbor',
50
+ 'shortcut.delete': '⌫ — izbriši izbor',
51
+ 'shortcut.export': '⌘E — izvozi HTML',
52
+ 'shortcut.escape': 'ESC — prekliči izbor, zapri',
53
+ 'blocks.dragHint': 'Povlecite na platno',
54
+ 'blocks.count': '{count} blokov',
55
+ 'rows.sectionLayouts': 'Postavitve odsekov',
56
+ 'rows.customMarkup': 'Lastna koda',
57
+ 'rows.htmlRowHint': 'Povlecite za vstavitev ali kliknite za dodajanje — vrstica čez celo širino, ki jo zapolnite s surovim HTML-jem',
58
+ 'rows.rawHtmlSection': 'Odsek s surovim HTML-jem',
59
+ 'rows.rawHtmlDesc': 'Odsek čez celo širino, vaša lastna koda, še vedno vlečljiv',
60
+ 'rows.canvasModel': 'Model platna',
61
+ 'rows.modeRowBased': 'Temelji na vrsticah',
62
+ 'rows.modeFreeStack': 'Prosti sklad',
63
+ 'rows.hintRows':
64
+ 'Temelji na odsekih: najprej spustite postavitev, nato bloke v njene stolpce — vsak odsek ima lastno ozadje, rob, nastavitve flex ali mreže.',
65
+ 'rows.hintStack': 'Prosti sklad: brez postavitev — vsak spuščen blok postane lasten odsek čez celo širino, zložen po vrsti.',
66
+ 'files.libraryCount': 'Knjižnica — {count} datotek',
67
+ 'files.openManager': 'Odpri upravitelja datotek',
68
+ 'files.dragToCanvas': 'Povlecite katero koli datoteko neposredno na platno, da jo postavite kot slikovni blok.',
69
+ 'layers.structure': 'Struktura',
70
+ 'layers.sectionSingle': 'Odsek',
71
+ 'layers.sectionMulti': 'Odsek · {count} stolpcev',
72
+ 'layers.blockCount': '{count} bl.',
73
+ 'theme.globalStyles': 'Globalni slogi',
74
+ 'vars.title': 'Spremenljivke',
75
+ 'vars.fromCode': '{count} iz vaše kode',
76
+ 'vars.declaredNote': 'Deklarirane s strani vaše aplikacije — platno vedno prikaže žeton, nikoli vrednosti.',
77
+ 'vars.filterPlaceholder': 'Filtriraj spremenljivke…',
78
+ 'vars.insertHint': 'Kliknite za vstavitev v izbrano besedilo, naslov ali gumb',
79
+ 'vars.insert': 'vstavi',
80
+ 'vars.noMatch': 'Nobena spremenljivka ne ustreza temu filtru.',
81
+ 'vars.noneDeclared': 'Vaša aplikacija še ni deklarirala nobenih spremenljivk.',
82
+ 'vars.rteHint': 'Med urejanjem besedila lahko spremenljivko izberete tudi neposredno iz spustnega menija vgrajene orodne vrstice.',
83
+ 'modal.fileManager': 'Upravitelj datotek',
84
+ 'modal.assetsTitle': 'Viri',
85
+ 'modal.replaceImage': 'Zamenjaj sliko',
86
+ 'library.searchPlaceholder': 'Iskanje datotek…',
87
+ 'action.upload': 'Naloži',
88
+ 'library.clickToPlace': 'Kliknite datoteko za postavitev · ali povlecite datoteko na platno',
89
+ 'library.clickToReplace': 'Kliknite datoteko za zamenjavo izbrane slike',
90
+ 'library.storageLabel': '{count} datotek · {size}',
91
+ 'library.folders': 'Mape',
92
+ 'library.dropHint': 'Sem spustite slikovne datoteke za nalaganje — ali uporabite gumb Naloži.',
93
+ 'library.deleteFileHint': 'Izbriši datoteko',
94
+ 'library.del': 'IZBR',
95
+ 'toast.assetDeleted': '{name} izbrisano',
96
+ 'modal.export': 'Izvozi',
97
+ 'modal.exportTitle': 'HTML e-pošte na osnovi tabel',
98
+ 'export.copy': 'Kopiraj',
99
+ 'export.copied': 'Kopirano',
100
+ 'action.download': 'Prenesi',
101
+ 'export.meta': '{kb} KB · tabele + vgrajeni slogi · širine, varne za Outlook',
102
+ 'modal.rawHtmlTitle': 'Surovi HTML, ogled v živo',
103
+ 'code.statusEdited': 'Pogled kode — urejeno — ogled v živo, še ni uporabljeno',
104
+ 'code.statusSynced': 'Pogled kode — usklajeno s platnom',
105
+ 'action.reload': 'Znova naloži',
106
+ 'action.reloadHint': 'Znova naloži vir s platna',
107
+ 'action.applyToCanvas': 'Uporabi na platnu',
108
+ 'action.applyToCanvasHint': 'Znova razčleni vir v uredljive vrstice',
109
+ 'action.closeWithoutApplyingHint': 'Zapri brez uporabe',
110
+ 'code.source': 'Vir',
111
+ 'code.livePreview': 'Ogled v živo',
112
+ 'code.liveHtmlPreviewTitle': 'Ogled HTML v živo',
113
+ 'code.applyNote':
114
+ 'Uporabi razčleni vsako vrstico tabele najvišje ravni v vrstico platna, ki jo lahko še vedno izberete, prerazporedite in izbrišete — ročno napisana koda postopek preživi nespremenjena.',
115
+ 'code.meta': '{kb} KB · {lines} vrstic',
116
+ 'toast.sourceReloaded': 'Vir znova naložen s platna',
117
+ 'toast.sourceAppliedOne': 'Vir uporabljen — 1 vrstica na platnu',
118
+ 'toast.sourceAppliedMany': 'Vir uporabljen — {rows} vrstic na platnu',
119
+ 'toast.parseError': 'Tega HTML-ja ni bilo mogoče razčleniti',
120
+ 'modal.copyAssist': 'Pomočnik za besedilo',
121
+ 'modal.draftCopyTitle': 'Napiši besedilo za to kampanjo',
122
+ 'ai.goal': 'Cilj',
123
+ 'ai.tone': 'Ton',
124
+ 'ai.briefLabel': 'O čem govori ta e-pošta?',
125
+ 'ai.briefPlaceholder': 'npr. jesenska kolekcija, 15 % za naročnike, brezplačna dostava nad 150 €',
126
+ 'ai.generate': 'Ustvari besedilo',
127
+ 'ai.writing': 'Pisanje…',
128
+ 'ai.kindHeadline': 'Naslov',
129
+ 'ai.kindBody': 'Glavno besedilo',
130
+ 'ai.kindButton': 'Besedilo gumba',
131
+ 'ai.actionInsertHeading': 'Vstavi kot naslov',
132
+ 'ai.actionInsertText': 'Vstavi kot besedilni blok',
133
+ 'ai.actionInsertButton': 'Vstavi kot gumb',
134
+ 'toast.headingAdded': 'Naslov dodan',
135
+ 'toast.textBlockAdded': 'Besedilni blok dodan',
136
+ 'toast.buttonAdded': 'Gumb dodan',
137
+ 'preview.kickerMobile': 'Predogled — mobilna naprava 375px',
138
+ 'preview.kickerDark': 'Predogled — temen nabiralnik',
139
+ 'preview.kickerDesktop': 'Predogled — namizje {width}px',
140
+ 'action.close': 'Zapri',
141
+ 'toast.duplicated': 'Podvojeno',
142
+ 'toast.fileUploadedOne': 'Naložena 1 datoteka',
143
+ 'toast.fileUploadedMany': 'Naloženih {count} datotek',
144
+ 'toast.imageReplaced': 'Slika zamenjana',
145
+ 'toast.imageAdded': 'Slika dodana na platno',
146
+ 'toast.htmlCopied': 'HTML kopiran v odložišče',
147
+ 'toast.templateLoaded': '{name} naloženo',
148
+ 'toast.snippetDefaultLabel': 'Odlomek',
149
+ 'toast.snippetInserted': '{name} vstavljeno',
150
+ 'toast.snippetCopied': '{name} kopirano — izberite besedilni blok za vstavitev',
151
+ };
152
+
@@ -0,0 +1,152 @@
1
+ /** Swedish (Svenska) — `sv`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
2
+ export const SV = {
3
+ 'action.undoHint': 'Ångra — ⌘Z',
4
+ 'action.redoHint': 'Gör om — ⌘⇧Z',
5
+ 'action.chromeToDark': 'Mörkt',
6
+ 'action.chromeToLight': 'Ljust',
7
+ 'action.chromeHint': 'Redigerartema ljust / mörkt',
8
+ 'action.aiCopy': 'Text',
9
+ 'action.aiCopyHint': 'Skriv text med AI',
10
+ 'action.code': 'Kod',
11
+ 'action.codeHint': 'Redigera rå HTML med direktförhandsgranskning',
12
+ 'action.preview': 'Förhandsgranskning',
13
+ 'action.export': 'Exportera',
14
+ 'device.desktop': 'Dator',
15
+ 'device.desktopHint': 'Datorbredd',
16
+ 'device.mobile': 'Mobil',
17
+ 'device.mobileHint': 'Mobilbredd',
18
+ 'device.dark': 'Mörkt',
19
+ 'device.darkHint': 'Mörkt läge för inkorgen',
20
+ 'status.autosaveOn': 'automatisk sparning på',
21
+ 'status.saved': 'sparat {time}',
22
+ 'status.saveFailed': 'sparades inte — lagringen är full',
23
+ 'canvas.meta': '{rows} rader · {blocks} block · {width}px',
24
+ 'tab.design': 'Stil',
25
+ 'tab.designHint': 'Stila markeringen',
26
+ 'tab.blocks': 'Block',
27
+ 'tab.blocksHint': 'Innehållsblock och variabler',
28
+ 'tab.rows': 'Sektioner',
29
+ 'tab.rowsHint': 'Sektionslayouter och canvasmodell',
30
+ 'tab.files': 'Filer',
31
+ 'tab.filesHint': 'Resursbibliotek',
32
+ 'tab.layers': 'Struktur',
33
+ 'tab.layersHint': 'Dokumentstruktur',
34
+ 'tab.theme': 'Tema',
35
+ 'tab.themeHint': 'Globala stilar',
36
+ 'tab.data': 'Var.',
37
+ 'tab.dataHint': 'Variabler som tillhandahålls av din kod',
38
+ 'inspector.blockProperties': 'Blockegenskaper',
39
+ 'inspector.sectionProperties': 'Sektionsegenskaper',
40
+ 'inspector.title': 'Inspektör',
41
+ 'inspector.sectionLabel': 'Sektion',
42
+ 'inspector.nothingSelected': 'Inget markerat',
43
+ 'action.duplicateHint': 'Duplicera — ⌘D',
44
+ 'action.deleteHint': 'Ta bort — ⌫',
45
+ 'inspector.emptyBody':
46
+ 'Välj en rad eller ett block på canvasen för att stila det här. Dra block från fliken <strong style="color: var(--ed-text); font-weight: 600;">Block</strong>; dubbelklicka på valfri text för att redigera direkt.',
47
+ 'inspector.shortcuts': 'Genvägar',
48
+ 'shortcut.undoRedo': '⌘Z / ⌘⇧Z — ångra, gör om',
49
+ 'shortcut.duplicate': '⌘D — duplicera markering',
50
+ 'shortcut.delete': '⌫ — ta bort markering',
51
+ 'shortcut.export': '⌘E — exportera HTML',
52
+ 'shortcut.escape': 'ESC — avmarkera, stäng',
53
+ 'blocks.dragHint': 'Dra till canvasen',
54
+ 'blocks.count': '{count} block',
55
+ 'rows.sectionLayouts': 'Sektionslayouter',
56
+ 'rows.customMarkup': 'Anpassad kod',
57
+ 'rows.htmlRowHint': 'Dra för att infoga, eller klicka för att lägga till — en rad i full bredd som du fyller med rå HTML',
58
+ 'rows.rawHtmlSection': 'Rå HTML-sektion',
59
+ 'rows.rawHtmlDesc': 'Sektion i full bredd, din egen kod, fortfarande dragbar',
60
+ 'rows.canvasModel': 'Canvasmodell',
61
+ 'rows.modeRowBased': 'Radbaserad',
62
+ 'rows.modeFreeStack': 'Fri stapel',
63
+ 'rows.hintRows':
64
+ 'Sektionsbaserad: släpp en layout först, sedan block i dess kolumner — varje sektion har egen bakgrund, kant, flex- eller rutnätsinställningar.',
65
+ 'rows.hintStack': 'Fri stapel: utan layouter — varje block du släpper blir sin egen sektion i full bredd, staplad i ordning.',
66
+ 'files.libraryCount': 'Bibliotek — {count} filer',
67
+ 'files.openManager': 'Öppna filhanteraren',
68
+ 'files.dragToCanvas': 'Dra valfri fil direkt till canvasen för att placera den som ett bildblock.',
69
+ 'layers.structure': 'Struktur',
70
+ 'layers.sectionSingle': 'Sektion',
71
+ 'layers.sectionMulti': 'Sektion · {count} kol.',
72
+ 'layers.blockCount': '{count} block',
73
+ 'theme.globalStyles': 'Globala stilar',
74
+ 'vars.title': 'Variabler',
75
+ 'vars.fromCode': '{count} från din kod',
76
+ 'vars.declaredNote': 'Deklarerade av din applikation — canvasen visar alltid token, aldrig ett värde.',
77
+ 'vars.filterPlaceholder': 'Filtrera variabler…',
78
+ 'vars.insertHint': 'Klicka för att infoga i markerad text, rubrik eller knapp',
79
+ 'vars.insert': 'infoga',
80
+ 'vars.noMatch': 'Ingen variabel matchar det filtret.',
81
+ 'vars.noneDeclared': 'Din applikation har ännu inte deklarerat några variabler.',
82
+ 'vars.rteHint': 'När du redigerar text kan du också välja en variabel direkt från rullgardinsmenyn i den inbäddade verktygsfältet.',
83
+ 'modal.fileManager': 'Filhanterare',
84
+ 'modal.assetsTitle': 'Resurser',
85
+ 'modal.replaceImage': 'Ersätt bild',
86
+ 'library.searchPlaceholder': 'Sök filer…',
87
+ 'action.upload': 'Ladda upp',
88
+ 'library.clickToPlace': 'Klicka på en fil för att placera den · eller dra en fil till canvasen',
89
+ 'library.clickToReplace': 'Klicka på en fil för att ersätta den markerade bilden',
90
+ 'library.storageLabel': '{count} filer · {size}',
91
+ 'library.folders': 'Mappar',
92
+ 'library.dropHint': 'Släpp bildfiler här för att ladda upp — eller använd knappen Ladda upp.',
93
+ 'library.deleteFileHint': 'Ta bort fil',
94
+ 'library.del': 'RADERA',
95
+ 'toast.assetDeleted': '{name} borttagen',
96
+ 'modal.export': 'Exportera',
97
+ 'modal.exportTitle': 'Tabellbaserad e-post-HTML',
98
+ 'export.copy': 'Kopiera',
99
+ 'export.copied': 'Kopierat',
100
+ 'action.download': 'Ladda ner',
101
+ 'export.meta': '{kb} KB · tabeller + inline-stilar · Outlook-säkra bredder',
102
+ 'modal.rawHtmlTitle': 'Rå HTML, direktförhandsgranskning',
103
+ 'code.statusEdited': 'Kodvy — redigerad — förhandsgranskning live, inte tillämpad ännu',
104
+ 'code.statusSynced': 'Kodvy — synkroniserad med canvasen',
105
+ 'action.reload': 'Läs om',
106
+ 'action.reloadHint': 'Läs om källan från canvasen',
107
+ 'action.applyToCanvas': 'Tillämpa på canvas',
108
+ 'action.applyToCanvasHint': 'Tolka källan tillbaka till redigerbara rader',
109
+ 'action.closeWithoutApplyingHint': 'Stäng utan att tillämpa',
110
+ 'code.source': 'Källa',
111
+ 'code.livePreview': 'Direktförhandsgranskning',
112
+ 'code.liveHtmlPreviewTitle': 'Direkt HTML-förhandsgranskning',
113
+ 'code.applyNote':
114
+ 'Tillämpa tolkar varje tabellrad på toppnivå till en canvasrad som du fortfarande kan markera, ordna om och ta bort — handskriven kod överlever processen oförändrad.',
115
+ 'code.meta': '{kb} KB · {lines} rader',
116
+ 'toast.sourceReloaded': 'Källan omladdad från canvasen',
117
+ 'toast.sourceAppliedOne': 'Källa tillämpad — 1 rad på canvasen',
118
+ 'toast.sourceAppliedMany': 'Källa tillämpad — {rows} rader på canvasen',
119
+ 'toast.parseError': 'Kunde inte tolka den HTML-koden',
120
+ 'modal.copyAssist': 'Textassistent',
121
+ 'modal.draftCopyTitle': 'Skriv text för denna kampanj',
122
+ 'ai.goal': 'Mål',
123
+ 'ai.tone': 'Ton',
124
+ 'ai.briefLabel': 'Vad handlar det här mejlet om?',
125
+ 'ai.briefPlaceholder': 't.ex. Höstkollektion, 15% för prenumeranter, fri frakt över 1500 kr',
126
+ 'ai.generate': 'Generera text',
127
+ 'ai.writing': 'Skriver…',
128
+ 'ai.kindHeadline': 'Rubrik',
129
+ 'ai.kindBody': 'Brödtext',
130
+ 'ai.kindButton': 'Knapptext',
131
+ 'ai.actionInsertHeading': 'Infoga som rubrik',
132
+ 'ai.actionInsertText': 'Infoga som textblock',
133
+ 'ai.actionInsertButton': 'Infoga som knapp',
134
+ 'toast.headingAdded': 'Rubrik tillagd',
135
+ 'toast.textBlockAdded': 'Textblock tillagt',
136
+ 'toast.buttonAdded': 'Knapp tillagd',
137
+ 'preview.kickerMobile': 'Förhandsgranskning — mobil 375px',
138
+ 'preview.kickerDark': 'Förhandsgranskning — mörk inkorg',
139
+ 'preview.kickerDesktop': 'Förhandsgranskning — dator {width}px',
140
+ 'action.close': 'Stäng',
141
+ 'toast.duplicated': 'Duplicerad',
142
+ 'toast.fileUploadedOne': '1 fil uppladdad',
143
+ 'toast.fileUploadedMany': '{count} filer uppladdade',
144
+ 'toast.imageReplaced': 'Bild ersatt',
145
+ 'toast.imageAdded': 'Bild tillagd på canvasen',
146
+ 'toast.htmlCopied': 'HTML kopierad till urklipp',
147
+ 'toast.templateLoaded': '{name} inläst',
148
+ 'toast.snippetDefaultLabel': 'Snutt',
149
+ 'toast.snippetInserted': '{name} infogad',
150
+ 'toast.snippetCopied': '{name} kopierad — markera ett textblock för att infoga den',
151
+ };
152
+
@@ -0,0 +1,50 @@
1
+ import { EN } from './en.js';
2
+ import { AR } from './ar.js';
3
+ import { BG } from './bg.js';
4
+ import { BN } from './bn.js';
5
+ import { CA } from './ca.js';
6
+ import { CS } from './cs.js';
7
+ import { DA } from './da.js';
8
+ import { DE } from './de.js';
9
+ import { DE_CH } from './de-CH.js';
10
+ import { DZ } from './dz.js';
11
+ import { EL } from './el.js';
12
+ import { ES } from './es.js';
13
+ import { ET } from './et.js';
14
+ import { FI } from './fi.js';
15
+ import { FR } from './fr.js';
16
+ import { HR } from './hr.js';
17
+ import { HU } from './hu.js';
18
+ import { IT } from './it.js';
19
+ import { LT } from './lt.js';
20
+ import { LV } from './lv.js';
21
+ import { NB } from './nb.js';
22
+ import { NL } from './nl.js';
23
+ import { PL } from './pl.js';
24
+ import { PT } from './pt.js';
25
+ import { RO } from './ro.js';
26
+ import { RU } from './ru.js';
27
+ import { SK } from './sk.js';
28
+ import { SL } from './sl.js';
29
+ import { SV } from './sv.js';
30
+ import { TR } from './tr.js';
31
+ import { UK } from './uk.js';
32
+
33
+ /**
34
+ * Every shipped message table, keyed by the same tag `LOCALES` (index.js)
35
+ * lists -- what lets the element resolve its `locale` attribute to a table on
36
+ * its own, so a host switches language by setting one attribute instead of
37
+ * importing and assigning a table by hand.
38
+ *
39
+ * Deliberately a separate module from index.js's metadata-only `LOCALES`:
40
+ * importing this one pulls all translations in. The element accepts that
41
+ * (host-driven language is worth it, and the demo bundle carries every module
42
+ * anyway); a size-sensitive host that bypasses the attribute can still
43
+ * deep-import a single `core/i18n/<tag>.js` and assign `.messages` itself.
44
+ */
45
+ export const LOCALE_TABLES = {
46
+ en: EN, ar: AR, bg: BG, bn: BN, ca: CA, cs: CS, da: DA, de: DE, 'de-CH': DE_CH,
47
+ dz: DZ, el: EL, es: ES, et: ET, fi: FI, fr: FR, hr: HR, hu: HU, it: IT,
48
+ lt: LT, lv: LV, nb: NB, nl: NL, pl: PL, pt: PT, ro: RO, ru: RU, sk: SK,
49
+ sl: SL, sv: SV, tr: TR, uk: UK,
50
+ };
@@ -0,0 +1,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.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': '⌘E — HTML 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 aç',
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': 'Önizleme — mobil 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
+