@dev.smartpricing/message-composer-layer 1.0.1

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 (169) hide show
  1. package/README.md +75 -0
  2. package/app/api/ai.ts +28 -0
  3. package/app/api/brands.ts +54 -0
  4. package/app/api/client.ts +56 -0
  5. package/app/api/compilation.ts +34 -0
  6. package/app/api/dynamicValues.ts +11 -0
  7. package/app/api/index.ts +11 -0
  8. package/app/api/languages.ts +6 -0
  9. package/app/api/media.ts +26 -0
  10. package/app/api/messageGroups.ts +49 -0
  11. package/app/api/messages.ts +22 -0
  12. package/app/api/meta.ts +18 -0
  13. package/app/api/tracking.ts +9 -0
  14. package/app/components/Brand/BrandDrawer.vue +281 -0
  15. package/app/components/Brand/BrandPreview.vue +137 -0
  16. package/app/components/Brand/Steps/BrandStepGeneral.vue +37 -0
  17. package/app/components/Brand/Steps/BrandStepSocials.vue +48 -0
  18. package/app/components/Brand/Steps/BrandStepVisual.vue +214 -0
  19. package/app/components/Common/BrandColorSwatches.vue +37 -0
  20. package/app/components/Common/ColorInput.vue +144 -0
  21. package/app/components/Common/EmojiPickerButton.vue +35 -0
  22. package/app/components/Common/FontFamilySelect.vue +39 -0
  23. package/app/components/Common/HtmlPreviewIframe.vue +68 -0
  24. package/app/components/Common/IncompleteTranslationsDialog.vue +97 -0
  25. package/app/components/Common/LanguageList.vue +356 -0
  26. package/app/components/Common/LoadingOverlay.vue +12 -0
  27. package/app/components/Common/MediaUploadOrSelect.vue +299 -0
  28. package/app/components/Common/MessagePreviewSlideover.vue +88 -0
  29. package/app/components/Common/MonacoEditor.vue +110 -0
  30. package/app/components/Common/PhoneInput.vue +804 -0
  31. package/app/components/Common/SectionHeader.vue +26 -0
  32. package/app/components/Common/TranslationActionBar.vue +139 -0
  33. package/app/components/Common/ViewLessMore.vue +40 -0
  34. package/app/components/CreateTemplateButton.vue +59 -0
  35. package/app/components/DynamicDataButton.vue +75 -0
  36. package/app/components/DynamicDataSlideover.vue +149 -0
  37. package/app/components/Editor/AiGenerateSlideover.vue +292 -0
  38. package/app/components/Editor/EditorLinkPopover.vue +154 -0
  39. package/app/components/Editor/RichTextEditor.vue +495 -0
  40. package/app/components/Email/Editor/BlockLibrary.vue +89 -0
  41. package/app/components/Email/Editor/BlockSettings.vue +60 -0
  42. package/app/components/Email/Editor/Blocks/ButtonBlock.vue +117 -0
  43. package/app/components/Email/Editor/Blocks/ButtonSettings.vue +228 -0
  44. package/app/components/Email/Editor/Blocks/DiscountCodeBlock.vue +74 -0
  45. package/app/components/Email/Editor/Blocks/DiscountCodeSettings.vue +162 -0
  46. package/app/components/Email/Editor/Blocks/DividerBlock.vue +31 -0
  47. package/app/components/Email/Editor/Blocks/DividerSettings.vue +108 -0
  48. package/app/components/Email/Editor/Blocks/FooterBlock.vue +61 -0
  49. package/app/components/Email/Editor/Blocks/FooterSettings.vue +123 -0
  50. package/app/components/Email/Editor/Blocks/GridBlock.vue +128 -0
  51. package/app/components/Email/Editor/Blocks/GridSettings.vue +109 -0
  52. package/app/components/Email/Editor/Blocks/HTMLBlock.vue +31 -0
  53. package/app/components/Email/Editor/Blocks/HTMLSettings.vue +85 -0
  54. package/app/components/Email/Editor/Blocks/HeaderBlock.vue +53 -0
  55. package/app/components/Email/Editor/Blocks/HeaderSettings.vue +113 -0
  56. package/app/components/Email/Editor/Blocks/HeadingBlock.vue +61 -0
  57. package/app/components/Email/Editor/Blocks/HeadingSettings.vue +156 -0
  58. package/app/components/Email/Editor/Blocks/ImageBlock.vue +49 -0
  59. package/app/components/Email/Editor/Blocks/ImageSettings.vue +53 -0
  60. package/app/components/Email/Editor/Blocks/IndexBlock.vue +155 -0
  61. package/app/components/Email/Editor/Blocks/ParagraphBlock.vue +61 -0
  62. package/app/components/Email/Editor/Blocks/ParagraphSettings.vue +157 -0
  63. package/app/components/Email/Editor/Blocks/SocialsBlock.vue +63 -0
  64. package/app/components/Email/Editor/Blocks/SocialsSettings.vue +117 -0
  65. package/app/components/Email/Editor/Blocks/SpacerBlock.vue +37 -0
  66. package/app/components/Email/Editor/Blocks/SpacerSettings.vue +95 -0
  67. package/app/components/Email/Editor/Blocks/TopProductsBlock.vue +47 -0
  68. package/app/components/Email/Editor/Blocks/TopProductsSettings.vue +87 -0
  69. package/app/components/Email/Editor/Blocks/UnsubscribeLinkBlock.vue +61 -0
  70. package/app/components/Email/Editor/Blocks/UnsubscribeLinkSettings.vue +123 -0
  71. package/app/components/Email/Editor/Canvas.vue +143 -0
  72. package/app/components/Email/Editor/GeneralStyleSettings.vue +125 -0
  73. package/app/components/Email/Editor/Index.vue +77 -0
  74. package/app/components/Email/Editor/LeftSidebar.vue +95 -0
  75. package/app/components/Email/InlinePreview.vue +124 -0
  76. package/app/components/Email/Preview.vue +126 -0
  77. package/app/components/Email/PreviewPanel.vue +57 -0
  78. package/app/components/Email/SendTestEmailModal.vue +121 -0
  79. package/app/components/Email/TranslationEditor.vue +198 -0
  80. package/app/components/Email/Translator/Button.vue +101 -0
  81. package/app/components/Email/Translator/Discount.vue +60 -0
  82. package/app/components/Email/Translator/Footer.vue +66 -0
  83. package/app/components/Email/Translator/Grid.vue +127 -0
  84. package/app/components/Email/Translator/Header.vue +90 -0
  85. package/app/components/Email/Translator/Heading.vue +66 -0
  86. package/app/components/Email/Translator/Image.vue +91 -0
  87. package/app/components/Email/Translator/Index.vue +138 -0
  88. package/app/components/Email/Translator/Paragraph.vue +66 -0
  89. package/app/components/Email/Translator/RawHtml.vue +64 -0
  90. package/app/components/Email/Translator/UnsubscribeLink.vue +59 -0
  91. package/app/components/TemplateList/BaseTable.vue +354 -0
  92. package/app/components/TemplateList/StatusCell.vue +67 -0
  93. package/app/components/Whatsapp/CategoryChanger.vue +63 -0
  94. package/app/components/Whatsapp/Editor/Body.vue +53 -0
  95. package/app/components/Whatsapp/Editor/Buttons.vue +341 -0
  96. package/app/components/Whatsapp/Editor/Footer.vue +70 -0
  97. package/app/components/Whatsapp/Editor/Header.vue +156 -0
  98. package/app/components/Whatsapp/Editor/Index.vue +89 -0
  99. package/app/components/Whatsapp/Editor/SyncWrapper.vue +166 -0
  100. package/app/components/Whatsapp/Preview.vue +197 -0
  101. package/app/components/Whatsapp/PreviewPanel.vue +24 -0
  102. package/app/components/Whatsapp/TranslationEditor.vue +150 -0
  103. package/app/components/Whatsapp/Translator/Body.vue +61 -0
  104. package/app/components/Whatsapp/Translator/Button.vue +209 -0
  105. package/app/components/Whatsapp/Translator/Footer.vue +56 -0
  106. package/app/components/Whatsapp/Translator/Header.vue +61 -0
  107. package/app/components/Whatsapp/Translator/HeaderMedia.vue +117 -0
  108. package/app/components/Whatsapp/Translator/Index.vue +159 -0
  109. package/app/composables/composerContext.ts +35 -0
  110. package/app/composables/useAutoTranslate.ts +242 -0
  111. package/app/composables/useAutoTranslateEmail.ts +294 -0
  112. package/app/composables/useChangeTracking.ts +212 -0
  113. package/app/composables/useChangeTrackingEmail.ts +227 -0
  114. package/app/composables/useChannels.ts +36 -0
  115. package/app/composables/useEmailBlockContext.ts +43 -0
  116. package/app/composables/useExitConfirmation.ts +39 -0
  117. package/app/composables/useGoBack.ts +15 -0
  118. package/app/composables/useIncompleteTranslations.ts +55 -0
  119. package/app/composables/useIncompleteTranslationsEmail.ts +56 -0
  120. package/app/composables/useMediaLimits.ts +42 -0
  121. package/app/composables/useTemplateFormValidation.ts +109 -0
  122. package/app/composables/useTemplateOperations.ts +147 -0
  123. package/app/composables/useTracking.ts +39 -0
  124. package/app/composables/useTranslationFilters.ts +176 -0
  125. package/app/composables/useTranslationFiltersEmail.ts +244 -0
  126. package/app/composables/useWhatsappTemplateBehaviors.ts +58 -0
  127. package/app/middleware/channel-guard.ts +13 -0
  128. package/app/pages/brands.vue +195 -0
  129. package/app/pages/images.vue +141 -0
  130. package/app/pages/index.vue +198 -0
  131. package/app/pages/preview/[id].vue +47 -0
  132. package/app/pages/template/email/[id].vue +596 -0
  133. package/app/pages/template/email/create.vue +562 -0
  134. package/app/pages/template/whatsapp/[id].vue +561 -0
  135. package/app/pages/template/whatsapp/create.vue +468 -0
  136. package/app/plugins/admin-shortcut.client.ts +7 -0
  137. package/app/plugins/tracking.client.ts +12 -0
  138. package/app/queries/ai.ts +20 -0
  139. package/app/queries/brands.ts +75 -0
  140. package/app/queries/compilation.ts +37 -0
  141. package/app/queries/dynamicValues.ts +13 -0
  142. package/app/queries/index.ts +9 -0
  143. package/app/queries/languages.ts +10 -0
  144. package/app/queries/media.ts +27 -0
  145. package/app/queries/messageGroups.ts +112 -0
  146. package/app/queries/messages.ts +42 -0
  147. package/app/queries/meta.ts +13 -0
  148. package/app/stores/adminStore.ts +50 -0
  149. package/app/stores/appContext.ts +99 -0
  150. package/app/stores/emailEditor.ts +220 -0
  151. package/app/stores/main.ts +3 -0
  152. package/app/stores/metaSubmission.ts +116 -0
  153. package/app/types/app-config.d.ts +14 -0
  154. package/app/types/hooks.d.ts +9 -0
  155. package/app/types/tracking.ts +148 -0
  156. package/app/utils/locale.ts +17 -0
  157. package/app/utils/notifyParent.ts +7 -0
  158. package/app/utils/resolveDefaultLanguage.ts +14 -0
  159. package/app/utils/socialDefaults.ts +42 -0
  160. package/app/utils/testIds.const.ts +728 -0
  161. package/app.config.ts +5 -0
  162. package/i18n/check-translations.ts +56 -0
  163. package/i18n/locales/de.ts +834 -0
  164. package/i18n/locales/en.ts +826 -0
  165. package/i18n/locales/es.ts +833 -0
  166. package/i18n/locales/fr.ts +837 -0
  167. package/i18n/locales/it.ts +831 -0
  168. package/nuxt.config.ts +65 -0
  169. package/package.json +64 -0
@@ -0,0 +1,833 @@
1
+ export default {
2
+ language: {
3
+ en: 'Inglés',
4
+ de: 'Alemán',
5
+ fr: 'Francés',
6
+ it: 'Italiano',
7
+ es: 'Español',
8
+ },
9
+ message: {
10
+ render_type: {
11
+ whatsapp_v1: 'WhatsApp',
12
+ email_v1: 'Correo electrónico',
13
+ },
14
+ },
15
+ status: {
16
+ pending: 'Pendiente',
17
+ draft: 'Borrador',
18
+ rejected: 'Rechazado',
19
+ approved: 'Aprobado',
20
+ },
21
+ categories: {
22
+ marketing: 'Marketing',
23
+ utility: 'Utilidad',
24
+ },
25
+ common: {
26
+ search: 'Buscar...',
27
+ all: 'Todos',
28
+ view_less: 'Ver menos',
29
+ view_more: 'Ver más',
30
+ copy: 'Copiar',
31
+ success: 'Éxito',
32
+ error: 'Error',
33
+ errore: 'Error',
34
+ mobile: 'Móvil',
35
+ desktop: 'Escritorio',
36
+ actions: {
37
+ edit: 'Editar',
38
+ delete: 'Eliminar',
39
+ duplicate: 'Duplicar',
40
+ cancel: 'Cancelar',
41
+ publish: 'Publicar',
42
+ unpublish: 'Despublicar',
43
+ save: 'Guardar',
44
+ remove: 'Eliminar',
45
+ reset_defaults: 'Restablecer valores predeterminados',
46
+ },
47
+ internal: 'Interno',
48
+ imageUpload: {
49
+ upload: 'Subir',
50
+ uploading: 'Subiendo...',
51
+ selectFromLibrary: 'Seleccionar de la biblioteca',
52
+ selectImage: 'Seleccionar una imagen',
53
+ searchPlaceholder: 'Buscar por nombre...',
54
+ noImages: 'No hay imágenes disponibles',
55
+ noResults: 'Ninguna imagen coincide con tu búsqueda',
56
+ videoMp4Only: 'Solo se admiten archivos de vídeo MP4 y 3GPP.',
57
+ imageJpgPngOnly: 'Solo se admiten archivos de imagen JPG y PNG.',
58
+ mediaFileTooLarge: 'El archivo es demasiado grande. Tamaño máximo: {maxSize}MB.',
59
+ mediaInvalidType: 'Tipo de archivo no compatible.',
60
+ mediaLimitations: {
61
+ image: 'Solo JPG, PNG. Máx {maxSize}MB.',
62
+ video: 'Solo MP4, 3GPP. Máx {maxSize}MB.',
63
+ document: 'Solo PDF. Máx {maxSize}MB.',
64
+ },
65
+ },
66
+ copy_of: 'Copia de {name}',
67
+ preview: 'Vista previa',
68
+ translation_failed: 'La traducción ha fallado',
69
+ },
70
+ documentation: {
71
+ whatsapp_category: {
72
+ category: 'Mensaje',
73
+ title: 'Elige la categoría correcta',
74
+ description:
75
+ 'Para garantizar conversaciones eficaces y eficientes, WhatsApp ha <b>definido directrices específicas</b> para los mensajes que las empresas pueden enviar a sus clientes.',
76
+ info: 'Cualquier mensaje que combine contenido de marketing y de utilidad se clasificará como mensaje de marketing.',
77
+ content: {
78
+ marketing: `
79
+ # Marketing
80
+
81
+ Los mensajes de marketing ofrecen la máxima flexibilidad: no están vinculados a una transacción específica, pero pueden **promocionar la empresa**, sus **productos** o **servicios**.
82
+
83
+ &nbsp;
84
+
85
+ Pueden incluir, por ejemplo:
86
+ - ofertas promocionales o mensajes comerciales;
87
+ - mensajes de bienvenida o de seguimiento;
88
+ - invitaciones, actualizaciones o sugerencias personalizadas;
89
+ - solicitudes de interacción o para iniciar una nueva transacción
90
+ `,
91
+ utility: `
92
+ # Utilidad
93
+
94
+ Los mensajes de utilidad están diseñados para apoyar interacciones operativas entre una empresa y sus clientes, relacionadas con transacciones o servicios existentes.
95
+
96
+ &nbsp;
97
+
98
+ Pueden incluir, por ejemplo:
99
+ - confirmaciones, suspensiones o cambios en una reserva o suscripción existente;
100
+ - notificaciones relacionadas con cuentas, facturación o pagos.
101
+
102
+ &nbsp;
103
+
104
+ Estos mensajes deben ser funcionales, no promocionales.
105
+ `,
106
+ },
107
+ },
108
+ },
109
+ dialogs: {
110
+ unsaved_changes: {
111
+ title: 'Tienes cambios sin guardar',
112
+ category: 'Mensaje',
113
+ message:
114
+ '¿Seguro que quieres salir de esta página? Perderás todos los cambios realizados hasta ahora.',
115
+ cancel: 'Cancelar',
116
+ leave: 'Sí, salir de esta página',
117
+ },
118
+ delete_message_group: {
119
+ title: 'Eliminar',
120
+ message: 'Esta acción no se puede deshacer. ¿Seguro que quieres eliminar {name}?',
121
+ success: '{name} se ha eliminado correctamente.',
122
+ },
123
+ publish_message_group: {
124
+ title: 'Publicar mensaje',
125
+ message: '¿Publicar "{name}" para que sea visible para los clientes?',
126
+ success: '"{name}" se ha publicado.',
127
+ },
128
+ unpublish_message_group: {
129
+ title: 'Despublicar mensaje',
130
+ message: '¿Despublicar "{name}"? Ya no será visible para los clientes.',
131
+ success: '"{name}" se ha despublicado.',
132
+ },
133
+ delete_message: {
134
+ title: 'Eliminar',
135
+ message: 'Esta acción no se puede deshacer. ¿Seguro que quieres eliminar {name}?',
136
+ success: '{name} se ha eliminado correctamente.',
137
+ },
138
+ incomplete_translations: {
139
+ title: 'Faltan traducciones',
140
+ description:
141
+ 'Estás a punto de guardar un mensaje que contiene traducciones faltantes. Para usarlo correctamente, recomendamos completar las traducciones faltantes.',
142
+ note: 'Si ya no necesitas ciertos idiomas, puedes eliminarlos de la lista del panel izquierdo usando el botón correspondiente.',
143
+ go_to_translations: 'Ir a traducciones',
144
+ save_without_translating: 'Guardar sin traducir',
145
+ translate_and_save: 'Traducir automáticamente y guardar',
146
+ },
147
+ whatsapp_change_category: {
148
+ title: 'Cambiar categoría',
149
+ category: 'Mensaje',
150
+ message: 'Estás a punto de cambiar la categoría de {0} a <b>{1}</b>.',
151
+ fields_may_change:
152
+ 'Al cambiar la categoría, <b>algunos campos pueden cambiar</b>. El cambio de categoría se aplicará a todos los idiomas.',
153
+ cancel: 'Cancelar',
154
+ change_to: 'Cambiar a {0}',
155
+ },
156
+ grid_reduce_columns: {
157
+ title: 'Editar número de columnas',
158
+ message: 'Algunos elementos pueden perderse y no se podrán recuperar.',
159
+ confirm: 'Confirmar',
160
+ },
161
+ },
162
+ modals: {
163
+ dynamic_data_modal: {
164
+ category: 'Contenido del cuerpo',
165
+ title: 'Añadir campo dinámico',
166
+ description:
167
+ 'No hay límite de cuántos puedes usar. Si terminas una frase con un valor dinámico, asegúrate de añadir un punto (" . ") al final.',
168
+ select_value: 'Seleccionar un valor',
169
+ will_display: 'El campo de texto mostrará &#123;&#123;{value}&#125;&#125;',
170
+ search_placeholder: 'Buscar campos...',
171
+ info: 'Los campos dinámicos son marcadores que se reemplazarán con datos reales (ej. nombre del huésped) al enviar el mensaje. Si un campo no tiene datos, se omitirá.',
172
+ no_values: 'No hay valores dinámicos disponibles para este producto.',
173
+ tabs: {
174
+ newsletter: 'Newsletter',
175
+ 'guest-automation': 'Automatización de huéspedes',
176
+ 'reservation-automation': 'Automatización de reservas',
177
+ default: 'Predeterminado',
178
+ },
179
+ },
180
+ },
181
+ pages: {
182
+ message_library: {
183
+ add_message_group: 'Nuevo mensaje',
184
+ title: 'Libreria de mensajes',
185
+ search_placeholder: 'Buscar',
186
+ category_placeholder: 'Seleccionar categoría',
187
+ status_placeholder: 'Seleccionar estado',
188
+ tags_placeholder: 'Filtrar por etiquetas',
189
+ render_type_placeholder: 'Seleccionar tipo de renderizado',
190
+ headers: {
191
+ name: 'Nombre',
192
+ category: 'Categoría',
193
+ preview: 'Vista previa',
194
+ status: 'Estado',
195
+ tags: 'Etiquetas',
196
+ updated_at: 'Actualizado el',
197
+ },
198
+ },
199
+ whatsapp: {
200
+ tabs: {
201
+ content: 'Mensaje',
202
+ translations: 'Traducciones',
203
+ },
204
+ create_message_group: {
205
+ title: 'Crear mensaje',
206
+ save_draft: 'Guardar borrador',
207
+ save_as_new: 'Guardar como nuevo',
208
+ request_approval: 'Solicitar aprobación',
209
+ name: 'Nombre',
210
+ name_placeholder: 'Nombre del mensaje',
211
+ category: 'Categoría',
212
+ category_placeholder: 'Seleccionar categoría',
213
+ message_content: 'Contenido del mensaje',
214
+ add_language: 'Añadir idioma',
215
+ },
216
+ edit_message_group: {
217
+ title: 'Editar mensaje whatsapp',
218
+ save_draft: 'Guardar borrador',
219
+ save_as_new: 'Guardar como nuevo',
220
+ request_approval: 'Solicitar aprobación',
221
+ name: 'Nombre',
222
+ name_placeholder: 'Nombre del mensaje',
223
+ category: 'Categoría',
224
+ category_placeholder: 'Seleccionar categoría',
225
+ message_content: 'Contenido del mensaje',
226
+ add_language: 'Añadir idioma',
227
+ },
228
+ },
229
+ email: {
230
+ send_test: 'Enviar prueba',
231
+ send_test_success: 'Correo de prueba enviado correctamente.',
232
+ test_email_to_placeholder: 'Correo(s) del destinatario, separados por ;',
233
+ create_message_group: {
234
+ title: 'Crear mensaje',
235
+ save: 'Guardar',
236
+ save_as_draft: 'Guardar como borrador',
237
+ save_message: 'Guardar',
238
+ name: 'Nombre',
239
+ name_placeholder: 'Nombre del mensaje',
240
+ subject: 'Asunto',
241
+ subject_placeholder: 'Línea de asunto del correo',
242
+ tab_content: 'Mensaje',
243
+ tab_translations: 'Traducciones',
244
+ },
245
+ edit_message_group: {
246
+ title: 'Editar mensaje de correo',
247
+ save: 'Guardar',
248
+ save_as_draft: 'Guardar como borrador',
249
+ save_message: 'Guardar',
250
+ save_as_new: 'Guardar como nuevo',
251
+ name: 'Nombre',
252
+ name_placeholder: 'Nombre del mensaje',
253
+ subject: 'Asunto',
254
+ subject_placeholder: 'Línea de asunto del correo',
255
+ tab_content: 'Mensaje',
256
+ tab_translations: 'Traducciones',
257
+ },
258
+ },
259
+ brands: {
260
+ title: 'Marcas',
261
+ new_brand: 'Nueva marca',
262
+ edit_brand: 'Editar marca',
263
+ no_brands: 'No hay marcas',
264
+ search_placeholder: 'Buscar marcas...',
265
+ column_name: 'Nombre',
266
+ column_created: 'Creado',
267
+ column_actions: 'Acciones',
268
+ delete_confirm_title: 'Eliminar marca',
269
+ delete_confirm_message:
270
+ '¿Seguro que quieres eliminar esta marca? Esta acción no se puede deshacer.',
271
+ brand_deleted: 'Marca eliminada',
272
+ brand_created: 'Marca creada',
273
+ brand_updated: 'Marca actualizada',
274
+ save_error: 'Error al guardar la marca',
275
+ steps: {
276
+ general: 'General',
277
+ visual_style: 'Estilo visual',
278
+ socials: 'Redes sociales',
279
+ },
280
+ fields: {
281
+ name: 'Nombre',
282
+ name_placeholder: 'Introduce el nombre de la marca',
283
+ properties: 'Propiedades',
284
+ properties_placeholder: 'Seleccionar propiedades',
285
+ logo: 'Logo',
286
+ upload_logo: 'Subir logo',
287
+ change_logo: 'Cambiar logo',
288
+ colors: 'Colores',
289
+ add_color: 'Añadir color',
290
+ extracting_colors: 'Extrayendo colores del logo...',
291
+ default_email_colors: 'Colores de correo predeterminados',
292
+ email_bg_color: 'Color de fondo del correo',
293
+ email_content_bg_color: 'Color de fondo del contenido del correo',
294
+ email_text_color: 'Color del texto del correo',
295
+ default_button_colors: 'Colores de botón predeterminados',
296
+ button_text_color: 'Color del texto del botón',
297
+ button_bg_color: 'Color de fondo del botón',
298
+ default_font: 'Fuente predeterminada',
299
+ },
300
+ actions: {
301
+ back: 'Atrás',
302
+ next: 'Siguiente',
303
+ create: 'Crear',
304
+ },
305
+ validation: {
306
+ name_required: 'El nombre es obligatorio',
307
+ invalid_social_url: 'Una o más URLs sociales no son válidas',
308
+ },
309
+ preview: {
310
+ title: 'Vista previa',
311
+ empty: 'No hay vista previa disponible',
312
+ },
313
+ },
314
+ images: {
315
+ title: 'Imágenes',
316
+ no_images_uploaded: 'No hay imágenes subidas',
317
+ meta_access_token_not_configured: 'Token de acceso de Meta no configurado',
318
+ image_uploaded_to_meta: 'Imagen subida a Meta',
319
+ image_deleted: 'Imagen eliminada',
320
+ delete_confirm: '¿Eliminar {name}?',
321
+ meta: 'Meta',
322
+ no_meta: 'Sin Meta',
323
+ type_label: 'Tipo:',
324
+ created_label: 'Creado:',
325
+ handle_label: 'Handle:',
326
+ upload_to_meta: 'Subir a Meta',
327
+ },
328
+ },
329
+ editor: {
330
+ actions: {
331
+ improve_text: 'Mejorar mensaje',
332
+ refining: 'Estamos mejorando tu texto...',
333
+ generate_text: 'Generar',
334
+ },
335
+ generate: {
336
+ title: 'Generar contenido',
337
+ description:
338
+ 'Proporcione una descripción clara y concisa para obtener los mejores resultados.',
339
+ placeholder: 'Empiece a escribir aquí...',
340
+ disclaimer: 'La inteligencia artificial puede producir contenido inexacto.',
341
+ cancel: 'Cancelar',
342
+ submit: 'Generar contenido',
343
+ your_request: 'Tu solicitud',
344
+ choose_option: 'Elija una opción',
345
+ use_it: 'Usar',
346
+ create_new: 'Crear nuevo contenido',
347
+ loading: 'Generando sugerencias...',
348
+ error: 'Error al generar contenido. Por favor, inténtelo de nuevo.',
349
+ retry: 'Reintentar',
350
+ char_count: '{count}/{max}',
351
+ },
352
+ toolbar: {
353
+ bold: 'Negrita',
354
+ italic: 'Cursiva',
355
+ underline: 'Subrayado',
356
+ bullet_list: 'Lista con viñetas',
357
+ ordered_list: 'Lista numerada',
358
+ text_align: 'Alineación de texto',
359
+ align_left: 'Alinear a la izquierda',
360
+ align_center: 'Centrar',
361
+ align_right: 'Alinear a la derecha',
362
+ align_justify: 'Justificar',
363
+ link: 'Enlace',
364
+ link_placeholder: 'Pega un enlace...',
365
+ link_apply: 'Aplicar enlace',
366
+ link_open: 'Abrir en una nueva ventana',
367
+ link_remove: 'Eliminar enlace',
368
+ horizontal_rule: 'Línea horizontal',
369
+ emoji: 'Emoji',
370
+ dynamic_data: 'Datos dinámicos',
371
+ },
372
+ placeholder: {
373
+ insert_text: 'Insertar texto',
374
+ },
375
+ validation: {
376
+ character_limit: 'Este campo tiene un límite de caracteres.',
377
+ invalid_phone_number: 'Número de teléfono inválido',
378
+ error: {
379
+ title: 'Por favor, corrija los siguientes errores',
380
+ invalidRenderType: 'Tipo de mensaje inválido',
381
+ bodyRequired: 'Se requiere el cuerpo del mensaje',
382
+ bodyEmpty: 'El cuerpo del mensaje no puede estar vacío',
383
+ maxButtons: 'Máximo 10 botones permitidos',
384
+ maxLinkButtons: 'Máximo 1 botón de enlace permitido',
385
+ maxPhoneButtons: 'Máximo 1 botón de teléfono permitido',
386
+ maxUnsubscribeButtons: 'Máximo 1 botón de cancelación de suscripción permitido',
387
+ maxQuickReplyButtons: 'Máximo 3 botones de respuesta rápida permitidos',
388
+ phoneRequired: 'Se requiere un número de teléfono para el botón de teléfono',
389
+ phoneInvalid:
390
+ 'Formato de número de teléfono inválido. Usa el formato internacional (p. ej., +1234567890)',
391
+ urlRequired: 'Se requiere una URL para el botón de enlace',
392
+ urlInvalid: 'Formato de URL inválido. Usa https:// o http:// al principio.',
393
+ emailInvalid:
394
+ "Formato de correo inválido. Usa el formato de correo (p. ej., example{'@'}example.com)",
395
+ emailRequired: 'Introduce una dirección de correo válida',
396
+ nameRequired: 'Se requiere el nombre',
397
+ messageRequired: 'Se requiere el mensaje en inglés',
398
+ headerTooLong: 'El texto del encabezado supera los 60 caracteres',
399
+ headerMediaRequired: 'El archivo multimedia del encabezado es obligatorio',
400
+ bodyTooLong: 'El texto supera los 1024 caracteres',
401
+ footerTooLong: 'El texto del pie de página supera los 60 caracteres',
402
+ buttonTextTooLong: 'El texto del botón supera los 20 caracteres',
403
+ textTooLong: 'El texto supera la longitud máxima',
404
+ // Email validation errors
405
+ subjectRequired: 'Se requiere el asunto del correo',
406
+ atLeastOneBlockRequired: 'Se requiere al menos un bloque de contenido',
407
+ spacerHeightInvalid: 'La altura del espaciador debe estar entre 8 y 200 píxeles',
408
+ dividerThicknessInvalid: 'El grosor del separador debe estar entre 1 y 20 píxeles',
409
+ dividerWidthInvalid: 'El ancho del separador debe estar entre 10% y 100%',
410
+ headingFontSizeInvalid: 'El tamaño de fuente del título debe estar entre 16 y 48 píxeles',
411
+ paragraphFontSizeInvalid:
412
+ 'El tamaño de fuente del párrafo debe estar entre 10 y 32 píxeles',
413
+ imageWidthInvalid: 'El ancho de la imagen debe estar entre 50 y 600 píxeles',
414
+ buttonFontSizeInvalid: 'El tamaño de fuente del botón debe estar entre 12 y 32 píxeles',
415
+ discountFontSizeInvalid:
416
+ 'El tamaño de fuente del descuento debe estar entre 12 y 48 píxeles',
417
+ unsubscribeBlockMissing: 'Se requiere un bloque de enlace de cancelación de suscripción',
418
+ unsubscribeLinkRequired:
419
+ 'El bloque de cancelación de suscripción debe contener el valor dinámico de cancelación de suscripción',
420
+ imageSourceRequired: 'El bloque de imagen requiere una imagen',
421
+ headerLogoRequired: 'El bloque de encabezado requiere un logo',
422
+ socialsNoEnabled: 'Debe habilitarse al menos un enlace social',
423
+ socialsUrlRequired:
424
+ 'Los enlaces sociales habilitados deben tener una URL o un valor predeterminado de la marca',
425
+ topProductsStoreIdRequired: 'El bloque de productos top requiere un store ID',
426
+ buttonTextRequired: 'El texto del botón es obligatorio',
427
+ gridColumnEmpty: 'La columna de la cuadrícula no puede estar vacía',
428
+ htmlMaxLength: 'El bloque HTML supera el límite máximo de caracteres',
429
+ },
430
+ },
431
+ whatsapp: {
432
+ header: {
433
+ title: 'Encabezado',
434
+
435
+ type_placeholder: 'Seleccionar tipo',
436
+ types: {
437
+ none: 'Ninguno',
438
+ text: 'Texto',
439
+ video: 'Vídeo',
440
+ document: 'Documento',
441
+ image: 'Imagen',
442
+ },
443
+ },
444
+ body: {
445
+ title: 'Cuerpo',
446
+ description_main:
447
+ 'Es la <b>parte principal del mensaje</b>, el contenido que quieres comunicar al cliente. Puedes incluir en el texto:',
448
+ description_link:
449
+ '<b>Enlaces</b> pegando la URL completa directamente. Para hacerlos clicables, asegúrate de incluir https:// o http:// al principio. Evita enlaces acortados (p. ej., bit.ly, tinyurl) ya que pueden parecer spam y provocar que el mensaje sea rechazado.',
450
+ description_dynamic_values:
451
+ '<b>Valores dinámicos</b>, sin límite de cuántos uses. Si terminas una frase con un valor dinámico, asegúrate de añadir un punto al final.',
452
+ },
453
+ footer: {
454
+ title: 'Pie de página (opcional)',
455
+ description_main:
456
+ 'Está pensado para proporcionar <b>contexto y soporte</b> sin interferir con el mensaje principal.',
457
+ placeholder: 'Pie de página',
458
+ },
459
+ buttons: {
460
+ title: 'Botones (opcional)',
461
+ description_main:
462
+ 'Algunas pautas <b>para que tu mensaje sea aprobado</b> y funcione correctamente:',
463
+ description_unsubscribe:
464
+ 'El botón <b>Cancelar suscripción</b> permite a los usuarios darse de baja de futuros mensajes de tu empresa. Se recomienda encarecidamente para mensajes de marketing.',
465
+ description_phone:
466
+ 'El botón <b>Teléfono</b> permite a los usuarios iniciar una llamada desde su dispositivo con un solo toque. Solo se permite un botón por mensaje',
467
+ description_link:
468
+ 'El botón <b>Enlace</b> permite a los usuarios abrir un enlace externo directamente desde la interfaz del chat. Puedes incluir hasta dos botones de enlace por mensaje',
469
+ description_quick_reply:
470
+ 'El botón <b>Respuesta rápida</b> permite a los usuarios elegir entre una o más opciones predefinidas sin tener que escribir texto, haciendo la conversación más fluida y guiada.',
471
+ add_button: 'Añadir',
472
+ button_types: {
473
+ phone: 'Teléfono',
474
+ unsubscribe: 'Cancelar suscripción',
475
+ link: 'Enlace',
476
+ quick_reply: 'Respuesta rápida',
477
+ },
478
+ placeholders: {
479
+ text: 'Texto del botón',
480
+ phone: 'Número de teléfono',
481
+ url: 'URL',
482
+ },
483
+ default_text: {
484
+ phone: 'Llamar',
485
+ link: '',
486
+ unsubscribe: 'Cancelar suscripción',
487
+ },
488
+ },
489
+ translations: {
490
+ placeholder: 'Añadir traducción',
491
+ },
492
+ translator: {
493
+ header: 'Encabezado',
494
+ body: 'Cuerpo',
495
+ footer: 'Pie de página',
496
+ button: 'Botón',
497
+ reset_to_main: 'Restablecer al idioma principal',
498
+ },
499
+ preview: {
500
+ header_image_alt: 'Imagen del encabezado',
501
+ document_link: 'Documento',
502
+ },
503
+ },
504
+ languages: {
505
+ title: 'Idioma',
506
+ add: 'Añadir',
507
+ recommended: 'Idiomas recomendados',
508
+ all_languages: 'Todos los idiomas',
509
+ },
510
+ email: {
511
+ common: {
512
+ reset: 'Restablecer',
513
+ },
514
+ canvas: {
515
+ title: 'Lienzo de correo',
516
+ empty: 'Aún no hay bloques',
517
+ emptyHint: 'Arrastra bloques desde la biblioteca para empezar a crear tu correo',
518
+ blockNotImplemented: 'El tipo de bloque "{type}" aún no está implementado',
519
+ dropHere: 'Suelta los bloques aquí para añadirlos a tu correo',
520
+ },
521
+ sidebar: {
522
+ elementsTab: 'Elementos',
523
+ generalStyleTab: 'Estilo general',
524
+ library: 'Biblioteca de bloques',
525
+ settings: 'Ajustes del bloque',
526
+ backToLibrary: 'Volver a la biblioteca',
527
+ settingsPlaceholder: 'Selecciona un bloque para editar sus ajustes',
528
+ settingsNotAvailable: 'Ajustes no disponibles para el tipo de bloque: {type}',
529
+ },
530
+ generalStyle: {
531
+ instruction: 'Personaliza los elementos de la página',
532
+ brandSection: 'Marca',
533
+ selectBrand: 'Seleccionar marca',
534
+ fromColorList: 'Desde la lista de colores',
535
+ typographySection: 'Tipografía',
536
+ font: 'Fuente',
537
+ colorsSection: 'Colores',
538
+ textColor: 'Texto',
539
+ backgroundColor: 'Fondo',
540
+ bodyColor: 'Cuerpo',
541
+ spacingSection: 'Espaciado',
542
+ verticalSpacing: 'Vertical',
543
+ horizontalSpacing: 'Horizontal',
544
+ reset: 'Restablecer todo a valores predeterminados',
545
+ },
546
+ blockLibrary: {
547
+ description: 'Arrastra y combina elementos para crear contenido y personalizar tu correo.',
548
+ },
549
+ blocks: {
550
+ text_types: {
551
+ p: 'Párrafo',
552
+ h1: 'Encabezado 1',
553
+ h2: 'Encabezado 2',
554
+ h3: 'Encabezado 3',
555
+ h4: 'Encabezado 4',
556
+ h5: 'Encabezado 5',
557
+ h6: 'Encabezado 6',
558
+ },
559
+ spacer: {
560
+ name: 'Espaciador',
561
+ description: 'Añade espacio vertical entre bloques',
562
+ label: 'Espaciador de {height}px',
563
+ settings: {
564
+ size: 'Tamaño',
565
+ customSize: 'Tamaño personalizado',
566
+ height: 'Altura',
567
+ heightHint: 'Altura entre {min}px y {max}px',
568
+ backgroundColor: 'Color',
569
+ sizePresets: {
570
+ small: 'Pequeño',
571
+ medium: 'Mediano',
572
+ large: 'Grande',
573
+ extra_large: 'Muy grande',
574
+ },
575
+ },
576
+ },
577
+ divider: {
578
+ name: 'Separador',
579
+ description: 'Añade una línea horizontal para separar contenido',
580
+ settings: {
581
+ style: 'Estilo',
582
+ thickness: 'Grosor',
583
+ thicknessHint: 'Grosor entre {min}px y {max}px',
584
+ width: 'Ancho',
585
+ widthHint: 'Ancho como porcentaje (10-100%)',
586
+ color: 'Color',
587
+ backgroundColor: 'Color de fondo',
588
+ },
589
+ },
590
+ paragraph: {
591
+ name: 'Párrafo',
592
+ description: 'Añade texto enriquecido con formato',
593
+ settings: {
594
+ type: 'Tipo',
595
+ fontFamily: 'Familia de fuentes',
596
+ fontSize: 'Tamaño de fuente',
597
+ fontSizeHint: 'Tamaño de fuente entre {min}px y {max}px',
598
+ textColor: 'Color del texto',
599
+ backgroundColor: 'Color de fondo',
600
+ },
601
+ },
602
+ heading: {
603
+ name: 'Encabezado',
604
+ description: 'Títulos y encabezados de sección',
605
+ settings: {
606
+ content: 'Contenido',
607
+ textStyle: 'Estilo del texto',
608
+ type: 'Tipo',
609
+ font: 'Fuente',
610
+ size: 'Tamaño',
611
+ alignment: 'Alineación',
612
+ color: 'Color',
613
+ text: 'Texto',
614
+ backgroundBlock: 'Bloque de fondo',
615
+ },
616
+ types: {
617
+ heading_1: 'Encabezado 1',
618
+ heading_2: 'Encabezado 2',
619
+ heading_3: 'Encabezado 3',
620
+ heading_4: 'Encabezado 4',
621
+ heading_5: 'Encabezado 5',
622
+ heading_6: 'Encabezado 6',
623
+ },
624
+ },
625
+ raw_html: {
626
+ name: 'HTML',
627
+ description: 'Código HTML personalizado',
628
+ placeholder: 'Insertar código HTML',
629
+ settings: {
630
+ html: 'Contenido HTML',
631
+ characterCount: '{count} / {max} caracteres',
632
+ },
633
+ warning: {
634
+ title: 'Nota:',
635
+ message:
636
+ 'La mayoría de los clientes de correo solo admiten HTML básico. Elementos interactivos como JavaScript o Flash no se guardarán.',
637
+ learnMore: 'Más información sobre HTML en los bloques de contenido',
638
+ },
639
+ },
640
+ image: {
641
+ name: 'Imagen',
642
+ description: 'Añade fotos y gráficos',
643
+ no_image: 'No hay imagen seleccionada',
644
+ upload: 'Subir',
645
+ select_from_library: 'Seleccionar de la biblioteca',
646
+ select_image: 'Seleccionar una imagen',
647
+ no_images: 'No hay imágenes disponibles',
648
+ alt_placeholder: 'Describe la imagen...',
649
+ alt_help: 'El texto alternativo mejora la accesibilidad',
650
+ href_help: 'Enlace opcional cuando se hace clic en la imagen',
651
+ settings: {
652
+ source: 'Fuente de la imagen',
653
+ alt: 'Texto alternativo',
654
+ size_layout: 'Tamaño y diseño',
655
+ width_mode: 'Modo de ancho',
656
+ width: 'Ancho',
657
+ align: 'Alineación',
658
+ border_radius: 'Radio del borde',
659
+ link: 'Enlace',
660
+ href_placeholder: 'https://example.com',
661
+ padding: 'Relleno',
662
+ padding_top: 'Arriba',
663
+ padding_right: 'Derecha',
664
+ padding_bottom: 'Abajo',
665
+ padding_left: 'Izquierda',
666
+ },
667
+ },
668
+ button: {
669
+ name: 'Botón',
670
+ description: 'Botón de llamada a la acción',
671
+ placeholder: 'Añadir texto del botón',
672
+ settings: {
673
+ content: 'Contenido',
674
+ link_type: 'Tipo de enlace',
675
+ text_type: 'Tipo de texto',
676
+ font: 'Fuente',
677
+ size: 'Tamaño',
678
+ style: 'Estilo',
679
+ colors: 'Colores',
680
+ text: 'Texto',
681
+ background: 'Fondo',
682
+ background_block: 'Bloque de fondo',
683
+ },
684
+ link_types: {
685
+ web: 'Web',
686
+ email: 'Correo',
687
+ phone: 'Teléfono',
688
+ },
689
+ shapes: {
690
+ square: 'Cuadrado',
691
+ rounded: 'Redondeado',
692
+ pill: 'Píldora',
693
+ },
694
+ widths: {
695
+ fit_to_text: 'Ajustar al texto',
696
+ full_width: 'Ancho completo',
697
+ },
698
+ },
699
+ discount: {
700
+ name: 'Código de descuento',
701
+ description: 'Mostrar código promocional',
702
+ placeholder: 'Añade tu código de descuento',
703
+ settings: {
704
+ discount_code: 'Código de descuento',
705
+ text_type: 'Tipo de texto',
706
+ type: 'Tipo',
707
+ font: 'Fuente',
708
+ size: 'Tamaño',
709
+ style: 'Estilo',
710
+ colors: 'Colores',
711
+ text: 'Texto',
712
+ background_component: 'Componente de fondo',
713
+ background_block: 'Bloque de fondo',
714
+ },
715
+ styles: {
716
+ square: 'Cuadrado',
717
+ rounded: 'Redondeado',
718
+ pill: 'Píldora',
719
+ },
720
+ },
721
+ grid: {
722
+ name: 'Cuadrícula',
723
+ description: 'Diseño de varias columnas',
724
+ add_element: 'Añadir elemento',
725
+ settings: {
726
+ columns: 'Columnas',
727
+ color: 'Color',
728
+ background_block: 'Bloque de fondo',
729
+ },
730
+ },
731
+ header: {
732
+ name: 'Encabezado',
733
+ description: 'Añade el logo de tu propiedad',
734
+ no_logo: 'No hay logo seleccionado',
735
+ settings: {
736
+ source: 'Logo',
737
+ alt: 'Texto alternativo',
738
+ alt_placeholder: 'Describe el logo...',
739
+ style: 'Estilo',
740
+ width: 'Ancho del logo',
741
+ alignment: 'Alineación',
742
+ background: 'Color de fondo',
743
+ },
744
+ },
745
+ footer: {
746
+ name: 'Pie de página',
747
+ description: 'Información legal y de contacto',
748
+ },
749
+ unsubscribe_link: {
750
+ name: 'Enlace de cancelación de suscripción',
751
+ description: 'Enlace de baja para destinatarios',
752
+ },
753
+ socials: {
754
+ name: 'Redes sociales',
755
+ description: 'Enlaces a redes sociales',
756
+ placeholder: 'Configura los enlaces sociales en ajustes',
757
+ settings: {
758
+ links: 'Enlaces sociales',
759
+ from_brand: 'Usando {url} de la marca',
760
+ },
761
+ platforms: {
762
+ facebook: 'Facebook',
763
+ instagram: 'Instagram',
764
+ tripadvisor: 'TripAdvisor',
765
+ tiktok: 'TikTok',
766
+ google: 'Google',
767
+ },
768
+ },
769
+ top_products: {
770
+ name: 'Productos Destacados',
771
+ description: 'Mostrar productos de upselling desde la API',
772
+ no_store_id: 'Establece un store ID para mostrar productos',
773
+ settings: {
774
+ store_id: 'Store ID',
775
+ store_id_help:
776
+ 'Tu store ID de Smartconnect, la parte después de commerce.smartness.com/ (ej. abhotel)',
777
+ store_id_placeholder: 'Introduce store ID',
778
+ style: 'Estilo',
779
+ max_products: 'Productos máximos',
780
+ background: 'Color de fondo',
781
+ },
782
+ },
783
+ },
784
+ actions: {
785
+ duplicate: 'Duplicar',
786
+ delete: 'Eliminar',
787
+ },
788
+ },
789
+ },
790
+ translation_action_bar: {
791
+ search_placeholder: 'Buscar texto...',
792
+ show_missing: 'Mostrar traducciones faltantes',
793
+ show_changes: 'Mostrar cambios',
794
+ auto_translate: 'Traducir automáticamente',
795
+ auto_translate_button: 'Traducir automáticamente',
796
+ preview: 'Vista previa',
797
+ preview_button: 'Vista previa',
798
+ translating: 'Traduciendo...',
799
+ translation_success: 'Traducción completada correctamente',
800
+ translation_error: 'No se pudo traducir. Inténtalo de nuevo.',
801
+ no_sections_found: 'Ninguna sección coincide con los filtros actuales',
802
+ clear_filters: 'Limpiar filtros',
803
+ email_preview_coming_soon: 'Vista previa de correo próximamente',
804
+ unsupported_preview_type: 'Tipo de vista previa no compatible',
805
+ render_type: 'Tipo de renderizado',
806
+ no_message_to_preview: 'No hay mensaje para previsualizar',
807
+ },
808
+ language_list: {
809
+ unsaved_changes: 'Esta traducción tiene cambios sin guardar',
810
+ changes_count: '{count} cambios',
811
+ change: 'cambio',
812
+ changes: 'cambios',
813
+ translated_percentage: '{percentage}% traducido',
814
+ },
815
+ meta_submission: {
816
+ success: 'Mensajes enviados a Meta',
817
+ error: 'Envío a Meta completado con errores',
818
+ failed_count: 'Mensajes fallidos: {count}',
819
+ },
820
+ email_preview: {
821
+ no_preview: 'No hay vista previa disponible',
822
+ subject: 'Asunto',
823
+ },
824
+ public: {
825
+ select_message: {
826
+ choose_message: 'Elige un mensaje...',
827
+ search_placeholder: 'Buscar por nombre o categoría...',
828
+ choose_language: 'Elige un idioma...',
829
+ enter_field: 'Introduce {field}',
830
+ send_message: 'Enviar mensaje',
831
+ },
832
+ },
833
+ } as const