@templatical/editor 0.27.0 → 0.27.2

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 (134) hide show
  1. package/dist/{AiFeatureMenu-DvrK-dzj.js → AiFeatureMenu-DrLGc2H2.js} +1 -1
  2. package/dist/{BlockPreviewCanvas-GZbr0ph5.js → BlockPreviewCanvas-2WASf5A4.js} +1 -1
  3. package/dist/{CloudHeaderExtras-Cx8gFWu2.js → CloudHeaderExtras-DWApyc4P.js} +1 -1
  4. package/dist/{CloudPanels-D0X449DD.js → CloudPanels-DvOhGdRj.js} +6 -1
  5. package/dist/{CollaboratorBar-DMSWCrX3.js → CollaboratorBar-C6MC0UCk.js} +1 -1
  6. package/dist/{ColorPicker-DCjFQCAg.js → ColorPicker-Di8L5TLQ.js} +1 -1
  7. package/dist/{CountdownToolbar-CSftc9Ma.js → CountdownToolbar-d9QM4m5x.js} +3 -3
  8. package/dist/{NumberWithSuffix-DdPCXfKf.js → NumberWithSuffix-D9mPtMJB.js} +1 -1
  9. package/dist/{ParagraphEditor-vDU-5y6r.js → ParagraphEditor-iwTjkjtx.js} +4 -4
  10. package/dist/{RestoreVersionDialog-DIn1muFD.js → RestoreVersionDialog-DyMPGfsr.js} +2 -2
  11. package/dist/{RichTextEditorContent-I83k5DtQ.js → RichTextEditorContent-BVXG9oF4.js} +1 -1
  12. package/dist/{SaveBlockDialog-C_QvYAeL.js → SaveBlockDialog-BMCAIfK9.js} +4 -4
  13. package/dist/{SavedBlocksBrowserModal-CefWWcdT.js → SavedBlocksBrowserModal-p5ma1qay.js} +5 -5
  14. package/dist/{SavedBlocksPanels-DnQwO-7O.js → SavedBlocksPanels-BsiSstsZ.js} +1 -1
  15. package/dist/{SavedBlocksPickBar-BsFubArH.js → SavedBlocksPickBar-fU4Mjm-8.js} +1 -1
  16. package/dist/{TestEmailModal-STPWDP79.js → TestEmailModal-EFYcrmTk.js} +4 -4
  17. package/dist/{TestEmailPanel-HYVjApKZ.js → TestEmailPanel-ljriUqs1.js} +1 -1
  18. package/dist/{TitleEditor-DnB0EJ_g.js → TitleEditor-BqRW7HTz.js} +2 -2
  19. package/dist/{TplModal-chvLhXmC.js → TplModal-CTC9-w6B.js} +1 -1
  20. package/dist/{VersionHistoryPanels-D7k_F7-9.js → VersionHistoryPanels-GkxkBiSi.js} +1 -1
  21. package/dist/{VersionPreviewBanner-DthyHe6C.js → VersionPreviewBanner-BdtTu9mI.js} +1 -1
  22. package/dist/{blockTypeIcons-B8r4jMBn.js → blockTypeIcons-CIrMr1SJ.js} +1 -1
  23. package/dist/bundle-stats.json +6 -6
  24. package/dist/{ca-Cqg9O8mx.js → ca-CEuJ6IRr.js} +4 -100
  25. package/dist/cdn/chunks/{AiFeatureMenu-Dyh7mUMB.js → AiFeatureMenu-BQz9Kczt.js} +2 -2
  26. package/dist/cdn/chunks/{AiFeatureMenu-Dyh7mUMB.js.map → AiFeatureMenu-BQz9Kczt.js.map} +1 -1
  27. package/dist/cdn/chunks/{BlockPreviewCanvas-DStQFo9P.js → BlockPreviewCanvas-40ocpXDD.js} +2 -2
  28. package/dist/cdn/chunks/{BlockPreviewCanvas-DStQFo9P.js.map → BlockPreviewCanvas-40ocpXDD.js.map} +1 -1
  29. package/dist/cdn/chunks/{CloudHeaderExtras-BZVu7dnO.js → CloudHeaderExtras-F_ySlW1S.js} +2 -2
  30. package/dist/cdn/chunks/{CloudHeaderExtras-BZVu7dnO.js.map → CloudHeaderExtras-F_ySlW1S.js.map} +1 -1
  31. package/dist/cdn/chunks/{CloudPanels-CXbaBKHQ.js → CloudPanels-C34bcHpc.js} +8 -3
  32. package/dist/cdn/chunks/{CloudPanels-CXbaBKHQ.js.map → CloudPanels-C34bcHpc.js.map} +1 -1
  33. package/dist/cdn/chunks/{CollaboratorBar-BH_lZlat.js → CollaboratorBar-WBtrPPnM.js} +2 -2
  34. package/dist/cdn/chunks/{CollaboratorBar-BH_lZlat.js.map → CollaboratorBar-WBtrPPnM.js.map} +1 -1
  35. package/dist/cdn/chunks/{ColorPicker-CStXen0Y.js → ColorPicker-CxKYd_8N.js} +2 -2
  36. package/dist/cdn/chunks/{ColorPicker-CStXen0Y.js.map → ColorPicker-CxKYd_8N.js.map} +1 -1
  37. package/dist/cdn/chunks/{CountdownToolbar-CZPtQIb8.js → CountdownToolbar-pVbkPNVo.js} +4 -4
  38. package/dist/cdn/chunks/{CountdownToolbar-CZPtQIb8.js.map → CountdownToolbar-pVbkPNVo.js.map} +1 -1
  39. package/dist/cdn/chunks/MergeTagSuggestion-DhllqTA3.js.map +1 -1
  40. package/dist/cdn/chunks/{NumberWithSuffix-yeQLcCyH.js → NumberWithSuffix-mm6AfIv4.js} +2 -2
  41. package/dist/cdn/chunks/{NumberWithSuffix-yeQLcCyH.js.map → NumberWithSuffix-mm6AfIv4.js.map} +1 -1
  42. package/dist/cdn/chunks/{ParagraphEditor-BJJ925sx.js → ParagraphEditor-BBcIQQK2.js} +5 -5
  43. package/dist/cdn/chunks/ParagraphEditor-BBcIQQK2.js.map +1 -0
  44. package/dist/cdn/chunks/{RestoreVersionDialog-B0Jadu6F.js → RestoreVersionDialog-DNUZHFa_.js} +3 -3
  45. package/dist/cdn/chunks/{RestoreVersionDialog-B0Jadu6F.js.map → RestoreVersionDialog-DNUZHFa_.js.map} +1 -1
  46. package/dist/cdn/chunks/{RichTextEditorContent-CfSq2wPR.js → RichTextEditorContent-Cl-acKAD.js} +2 -2
  47. package/dist/cdn/chunks/{RichTextEditorContent-CfSq2wPR.js.map → RichTextEditorContent-Cl-acKAD.js.map} +1 -1
  48. package/dist/cdn/chunks/{SaveBlockDialog-C1DXh6P9.js → SaveBlockDialog-BXTZ729e.js} +5 -5
  49. package/dist/cdn/chunks/{SaveBlockDialog-C1DXh6P9.js.map → SaveBlockDialog-BXTZ729e.js.map} +1 -1
  50. package/dist/cdn/chunks/{SavedBlocksBrowserModal-BerMxAUt.js → SavedBlocksBrowserModal-BqGNBpRR.js} +5 -5
  51. package/dist/cdn/chunks/{SavedBlocksBrowserModal-BerMxAUt.js.map → SavedBlocksBrowserModal-BqGNBpRR.js.map} +1 -1
  52. package/dist/cdn/chunks/{SavedBlocksPanels-BUE4lzVP.js → SavedBlocksPanels-nbK0UQTp.js} +2 -2
  53. package/dist/cdn/chunks/{SavedBlocksPanels-BUE4lzVP.js.map → SavedBlocksPanels-nbK0UQTp.js.map} +1 -1
  54. package/dist/cdn/chunks/{SavedBlocksPickBar-4HrqQfvl.js → SavedBlocksPickBar-B9mbw3Gk.js} +2 -2
  55. package/dist/cdn/chunks/{SavedBlocksPickBar-4HrqQfvl.js.map → SavedBlocksPickBar-B9mbw3Gk.js.map} +1 -1
  56. package/dist/cdn/chunks/{TestEmailModal-yfmFiavR.js → TestEmailModal-DE6fi3he.js} +5 -5
  57. package/dist/cdn/chunks/{TestEmailModal-yfmFiavR.js.map → TestEmailModal-DE6fi3he.js.map} +1 -1
  58. package/dist/cdn/chunks/{TestEmailPanel-DqTDh5ri.js → TestEmailPanel-CAjQDXle.js} +2 -2
  59. package/dist/cdn/chunks/{TestEmailPanel-DqTDh5ri.js.map → TestEmailPanel-CAjQDXle.js.map} +1 -1
  60. package/dist/cdn/chunks/{TitleEditor-nUAF7fKr.js → TitleEditor-BP0ewaWF.js} +3 -3
  61. package/dist/cdn/chunks/{TitleEditor-nUAF7fKr.js.map → TitleEditor-BP0ewaWF.js.map} +1 -1
  62. package/dist/cdn/chunks/{TplModal-C0IqikoV.js → TplModal-C4kJduTr.js} +2 -2
  63. package/dist/cdn/chunks/{TplModal-C0IqikoV.js.map → TplModal-C4kJduTr.js.map} +1 -1
  64. package/dist/cdn/chunks/{VersionHistoryPanels-6Hz9w20W.js → VersionHistoryPanels-DMq2PRee.js} +2 -2
  65. package/dist/cdn/chunks/{VersionHistoryPanels-6Hz9w20W.js.map → VersionHistoryPanels-DMq2PRee.js.map} +1 -1
  66. package/dist/cdn/chunks/{VersionPreviewBanner-D098_6_I.js → VersionPreviewBanner-04CL1SGY.js} +2 -2
  67. package/dist/cdn/chunks/{VersionPreviewBanner-D098_6_I.js.map → VersionPreviewBanner-04CL1SGY.js.map} +1 -1
  68. package/dist/cdn/chunks/{ca-Cqg9O8mx.js → ca-CEuJ6IRr.js} +5 -101
  69. package/dist/cdn/chunks/ca-CEuJ6IRr.js.map +1 -0
  70. package/dist/cdn/chunks/cloud-BA0OpRh-.js.map +1 -1
  71. package/dist/cdn/chunks/{createCloudRuntime-DmzV7OnU.js → createCloudRuntime-gXA8_QRU.js} +2 -2
  72. package/dist/cdn/chunks/{createCloudRuntime-DmzV7OnU.js.map → createCloudRuntime-gXA8_QRU.js.map} +1 -1
  73. package/dist/{de-Dbwm2cON.js → cdn/chunks/de-BytZwgn6.js} +3 -34
  74. package/dist/cdn/chunks/de-BytZwgn6.js.map +1 -0
  75. package/dist/{de-BXmeeFbX.js → cdn/chunks/de-aRxhZF_K.js} +6 -100
  76. package/dist/cdn/chunks/de-aRxhZF_K.js.map +1 -0
  77. package/dist/cdn/chunks/{en-DE_y1YWU.js → en-BCgVx9zM.js} +4 -3
  78. package/dist/cdn/chunks/{en-DE_y1YWU.js.map → en-BCgVx9zM.js.map} +1 -1
  79. package/dist/{en-DbBNy67B.js → cdn/chunks/en-BX4V_7YO.js} +6 -100
  80. package/dist/cdn/chunks/en-BX4V_7YO.js.map +1 -0
  81. package/dist/{en-Dzw4EqNI.js → cdn/chunks/en-DyOSV0lY.js} +3 -34
  82. package/dist/cdn/chunks/en-DyOSV0lY.js.map +1 -0
  83. package/dist/{es-JUsAjxWu.js → cdn/chunks/es-CA9uQ-5x.js} +6 -100
  84. package/dist/cdn/chunks/es-CA9uQ-5x.js.map +1 -0
  85. package/dist/{fr-J3qgXH4h.js → cdn/chunks/fr-iBuE60Ap.js} +6 -100
  86. package/dist/cdn/chunks/fr-iBuE60Ap.js.map +1 -0
  87. package/dist/cdn/chunks/keys-CbQuRX85.js.map +1 -1
  88. package/dist/{nl-D_4DkqOi.js → cdn/chunks/nl-Btw4ojNo.js} +6 -100
  89. package/dist/cdn/chunks/nl-Btw4ojNo.js.map +1 -0
  90. package/dist/{pt-BR-BxzQzWGJ.js → cdn/chunks/pt-BR-C1WLSGDh.js} +3 -34
  91. package/dist/cdn/chunks/pt-BR-C1WLSGDh.js.map +1 -0
  92. package/dist/{pt-BR-KGURyEEQ.js → cdn/chunks/pt-BR-GjVsCqbN.js} +6 -100
  93. package/dist/cdn/chunks/pt-BR-GjVsCqbN.js.map +1 -0
  94. package/dist/cdn/chunks/src-B_QJduQD.js.map +1 -1
  95. package/dist/cdn/chunks/{src-Dq3fgSIx.js → src-CoHDh8Ua.js} +777 -765
  96. package/dist/cdn/chunks/src-CoHDh8Ua.js.map +1 -0
  97. package/dist/cdn/chunks/{src-BOjFLNf7.js → src-D5lajkK5.js} +3 -3
  98. package/dist/cdn/chunks/src-D5lajkK5.js.map +1 -0
  99. package/dist/cdn/chunks/{styleConstants-ByDqaYj_.js → styleConstants-9oK5kn21.js} +2 -4
  100. package/dist/cdn/chunks/{styleConstants-ByDqaYj_.js.map → styleConstants-9oK5kn21.js.map} +1 -1
  101. package/dist/cdn/chunks/{useEditorCore-CTu_qZ3W.js → useEditorCore-DC8gmfs6.js} +3 -3
  102. package/dist/cdn/chunks/useEditorCore-DC8gmfs6.js.map +1 -0
  103. package/dist/cdn/chunks/usePopoverPosition-BC-HA7TK.js.map +1 -1
  104. package/dist/cdn/editor.css +1 -1
  105. package/dist/cdn/editor.js +1095 -966
  106. package/dist/cdn/editor.js.map +1 -1
  107. package/dist/{cdn/chunks/de-Dbwm2cON.js → de-BytZwgn6.js} +1 -36
  108. package/dist/{cdn/chunks/de-BXmeeFbX.js → de-aRxhZF_K.js} +4 -102
  109. package/dist/{cdn/chunks/en-DbBNy67B.js → en-BX4V_7YO.js} +4 -102
  110. package/dist/{cdn/chunks/en-Dzw4EqNI.js → en-DyOSV0lY.js} +1 -36
  111. package/dist/{cdn/chunks/es-JUsAjxWu.js → es-CA9uQ-5x.js} +4 -102
  112. package/dist/{cdn/chunks/fr-J3qgXH4h.js → fr-iBuE60Ap.js} +4 -102
  113. package/dist/{cdn/chunks/nl-D_4DkqOi.js → nl-Btw4ojNo.js} +4 -102
  114. package/dist/{cdn/chunks/pt-BR-BxzQzWGJ.js → pt-BR-C1WLSGDh.js} +1 -36
  115. package/dist/{cdn/chunks/pt-BR-KGURyEEQ.js → pt-BR-GjVsCqbN.js} +4 -102
  116. package/dist/style.css +1 -1
  117. package/dist/{styleConstants-ByDqaYj_.js → styleConstants-9oK5kn21.js} +1 -3
  118. package/dist/templatical-editor.js +1248 -1119
  119. package/dist/{useEditorCore-B-kONNRw.js → useEditorCore-CFLzobo_.js} +2 -2
  120. package/package.json +9 -8
  121. package/dist/cdn/chunks/ParagraphEditor-BJJ925sx.js.map +0 -1
  122. package/dist/cdn/chunks/ca-Cqg9O8mx.js.map +0 -1
  123. package/dist/cdn/chunks/de-BXmeeFbX.js.map +0 -1
  124. package/dist/cdn/chunks/de-Dbwm2cON.js.map +0 -1
  125. package/dist/cdn/chunks/en-DbBNy67B.js.map +0 -1
  126. package/dist/cdn/chunks/en-Dzw4EqNI.js.map +0 -1
  127. package/dist/cdn/chunks/es-JUsAjxWu.js.map +0 -1
  128. package/dist/cdn/chunks/fr-J3qgXH4h.js.map +0 -1
  129. package/dist/cdn/chunks/nl-D_4DkqOi.js.map +0 -1
  130. package/dist/cdn/chunks/pt-BR-BxzQzWGJ.js.map +0 -1
  131. package/dist/cdn/chunks/pt-BR-KGURyEEQ.js.map +0 -1
  132. package/dist/cdn/chunks/src-BOjFLNf7.js.map +0 -1
  133. package/dist/cdn/chunks/src-Dq3fgSIx.js.map +0 -1
  134. package/dist/cdn/chunks/useEditorCore-CTu_qZ3W.js.map +0 -1
@@ -26,9 +26,9 @@ var e = {
26
26
  daysAgo: "il y a {days} j"
27
27
  },
28
28
  history: {
29
+ collabWarning: "Annuler peut affecter les modifications récentes de vos collaborateurs",
29
30
  undo: "Annuler",
30
- redo: "Rétablir",
31
- collabWarning: "Annuler peut affecter les modifications récentes de vos collaborateurs"
31
+ redo: "Rétablir"
32
32
  },
33
33
  viewport: {
34
34
  label: "Affichage",
@@ -99,8 +99,7 @@ var e = {
99
99
  highlightColor: "Couleur de surlignage",
100
100
  lineHeight: "Interligne",
101
101
  letterSpacing: "Espacement des lettres",
102
- emojiItemLabel: "Insérer l'émoji {emoji}",
103
- closeEmojiPicker: "Fermer le sélecteur d'émojis"
102
+ emojiItemLabel: "Insérer l'émoji {emoji}"
104
103
  },
105
104
  blockActions: {
106
105
  drag: "Faites glisser pour réorganiser, ou appuyez sur Espace pour déplacer au clavier",
@@ -168,6 +167,7 @@ var e = {
168
167
  linkUrl: "URL du lien",
169
168
  openInNewTab: "Ouvrir dans un nouvel onglet",
170
169
  placeholderUrl: "Image de substitution",
170
+ optional: "(facultatif)",
171
171
  placeholderUrlPlaceholder: "https://... (conception uniquement)",
172
172
  placeholderUrlTooltip: "L'URL de l'image utilisant une balise de fusion, vous pouvez fournir ici une vraie image pour prévisualiser la mise en page pendant la conception. Elle n'est pas incluse dans le résultat final.",
173
173
  clickToAdd: "Cliquez pour ajouter l'URL de l'image",
@@ -180,9 +180,6 @@ var e = {
180
180
  video: {
181
181
  videoUrl: "URL de la vidéo",
182
182
  videoUrlPlaceholder: "https://youtube.com/...",
183
- youtube: "YouTube",
184
- vimeo: "Vimeo",
185
- detected: "Vidéo détectée — la miniature sera générée automatiquement",
186
183
  openInNewTab: "Ouvrir dans un nouvel onglet",
187
184
  customThumbnail: "Miniature personnalisée",
188
185
  optional: "(facultatif)",
@@ -225,8 +222,6 @@ var e = {
225
222
  addIcon: "Ajouter une icône",
226
223
  addIcons: "Ajoutez des icônes de réseaux sociaux",
227
224
  removeIcon: "Supprimer",
228
- platform: "Plateforme",
229
- url: "URL",
230
225
  urlPlaceholder: "https://...",
231
226
  style: "Style",
232
227
  styleSolid: "Plein",
@@ -265,7 +260,6 @@ var e = {
265
260
  addItem: "Ajouter un élément",
266
261
  removeItem: "Supprimer",
267
262
  text: "Texte",
268
- url: "URL",
269
263
  urlPlaceholder: "https://example.com",
270
264
  openInNewTab: "Ouvrir dans un nouvel onglet",
271
265
  bold: "Gras",
@@ -284,10 +278,6 @@ var e = {
284
278
  dimensions: "Dimensions",
285
279
  rows: "Lignes",
286
280
  columns: "Colonnes",
287
- addRow: "Ajouter une ligne",
288
- removeRow: "Supprimer la ligne",
289
- addColumn: "Ajouter une colonne",
290
- removeColumn: "Supprimer la colonne",
291
281
  hasHeaderRow: "Ligne d'en-tête",
292
282
  headerBackgroundColor: "Fond de l'en-tête",
293
283
  noHeaderBg: "Sans fond",
@@ -433,7 +423,6 @@ var e = {
433
423
  noResults: "Aucune balise de fusion correspondante",
434
424
  empty: "Aucune balise de fusion configurée",
435
425
  otherGroup: "Autres",
436
- cancel: "Annuler",
437
426
  close: "Fermer",
438
427
  groupCount: "{count}",
439
428
  sample: "Aperçu : {sample}"
@@ -461,90 +450,6 @@ var e = {
461
450
  aiHintDesign: "Vous avez déjà un design ? Téléversez une capture d'écran, une image ou un PDF et",
462
451
  aiHintDesignSuffix: "le recréera instantanément"
463
452
  },
464
- mediaLibrary: {
465
- title: "Médiathèque",
466
- searchPlaceholder: "Rechercher des fichiers...",
467
- allFiles: "Tous les fichiers",
468
- filterAll: "Tous les types",
469
- filterImages: "Images",
470
- filterDocuments: "Documents",
471
- filterVideos: "Vidéos",
472
- filterAudio: "Audio",
473
- newFolder: "Nouveau dossier",
474
- folderName: "Nom du dossier",
475
- noFiles: "Aucun fichier trouvé",
476
- dropOrClick: "Déposez des fichiers ici ou cliquez pour téléverser",
477
- acceptedFormats: "Images, PDF, vidéo, audio, documents (max 10 Mo)",
478
- uploading: "Téléversement...",
479
- uploadingProgress: "Téléversement de {current} sur {total}...",
480
- selectImage: "Sélectionner l'image",
481
- selectFile: "Sélectionner le fichier",
482
- deleteSelected: "Supprimer",
483
- copyUrl: "Copier l'URL",
484
- copied: "Copié !",
485
- browseMedia: "Parcourir la médiathèque",
486
- renameFolder: "Renommer le dossier",
487
- addSubfolder: "Ajouter un sous-dossier",
488
- subfolderName: "Nom du sous-dossier",
489
- sortNewest: "Plus récents d'abord",
490
- sortOldest: "Plus anciens d'abord",
491
- sortNameAsc: "Nom A-Z",
492
- sortNameDesc: "Nom Z-A",
493
- sortSizeAsc: "Plus petits d'abord",
494
- sortSizeDesc: "Plus grands d'abord",
495
- moveSelected: "Déplacer",
496
- moveToRoot: "Tous les fichiers",
497
- currentFolder: "(actuel)",
498
- confirmDelete: "Supprimer ce fichier ?",
499
- renameFile: "Renommer",
500
- editFile: "Modifier le fichier",
501
- fileName: "Nom de fichier",
502
- altText: "Texte alternatif",
503
- altTextPlaceholder: "Décrivez cette image pour l'accessibilité",
504
- saveChanges: "Enregistrer",
505
- cancel: "Annuler",
506
- frequentlyUsed: "Fréquemment utilisés",
507
- deleteWarningTitle: "Supprimer le fichier",
508
- deleteWarningMessage: "Ce fichier sera définitivement supprimé et ne pourra pas être récupéré.",
509
- deleteWarningUsageNote: "Les fichiers suivants sont utilisés dans des modèles. Les supprimer peut casser ces modèles.",
510
- deleteAnyway: "Supprimer le fichier",
511
- usedInTemplates: "Utilisé dans {count} modèle(s)",
512
- viewGrid: "Vue en grille",
513
- viewList: "Vue en liste",
514
- showFolders: "Afficher les dossiers",
515
- hideFolders: "Masquer les dossiers",
516
- importFromUrl: "Importer depuis une URL",
517
- importUrlPlaceholder: "https://example.com/image.jpg",
518
- import: "Importer",
519
- importing: "Importation...",
520
- importError: "Échec de l'importation depuis l'URL",
521
- conversionLabel: "Taille",
522
- conversionOriginal: "Originale",
523
- conversionSmall: "Petite (150px)",
524
- conversionMedium: "Moyenne (600px)",
525
- conversionLarge: "Grande (1200px)",
526
- replaceFile: "Remplacer le fichier",
527
- replaceWarningTitle: "Remplacer le fichier",
528
- replaceWarningMessage: "Vous êtes sur le point de remplacer ce fichier. Le remplacement doit avoir la même extension ({extension}).",
529
- replaceWarningUsageNote: "Ce fichier est utilisé dans {count} modèle(s). Le remplacer mettra à jour toutes les références.",
530
- replaceSelectFile: "Sélectionner le fichier de remplacement",
531
- replace: "Remplacer",
532
- replacing: "Remplacement...",
533
- replaceError: "Échec du remplacement du fichier",
534
- saving: "Enregistrement...",
535
- cropAspectRatio: "Proportions",
536
- cropFree: "Libre",
537
- cropSquare: "1:1",
538
- cropLandscape43: "4:3",
539
- cropLandscape169: "16:9",
540
- cropOriginal: "Originales",
541
- cropMaxWidth: "Largeur max",
542
- cropMaxHeight: "Hauteur max",
543
- cropOutputSize: "Taille de sortie",
544
- cropPixels: "px",
545
- cropOptional: "(facultatif)",
546
- storageTooltip: "{used} sur {total} utilisés ({remaining} restants)"
547
- },
548
453
  savedBlocks: {
549
454
  title: "Blocs enregistrés",
550
455
  saveAsBlock: "Enregistrer comme bloc",
@@ -661,7 +566,6 @@ var e = {
661
566
  },
662
567
  sidebarNav: {
663
568
  browseSavedBlocks: "Parcourir les blocs enregistrés",
664
- expandSidebar: "Développer la barre latérale des blocs",
665
569
  palette: "Palette de blocs",
666
570
  insertBlock: "Insérer un bloc {block}"
667
571
  },
@@ -696,3 +600,5 @@ var e = {
696
600
  };
697
601
  //#endregion
698
602
  export { e as default };
603
+
604
+ //# sourceMappingURL=fr-iBuE60Ap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fr-iBuE60Ap.js","names":[],"sources":["../../../src/i18n/locales/fr.ts"],"sourcesContent":["import type en from \"./en\";\n\nconst fr: typeof en = {\n footer: {\n poweredBy: \"Propulsé par\",\n openSource: \"Open Source\",\n },\n\n header: {\n save: \"Enregistrer\",\n saving: \"Enregistrement...\",\n saved: \"Enregistré\",\n unsaved: \"Non enregistré\",\n saveFailed: \"Échec de l'enregistrement\",\n saveNoTemplate: \"Chargez ou créez d'abord un modèle\",\n templateName: \"Nom du modèle\",\n rename: \"Renommer le modèle\",\n untitled: \"Sans titre\",\n updatedAt: \"Modifié {time}\",\n createdAt: \"Créé {time}\",\n updatedJustNow: \"Modifié à l'instant\",\n createdJustNow: \"Créé à l'instant\",\n },\n\n // Relative timestamps, shared by every surface that shows one: the header's\n // updated line, saved blocks, comments and version history.\n time: {\n justNow: \"À l'instant\",\n minutesAgo: \"il y a {minutes} min\",\n hoursAgo: \"il y a {hours} h\",\n daysAgo: \"il y a {days} j\",\n },\n\n history: {\n collabWarning:\n \"Annuler peut affecter les modifications récentes de vos collaborateurs\",\n undo: \"Annuler\",\n redo: \"Rétablir\",\n },\n viewport: {\n label: \"Affichage\",\n desktop: \"Ordinateur\",\n mobile: \"Mobile\",\n },\n darkMode: {\n enable: \"Aperçu en mode sombre\",\n disable: \"Aperçu en mode clair\",\n },\n previewMode: {\n enable: \"Mode aperçu\",\n disable: \"Quitter l'aperçu\",\n },\n blocks: {\n section: \"Section\",\n image: \"Image\",\n title: \"Titre\",\n paragraph: \"Paragraphe\",\n button: \"Bouton\",\n divider: \"Séparateur\",\n video: \"Vidéo\",\n social: \"Réseaux sociaux\",\n spacer: \"Espaceur\",\n html: \"HTML\",\n menu: \"Menu\",\n table: \"Tableau\",\n countdown: \"Compte à rebours\",\n },\n sidebar: {\n content: \"Contenu\",\n settings: \"Paramètres\",\n noSelection: \"Aucun élément sélectionné\",\n noSelectionHint: \"Sélectionnez un bloc sur le canevas pour le modifier\",\n },\n toolbar: {\n duplicate: \"Dupliquer\",\n delete: \"Supprimer\",\n },\n titleEditor: {\n toolbar: \"Mise en forme du titre\",\n bold: \"Gras (Ctrl+B)\",\n italic: \"Italique (Ctrl+I)\",\n addLink: \"Ajouter un lien\",\n },\n paragraphEditor: {\n toolbar: \"Mise en forme du texte\",\n bold: \"Gras (Ctrl+B)\",\n italic: \"Italique (Ctrl+I)\",\n underline: \"Souligné (Ctrl+U)\",\n strikethrough: \"Barré\",\n subscript: \"Indice\",\n superscript: \"Exposant\",\n addLink: \"Ajouter un lien\",\n bulletList: \"Liste à puces\",\n numberedList: \"Liste numérotée\",\n alignLeft: \"Aligner à gauche\",\n alignCenter: \"Centrer\",\n alignRight: \"Aligner à droite\",\n alignJustify: \"Justifier\",\n clearFormatting: \"Effacer la mise en forme\",\n insertEmoji: \"Insérer un émoji\",\n fontFamily: \"Police\",\n defaultFont: \"Par défaut\",\n fontSize: \"Taille de police\",\n defaultSize: \"Par défaut\",\n textColor: \"Couleur du texte\",\n highlightColor: \"Couleur de surlignage\",\n lineHeight: \"Interligne\",\n letterSpacing: \"Espacement des lettres\",\n emojiItemLabel: \"Insérer l'émoji {emoji}\",\n },\n blockActions: {\n drag: \"Faites glisser pour réorganiser, ou appuyez sur Espace pour déplacer au clavier\",\n dragLifted:\n \"Déplacement de {block}. Utilisez les flèches haut et bas pour repositionner, Espace ou Entrée pour déposer, Échap pour annuler.\",\n duplicate: \"Dupliquer le bloc\",\n delete: \"Supprimer le bloc\",\n hiddenOnViewport: \"Masqué sur {viewport}\",\n saveAsBlock: \"Enregistrer comme bloc\",\n conditionToggle: \"Basculer la condition d'affichage\",\n comments: \"Commentaires ({count})\",\n lifted: \"{block} saisi. Position {position} sur {total}.\",\n moved: \"{block} déplacé en position {position} sur {total}.\",\n dropped: \"{block} déposé en position {position} sur {total}.\",\n cancelled: \"Déplacement annulé. {block} est revenu en position {position}.\",\n },\n section: {\n dropHere: \"Déposez des blocs ici\",\n columns: \"Colonnes\",\n column1: \"1 colonne\",\n column2: \"2 colonnes\",\n column3: \"3 colonnes\",\n ratio12: \"Ratio 1:2\",\n ratio21: \"Ratio 2:1\",\n borderRadius: \"Rayon de bordure\",\n wrapperEnable: \"Ajouter un conteneur\",\n stackOnMobile: \"Empiler sur mobile\",\n },\n linkDialog: {\n editLink: \"Modifier le lien\",\n insertLink: \"Insérer un lien\",\n updateLink: \"Mettre à jour le lien\",\n removeLink: \"Supprimer le lien\",\n cancel: \"Annuler\",\n urlPlaceholder: \"https://example.com\",\n urlLabel: \"URL\",\n colorLabel: \"Couleur du lien\",\n },\n title: {\n level: \"Niveau de titre\",\n heading1: \"Titre 1 (36px)\",\n heading2: \"Titre 2 (28px)\",\n heading3: \"Titre 3 (22px)\",\n heading4: \"Titre 4 (18px)\",\n fontFamily: \"Police\",\n inheritFont: \"Utiliser la police du modèle\",\n color: \"Couleur\",\n align: \"Aligner\",\n alignLeft: \"Gauche\",\n alignCenter: \"Centre\",\n alignRight: \"Droite\",\n },\n emoji: {\n smileys: \"Smileys\",\n gestures: \"Gestes\",\n objects: \"Objets\",\n },\n image: {\n imageUrl: \"URL de l'image\",\n imageUrlPlaceholder: \"https://...\",\n altText: \"Texte alternatif\",\n altTextPlaceholder: \"Description de l'image\",\n width: \"Largeur\",\n fullWidth: \"Pleine largeur\",\n widthCustom: \"Personnalisée\",\n linkUrl: \"URL du lien\",\n openInNewTab: \"Ouvrir dans un nouvel onglet\",\n placeholderUrl: \"Image de substitution\",\n optional: \"(facultatif)\",\n placeholderUrlPlaceholder: \"https://... (conception uniquement)\",\n placeholderUrlTooltip:\n \"L'URL de l'image utilisant une balise de fusion, vous pouvez fournir ici une vraie image pour prévisualiser la mise en page pendant la conception. Elle n'est pas incluse dans le résultat final.\",\n clickToAdd: \"Cliquez pour ajouter l'URL de l'image\",\n browseMedia: \"Parcourir la médiathèque\",\n dropToUpload: \"Déposez une image pour la téléverser\",\n uploading: \"Téléversement…\",\n decorative: \"Image décorative\",\n decorativeHint:\n \"Masquée pour les lecteurs d'écran. À réserver aux espaceurs et ornements visuels.\",\n },\n video: {\n videoUrl: \"URL de la vidéo\",\n videoUrlPlaceholder: \"https://youtube.com/...\",\n openInNewTab: \"Ouvrir dans un nouvel onglet\",\n customThumbnail: \"Miniature personnalisée\",\n optional: \"(facultatif)\",\n thumbnailPlaceholder: \"Générée automatiquement depuis l'URL de la vidéo\",\n altText: \"Texte alternatif\",\n altTextPlaceholder: \"Description de la vidéo\",\n width: \"Largeur\",\n fullWidth: \"Pleine largeur\",\n placeholderUrl: \"Miniature de substitution\",\n placeholderUrlPlaceholder: \"https://... (conception uniquement)\",\n placeholderUrlTooltip:\n \"L'URL de la vidéo utilisant une balise de fusion, vous pouvez fournir ici une vraie miniature pour prévisualiser la mise en page pendant la conception. Elle n'est pas incluse dans le résultat final.\",\n addVideo: \"Ajoutez une URL de vidéo\",\n },\n button: {\n fontFamily: \"Police\",\n inheritFont: \"Utiliser la police du modèle\",\n text: \"Texte\",\n url: \"URL\",\n urlPlaceholder: \"https://...\",\n openInNewTab: \"Ouvrir dans un nouvel onglet\",\n background: \"Fond\",\n textColor: \"Couleur du texte\",\n borderRadius: \"Rayon de bordure\",\n fontSize: \"Taille de police\",\n width: \"Largeur\",\n widthAuto: \"Ajuster au contenu\",\n fullWidth: \"Pleine largeur\",\n widthCustom: \"Personnalisée\",\n },\n divider: {\n style: \"Style\",\n solid: \"Continu\",\n dashed: \"Tirets\",\n dotted: \"Pointillés\",\n color: \"Couleur\",\n thickness: \"Épaisseur\",\n },\n social: {\n icons: \"Icônes\",\n addIcon: \"Ajouter une icône\",\n addIcons: \"Ajoutez des icônes de réseaux sociaux\",\n removeIcon: \"Supprimer\",\n urlPlaceholder: \"https://...\",\n style: \"Style\",\n styleSolid: \"Plein\",\n styleOutlined: \"Contour\",\n styleRounded: \"Arrondi\",\n styleSquare: \"Carré\",\n styleCircle: \"Cercle\",\n size: \"Taille\",\n sizeSmall: \"S\",\n sizeMedium: \"M\",\n sizeLarge: \"L\",\n spacing: \"Espacement\",\n align: \"Alignement\",\n platforms: {\n facebook: \"Facebook\",\n twitter: \"X (Twitter)\",\n instagram: \"Instagram\",\n linkedin: \"LinkedIn\",\n youtube: \"YouTube\",\n tiktok: \"TikTok\",\n pinterest: \"Pinterest\",\n email: \"E-mail\",\n website: \"Site web\",\n whatsapp: \"WhatsApp\",\n telegram: \"Telegram\",\n discord: \"Discord\",\n snapchat: \"Snapchat\",\n reddit: \"Reddit\",\n github: \"GitHub\",\n dribbble: \"Dribbble\",\n behance: \"Behance\",\n },\n },\n menu: {\n items: \"Éléments du menu\",\n addItem: \"Ajouter un élément\",\n removeItem: \"Supprimer\",\n text: \"Texte\",\n urlPlaceholder: \"https://example.com\",\n openInNewTab: \"Ouvrir dans un nouvel onglet\",\n bold: \"Gras\",\n underline: \"Souligné\",\n color: \"Couleur\",\n linkColor: \"Couleur des liens\",\n fontSize: \"Taille de police\",\n fontFamily: \"Police\",\n separator: \"Séparateur\",\n separatorColor: \"Couleur du séparateur\",\n spacing: \"Espacement\",\n textAlign: \"Alignement\",\n addLinks: \"Ajoutez des liens de menu\",\n },\n table: {\n dimensions: \"Dimensions\",\n rows: \"Lignes\",\n columns: \"Colonnes\",\n hasHeaderRow: \"Ligne d'en-tête\",\n headerBackgroundColor: \"Fond de l'en-tête\",\n noHeaderBg: \"Sans fond\",\n borderColor: \"Couleur de bordure\",\n borderWidth: \"Épaisseur de bordure\",\n cellPadding: \"Marge intérieure des cellules\",\n fontFamily: \"Police\",\n fontSize: \"Taille de police\",\n color: \"Couleur du texte\",\n textAlign: \"Alignement\",\n cellPlaceholder: \"Saisissez du texte...\",\n empty: \"Ajoutez un tableau\",\n },\n spacer: {\n height: \"Hauteur\",\n },\n countdown: {\n targetDate: \"Date cible\",\n timezone: \"Fuseau horaire\",\n display: \"Affichage\",\n days: \"Jours\",\n hours: \"Heures\",\n minutes: \"Minutes\",\n seconds: \"Secondes\",\n separator: \"Séparateur\",\n fontFamily: \"Police\",\n inheritFont: \"Par défaut\",\n digitFontSize: \"Taille des chiffres\",\n digitColor: \"Couleur des chiffres\",\n labelColor: \"Couleur des libellés\",\n labelFontSize: \"Taille des libellés\",\n background: \"Fond\",\n labels: \"Libellés\",\n expiry: \"Message d'expiration\",\n expiredMessagePlaceholder: \"Cette offre a expiré\",\n expiredImageUrl: \"URL de l'image d'expiration\",\n hideOnExpiry: \"Masquer à l'expiration\",\n setDate: \"Définissez une date cible dans le panneau des paramètres\",\n hidden: \"Masqué (expiré)\",\n },\n customBlocks: {\n definitionNotFound: \"Type de bloc inconnu — ce bloc n'est pas enregistré\",\n renderError:\n \"Ce bloc n'a pas pu être rendu. Vérifiez les erreurs dans le modèle du bloc.\",\n fields: {\n required: \"Obligatoire\",\n addItem: \"Ajouter un élément\",\n removeItem: \"Supprimer\",\n maxItemsReached: \"Nombre maximal d'éléments atteint\",\n minItemsRequired: \"Minimum {count} éléments requis\",\n },\n toolbar: {\n noDefinition:\n \"Enregistrez ce type de bloc dans la configuration du SDK pour modifier ses propriétés\",\n },\n dataSource: {\n fetchButton: \"Charger le contenu\",\n changeButton: \"Changer\",\n fetching: \"Chargement...\",\n readOnlyTooltip: \"Cette valeur provient de votre source de données\",\n fetchError: \"Échec du chargement du contenu\",\n },\n },\n html: {\n content: \"Contenu HTML\",\n preview: \"Bloc HTML personnalisé\",\n empty: \"Ajoutez du contenu HTML dans le panneau\",\n sanitizationHint:\n \"Le HTML est exporté tel quel, sans assainissement — assurez-vous que le contenu est sûr.\",\n },\n blockSettings: {\n spacing: \"Espacement\",\n padding: \"Marge intérieure\",\n background: \"Fond\",\n color: \"Couleur\",\n display: \"Affichage\",\n showOnDesktop: \"Afficher sur ordinateur\",\n showOnMobile: \"Afficher sur mobile\",\n hiddenOnDevice: \"Masqué sur {device}\",\n displayCondition: \"Condition d'affichage\",\n selectCondition: \"Sélectionner une condition\",\n removeCondition: \"Supprimer la condition\",\n noCondition: \"Toujours visible\",\n conditionApplied: \"Condition appliquée\",\n customCondition: \"Condition personnalisée\",\n customConditionLabel: \"Nom de la condition\",\n customConditionBefore: \"Avant (logique d'ouverture)\",\n customConditionAfter: \"Après (logique de fermeture)\",\n applyCondition: \"Appliquer\",\n cancelCondition: \"Annuler\",\n customBadge: \"Personnalisée\",\n restoreHiddenBlocks: \"Afficher tous les blocs masqués\",\n },\n templateSettings: {\n layout: \"Mise en page\",\n widthPreset: \"Largeur prédéfinie\",\n customWidth: \"Largeur personnalisée\",\n appearance: \"Apparence\",\n backgroundColor: \"Couleur de fond\",\n textColor: \"Couleur du texte\",\n linkColor: \"Couleur des liens\",\n linkUnderline: \"Souligner les liens\",\n fontFamily: \"Police\",\n preheaderText: \"Texte d'aperçu (preheader)\",\n preheaderTextPlaceholder:\n \"Texte d'aperçu affiché après l'objet dans la boîte de réception...\",\n preheaderTextHint:\n \"Ce texte apparaît après l'objet dans les aperçus des clients de messagerie. Les balises de fusion sont prises en charge.\",\n language: \"Langue\",\n contentLocale: \"Langue du contenu\",\n contentLocaleHint:\n \"Code BCP 47 (ex. fr, de, pt-BR). Définit l'attribut lang de l'e-mail rendu pour que les lecteurs d'écran prononcent correctement le contenu.\",\n tips: \"Conseils\",\n tip1: \"600px est la largeur standard des modèles d'e-mail\",\n tip2: \"Utilisez des polices web sûres pour une compatibilité maximale\",\n tip3: \"Les fonds clairs offrent la meilleure lisibilité\",\n },\n spacingControl: {\n lockAll: \"Verrouiller tous les côtés\",\n unlock: \"Déverrouiller les côtés\",\n top: \"Haut\",\n right: \"Droite\",\n bottom: \"Bas\",\n left: \"Gauche\",\n decreaseTop: \"Réduire en haut\",\n increaseTop: \"Augmenter en haut\",\n decreaseLeft: \"Réduire à gauche\",\n increaseLeft: \"Augmenter à gauche\",\n decreaseRight: \"Réduire à droite\",\n increaseRight: \"Augmenter à droite\",\n decreaseBottom: \"Réduire en bas\",\n increaseBottom: \"Augmenter en bas\",\n },\n colorPicker: {\n pickColor: \"Choisir une couleur\",\n hexValue: \"Valeur hexadécimale de la couleur\",\n notSet: \"Non définie\",\n clear: \"Effacer la couleur\",\n presetColors: \"Couleurs prédéfinies\",\n },\n mergeTag: {\n clickToEdit: \"Cliquez pour modifier\",\n remove: \"Supprimer la balise de fusion\",\n insert: \"Insérer une balise de fusion\",\n insertShort: \"Balise de fusion\",\n editValue: \"Modifier la valeur de la balise de fusion\",\n deleteMergeTag: \"Supprimer la balise de fusion\",\n suggestionEmpty: \"Aucune balise de fusion correspondante\",\n picker: {\n title: \"Insérer une balise de fusion\",\n searchPlaceholder: \"Rechercher des balises de fusion\",\n searchAriaLabel: \"Rechercher des balises de fusion\",\n noResults: \"Aucune balise de fusion correspondante\",\n empty: \"Aucune balise de fusion configurée\",\n otherGroup: \"Autres\",\n close: \"Fermer\",\n groupCount: \"{count}\",\n sample: \"Aperçu : {sample}\",\n },\n },\n logicTag: {\n insert: \"Insérer une logique\",\n insertShort: \"Logique\",\n picker: {\n title: \"Insérer une logique\",\n searchPlaceholder: \"Rechercher des balises logiques\",\n searchAriaLabel: \"Rechercher des balises logiques\",\n noResults: \"Aucune balise logique correspondante\",\n empty: \"Aucune balise logique configurée\",\n otherGroup: \"Autres\",\n close: \"Fermer\",\n },\n },\n canvas: {\n noBlocks: \"Aucun bloc pour l'instant\",\n dragHint:\n \"Partez de zéro en faisant glisser des blocs depuis la barre latérale\",\n dropHere: \"Déposez ici\",\n aiHintChat: \"ou laissez\",\n aiHintChatSuffix:\n \"générer un modèle complet pour vous en quelques secondes\",\n aiHintDesign:\n \"Vous avez déjà un design ? Téléversez une capture d'écran, une image ou un PDF et\",\n aiHintDesignSuffix: \"le recréera instantanément\",\n },\n savedBlocks: {\n title: \"Blocs enregistrés\",\n saveAsBlock: \"Enregistrer comme bloc\",\n name: \"Nom\",\n namePlaceholder: \"p. ex. En-tête, Pied de page, CTA...\",\n save: \"Enregistrer le bloc\",\n saving: \"Enregistrement...\",\n cancel: \"Annuler\",\n empty: \"Aucun bloc enregistré pour l'instant\",\n emptyHint:\n \"Enregistrez des blocs depuis vos modèles pour les réutiliser plus tard.\",\n noResults: \"Aucun bloc enregistré ne correspond à votre recherche\",\n search: \"Rechercher des blocs enregistrés...\",\n loading: \"Chargement des blocs enregistrés…\",\n category: \"Catégorie\",\n categoryPlaceholder: \"p. ex. En-têtes, Promos... (facultatif)\",\n allCategories: \"Toutes les catégories\",\n filterByCategory: \"Filtrer par catégorie\",\n insert: \"Insérer\",\n rename: \"Renommer\",\n delete: \"Supprimer\",\n deleteConfirm: \"Supprimer ce bloc enregistré ?\",\n blockCount: \"{count} bloc(s)\",\n browse: \"Parcourir les blocs enregistrés\",\n selectToPreview: \"Sélectionnez un bloc enregistré pour l'afficher\",\n insertAtBeginning: \"Au début\",\n insertAfterBlock: \"Après {block}\",\n insertAtEnd: \"À la fin\",\n insertPosition: \"Position d'insertion\",\n close: \"Fermer\",\n pickToolbar: \"Sélection de blocs à enregistrer\",\n pickCount: \"{count} bloc(s) sélectionné(s)\",\n pickHint: \"Cliquez sur les blocs pour les ajouter ou les retirer\",\n savingCount: \"Enregistrement de {count} bloc(s) :\",\n reorderHint:\n \"Glissez pour réordonner — les blocs sont enregistrés dans cet ordre\",\n reorderHandle: \"Réordonner {block}, position {position} sur {total}\",\n reorderAnnouncement: \"{block} déplacé en position {position} sur {total}\",\n expand: \"Développer\",\n collapse: \"Réduire\",\n expandPreview: \"Développer l'aperçu de {block}\",\n collapsePreview: \"Réduire l'aperçu de {block}\",\n },\n comments: {\n button: \"Commentaires\",\n title: \"Commentaires\",\n placeholder: \"Écrire un commentaire...\",\n replyPlaceholder: \"Écrire une réponse...\",\n reply: \"Répondre\",\n resolve: \"Résoudre\",\n unresolve: \"Réouvrir\",\n delete: \"Supprimer\",\n edit: \"Modifier\",\n cancel: \"Annuler\",\n save: \"Enregistrer\",\n noComments: \"Aucun commentaire\",\n noCommentsHint:\n \"Démarrez une conversation en ajoutant un commentaire au modèle ou à un bloc précis.\",\n deleteConfirm: \"Supprimer ce commentaire ?\",\n filterAll: \"Tous\",\n filterUnresolved: \"Non résolus\",\n filterBlock: \"Ce bloc\",\n jumpToBlock: \"Bloc\",\n ownedByYou: \"Vous\",\n edited: \"modifié\",\n resolvedBy: \"Résolu par {name}\",\n replyOne: \"{count} réponse\",\n replyMany: \"{count} réponses\",\n missingBlock: \"Bloc introuvable\",\n saveTemplateFirst: \"Enregistrez le modèle avant de commenter ce bloc.\",\n },\n versionHistory: {\n tooltip: \"Historique des versions\",\n dropdownTitle: \"Historique des versions\",\n empty: \"Aucune version pour l’instant\",\n auto: \"auto\",\n olderVersion: \"Version précédente\",\n newerVersion: \"Version plus récente\",\n },\n versionPreview: {\n message: \"Vous consultez une version antérieure de ce modèle.\",\n cancel: \"Annuler\",\n restore: \"Restaurer cette version\",\n restoreConfirm: {\n title: \"Restaurer cette version ?\",\n unsavedWithSave:\n \"Vous avez des modifications non enregistrées. Enregistrez-les d’abord et elles resteront dans l’historique ; restaurez sans enregistrer et elles seront perdues.\",\n unsavedNoSave:\n \"Vous avez des modifications non enregistrées et aucun endroit où les enregistrer. Restaurer cette version les fera disparaître.\",\n saveAndRestore: \"Enregistrer, puis restaurer\",\n restoreAnyway: \"Restaurer quand même\",\n cancel: \"Annuler\",\n },\n },\n previewResolution: {\n resolving: \"Résolution de l’aperçu…\",\n failed:\n \"L’aperçu n’a pas pu être résolu — le modèle non résolu est affiché.\",\n hint: \"L’aperçu utilise des données résolues par votre backend.\",\n },\n mergeTagPreview: {\n label: \"Affichage des balises de fusion\",\n sample: \"Exemple\",\n labelView: \"Libellé\",\n },\n testEmail: {\n title: \"Envoyer un e-mail de test\",\n recipientLabel: \"Destinataire\",\n recipientPlaceholder: \"vous@exemple.fr\",\n invalidAddress: \"Saisissez une adresse e-mail valide.\",\n preview: \"Aperçu\",\n previewHint:\n \"Les balises de fusion sont affichées non résolues — votre backend les remplace.\",\n previewHintSample:\n \"Les balises de fusion affichent des valeurs d’exemple — votre backend insère les données réelles.\",\n recipientNotAllowed:\n \"Cette adresse ne figure pas dans la liste des destinataires autorisés.\",\n send: \"Envoyer\",\n sending: \"Envoi en cours...\",\n cancel: \"Annuler\",\n success: \"E-mail de test envoyé avec succès\",\n button: \"Test\",\n },\n sidebarNav: {\n browseSavedBlocks: \"Parcourir les blocs enregistrés\",\n palette: \"Palette de blocs\",\n insertBlock: \"Insérer un bloc {block}\",\n },\n landmarks: {\n canvas: \"Canevas de l'e-mail\",\n blockToolbar: \"Propriétés du bloc\",\n rightSidebar: \"Propriétés du bloc et paramètres du modèle\",\n reorderAnnouncements: \"Annonces de réorganisation des blocs\",\n },\n errors: {\n editorLoading: \"Chargement de l'éditeur...\",\n editorLoadFailed: \"Échec du chargement de l'éditeur.\",\n retry: \"Réessayer\",\n },\n issues: {\n panelTitle: \"Problèmes\",\n panelTabLabel: \"Problèmes\",\n groupErrors: \"Erreurs\",\n groupWarnings: \"Avertissements\",\n groupInfo: \"Infos\",\n jump: \"Aller au bloc\",\n fix: \"Corriger\",\n emptyState: \"Aucun problème — tout va bien.\",\n badgeError: \"Contient des erreurs\",\n badgeWarning: \"Contient des avertissements\",\n issueCountTooltip: \"{count} problème(s)\",\n },\n smallScreen: {\n title: \"Écran plus grand requis\",\n message:\n \"L'éditeur a besoin de plus d'espace que cet écran n'en offre. Ouvrez-le sur une tablette ou un ordinateur pour commencer à modifier.\",\n },\n};\n\nexport default fr;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"keys-CbQuRX85.js","names":[],"sources":["../../../src/keys.ts"],"sourcesContent":["import { inject, type InjectionKey, type ComputedRef, type Ref } from \"vue\";\nimport type {\n UseHistoryReturn,\n UseBlockActionsReturn,\n UseConditionPreviewReturn,\n} from \"@templatical/core\";\nimport type {\n BlockDefaults,\n CustomBlockDefinition,\n DisplayCondition,\n LogicPair,\n LogicTag,\n MergeTag,\n ResolvePreview,\n SyntaxPreset,\n} from \"@templatical/types\";\nimport type { Translations, CloudTranslations } from \"./i18n\";\nimport type {\n AuthManager,\n UseAiConfigReturn,\n UseTemplateScoringReturn,\n} from \"@templatical/core/cloud\";\nimport type { UseSavedBlocksReturn } from \"@templatical/core\";\nimport type { BaseEditorReturn } from \"./composables/useEditorCore\";\nimport type { ImageUrlResolver } from \"./composables/useImageUrlResolver\";\nimport type { UseFontsReturn } from \"./composables/useFonts\";\nimport type { UseBlockRegistryReturn } from \"./composables/useBlockRegistry\";\nimport type { UseKeyboardReorderReturn } from \"./composables/useKeyboardReorder\";\nimport type { EditorCapabilities } from \"./types/editor-capabilities\";\nimport type { OnRequestMedia } from \"./index\";\n\n// ---------------------------------------------------------------------------\n// Shared keys (provided by useEditorCore, consumed by all components)\n// ---------------------------------------------------------------------------\n\nexport const TRANSLATIONS_KEY: InjectionKey<Translations> =\n Symbol(\"translations\");\n\nexport const EDITOR_KEY: InjectionKey<BaseEditorReturn> = Symbol(\"editor\");\n\nexport const HISTORY_KEY: InjectionKey<UseHistoryReturn> = Symbol(\"history\");\n\nexport const BLOCK_ACTIONS_KEY: InjectionKey<UseBlockActionsReturn> =\n Symbol(\"blockActions\");\n\nexport const CONDITION_PREVIEW_KEY: InjectionKey<UseConditionPreviewReturn> =\n Symbol(\"conditionPreview\");\n\n/**\n * Whether the hand-toggled display-condition filter applies on this surface —\n * provided per-surface, exactly like `USE_MERGE_TAG_SAMPLES_KEY`, and for the\n * same reason: the rule folds in both `previewMode` and whether a resolver owns\n * the preview, so a component that re-derived it from `CONDITION_PREVIEW_KEY`\n * plus the editor's `previewMode` could get one half wrong on its own.\n *\n * Absent means \"applies\" — a surface with no provider filters as it always has.\n */\nexport const APPLIES_CONDITION_FILTER_KEY: InjectionKey<ComputedRef<boolean>> =\n Symbol(\"appliesConditionFilter\");\n\nexport const FONTS_MANAGER_KEY: InjectionKey<UseFontsReturn> =\n Symbol(\"fontsManager\");\n\nexport const THEME_STYLES_KEY: InjectionKey<\n ComputedRef<Record<string, string>>\n> = Symbol(\"themeStyles\");\n\nexport const UI_THEME_KEY: InjectionKey<ComputedRef<string>> =\n Symbol(\"tplUiTheme\");\n\nexport const BLOCK_DEFAULTS_KEY: InjectionKey<BlockDefaults | undefined> =\n Symbol(\"blockDefaults\");\n\nexport const BLOCK_REGISTRY_KEY: InjectionKey<UseBlockRegistryReturn> =\n Symbol(\"blockRegistry\");\n\nexport const CUSTOM_BLOCK_DEFINITIONS_KEY: InjectionKey<\n CustomBlockDefinition[]\n> = Symbol(\"customBlockDefinitions\");\n\n/**\n * Consumer-supplied block-palette allowlist + order (`config.paletteBlocks`).\n * `undefined` means the default full palette. Consumed by `Sidebar.vue`.\n */\nexport const PALETTE_BLOCKS_KEY: InjectionKey<string[] | undefined> =\n Symbol(\"paletteBlocks\");\n\n/**\n * Whether HTML blocks render a live sandboxed-iframe preview in the canvas\n * (`config.htmlBlockPreview`), normalized to a boolean. `false` (the default)\n * keeps the static placeholder card. Consumed by `HtmlBlock.vue`.\n */\nexport const HTML_BLOCK_PREVIEW_KEY: InjectionKey<boolean> =\n Symbol(\"htmlBlockPreview\");\n\n/**\n * Consumer-supplied color-picker palette (`config.colors`), normalized to\n * `{ presets, allowCustom, allowCustomIgnored }` by `resolveColorsConfig`.\n * Provided by `useEditorCore`, consumed by every `ColorPicker`. The inject\n * default (`DEFAULT_RESOLVED_COLORS` = `{ presets: [], allowCustom: true,\n * allowCustomIgnored: false }`) makes an unconfigured picker render exactly\n * as before.\n */\nexport const COLORS_KEY: InjectionKey<\n import(\"./utils/resolveColorsConfig\").ResolvedColors\n> = Symbol(\"colors\");\n\nexport const CUSTOM_BLOCK_STYLESHEETS_KEY: InjectionKey<ComputedRef<string[]>> =\n Symbol(\"customBlockStylesheets\");\n\nexport const MERGE_TAGS_KEY: InjectionKey<MergeTag[]> = Symbol(\"mergeTags\");\n\nexport const MERGE_TAG_SYNTAX_KEY: InjectionKey<SyntaxPreset> =\n Symbol(\"mergeTagSyntax\");\n\nexport const ON_REQUEST_MERGE_TAG_KEY: InjectionKey<\n (() => Promise<MergeTag | null>) | null\n> = Symbol(\"onRequestMergeTag\");\n\nexport const MERGE_TAG_AUTOCOMPLETE_KEY: InjectionKey<boolean> = Symbol(\n \"mergeTagAutocomplete\",\n);\n\n/**\n * The user's choice between the previews' two merge-tag views: `true` for\n * Sample (tags replaced by their `MergeTag.sample`, rendered as ordinary text)\n * and `false` for Label (tags shown as their label with the usual cue).\n *\n * Session state owned by `useEditorCore` and driven by a toggle that exists\n * only on preview surfaces. Defaults to Sample.\n */\nexport const MERGE_TAG_SAMPLE_MODE_KEY: InjectionKey<Ref<boolean>> =\n Symbol(\"mergeTagSampleMode\");\n\n/**\n * Whether **the current render surface** substitutes samples.\n *\n * Provided per surface rather than globally, and that is the whole point:\n * substitution must never happen while editing, so `Canvas.vue` folds in its\n * `previewMode` flag and provides `false` whenever the canvas is editable, no\n * matter what the mode ref says. Preview surfaces provide the mode directly.\n *\n * Block components inject **this** key. They must never read\n * `MERGE_TAG_SAMPLE_MODE_KEY`, which would bypass the editing guard.\n */\nexport const USE_MERGE_TAG_SAMPLES_KEY: InjectionKey<ComputedRef<boolean>> =\n Symbol(\"useMergeTagSamples\");\n\n/**\n * The `resolvePreview` seam — resolved content plus its loading and failure\n * state. Provided by `useEditorCore` so every preview surface shares one\n * lifecycle; `null` when the consumer configured no hook.\n *\n * Surfaces read `content` from here instead of `editor.content`, and gate the\n * Sample/Label toggle on `supersedesSamples`.\n */\n/**\n * The raw `config.resolvePreview` hook.\n *\n * Provided alongside PREVIEW_RESOLUTION_KEY because the test-email dialog needs\n * its **own** resolution instance — it resolves for the selected recipient,\n * which the editor's canvas has no notion of — and so cannot reuse the shared\n * one. `undefined` when the consumer configured no hook.\n */\nexport const RESOLVE_PREVIEW_KEY: InjectionKey<ResolvePreview | undefined> =\n Symbol(\"resolvePreview\");\n\nexport const PREVIEW_RESOLUTION_KEY: InjectionKey<\n import(\"./composables/usePreviewResolution\").UsePreviewResolutionReturn | null\n> = Symbol(\"previewResolution\");\n\n/**\n * Singleton state for the built-in merge tag picker modal. Provided by\n * `useEditorCore`, consumed by `useMergeTag.requestMergeTag()` (to open\n * the modal as a fall-through when only `mergeTags.tags` is configured)\n * and by `MergeTagPickerModal.vue` (to render and resolve).\n */\nexport const MERGE_TAG_PICKER_KEY: InjectionKey<\n import(\"./composables/useMergeTagPicker\").UseMergeTagPickerReturn\n> = Symbol(\"mergeTagPicker\");\n\n// ---------------------------------------------------------------------------\n// Logic tags — a standalone feature, separate from merge tags. Native\n// highlighting (LogicMergeTagNode) is always on; these drive the dedicated\n// logic picker + insertion.\n// ---------------------------------------------------------------------------\n\nexport const LOGIC_TAGS_KEY: InjectionKey<LogicTag[]> = Symbol(\"logicTags\");\n\nexport const LOGIC_PAIRS_KEY: InjectionKey<LogicPair[]> = Symbol(\"logicPairs\");\n\n/**\n * Singleton state for the built-in logic picker modal. Provided by\n * `useEditorCore`, consumed by `useLogicTag.requestLogicTag()` (to open the modal)\n * and by `LogicTagPickerModal.vue` (to render and resolve).\n */\nexport const LOGIC_TAG_PICKER_KEY: InjectionKey<\n import(\"./composables/useLogicTagPicker\").UseLogicTagPickerReturn\n> = Symbol(\"logicPicker\");\n\nexport const ON_REQUEST_LOGIC_TAG_KEY: InjectionKey<\n (() => Promise<LogicTag | LogicPair | null>) | null\n> = Symbol(\"onRequestLogic\");\n\nexport const ON_REQUEST_MEDIA_KEY: InjectionKey<OnRequestMedia | null> =\n Symbol(\"onRequestMedia\");\n\n/**\n * Per-editor display-only image URL resolver (`config.resolveImageUrl`),\n * wrapped with a per-src cache by `createImageUrlResolver`. `null` when the\n * host doesn't resolve — the canvas then displays canonical src values\n * verbatim. Consumed via `useResolvedImageSrc` in image-displaying blocks.\n */\nexport const IMAGE_URL_RESOLVER_KEY: InjectionKey<ImageUrlResolver | null> =\n Symbol(\"imageUrlResolver\");\n\nexport const DISPLAY_CONDITIONS_KEY: InjectionKey<DisplayCondition[]> =\n Symbol(\"displayConditions\");\n\nexport const ALLOW_CUSTOM_CONDITIONS_KEY: InjectionKey<boolean> = Symbol(\n \"allowCustomConditions\",\n);\n\nexport const CAPABILITIES_KEY: InjectionKey<EditorCapabilities> =\n Symbol(\"capabilities\");\n\nexport const KEYBOARD_REORDER_KEY: InjectionKey<UseKeyboardReorderReturn> =\n Symbol(\"keyboardReorder\");\n\nexport const TEMPLATE_LINT_KEY: InjectionKey<\n import(\"./composables/useTemplateLint\").UseTemplateLintReturn | null\n> = Symbol(\"templateLint\");\n\n/**\n * The editor's effective DOM root — `Document` in light-DOM mode, `ShadowRoot`\n * when `shadowDom: true`. Composables that read `document.activeElement`,\n * popup mount targets, etc. should inject this and use the root-aware API\n * (both `Document` and `ShadowRoot` expose `activeElement` etc.).\n */\nexport const EDITOR_ROOT_KEY: InjectionKey<Document | ShadowRoot> =\n Symbol(\"editorRoot\");\n\n/**\n * Mount target for popovers, toolbars, and modal dialogs that previously\n * teleported to `document.body`. Provided by `useEditorCore` as a ref bound\n * to a `<div class=\"tpl-popover-root\" />` rendered at the top level of the\n * editor template. Teleports use `:to=\"popoverRoot\"` so popups land inside\n * the editor's effective root — `document` in light-DOM mode, `ShadowRoot`\n * when `shadowDom: true` — instead of escaping the shadow boundary.\n *\n * Null until the editor's template mounts; consumers must guard with\n * `v-if=\"popoverRoot\"` before passing to `<Teleport>`.\n */\nexport const POPOVER_ROOT_KEY: InjectionKey<Ref<HTMLElement | null>> =\n Symbol(\"popoverRoot\");\n\n/**\n * Reactive saved-blocks state, provided by `useSavedBlocksFeature` when a\n * `SavedBlocksProvider` is configured. Shared by OSS and Cloud — the storage\n * transport lives behind the provider, so this key is not cloud-specific.\n */\nexport const SAVED_BLOCKS_KEY: InjectionKey<UseSavedBlocksReturn> =\n Symbol(\"savedBlocks\");\n\n// ---------------------------------------------------------------------------\n// Cloud-only keys (provided by CloudEditor, consumed by cloud components)\n// ---------------------------------------------------------------------------\n\nexport const AUTH_MANAGER_KEY: InjectionKey<AuthManager> =\n Symbol(\"authManager\");\n\nexport const AI_CONFIG_KEY: InjectionKey<UseAiConfigReturn> =\n Symbol(\"aiConfig\");\n\n// Comments are deliberately not injected: the panel takes `useCommentsFeature`'s\n// return as a **prop** the way `TestEmailPanel` and `SavedBlocksPanels` do, and the\n// per-block indicators read the comments entry on `CAPABILITIES_KEY`. Nothing\n// injects the composable itself.\n\nexport const SCORING_KEY: InjectionKey<UseTemplateScoringReturn> =\n Symbol(\"scoring\");\n\nexport const CLOUD_TRANSLATIONS_KEY: InjectionKey<CloudTranslations> =\n Symbol(\"cloudTranslations\");\n\n// ---------------------------------------------------------------------------\n// Helper for required injections with explicit null default + throw\n// ---------------------------------------------------------------------------\n\nexport function requireInject<T>(\n key: InjectionKey<T>,\n componentName: string,\n): T {\n const value = inject(key, null) as T | null;\n if (value === null || value === undefined) {\n throw new Error(\n `${componentName} requires a provider for ${key.description ?? \"unknown key\"}. Ensure it is a descendant of Editor or CloudEditor.`,\n );\n }\n return value;\n}\n"],"mappings":";;AAmCA,IAAa,IACX,OAAO,cAAc,GAEV,IAA6C,OAAO,QAAQ,GAE5D,IAA8C,OAAO,SAAS,GAE9D,IACX,OAAO,cAAc,GAEV,IACX,OAAO,kBAAkB,GAWd,IACX,OAAO,wBAAwB,GAEpB,IACX,OAAO,cAAc,GAEV,IAET,OAAO,aAAa,GAEX,IACX,OAAO,YAAY,GAER,IACX,OAAO,eAAe,GAEX,IACX,OAAO,eAAe,GAEX,IAET,OAAO,wBAAwB,GAMtB,IACX,OAAO,eAAe,GAOX,IACX,OAAO,kBAAkB,GAUd,IAET,OAAO,QAAQ,GAEN,IACX,OAAO,wBAAwB,GAEpB,IAA2C,OAAO,WAAW,GAE7D,IACX,OAAO,gBAAgB,GAEZ,IAET,OAAO,mBAAmB,GAEjB,IAAoD,OAC/D,sBACF,GAUa,IACX,OAAO,oBAAoB,GAahB,IACX,OAAO,oBAAoB,GAkBhB,IACX,OAAO,gBAAgB,GAEZ,IAET,OAAO,mBAAmB,GAQjB,IAET,OAAO,gBAAgB,GAQd,IAA2C,OAAO,WAAW,GAE7D,IAA6C,OAAO,YAAY,GAOhE,IAET,OAAO,aAAa,GAEX,IAET,OAAO,gBAAgB,GAEd,IACX,OAAO,gBAAgB,GAQZ,IACX,OAAO,kBAAkB,GAEd,IACX,OAAO,mBAAmB,GAEf,IAAqD,OAChE,uBACF,GAEa,IACX,OAAO,cAAc,GAEV,IACX,OAAO,iBAAiB,GAEb,IAET,OAAO,cAAc,GAQZ,IACX,OAAO,YAAY,GAaR,IACX,OAAO,aAAa,GAOT,IACX,OAAO,aAAa,GAMT,IACX,OAAO,aAAa,GAET,IACX,OAAO,UAAU,GAON,IACX,OAAO,SAAS,GAEL,IACX,OAAO,mBAAmB;AAM5B,SAAgB,EACd,GACA,GACG;CACH,IAAM,IAAQ,EAAO,GAAK,IAAI;CAC9B,IAAI,KAAU,MACZ,MAAU,MACR,GAAG,EAAc,2BAA2B,EAAI,eAAe,cAAc,sDAC/E;CAEF,OAAO;AACT"}
1
+ {"version":3,"file":"keys-CbQuRX85.js","names":[],"sources":["../../../src/keys.ts"],"sourcesContent":["import { inject, type InjectionKey, type ComputedRef, type Ref } from \"vue\";\nimport type {\n UseHistoryReturn,\n UseBlockActionsReturn,\n UseConditionPreviewReturn,\n} from \"@templatical/core\";\nimport type {\n BlockDefaults,\n CustomBlockDefinition,\n DisplayCondition,\n LogicPair,\n LogicTag,\n MergeTag,\n ResolvePreview,\n SyntaxPreset,\n} from \"@templatical/types\";\nimport type { Translations, CloudTranslations } from \"./i18n\";\nimport type {\n AuthManager,\n UseAiConfigReturn,\n UseTemplateScoringReturn,\n} from \"@templatical/core/cloud\";\nimport type { UseSavedBlocksReturn } from \"@templatical/core\";\nimport type { BaseEditorReturn } from \"./composables/useEditorCore\";\nimport type { ImageUrlResolver } from \"./composables/useImageUrlResolver\";\nimport type { UseFontsReturn } from \"./composables/useFonts\";\nimport type { UseBlockRegistryReturn } from \"./composables/useBlockRegistry\";\nimport type { UseKeyboardReorderReturn } from \"./composables/useKeyboardReorder\";\nimport type { EditorCapabilities } from \"./types/editor-capabilities\";\nimport type { OnRequestMedia } from \"./index\";\n\n// ---------------------------------------------------------------------------\n// Shared keys (provided by useEditorCore, consumed by all components)\n// ---------------------------------------------------------------------------\n\nexport const TRANSLATIONS_KEY: InjectionKey<Translations> =\n Symbol(\"translations\");\n\nexport const EDITOR_KEY: InjectionKey<BaseEditorReturn> = Symbol(\"editor\");\n\nexport const HISTORY_KEY: InjectionKey<UseHistoryReturn> = Symbol(\"history\");\n\nexport const BLOCK_ACTIONS_KEY: InjectionKey<UseBlockActionsReturn> =\n Symbol(\"blockActions\");\n\nexport const CONDITION_PREVIEW_KEY: InjectionKey<UseConditionPreviewReturn> =\n Symbol(\"conditionPreview\");\n\n/**\n * Whether the hand-toggled display-condition filter applies on this surface —\n * provided per-surface, exactly like `USE_MERGE_TAG_SAMPLES_KEY`, and for the\n * same reason: the rule folds in both `previewMode` and whether a resolver owns\n * the preview, so a component that re-derived it from `CONDITION_PREVIEW_KEY`\n * plus the editor's `previewMode` could get one half wrong on its own.\n *\n * Absent means \"applies\" — a surface with no provider filters as it always has.\n */\nexport const APPLIES_CONDITION_FILTER_KEY: InjectionKey<ComputedRef<boolean>> =\n Symbol(\"appliesConditionFilter\");\n\nexport const FONTS_MANAGER_KEY: InjectionKey<UseFontsReturn> =\n Symbol(\"fontsManager\");\n\nexport const THEME_STYLES_KEY: InjectionKey<\n ComputedRef<Record<string, string>>\n> = Symbol(\"themeStyles\");\n\nexport const UI_THEME_KEY: InjectionKey<ComputedRef<string>> =\n Symbol(\"tplUiTheme\");\n\nexport const BLOCK_DEFAULTS_KEY: InjectionKey<BlockDefaults | undefined> =\n Symbol(\"blockDefaults\");\n\nexport const BLOCK_REGISTRY_KEY: InjectionKey<UseBlockRegistryReturn> =\n Symbol(\"blockRegistry\");\n\nexport const CUSTOM_BLOCK_DEFINITIONS_KEY: InjectionKey<\n CustomBlockDefinition[]\n> = Symbol(\"customBlockDefinitions\");\n\n/**\n * Consumer-supplied block-palette allowlist + order (`config.paletteBlocks`).\n * `undefined` means the default full palette. Consumed by `Sidebar.vue`.\n */\nexport const PALETTE_BLOCKS_KEY: InjectionKey<string[] | undefined> =\n Symbol(\"paletteBlocks\");\n\n/**\n * Whether HTML blocks render a live sandboxed-iframe preview in the canvas\n * (`config.htmlBlockPreview`), normalized to a boolean. `false` (the default)\n * keeps the static placeholder card. Consumed by `HtmlBlock.vue`.\n */\nexport const HTML_BLOCK_PREVIEW_KEY: InjectionKey<boolean> =\n Symbol(\"htmlBlockPreview\");\n\n/**\n * Consumer-supplied color-picker palette (`config.colors`), normalized to\n * `{ presets, allowCustom, allowCustomIgnored }` by `resolveColorsConfig`.\n * Provided by `useEditorCore`, consumed by every `ColorPicker`. The inject\n * default (`DEFAULT_RESOLVED_COLORS` = `{ presets: [], allowCustom: true,\n * allowCustomIgnored: false }`) makes an unconfigured picker render exactly\n * as before.\n */\nexport const COLORS_KEY: InjectionKey<\n import(\"./utils/resolveColorsConfig\").ResolvedColors\n> = Symbol(\"colors\");\n\nexport const CUSTOM_BLOCK_STYLESHEETS_KEY: InjectionKey<ComputedRef<string[]>> =\n Symbol(\"customBlockStylesheets\");\n\nexport const MERGE_TAGS_KEY: InjectionKey<MergeTag[]> = Symbol(\"mergeTags\");\n\nexport const MERGE_TAG_SYNTAX_KEY: InjectionKey<SyntaxPreset> =\n Symbol(\"mergeTagSyntax\");\n\nexport const ON_REQUEST_MERGE_TAG_KEY: InjectionKey<\n (() => Promise<MergeTag | null>) | null\n> = Symbol(\"onRequestMergeTag\");\n\nexport const MERGE_TAG_AUTOCOMPLETE_KEY: InjectionKey<boolean> = Symbol(\n \"mergeTagAutocomplete\",\n);\n\n/**\n * The user's choice between the previews' two merge-tag views: `true` for\n * Sample (tags replaced by their `MergeTag.sample`, rendered as ordinary text)\n * and `false` for Label (tags shown as their label with the usual cue).\n *\n * Session state owned by `useEditorCore` and driven by a toggle that exists\n * only on preview surfaces. Defaults to Sample.\n */\nexport const MERGE_TAG_SAMPLE_MODE_KEY: InjectionKey<Ref<boolean>> =\n Symbol(\"mergeTagSampleMode\");\n\n/**\n * Whether **the current render surface** substitutes samples.\n *\n * Provided per surface rather than globally, and that is the whole point:\n * substitution must never happen while editing, so `Canvas.vue` folds in its\n * `previewMode` flag and provides `false` whenever the canvas is editable, no\n * matter what the mode ref says. Preview surfaces provide the mode directly.\n *\n * Block components inject **this** key. They must never read\n * `MERGE_TAG_SAMPLE_MODE_KEY`, which would bypass the editing guard.\n */\nexport const USE_MERGE_TAG_SAMPLES_KEY: InjectionKey<ComputedRef<boolean>> =\n Symbol(\"useMergeTagSamples\");\n\n/**\n * The `resolvePreview` seam — resolved content plus its loading and failure\n * state. Provided by `useEditorCore` so every preview surface shares one\n * lifecycle; `null` when the consumer configured no hook.\n *\n * Surfaces read `content` from here instead of `editor.content`, and gate the\n * Sample/Label toggle on `supersedesSamples`.\n */\n/**\n * The raw `config.resolvePreview` hook.\n *\n * Provided alongside PREVIEW_RESOLUTION_KEY because the test-email dialog needs\n * its **own** resolution instance — it resolves for the selected recipient,\n * which the editor's canvas has no notion of — and so cannot reuse the shared\n * one. `undefined` when the consumer configured no hook.\n */\nexport const RESOLVE_PREVIEW_KEY: InjectionKey<ResolvePreview | undefined> =\n Symbol(\"resolvePreview\");\n\nexport const PREVIEW_RESOLUTION_KEY: InjectionKey<\n import(\"./composables/usePreviewResolution\").UsePreviewResolutionReturn | null\n> = Symbol(\"previewResolution\");\n\n/**\n * Singleton state for the built-in merge tag picker modal. Provided by\n * `useEditorCore`, consumed by `useMergeTag.requestMergeTag()` (to open\n * the modal as a fall-through when only `mergeTags.tags` is configured)\n * and by `MergeTagPickerModal.vue` (to render and resolve).\n */\nexport const MERGE_TAG_PICKER_KEY: InjectionKey<\n import(\"./composables/useMergeTagPicker\").UseMergeTagPickerReturn\n> = Symbol(\"mergeTagPicker\");\n\n// ---------------------------------------------------------------------------\n// Logic tags — a standalone feature, separate from merge tags. Native\n// highlighting (LogicMergeTagNode) is always on; these drive the dedicated\n// logic picker + insertion.\n// ---------------------------------------------------------------------------\n\nexport const LOGIC_TAGS_KEY: InjectionKey<LogicTag[]> = Symbol(\"logicTags\");\n\nexport const LOGIC_PAIRS_KEY: InjectionKey<LogicPair[]> = Symbol(\"logicPairs\");\n\n/**\n * Singleton state for the built-in logic picker modal. Provided by\n * `useEditorCore`, consumed by `useLogicTag.requestLogicTag()` (to open the modal)\n * and by `LogicTagPickerModal.vue` (to render and resolve).\n */\nexport const LOGIC_TAG_PICKER_KEY: InjectionKey<\n import(\"./composables/useLogicTagPicker\").UseLogicTagPickerReturn\n> = Symbol(\"logicPicker\");\n\nexport const ON_REQUEST_LOGIC_TAG_KEY: InjectionKey<\n (() => Promise<LogicTag | LogicPair | null>) | null\n> = Symbol(\"onRequestLogic\");\n\nexport const ON_REQUEST_MEDIA_KEY: InjectionKey<OnRequestMedia | null> =\n Symbol(\"onRequestMedia\");\n\n/**\n * Per-editor display-only image URL resolver (`config.resolveImageUrl`),\n * wrapped with a per-src cache by `createImageUrlResolver`. `null` when the\n * host doesn't resolve — the canvas then displays canonical src values\n * verbatim. Consumed via `useResolvedImageSrc` in image-displaying blocks.\n */\nexport const IMAGE_URL_RESOLVER_KEY: InjectionKey<ImageUrlResolver | null> =\n Symbol(\"imageUrlResolver\");\n\nexport const DISPLAY_CONDITIONS_KEY: InjectionKey<DisplayCondition[]> =\n Symbol(\"displayConditions\");\n\nexport const ALLOW_CUSTOM_CONDITIONS_KEY: InjectionKey<boolean> = Symbol(\n \"allowCustomConditions\",\n);\n\nexport const CAPABILITIES_KEY: InjectionKey<EditorCapabilities> =\n Symbol(\"capabilities\");\n\nexport const KEYBOARD_REORDER_KEY: InjectionKey<UseKeyboardReorderReturn> =\n Symbol(\"keyboardReorder\");\n\nexport const TEMPLATE_LINT_KEY: InjectionKey<\n import(\"./composables/useTemplateLint\").UseTemplateLintReturn | null\n> = Symbol(\"templateLint\");\n\n/**\n * The editor's effective DOM root — `Document` in light-DOM mode, `ShadowRoot`\n * when `shadowDom: true`. Composables that read `document.activeElement`,\n * popup mount targets, etc. should inject this and use the root-aware API\n * (both `Document` and `ShadowRoot` expose `activeElement` etc.).\n */\nexport const EDITOR_ROOT_KEY: InjectionKey<Document | ShadowRoot> =\n Symbol(\"editorRoot\");\n\n/**\n * Mount target for popovers, toolbars, and modal dialogs — never\n * `document.body`. Provided by `useEditorCore` as a ref bound\n * to a `<div class=\"tpl-popover-root\" />` rendered at the top level of the\n * editor template. Teleports use `:to=\"popoverRoot\"` so popups land inside\n * the editor's effective root — `document` in light-DOM mode, `ShadowRoot`\n * when `shadowDom: true` — instead of escaping the shadow boundary.\n *\n * Null until the editor's template mounts; consumers must guard with\n * `v-if=\"popoverRoot\"` before passing to `<Teleport>`.\n */\nexport const POPOVER_ROOT_KEY: InjectionKey<Ref<HTMLElement | null>> =\n Symbol(\"popoverRoot\");\n\n/**\n * Reactive saved-blocks state, provided by `useSavedBlocksFeature` when a\n * `SavedBlocksProvider` is configured. Shared by OSS and Cloud — the storage\n * transport lives behind the provider, so this key is not cloud-specific.\n */\nexport const SAVED_BLOCKS_KEY: InjectionKey<UseSavedBlocksReturn> =\n Symbol(\"savedBlocks\");\n\n// ---------------------------------------------------------------------------\n// Cloud-only keys (provided by CloudEditor, consumed by cloud components)\n// ---------------------------------------------------------------------------\n\nexport const AUTH_MANAGER_KEY: InjectionKey<AuthManager> =\n Symbol(\"authManager\");\n\nexport const AI_CONFIG_KEY: InjectionKey<UseAiConfigReturn> =\n Symbol(\"aiConfig\");\n\n// Comments are deliberately not injected: the panel takes `useCommentsFeature`'s\n// return as a **prop** the way `TestEmailPanel` and `SavedBlocksPanels` do, and the\n// per-block indicators read the comments entry on `CAPABILITIES_KEY`. Nothing\n// injects the composable itself.\n\nexport const SCORING_KEY: InjectionKey<UseTemplateScoringReturn> =\n Symbol(\"scoring\");\n\nexport const CLOUD_TRANSLATIONS_KEY: InjectionKey<CloudTranslations> =\n Symbol(\"cloudTranslations\");\n\n// ---------------------------------------------------------------------------\n// Helper for required injections with explicit null default + throw\n// ---------------------------------------------------------------------------\n\nexport function requireInject<T>(\n key: InjectionKey<T>,\n componentName: string,\n): T {\n const value = inject(key, null) as T | null;\n if (value === null || value === undefined) {\n throw new Error(\n `${componentName} requires a provider for ${key.description ?? \"unknown key\"}. Ensure it is a descendant of Editor or CloudEditor.`,\n );\n }\n return value;\n}\n"],"mappings":";;AAmCA,IAAa,IACX,OAAO,cAAc,GAEV,IAA6C,OAAO,QAAQ,GAE5D,IAA8C,OAAO,SAAS,GAE9D,IACX,OAAO,cAAc,GAEV,IACX,OAAO,kBAAkB,GAWd,IACX,OAAO,wBAAwB,GAEpB,IACX,OAAO,cAAc,GAEV,IAET,OAAO,aAAa,GAEX,IACX,OAAO,YAAY,GAER,IACX,OAAO,eAAe,GAEX,IACX,OAAO,eAAe,GAEX,IAET,OAAO,wBAAwB,GAMtB,IACX,OAAO,eAAe,GAOX,IACX,OAAO,kBAAkB,GAUd,IAET,OAAO,QAAQ,GAEN,IACX,OAAO,wBAAwB,GAEpB,IAA2C,OAAO,WAAW,GAE7D,IACX,OAAO,gBAAgB,GAEZ,IAET,OAAO,mBAAmB,GAEjB,IAAoD,OAC/D,sBACF,GAUa,IACX,OAAO,oBAAoB,GAahB,IACX,OAAO,oBAAoB,GAkBhB,IACX,OAAO,gBAAgB,GAEZ,IAET,OAAO,mBAAmB,GAQjB,IAET,OAAO,gBAAgB,GAQd,IAA2C,OAAO,WAAW,GAE7D,IAA6C,OAAO,YAAY,GAOhE,IAET,OAAO,aAAa,GAEX,IAET,OAAO,gBAAgB,GAEd,IACX,OAAO,gBAAgB,GAQZ,IACX,OAAO,kBAAkB,GAEd,IACX,OAAO,mBAAmB,GAEf,IAAqD,OAChE,uBACF,GAEa,IACX,OAAO,cAAc,GAEV,IACX,OAAO,iBAAiB,GAEb,IAET,OAAO,cAAc,GAQZ,IACX,OAAO,YAAY,GAaR,IACX,OAAO,aAAa,GAOT,IACX,OAAO,aAAa,GAMT,IACX,OAAO,aAAa,GAET,IACX,OAAO,UAAU,GAON,IACX,OAAO,SAAS,GAEL,IACX,OAAO,mBAAmB;AAM5B,SAAgB,EACd,GACA,GACG;CACH,IAAM,IAAQ,EAAO,GAAK,IAAI;CAC9B,IAAI,KAAU,MACZ,MAAU,MACR,GAAG,EAAc,2BAA2B,EAAI,eAAe,cAAc,sDAC/E;CAEF,OAAO;AACT"}
@@ -26,9 +26,9 @@ var e = {
26
26
  daysAgo: "{days} d geleden"
27
27
  },
28
28
  history: {
29
+ collabWarning: "Ongedaan maken kan recente wijzigingen van medewerkers beïnvloeden",
29
30
  undo: "Ongedaan maken",
30
- redo: "Opnieuw",
31
- collabWarning: "Ongedaan maken kan recente wijzigingen van medewerkers beïnvloeden"
31
+ redo: "Opnieuw"
32
32
  },
33
33
  viewport: {
34
34
  label: "Weergave",
@@ -99,8 +99,7 @@ var e = {
99
99
  highlightColor: "Markeerkleur",
100
100
  lineHeight: "Regelafstand",
101
101
  letterSpacing: "Letterafstand",
102
- emojiItemLabel: "Emoji {emoji} invoegen",
103
- closeEmojiPicker: "Emoji-kiezer sluiten"
102
+ emojiItemLabel: "Emoji {emoji} invoegen"
104
103
  },
105
104
  blockActions: {
106
105
  drag: "Sleep om te herschikken, of druk op de spatiebalk om met het toetsenbord te verplaatsen",
@@ -168,6 +167,7 @@ var e = {
168
167
  linkUrl: "Link-URL",
169
168
  openInNewTab: "Openen in nieuw tabblad",
170
169
  placeholderUrl: "Tijdelijke afbeelding",
170
+ optional: "(optioneel)",
171
171
  placeholderUrlPlaceholder: "https://... (alleen tijdens ontwerp)",
172
172
  placeholderUrlTooltip: "Omdat de afbeeldings-URL een samenvoegveld gebruikt, kunt u hier een echte afbeelding opgeven om de lay-out tijdens het ontwerpen te bekijken. Deze wordt niet opgenomen in het eindresultaat.",
173
173
  clickToAdd: "Klik om een afbeeldings-URL toe te voegen",
@@ -180,9 +180,6 @@ var e = {
180
180
  video: {
181
181
  videoUrl: "URL van de video",
182
182
  videoUrlPlaceholder: "https://youtube.com/...",
183
- youtube: "YouTube",
184
- vimeo: "Vimeo",
185
- detected: "Video gedetecteerd — de miniatuur wordt automatisch gegenereerd",
186
183
  openInNewTab: "Openen in nieuw tabblad",
187
184
  customThumbnail: "Aangepaste miniatuur",
188
185
  optional: "(optioneel)",
@@ -225,8 +222,6 @@ var e = {
225
222
  addIcon: "Icoon toevoegen",
226
223
  addIcons: "Voeg sociale-media-iconen toe",
227
224
  removeIcon: "Verwijderen",
228
- platform: "Platform",
229
- url: "URL",
230
225
  urlPlaceholder: "https://...",
231
226
  style: "Stijl",
232
227
  styleSolid: "Gevuld",
@@ -265,7 +260,6 @@ var e = {
265
260
  addItem: "Item toevoegen",
266
261
  removeItem: "Verwijderen",
267
262
  text: "Tekst",
268
- url: "URL",
269
263
  urlPlaceholder: "https://example.com",
270
264
  openInNewTab: "Openen in nieuw tabblad",
271
265
  bold: "Vet",
@@ -284,10 +278,6 @@ var e = {
284
278
  dimensions: "Afmetingen",
285
279
  rows: "Rijen",
286
280
  columns: "Kolommen",
287
- addRow: "Rij toevoegen",
288
- removeRow: "Rij verwijderen",
289
- addColumn: "Kolom toevoegen",
290
- removeColumn: "Kolom verwijderen",
291
281
  hasHeaderRow: "Koprij",
292
282
  headerBackgroundColor: "Achtergrond van de koprij",
293
283
  noHeaderBg: "Geen achtergrond",
@@ -433,7 +423,6 @@ var e = {
433
423
  noResults: "Geen overeenkomende samenvoegvelden",
434
424
  empty: "Geen samenvoegvelden geconfigureerd",
435
425
  otherGroup: "Overige",
436
- cancel: "Annuleren",
437
426
  close: "Sluiten",
438
427
  groupCount: "{count}",
439
428
  sample: "Voorbeeld: {sample}"
@@ -461,90 +450,6 @@ var e = {
461
450
  aiHintDesign: "Heeft u al een ontwerp? Upload een schermafbeelding, afbeelding of PDF en",
462
451
  aiHintDesignSuffix: "maakt het direct na"
463
452
  },
464
- mediaLibrary: {
465
- title: "Mediabibliotheek",
466
- searchPlaceholder: "Bestanden zoeken...",
467
- allFiles: "Alle bestanden",
468
- filterAll: "Alle types",
469
- filterImages: "Afbeeldingen",
470
- filterDocuments: "Documenten",
471
- filterVideos: "Video's",
472
- filterAudio: "Audio",
473
- newFolder: "Nieuwe map",
474
- folderName: "Mapnaam",
475
- noFiles: "Geen bestanden gevonden",
476
- dropOrClick: "Sleep bestanden hierheen of klik om te uploaden",
477
- acceptedFormats: "Afbeeldingen, PDF, video, audio, documenten (max. 10 MB)",
478
- uploading: "Uploaden...",
479
- uploadingProgress: "Uploaden van {current} van {total}...",
480
- selectImage: "Afbeelding selecteren",
481
- selectFile: "Bestand selecteren",
482
- deleteSelected: "Verwijderen",
483
- copyUrl: "URL kopiëren",
484
- copied: "Gekopieerd!",
485
- browseMedia: "Mediabibliotheek openen",
486
- renameFolder: "Map hernoemen",
487
- addSubfolder: "Submap toevoegen",
488
- subfolderName: "Naam van de submap",
489
- sortNewest: "Nieuwste eerst",
490
- sortOldest: "Oudste eerst",
491
- sortNameAsc: "Naam A-Z",
492
- sortNameDesc: "Naam Z-A",
493
- sortSizeAsc: "Kleinste eerst",
494
- sortSizeDesc: "Grootste eerst",
495
- moveSelected: "Verplaatsen",
496
- moveToRoot: "Alle bestanden",
497
- currentFolder: "(huidige)",
498
- confirmDelete: "Dit bestand verwijderen?",
499
- renameFile: "Hernoemen",
500
- editFile: "Bestand bewerken",
501
- fileName: "Bestandsnaam",
502
- altText: "Alt-tekst",
503
- altTextPlaceholder: "Beschrijf deze afbeelding voor toegankelijkheid",
504
- saveChanges: "Opslaan",
505
- cancel: "Annuleren",
506
- frequentlyUsed: "Vaak gebruikt",
507
- deleteWarningTitle: "Bestand verwijderen",
508
- deleteWarningMessage: "Dit bestand wordt definitief verwijderd en kan niet worden hersteld.",
509
- deleteWarningUsageNote: "De volgende bestanden worden gebruikt in sjablonen. Verwijderen kan die sjablonen breken.",
510
- deleteAnyway: "Bestand verwijderen",
511
- usedInTemplates: "Gebruikt in {count} sjabloon(en)",
512
- viewGrid: "Rasterweergave",
513
- viewList: "Lijstweergave",
514
- showFolders: "Mappen tonen",
515
- hideFolders: "Mappen verbergen",
516
- importFromUrl: "Importeren vanaf URL",
517
- importUrlPlaceholder: "https://example.com/image.jpg",
518
- import: "Importeren",
519
- importing: "Importeren...",
520
- importError: "Importeren vanaf URL mislukt",
521
- conversionLabel: "Grootte",
522
- conversionOriginal: "Origineel",
523
- conversionSmall: "Klein (150px)",
524
- conversionMedium: "Middel (600px)",
525
- conversionLarge: "Groot (1200px)",
526
- replaceFile: "Bestand vervangen",
527
- replaceWarningTitle: "Bestand vervangen",
528
- replaceWarningMessage: "U staat op het punt dit bestand te vervangen. De vervanging moet dezelfde bestandsextensie hebben ({extension}).",
529
- replaceWarningUsageNote: "Dit bestand wordt gebruikt in {count} sjabloon(en). Vervangen werkt alle verwijzingen bij.",
530
- replaceSelectFile: "Vervangend bestand selecteren",
531
- replace: "Vervangen",
532
- replacing: "Vervangen...",
533
- replaceError: "Bestand vervangen mislukt",
534
- saving: "Opslaan...",
535
- cropAspectRatio: "Beeldverhouding",
536
- cropFree: "Vrij",
537
- cropSquare: "1:1",
538
- cropLandscape43: "4:3",
539
- cropLandscape169: "16:9",
540
- cropOriginal: "Origineel",
541
- cropMaxWidth: "Max. breedte",
542
- cropMaxHeight: "Max. hoogte",
543
- cropOutputSize: "Uitvoergrootte",
544
- cropPixels: "px",
545
- cropOptional: "(optioneel)",
546
- storageTooltip: "{used} van {total} gebruikt ({remaining} resterend)"
547
- },
548
453
  savedBlocks: {
549
454
  title: "Opgeslagen blokken",
550
455
  saveAsBlock: "Opslaan als blok",
@@ -661,7 +566,6 @@ var e = {
661
566
  },
662
567
  sidebarNav: {
663
568
  browseSavedBlocks: "Opgeslagen blokken bekijken",
664
- expandSidebar: "Blokzijbalk uitvouwen",
665
569
  palette: "Blokkenpalet",
666
570
  insertBlock: "Blok {block} invoegen"
667
571
  },
@@ -696,3 +600,5 @@ var e = {
696
600
  };
697
601
  //#endregion
698
602
  export { e as default };
603
+
604
+ //# sourceMappingURL=nl-Btw4ojNo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nl-Btw4ojNo.js","names":[],"sources":["../../../src/i18n/locales/nl.ts"],"sourcesContent":["import type en from \"./en\";\n\nconst nl: typeof en = {\n footer: {\n poweredBy: \"Mogelijk gemaakt door\",\n openSource: \"Open Source\",\n },\n\n header: {\n save: \"Opslaan\",\n saving: \"Opslaan...\",\n saved: \"Opgeslagen\",\n unsaved: \"Niet opgeslagen\",\n saveFailed: \"Opslaan mislukt\",\n saveNoTemplate: \"Laad of maak eerst een template\",\n templateName: \"Templatenaam\",\n rename: \"Template hernoemen\",\n untitled: \"Naamloos\",\n updatedAt: \"Bijgewerkt {time}\",\n createdAt: \"Gemaakt {time}\",\n updatedJustNow: \"Zojuist bijgewerkt\",\n createdJustNow: \"Zojuist gemaakt\",\n },\n\n // Relative timestamps, shared by every surface that shows one: the header's\n // updated line, saved blocks, comments and version history.\n time: {\n justNow: \"Zojuist\",\n minutesAgo: \"{minutes} min geleden\",\n hoursAgo: \"{hours} u geleden\",\n daysAgo: \"{days} d geleden\",\n },\n\n history: {\n collabWarning:\n \"Ongedaan maken kan recente wijzigingen van medewerkers beïnvloeden\",\n undo: \"Ongedaan maken\",\n redo: \"Opnieuw\",\n },\n viewport: {\n label: \"Weergave\",\n desktop: \"Desktop\",\n mobile: \"Mobiel\",\n },\n darkMode: {\n enable: \"Voorbeeld in donkere modus\",\n disable: \"Voorbeeld in lichte modus\",\n },\n previewMode: {\n enable: \"Voorbeeldmodus\",\n disable: \"Voorbeeld sluiten\",\n },\n blocks: {\n section: \"Sectie\",\n image: \"Afbeelding\",\n title: \"Titel\",\n paragraph: \"Alinea\",\n button: \"Knop\",\n divider: \"Scheidingslijn\",\n video: \"Video\",\n social: \"Sociale media\",\n spacer: \"Tussenruimte\",\n html: \"HTML\",\n menu: \"Menu\",\n table: \"Tabel\",\n countdown: \"Aftelklok\",\n },\n sidebar: {\n content: \"Inhoud\",\n settings: \"Instellingen\",\n noSelection: \"Geen element geselecteerd\",\n noSelectionHint: \"Selecteer een blok op het canvas om het te bewerken\",\n },\n toolbar: {\n duplicate: \"Dupliceren\",\n delete: \"Verwijderen\",\n },\n titleEditor: {\n toolbar: \"Titelopmaak\",\n bold: \"Vet (Ctrl+B)\",\n italic: \"Cursief (Ctrl+I)\",\n addLink: \"Link toevoegen\",\n },\n paragraphEditor: {\n toolbar: \"Tekstopmaak\",\n bold: \"Vet (Ctrl+B)\",\n italic: \"Cursief (Ctrl+I)\",\n underline: \"Onderstreept (Ctrl+U)\",\n strikethrough: \"Doorgehaald\",\n subscript: \"Subscript\",\n superscript: \"Superscript\",\n addLink: \"Link toevoegen\",\n bulletList: \"Opsommingslijst\",\n numberedList: \"Genummerde lijst\",\n alignLeft: \"Links uitlijnen\",\n alignCenter: \"Centreren\",\n alignRight: \"Rechts uitlijnen\",\n alignJustify: \"Uitvullen\",\n clearFormatting: \"Opmaak wissen\",\n insertEmoji: \"Emoji invoegen\",\n fontFamily: \"Lettertype\",\n defaultFont: \"Standaard\",\n fontSize: \"Tekengrootte\",\n defaultSize: \"Standaard\",\n textColor: \"Tekstkleur\",\n highlightColor: \"Markeerkleur\",\n lineHeight: \"Regelafstand\",\n letterSpacing: \"Letterafstand\",\n emojiItemLabel: \"Emoji {emoji} invoegen\",\n },\n blockActions: {\n drag: \"Sleep om te herschikken, of druk op de spatiebalk om met het toetsenbord te verplaatsen\",\n dragLifted:\n \"{block} wordt verplaatst. Gebruik de pijltjestoetsen omhoog en omlaag om te herpositioneren, spatiebalk of Enter om neer te zetten, Escape om te annuleren.\",\n duplicate: \"Blok dupliceren\",\n delete: \"Blok verwijderen\",\n hiddenOnViewport: \"Verborgen op {viewport}\",\n saveAsBlock: \"Opslaan als blok\",\n conditionToggle: \"Weergavevoorwaarde in- of uitschakelen\",\n comments: \"Opmerkingen ({count})\",\n lifted: \"{block} opgetild. Positie {position} van {total}.\",\n moved: \"{block} verplaatst naar positie {position} van {total}.\",\n dropped: \"{block} neergezet op positie {position} van {total}.\",\n cancelled:\n \"Verplaatsing geannuleerd. {block} is terug op positie {position}.\",\n },\n section: {\n dropHere: \"Sleep blokken hierheen\",\n columns: \"Kolommen\",\n column1: \"1 kolom\",\n column2: \"2 kolommen\",\n column3: \"3 kolommen\",\n ratio12: \"Verhouding 1:2\",\n ratio21: \"Verhouding 2:1\",\n borderRadius: \"Hoekafronding\",\n wrapperEnable: \"Omhulsel toevoegen\",\n stackOnMobile: \"Stapelen op mobiel\",\n },\n linkDialog: {\n editLink: \"Link bewerken\",\n insertLink: \"Link invoegen\",\n updateLink: \"Link bijwerken\",\n removeLink: \"Link verwijderen\",\n cancel: \"Annuleren\",\n urlPlaceholder: \"https://example.com\",\n urlLabel: \"URL\",\n colorLabel: \"Linkkleur\",\n },\n title: {\n level: \"Titelniveau\",\n heading1: \"Titel 1 (36px)\",\n heading2: \"Titel 2 (28px)\",\n heading3: \"Titel 3 (22px)\",\n heading4: \"Titel 4 (18px)\",\n fontFamily: \"Lettertype\",\n inheritFont: \"Lettertype van het sjabloon gebruiken\",\n color: \"Kleur\",\n align: \"Uitlijnen\",\n alignLeft: \"Links\",\n alignCenter: \"Midden\",\n alignRight: \"Rechts\",\n },\n emoji: {\n smileys: \"Smileys\",\n gestures: \"Gebaren\",\n objects: \"Objecten\",\n },\n image: {\n imageUrl: \"URL van de afbeelding\",\n imageUrlPlaceholder: \"https://...\",\n altText: \"Alt-tekst\",\n altTextPlaceholder: \"Beschrijving van de afbeelding\",\n width: \"Breedte\",\n fullWidth: \"Volledige breedte\",\n widthCustom: \"Aangepast\",\n linkUrl: \"Link-URL\",\n openInNewTab: \"Openen in nieuw tabblad\",\n placeholderUrl: \"Tijdelijke afbeelding\",\n optional: \"(optioneel)\",\n placeholderUrlPlaceholder: \"https://... (alleen tijdens ontwerp)\",\n placeholderUrlTooltip:\n \"Omdat de afbeeldings-URL een samenvoegveld gebruikt, kunt u hier een echte afbeelding opgeven om de lay-out tijdens het ontwerpen te bekijken. Deze wordt niet opgenomen in het eindresultaat.\",\n clickToAdd: \"Klik om een afbeeldings-URL toe te voegen\",\n browseMedia: \"Mediabibliotheek openen\",\n dropToUpload: \"Sleep een afbeelding hierheen om te uploaden\",\n uploading: \"Uploaden…\",\n decorative: \"Decoratieve afbeelding\",\n decorativeHint:\n \"Verborgen voor schermlezers. Alleen gebruiken voor tussenruimtes en visuele versieringen.\",\n },\n video: {\n videoUrl: \"URL van de video\",\n videoUrlPlaceholder: \"https://youtube.com/...\",\n openInNewTab: \"Openen in nieuw tabblad\",\n customThumbnail: \"Aangepaste miniatuur\",\n optional: \"(optioneel)\",\n thumbnailPlaceholder: \"Automatisch gegenereerd uit de video-URL\",\n altText: \"Alt-tekst\",\n altTextPlaceholder: \"Beschrijving van de video\",\n width: \"Breedte\",\n fullWidth: \"Volledige breedte\",\n placeholderUrl: \"Tijdelijke miniatuur\",\n placeholderUrlPlaceholder: \"https://... (alleen tijdens ontwerp)\",\n placeholderUrlTooltip:\n \"Omdat de video-URL een samenvoegveld gebruikt, kunt u hier een echte miniatuur opgeven om de lay-out tijdens het ontwerpen te bekijken. Deze wordt niet opgenomen in het eindresultaat.\",\n addVideo: \"Voeg een video-URL toe\",\n },\n button: {\n fontFamily: \"Lettertype\",\n inheritFont: \"Lettertype van het sjabloon gebruiken\",\n text: \"Tekst\",\n url: \"URL\",\n urlPlaceholder: \"https://...\",\n openInNewTab: \"Openen in nieuw tabblad\",\n background: \"Achtergrond\",\n textColor: \"Tekstkleur\",\n borderRadius: \"Hoekafronding\",\n fontSize: \"Tekengrootte\",\n width: \"Breedte\",\n widthAuto: \"Aanpassen aan inhoud\",\n fullWidth: \"Volledige breedte\",\n widthCustom: \"Aangepast\",\n },\n divider: {\n style: \"Stijl\",\n solid: \"Doorlopend\",\n dashed: \"Streepjes\",\n dotted: \"Stippellijn\",\n color: \"Kleur\",\n thickness: \"Dikte\",\n },\n social: {\n icons: \"Iconen\",\n addIcon: \"Icoon toevoegen\",\n addIcons: \"Voeg sociale-media-iconen toe\",\n removeIcon: \"Verwijderen\",\n urlPlaceholder: \"https://...\",\n style: \"Stijl\",\n styleSolid: \"Gevuld\",\n styleOutlined: \"Omlijnd\",\n styleRounded: \"Afgerond\",\n styleSquare: \"Vierkant\",\n styleCircle: \"Cirkel\",\n size: \"Grootte\",\n sizeSmall: \"S\",\n sizeMedium: \"M\",\n sizeLarge: \"L\",\n spacing: \"Afstand\",\n align: \"Uitlijning\",\n platforms: {\n facebook: \"Facebook\",\n twitter: \"X (Twitter)\",\n instagram: \"Instagram\",\n linkedin: \"LinkedIn\",\n youtube: \"YouTube\",\n tiktok: \"TikTok\",\n pinterest: \"Pinterest\",\n email: \"E-mail\",\n website: \"Website\",\n whatsapp: \"WhatsApp\",\n telegram: \"Telegram\",\n discord: \"Discord\",\n snapchat: \"Snapchat\",\n reddit: \"Reddit\",\n github: \"GitHub\",\n dribbble: \"Dribbble\",\n behance: \"Behance\",\n },\n },\n menu: {\n items: \"Menu-items\",\n addItem: \"Item toevoegen\",\n removeItem: \"Verwijderen\",\n text: \"Tekst\",\n urlPlaceholder: \"https://example.com\",\n openInNewTab: \"Openen in nieuw tabblad\",\n bold: \"Vet\",\n underline: \"Onderstreept\",\n color: \"Kleur\",\n linkColor: \"Linkkleur\",\n fontSize: \"Tekengrootte\",\n fontFamily: \"Lettertype\",\n separator: \"Scheidingsteken\",\n separatorColor: \"Kleur van het scheidingsteken\",\n spacing: \"Afstand\",\n textAlign: \"Uitlijning\",\n addLinks: \"Voeg menulinks toe\",\n },\n table: {\n dimensions: \"Afmetingen\",\n rows: \"Rijen\",\n columns: \"Kolommen\",\n hasHeaderRow: \"Koprij\",\n headerBackgroundColor: \"Achtergrond van de koprij\",\n noHeaderBg: \"Geen achtergrond\",\n borderColor: \"Randkleur\",\n borderWidth: \"Randdikte\",\n cellPadding: \"Binnenmarge van cellen\",\n fontFamily: \"Lettertype\",\n fontSize: \"Tekengrootte\",\n color: \"Tekstkleur\",\n textAlign: \"Uitlijning\",\n cellPlaceholder: \"Voer tekst in...\",\n empty: \"Voeg een tabel toe\",\n },\n spacer: {\n height: \"Hoogte\",\n },\n countdown: {\n targetDate: \"Doeldatum\",\n timezone: \"Tijdzone\",\n display: \"Weergave\",\n days: \"Dagen\",\n hours: \"Uren\",\n minutes: \"Minuten\",\n seconds: \"Seconden\",\n separator: \"Scheidingsteken\",\n fontFamily: \"Lettertype\",\n inheritFont: \"Standaard\",\n digitFontSize: \"Cijfergrootte\",\n digitColor: \"Cijferkleur\",\n labelColor: \"Labelkleur\",\n labelFontSize: \"Labelgrootte\",\n background: \"Achtergrond\",\n labels: \"Labels\",\n expiry: \"Bericht na afloop\",\n expiredMessagePlaceholder: \"Deze aanbieding is verlopen\",\n expiredImageUrl: \"URL van de afbeelding na afloop\",\n hideOnExpiry: \"Verbergen na afloop\",\n setDate: \"Stel een doeldatum in via het instellingenpaneel\",\n hidden: \"Verborgen (verlopen)\",\n },\n customBlocks: {\n definitionNotFound: \"Onbekend bloktype — dit blok is niet geregistreerd\",\n renderError:\n \"Dit blok kon niet worden weergegeven. Controleer het bloksjabloon op fouten.\",\n fields: {\n required: \"Verplicht\",\n addItem: \"Item toevoegen\",\n removeItem: \"Verwijderen\",\n maxItemsReached: \"Maximaal aantal items bereikt\",\n minItemsRequired: \"Minimaal {count} items vereist\",\n },\n toolbar: {\n noDefinition:\n \"Registreer dit bloktype in uw SDK-configuratie om de eigenschappen te bewerken\",\n },\n dataSource: {\n fetchButton: \"Inhoud laden\",\n changeButton: \"Wijzigen\",\n fetching: \"Laden...\",\n readOnlyTooltip: \"Deze waarde wordt geladen uit uw gegevensbron\",\n fetchError: \"Inhoud laden mislukt\",\n },\n },\n html: {\n content: \"HTML-inhoud\",\n preview: \"Aangepast HTML-blok\",\n empty: \"Voeg HTML-inhoud toe in het paneel\",\n sanitizationHint:\n \"HTML wordt ongewijzigd geëxporteerd en niet opgeschoond — zorg dat de inhoud veilig is.\",\n },\n blockSettings: {\n spacing: \"Afstand\",\n padding: \"Binnenmarge\",\n background: \"Achtergrond\",\n color: \"Kleur\",\n display: \"Weergave\",\n showOnDesktop: \"Tonen op desktop\",\n showOnMobile: \"Tonen op mobiel\",\n hiddenOnDevice: \"Verborgen op {device}\",\n displayCondition: \"Weergavevoorwaarde\",\n selectCondition: \"Voorwaarde selecteren\",\n removeCondition: \"Voorwaarde verwijderen\",\n noCondition: \"Altijd zichtbaar\",\n conditionApplied: \"Voorwaarde toegepast\",\n customCondition: \"Aangepaste voorwaarde\",\n customConditionLabel: \"Naam van de voorwaarde\",\n customConditionBefore: \"Voor (openingslogica)\",\n customConditionAfter: \"Na (sluitingslogica)\",\n applyCondition: \"Toepassen\",\n cancelCondition: \"Annuleren\",\n customBadge: \"Aangepast\",\n restoreHiddenBlocks: \"Alle verborgen blokken tonen\",\n },\n templateSettings: {\n layout: \"Lay-out\",\n widthPreset: \"Vooraf ingestelde breedte\",\n customWidth: \"Aangepaste breedte\",\n appearance: \"Uiterlijk\",\n backgroundColor: \"Achtergrondkleur\",\n textColor: \"Tekstkleur\",\n linkColor: \"Linkkleur\",\n linkUnderline: \"Links onderstrepen\",\n fontFamily: \"Lettertype\",\n preheaderText: \"Voorbeeldtekst (preheader)\",\n preheaderTextPlaceholder:\n \"Voorbeeldtekst die na de onderwerpregel in de inbox wordt getoond...\",\n preheaderTextHint:\n \"Deze tekst verschijnt na de onderwerpregel in de voorbeelden van e-mailprogramma's. Samenvoegvelden worden ondersteund.\",\n language: \"Taal\",\n contentLocale: \"Taal van de inhoud\",\n contentLocaleHint:\n \"BCP 47-code (bv. nl, de, pt-BR). Bepaalt het lang-attribuut van de gerenderde e-mail zodat schermlezers de inhoud correct uitspreken.\",\n tips: \"Tips\",\n tip1: \"600px is de standaardbreedte voor e-mailsjablonen\",\n tip2: \"Gebruik webveilige lettertypen voor de beste compatibiliteit\",\n tip3: \"Lichte achtergronden lezen het prettigst\",\n },\n spacingControl: {\n lockAll: \"Alle zijden vergrendelen\",\n unlock: \"Zijden ontgrendelen\",\n top: \"Boven\",\n right: \"Rechts\",\n bottom: \"Onder\",\n left: \"Links\",\n decreaseTop: \"Boven verkleinen\",\n increaseTop: \"Boven vergroten\",\n decreaseLeft: \"Links verkleinen\",\n increaseLeft: \"Links vergroten\",\n decreaseRight: \"Rechts verkleinen\",\n increaseRight: \"Rechts vergroten\",\n decreaseBottom: \"Onder verkleinen\",\n increaseBottom: \"Onder vergroten\",\n },\n colorPicker: {\n pickColor: \"Kies een kleur\",\n hexValue: \"Hexadecimale kleurwaarde\",\n notSet: \"Niet ingesteld\",\n clear: \"Kleur wissen\",\n presetColors: \"Vooraf ingestelde kleuren\",\n },\n mergeTag: {\n clickToEdit: \"Klik om te bewerken\",\n remove: \"Samenvoegveld verwijderen\",\n insert: \"Samenvoegveld invoegen\",\n insertShort: \"Samenvoegveld\",\n editValue: \"Waarde van het samenvoegveld bewerken\",\n deleteMergeTag: \"Samenvoegveld verwijderen\",\n suggestionEmpty: \"Geen overeenkomende samenvoegvelden\",\n picker: {\n title: \"Samenvoegveld invoegen\",\n searchPlaceholder: \"Samenvoegvelden zoeken\",\n searchAriaLabel: \"Samenvoegvelden zoeken\",\n noResults: \"Geen overeenkomende samenvoegvelden\",\n empty: \"Geen samenvoegvelden geconfigureerd\",\n otherGroup: \"Overige\",\n close: \"Sluiten\",\n groupCount: \"{count}\",\n sample: \"Voorbeeld: {sample}\",\n },\n },\n logicTag: {\n insert: \"Logica invoegen\",\n insertShort: \"Logica\",\n picker: {\n title: \"Logica invoegen\",\n searchPlaceholder: \"Logicatags zoeken\",\n searchAriaLabel: \"Logicatags zoeken\",\n noResults: \"Geen overeenkomende logicatags\",\n empty: \"Geen logicatags geconfigureerd\",\n otherGroup: \"Overige\",\n close: \"Sluiten\",\n },\n },\n canvas: {\n noBlocks: \"Nog geen blokken\",\n dragHint: \"Begin vanaf nul door blokken vanuit de zijbalk te slepen\",\n dropHere: \"Hier neerzetten\",\n aiHintChat: \"of laat\",\n aiHintChatSuffix:\n \"in enkele seconden een volledig sjabloon voor u genereren\",\n aiHintDesign:\n \"Heeft u al een ontwerp? Upload een schermafbeelding, afbeelding of PDF en\",\n aiHintDesignSuffix: \"maakt het direct na\",\n },\n savedBlocks: {\n title: \"Opgeslagen blokken\",\n saveAsBlock: \"Opslaan als blok\",\n name: \"Naam\",\n namePlaceholder: \"bv. Koptekst, Voettekst, CTA...\",\n save: \"Blok opslaan\",\n saving: \"Opslaan...\",\n cancel: \"Annuleren\",\n empty: \"Nog geen opgeslagen blokken\",\n emptyHint:\n \"Sla blokken uit uw sjablonen op om ze later opnieuw te gebruiken.\",\n noResults: \"Geen opgeslagen blokken gevonden voor uw zoekopdracht\",\n search: \"Opgeslagen blokken zoeken...\",\n loading: \"Opgeslagen blokken laden…\",\n category: \"Categorie\",\n categoryPlaceholder: \"bv. Kopteksten, Promoties... (optioneel)\",\n allCategories: \"Alle categorieën\",\n filterByCategory: \"Filteren op categorie\",\n insert: \"Invoegen\",\n rename: \"Hernoemen\",\n delete: \"Verwijderen\",\n deleteConfirm: \"Dit opgeslagen blok verwijderen?\",\n blockCount: \"{count} blok(ken)\",\n browse: \"Opgeslagen blokken bekijken\",\n selectToPreview: \"Selecteer een opgeslagen blok voor een voorbeeld\",\n insertAtBeginning: \"Aan het begin\",\n insertAfterBlock: \"Na {block}\",\n insertAtEnd: \"Aan het einde\",\n insertPosition: \"Invoegpositie\",\n close: \"Sluiten\",\n pickToolbar: \"Selectie van opgeslagen blokken\",\n pickCount: \"{count} blok(ken) geselecteerd\",\n pickHint: \"Klik op blokken om ze toe te voegen of te verwijderen\",\n savingCount: \"{count} blok(ken) opslaan:\",\n reorderHint:\n \"Sleep om te herschikken — blokken worden in deze volgorde opgeslagen\",\n reorderHandle: \"{block} herschikken, positie {position} van {total}\",\n reorderAnnouncement:\n \"{block} verplaatst naar positie {position} van {total}\",\n expand: \"Uitklappen\",\n collapse: \"Inklappen\",\n expandPreview: \"Voorbeeld van {block} uitklappen\",\n collapsePreview: \"Voorbeeld van {block} inklappen\",\n },\n comments: {\n button: \"Opmerkingen\",\n title: \"Opmerkingen\",\n placeholder: \"Schrijf een opmerking...\",\n replyPlaceholder: \"Schrijf een antwoord...\",\n reply: \"Antwoorden\",\n resolve: \"Oplossen\",\n unresolve: \"Heropenen\",\n delete: \"Verwijderen\",\n edit: \"Bewerken\",\n cancel: \"Annuleren\",\n save: \"Opslaan\",\n noComments: \"Nog geen opmerkingen\",\n noCommentsHint:\n \"Start een gesprek door een opmerking toe te voegen aan de template of aan een specifiek blok.\",\n deleteConfirm: \"Deze opmerking verwijderen?\",\n filterAll: \"Alle\",\n filterUnresolved: \"Niet opgelost\",\n filterBlock: \"Dit blok\",\n jumpToBlock: \"Blok\",\n ownedByYou: \"Jij\",\n edited: \"bewerkt\",\n resolvedBy: \"Opgelost door {name}\",\n replyOne: \"{count} antwoord\",\n replyMany: \"{count} antwoorden\",\n missingBlock: \"Blok ontbreekt\",\n saveTemplateFirst:\n \"Sla de template op voordat je een opmerking bij dit blok plaatst.\",\n },\n versionHistory: {\n tooltip: \"Versiegeschiedenis\",\n dropdownTitle: \"Versiegeschiedenis\",\n empty: \"Nog geen versies\",\n auto: \"auto\",\n olderVersion: \"Oudere versie\",\n newerVersion: \"Nieuwere versie\",\n },\n versionPreview: {\n message: \"U bekijkt een eerdere versie van dit sjabloon.\",\n cancel: \"Annuleren\",\n restore: \"Deze versie herstellen\",\n restoreConfirm: {\n title: \"Deze versie herstellen?\",\n unsavedWithSave:\n \"U hebt niet-opgeslagen wijzigingen. Sla ze eerst op en ze blijven in uw geschiedenis — herstelt u zonder op te slaan, dan gaan ze verloren.\",\n unsavedNoSave:\n \"U hebt niet-opgeslagen wijzigingen en nergens om ze op te slaan. Bij het herstellen van deze versie gaan ze verloren.\",\n saveAndRestore: \"Opslaan en herstellen\",\n restoreAnyway: \"Toch herstellen\",\n cancel: \"Annuleren\",\n },\n },\n previewResolution: {\n resolving: \"Voorbeeld wordt opgelost…\",\n failed:\n \"Het voorbeeld kon niet worden opgelost — het niet-opgeloste sjabloon wordt weergegeven.\",\n hint: \"Het voorbeeld gebruikt opgeloste gegevens uit uw backend.\",\n },\n mergeTagPreview: {\n label: \"Weergave van samenvoegvelden\",\n sample: \"Voorbeeldwaarde\",\n labelView: \"Naam\",\n },\n testEmail: {\n title: \"Test-e-mail verzenden\",\n recipientLabel: \"Ontvanger\",\n recipientPlaceholder: \"u@voorbeeld.nl\",\n invalidAddress: \"Voer een geldig e-mailadres in.\",\n preview: \"Voorbeeld\",\n previewHint:\n \"Samenvoegvelden worden onopgelost weergegeven — uw backend vult ze in.\",\n previewHintSample:\n \"Samenvoegvelden tonen voorbeeldwaarden — uw backend vult de echte gegevens in.\",\n recipientNotAllowed:\n \"Dit adres staat niet in de lijst met toegestane ontvangers.\",\n send: \"Verzenden\",\n sending: \"Wordt verzonden...\",\n cancel: \"Annuleren\",\n success: \"Test-e-mail succesvol verzonden\",\n button: \"Test\",\n },\n sidebarNav: {\n browseSavedBlocks: \"Opgeslagen blokken bekijken\",\n palette: \"Blokkenpalet\",\n insertBlock: \"Blok {block} invoegen\",\n },\n landmarks: {\n canvas: \"E-mailcanvas\",\n blockToolbar: \"Blokeigenschappen\",\n rightSidebar: \"Blokeigenschappen en sjablooninstellingen\",\n reorderAnnouncements: \"Aankondigingen van blokherschikking\",\n },\n errors: {\n editorLoading: \"Editor laden...\",\n editorLoadFailed: \"Editor laden mislukt.\",\n retry: \"Opnieuw proberen\",\n },\n issues: {\n panelTitle: \"Problemen\",\n panelTabLabel: \"Problemen\",\n groupErrors: \"Fouten\",\n groupWarnings: \"Waarschuwingen\",\n groupInfo: \"Info\",\n jump: \"Naar het blok springen\",\n fix: \"Herstellen\",\n emptyState: \"Geen problemen — ziet er goed uit.\",\n badgeError: \"Bevat fouten\",\n badgeWarning: \"Bevat waarschuwingen\",\n issueCountTooltip: \"{count} probleem(en)\",\n },\n smallScreen: {\n title: \"Groter scherm vereist\",\n message:\n \"De editor heeft meer ruimte nodig dan dit scherm biedt. Open hem op een tablet of desktop om te beginnen met bewerken.\",\n },\n};\n\nexport default nl;\n"],"mappings":";AAEA,IAAM,IAAgB;CACpB,QAAQ;EACN,WAAW;EACX,YAAY;CACd;CAEA,QAAQ;EACN,MAAM;EACN,QAAQ;EACR,OAAO;EACP,SAAS;EACT,YAAY;EACZ,gBAAgB;EAChB,cAAc;EACd,QAAQ;EACR,UAAU;EACV,WAAW;EACX,WAAW;EACX,gBAAgB;EAChB,gBAAgB;CAClB;CAIA,MAAM;EACJ,SAAS;EACT,YAAY;EACZ,UAAU;EACV,SAAS;CACX;CAEA,SAAS;EACP,eACE;EACF,MAAM;EACN,MAAM;CACR;CACA,UAAU;EACR,OAAO;EACP,SAAS;EACT,QAAQ;CACV;CACA,UAAU;EACR,QAAQ;EACR,SAAS;CACX;CACA,aAAa;EACX,QAAQ;EACR,SAAS;CACX;CACA,QAAQ;EACN,SAAS;EACT,OAAO;EACP,OAAO;EACP,WAAW;EACX,QAAQ;EACR,SAAS;EACT,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,MAAM;EACN,MAAM;EACN,OAAO;EACP,WAAW;CACb;CACA,SAAS;EACP,SAAS;EACT,UAAU;EACV,aAAa;EACb,iBAAiB;CACnB;CACA,SAAS;EACP,WAAW;EACX,QAAQ;CACV;CACA,aAAa;EACX,SAAS;EACT,MAAM;EACN,QAAQ;EACR,SAAS;CACX;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;EACN,QAAQ;EACR,WAAW;EACX,eAAe;EACf,WAAW;EACX,aAAa;EACb,SAAS;EACT,YAAY;EACZ,cAAc;EACd,WAAW;EACX,aAAa;EACb,YAAY;EACZ,cAAc;EACd,iBAAiB;EACjB,aAAa;EACb,YAAY;EACZ,aAAa;EACb,UAAU;EACV,aAAa;EACb,WAAW;EACX,gBAAgB;EAChB,YAAY;EACZ,eAAe;EACf,gBAAgB;CAClB;CACA,cAAc;EACZ,MAAM;EACN,YACE;EACF,WAAW;EACX,QAAQ;EACR,kBAAkB;EAClB,aAAa;EACb,iBAAiB;EACjB,UAAU;EACV,QAAQ;EACR,OAAO;EACP,SAAS;EACT,WACE;CACJ;CACA,SAAS;EACP,UAAU;EACV,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,cAAc;EACd,eAAe;EACf,eAAe;CACjB;CACA,YAAY;EACV,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,QAAQ;EACR,gBAAgB;EAChB,UAAU;EACV,YAAY;CACd;CACA,OAAO;EACL,OAAO;EACP,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,YAAY;EACZ,aAAa;EACb,OAAO;EACP,OAAO;EACP,WAAW;EACX,aAAa;EACb,YAAY;CACd;CACA,OAAO;EACL,SAAS;EACT,UAAU;EACV,SAAS;CACX;CACA,OAAO;EACL,UAAU;EACV,qBAAqB;EACrB,SAAS;EACT,oBAAoB;EACpB,OAAO;EACP,WAAW;EACX,aAAa;EACb,SAAS;EACT,cAAc;EACd,gBAAgB;EAChB,UAAU;EACV,2BAA2B;EAC3B,uBACE;EACF,YAAY;EACZ,aAAa;EACb,cAAc;EACd,WAAW;EACX,YAAY;EACZ,gBACE;CACJ;CACA,OAAO;EACL,UAAU;EACV,qBAAqB;EACrB,cAAc;EACd,iBAAiB;EACjB,UAAU;EACV,sBAAsB;EACtB,SAAS;EACT,oBAAoB;EACpB,OAAO;EACP,WAAW;EACX,gBAAgB;EAChB,2BAA2B;EAC3B,uBACE;EACF,UAAU;CACZ;CACA,QAAQ;EACN,YAAY;EACZ,aAAa;EACb,MAAM;EACN,KAAK;EACL,gBAAgB;EAChB,cAAc;EACd,YAAY;EACZ,WAAW;EACX,cAAc;EACd,UAAU;EACV,OAAO;EACP,WAAW;EACX,WAAW;EACX,aAAa;CACf;CACA,SAAS;EACP,OAAO;EACP,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,WAAW;CACb;CACA,QAAQ;EACN,OAAO;EACP,SAAS;EACT,UAAU;EACV,YAAY;EACZ,gBAAgB;EAChB,OAAO;EACP,YAAY;EACZ,eAAe;EACf,cAAc;EACd,aAAa;EACb,aAAa;EACb,MAAM;EACN,WAAW;EACX,YAAY;EACZ,WAAW;EACX,SAAS;EACT,OAAO;EACP,WAAW;GACT,UAAU;GACV,SAAS;GACT,WAAW;GACX,UAAU;GACV,SAAS;GACT,QAAQ;GACR,WAAW;GACX,OAAO;GACP,SAAS;GACT,UAAU;GACV,UAAU;GACV,SAAS;GACT,UAAU;GACV,QAAQ;GACR,QAAQ;GACR,UAAU;GACV,SAAS;EACX;CACF;CACA,MAAM;EACJ,OAAO;EACP,SAAS;EACT,YAAY;EACZ,MAAM;EACN,gBAAgB;EAChB,cAAc;EACd,MAAM;EACN,WAAW;EACX,OAAO;EACP,WAAW;EACX,UAAU;EACV,YAAY;EACZ,WAAW;EACX,gBAAgB;EAChB,SAAS;EACT,WAAW;EACX,UAAU;CACZ;CACA,OAAO;EACL,YAAY;EACZ,MAAM;EACN,SAAS;EACT,cAAc;EACd,uBAAuB;EACvB,YAAY;EACZ,aAAa;EACb,aAAa;EACb,aAAa;EACb,YAAY;EACZ,UAAU;EACV,OAAO;EACP,WAAW;EACX,iBAAiB;EACjB,OAAO;CACT;CACA,QAAQ,EACN,QAAQ,SACV;CACA,WAAW;EACT,YAAY;EACZ,UAAU;EACV,SAAS;EACT,MAAM;EACN,OAAO;EACP,SAAS;EACT,SAAS;EACT,WAAW;EACX,YAAY;EACZ,aAAa;EACb,eAAe;EACf,YAAY;EACZ,YAAY;EACZ,eAAe;EACf,YAAY;EACZ,QAAQ;EACR,QAAQ;EACR,2BAA2B;EAC3B,iBAAiB;EACjB,cAAc;EACd,SAAS;EACT,QAAQ;CACV;CACA,cAAc;EACZ,oBAAoB;EACpB,aACE;EACF,QAAQ;GACN,UAAU;GACV,SAAS;GACT,YAAY;GACZ,iBAAiB;GACjB,kBAAkB;EACpB;EACA,SAAS,EACP,cACE,iFACJ;EACA,YAAY;GACV,aAAa;GACb,cAAc;GACd,UAAU;GACV,iBAAiB;GACjB,YAAY;EACd;CACF;CACA,MAAM;EACJ,SAAS;EACT,SAAS;EACT,OAAO;EACP,kBACE;CACJ;CACA,eAAe;EACb,SAAS;EACT,SAAS;EACT,YAAY;EACZ,OAAO;EACP,SAAS;EACT,eAAe;EACf,cAAc;EACd,gBAAgB;EAChB,kBAAkB;EAClB,iBAAiB;EACjB,iBAAiB;EACjB,aAAa;EACb,kBAAkB;EAClB,iBAAiB;EACjB,sBAAsB;EACtB,uBAAuB;EACvB,sBAAsB;EACtB,gBAAgB;EAChB,iBAAiB;EACjB,aAAa;EACb,qBAAqB;CACvB;CACA,kBAAkB;EAChB,QAAQ;EACR,aAAa;EACb,aAAa;EACb,YAAY;EACZ,iBAAiB;EACjB,WAAW;EACX,WAAW;EACX,eAAe;EACf,YAAY;EACZ,eAAe;EACf,0BACE;EACF,mBACE;EACF,UAAU;EACV,eAAe;EACf,mBACE;EACF,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;CACR;CACA,gBAAgB;EACd,SAAS;EACT,QAAQ;EACR,KAAK;EACL,OAAO;EACP,QAAQ;EACR,MAAM;EACN,aAAa;EACb,aAAa;EACb,cAAc;EACd,cAAc;EACd,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,gBAAgB;CAClB;CACA,aAAa;EACX,WAAW;EACX,UAAU;EACV,QAAQ;EACR,OAAO;EACP,cAAc;CAChB;CACA,UAAU;EACR,aAAa;EACb,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,WAAW;EACX,gBAAgB;EAChB,iBAAiB;EACjB,QAAQ;GACN,OAAO;GACP,mBAAmB;GACnB,iBAAiB;GACjB,WAAW;GACX,OAAO;GACP,YAAY;GACZ,OAAO;GACP,YAAY;GACZ,QAAQ;EACV;CACF;CACA,UAAU;EACR,QAAQ;EACR,aAAa;EACb,QAAQ;GACN,OAAO;GACP,mBAAmB;GACnB,iBAAiB;GACjB,WAAW;GACX,OAAO;GACP,YAAY;GACZ,OAAO;EACT;CACF;CACA,QAAQ;EACN,UAAU;EACV,UAAU;EACV,UAAU;EACV,YAAY;EACZ,kBACE;EACF,cACE;EACF,oBAAoB;CACtB;CACA,aAAa;EACX,OAAO;EACP,aAAa;EACb,MAAM;EACN,iBAAiB;EACjB,MAAM;EACN,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,WACE;EACF,WAAW;EACX,QAAQ;EACR,SAAS;EACT,UAAU;EACV,qBAAqB;EACrB,eAAe;EACf,kBAAkB;EAClB,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,eAAe;EACf,YAAY;EACZ,QAAQ;EACR,iBAAiB;EACjB,mBAAmB;EACnB,kBAAkB;EAClB,aAAa;EACb,gBAAgB;EAChB,OAAO;EACP,aAAa;EACb,WAAW;EACX,UAAU;EACV,aAAa;EACb,aACE;EACF,eAAe;EACf,qBACE;EACF,QAAQ;EACR,UAAU;EACV,eAAe;EACf,iBAAiB;CACnB;CACA,UAAU;EACR,QAAQ;EACR,OAAO;EACP,aAAa;EACb,kBAAkB;EAClB,OAAO;EACP,SAAS;EACT,WAAW;EACX,QAAQ;EACR,MAAM;EACN,QAAQ;EACR,MAAM;EACN,YAAY;EACZ,gBACE;EACF,eAAe;EACf,WAAW;EACX,kBAAkB;EAClB,aAAa;EACb,aAAa;EACb,YAAY;EACZ,QAAQ;EACR,YAAY;EACZ,UAAU;EACV,WAAW;EACX,cAAc;EACd,mBACE;CACJ;CACA,gBAAgB;EACd,SAAS;EACT,eAAe;EACf,OAAO;EACP,MAAM;EACN,cAAc;EACd,cAAc;CAChB;CACA,gBAAgB;EACd,SAAS;EACT,QAAQ;EACR,SAAS;EACT,gBAAgB;GACd,OAAO;GACP,iBACE;GACF,eACE;GACF,gBAAgB;GAChB,eAAe;GACf,QAAQ;EACV;CACF;CACA,mBAAmB;EACjB,WAAW;EACX,QACE;EACF,MAAM;CACR;CACA,iBAAiB;EACf,OAAO;EACP,QAAQ;EACR,WAAW;CACb;CACA,WAAW;EACT,OAAO;EACP,gBAAgB;EAChB,sBAAsB;EACtB,gBAAgB;EAChB,SAAS;EACT,aACE;EACF,mBACE;EACF,qBACE;EACF,MAAM;EACN,SAAS;EACT,QAAQ;EACR,SAAS;EACT,QAAQ;CACV;CACA,YAAY;EACV,mBAAmB;EACnB,SAAS;EACT,aAAa;CACf;CACA,WAAW;EACT,QAAQ;EACR,cAAc;EACd,cAAc;EACd,sBAAsB;CACxB;CACA,QAAQ;EACN,eAAe;EACf,kBAAkB;EAClB,OAAO;CACT;CACA,QAAQ;EACN,YAAY;EACZ,eAAe;EACf,aAAa;EACb,eAAe;EACf,WAAW;EACX,MAAM;EACN,KAAK;EACL,YAAY;EACZ,YAAY;EACZ,cAAc;EACd,mBAAmB;CACrB;CACA,aAAa;EACX,OAAO;EACP,SACE;CACJ;AACF"}