@kontakto/email-template-editor 2.6.0 → 2.7.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.
package/dist/index.cjs CHANGED
@@ -2016,13 +2016,13 @@ var THEME = styles.createTheme(BASE_THEME, {
2016
2016
  var theme_default = THEME;
2017
2017
 
2018
2018
  // src/locales/en/messages.ts
2019
- var messages = JSON.parse('{"drawer.library":["Library"],"drawer.new-sample":["New sample"],"drawer.new-template":["New template"],"drawer.no-samples":["No samples available"],"drawer.no-samples-match":["No samples match your filters"],"drawer.no-templates":["No saved templates yet"],"drawer.no-templates-match":["No templates match your filters"],"drawer.search-samples":["Search samples"],"drawer.search-templates":["Search templates"],"drawer.sort-by":["Sort by"],"drawer.tab.outline":["Outline"],"drawer.tab.samples":["Samples"],"drawer.tab.templates":["Templates"],"drawer.tag.all":["All"],"panel.avatar-block":["Avatar block"],"panel.button-block":["Button block"],"panel.columns-block":["Columns block"],"panel.container-block":["Container block"],"panel.divider-block":["Divider block"],"panel.editor-appearance":["Editor appearance"],"panel.export":["Export"],"panel.global":["Global"],"panel.heading-block":["Heading block"],"panel.html-block":["HTML block"],"panel.image-block":["Image block"],"panel.signature-block":["Signature block"],"panel.spacer-block":["Spacer block"],"panel.template":["Template"],"panel.text-block":["Text block"],"savebar.error-saving":["Error saving"],"savebar.new":["New"],"savebar.new-template-created":["New template created"],"savebar.sample-prefix":["Sample"],"savebar.sample-saved":["Sample saved"],"savebar.save":["Save"],"savebar.save-as":["Save as\u2026"],"savebar.save-as-new":["Save as new\u2026"],"savebar.save-as-new-template":["Save as a new template"],"savebar.save-changes":["Save changes"],"savebar.save-changes-to-sample":["Save changes to this sample"],"savebar.start-fresh":["Start a fresh template"],"savebar.template-saved":["Template saved"],"sort.last-updated":["Last updated"],"sort.name":["Name (A\u2013Z)"],"sort.recently-created":["Recently created"],"style.alignment":["Alignment"],"style.background-color":["Background color"],"style.border-color":["Border color"],"style.border-radius":["Border radius"],"style.font-family":["Font family"],"style.font-size":["Font size"],"style.font-weight":["Font weight"],"style.letter-spacing":["Letter spacing"],"style.line-height":["Line height"],"style.padding":["Padding"],"style.text-color":["Text color"],"toolbar.bold":["Bold"],"toolbar.bold-shortcut":["Bold (Cmd+B)"],"toolbar.italic":["Italic"],"toolbar.italic-shortcut":["Italic (Cmd+I)"],"toolbar.link":["Link"],"toolbar.link-shortcut":["Link (Cmd+K)"],"tune.copy":["Copy block"],"tune.delete":["Delete"],"tune.move-down":["Move down"],"tune.move-up":["Move up"]}');
2019
+ var messages = JSON.parse('{"avatar.shape":["Shape"],"button.color":["Button color"],"button.style.pill":["Pill"],"button.style.rectangle":["Rectangle"],"button.style.rounded":["Rounded"],"button.width.auto":["Auto"],"button.width.full":["Full"],"canvas.desktop-view":["Desktop view"],"canvas.mobile-view":["Mobile view"],"columns.count":["Number of columns"],"columns.gap":["Columns gap"],"common.add":["Add"],"common.cancel":["Cancel"],"common.save":["Save"],"common.saving":["Saving\u2026"],"divider.color":["Color"],"drawer.library":["Library"],"drawer.new-sample":["New sample"],"drawer.new-template":["New template"],"drawer.no-samples":["No samples available"],"drawer.no-samples-match":["No samples match your filters"],"drawer.no-templates":["No saved templates yet"],"drawer.no-templates-match":["No templates match your filters"],"drawer.search-samples":["Search samples"],"drawer.search-templates":["Search templates"],"drawer.sort-by":["Sort by"],"drawer.tab.outline":["Outline"],"drawer.tab.samples":["Samples"],"drawer.tab.templates":["Templates"],"drawer.tag.all":["All"],"empty.description":["A blank email template to start from scratch"],"empty.slug":["Empty email"],"field.content":["Content"],"field.height":["Height"],"field.level":["Level"],"field.markdown":["Markdown"],"field.size":["Size"],"field.style":["Style"],"field.text":["Text"],"field.url":["Url"],"field.width":["Width"],"global.backdrop-color":["Backdrop color"],"global.canvas-border-color":["Canvas border color"],"global.canvas-border-radius":["Canvas border radius"],"global.canvas-color":["Canvas color"],"global.disable-backdrop":["Disable backdrop"],"image.alt-text":["Alt text"],"image.http-warning":["Non-HTTPS URL: Gmail and other clients strip mixed content. Use https:// for reliable delivery."],"image.library":["Library"],"image.link-href":["Click through URL"],"image.source-url":["Source URL"],"image.upload":["Upload"],"image.uploading":["Uploading\u2026"],"inspector.tab.inspect":["Inspect"],"inspector.tab.settings":["Settings"],"inspector.tab.styles":["Styles"],"inspector.tab.variables":["Variables"],"panel.avatar-block":["Avatar block"],"panel.button-block":["Button block"],"panel.columns-block":["Columns block"],"panel.container-block":["Container block"],"panel.divider-block":["Divider block"],"panel.editor-appearance":["Editor appearance"],"panel.export":["Export"],"panel.global":["Global"],"panel.heading-block":["Heading block"],"panel.html-block":["HTML block"],"panel.image-block":["Image block"],"panel.signature-block":["Signature block"],"panel.spacer-block":["Spacer block"],"panel.template":["Template"],"panel.text-block":["Text block"],"picker.blank-desc":["Start from an empty email"],"picker.blank-title":["Blank"],"picker.create-sample":["Create sample"],"picker.create-template":["Create template"],"picker.creating":["Creating\u2026"],"picker.error-name-required":["Name is required"],"picker.error-sample-taken":["A sample with this name already exists"],"picker.error-template-taken":["A template with this name already exists"],"picker.start-from":["Start from"],"picker.title-sample":["New sample"],"picker.title-template":["New template"],"rename.error-empty":["Please enter a name"],"rename.error-generic":["Failed to update template details"],"rename.error-taken":["A template with this name already exists"],"rename.name-label":["Name"],"rename.no-tags":["No tags yet."],"rename.tag-placeholder":["Add a tag and press Enter"],"rename.tags":["Tags"],"rename.title":["Edit details"],"row.actions":["Row actions"],"row.demote":["Demote to template"],"row.duplicate":["Duplicate"],"row.duplicate-as-template":["Duplicate as template"],"row.edit-details":["Edit name & tags\u2026"],"row.more":["More"],"row.promote":["Promote to sample"],"save-dialog.create":["Create"],"save-dialog.error-empty-name":["Please enter a template name"],"save-dialog.name-label":["Template Name"],"save-dialog.save":["Save"],"save-dialog.saving":["Saving..."],"save-dialog.title":["Save as a new template"],"save-dialog.title-new":["Create a new template"],"savebar.error-saving":["Error saving"],"savebar.new":["New"],"savebar.new-template-created":["New template created"],"savebar.sample-prefix":["Sample"],"savebar.sample-saved":["Sample saved"],"savebar.save":["Save"],"savebar.save-as":["Save as\u2026"],"savebar.save-as-new":["Save as new\u2026"],"savebar.save-as-new-template":["Save as a new template"],"savebar.save-changes":["Save changes"],"savebar.save-changes-to-sample":["Save changes to this sample"],"savebar.start-fresh":["Start a fresh template"],"savebar.template-saved":["Template saved"],"signature.address":["Address"],"signature.company":["Company"],"signature.email":["Email"],"signature.greeting":["Greeting"],"signature.image-shape":["Image shape"],"signature.image-size":["Image size"],"signature.image-url":["Image URL"],"signature.layout":["Layout"],"signature.layout.horizontal":["Horizontal"],"signature.layout.vertical":["Vertical"],"signature.link-color":["Link color"],"signature.name":["Name"],"signature.name-color":["Name color"],"signature.phone":["Phone"],"signature.shape.circle":["Circle"],"signature.shape.rounded":["Rounded"],"signature.shape.square":["Square"],"signature.title":["Title"],"signature.website":["Website"],"size.lg":["Lg"],"size.md":["Md"],"size.sm":["Sm"],"size.xs":["Xs"],"sort.last-updated":["Last updated"],"sort.name":["Name (A\u2013Z)"],"sort.recently-created":["Recently created"],"style.alignment":["Alignment"],"style.background-color":["Background color"],"style.border-color":["Border color"],"style.border-radius":["Border radius"],"style.font-family":["Font family"],"style.font-size":["Font size"],"style.font-weight":["Font weight"],"style.letter-spacing":["Letter spacing"],"style.line-height":["Line height"],"style.padding":["Padding"],"style.text-color":["Text color"],"tab.edit":["Edit"],"tab.html-output":["HTML output"],"tab.json-output":["JSON output"],"tab.preview":["Preview"],"tab.text-output":["Plain text output"],"time.days-short":["d ago"],"time.hours-short":["h ago"],"time.just-now":["just now"],"time.minutes-short":["m ago"],"time.months-short":["mo ago"],"time.years-short":["y ago"],"toolbar.bold":["Bold"],"toolbar.bold-shortcut":["Bold (Cmd+B)"],"toolbar.italic":["Italic"],"toolbar.italic-shortcut":["Italic (Cmd+I)"],"toolbar.link":["Link"],"toolbar.link-shortcut":["Link (Cmd+K)"],"tune.copy":["Copy block"],"tune.delete":["Delete"],"tune.move-down":["Move down"],"tune.move-up":["Move up"]}');
2020
2020
 
2021
2021
  // src/locales/fi/messages.ts
2022
- var messages2 = JSON.parse('{"drawer.library":["Kirjasto"],"drawer.new-sample":["Uusi malli"],"drawer.new-template":["Uusi pohja"],"drawer.no-samples":["Ei malleja saatavilla"],"drawer.no-samples-match":["Mik\xE4\xE4n malli ei vastaa hakua"],"drawer.no-templates":["Ei tallennettuja pohjia"],"drawer.no-templates-match":["Mik\xE4\xE4n pohja ei vastaa hakua"],"drawer.search-samples":["Etsi malleja"],"drawer.search-templates":["Etsi pohjia"],"drawer.sort-by":["J\xE4rjestys"],"drawer.tab.outline":["Rakenne"],"drawer.tab.samples":["Mallit"],"drawer.tab.templates":["Pohjat"],"drawer.tag.all":["Kaikki"],"panel.avatar-block":["Avatarlohko"],"panel.button-block":["Painikelohko"],"panel.columns-block":["Sarakkeet"],"panel.container-block":["S\xE4ili\xF6lohko"],"panel.divider-block":["Erotin"],"panel.editor-appearance":["Editorin ulkoasu"],"panel.export":["Vienti"],"panel.global":["Yleiset"],"panel.heading-block":["Otsikkolohko"],"panel.html-block":["HTML-lohko"],"panel.image-block":["Kuvalohko"],"panel.signature-block":["Allekirjoituslohko"],"panel.spacer-block":["V\xE4lilohko"],"panel.template":["Pohja"],"panel.text-block":["Tekstilohko"],"savebar.error-saving":["Tallennus ep\xE4onnistui"],"savebar.new":["Uusi"],"savebar.new-template-created":["Uusi pohja luotu"],"savebar.sample-prefix":["Malli"],"savebar.sample-saved":["Malli tallennettu"],"savebar.save":["Tallenna"],"savebar.save-as":["Tallenna nimell\xE4\u2026"],"savebar.save-as-new":["Tallenna uutena\u2026"],"savebar.save-as-new-template":["Tallenna uutena pohjana"],"savebar.save-changes":["Tallenna muutokset"],"savebar.save-changes-to-sample":["Tallenna muutokset t\xE4h\xE4n malliin"],"savebar.start-fresh":["Aloita tyhj\xE4st\xE4 pohjasta"],"savebar.template-saved":["Pohja tallennettu"],"sort.last-updated":["Viimeksi p\xE4ivitetty"],"sort.name":["Nimi (A\u2013\xD6)"],"sort.recently-created":["\xC4skett\xE4in luotu"],"style.alignment":["Tasaus"],"style.background-color":["Taustav\xE4ri"],"style.border-color":["Reunan v\xE4ri"],"style.border-radius":["Reunan py\xF6ristys"],"style.font-family":["Fontti"],"style.font-size":["Fonttikoko"],"style.font-weight":["Fontin paksuus"],"style.letter-spacing":["Kirjainv\xE4li"],"style.line-height":["Rivikorkeus"],"style.padding":["T\xE4yte"],"style.text-color":["Tekstin v\xE4ri"],"toolbar.bold":["Lihavointi"],"toolbar.bold-shortcut":["Lihavointi (Cmd+B)"],"toolbar.italic":["Kursivointi"],"toolbar.italic-shortcut":["Kursivointi (Cmd+I)"],"toolbar.link":["Linkki"],"toolbar.link-shortcut":["Linkki (Cmd+K)"],"tune.copy":["Kopioi lohko"],"tune.delete":["Poista"],"tune.move-down":["Siirr\xE4 alas"],"tune.move-up":["Siirr\xE4 yl\xF6s"]}');
2022
+ var messages2 = JSON.parse('{"avatar.shape":["Muoto"],"button.color":["Painikkeen v\xE4ri"],"button.style.pill":["Pilleri"],"button.style.rectangle":["Suorakaide"],"button.style.rounded":["Py\xF6ristetty"],"button.width.auto":["Automaattinen"],"button.width.full":["T\xE4ysi"],"canvas.desktop-view":["Ty\xF6p\xF6yt\xE4n\xE4kym\xE4"],"canvas.mobile-view":["Mobiilin\xE4kym\xE4"],"columns.count":["Sarakkeiden m\xE4\xE4r\xE4"],"columns.gap":["Sarakev\xE4li"],"common.add":["Lis\xE4\xE4"],"common.cancel":["Peruuta"],"common.save":["Tallenna"],"common.saving":["Tallennetaan\u2026"],"divider.color":["V\xE4ri"],"drawer.library":["Kirjasto"],"drawer.new-sample":["Uusi malli"],"drawer.new-template":["Uusi pohja"],"drawer.no-samples":["Ei malleja saatavilla"],"drawer.no-samples-match":["Mik\xE4\xE4n malli ei vastaa hakua"],"drawer.no-templates":["Ei tallennettuja pohjia"],"drawer.no-templates-match":["Mik\xE4\xE4n pohja ei vastaa hakua"],"drawer.search-samples":["Etsi malleja"],"drawer.search-templates":["Etsi pohjia"],"drawer.sort-by":["J\xE4rjestys"],"drawer.tab.outline":["Rakenne"],"drawer.tab.samples":["Mallit"],"drawer.tab.templates":["Pohjat"],"drawer.tag.all":["Kaikki"],"empty.description":["Tyhj\xE4 s\xE4hk\xF6postipohja, aloita tyhj\xE4lt\xE4 p\xF6yd\xE4lt\xE4"],"empty.slug":["Tyhj\xE4 s\xE4hk\xF6posti"],"field.content":["Sis\xE4lt\xF6"],"field.height":["Korkeus"],"field.level":["Taso"],"field.markdown":["Markdown"],"field.size":["Koko"],"field.style":["Tyyli"],"field.text":["Teksti"],"field.url":["Osoite"],"field.width":["Leveys"],"global.backdrop-color":["Taustav\xE4ri"],"global.canvas-border-color":["Kankaan reunan v\xE4ri"],"global.canvas-border-radius":["Kankaan reunan py\xF6ristys"],"global.canvas-color":["Kankaan v\xE4ri"],"global.disable-backdrop":["Piilota taustav\xE4ri"],"image.alt-text":["Vaihtoehtoinen teksti"],"image.http-warning":["Ei-HTTPS-osoite: Gmail ja muut asiakasohjelmat poistavat sekoitetun sis\xE4ll\xF6n. K\xE4yt\xE4 https:// varmaa toimitusta varten."],"image.library":["Kirjasto"],"image.link-href":["Linkin osoite"],"image.source-url":["L\xE4hdeosoite"],"image.upload":["Lataa"],"image.uploading":["Ladataan\u2026"],"inspector.tab.inspect":["Tarkastele"],"inspector.tab.settings":["Asetukset"],"inspector.tab.styles":["Tyylit"],"inspector.tab.variables":["Muuttujat"],"panel.avatar-block":["Avatarlohko"],"panel.button-block":["Painikelohko"],"panel.columns-block":["Sarakkeet"],"panel.container-block":["S\xE4ili\xF6lohko"],"panel.divider-block":["Erotin"],"panel.editor-appearance":["Editorin ulkoasu"],"panel.export":["Vienti"],"panel.global":["Yleiset"],"panel.heading-block":["Otsikkolohko"],"panel.html-block":["HTML-lohko"],"panel.image-block":["Kuvalohko"],"panel.signature-block":["Allekirjoituslohko"],"panel.spacer-block":["V\xE4lilohko"],"panel.template":["Pohja"],"panel.text-block":["Tekstilohko"],"picker.blank-desc":["Aloita tyhj\xE4st\xE4 s\xE4hk\xF6postista"],"picker.blank-title":["Tyhj\xE4"],"picker.create-sample":["Luo malli"],"picker.create-template":["Luo pohja"],"picker.creating":["Luodaan\u2026"],"picker.error-name-required":["Nimi vaaditaan"],"picker.error-sample-taken":["Samanniminen malli on jo olemassa"],"picker.error-template-taken":["Samanniminen pohja on jo olemassa"],"picker.start-from":["Aloitetaan pohjasta"],"picker.title-sample":["Uusi malli"],"picker.title-template":["Uusi pohja"],"rename.error-empty":["Anna nimi"],"rename.error-generic":["Tietojen p\xE4ivitys ep\xE4onnistui"],"rename.error-taken":["Samanniminen pohja on jo olemassa"],"rename.name-label":["Nimi"],"rename.no-tags":["Ei tunnisteita."],"rename.tag-placeholder":["Lis\xE4\xE4 tunniste ja paina Enter"],"rename.tags":["Tunnisteet"],"rename.title":["Muokkaa tietoja"],"row.actions":["Rivin toiminnot"],"row.demote":["Alenna pohjaksi"],"row.duplicate":["Monista"],"row.duplicate-as-template":["Monista pohjaksi"],"row.edit-details":["Muokkaa nime\xE4 ja tunnisteita\u2026"],"row.more":["Lis\xE4\xE4"],"row.promote":["Ylenn\xE4 malliksi"],"save-dialog.create":["Luo"],"save-dialog.error-empty-name":["Anna pohjalle nimi"],"save-dialog.name-label":["Pohjan nimi"],"save-dialog.save":["Tallenna"],"save-dialog.saving":["Tallennetaan..."],"save-dialog.title":["Tallenna uutena pohjana"],"save-dialog.title-new":["Luo uusi pohja"],"savebar.error-saving":["Tallennus ep\xE4onnistui"],"savebar.new":["Uusi"],"savebar.new-template-created":["Uusi pohja luotu"],"savebar.sample-prefix":["Malli"],"savebar.sample-saved":["Malli tallennettu"],"savebar.save":["Tallenna"],"savebar.save-as":["Tallenna nimell\xE4\u2026"],"savebar.save-as-new":["Tallenna uutena\u2026"],"savebar.save-as-new-template":["Tallenna uutena pohjana"],"savebar.save-changes":["Tallenna muutokset"],"savebar.save-changes-to-sample":["Tallenna muutokset t\xE4h\xE4n malliin"],"savebar.start-fresh":["Aloita tyhj\xE4st\xE4 pohjasta"],"savebar.template-saved":["Pohja tallennettu"],"signature.address":["Osoite"],"signature.company":["Yritys"],"signature.email":["S\xE4hk\xF6posti"],"signature.greeting":["Tervehdys"],"signature.image-shape":["Kuvan muoto"],"signature.image-size":["Kuvan koko"],"signature.image-url":["Kuvan osoite"],"signature.layout":["Asettelu"],"signature.layout.horizontal":["Vaakasuora"],"signature.layout.vertical":["Pystysuora"],"signature.link-color":["Linkin v\xE4ri"],"signature.name":["Nimi"],"signature.name-color":["Nimen v\xE4ri"],"signature.phone":["Puhelin"],"signature.shape.circle":["Ympyr\xE4"],"signature.shape.rounded":["Py\xF6ristetty"],"signature.shape.square":["Neli\xF6"],"signature.title":["Titteli"],"signature.website":["Verkkosivusto"],"size.lg":["Lg"],"size.md":["Md"],"size.sm":["Sm"],"size.xs":["Xs"],"sort.last-updated":["Viimeksi p\xE4ivitetty"],"sort.name":["Nimi (A\u2013\xD6)"],"sort.recently-created":["\xC4skett\xE4in luotu"],"style.alignment":["Tasaus"],"style.background-color":["Taustav\xE4ri"],"style.border-color":["Reunan v\xE4ri"],"style.border-radius":["Reunan py\xF6ristys"],"style.font-family":["Fontti"],"style.font-size":["Fonttikoko"],"style.font-weight":["Fontin paksuus"],"style.letter-spacing":["Kirjainv\xE4li"],"style.line-height":["Rivikorkeus"],"style.padding":["T\xE4yte"],"style.text-color":["Tekstin v\xE4ri"],"tab.edit":["Muokkaa"],"tab.html-output":["HTML-tuloste"],"tab.json-output":["JSON-tuloste"],"tab.preview":["Esikatselu"],"tab.text-output":["Tekstituloste"],"time.days-short":[" pv sitten"],"time.hours-short":[" h sitten"],"time.just-now":["juuri nyt"],"time.minutes-short":[" min sitten"],"time.months-short":[" kk sitten"],"time.years-short":[" v sitten"],"toolbar.bold":["Lihavointi"],"toolbar.bold-shortcut":["Lihavointi (Cmd+B)"],"toolbar.italic":["Kursivointi"],"toolbar.italic-shortcut":["Kursivointi (Cmd+I)"],"toolbar.link":["Linkki"],"toolbar.link-shortcut":["Linkki (Cmd+K)"],"tune.copy":["Kopioi lohko"],"tune.delete":["Poista"],"tune.move-down":["Siirr\xE4 alas"],"tune.move-up":["Siirr\xE4 yl\xF6s"]}');
2023
2023
 
2024
2024
  // src/locales/sv/messages.ts
2025
- var messages3 = JSON.parse('{"drawer.library":["Bibliotek"],"drawer.new-sample":["Ny mall"],"drawer.new-template":["Ny e-postmall"],"drawer.no-samples":["Inga exempel tillg\xE4ngliga"],"drawer.no-samples-match":["Inga exempel matchar dina filter"],"drawer.no-templates":["Inga sparade mallar \xE4nnu"],"drawer.no-templates-match":["Inga mallar matchar dina filter"],"drawer.search-samples":["S\xF6k exempel"],"drawer.search-templates":["S\xF6k mallar"],"drawer.sort-by":["Sortera efter"],"drawer.tab.outline":["Struktur"],"drawer.tab.samples":["Exempel"],"drawer.tab.templates":["Mallar"],"drawer.tag.all":["Alla"],"panel.avatar-block":["Avatarblock"],"panel.button-block":["Knappblock"],"panel.columns-block":["Kolumner"],"panel.container-block":["Beh\xE5llarblock"],"panel.divider-block":["Avgr\xE4nsare"],"panel.editor-appearance":["Editorns utseende"],"panel.export":["Exportera"],"panel.global":["Allm\xE4nt"],"panel.heading-block":["Rubrikblock"],"panel.html-block":["HTML-block"],"panel.image-block":["Bildblock"],"panel.signature-block":["Signaturblock"],"panel.spacer-block":["Mellanrumsblock"],"panel.template":["Mall"],"panel.text-block":["Textblock"],"savebar.error-saving":["Fel vid sparande"],"savebar.new":["Ny"],"savebar.new-template-created":["Ny mall skapad"],"savebar.sample-prefix":["Exempel"],"savebar.sample-saved":["Exempel sparat"],"savebar.save":["Spara"],"savebar.save-as":["Spara som\u2026"],"savebar.save-as-new":["Spara som ny\u2026"],"savebar.save-as-new-template":["Spara som en ny mall"],"savebar.save-changes":["Spara \xE4ndringar"],"savebar.save-changes-to-sample":["Spara \xE4ndringar till detta exempel"],"savebar.start-fresh":["Starta en ny mall"],"savebar.template-saved":["Mall sparad"],"sort.last-updated":["Senast uppdaterad"],"sort.name":["Namn (A\u2013\xD6)"],"sort.recently-created":["Nyligen skapad"],"style.alignment":["Justering"],"style.background-color":["Bakgrundsf\xE4rg"],"style.border-color":["Kantf\xE4rg"],"style.border-radius":["Kantradie"],"style.font-family":["Typsnitt"],"style.font-size":["Typsnittsstorlek"],"style.font-weight":["Typsnittsvikt"],"style.letter-spacing":["Teckenavst\xE5nd"],"style.line-height":["Radh\xF6jd"],"style.padding":["Utrymme"],"style.text-color":["Textf\xE4rg"],"toolbar.bold":["Fet"],"toolbar.bold-shortcut":["Fet (Cmd+B)"],"toolbar.italic":["Kursiv"],"toolbar.italic-shortcut":["Kursiv (Cmd+I)"],"toolbar.link":["L\xE4nk"],"toolbar.link-shortcut":["L\xE4nk (Cmd+K)"],"tune.copy":["Kopiera block"],"tune.delete":["Ta bort"],"tune.move-down":["Flytta ner"],"tune.move-up":["Flytta upp"]}');
2025
+ var messages3 = JSON.parse('{"avatar.shape":["Form"],"button.color":["Knappf\xE4rg"],"button.style.pill":["Piller"],"button.style.rectangle":["Rektangel"],"button.style.rounded":["Rundad"],"button.width.auto":["Auto"],"button.width.full":["Full"],"canvas.desktop-view":["Skrivbordsvy"],"canvas.mobile-view":["Mobilvy"],"columns.count":["Antal kolumner"],"columns.gap":["Kolumnmellanrum"],"common.add":["L\xE4gg till"],"common.cancel":["Avbryt"],"common.save":["Spara"],"common.saving":["Sparar\u2026"],"divider.color":["F\xE4rg"],"drawer.library":["Bibliotek"],"drawer.new-sample":["Ny mall"],"drawer.new-template":["Ny e-postmall"],"drawer.no-samples":["Inga exempel tillg\xE4ngliga"],"drawer.no-samples-match":["Inga exempel matchar dina filter"],"drawer.no-templates":["Inga sparade mallar \xE4nnu"],"drawer.no-templates-match":["Inga mallar matchar dina filter"],"drawer.search-samples":["S\xF6k exempel"],"drawer.search-templates":["S\xF6k mallar"],"drawer.sort-by":["Sortera efter"],"drawer.tab.outline":["Struktur"],"drawer.tab.samples":["Exempel"],"drawer.tab.templates":["Mallar"],"drawer.tag.all":["Alla"],"empty.description":["En tom e-postmall att utg\xE5 fr\xE5n"],"empty.slug":["Tomt e-postmeddelande"],"field.content":["Inneh\xE5ll"],"field.height":["H\xF6jd"],"field.level":["Niv\xE5"],"field.markdown":["Markdown"],"field.size":["Storlek"],"field.style":["Stil"],"field.text":["Text"],"field.url":["Adress"],"field.width":["Bredd"],"global.backdrop-color":["Bakgrundsf\xE4rg"],"global.canvas-border-color":["Canvaskantf\xE4rg"],"global.canvas-border-radius":["Canvaskantradie"],"global.canvas-color":["Canvasf\xE4rg"],"global.disable-backdrop":["D\xF6lj bakgrund"],"image.alt-text":["Alternativ text"],"image.http-warning":["Icke-HTTPS-URL: Gmail och andra klienter tar bort blandat inneh\xE5ll. Anv\xE4nd https:// f\xF6r p\xE5litlig leverans."],"image.library":["Bibliotek"],"image.link-href":["Klickl\xE4nk"],"image.source-url":["K\xE4lladress"],"image.upload":["Ladda upp"],"image.uploading":["Laddar upp\u2026"],"inspector.tab.inspect":["Inspektera"],"inspector.tab.settings":["Inst\xE4llningar"],"inspector.tab.styles":["Stilar"],"inspector.tab.variables":["Variabler"],"panel.avatar-block":["Avatarblock"],"panel.button-block":["Knappblock"],"panel.columns-block":["Kolumner"],"panel.container-block":["Beh\xE5llarblock"],"panel.divider-block":["Avgr\xE4nsare"],"panel.editor-appearance":["Editorns utseende"],"panel.export":["Exportera"],"panel.global":["Allm\xE4nt"],"panel.heading-block":["Rubrikblock"],"panel.html-block":["HTML-block"],"panel.image-block":["Bildblock"],"panel.signature-block":["Signaturblock"],"panel.spacer-block":["Mellanrumsblock"],"panel.template":["Mall"],"panel.text-block":["Textblock"],"picker.blank-desc":["Starta fr\xE5n ett tomt e-postmeddelande"],"picker.blank-title":["Tomt"],"picker.create-sample":["Skapa exempel"],"picker.create-template":["Skapa mall"],"picker.creating":["Skapar\u2026"],"picker.error-name-required":["Namn kr\xE4vs"],"picker.error-sample-taken":["Ett exempel med detta namn finns redan"],"picker.error-template-taken":["En mall med detta namn finns redan"],"picker.start-from":["Utg\xE5 fr\xE5n"],"picker.title-sample":["Nytt exempel"],"picker.title-template":["Ny mall"],"rename.error-empty":["Ange ett namn"],"rename.error-generic":["Kunde inte uppdatera malldetaljer"],"rename.error-taken":["En mall med detta namn finns redan"],"rename.name-label":["Namn"],"rename.no-tags":["Inga etiketter \xE4nnu."],"rename.tag-placeholder":["L\xE4gg till en etikett och tryck Enter"],"rename.tags":["Etiketter"],"rename.title":["Redigera detaljer"],"row.actions":["Rad\xE5tg\xE4rder"],"row.demote":["Degradera till mall"],"row.duplicate":["Duplicera"],"row.duplicate-as-template":["Duplicera som mall"],"row.edit-details":["Redigera namn och etiketter\u2026"],"row.more":["Mer"],"row.promote":["Befordra till exempel"],"save-dialog.create":["Skapa"],"save-dialog.error-empty-name":["Ange ett mallnamn"],"save-dialog.name-label":["Mallnamn"],"save-dialog.save":["Spara"],"save-dialog.saving":["Sparar..."],"save-dialog.title":["Spara som en ny mall"],"save-dialog.title-new":["Skapa en ny mall"],"savebar.error-saving":["Fel vid sparande"],"savebar.new":["Ny"],"savebar.new-template-created":["Ny mall skapad"],"savebar.sample-prefix":["Exempel"],"savebar.sample-saved":["Exempel sparat"],"savebar.save":["Spara"],"savebar.save-as":["Spara som\u2026"],"savebar.save-as-new":["Spara som ny\u2026"],"savebar.save-as-new-template":["Spara som en ny mall"],"savebar.save-changes":["Spara \xE4ndringar"],"savebar.save-changes-to-sample":["Spara \xE4ndringar till detta exempel"],"savebar.start-fresh":["Starta en ny mall"],"savebar.template-saved":["Mall sparad"],"signature.address":["Adress"],"signature.company":["F\xF6retag"],"signature.email":["E-post"],"signature.greeting":["H\xE4lsning"],"signature.image-shape":["Bildform"],"signature.image-size":["Bildstorlek"],"signature.image-url":["Bildadress"],"signature.layout":["Layout"],"signature.layout.horizontal":["Horisontell"],"signature.layout.vertical":["Vertikal"],"signature.link-color":["L\xE4nkf\xE4rg"],"signature.name":["Namn"],"signature.name-color":["Namnf\xE4rg"],"signature.phone":["Telefon"],"signature.shape.circle":["Cirkel"],"signature.shape.rounded":["Rundad"],"signature.shape.square":["Kvadrat"],"signature.title":["Titel"],"signature.website":["Webbplats"],"size.lg":["Lg"],"size.md":["Md"],"size.sm":["Sm"],"size.xs":["Xs"],"sort.last-updated":["Senast uppdaterad"],"sort.name":["Namn (A\u2013\xD6)"],"sort.recently-created":["Nyligen skapad"],"style.alignment":["Justering"],"style.background-color":["Bakgrundsf\xE4rg"],"style.border-color":["Kantf\xE4rg"],"style.border-radius":["Kantradie"],"style.font-family":["Typsnitt"],"style.font-size":["Typsnittsstorlek"],"style.font-weight":["Typsnittsvikt"],"style.letter-spacing":["Teckenavst\xE5nd"],"style.line-height":["Radh\xF6jd"],"style.padding":["Utrymme"],"style.text-color":["Textf\xE4rg"],"tab.edit":["Redigera"],"tab.html-output":["HTML-utdata"],"tab.json-output":["JSON-utdata"],"tab.preview":["F\xF6rhandsgranska"],"tab.text-output":["Textutdata"],"time.days-short":[" d sedan"],"time.hours-short":[" tim sedan"],"time.just-now":["just nu"],"time.minutes-short":[" min sedan"],"time.months-short":[" m\xE5n sedan"],"time.years-short":[" \xE5r sedan"],"toolbar.bold":["Fet"],"toolbar.bold-shortcut":["Fet (Cmd+B)"],"toolbar.italic":["Kursiv"],"toolbar.italic-shortcut":["Kursiv (Cmd+I)"],"toolbar.link":["L\xE4nk"],"toolbar.link-shortcut":["L\xE4nk (Cmd+K)"],"tune.copy":["Kopiera block"],"tune.delete":["Ta bort"],"tune.move-down":["Flytta ner"],"tune.move-up":["Flytta upp"]}');
2026
2026
  var SUPPORTED_LOCALES = ["en", "sv", "fi"];
2027
2027
  var CATALOGS = {
2028
2028
  en: messages,
@@ -2914,7 +2914,7 @@ function AvatarSidebarPanel({ data, setData }) {
2914
2914
  return /* @__PURE__ */ React57__default.default.createElement(BaseSidebarPanel, { title: "Avatar block" }, /* @__PURE__ */ React57__default.default.createElement(
2915
2915
  SliderInput,
2916
2916
  {
2917
- label: "Size",
2917
+ label: t("field.size", "Size"),
2918
2918
  iconLabel: /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.AspectRatioOutlined, { sx: { color: "text.secondary" } }),
2919
2919
  units: "px",
2920
2920
  step: 3,
@@ -2928,19 +2928,19 @@ function AvatarSidebarPanel({ data, setData }) {
2928
2928
  ), /* @__PURE__ */ React57__default.default.createElement(
2929
2929
  RadioGroupInput,
2930
2930
  {
2931
- label: "Shape",
2931
+ label: t("avatar.shape", "Shape"),
2932
2932
  defaultValue: shape,
2933
2933
  onChange: (shape2) => {
2934
2934
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { shape: shape2 }) }));
2935
2935
  }
2936
2936
  },
2937
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "circle" }, "Circle"),
2938
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "square" }, "Square"),
2939
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "rounded" }, "Rounded")
2937
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "circle" }, t("signature.shape.circle", "Circle")),
2938
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "square" }, t("signature.shape.square", "Square")),
2939
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "rounded" }, t("signature.shape.rounded", "Rounded"))
2940
2940
  ), /* @__PURE__ */ React57__default.default.createElement(
2941
2941
  TextInput,
2942
2942
  {
2943
- label: "Image URL",
2943
+ label: t("signature.image-url", "Image URL"),
2944
2944
  defaultValue: imageUrl,
2945
2945
  onChange: (imageUrl2) => {
2946
2946
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { imageUrl: imageUrl2 }) }));
@@ -2949,7 +2949,7 @@ function AvatarSidebarPanel({ data, setData }) {
2949
2949
  ), /* @__PURE__ */ React57__default.default.createElement(
2950
2950
  TextInput,
2951
2951
  {
2952
- label: "Alt text",
2952
+ label: t("image.alt-text", "Alt text"),
2953
2953
  defaultValue: alt,
2954
2954
  onChange: (alt2) => {
2955
2955
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { alt: alt2 }) }));
@@ -2986,58 +2986,58 @@ function ButtonSidebarPanel({ data, setData }) {
2986
2986
  return /* @__PURE__ */ React57__default.default.createElement(BaseSidebarPanel, { title: "Button block" }, /* @__PURE__ */ React57__default.default.createElement(
2987
2987
  TextInput,
2988
2988
  {
2989
- label: "Text",
2989
+ label: t("field.text", "Text"),
2990
2990
  defaultValue: text,
2991
2991
  onChange: (text2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { text: text2 }) }))
2992
2992
  }
2993
2993
  ), /* @__PURE__ */ React57__default.default.createElement(
2994
2994
  TextInput,
2995
2995
  {
2996
- label: "Url",
2996
+ label: t("field.url", "Url"),
2997
2997
  defaultValue: url,
2998
2998
  onChange: (url2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { url: url2 }) }))
2999
2999
  }
3000
3000
  ), /* @__PURE__ */ React57__default.default.createElement(
3001
3001
  RadioGroupInput,
3002
3002
  {
3003
- label: "Width",
3003
+ label: t("field.width", "Width"),
3004
3004
  defaultValue: fullWidth ? "FULL_WIDTH" : "AUTO",
3005
3005
  onChange: (v) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { fullWidth: v === "FULL_WIDTH" }) }))
3006
3006
  },
3007
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "FULL_WIDTH" }, "Full"),
3008
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "AUTO" }, "Auto")
3007
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "FULL_WIDTH" }, t("button.width.full", "Full")),
3008
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "AUTO" }, t("button.width.auto", "Auto"))
3009
3009
  ), /* @__PURE__ */ React57__default.default.createElement(
3010
3010
  RadioGroupInput,
3011
3011
  {
3012
- label: "Size",
3012
+ label: t("field.size", "Size"),
3013
3013
  defaultValue: size,
3014
3014
  onChange: (size2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { size: size2 }) }))
3015
3015
  },
3016
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "x-small" }, "Xs"),
3017
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "small" }, "Sm"),
3018
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "medium" }, "Md"),
3019
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "large" }, "Lg")
3016
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "x-small" }, t("size.xs", "Xs")),
3017
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "small" }, t("size.sm", "Sm")),
3018
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "medium" }, t("size.md", "Md")),
3019
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "large" }, t("size.lg", "Lg"))
3020
3020
  ), /* @__PURE__ */ React57__default.default.createElement(
3021
3021
  RadioGroupInput,
3022
3022
  {
3023
- label: "Style",
3023
+ label: t("field.style", "Style"),
3024
3024
  defaultValue: buttonStyle,
3025
3025
  onChange: (buttonStyle2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { buttonStyle: buttonStyle2 }) }))
3026
3026
  },
3027
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "rectangle" }, "Rectangle"),
3028
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "rounded" }, "Rounded"),
3029
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "pill" }, "Pill")
3027
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "rectangle" }, t("button.style.rectangle", "Rectangle")),
3028
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "rounded" }, t("button.style.rounded", "Rounded")),
3029
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "pill" }, t("button.style.pill", "Pill"))
3030
3030
  ), /* @__PURE__ */ React57__default.default.createElement(
3031
3031
  ColorInput2,
3032
3032
  {
3033
- label: "Text color",
3033
+ label: t("style.text-color", "Text color"),
3034
3034
  defaultValue: buttonTextColor,
3035
3035
  onChange: (buttonTextColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { buttonTextColor: buttonTextColor2 }) }))
3036
3036
  }
3037
3037
  ), /* @__PURE__ */ React57__default.default.createElement(
3038
3038
  ColorInput2,
3039
3039
  {
3040
- label: "Button color",
3040
+ label: t("button.color", "Button color"),
3041
3041
  defaultValue: buttonBackgroundColor,
3042
3042
  onChange: (buttonBackgroundColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { buttonBackgroundColor: buttonBackgroundColor2 }) }))
3043
3043
  }
@@ -3157,7 +3157,7 @@ function ColumnsContainerPanel({ data, setData }) {
3157
3157
  return /* @__PURE__ */ React57__default.default.createElement(BaseSidebarPanel, { title: "Columns block" }, /* @__PURE__ */ React57__default.default.createElement(
3158
3158
  RadioGroupInput,
3159
3159
  {
3160
- label: "Number of columns",
3160
+ label: t("columns.count", "Number of columns"),
3161
3161
  defaultValue: ((_a = data.props) == null ? void 0 : _a.columnsCount) === 2 ? "2" : "3",
3162
3162
  onChange: (v) => {
3163
3163
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { columnsCount: v === "2" ? 2 : 3 }) }));
@@ -3176,7 +3176,7 @@ function ColumnsContainerPanel({ data, setData }) {
3176
3176
  ), /* @__PURE__ */ React57__default.default.createElement(
3177
3177
  SliderInput,
3178
3178
  {
3179
- label: "Columns gap",
3179
+ label: t("columns.gap", "Columns gap"),
3180
3180
  iconLabel: /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.SpaceBarOutlined, { sx: { color: "text.secondary" } }),
3181
3181
  units: "px",
3182
3182
  step: 4,
@@ -3189,7 +3189,7 @@ function ColumnsContainerPanel({ data, setData }) {
3189
3189
  ), /* @__PURE__ */ React57__default.default.createElement(
3190
3190
  RadioGroupInput,
3191
3191
  {
3192
- label: "Alignment",
3192
+ label: t("style.alignment", "Alignment"),
3193
3193
  defaultValue: (_f = (_e = data.props) == null ? void 0 : _e.contentAlignment) != null ? _f : "middle",
3194
3194
  onChange: (contentAlignment) => {
3195
3195
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { contentAlignment }) }));
@@ -3253,14 +3253,14 @@ function DividerSidebarPanel({ data, setData }) {
3253
3253
  return /* @__PURE__ */ React57__default.default.createElement(BaseSidebarPanel, { title: "Divider block" }, /* @__PURE__ */ React57__default.default.createElement(
3254
3254
  ColorInput2,
3255
3255
  {
3256
- label: "Color",
3256
+ label: t("divider.color", "Color"),
3257
3257
  defaultValue: lineColor,
3258
3258
  onChange: (lineColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { lineColor: lineColor2 }) }))
3259
3259
  }
3260
3260
  ), /* @__PURE__ */ React57__default.default.createElement(
3261
3261
  SliderInput,
3262
3262
  {
3263
- label: "Height",
3263
+ label: t("field.height", "Height"),
3264
3264
  iconLabel: /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.HeightOutlined, { sx: { color: "text.secondary" } }),
3265
3265
  units: "px",
3266
3266
  step: 1,
@@ -3348,28 +3348,28 @@ function EmailLayoutSidebarFields({ data, setData }) {
3348
3348
  return /* @__PURE__ */ React57__default.default.createElement(BaseSidebarPanel, { title: "Global" }, /* @__PURE__ */ React57__default.default.createElement(
3349
3349
  BooleanInput,
3350
3350
  {
3351
- label: "Disable backdrop",
3351
+ label: t("global.disable-backdrop", "Disable backdrop"),
3352
3352
  defaultValue: backdropDisabled,
3353
3353
  onChange: (backdropDisabled2) => updateData(__spreadProps(__spreadValues({}, data), { backdropDisabled: backdropDisabled2 }))
3354
3354
  }
3355
3355
  ), !backdropDisabled && /* @__PURE__ */ React57__default.default.createElement(React57__default.default.Fragment, null, /* @__PURE__ */ React57__default.default.createElement(
3356
3356
  ColorInput2,
3357
3357
  {
3358
- label: "Backdrop color",
3358
+ label: t("global.backdrop-color", "Backdrop color"),
3359
3359
  defaultValue: (_b = data.backdropColor) != null ? _b : "#F5F5F5",
3360
3360
  onChange: (backdropColor) => updateData(__spreadProps(__spreadValues({}, data), { backdropColor }))
3361
3361
  }
3362
3362
  ), /* @__PURE__ */ React57__default.default.createElement(
3363
3363
  ColorInput2,
3364
3364
  {
3365
- label: "Canvas color",
3365
+ label: t("global.canvas-color", "Canvas color"),
3366
3366
  defaultValue: (_c = data.canvasColor) != null ? _c : "#FFFFFF",
3367
3367
  onChange: (canvasColor) => updateData(__spreadProps(__spreadValues({}, data), { canvasColor }))
3368
3368
  }
3369
3369
  ), /* @__PURE__ */ React57__default.default.createElement(
3370
3370
  NullableColorInput,
3371
3371
  {
3372
- label: "Canvas border color",
3372
+ label: t("global.canvas-border-color", "Canvas border color"),
3373
3373
  defaultValue: (_d = data.borderColor) != null ? _d : null,
3374
3374
  onChange: (borderColor) => updateData(__spreadProps(__spreadValues({}, data), { borderColor }))
3375
3375
  }
@@ -3382,21 +3382,21 @@ function EmailLayoutSidebarFields({ data, setData }) {
3382
3382
  marks: true,
3383
3383
  min: 0,
3384
3384
  max: 48,
3385
- label: "Canvas border radius",
3385
+ label: t("global.canvas-border-radius", "Canvas border radius"),
3386
3386
  defaultValue: (_e = data.borderRadius) != null ? _e : 0,
3387
3387
  onChange: (borderRadius) => updateData(__spreadProps(__spreadValues({}, data), { borderRadius }))
3388
3388
  }
3389
3389
  )), /* @__PURE__ */ React57__default.default.createElement(
3390
3390
  NullableFontFamily,
3391
3391
  {
3392
- label: "Font family",
3392
+ label: t("style.font-family", "Font family"),
3393
3393
  defaultValue: "MODERN_SANS",
3394
3394
  onChange: (fontFamily) => updateData(__spreadProps(__spreadValues({}, data), { fontFamily }))
3395
3395
  }
3396
3396
  ), /* @__PURE__ */ React57__default.default.createElement(
3397
3397
  ColorInput2,
3398
3398
  {
3399
- label: "Text color",
3399
+ label: t("style.text-color", "Text color"),
3400
3400
  defaultValue: (_f = data.textColor) != null ? _f : "#262626",
3401
3401
  onChange: (textColor) => updateData(__spreadProps(__spreadValues({}, data), { textColor }))
3402
3402
  }
@@ -3417,7 +3417,7 @@ function HeadingSidebarPanel({ data, setData }) {
3417
3417
  return /* @__PURE__ */ React57__default.default.createElement(BaseSidebarPanel, { title: "Heading block" }, /* @__PURE__ */ React57__default.default.createElement(
3418
3418
  TextInput,
3419
3419
  {
3420
- label: "Content",
3420
+ label: t("field.content", "Content"),
3421
3421
  rows: 3,
3422
3422
  defaultValue: (_b = (_a = data.props) == null ? void 0 : _a.text) != null ? _b : HeadingPropsDefaults.text,
3423
3423
  onChange: (text) => {
@@ -3427,7 +3427,7 @@ function HeadingSidebarPanel({ data, setData }) {
3427
3427
  ), /* @__PURE__ */ React57__default.default.createElement(
3428
3428
  RadioGroupInput,
3429
3429
  {
3430
- label: "Level",
3430
+ label: t("field.level", "Level"),
3431
3431
  defaultValue: (_d = (_c = data.props) == null ? void 0 : _c.level) != null ? _d : HeadingPropsDefaults.level,
3432
3432
  onChange: (level) => {
3433
3433
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { level }) }));
@@ -3469,7 +3469,7 @@ function HtmlSidebarPanel({ data, setData }) {
3469
3469
  return /* @__PURE__ */ React57__default.default.createElement(BaseSidebarPanel, { title: "Html block" }, /* @__PURE__ */ React57__default.default.createElement(
3470
3470
  TextInput,
3471
3471
  {
3472
- label: "Content",
3472
+ label: t("field.content", "Content"),
3473
3473
  rows: 5,
3474
3474
  defaultValue: (_b = (_a = data.props) == null ? void 0 : _a.contents) != null ? _b : "",
3475
3475
  onChange: (contents) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { contents }) }))
@@ -3685,7 +3685,7 @@ function ImageSidebarPanel({ data, setData }) {
3685
3685
  return (_a2 = fileInputRef.current) == null ? void 0 : _a2.click();
3686
3686
  }
3687
3687
  },
3688
- uploading ? "Uploading\u2026" : "Upload"
3688
+ uploading ? t("image.uploading", "Uploading\u2026") : t("image.upload", "Upload")
3689
3689
  ), /* @__PURE__ */ React57__default.default.createElement(
3690
3690
  "input",
3691
3691
  {
@@ -3709,28 +3709,28 @@ function ImageSidebarPanel({ data, setData }) {
3709
3709
  startIcon: /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.CollectionsOutlined, { fontSize: "small" }),
3710
3710
  onClick: () => setLibraryOpen(true)
3711
3711
  },
3712
- "Library"
3712
+ t("image.library", "Library")
3713
3713
  )), uploadError && /* @__PURE__ */ React57__default.default.createElement(material.Alert, { severity: "error", onClose: () => setUploadError(null), sx: { mt: 1 } }, uploadError), /* @__PURE__ */ React57__default.default.createElement(
3714
3714
  TextInput,
3715
3715
  {
3716
- label: "Source URL",
3716
+ label: t("image.source-url", "Source URL"),
3717
3717
  defaultValue: url,
3718
3718
  onChange: (v) => {
3719
3719
  const next = v.trim().length === 0 ? null : v.trim();
3720
3720
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { url: next }) }));
3721
3721
  }
3722
3722
  }
3723
- ), showHttpWarning && /* @__PURE__ */ React57__default.default.createElement(material.Box, { sx: { mt: -1, mb: 1, display: "flex", alignItems: "flex-start", gap: 0.75 } }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.ErrorOutlineOutlined, { fontSize: "small", sx: { color: "warning.main", mt: "2px" } }), /* @__PURE__ */ React57__default.default.createElement(material.Box, { sx: { fontSize: 12, color: "warning.dark" } }, "Non-HTTPS URL: Gmail and other clients strip mixed content. Use https:// for reliable delivery.")), /* @__PURE__ */ React57__default.default.createElement(
3723
+ ), showHttpWarning && /* @__PURE__ */ React57__default.default.createElement(material.Box, { sx: { mt: -1, mb: 1, display: "flex", alignItems: "flex-start", gap: 0.75 } }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.ErrorOutlineOutlined, { fontSize: "small", sx: { color: "warning.main", mt: "2px" } }), /* @__PURE__ */ React57__default.default.createElement(material.Box, { sx: { fontSize: 12, color: "warning.dark" } }, t("image.http-warning", "Non-HTTPS URL: Gmail and other clients strip mixed content. Use https:// for reliable delivery."))), /* @__PURE__ */ React57__default.default.createElement(
3724
3724
  TextInput,
3725
3725
  {
3726
- label: "Alt text",
3726
+ label: t("image.alt-text", "Alt text"),
3727
3727
  defaultValue: (_d = (_c = data.props) == null ? void 0 : _c.alt) != null ? _d : "",
3728
3728
  onChange: (alt) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { alt }) }))
3729
3729
  }
3730
3730
  ), /* @__PURE__ */ React57__default.default.createElement(
3731
3731
  TextInput,
3732
3732
  {
3733
- label: "Click through URL",
3733
+ label: t("image.link-href", "Click through URL"),
3734
3734
  defaultValue: (_f = (_e = data.props) == null ? void 0 : _e.linkHref) != null ? _f : "",
3735
3735
  onChange: (v) => {
3736
3736
  const linkHref = v.trim().length === 0 ? null : v.trim();
@@ -3740,21 +3740,21 @@ function ImageSidebarPanel({ data, setData }) {
3740
3740
  ), /* @__PURE__ */ React57__default.default.createElement(material.Stack, { direction: "row", spacing: 2 }, /* @__PURE__ */ React57__default.default.createElement(
3741
3741
  TextDimensionInput,
3742
3742
  {
3743
- label: "Width",
3743
+ label: t("field.width", "Width"),
3744
3744
  defaultValue: (_g = data.props) == null ? void 0 : _g.width,
3745
3745
  onChange: (width) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { width }) }))
3746
3746
  }
3747
3747
  ), /* @__PURE__ */ React57__default.default.createElement(
3748
3748
  TextDimensionInput,
3749
3749
  {
3750
- label: "Height",
3750
+ label: t("field.height", "Height"),
3751
3751
  defaultValue: (_h = data.props) == null ? void 0 : _h.height,
3752
3752
  onChange: (height) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { height }) }))
3753
3753
  }
3754
3754
  )), /* @__PURE__ */ React57__default.default.createElement(
3755
3755
  RadioGroupInput,
3756
3756
  {
3757
- label: "Alignment",
3757
+ label: t("style.alignment", "Alignment"),
3758
3758
  defaultValue: (_j = (_i = data.props) == null ? void 0 : _i.contentAlignment) != null ? _j : "middle",
3759
3759
  onChange: (contentAlignment) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { contentAlignment }) }))
3760
3760
  },
@@ -3810,70 +3810,70 @@ function SignatureSidebarPanel({ data, setData }) {
3810
3810
  return /* @__PURE__ */ React57__default.default.createElement(BaseSidebarPanel, { title: "Signature block" }, /* @__PURE__ */ React57__default.default.createElement(
3811
3811
  TextInput,
3812
3812
  {
3813
- label: "Greeting",
3813
+ label: t("signature.greeting", "Greeting"),
3814
3814
  defaultValue: greeting,
3815
3815
  onChange: (greeting2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { greeting: greeting2 }) }))
3816
3816
  }
3817
3817
  ), /* @__PURE__ */ React57__default.default.createElement(
3818
3818
  TextInput,
3819
3819
  {
3820
- label: "Name",
3820
+ label: t("signature.name", "Name"),
3821
3821
  defaultValue: name,
3822
3822
  onChange: (name2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { name: name2 }) }))
3823
3823
  }
3824
3824
  ), /* @__PURE__ */ React57__default.default.createElement(
3825
3825
  TextInput,
3826
3826
  {
3827
- label: "Title",
3827
+ label: t("signature.title", "Title"),
3828
3828
  defaultValue: title,
3829
3829
  onChange: (title2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { title: title2 }) }))
3830
3830
  }
3831
3831
  ), /* @__PURE__ */ React57__default.default.createElement(
3832
3832
  TextInput,
3833
3833
  {
3834
- label: "Company",
3834
+ label: t("signature.company", "Company"),
3835
3835
  defaultValue: company,
3836
3836
  onChange: (company2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { company: company2 }) }))
3837
3837
  }
3838
3838
  ), /* @__PURE__ */ React57__default.default.createElement(
3839
3839
  TextInput,
3840
3840
  {
3841
- label: "Address",
3841
+ label: t("signature.address", "Address"),
3842
3842
  defaultValue: address,
3843
3843
  onChange: (address2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { address: address2 }) }))
3844
3844
  }
3845
3845
  ), /* @__PURE__ */ React57__default.default.createElement(
3846
3846
  TextInput,
3847
3847
  {
3848
- label: "Email",
3848
+ label: t("signature.email", "Email"),
3849
3849
  defaultValue: email,
3850
3850
  onChange: (email2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { email: email2 }) }))
3851
3851
  }
3852
3852
  ), /* @__PURE__ */ React57__default.default.createElement(
3853
3853
  TextInput,
3854
3854
  {
3855
- label: "Phone",
3855
+ label: t("signature.phone", "Phone"),
3856
3856
  defaultValue: phone,
3857
3857
  onChange: (phone2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { phone: phone2 }) }))
3858
3858
  }
3859
3859
  ), /* @__PURE__ */ React57__default.default.createElement(
3860
3860
  TextInput,
3861
3861
  {
3862
- label: "Website",
3862
+ label: t("signature.website", "Website"),
3863
3863
  defaultValue: website,
3864
3864
  onChange: (website2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { website: website2 }) }))
3865
3865
  }
3866
3866
  ), /* @__PURE__ */ React57__default.default.createElement(
3867
3867
  TextInput,
3868
3868
  {
3869
- label: "Image URL",
3869
+ label: t("signature.image-url", "Image URL"),
3870
3870
  defaultValue: imageUrl,
3871
3871
  onChange: (imageUrl2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { imageUrl: imageUrl2 }) }))
3872
3872
  }
3873
3873
  ), /* @__PURE__ */ React57__default.default.createElement(
3874
3874
  SliderInput,
3875
3875
  {
3876
- label: "Image size",
3876
+ label: t("signature.image-size", "Image size"),
3877
3877
  iconLabel: /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.AspectRatioOutlined, { sx: { color: "text.secondary" } }),
3878
3878
  units: "px",
3879
3879
  step: 4,
@@ -3885,40 +3885,40 @@ function SignatureSidebarPanel({ data, setData }) {
3885
3885
  ), /* @__PURE__ */ React57__default.default.createElement(
3886
3886
  RadioGroupInput,
3887
3887
  {
3888
- label: "Image shape",
3888
+ label: t("signature.image-shape", "Image shape"),
3889
3889
  defaultValue: imageShape,
3890
3890
  onChange: (imageShape2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { imageShape: imageShape2 }) }))
3891
3891
  },
3892
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "circle" }, "Circle"),
3893
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "square" }, "Square"),
3894
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "rounded" }, "Rounded")
3892
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "circle" }, t("signature.shape.circle", "Circle")),
3893
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "square" }, t("signature.shape.square", "Square")),
3894
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "rounded" }, t("signature.shape.rounded", "Rounded"))
3895
3895
  ), /* @__PURE__ */ React57__default.default.createElement(
3896
3896
  RadioGroupInput,
3897
3897
  {
3898
- label: "Layout",
3898
+ label: t("signature.layout", "Layout"),
3899
3899
  defaultValue: layout,
3900
3900
  onChange: (layout2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { layout: layout2 }) }))
3901
3901
  },
3902
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "horizontal" }, "Horizontal"),
3903
- /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "vertical" }, "Vertical")
3902
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "horizontal" }, t("signature.layout.horizontal", "Horizontal")),
3903
+ /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "vertical" }, t("signature.layout.vertical", "Vertical"))
3904
3904
  ), /* @__PURE__ */ React57__default.default.createElement(
3905
3905
  ColorInput2,
3906
3906
  {
3907
- label: "Name color",
3907
+ label: t("signature.name-color", "Name color"),
3908
3908
  defaultValue: nameColor,
3909
3909
  onChange: (nameColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { nameColor: nameColor2 }) }))
3910
3910
  }
3911
3911
  ), /* @__PURE__ */ React57__default.default.createElement(
3912
3912
  ColorInput2,
3913
3913
  {
3914
- label: "Text color",
3914
+ label: t("style.text-color", "Text color"),
3915
3915
  defaultValue: textColor,
3916
3916
  onChange: (textColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { textColor: textColor2 }) }))
3917
3917
  }
3918
3918
  ), /* @__PURE__ */ React57__default.default.createElement(
3919
3919
  ColorInput2,
3920
3920
  {
3921
- label: "Link color",
3921
+ label: t("signature.link-color", "Link color"),
3922
3922
  defaultValue: linkColor,
3923
3923
  onChange: (linkColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { linkColor: linkColor2 }) }))
3924
3924
  }
@@ -3946,7 +3946,7 @@ function SpacerSidebarPanel({ data, setData }) {
3946
3946
  return /* @__PURE__ */ React57__default.default.createElement(BaseSidebarPanel, { title: "Spacer block" }, /* @__PURE__ */ React57__default.default.createElement(
3947
3947
  SliderInput,
3948
3948
  {
3949
- label: "Height",
3949
+ label: t("field.height", "Height"),
3950
3950
  iconLabel: /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.HeightOutlined, { sx: { color: "text.secondary" } }),
3951
3951
  units: "px",
3952
3952
  step: 4,
@@ -3972,7 +3972,7 @@ function TextSidebarPanel({ data, setData }) {
3972
3972
  return /* @__PURE__ */ React57__default.default.createElement(BaseSidebarPanel, { title: "Text block" }, /* @__PURE__ */ React57__default.default.createElement(
3973
3973
  TextInput,
3974
3974
  {
3975
- label: "Content",
3975
+ label: t("field.content", "Content"),
3976
3976
  rows: 5,
3977
3977
  defaultValue: (_b = (_a = data.props) == null ? void 0 : _a.text) != null ? _b : "",
3978
3978
  onChange: (text) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { text }) }))
@@ -3980,7 +3980,7 @@ function TextSidebarPanel({ data, setData }) {
3980
3980
  ), /* @__PURE__ */ React57__default.default.createElement(
3981
3981
  BooleanInput,
3982
3982
  {
3983
- label: "Markdown",
3983
+ label: t("field.markdown", "Markdown"),
3984
3984
  defaultValue: (_d = (_c = data.props) == null ? void 0 : _c.markdown) != null ? _d : false,
3985
3985
  onChange: (markdown) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { markdown }) }))
3986
3986
  }
@@ -4757,10 +4757,10 @@ function InspectorDrawer({
4757
4757
  variant: "fullWidth",
4758
4758
  sx: { "& .MuiTab-root": { minWidth: 0, px: 1, fontSize: 13 } }
4759
4759
  },
4760
- /* @__PURE__ */ React57__default.default.createElement(material.Tab, { value: "styles", label: "Styles" }),
4761
- /* @__PURE__ */ React57__default.default.createElement(material.Tab, { value: "block-configuration", label: "Inspect" }),
4762
- /* @__PURE__ */ React57__default.default.createElement(material.Tab, { value: "variables", label: "Variables" }),
4763
- /* @__PURE__ */ React57__default.default.createElement(material.Tab, { value: "template-settings", label: "Settings" })
4760
+ /* @__PURE__ */ React57__default.default.createElement(material.Tab, { value: "styles", label: t("inspector.tab.styles", "Styles") }),
4761
+ /* @__PURE__ */ React57__default.default.createElement(material.Tab, { value: "block-configuration", label: t("inspector.tab.inspect", "Inspect") }),
4762
+ /* @__PURE__ */ React57__default.default.createElement(material.Tab, { value: "variables", label: t("inspector.tab.variables", "Variables") }),
4763
+ /* @__PURE__ */ React57__default.default.createElement(material.Tab, { value: "template-settings", label: t("inspector.tab.settings", "Settings") })
4764
4764
  ))),
4765
4765
  /* @__PURE__ */ React57__default.default.createElement(material.Box, { sx: { width: INSPECTOR_DRAWER_WIDTH, height: "calc(100% - 49px)", overflow: "auto" } }, renderCurrentSidebarPanel())
4766
4766
  );
@@ -4806,17 +4806,17 @@ function relativeTime(iso) {
4806
4806
  if (Number.isNaN(date)) return null;
4807
4807
  const diffMs = Date.now() - date;
4808
4808
  const diffSec = Math.round(diffMs / 1e3);
4809
- if (diffSec < 60) return "just now";
4809
+ if (diffSec < 60) return t("time.just-now", "just now");
4810
4810
  const diffMin = Math.round(diffSec / 60);
4811
- if (diffMin < 60) return `${diffMin}m ago`;
4811
+ if (diffMin < 60) return `${diffMin}${t("time.minutes-short", "m ago")}`;
4812
4812
  const diffHr = Math.round(diffMin / 60);
4813
- if (diffHr < 24) return `${diffHr}h ago`;
4813
+ if (diffHr < 24) return `${diffHr}${t("time.hours-short", "h ago")}`;
4814
4814
  const diffDay = Math.round(diffHr / 24);
4815
- if (diffDay < 30) return `${diffDay}d ago`;
4815
+ if (diffDay < 30) return `${diffDay}${t("time.days-short", "d ago")}`;
4816
4816
  const diffMo = Math.round(diffDay / 30);
4817
- if (diffMo < 12) return `${diffMo}mo ago`;
4817
+ if (diffMo < 12) return `${diffMo}${t("time.months-short", "mo ago")}`;
4818
4818
  const diffYr = Math.round(diffMo / 12);
4819
- return `${diffYr}y ago`;
4819
+ return `${diffYr}${t("time.years-short", "y ago")}`;
4820
4820
  }
4821
4821
  function TemplateRow({
4822
4822
  template,
@@ -4930,12 +4930,12 @@ function TemplateRow({
4930
4930
  sx: { height: 18, fontSize: "0.65rem", "& .MuiChip-label": { px: 0.75 } }
4931
4931
  }
4932
4932
  ))))),
4933
- hasActions && /* @__PURE__ */ React57__default.default.createElement(React57__default.default.Fragment, null, /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: "More" }, /* @__PURE__ */ React57__default.default.createElement(
4933
+ hasActions && /* @__PURE__ */ React57__default.default.createElement(React57__default.default.Fragment, null, /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: t("row.more", "More") }, /* @__PURE__ */ React57__default.default.createElement(
4934
4934
  material.IconButton,
4935
4935
  {
4936
4936
  size: "small",
4937
4937
  onClick: openMenu,
4938
- "aria-label": "Row actions",
4938
+ "aria-label": t("row.actions", "Row actions"),
4939
4939
  "aria-haspopup": "menu",
4940
4940
  "aria-expanded": Boolean(menuAnchor) || void 0,
4941
4941
  sx: {
@@ -4958,14 +4958,14 @@ function TemplateRow({
4958
4958
  transformOrigin: { vertical: "top", horizontal: "right" },
4959
4959
  slotProps: { paper: { sx: { minWidth: 200 } } }
4960
4960
  },
4961
- onRename && /* @__PURE__ */ React57__default.default.createElement(material.MenuItem, { onClick: runAction(onRename) }, /* @__PURE__ */ React57__default.default.createElement(material.ListItemIcon, null, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.DriveFileRenameOutlineOutlined, { fontSize: "small" })), /* @__PURE__ */ React57__default.default.createElement(material.ListItemText, null, "Edit name & tags\u2026")),
4962
- onDuplicate && /* @__PURE__ */ React57__default.default.createElement(material.MenuItem, { onClick: runAction(onDuplicate) }, /* @__PURE__ */ React57__default.default.createElement(material.ListItemIcon, null, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.ContentCopyOutlined, { fontSize: "small" })), /* @__PURE__ */ React57__default.default.createElement(material.ListItemText, null, "Duplicate")),
4963
- onDuplicateAsTemplate && /* @__PURE__ */ React57__default.default.createElement(material.MenuItem, { onClick: runAction(onDuplicateAsTemplate) }, /* @__PURE__ */ React57__default.default.createElement(material.ListItemIcon, null, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.LibraryAddOutlined, { fontSize: "small" })), /* @__PURE__ */ React57__default.default.createElement(material.ListItemText, null, "Duplicate as template")),
4964
- onPromote && /* @__PURE__ */ React57__default.default.createElement(material.MenuItem, { onClick: runAction(onPromote) }, /* @__PURE__ */ React57__default.default.createElement(material.ListItemIcon, null, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.FileUploadOutlined, { fontSize: "small" })), /* @__PURE__ */ React57__default.default.createElement(material.ListItemText, null, "Promote to sample")),
4965
- onDemote && /* @__PURE__ */ React57__default.default.createElement(material.MenuItem, { onClick: runAction(onDemote) }, /* @__PURE__ */ React57__default.default.createElement(material.ListItemIcon, null, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.FileDownloadOutlined, { fontSize: "small" })), /* @__PURE__ */ React57__default.default.createElement(material.ListItemText, null, "Demote to template")),
4961
+ onRename && /* @__PURE__ */ React57__default.default.createElement(material.MenuItem, { onClick: runAction(onRename) }, /* @__PURE__ */ React57__default.default.createElement(material.ListItemIcon, null, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.DriveFileRenameOutlineOutlined, { fontSize: "small" })), /* @__PURE__ */ React57__default.default.createElement(material.ListItemText, null, t("row.edit-details", "Edit name & tags\u2026"))),
4962
+ onDuplicate && /* @__PURE__ */ React57__default.default.createElement(material.MenuItem, { onClick: runAction(onDuplicate) }, /* @__PURE__ */ React57__default.default.createElement(material.ListItemIcon, null, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.ContentCopyOutlined, { fontSize: "small" })), /* @__PURE__ */ React57__default.default.createElement(material.ListItemText, null, t("row.duplicate", "Duplicate"))),
4963
+ onDuplicateAsTemplate && /* @__PURE__ */ React57__default.default.createElement(material.MenuItem, { onClick: runAction(onDuplicateAsTemplate) }, /* @__PURE__ */ React57__default.default.createElement(material.ListItemIcon, null, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.LibraryAddOutlined, { fontSize: "small" })), /* @__PURE__ */ React57__default.default.createElement(material.ListItemText, null, t("row.duplicate-as-template", "Duplicate as template"))),
4964
+ onPromote && /* @__PURE__ */ React57__default.default.createElement(material.MenuItem, { onClick: runAction(onPromote) }, /* @__PURE__ */ React57__default.default.createElement(material.ListItemIcon, null, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.FileUploadOutlined, { fontSize: "small" })), /* @__PURE__ */ React57__default.default.createElement(material.ListItemText, null, t("row.promote", "Promote to sample"))),
4965
+ onDemote && /* @__PURE__ */ React57__default.default.createElement(material.MenuItem, { onClick: runAction(onDemote) }, /* @__PURE__ */ React57__default.default.createElement(material.ListItemIcon, null, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.FileDownloadOutlined, { fontSize: "small" })), /* @__PURE__ */ React57__default.default.createElement(material.ListItemText, null, t("row.demote", "Demote to template"))),
4966
4966
  onDelete && [
4967
4967
  /* @__PURE__ */ React57__default.default.createElement(material.Divider, { key: "divider" }),
4968
- /* @__PURE__ */ React57__default.default.createElement(material.MenuItem, { key: "delete", onClick: runAction(onDelete), sx: { color: "error.main" } }, /* @__PURE__ */ React57__default.default.createElement(material.ListItemIcon, { sx: { color: "error.main" } }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.DeleteOutlined, { fontSize: "small" })), /* @__PURE__ */ React57__default.default.createElement(material.ListItemText, null, "Delete"))
4968
+ /* @__PURE__ */ React57__default.default.createElement(material.MenuItem, { key: "delete", onClick: runAction(onDelete), sx: { color: "error.main" } }, /* @__PURE__ */ React57__default.default.createElement(material.ListItemIcon, { sx: { color: "error.main" } }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.DeleteOutlined, { fontSize: "small" })), /* @__PURE__ */ React57__default.default.createElement(material.ListItemText, null, t("tune.delete", "Delete")))
4969
4969
  ]
4970
4970
  ))
4971
4971
  );
@@ -5522,7 +5522,7 @@ function NewTemplatePickerDialog({
5522
5522
  const [busy, setBusy] = React57.useState(false);
5523
5523
  React57.useEffect(() => {
5524
5524
  if (open) {
5525
- setName(defaultName != null ? defaultName : kind === "sample" ? "New sample" : "New template");
5525
+ setName(defaultName != null ? defaultName : t(kind === "sample" ? "drawer.new-sample" : "drawer.new-template", kind === "sample" ? "New sample" : "New template"));
5526
5526
  setSelectedStarter(null);
5527
5527
  setError(null);
5528
5528
  setBusy(false);
@@ -5530,9 +5530,9 @@ function NewTemplatePickerDialog({
5530
5530
  }, [open, defaultName, kind]);
5531
5531
  const validate = () => {
5532
5532
  const trimmed = name.trim();
5533
- if (!trimmed) return "Name is required";
5533
+ if (!trimmed) return t("picker.error-name-required", "Name is required");
5534
5534
  if (existingSlugs.some((s) => s.toLowerCase() === trimmed.toLowerCase())) {
5535
- return kind === "sample" ? "A sample with this name already exists" : "A template with this name already exists";
5535
+ return kind === "sample" ? t("picker.error-sample-taken", "A sample with this name already exists") : t("picker.error-template-taken", "A template with this name already exists");
5536
5536
  }
5537
5537
  return null;
5538
5538
  };
@@ -5551,7 +5551,7 @@ function NewTemplatePickerDialog({
5551
5551
  }
5552
5552
  });
5553
5553
  const pickable = samples.filter((s) => s.id !== "empty-email");
5554
- return /* @__PURE__ */ React57__default.default.createElement(material.Dialog, { open, onClose: busy ? void 0 : onClose, maxWidth: "sm", fullWidth: true }, /* @__PURE__ */ React57__default.default.createElement(material.DialogTitle, null, kind === "sample" ? "New sample" : "New template"), /* @__PURE__ */ React57__default.default.createElement(material.DialogContent, { dividers: true }, /* @__PURE__ */ React57__default.default.createElement(material.Typography, { variant: "subtitle2", sx: { mb: 1 } }, "Start from"), /* @__PURE__ */ React57__default.default.createElement(
5554
+ return /* @__PURE__ */ React57__default.default.createElement(material.Dialog, { open, onClose: busy ? void 0 : onClose, maxWidth: "sm", fullWidth: true }, /* @__PURE__ */ React57__default.default.createElement(material.DialogTitle, null, kind === "sample" ? t("picker.title-sample", "New sample") : t("picker.title-template", "New template")), /* @__PURE__ */ React57__default.default.createElement(material.DialogContent, { dividers: true }, /* @__PURE__ */ React57__default.default.createElement(material.Typography, { variant: "subtitle2", sx: { mb: 1 } }, t("picker.start-from", "Start from")), /* @__PURE__ */ React57__default.default.createElement(
5555
5555
  material.List,
5556
5556
  {
5557
5557
  dense: true,
@@ -5571,7 +5571,7 @@ function NewTemplatePickerDialog({
5571
5571
  selected: selectedStarter === null,
5572
5572
  onClick: () => setSelectedStarter(null)
5573
5573
  },
5574
- /* @__PURE__ */ React57__default.default.createElement(material.Box, { sx: { display: "flex", alignItems: "center", gap: 1.5, flex: 1 } }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.InsertDriveFileOutlined, { fontSize: "small", sx: { color: "text.secondary" } }), /* @__PURE__ */ React57__default.default.createElement(material.ListItemText, { primary: "Blank", secondary: "Start from an empty email" }))
5574
+ /* @__PURE__ */ React57__default.default.createElement(material.Box, { sx: { display: "flex", alignItems: "center", gap: 1.5, flex: 1 } }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.InsertDriveFileOutlined, { fontSize: "small", sx: { color: "text.secondary" } }), /* @__PURE__ */ React57__default.default.createElement(material.ListItemText, { primary: t("picker.blank-title", "Blank"), secondary: t("picker.blank-desc", "Start from an empty email") }))
5575
5575
  ),
5576
5576
  pickable.map((s) => /* @__PURE__ */ React57__default.default.createElement(
5577
5577
  material.ListItemButton,
@@ -5588,8 +5588,9 @@ function NewTemplatePickerDialog({
5588
5588
  autoFocus: true,
5589
5589
  fullWidth: true,
5590
5590
  size: "small",
5591
- label: "Name",
5591
+ label: t("rename.name-label", "Name"),
5592
5592
  value: name,
5593
+ onFocus: (e) => e.currentTarget.select(),
5593
5594
  onChange: (e) => {
5594
5595
  setName(e.target.value);
5595
5596
  if (error) setError(null);
@@ -5601,7 +5602,7 @@ function NewTemplatePickerDialog({
5601
5602
  helperText: error != null ? error : " ",
5602
5603
  disabled: busy
5603
5604
  }
5604
- )), /* @__PURE__ */ React57__default.default.createElement(material.DialogActions, null, /* @__PURE__ */ React57__default.default.createElement(material.Button, { onClick: onClose, disabled: busy }, "Cancel"), /* @__PURE__ */ React57__default.default.createElement(material.Button, { variant: "contained", onClick: handleCreate, disabled: busy }, busy ? "Creating\u2026" : `Create ${kind}`)));
5605
+ )), /* @__PURE__ */ React57__default.default.createElement(material.DialogActions, null, /* @__PURE__ */ React57__default.default.createElement(material.Button, { onClick: onClose, disabled: busy }, t("common.cancel", "Cancel")), /* @__PURE__ */ React57__default.default.createElement(material.Button, { variant: "contained", onClick: handleCreate, disabled: busy }, busy ? t("picker.creating", "Creating\u2026") : kind === "sample" ? t("picker.create-sample", "Create sample") : t("picker.create-template", "Create template"))));
5605
5606
  }
5606
5607
  function RenameDialog({
5607
5608
  open,
@@ -5640,12 +5641,12 @@ function RenameDialog({
5640
5641
  const handleSubmit = () => __async(null, null, function* () {
5641
5642
  const trimmedSlug = slug.trim();
5642
5643
  if (!trimmedSlug) {
5643
- setError("Please enter a name");
5644
+ setError(t("rename.error-empty", "Please enter a name"));
5644
5645
  return;
5645
5646
  }
5646
5647
  const slugChanged = trimmedSlug !== currentSlug;
5647
5648
  if (slugChanged && existingSlugs.some((s) => s.toLowerCase() === trimmedSlug.toLowerCase())) {
5648
- setError("A template with this name already exists");
5649
+ setError(t("rename.error-taken", "A template with this name already exists"));
5649
5650
  return;
5650
5651
  }
5651
5652
  if (!slugChanged && tagsUnchanged) {
@@ -5658,17 +5659,17 @@ function RenameDialog({
5658
5659
  onClose();
5659
5660
  } catch (e) {
5660
5661
  console.error("Error updating template details:", e);
5661
- setError("Failed to update template details");
5662
+ setError(t("rename.error-generic", "Failed to update template details"));
5662
5663
  } finally {
5663
5664
  setSubmitting(false);
5664
5665
  }
5665
5666
  });
5666
- return /* @__PURE__ */ React57__default.default.createElement(material.Dialog, { open, onClose: submitting ? void 0 : onClose, maxWidth: "sm", fullWidth: true }, /* @__PURE__ */ React57__default.default.createElement(material.DialogTitle, null, "Edit details"), /* @__PURE__ */ React57__default.default.createElement(material.DialogContent, null, /* @__PURE__ */ React57__default.default.createElement(
5667
+ return /* @__PURE__ */ React57__default.default.createElement(material.Dialog, { open, onClose: submitting ? void 0 : onClose, maxWidth: "sm", fullWidth: true }, /* @__PURE__ */ React57__default.default.createElement(material.DialogTitle, null, t("rename.title", "Edit details")), /* @__PURE__ */ React57__default.default.createElement(material.DialogContent, null, /* @__PURE__ */ React57__default.default.createElement(
5667
5668
  material.TextField,
5668
5669
  {
5669
5670
  autoFocus: true,
5670
5671
  margin: "dense",
5671
- label: "Name",
5672
+ label: t("rename.name-label", "Name"),
5672
5673
  fullWidth: true,
5673
5674
  variant: "outlined",
5674
5675
  value: slug,
@@ -5683,7 +5684,7 @@ function RenameDialog({
5683
5684
  if (e.key === "Enter" && !submitting) handleSubmit();
5684
5685
  }
5685
5686
  }
5686
- ), /* @__PURE__ */ React57__default.default.createElement(material.Typography, { variant: "caption", sx: { color: "text.secondary", display: "block", mt: 1, mb: 0.5 } }, "Tags"), tags.length > 0 ? /* @__PURE__ */ React57__default.default.createElement(material.Stack, { direction: "row", spacing: 0.5, sx: { flexWrap: "wrap", gap: 0.5, mb: 1 } }, tags.map((tag) => /* @__PURE__ */ React57__default.default.createElement(
5687
+ ), /* @__PURE__ */ React57__default.default.createElement(material.Typography, { variant: "caption", sx: { color: "text.secondary", display: "block", mt: 1, mb: 0.5 } }, t("rename.tags", "Tags")), tags.length > 0 ? /* @__PURE__ */ React57__default.default.createElement(material.Stack, { direction: "row", spacing: 0.5, sx: { flexWrap: "wrap", gap: 0.5, mb: 1 } }, tags.map((tag) => /* @__PURE__ */ React57__default.default.createElement(
5687
5688
  material.Chip,
5688
5689
  {
5689
5690
  key: tag,
@@ -5691,12 +5692,12 @@ function RenameDialog({
5691
5692
  size: "small",
5692
5693
  onDelete: submitting ? void 0 : () => removeTag(tag)
5693
5694
  }
5694
- ))) : /* @__PURE__ */ React57__default.default.createElement(material.Typography, { variant: "caption", sx: { color: "text.disabled", display: "block", mb: 1 } }, "No tags yet. Suggested: ", /* @__PURE__ */ React57__default.default.createElement("i", null, "transactional"), ", ", /* @__PURE__ */ React57__default.default.createElement("i", null, "marketing"), "."), /* @__PURE__ */ React57__default.default.createElement(
5695
+ ))) : /* @__PURE__ */ React57__default.default.createElement(material.Typography, { variant: "caption", sx: { color: "text.disabled", display: "block", mb: 1 } }, t("rename.no-tags", "No tags yet.")), /* @__PURE__ */ React57__default.default.createElement(
5695
5696
  material.TextField,
5696
5697
  {
5697
5698
  size: "small",
5698
5699
  fullWidth: true,
5699
- placeholder: "Add a tag and press Enter",
5700
+ placeholder: t("rename.tag-placeholder", "Add a tag and press Enter"),
5700
5701
  value: tagInput,
5701
5702
  onChange: (e) => setTagInput(e.target.value),
5702
5703
  disabled: submitting,
@@ -5719,18 +5720,18 @@ function RenameDialog({
5719
5720
  startIcon: /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.AddOutlined, { fontSize: "small" }),
5720
5721
  sx: { textTransform: "none" }
5721
5722
  },
5722
- "Add"
5723
+ t("common.add", "Add")
5723
5724
  ))
5724
5725
  }
5725
5726
  }
5726
- ), /* @__PURE__ */ React57__default.default.createElement(material.Box, { sx: { minHeight: 8 } })), /* @__PURE__ */ React57__default.default.createElement(material.DialogActions, null, /* @__PURE__ */ React57__default.default.createElement(material.Button, { onClick: onClose, disabled: submitting }, "Cancel"), /* @__PURE__ */ React57__default.default.createElement(
5727
+ ), /* @__PURE__ */ React57__default.default.createElement(material.Box, { sx: { minHeight: 8 } })), /* @__PURE__ */ React57__default.default.createElement(material.DialogActions, null, /* @__PURE__ */ React57__default.default.createElement(material.Button, { onClick: onClose, disabled: submitting }, t("common.cancel", "Cancel")), /* @__PURE__ */ React57__default.default.createElement(
5727
5728
  material.Button,
5728
5729
  {
5729
5730
  onClick: handleSubmit,
5730
5731
  variant: "contained",
5731
5732
  disabled: !slug.trim() || submitting
5732
5733
  },
5733
- submitting ? "Saving\u2026" : "Save"
5734
+ submitting ? t("common.saving", "Saving\u2026") : t("common.save", "Save")
5734
5735
  )));
5735
5736
  }
5736
5737
  function SaveTemplateDialog({
@@ -5739,7 +5740,8 @@ function SaveTemplateDialog({
5739
5740
  onSave,
5740
5741
  onNameChange,
5741
5742
  defaultName = "",
5742
- error: externalError = null
5743
+ error: externalError = null,
5744
+ mode = "save-as"
5743
5745
  }) {
5744
5746
  const [templateName, setTemplateName] = React57.useState(defaultName);
5745
5747
  const [internalError, setInternalError] = React57.useState("");
@@ -5763,7 +5765,7 @@ function SaveTemplateDialog({
5763
5765
  };
5764
5766
  const handleSave = () => __async(null, null, function* () {
5765
5767
  if (!templateName.trim()) {
5766
- setInternalError("Please enter a template name");
5768
+ setInternalError(t("save-dialog.error-empty-name", "Please enter a template name"));
5767
5769
  return;
5768
5770
  }
5769
5771
  setIsSubmitting(true);
@@ -5800,19 +5802,20 @@ function SaveTemplateDialog({
5800
5802
  maxWidth: "sm",
5801
5803
  fullWidth: true
5802
5804
  },
5803
- /* @__PURE__ */ React57__default.default.createElement(material.DialogTitle, null, "Save Email Template"),
5805
+ /* @__PURE__ */ React57__default.default.createElement(material.DialogTitle, null, mode === "new" ? t("save-dialog.title-new", "Create a new template") : t("save-dialog.title", "Save as a new template")),
5804
5806
  /* @__PURE__ */ React57__default.default.createElement(material.DialogContent, null, /* @__PURE__ */ React57__default.default.createElement(material.Box, { sx: { pt: 1 } }, /* @__PURE__ */ React57__default.default.createElement(
5805
5807
  material.TextField,
5806
5808
  {
5807
5809
  autoFocus: true,
5808
5810
  margin: "dense",
5809
5811
  id: "template-name",
5810
- label: "Template Name",
5812
+ label: t("save-dialog.name-label", "Template Name"),
5811
5813
  type: "text",
5812
5814
  fullWidth: true,
5813
5815
  variant: "outlined",
5814
5816
  value: templateName,
5815
5817
  onChange: handleNameChange,
5818
+ onFocus: (e) => e.currentTarget.select(),
5816
5819
  error: !!displayError,
5817
5820
  helperText: displayError,
5818
5821
  onKeyPress: (e) => {
@@ -5823,7 +5826,7 @@ function SaveTemplateDialog({
5823
5826
  disabled: isSubmitting
5824
5827
  }
5825
5828
  ))),
5826
- /* @__PURE__ */ React57__default.default.createElement(material.DialogActions, null, /* @__PURE__ */ React57__default.default.createElement(material.Button, { onClick: handleCancel, disabled: isSubmitting }, "Cancel"), /* @__PURE__ */ React57__default.default.createElement(
5829
+ /* @__PURE__ */ React57__default.default.createElement(material.DialogActions, null, /* @__PURE__ */ React57__default.default.createElement(material.Button, { onClick: handleCancel, disabled: isSubmitting }, t("common.cancel", "Cancel")), /* @__PURE__ */ React57__default.default.createElement(
5827
5830
  material.Button,
5828
5831
  {
5829
5832
  onClick: handleSave,
@@ -5831,7 +5834,7 @@ function SaveTemplateDialog({
5831
5834
  color: "primary",
5832
5835
  disabled: !templateName.trim() || !!displayError || isSubmitting
5833
5836
  },
5834
- isSubmitting ? "Saving..." : "Save Template"
5837
+ isSubmitting ? t("save-dialog.saving", "Saving...") : mode === "new" ? t("save-dialog.create", "Create") : t("save-dialog.save", "Save")
5835
5838
  ))
5836
5839
  );
5837
5840
  }
@@ -5853,12 +5856,12 @@ var empty_email_message_default = EMPTY_EMAIL_MESSAGE;
5853
5856
 
5854
5857
  // src/app/templates-drawer/index.tsx
5855
5858
  var SAMPLES_DRAWER_WIDTH = 320;
5856
- var EMPTY_TEMPLATE = {
5859
+ var buildEmptyTemplate = () => ({
5857
5860
  id: "empty-email",
5858
- slug: "Empty email",
5861
+ slug: t("empty.slug", "Empty email"),
5859
5862
  kind: "sample",
5860
- description: "A blank email template to start from scratch"
5861
- };
5863
+ description: t("empty.description", "A blank email template to start from scratch")
5864
+ });
5862
5865
  var SORT_OPTIONS = [
5863
5866
  { value: "updatedAt", labelKey: "sort.last-updated", fallback: "Last updated" },
5864
5867
  { value: "createdAt", labelKey: "sort.recently-created", fallback: "Recently created" },
@@ -5893,7 +5896,7 @@ function SamplesDrawer({
5893
5896
  const samplesDrawerOpen = useSamplesDrawerOpen();
5894
5897
  const { setCurrentTemplate, loadTemplate: ctxLoadTemplate } = useEmailEditor();
5895
5898
  const { showMessage } = useSnackbar();
5896
- const [samples, setSamples] = React57.useState([EMPTY_TEMPLATE]);
5899
+ const [samples, setSamples] = React57.useState([buildEmptyTemplate()]);
5897
5900
  const [templates, setTemplates] = React57.useState([]);
5898
5901
  const [loadingSamples, setLoadingSamples] = React57.useState(false);
5899
5902
  const [loadingTemplates, setLoadingTemplates] = React57.useState(false);
@@ -5922,10 +5925,10 @@ function SamplesDrawer({
5922
5925
  loadSamples().then((results) => {
5923
5926
  const normalized = withKind(results, "sample");
5924
5927
  const existingEmpty = normalized.find((s) => s.id === "empty-email");
5925
- setSamples(existingEmpty ? normalized : [EMPTY_TEMPLATE, ...normalized]);
5928
+ setSamples(existingEmpty ? normalized : [buildEmptyTemplate(), ...normalized]);
5926
5929
  }).catch((error) => {
5927
5930
  console.error("Failed to load samples:", error);
5928
- setSamples([EMPTY_TEMPLATE]);
5931
+ setSamples([buildEmptyTemplate()]);
5929
5932
  }).finally(() => setLoadingSamples(false));
5930
5933
  }, [enabled, samplesDrawerOpen, loadSamples]);
5931
5934
  const refreshTemplates = () => __async(null, null, function* () {
@@ -8502,31 +8505,31 @@ function MainTabsGroup() {
8502
8505
  material.Tab,
8503
8506
  {
8504
8507
  value: "editor",
8505
- label: /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: "Edit" }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.EditOutlined, { fontSize: "small" }))
8508
+ label: /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: t("tab.edit", "Edit") }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.EditOutlined, { fontSize: "small" }))
8506
8509
  }
8507
8510
  ), /* @__PURE__ */ React57__default.default.createElement(
8508
8511
  material.Tab,
8509
8512
  {
8510
8513
  value: "preview",
8511
- label: /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: "Preview" }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.PreviewOutlined, { fontSize: "small" }))
8514
+ label: /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: t("tab.preview", "Preview") }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.PreviewOutlined, { fontSize: "small" }))
8512
8515
  }
8513
8516
  ), /* @__PURE__ */ React57__default.default.createElement(
8514
8517
  material.Tab,
8515
8518
  {
8516
8519
  value: "html",
8517
- label: /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: "HTML output" }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.CodeOutlined, { fontSize: "small" }))
8520
+ label: /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: t("tab.html-output", "HTML output") }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.CodeOutlined, { fontSize: "small" }))
8518
8521
  }
8519
8522
  ), /* @__PURE__ */ React57__default.default.createElement(
8520
8523
  material.Tab,
8521
8524
  {
8522
8525
  value: "text",
8523
- label: /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: "Plain text output" }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.SubjectOutlined, { fontSize: "small" }))
8526
+ label: /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: t("tab.text-output", "Plain text output") }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.SubjectOutlined, { fontSize: "small" }))
8524
8527
  }
8525
8528
  ), /* @__PURE__ */ React57__default.default.createElement(
8526
8529
  material.Tab,
8527
8530
  {
8528
8531
  value: "json",
8529
- label: /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: "JSON output" }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.DataObjectOutlined, { fontSize: "small" }))
8532
+ label: /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: t("tab.json-output", "JSON output") }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.DataObjectOutlined, { fontSize: "small" }))
8530
8533
  }
8531
8534
  ));
8532
8535
  }
@@ -8671,6 +8674,7 @@ function SaveBar({ loadTemplates, saveAs }) {
8671
8674
  SaveTemplateDialog,
8672
8675
  {
8673
8676
  open: dialogMode !== null,
8677
+ mode: dialogMode === "new-blank" ? "new" : "save-as",
8674
8678
  onClose: () => {
8675
8679
  setDialogMode(null);
8676
8680
  setNameError(null);
@@ -9038,7 +9042,7 @@ function TemplatePanel2({ loadTemplates, saveAs, samplesDrawerEnabled = true })
9038
9042
  alignItems: "center"
9039
9043
  },
9040
9044
  samplesDrawerEnabled && /* @__PURE__ */ React57__default.default.createElement(ToggleSamplesPanelButton, null),
9041
- /* @__PURE__ */ React57__default.default.createElement(material.Stack, { px: 2, direction: "row", gap: 2, width: "100%", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React57__default.default.createElement(material.Stack, { direction: "row", spacing: 2 }, /* @__PURE__ */ React57__default.default.createElement(MainTabsGroup, null)), /* @__PURE__ */ React57__default.default.createElement(material.Stack, { direction: "row", spacing: 2, alignItems: "center" }, selectedMainTab === "editor" && /* @__PURE__ */ React57__default.default.createElement(UndoRedoButtons, null), /* @__PURE__ */ React57__default.default.createElement(material.ToggleButtonGroup, { value: selectedScreenSize, exclusive: true, size: "small", onChange: handleScreenSizeChange }, /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "desktop" }, /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: "Desktop view" }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.MonitorOutlined, { fontSize: "small" }))), /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "mobile" }, /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: "Mobile view" }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.PhoneIphoneOutlined, { fontSize: "small" })))))),
9045
+ /* @__PURE__ */ React57__default.default.createElement(material.Stack, { px: 2, direction: "row", gap: 2, width: "100%", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React57__default.default.createElement(material.Stack, { direction: "row", spacing: 2 }, /* @__PURE__ */ React57__default.default.createElement(MainTabsGroup, null)), /* @__PURE__ */ React57__default.default.createElement(material.Stack, { direction: "row", spacing: 2, alignItems: "center" }, selectedMainTab === "editor" && /* @__PURE__ */ React57__default.default.createElement(UndoRedoButtons, null), /* @__PURE__ */ React57__default.default.createElement(material.ToggleButtonGroup, { value: selectedScreenSize, exclusive: true, size: "small", onChange: handleScreenSizeChange }, /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "desktop" }, /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: t("canvas.desktop-view", "Desktop view") }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.MonitorOutlined, { fontSize: "small" }))), /* @__PURE__ */ React57__default.default.createElement(material.ToggleButton, { value: "mobile" }, /* @__PURE__ */ React57__default.default.createElement(material.Tooltip, { title: t("canvas.mobile-view", "Mobile view") }, /* @__PURE__ */ React57__default.default.createElement(iconsMaterial.PhoneIphoneOutlined, { fontSize: "small" })))))),
9042
9046
  /* @__PURE__ */ React57__default.default.createElement(ToggleInspectorPanelButton, null)
9043
9047
  ), selectedMainTab === "editor" && /* @__PURE__ */ React57__default.default.createElement(SubjectInput, null), selectedMainTab === "preview" && /* @__PURE__ */ React57__default.default.createElement(SubjectPreview, null), /* @__PURE__ */ React57__default.default.createElement(ImageDropPasteHandler, { enabled: selectedMainTab === "editor" }, /* @__PURE__ */ React57__default.default.createElement(
9044
9048
  material.Box,