@flusys/ng-email 3.0.1 → 4.0.0-rc

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.
@@ -1,10 +1,233 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, Injectable, signal, computed, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { inject, Injectable, signal, computed, Component } from '@angular/core';
3
3
  import { HttpClient } from '@angular/common/http';
4
4
  import { APP_CONFIG, getServiceUrl } from '@flusys/ng-core';
5
- import { ApiResourceService, permissionGuard, EMAIL_TEMPLATE_PERMISSIONS, EMAIL_CONFIG_PERMISSIONS, PermissionValidatorService } from '@flusys/ng-shared';
5
+ import { ApiResourceService, permissionGuard, EMAIL_TEMPLATE_PERMISSIONS, EMAIL_CONFIG_PERMISSIONS, resolveTranslationModule, SHARED_MESSAGES, PermissionValidatorService, TranslatePipe } from '@flusys/ng-shared';
6
6
  import { RouterOutlet, RouterLink, RouterLinkActive } from '@angular/router';
7
7
 
8
+ const EMAIL_MESSAGES = {
9
+ // Container
10
+ 'email.title': 'Email Management',
11
+ 'email.subtitle': 'Manage email configurations and templates',
12
+ // Tabs
13
+ 'email.tabs.configs': 'Configurations',
14
+ 'email.tabs.templates': 'Templates',
15
+ // Email config UI
16
+ 'email.config.title': 'Email Configurations',
17
+ 'email.config.new.title': 'New Email Configuration',
18
+ 'email.config.edit.title': 'Edit Email Configuration',
19
+ 'email.config.name': 'Configuration Name',
20
+ 'email.config.provider': 'Provider',
21
+ 'email.config.from.email': 'From Email',
22
+ 'email.config.from.name': 'From Name',
23
+ 'email.config.set.as.default': 'Set as Default',
24
+ 'email.config.smtp.settings': 'SMTP Settings',
25
+ 'email.config.smtp.host': 'SMTP Host',
26
+ 'email.config.port': 'Port',
27
+ 'email.config.username': 'Username',
28
+ 'email.config.password': 'Password',
29
+ 'email.config.use.ssl.tls': 'Use SSL/TLS',
30
+ 'email.config.sendgrid.settings': 'SendGrid Settings',
31
+ 'email.config.api.key': 'API Key',
32
+ 'email.config.mailgun.settings': 'Mailgun Settings',
33
+ 'email.config.domain': 'Domain',
34
+ 'email.config.region': 'Region',
35
+ 'email.config.new': 'New Configuration',
36
+ 'email.config.empty': 'No email configurations found',
37
+ 'email.config.test.dialog.title': 'Test Email Configuration',
38
+ 'email.config.test.dialog.hint': 'A test email will be sent to verify the configuration',
39
+ 'email.config.configuration': 'Configuration',
40
+ 'email.config.recipient.email': 'Recipient Email',
41
+ 'email.config.send.test': 'Send Test',
42
+ 'email.config.delete.title': 'Delete Configuration',
43
+ 'email.config.delete.confirm': 'Are you sure you want to delete "{{name}}"?',
44
+ 'email.config.load.failed': 'Failed to load email configurations',
45
+ 'email.config.deleted': 'Email configuration deleted successfully',
46
+ 'email.config.delete.failed': 'Failed to delete email configuration',
47
+ 'email.config.created': 'Email configuration created successfully',
48
+ 'email.config.create.failed': 'Failed to create email configuration',
49
+ 'email.config.updated': 'Email configuration updated successfully',
50
+ 'email.config.update.failed': 'Failed to update email configuration',
51
+ 'email.config.enter.recipient': 'Please enter a recipient email address',
52
+ 'email.config.test.sent.success': 'Test email sent successfully (Message ID: {{messageId}})',
53
+ 'email.config.test.sent.failed': 'Failed to send test email',
54
+ // Email template UI
55
+ 'email.template.title': 'Email Templates',
56
+ 'email.template.new.title': 'New Email Template',
57
+ 'email.template.edit.title': 'Edit Email Template',
58
+ 'email.template.name': 'Template Name',
59
+ 'email.template.slug': 'Slug',
60
+ 'email.template.subject': 'Subject',
61
+ 'email.template.content': 'Content',
62
+ 'email.template.plain.text': 'Plain Text',
63
+ 'email.template.new': 'New Template',
64
+ 'email.template.empty': 'No email templates found',
65
+ 'email.template.test.dialog.title': 'Test Email Template',
66
+ 'email.template.send.test': 'Send Test',
67
+ 'email.template.delete.title': 'Delete Template',
68
+ 'email.template.delete.confirm': 'Are you sure you want to delete "{{name}}"?',
69
+ 'email.template.load.failed': 'Failed to load email templates',
70
+ 'email.template.deleted': 'Email template deleted successfully',
71
+ 'email.template.delete.failed': 'Failed to delete email template',
72
+ 'email.template.created': 'Email template created successfully',
73
+ 'email.template.create.failed': 'Failed to create email template',
74
+ 'email.template.updated': 'Email template updated successfully',
75
+ 'email.template.update.failed': 'Failed to update email template',
76
+ 'email.template.template': 'Template',
77
+ 'email.template.email.config': 'Email Configuration',
78
+ 'email.template.select.config': 'Select a configuration',
79
+ 'email.template.select.config.and.recipient': 'Please select an email configuration and enter a recipient',
80
+ 'email.template.test.sent.success': 'Test email sent successfully (Message ID: {{messageId}})',
81
+ 'email.template.test.sent.failed': 'Failed to send test email',
82
+ 'email.template.test.send': 'Send Test Email',
83
+ 'email.template.text': 'Text',
84
+ 'email.template.variable.hint': 'Use {{variableName}} for dynamic content',
85
+ 'email.template.plain.text.hint': 'Plain text is used for email clients that do not support HTML',
86
+ 'email.template.live.preview': 'Live Preview',
87
+ 'email.template.enter.html.preview': 'Enter HTML content to see preview',
88
+ 'email.template.variables': 'Template Variables',
89
+ 'email.template.enter.value.for': 'Enter value for {{variable}}',
90
+ 'email.template.body': 'Body',
91
+ 'email.template.preview': 'Preview',
92
+ 'email.template.create': 'Create Template',
93
+ 'email.template.edit': 'Edit Template',
94
+ 'email.template.test': 'Send Test Email',
95
+ // Form validation
96
+ 'email.template.validation.name.required': 'Template name is required',
97
+ 'email.template.validation.slug.required': 'Slug is required',
98
+ 'email.template.validation.subject.required': 'Subject is required',
99
+ 'email.config.validation.name.required': 'Configuration name is required',
100
+ 'email.config.validation.provider.required': 'Provider is required',
101
+ // Form placeholders
102
+ 'email.config.placeholder.name': 'e.g., Production SMTP',
103
+ 'email.config.placeholder.select.provider': 'Select provider',
104
+ 'email.config.placeholder.from.email': 'noreply@example.com',
105
+ 'email.config.placeholder.from.name': 'Your App Name',
106
+ 'email.config.placeholder.smtp.host': 'smtp.gmail.com',
107
+ 'email.config.placeholder.port': '587',
108
+ 'email.config.placeholder.username': 'user@gmail.com',
109
+ 'email.config.placeholder.password': 'App password',
110
+ 'email.config.placeholder.api.key': 'API Key',
111
+ 'email.config.placeholder.domain': 'mg.example.com',
112
+ 'email.config.placeholder.select.region': 'Select region',
113
+ 'email.config.placeholder.recipient': 'recipient@example.com',
114
+ 'email.template.placeholder.name': 'e.g., Welcome Email',
115
+ 'email.template.placeholder.slug': 'e.g., welcome-email',
116
+ 'email.template.placeholder.description': 'Brief description of the template',
117
+ 'email.template.placeholder.plain.text': 'Enter plain text content for email clients that do not support HTML',
118
+ 'email.template.placeholder.recipient': 'recipient@example.com',
119
+ 'email.template.html': 'HTML',
120
+ // Email template CRUD (API keys)
121
+ 'email.template.create.success': 'Email template created successfully',
122
+ 'email.template.update.success': 'Email template updated successfully',
123
+ 'email.template.delete.success': 'Email template deleted successfully',
124
+ 'email.template.get.success': 'Email template retrieved successfully',
125
+ 'email.template.get.all.success': 'Email templates retrieved successfully',
126
+ 'email.template.create.many.success': '{{count}} email templates created successfully',
127
+ 'email.template.update.many.success': '{{count}} email templates updated successfully',
128
+ 'email.template.restore.success': 'Email template restored successfully',
129
+ 'email.template.not.found': 'Email template not found',
130
+ 'email.template.preview.success': 'Email template preview generated successfully',
131
+ // Email provider
132
+ 'email.provider.title': 'Email Providers',
133
+ 'email.provider.name': 'Provider Name',
134
+ 'email.provider.type': 'Provider Type',
135
+ 'email.provider.host': 'SMTP Host',
136
+ 'email.provider.port': 'Port',
137
+ 'email.provider.username': 'Username',
138
+ 'email.provider.password': 'Password',
139
+ 'email.provider.from.email': 'From Email',
140
+ 'email.provider.from.name': 'From Name',
141
+ 'email.provider.encryption': 'Encryption',
142
+ 'email.provider.test.connection': 'Test Connection',
143
+ 'email.provider.connection.success': 'Connection successful',
144
+ 'email.provider.connection.failed': 'Connection failed',
145
+ 'email.provider.create.success': 'Email provider created successfully',
146
+ 'email.provider.update.success': 'Email provider updated successfully',
147
+ 'email.provider.delete.success': 'Email provider deleted successfully',
148
+ // Sending emails
149
+ 'email.send.title': 'Send Email',
150
+ 'email.send.to': 'To',
151
+ 'email.send.cc': 'CC',
152
+ 'email.send.bcc': 'BCC',
153
+ 'email.send.subject': 'Subject',
154
+ 'email.send.body': 'Message',
155
+ 'email.send.attachments': 'Attachments',
156
+ 'email.send.success': 'Email sent successfully',
157
+ 'email.send.failed': 'Failed to send email',
158
+ 'email.send.sending': 'Sending email...',
159
+ // Email logs
160
+ 'email.log.title': 'Email Logs',
161
+ 'email.log.recipient': 'Recipient',
162
+ 'email.log.status': 'Status',
163
+ 'email.log.sent.at': 'Sent At',
164
+ 'email.log.delivered': 'Delivered',
165
+ 'email.log.failed': 'Failed',
166
+ 'email.log.pending': 'Pending',
167
+ 'email.log.opened': 'Opened',
168
+ 'email.log.clicked': 'Clicked',
169
+ 'email.log.bounced': 'Bounced',
170
+ // Email config CRUD (API keys)
171
+ 'email.config.create.success': 'Email configuration created successfully',
172
+ 'email.config.create.many.success': '{{count}} email configurations created successfully',
173
+ 'email.config.get.success': 'Email configuration retrieved successfully',
174
+ 'email.config.get.all.success': 'Email configurations retrieved successfully',
175
+ 'email.config.update.success': 'Email configuration updated successfully',
176
+ 'email.config.update.many.success': '{{count}} email configurations updated successfully',
177
+ 'email.config.delete.success': 'Email configuration deleted successfully',
178
+ 'email.config.restore.success': 'Email configuration restored successfully',
179
+ 'email.config.not.found': 'Email configuration not found',
180
+ 'email.config.active.success': 'Active email configuration retrieved successfully',
181
+ 'email.config.test.success': 'Email configuration test successful',
182
+ 'email.config.test.failed': 'Email configuration test failed',
183
+ // Email send (API keys)
184
+ 'email.send.queued': 'Email queued for sending',
185
+ 'email.send.template.success': 'Template email sent successfully',
186
+ 'email.send.bulk.success': 'Bulk emails sent successfully',
187
+ 'email.send.test.success': 'Test email sent successfully',
188
+ 'email.send.config.not.found': 'Email configuration not found',
189
+ 'email.send.config.inactive': 'Email configuration is inactive',
190
+ 'email.send.config.default.not.found': 'Default email configuration not found',
191
+ 'email.send.template.not.found': 'Email template not found',
192
+ 'email.send.template.inactive': 'Email template is inactive',
193
+ 'email.send.template.id.or.slug.required': 'Template ID or slug is required',
194
+ // Additional placeholder keys (dot-case)
195
+ 'email.config.name.example': 'e.g., Production SMTP',
196
+ 'email.config.select.provider': 'Select provider',
197
+ 'email.config.from.email.example': 'noreply@example.com',
198
+ 'email.config.from.name.example': 'Your App Name',
199
+ 'email.config.smtp.host.example': 'smtp.gmail.com',
200
+ 'email.config.smtp.port.example': '587',
201
+ 'email.config.smtp.user.example': 'user@gmail.com',
202
+ 'email.config.smtp.password.example': 'App password',
203
+ 'email.config.sendgrid.api.key.example': 'API Key',
204
+ 'email.config.mailgun.api.key.example': 'API Key',
205
+ 'email.config.mailgun.domain.example': 'mg.example.com',
206
+ 'email.config.select.region': 'Select region',
207
+ 'email.recipient.example': 'recipient@example.com',
208
+ 'email.template.name.example': 'e.g., Welcome Email',
209
+ 'email.template.slug.example': 'e.g., welcome-email',
210
+ 'email.template.subject.example': 'Enter email subject',
211
+ 'email.template.desc.placeholder': 'Brief description of the template',
212
+ 'email.template.html.placeholder': 'Enter HTML content',
213
+ 'email.template.text.placeholder': 'Enter plain text content',
214
+ // Provider translation keys (singular - for labels)
215
+ 'email.provider.smtp': 'SMTP',
216
+ 'email.provider.sendgrid': 'SendGrid',
217
+ 'email.provider.mailgun': 'Mailgun',
218
+ // Provider translation keys (plural - for dynamic lookups)
219
+ 'email.providers.smtp': 'SMTP',
220
+ 'email.providers.sendgrid': 'SendGrid',
221
+ 'email.providers.mailgun': 'Mailgun',
222
+ // Region translation keys
223
+ 'email.region.us': 'US',
224
+ 'email.region.eu': 'EU',
225
+ // Template keys
226
+ 'email.template.default.content': 'Enter your email content here...',
227
+ // Common aliases used by email components
228
+ 'common.fill.required.fields': 'Please fill in all required fields',
229
+ };
230
+
8
231
  /**
9
232
  * Supported email provider types
10
233
  */
@@ -43,7 +266,7 @@ function createEmailSchema(partial = {}) {
43
266
  return {
44
267
  id: partial.id ?? crypto.randomUUID(),
45
268
  version: partial.version ?? '1.0.0',
46
- name: partial.name ?? 'Untitled Template',
269
+ nameKey: partial.nameKey ?? 'email.template.untitled',
47
270
  subject: partial.subject ?? '',
48
271
  preheader: partial.preheader,
49
272
  sections: partial.sections ?? createDefaultSections(),
@@ -56,9 +279,9 @@ function createEmailSchema(partial = {}) {
56
279
  */
57
280
  function createDefaultSections() {
58
281
  return [
59
- { id: crypto.randomUUID(), type: 'header', name: 'Header', blocks: [], order: 0 },
60
- { id: crypto.randomUUID(), type: 'body', name: 'Body', blocks: [], order: 1 },
61
- { id: crypto.randomUUID(), type: 'footer', name: 'Footer', blocks: [], order: 2 },
282
+ { id: crypto.randomUUID(), type: 'header', nameKey: 'email.section.header', blocks: [], order: 0 },
283
+ { id: crypto.randomUUID(), type: 'body', nameKey: 'email.section.body', blocks: [], order: 1 },
284
+ { id: crypto.randomUUID(), type: 'footer', nameKey: 'email.section.footer', blocks: [], order: 2 },
62
285
  ];
63
286
  }
64
287
 
@@ -217,7 +440,7 @@ class EmailBuilderStateService {
217
440
  /**
218
441
  * Create a new empty schema
219
442
  */
220
- createNewSchema(name = 'Untitled Template') {
443
+ createNewSchema(name = '') {
221
444
  this._schema.set(createEmailSchema({ name }));
222
445
  this._isDirty.set(true);
223
446
  this._selectedSectionId.set(null);
@@ -403,18 +626,19 @@ class EmailBuilderStateService {
403
626
  // Helper Methods
404
627
  // =========================================
405
628
  /**
406
- * Get default content for a block type
629
+ * Get default content for a block type.
630
+ * Note: Text content is intentionally empty - UI should display translated placeholders.
407
631
  */
408
632
  getDefaultContent(type) {
409
633
  switch (type) {
410
634
  case EmailBlockType.TEXT:
411
- return { text: 'Enter your text here...', html: '<p>Enter your text here...</p>' };
635
+ return { text: '', html: '' };
412
636
  case EmailBlockType.IMAGE:
413
- return { src: '', alt: 'Image' };
637
+ return { src: '', alt: '' };
414
638
  case EmailBlockType.BUTTON:
415
639
  return {
416
- text: 'Click Here',
417
- link: 'https://',
640
+ text: '',
641
+ link: '',
418
642
  backgroundColor: '#007bff',
419
643
  textColor: '#ffffff',
420
644
  borderRadius: '4px',
@@ -422,7 +646,7 @@ class EmailBuilderStateService {
422
646
  case EmailBlockType.DIVIDER:
423
647
  return { height: '1px', color: '#cccccc', style: 'solid' };
424
648
  case EmailBlockType.HTML:
425
- return { html: '<!-- Custom HTML -->' };
649
+ return { html: '' };
426
650
  default:
427
651
  return { text: '' };
428
652
  }
@@ -447,6 +671,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
447
671
  const EMAIL_ROUTES = [
448
672
  {
449
673
  path: '',
674
+ resolve: { translations: resolveTranslationModule({ modules: ['email'], fallbackMessages: { ...EMAIL_MESSAGES, ...SHARED_MESSAGES } }) },
450
675
  loadComponent: () => Promise.resolve().then(function () { return emailContainer_component; }).then((m) => m.EmailContainerComponent),
451
676
  children: [
452
677
  // Template Routes
@@ -456,17 +681,17 @@ const EMAIL_ROUTES = [
456
681
  children: [
457
682
  {
458
683
  path: '',
459
- loadComponent: () => import('./flusys-ng-email-template-list.component-krrpsjDv.mjs').then((m) => m.TemplateListComponent),
684
+ loadComponent: () => import('./flusys-ng-email-template-list.component-DHnuMTpB.mjs').then((m) => m.TemplateListComponent),
460
685
  },
461
686
  {
462
687
  path: 'new',
463
688
  canActivate: [permissionGuard(EMAIL_TEMPLATE_PERMISSIONS.CREATE)],
464
- loadComponent: () => import('./flusys-ng-email-template-form.component-vlfHz6VE.mjs').then((m) => m.TemplateFormComponent),
689
+ loadComponent: () => import('./flusys-ng-email-template-form.component-CgJZiMCa.mjs').then((m) => m.TemplateFormComponent),
465
690
  },
466
691
  {
467
692
  path: ':id',
468
693
  canActivate: [permissionGuard(EMAIL_TEMPLATE_PERMISSIONS.UPDATE)],
469
- loadComponent: () => import('./flusys-ng-email-template-form.component-vlfHz6VE.mjs').then((m) => m.TemplateFormComponent),
694
+ loadComponent: () => import('./flusys-ng-email-template-form.component-CgJZiMCa.mjs').then((m) => m.TemplateFormComponent),
470
695
  },
471
696
  ],
472
697
  },
@@ -477,17 +702,17 @@ const EMAIL_ROUTES = [
477
702
  children: [
478
703
  {
479
704
  path: '',
480
- loadComponent: () => import('./flusys-ng-email-email-config-list.component-Dt9PY9xD.mjs').then((m) => m.EmailConfigListComponent),
705
+ loadComponent: () => import('./flusys-ng-email-email-config-list.component-oznfQvxo.mjs').then((m) => m.EmailConfigListComponent),
481
706
  },
482
707
  {
483
708
  path: 'new',
484
709
  canActivate: [permissionGuard(EMAIL_CONFIG_PERMISSIONS.CREATE)],
485
- loadComponent: () => import('./flusys-ng-email-email-config-form.component-tg4pKP7G.mjs').then((m) => m.EmailConfigFormComponent),
710
+ loadComponent: () => import('./flusys-ng-email-email-config-form.component-Cj2U6Tgf.mjs').then((m) => m.EmailConfigFormComponent),
486
711
  },
487
712
  {
488
713
  path: ':id',
489
714
  canActivate: [permissionGuard(EMAIL_CONFIG_PERMISSIONS.UPDATE)],
490
- loadComponent: () => import('./flusys-ng-email-email-config-form.component-tg4pKP7G.mjs').then((m) => m.EmailConfigFormComponent),
715
+ loadComponent: () => import('./flusys-ng-email-email-config-form.component-Cj2U6Tgf.mjs').then((m) => m.EmailConfigFormComponent),
491
716
  },
492
717
  ],
493
718
  },
@@ -507,14 +732,14 @@ class EmailContainerComponent {
507
732
  allTabs = [
508
733
  {
509
734
  id: 'templates',
510
- label: 'Templates',
735
+ labelKey: 'email.template.title',
511
736
  icon: 'pi pi-file',
512
737
  route: 'templates',
513
738
  permission: EMAIL_TEMPLATE_PERMISSIONS.READ,
514
739
  },
515
740
  {
516
741
  id: 'configs',
517
- label: 'Configurations',
742
+ labelKey: 'email.config.title',
518
743
  icon: 'pi pi-cog',
519
744
  route: 'configs',
520
745
  permission: EMAIL_CONFIG_PERMISSIONS.READ,
@@ -526,8 +751,8 @@ class EmailContainerComponent {
526
751
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: EmailContainerComponent, isStandalone: true, selector: "lib-email-container", ngImport: i0, template: `
527
752
  <div class="p-2 sm:p-4">
528
753
  <div class="mb-4">
529
- <h1 class="text-xl sm:text-2xl font-bold m-0">Email</h1>
530
- <p class="text-sm text-muted-color mt-1">Manage email templates and provider configurations</p>
754
+ <h1 class="text-xl sm:text-2xl font-bold m-0">{{ 'email.title' | translate }}</h1>
755
+ <p class="text-sm text-muted-color mt-1">{{ 'email.subtitle' | translate }}</p>
531
756
  </div>
532
757
 
533
758
  <div class="scrollbar-hide flex gap-1 mb-4 border-b border-surface overflow-x-auto flex-nowrap -mx-2 sm:mx-0 px-2 sm:px-0">
@@ -538,22 +763,22 @@ class EmailContainerComponent {
538
763
  [routerLinkActiveOptions]="{ exact: false }"
539
764
  class="flex items-center gap-2 px-3 sm:px-4 py-2 rounded-t-lg cursor-pointer transition-colors text-muted-color no-underline border-b-2 border-transparent -mb-px hover:bg-surface-hover [&.tab-active]:text-primary [&.tab-active]:border-primary [&.tab-active]:bg-surface-ground whitespace-nowrap shrink-0 text-sm sm:text-base">
540
765
  <i [class]="tab.icon"></i>
541
- <span>{{ tab.label }}</span>
766
+ <span>{{ tab.labelKey | translate }}</span>
542
767
  </a>
543
768
  }
544
769
  </div>
545
770
 
546
771
  <router-outlet />
547
772
  </div>
548
- `, isInline: true, styles: [".scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
773
+ `, isInline: true, styles: [".scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
549
774
  }
550
775
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: EmailContainerComponent, decorators: [{
551
776
  type: Component,
552
- args: [{ selector: 'lib-email-container', changeDetection: ChangeDetectionStrategy.OnPush, imports: [RouterOutlet, RouterLink, RouterLinkActive], template: `
777
+ args: [{ selector: 'lib-email-container', imports: [RouterOutlet, RouterLink, RouterLinkActive, TranslatePipe], template: `
553
778
  <div class="p-2 sm:p-4">
554
779
  <div class="mb-4">
555
- <h1 class="text-xl sm:text-2xl font-bold m-0">Email</h1>
556
- <p class="text-sm text-muted-color mt-1">Manage email templates and provider configurations</p>
780
+ <h1 class="text-xl sm:text-2xl font-bold m-0">{{ 'email.title' | translate }}</h1>
781
+ <p class="text-sm text-muted-color mt-1">{{ 'email.subtitle' | translate }}</p>
557
782
  </div>
558
783
 
559
784
  <div class="scrollbar-hide flex gap-1 mb-4 border-b border-surface overflow-x-auto flex-nowrap -mx-2 sm:mx-0 px-2 sm:px-0">
@@ -564,7 +789,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
564
789
  [routerLinkActiveOptions]="{ exact: false }"
565
790
  class="flex items-center gap-2 px-3 sm:px-4 py-2 rounded-t-lg cursor-pointer transition-colors text-muted-color no-underline border-b-2 border-transparent -mb-px hover:bg-surface-hover [&.tab-active]:text-primary [&.tab-active]:border-primary [&.tab-active]:bg-surface-ground whitespace-nowrap shrink-0 text-sm sm:text-base">
566
791
  <i [class]="tab.icon"></i>
567
- <span>{{ tab.label }}</span>
792
+ <span>{{ tab.labelKey | translate }}</span>
568
793
  </a>
569
794
  }
570
795
  </div>
@@ -582,11 +807,11 @@ var emailContainer_component = /*#__PURE__*/Object.freeze({
582
807
  // =============================================================================
583
808
  // @flusys/ng-email - Email Package
584
809
  // =============================================================================
585
- // Enums
810
+ // Constants
586
811
 
587
812
  /**
588
813
  * Generated bundle index. Do not edit.
589
814
  */
590
815
 
591
- export { DEFAULT_EMAIL_SETTINGS, EMAIL_ROUTES, EmailBlockType, EmailBuilderStateService, EmailConfigApiService, EmailContainerComponent, EmailProviderEnum, EmailSendService, EmailTemplateApiService, createEmailSchema };
816
+ export { DEFAULT_EMAIL_SETTINGS, EMAIL_MESSAGES, EMAIL_ROUTES, EmailBlockType, EmailBuilderStateService, EmailConfigApiService, EmailContainerComponent, EmailProviderEnum, EmailSendService, EmailTemplateApiService, createEmailSchema };
592
817
  //# sourceMappingURL=flusys-ng-email.mjs.map