@flusys/ng-email 4.1.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -392
- package/fesm2022/flusys-ng-email-email-config-form.component-M0g9fxU1.mjs +793 -0
- package/fesm2022/flusys-ng-email-email-config-form.component-M0g9fxU1.mjs.map +1 -0
- package/fesm2022/{flusys-ng-email-email-config-list.component-oznfQvxo.mjs → flusys-ng-email-email-config-list.component-DorIeenX.mjs} +149 -72
- package/fesm2022/flusys-ng-email-email-config-list.component-DorIeenX.mjs.map +1 -0
- package/fesm2022/{flusys-ng-email-template-form.component-B2vIO6ow.mjs → flusys-ng-email-template-form.component-SbeCuxm5.mjs} +19 -24
- package/fesm2022/flusys-ng-email-template-form.component-SbeCuxm5.mjs.map +1 -0
- package/fesm2022/{flusys-ng-email-template-list.component-0PJxS33a.mjs → flusys-ng-email-template-list.component-DrtU0xLq.mjs} +43 -40
- package/fesm2022/flusys-ng-email-template-list.component-DrtU0xLq.mjs.map +1 -0
- package/fesm2022/flusys-ng-email.mjs +89 -185
- package/fesm2022/flusys-ng-email.mjs.map +1 -1
- package/package.json +4 -4
- package/types/flusys-ng-email.d.ts +0 -2
- package/fesm2022/flusys-ng-email-email-config-form.component-Cj2U6Tgf.mjs +0 -718
- package/fesm2022/flusys-ng-email-email-config-form.component-Cj2U6Tgf.mjs.map +0 -1
- package/fesm2022/flusys-ng-email-email-config-list.component-oznfQvxo.mjs.map +0 -1
- package/fesm2022/flusys-ng-email-template-form.component-B2vIO6ow.mjs.map +0 -1
- package/fesm2022/flusys-ng-email-template-list.component-0PJxS33a.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flusys-ng-email.mjs","sources":["../../../projects/ng-email/constants/messages.ts","../../../projects/ng-email/enums/email-provider.enum.ts","../../../projects/ng-email/enums/email-block-type.enum.ts","../../../projects/ng-email/interfaces/email-schema.interface.ts","../../../projects/ng-email/services/email-config-api.service.ts","../../../projects/ng-email/services/email-template-api.service.ts","../../../projects/ng-email/services/email-send.service.ts","../../../projects/ng-email/services/email-builder-state.service.ts","../../../projects/ng-email/routes/email.routes.ts","../../../projects/ng-email/pages/email-container/email-container.component.ts","../../../projects/ng-email/public-api.ts","../../../projects/ng-email/flusys-ng-email.ts"],"sourcesContent":["export const EMAIL_MESSAGES: Record<string, string> = {\n // Container\n 'email.title': 'Email Management',\n 'email.subtitle': 'Manage email configurations and templates',\n\n // Tabs\n 'email.tabs.configs': 'Configurations',\n 'email.tabs.templates': 'Templates',\n\n // Email config UI\n 'email.config.title': 'Email Configurations',\n 'email.config.new.title': 'New Email Configuration',\n 'email.config.edit.title': 'Edit Email Configuration',\n 'email.config.name': 'Configuration Name',\n 'email.config.provider': 'Provider',\n 'email.config.from.email': 'From Email',\n 'email.config.from.name': 'From Name',\n 'email.config.set.as.default': 'Set as Default',\n 'email.config.smtp.settings': 'SMTP Settings',\n 'email.config.smtp.host': 'SMTP Host',\n 'email.config.port': 'Port',\n 'email.config.username': 'Username',\n 'email.config.password': 'Password',\n 'email.config.use.ssl.tls': 'Use SSL/TLS',\n 'email.config.sendgrid.settings': 'SendGrid Settings',\n 'email.config.api.key': 'API Key',\n 'email.config.mailgun.settings': 'Mailgun Settings',\n 'email.config.domain': 'Domain',\n 'email.config.region': 'Region',\n 'email.config.new': 'New Configuration',\n 'email.config.empty': 'No email configurations found',\n 'email.config.test.dialog.title': 'Test Email Configuration',\n 'email.config.test.dialog.hint': 'A test email will be sent to verify the configuration',\n 'email.config.configuration': 'Configuration',\n 'email.config.recipient.email': 'Recipient Email',\n 'email.config.send.test': 'Send Test',\n 'email.config.delete.title': 'Delete Configuration',\n 'email.config.delete.confirm': 'Are you sure you want to delete \"{{name}}\"?',\n 'email.config.load.failed': 'Failed to load email configurations',\n 'email.config.deleted': 'Email configuration deleted successfully',\n 'email.config.delete.failed': 'Failed to delete email configuration',\n 'email.config.created': 'Email configuration created successfully',\n 'email.config.create.failed': 'Failed to create email configuration',\n 'email.config.updated': 'Email configuration updated successfully',\n 'email.config.update.failed': 'Failed to update email configuration',\n 'email.config.enter.recipient': 'Please enter a recipient email address',\n 'email.config.test.sent.success': 'Test email sent successfully (Message ID: {{messageId}})',\n 'email.config.test.sent.failed': 'Failed to send test email',\n\n // Email template UI\n 'email.template.title': 'Email Templates',\n 'email.template.new.title': 'New Email Template',\n 'email.template.edit.title': 'Edit Email Template',\n 'email.template.name': 'Template Name',\n 'email.template.slug': 'Slug',\n 'email.template.subject': 'Subject',\n 'email.template.content': 'Content',\n 'email.template.plain.text': 'Plain Text',\n 'email.template.new': 'New Template',\n 'email.template.empty': 'No email templates found',\n 'email.template.test.dialog.title': 'Test Email Template',\n 'email.template.send.test': 'Send Test',\n 'email.template.delete.title': 'Delete Template',\n 'email.template.delete.confirm': 'Are you sure you want to delete \"{{name}}\"?',\n 'email.template.load.failed': 'Failed to load email templates',\n 'email.template.deleted': 'Email template deleted successfully',\n 'email.template.delete.failed': 'Failed to delete email template',\n 'email.template.created': 'Email template created successfully',\n 'email.template.create.failed': 'Failed to create email template',\n 'email.template.updated': 'Email template updated successfully',\n 'email.template.update.failed': 'Failed to update email template',\n 'email.template.template': 'Template',\n 'email.template.email.config': 'Email Configuration',\n 'email.template.select.config': 'Select a configuration',\n 'email.template.select.config.and.recipient': 'Please select an email configuration and enter a recipient',\n 'email.template.test.sent.success': 'Test email sent successfully (Message ID: {{messageId}})',\n 'email.template.test.sent.failed': 'Failed to send test email',\n 'email.template.test.send': 'Send Test Email',\n 'email.template.text': 'Text',\n 'email.template.variable.hint': 'Use {{variableName}} for dynamic content',\n 'email.template.plain.text.hint': 'Plain text is used for email clients that do not support HTML',\n 'email.template.live.preview': 'Live Preview',\n 'email.template.enter.html.preview': 'Enter HTML content to see preview',\n 'email.template.variables': 'Template Variables',\n 'email.template.enter.value.for': 'Enter value for {{variable}}',\n 'email.template.body': 'Body',\n 'email.template.preview': 'Preview',\n 'email.template.create': 'Create Template',\n 'email.template.edit': 'Edit Template',\n 'email.template.test': 'Send Test Email',\n\n // Form validation\n 'email.template.validation.name.required': 'Template name is required',\n 'email.template.validation.slug.required': 'Slug is required',\n 'email.template.validation.subject.required': 'Subject is required',\n 'email.config.validation.name.required': 'Configuration name is required',\n 'email.config.validation.provider.required': 'Provider is required',\n\n // Form placeholders\n 'email.config.placeholder.name': 'e.g., Production SMTP',\n 'email.config.placeholder.select.provider': 'Select provider',\n 'email.config.placeholder.from.email': 'noreply@example.com',\n 'email.config.placeholder.from.name': 'Your App Name',\n 'email.config.placeholder.smtp.host': 'smtp.gmail.com',\n 'email.config.placeholder.port': '587',\n 'email.config.placeholder.username': 'user@gmail.com',\n 'email.config.placeholder.password': 'App password',\n 'email.config.placeholder.api.key': 'API Key',\n 'email.config.placeholder.domain': 'mg.example.com',\n 'email.config.placeholder.select.region': 'Select region',\n 'email.config.placeholder.recipient': 'recipient@example.com',\n 'email.template.placeholder.name': 'e.g., Welcome Email',\n 'email.template.placeholder.slug': 'e.g., welcome-email',\n 'email.template.placeholder.description': 'Brief description of the template',\n 'email.template.placeholder.plain.text': 'Enter plain text content for email clients that do not support HTML',\n 'email.template.placeholder.recipient': 'recipient@example.com',\n 'email.template.html': 'HTML',\n\n // Email template CRUD (API keys)\n 'email.template.create.success': 'Email template created successfully',\n 'email.template.update.success': 'Email template updated successfully',\n 'email.template.delete.success': 'Email template deleted successfully',\n 'email.template.get.success': 'Email template retrieved successfully',\n 'email.template.get.all.success': 'Email templates retrieved successfully',\n 'email.template.create.many.success': '{{count}} email templates created successfully',\n 'email.template.update.many.success': '{{count}} email templates updated successfully',\n 'email.template.restore.success': 'Email template restored successfully',\n 'email.template.not.found': 'Email template not found',\n 'email.template.preview.success': 'Email template preview generated successfully',\n\n // Email provider\n 'email.provider.title': 'Email Providers',\n 'email.provider.name': 'Provider Name',\n 'email.provider.type': 'Provider Type',\n 'email.provider.host': 'SMTP Host',\n 'email.provider.port': 'Port',\n 'email.provider.username': 'Username',\n 'email.provider.password': 'Password',\n 'email.provider.from.email': 'From Email',\n 'email.provider.from.name': 'From Name',\n 'email.provider.encryption': 'Encryption',\n 'email.provider.test.connection': 'Test Connection',\n 'email.provider.connection.success': 'Connection successful',\n 'email.provider.connection.failed': 'Connection failed',\n 'email.provider.create.success': 'Email provider created successfully',\n 'email.provider.update.success': 'Email provider updated successfully',\n 'email.provider.delete.success': 'Email provider deleted successfully',\n\n // Sending emails\n 'email.send.title': 'Send Email',\n 'email.send.to': 'To',\n 'email.send.cc': 'CC',\n 'email.send.bcc': 'BCC',\n 'email.send.subject': 'Subject',\n 'email.send.body': 'Message',\n 'email.send.attachments': 'Attachments',\n 'email.send.success': 'Email sent successfully',\n 'email.send.failed': 'Failed to send email',\n 'email.send.sending': 'Sending email...',\n\n // Email logs\n 'email.log.title': 'Email Logs',\n 'email.log.recipient': 'Recipient',\n 'email.log.status': 'Status',\n 'email.log.sent.at': 'Sent At',\n 'email.log.delivered': 'Delivered',\n 'email.log.failed': 'Failed',\n 'email.log.pending': 'Pending',\n 'email.log.opened': 'Opened',\n 'email.log.clicked': 'Clicked',\n 'email.log.bounced': 'Bounced',\n\n // Email config CRUD (API keys)\n 'email.config.create.success': 'Email configuration created successfully',\n 'email.config.create.many.success': '{{count}} email configurations created successfully',\n 'email.config.get.success': 'Email configuration retrieved successfully',\n 'email.config.get.all.success': 'Email configurations retrieved successfully',\n 'email.config.update.success': 'Email configuration updated successfully',\n 'email.config.update.many.success': '{{count}} email configurations updated successfully',\n 'email.config.delete.success': 'Email configuration deleted successfully',\n 'email.config.restore.success': 'Email configuration restored successfully',\n 'email.config.not.found': 'Email configuration not found',\n 'email.config.active.success': 'Active email configuration retrieved successfully',\n 'email.config.test.success': 'Email configuration test successful',\n 'email.config.test.failed': 'Email configuration test failed',\n\n // Email send (API keys)\n 'email.send.queued': 'Email queued for sending',\n 'email.send.template.success': 'Template email sent successfully',\n 'email.send.bulk.success': 'Bulk emails sent successfully',\n 'email.send.test.success': 'Test email sent successfully',\n 'email.send.config.not.found': 'Email configuration not found',\n 'email.send.config.inactive': 'Email configuration is inactive',\n 'email.send.config.default.not.found': 'Default email configuration not found',\n 'email.send.template.not.found': 'Email template not found',\n 'email.send.template.inactive': 'Email template is inactive',\n 'email.send.template.id.or.slug.required': 'Template ID or slug is required',\n\n // Additional placeholder keys (dot-case)\n 'email.config.name.example': 'e.g., Production SMTP',\n 'email.config.select.provider': 'Select provider',\n 'email.config.from.email.example': 'noreply@example.com',\n 'email.config.from.name.example': 'Your App Name',\n 'email.config.smtp.host.example': 'smtp.gmail.com',\n 'email.config.smtp.port.example': '587',\n 'email.config.smtp.user.example': 'user@gmail.com',\n 'email.config.smtp.password.example': 'App password',\n 'email.config.sendgrid.api.key.example': 'API Key',\n 'email.config.mailgun.api.key.example': 'API Key',\n 'email.config.mailgun.domain.example': 'mg.example.com',\n 'email.config.select.region': 'Select region',\n 'email.recipient.example': 'recipient@example.com',\n 'email.template.name.example': 'e.g., Welcome Email',\n 'email.template.slug.example': 'e.g., welcome-email',\n 'email.template.subject.example': 'Enter email subject',\n 'email.template.desc.placeholder': 'Brief description of the template',\n 'email.template.html.placeholder': 'Enter HTML content',\n 'email.template.text.placeholder': 'Enter plain text content',\n\n // Provider translation keys (singular - for labels)\n 'email.provider.smtp': 'SMTP',\n 'email.provider.sendgrid': 'SendGrid',\n 'email.provider.mailgun': 'Mailgun',\n\n // Provider translation keys (plural - for dynamic lookups)\n 'email.providers.smtp': 'SMTP',\n 'email.providers.sendgrid': 'SendGrid',\n 'email.providers.mailgun': 'Mailgun',\n\n // Region translation keys\n 'email.region.us': 'US',\n 'email.region.eu': 'EU',\n\n // Template keys\n 'email.template.default.content': 'Enter your email content here...',\n\n // Common aliases used by email components\n 'common.fill.required.fields': 'Please fill in all required fields',\n};\n","/**\n * Supported email provider types\n */\nexport enum EmailProviderEnum {\n SMTP = 'smtp',\n SENDGRID = 'sendgrid',\n MAILGUN = 'mailgun',\n}\n","/**\n * Email content block types\n */\nexport enum EmailBlockType {\n TEXT = 'text',\n IMAGE = 'image',\n BUTTON = 'button',\n DIVIDER = 'divider',\n HTML = 'html',\n}\n","import { EmailBlockType } from '../enums/email-block-type.enum';\n\n/**\n * Email template variable types\n */\nexport type EmailVariableType = 'string' | 'number' | 'boolean' | 'date';\n\n/**\n * Email section types\n */\nexport type EmailSectionType = 'header' | 'body' | 'footer';\n\n/**\n * Email template variable definition\n */\nexport interface IEmailTemplateVariable {\n name: string;\n type: EmailVariableType;\n required?: boolean;\n defaultValue?: string;\n description?: string;\n}\n\n/**\n * Email section style\n */\nexport interface IEmailSectionStyle {\n backgroundColor?: string;\n padding?: string;\n maxWidth?: string;\n}\n\n/**\n * Email block style\n */\nexport interface IEmailBlockStyle {\n textAlign?: 'left' | 'center' | 'right';\n padding?: string;\n margin?: string;\n backgroundColor?: string;\n}\n\n/**\n * Text block content\n */\nexport interface ITextBlockContent {\n text: string;\n html?: string;\n}\n\n/**\n * Image block content\n */\nexport interface IImageBlockContent {\n src: string;\n alt?: string;\n link?: string;\n width?: string;\n height?: string;\n}\n\n/**\n * Button block content\n */\nexport interface IButtonBlockContent {\n text: string;\n link: string;\n backgroundColor?: string;\n textColor?: string;\n borderRadius?: string;\n}\n\n/**\n * Divider block content\n */\nexport interface IDividerBlockContent {\n height?: string;\n color?: string;\n style?: 'solid' | 'dashed' | 'dotted';\n}\n\n/**\n * HTML block content\n */\nexport interface IHtmlBlockContent {\n html: string;\n}\n\n/**\n * Block content union type\n */\nexport type EmailBlockContent =\n | ITextBlockContent\n | IImageBlockContent\n | IButtonBlockContent\n | IDividerBlockContent\n | IHtmlBlockContent;\n\n/**\n * Email content block\n */\nexport interface IEmailBlock {\n id: string;\n type: EmailBlockType;\n order: number;\n content: EmailBlockContent;\n style?: IEmailBlockStyle;\n}\n\n/**\n * Email section (header, body, footer)\n */\nexport interface IEmailSection {\n id: string;\n type: EmailSectionType;\n /** @deprecated Use nameKey for localization */\n name?: string;\n /** Translation key for the section name */\n nameKey: string;\n blocks: IEmailBlock[];\n order: number;\n style?: IEmailSectionStyle;\n}\n\n/**\n * Email schema settings\n */\nexport interface IEmailSettings {\n maxWidth?: string;\n backgroundColor?: string;\n fontFamily?: string;\n baseTextColor?: string;\n}\n\n/**\n * Full email schema structure\n */\nexport interface IEmailSchema {\n id: string;\n version: string;\n /** @deprecated Use nameKey for localization */\n name?: string;\n /** Translation key for the template name */\n nameKey: string;\n subject: string;\n preheader?: string;\n sections: IEmailSection[];\n variables?: IEmailTemplateVariable[];\n settings?: IEmailSettings;\n}\n\n/**\n * Default email settings\n */\nexport const DEFAULT_EMAIL_SETTINGS: IEmailSettings = {\n maxWidth: '600px',\n backgroundColor: '#f5f5f5',\n fontFamily: 'Arial, sans-serif',\n baseTextColor: '#333333',\n};\n\n/**\n * Create a new email schema with default sections\n */\nexport function createEmailSchema(partial: Partial<IEmailSchema> = {}): IEmailSchema {\n return {\n id: partial.id ?? crypto.randomUUID(),\n version: partial.version ?? '1.0.0',\n nameKey: partial.nameKey ?? 'email.template.untitled',\n subject: partial.subject ?? '',\n preheader: partial.preheader,\n sections: partial.sections ?? createDefaultSections(),\n variables: partial.variables ?? [],\n settings: { ...DEFAULT_EMAIL_SETTINGS, ...partial.settings },\n };\n}\n\n/**\n * Create default email sections (header, body, footer)\n */\nfunction createDefaultSections(): IEmailSection[] {\n return [\n { id: crypto.randomUUID(), type: 'header', nameKey: 'email.section.header', blocks: [], order: 0 },\n { id: crypto.randomUUID(), type: 'body', nameKey: 'email.section.body', blocks: [], order: 1 },\n { id: crypto.randomUUID(), type: 'footer', nameKey: 'email.section.footer', blocks: [], order: 2 },\n ];\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { APP_CONFIG, getServiceUrl, IAppConfig } from '@flusys/ng-core';\nimport { ApiResourceService, ISingleResponse } from '@flusys/ng-shared';\nimport { Observable } from 'rxjs';\nimport {\n ICreateEmailConfigDto,\n IEmailConfig,\n IUpdateEmailConfigDto,\n} from '../interfaces/email-config.interface';\nimport { ITestSendResult } from '../interfaces/email-send.interface';\n\n/**\n * Email Config API Service\n * Handles email configuration CRUD operations\n * Endpoint: POST /email/email-config/*\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class EmailConfigApiService extends ApiResourceService<\n ICreateEmailConfigDto | IUpdateEmailConfigDto,\n IEmailConfig\n> {\n private readonly appConfig = inject<IAppConfig>(APP_CONFIG);\n\n constructor() {\n super('email-config', inject(HttpClient), 'email');\n }\n\n /**\n * Send test email to verify configuration\n */\n sendTest(configId: string, recipient: string): Observable<ISingleResponse<ITestSendResult>> {\n const emailBaseUrl = getServiceUrl(this.appConfig, 'email');\n return this.http.post<ISingleResponse<ITestSendResult>>(\n `${emailBaseUrl}/send/test`,\n { emailConfigId: configId, recipient },\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ApiResourceService, ISingleResponse } from '@flusys/ng-shared';\nimport { ICreateEmailTemplateDto, IEmailTemplate, IUpdateEmailTemplateDto } from '../interfaces/email-template.interface';\nimport { Observable } from 'rxjs';\n\n/**\n * Email Template API Service\n * Handles email template CRUD operations\n * Endpoint: POST /email/email-template/*\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class EmailTemplateApiService extends ApiResourceService<\n ICreateEmailTemplateDto | IUpdateEmailTemplateDto,\n IEmailTemplate\n> {\n constructor() {\n super('email-template', inject(HttpClient), 'email');\n }\n\n /**\n * Get template by slug (POST-only RPC pattern)\n */\n getBySlug(slug: string): Observable<ISingleResponse<IEmailTemplate | null>> {\n return this.http.post<ISingleResponse<IEmailTemplate | null>>(\n `${this.baseUrl}/get-by-slug`,\n { slug },\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { APP_CONFIG, getServiceUrl, IAppConfig } from '@flusys/ng-core';\nimport { ISingleResponse } from '@flusys/ng-shared';\nimport { Observable } from 'rxjs';\nimport {\n ISendEmailDto,\n ISendTemplateEmailDto,\n ITestSendResult,\n} from '../interfaces/email-send.interface';\n\n/**\n * Email Send Service\n * Handles sending emails directly or using templates\n * Endpoint: POST /email/send/*\n *\n * Note: For testing configurations, use EmailConfigApiService.sendTest()\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class EmailSendService {\n private readonly http = inject(HttpClient);\n private readonly appConfig = inject<IAppConfig>(APP_CONFIG);\n private readonly baseUrl = `${getServiceUrl(this.appConfig, 'email')}/send`;\n\n /**\n * Send email directly (without template)\n */\n sendDirect(dto: ISendEmailDto): Observable<ISingleResponse<ITestSendResult>> {\n return this.http.post<ISingleResponse<ITestSendResult>>(\n `${this.baseUrl}/direct`,\n dto,\n );\n }\n\n /**\n * Send email using template\n */\n sendTemplate(dto: ISendTemplateEmailDto): Observable<ISingleResponse<ITestSendResult>> {\n return this.http.post<ISingleResponse<ITestSendResult>>(\n `${this.baseUrl}/template`,\n dto,\n );\n }\n}\n","import { Injectable, signal, computed } from '@angular/core';\nimport {\n IEmailSchema,\n IEmailSection,\n IEmailBlock,\n EmailBlockContent,\n createEmailSchema,\n DEFAULT_EMAIL_SETTINGS,\n} from '../interfaces/email-schema.interface';\nimport { EmailBlockType } from '../enums/email-block-type.enum';\n\n/**\n * Manages the email builder UI state including schema, selection, and UI toggles.\n * Should be provided at the EmailBuilder component level (not root).\n */\n@Injectable()\nexport class EmailBuilderStateService {\n // Schema state\n private readonly _schema = signal<IEmailSchema>(createEmailSchema());\n private readonly _isDirty = signal(false);\n\n // Selection state\n private readonly _selectedSectionId = signal<string | null>(null);\n private readonly _selectedBlockId = signal<string | null>(null);\n\n // View mode\n private readonly _viewMode = signal<'visual' | 'html'>('visual');\n\n // Public readonly signals\n readonly schema = this._schema.asReadonly();\n readonly isDirty = this._isDirty.asReadonly();\n readonly selectedSectionId = this._selectedSectionId.asReadonly();\n readonly selectedBlockId = this._selectedBlockId.asReadonly();\n readonly viewMode = this._viewMode.asReadonly();\n\n // Computed signals\n readonly sections = computed(() => this._schema().sections);\n readonly templateName = computed(() => this._schema().name);\n readonly subject = computed(() => this._schema().subject);\n readonly settings = computed(() => this._schema().settings ?? DEFAULT_EMAIL_SETTINGS);\n readonly variables = computed(() => this._schema().variables ?? []);\n\n readonly headerSection = computed((): IEmailSection | null => {\n return this.sections().find((s) => s.type === 'header') ?? null;\n });\n\n readonly bodySection = computed((): IEmailSection | null => {\n return this.sections().find((s) => s.type === 'body') ?? null;\n });\n\n readonly footerSection = computed((): IEmailSection | null => {\n return this.sections().find((s) => s.type === 'footer') ?? null;\n });\n\n readonly selectedSection = computed((): IEmailSection | null => {\n const sectionId = this._selectedSectionId();\n if (!sectionId) return null;\n return this.sections().find((s) => s.id === sectionId) ?? null;\n });\n\n readonly selectedBlock = computed((): IEmailBlock | null => {\n const blockId = this._selectedBlockId();\n if (!blockId) return null;\n for (const section of this.sections()) {\n const block = section.blocks.find((b) => b.id === blockId);\n if (block) return block;\n }\n return null;\n });\n\n readonly allBlocks = computed((): IEmailBlock[] => {\n return this.sections().flatMap((s) => s.blocks);\n });\n\n // =========================================\n // Schema Operations\n // =========================================\n\n /**\n * Load an existing schema into the builder\n */\n loadSchema(schema: IEmailSchema): void {\n const cloned = structuredClone(schema);\n this._schema.set(cloned);\n this._isDirty.set(false);\n this._selectedSectionId.set(null);\n this._selectedBlockId.set(null);\n }\n\n /**\n * Create a new empty schema\n */\n createNewSchema(name = ''): void {\n this._schema.set(createEmailSchema({ name }));\n this._isDirty.set(true);\n this._selectedSectionId.set(null);\n this._selectedBlockId.set(null);\n }\n\n /**\n * Update template metadata\n */\n updateSchemaMeta(\n updates: Partial<Pick<IEmailSchema, 'name' | 'subject' | 'preheader' | 'settings' | 'variables'>>,\n ): void {\n this._schema.update((schema) => ({\n ...schema,\n ...updates,\n }));\n this._isDirty.set(true);\n }\n\n /**\n * Mark schema as saved (clears dirty flag)\n */\n markAsSaved(): void {\n this._isDirty.set(false);\n }\n\n /**\n * Set view mode (visual or html)\n */\n setViewMode(mode: 'visual' | 'html'): void {\n this._viewMode.set(mode);\n }\n\n // =========================================\n // Section Operations\n // =========================================\n\n /**\n * Update section properties\n */\n updateSection(sectionId: string, updates: Partial<IEmailSection>): void {\n this._schema.update((schema) => ({\n ...schema,\n sections: schema.sections.map((s) =>\n s.id === sectionId ? { ...s, ...updates } : s,\n ),\n }));\n this._isDirty.set(true);\n }\n\n // =========================================\n // Block Operations\n // =========================================\n\n /**\n * Add a new block to a section\n */\n addBlock(\n sectionId: string,\n blockType: EmailBlockType,\n block?: Partial<IEmailBlock>,\n ): string | null {\n const newBlock: IEmailBlock = {\n id: crypto.randomUUID(),\n type: blockType,\n order: 0,\n content: this.getDefaultContent(blockType),\n ...block,\n };\n\n this._schema.update((schema) => ({\n ...schema,\n sections: schema.sections.map((s) => {\n if (s.id !== sectionId) return s;\n const blocks = [...s.blocks, newBlock];\n this.reindexBlocks(blocks);\n return { ...s, blocks };\n }),\n }));\n\n this._isDirty.set(true);\n return newBlock.id;\n }\n\n /**\n * Update block properties\n */\n updateBlock(sectionId: string, blockId: string, updates: Partial<IEmailBlock>): void {\n this._schema.update((schema) => ({\n ...schema,\n sections: schema.sections.map((s) => {\n if (s.id !== sectionId) return s;\n return {\n ...s,\n blocks: s.blocks.map((b) => (b.id === blockId ? { ...b, ...updates } : b)),\n };\n }),\n }));\n this._isDirty.set(true);\n }\n\n /**\n * Delete a block from a section\n */\n deleteBlock(sectionId: string, blockId: string): void {\n this._schema.update((schema) => ({\n ...schema,\n sections: schema.sections.map((s) => {\n if (s.id !== sectionId) return s;\n const blocks = s.blocks.filter((b) => b.id !== blockId);\n this.reindexBlocks(blocks);\n return { ...s, blocks };\n }),\n }));\n this._isDirty.set(true);\n\n // Clear selection if deleted block was selected\n if (this._selectedBlockId() === blockId) {\n this._selectedBlockId.set(null);\n }\n }\n\n /**\n * Reorder blocks within a section\n */\n reorderBlocks(sectionId: string, fromIndex: number, toIndex: number): void {\n this._schema.update((schema) => ({\n ...schema,\n sections: schema.sections.map((s) => {\n if (s.id !== sectionId) return s;\n const blocks = [...s.blocks];\n const [removed] = blocks.splice(fromIndex, 1);\n blocks.splice(toIndex, 0, removed);\n this.reindexBlocks(blocks);\n return { ...s, blocks };\n }),\n }));\n this._isDirty.set(true);\n }\n\n /**\n * Duplicate a block\n */\n duplicateBlock(sectionId: string, blockId: string): string | null {\n const section = this.sections().find((s) => s.id === sectionId);\n const block = section?.blocks.find((b) => b.id === blockId);\n if (!block) return null;\n\n const newBlock: IEmailBlock = {\n ...structuredClone(block),\n id: crypto.randomUUID(),\n };\n\n this._schema.update((schema) => ({\n ...schema,\n sections: schema.sections.map((s) => {\n if (s.id !== sectionId) return s;\n const blockIndex = s.blocks.findIndex((b) => b.id === blockId);\n const blocks = [...s.blocks];\n blocks.splice(blockIndex + 1, 0, newBlock);\n this.reindexBlocks(blocks);\n return { ...s, blocks };\n }),\n }));\n\n this._isDirty.set(true);\n return newBlock.id;\n }\n\n // =========================================\n // Selection Operations\n // =========================================\n\n /**\n * Select a section\n */\n selectSection(sectionId: string | null): void {\n this._selectedSectionId.set(sectionId);\n this._selectedBlockId.set(null);\n }\n\n /**\n * Select a block\n */\n selectBlock(blockId: string | null): void {\n if (blockId) {\n // Find the section containing this block\n for (const section of this.sections()) {\n if (section.blocks.some((b) => b.id === blockId)) {\n this._selectedSectionId.set(section.id);\n break;\n }\n }\n }\n this._selectedBlockId.set(blockId);\n }\n\n /**\n * Clear all selection\n */\n clearSelection(): void {\n this._selectedSectionId.set(null);\n this._selectedBlockId.set(null);\n }\n\n // =========================================\n // Helper Methods\n // =========================================\n\n /**\n * Get default content for a block type.\n * Note: Text content is intentionally empty - UI should display translated placeholders.\n */\n private getDefaultContent(type: EmailBlockType): EmailBlockContent {\n switch (type) {\n case EmailBlockType.TEXT:\n return { text: '', html: '' };\n case EmailBlockType.IMAGE:\n return { src: '', alt: '' };\n case EmailBlockType.BUTTON:\n return {\n text: '',\n link: '',\n backgroundColor: '#007bff',\n textColor: '#ffffff',\n borderRadius: '4px',\n };\n case EmailBlockType.DIVIDER:\n return { height: '1px', color: '#cccccc', style: 'solid' };\n case EmailBlockType.HTML:\n return { html: '' };\n default:\n return { text: '' };\n }\n }\n\n /**\n * Reindex block order values after add/remove/reorder\n */\n private reindexBlocks(blocks: IEmailBlock[]): void {\n blocks.forEach((b, i) => (b.order = i));\n }\n}\n","import { Routes } from '@angular/router';\nimport {\n EMAIL_CONFIG_PERMISSIONS,\n EMAIL_TEMPLATE_PERMISSIONS,\n permissionGuard,\n SHARED_MESSAGES,\n resolveTranslationModule,\n} from '@flusys/ng-shared';\nimport { EMAIL_MESSAGES } from '../constants/messages';\n\n/**\n * Email Module Routes\n * All routes protected by permission guards\n */\nexport const EMAIL_ROUTES: Routes = [\n {\n path: '',\n resolve: { translations: resolveTranslationModule({ modules: ['email'], fallbackMessages: { ...EMAIL_MESSAGES, ...SHARED_MESSAGES } }) },\n loadComponent: () =>\n import('../pages/email-container/email-container.component').then(\n (m) => m.EmailContainerComponent,\n ),\n children: [\n // Template Routes\n {\n path: 'templates',\n canActivate: [permissionGuard(EMAIL_TEMPLATE_PERMISSIONS.READ)],\n children: [\n {\n path: '',\n loadComponent: () =>\n import('../pages/template/template-list.component').then(\n (m) => m.TemplateListComponent,\n ),\n },\n {\n path: 'new',\n canActivate: [permissionGuard(EMAIL_TEMPLATE_PERMISSIONS.CREATE)],\n loadComponent: () =>\n import('../pages/template/template-form.component').then(\n (m) => m.TemplateFormComponent,\n ),\n },\n {\n path: ':id',\n canActivate: [permissionGuard(EMAIL_TEMPLATE_PERMISSIONS.UPDATE)],\n loadComponent: () =>\n import('../pages/template/template-form.component').then(\n (m) => m.TemplateFormComponent,\n ),\n },\n ],\n },\n\n // Config Routes\n {\n path: 'configs',\n canActivate: [permissionGuard(EMAIL_CONFIG_PERMISSIONS.READ)],\n children: [\n {\n path: '',\n loadComponent: () =>\n import('../pages/config/email-config-list.component').then(\n (m) => m.EmailConfigListComponent,\n ),\n },\n {\n path: 'new',\n canActivate: [permissionGuard(EMAIL_CONFIG_PERMISSIONS.CREATE)],\n loadComponent: () =>\n import('../pages/config/email-config-form.component').then(\n (m) => m.EmailConfigFormComponent,\n ),\n },\n {\n path: ':id',\n canActivate: [permissionGuard(EMAIL_CONFIG_PERMISSIONS.UPDATE)],\n loadComponent: () =>\n import('../pages/config/email-config-form.component').then(\n (m) => m.EmailConfigFormComponent,\n ),\n },\n ],\n },\n\n // Default redirect\n { path: '', redirectTo: 'templates', pathMatch: 'full' },\n ],\n },\n];\n","import { Component, computed, inject } from '@angular/core';\nimport { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';\nimport {\n EMAIL_CONFIG_PERMISSIONS,\n EMAIL_TEMPLATE_PERMISSIONS,\n PermissionValidatorService,\n TranslatePipe,\n} from '@flusys/ng-shared';\n\ninterface ITab {\n id: string;\n labelKey: string;\n icon: string;\n route: string;\n permission: string;\n}\n\n/**\n * Email container component with tab navigation\n * Filters tabs based on user permissions\n */\n@Component({\n selector: 'lib-email-container',\n imports: [RouterOutlet, RouterLink, RouterLinkActive, TranslatePipe],\n styles: `\n .scrollbar-hide {\n -ms-overflow-style: none;\n scrollbar-width: none;\n &::-webkit-scrollbar { display: none; }\n }\n `,\n template: `\n <div class=\"p-2 sm:p-4\">\n <div class=\"mb-4\">\n <h1 class=\"text-xl sm:text-2xl font-bold m-0\">{{ 'email.title' | translate }}</h1>\n <p class=\"text-sm text-muted-color mt-1\">{{ 'email.subtitle' | translate }}</p>\n </div>\n\n <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\">\n @for (tab of visibleTabs(); track tab.id) {\n <a\n [routerLink]=\"tab.route\"\n routerLinkActive=\"tab-active\"\n [routerLinkActiveOptions]=\"{ exact: false }\"\n 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\">\n <i [class]=\"tab.icon\"></i>\n <span>{{ tab.labelKey | translate }}</span>\n </a>\n }\n </div>\n\n <router-outlet />\n </div>\n `,\n})\nexport class EmailContainerComponent {\n private readonly permissionValidator = inject(PermissionValidatorService);\n\n /** All available tabs */\n private readonly allTabs: ITab[] = [\n {\n id: 'templates',\n labelKey: 'email.template.title',\n icon: 'pi pi-file',\n route: 'templates',\n permission: EMAIL_TEMPLATE_PERMISSIONS.READ,\n },\n {\n id: 'configs',\n labelKey: 'email.config.title',\n icon: 'pi pi-cog',\n route: 'configs',\n permission: EMAIL_CONFIG_PERMISSIONS.READ,\n },\n ];\n\n /** Visible tabs based on user permissions */\n readonly visibleTabs = computed(() =>\n this.allTabs.filter((tab) => this.permissionValidator.hasPermission(tab.permission)),\n );\n}\n","// =============================================================================\n// @flusys/ng-email - Email Package\n// =============================================================================\n\n// Constants\nexport * from './constants/messages';\n\n// Enums\nexport * from './enums/public-api';\n\n// Interfaces\nexport * from './interfaces/public-api';\n\n// Services\nexport { EmailConfigApiService } from './services/email-config-api.service';\nexport { EmailTemplateApiService } from './services/email-template-api.service';\nexport { EmailSendService } from './services/email-send.service';\nexport { EmailBuilderStateService } from './services/email-builder-state.service';\n\n// Routes\nexport { EMAIL_ROUTES } from './routes/email.routes';\n\n// Components\nexport { EmailContainerComponent } from './pages/email-container/email-container.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flusys-ng-email.mjs","sources":["../../../projects/ng-email/constants/messages.ts","../../../projects/ng-email/enums/email-provider.enum.ts","../../../projects/ng-email/enums/email-block-type.enum.ts","../../../projects/ng-email/interfaces/email-schema.interface.ts","../../../projects/ng-email/services/email-config-api.service.ts","../../../projects/ng-email/services/email-template-api.service.ts","../../../projects/ng-email/services/email-send.service.ts","../../../projects/ng-email/services/email-builder-state.service.ts","../../../projects/ng-email/routes/email.routes.ts","../../../projects/ng-email/pages/email-container/email-container.component.ts","../../../projects/ng-email/public-api.ts","../../../projects/ng-email/flusys-ng-email.ts"],"sourcesContent":["export const EMAIL_MESSAGES: Record<string, string> = {\n // Email config CRUD (API keys)\n 'email.config.create.success': 'Email configuration created successfully',\n 'email.config.create.many.success':\n '{{count}} email configurations created successfully',\n 'email.config.get.success': 'Email configuration retrieved successfully',\n 'email.config.get.all.success': 'Email configurations retrieved successfully',\n 'email.config.get.by.ids.success':\n 'Email configurations retrieved successfully by Ids',\n 'email.config.get.by.filter.success':\n 'Email configurations retrieved successfully by filter',\n 'email.config.update.success': 'Email configuration updated successfully',\n 'email.config.update.many.success':\n '{{count}} email configurations updated successfully',\n 'email.config.delete.success': 'Email configuration deleted successfully',\n 'email.config.restore.success': 'Email configuration restored successfully',\n\n // Email template CRUD (API keys)\n 'email.template.create.success': 'Email template created successfully',\n 'email.template.update.success': 'Email template updated successfully',\n 'email.template.delete.success': 'Email template deleted successfully',\n 'email.template.get.success': 'Email template retrieved successfully',\n 'email.template.get.by.ids.success':\n 'Email templates retrieved successfully by Ids',\n 'email.template.get.by.filter.success':\n 'Email templates retrieved successfully by filter',\n 'email.template.get.all.success': 'Email templates retrieved successfully',\n 'email.template.create.many.success':\n '{{count}} email templates created successfully',\n 'email.template.update.many.success':\n '{{count}} email templates updated successfully',\n 'email.template.restore.success': 'Email template restored successfully',\n 'email.template.not.found': 'Email template not found',\n\n // Email send (API keys)\n 'email.send.success': 'Email sent successfully',\n 'email.send.failed': 'Failed to send email',\n 'email.send.config.not.found': 'Email configuration not found',\n 'email.send.config.inactive': 'Email configuration is inactive',\n 'email.send.config.default.not.found':\n 'Default email configuration not found',\n 'email.send.template.not.found': 'Email template not found',\n 'email.send.template.inactive': 'Email template is inactive',\n 'email.send.template.id.or.slug.required': 'Template ID or slug is required',\n\n // email-schema.interface.ts\n 'email.template.untitled': 'Untitled Template',\n 'email.section.header': 'Header',\n 'email.section.body': 'Body',\n 'email.section.footer': 'Footer',\n\n // email-container.component.ts\n 'email.title': 'Email Management',\n 'email.subtitle': 'Manage email configurations and templates',\n 'email.template.title': 'Email Templates',\n 'email.config.title': 'Email Configurations',\n\n // email-config-form.component.ts\n 'email.config.edit.title': 'Edit Email Configuration',\n 'email.config.new.title': 'New Email Configuration',\n 'email.config.name': 'Configuration Name',\n 'email.config.name.example': 'e.g., Production SMTP',\n 'email.config.provider': 'Provider',\n 'email.config.select.provider': 'Select provider',\n 'email.config.from.email': 'From Email',\n 'email.config.from.email.example': 'noreply@example.com',\n 'email.config.from.name': 'From Name',\n 'email.config.from.name.example': 'Your App Name',\n 'email.config.set.as.default': 'Set as Default',\n 'email.config.smtp.settings': 'SMTP Settings',\n 'email.config.smtp.host': 'SMTP Host',\n 'email.config.smtp.host.example': 'smtp.gmail.com',\n 'email.config.port': 'Port',\n 'email.config.smtp.port.example': '587',\n 'email.config.username': 'Username',\n 'email.config.smtp.user.example': 'user@gmail.com',\n 'email.config.password': 'Password',\n 'email.config.smtp.password.example': 'App password',\n 'email.config.use.ssl.tls': 'Use SSL/TLS',\n 'email.config.sendgrid.settings': 'SendGrid Settings',\n 'email.config.api.key': 'API Key',\n 'email.config.api.key.example': 'API Key',\n 'email.config.mailgun.settings': 'Mailgun Settings',\n 'email.config.domain': 'Domain',\n 'email.config.domain.example': 'mg.example.com',\n 'email.config.region': 'Region',\n 'email.config.select.region': 'Select region',\n 'email.provider.smtp': 'SMTP',\n 'email.provider.sendgrid': 'SendGrid',\n 'email.provider.mailgun': 'Mailgun',\n 'email.region.us': 'US',\n 'email.region.eu': 'EU',\n\n // email-config-list.component.ts\n 'email.config.new': 'New Configuration',\n 'email.config.empty': 'No email configurations found',\n 'email.config.test.dialog.title': 'Test Email Configuration',\n 'email.config.configuration': 'Configuration',\n 'email.config.recipient.email': 'Recipient Email',\n 'email.recipient.example': 'recipient@example.com',\n 'email.config.test.dialog.hint':\n 'A test email will be sent to verify the configuration',\n 'email.config.send.test': 'Send Test',\n 'email.config.enter.recipient': 'Please enter a recipient email address',\n 'email.config.delete.title': 'Delete Configuration',\n 'email.config.test': 'Test Configuration',\n\n // template-form.component.ts\n 'email.template.edit.title': 'Edit Email Template',\n 'email.template.new.title': 'New Email Template',\n 'email.template.name': 'Template Name',\n 'email.template.name.example': 'e.g., Welcome Email',\n 'email.template.slug': 'Slug',\n 'email.template.slug.example': 'e.g., welcome-email',\n 'email.template.subject': 'Subject',\n 'email.template.subject.example': 'Enter email subject',\n 'email.template.variable.hint': 'Use {{variableName}} for dynamic content',\n 'email.template.desc': 'Description',\n 'email.template.desc.placeholder': 'Brief description of the template',\n 'email.template.content': 'Content',\n 'email.template.html': 'HTML',\n 'email.template.plain.text': 'Plain Text',\n 'email.template.html.placeholder': 'Enter HTML content',\n 'email.template.text': 'Text',\n 'email.template.text.placeholder': 'Enter plain text content',\n 'email.template.plain.text.hint':\n 'Plain text is used for email clients that do not support HTML',\n 'email.template.preview': 'Preview',\n 'email.template.live.preview': 'Live Preview',\n 'email.template.enter.html.preview': 'Enter HTML content to see preview',\n 'email.template.default.content': 'Enter your email content here...',\n\n // template-list.component.ts\n 'email.template.new': 'New Template',\n 'email.template.test.send': 'Send Test Email',\n 'email.template.empty': 'No email templates found',\n 'email.template.test.dialog.title': 'Test Email Template',\n 'email.template.template': 'Template',\n 'email.template.email.config': 'Email Configuration',\n 'email.template.select.config': 'Select a configuration',\n 'email.template.variables': 'Template Variables',\n 'email.template.enter.value.for': 'Enter value for {{variable}}',\n 'email.template.select.config.and.recipient':\n 'Please select an email configuration and enter a recipient',\n 'email.template.delete.title': 'Delete Template',\n};\n","/**\n * Supported email provider types\n */\nexport enum EmailProviderEnum {\n SMTP = 'smtp',\n SENDGRID = 'sendgrid',\n MAILGUN = 'mailgun',\n}\n","/**\n * Email content block types\n */\nexport enum EmailBlockType {\n TEXT = 'text',\n IMAGE = 'image',\n BUTTON = 'button',\n DIVIDER = 'divider',\n HTML = 'html',\n}\n","import { EmailBlockType } from '../enums/email-block-type.enum';\n\n/**\n * Email template variable types\n */\nexport type EmailVariableType = 'string' | 'number' | 'boolean' | 'date';\n\n/**\n * Email section types\n */\nexport type EmailSectionType = 'header' | 'body' | 'footer';\n\n/**\n * Email template variable definition\n */\nexport interface IEmailTemplateVariable {\n name: string;\n type: EmailVariableType;\n required?: boolean;\n defaultValue?: string;\n description?: string;\n}\n\n/**\n * Email section style\n */\nexport interface IEmailSectionStyle {\n backgroundColor?: string;\n padding?: string;\n maxWidth?: string;\n}\n\n/**\n * Email block style\n */\nexport interface IEmailBlockStyle {\n textAlign?: 'left' | 'center' | 'right';\n padding?: string;\n margin?: string;\n backgroundColor?: string;\n}\n\n/**\n * Text block content\n */\nexport interface ITextBlockContent {\n text: string;\n html?: string;\n}\n\n/**\n * Image block content\n */\nexport interface IImageBlockContent {\n src: string;\n alt?: string;\n link?: string;\n width?: string;\n height?: string;\n}\n\n/**\n * Button block content\n */\nexport interface IButtonBlockContent {\n text: string;\n link: string;\n backgroundColor?: string;\n textColor?: string;\n borderRadius?: string;\n}\n\n/**\n * Divider block content\n */\nexport interface IDividerBlockContent {\n height?: string;\n color?: string;\n style?: 'solid' | 'dashed' | 'dotted';\n}\n\n/**\n * HTML block content\n */\nexport interface IHtmlBlockContent {\n html: string;\n}\n\n/**\n * Block content union type\n */\nexport type EmailBlockContent =\n | ITextBlockContent\n | IImageBlockContent\n | IButtonBlockContent\n | IDividerBlockContent\n | IHtmlBlockContent;\n\n/**\n * Email content block\n */\nexport interface IEmailBlock {\n id: string;\n type: EmailBlockType;\n order: number;\n content: EmailBlockContent;\n style?: IEmailBlockStyle;\n}\n\n/**\n * Email section (header, body, footer)\n */\nexport interface IEmailSection {\n id: string;\n type: EmailSectionType;\n /** @deprecated Use nameKey for localization */\n name?: string;\n /** Translation key for the section name */\n nameKey: string;\n blocks: IEmailBlock[];\n order: number;\n style?: IEmailSectionStyle;\n}\n\n/**\n * Email schema settings\n */\nexport interface IEmailSettings {\n maxWidth?: string;\n backgroundColor?: string;\n fontFamily?: string;\n baseTextColor?: string;\n}\n\n/**\n * Full email schema structure\n */\nexport interface IEmailSchema {\n id: string;\n version: string;\n /** @deprecated Use nameKey for localization */\n name?: string;\n /** Translation key for the template name */\n nameKey: string;\n subject: string;\n preheader?: string;\n sections: IEmailSection[];\n variables?: IEmailTemplateVariable[];\n settings?: IEmailSettings;\n}\n\n/**\n * Default email settings\n */\nexport const DEFAULT_EMAIL_SETTINGS: IEmailSettings = {\n maxWidth: '600px',\n backgroundColor: '#f5f5f5',\n fontFamily: 'Arial, sans-serif',\n baseTextColor: '#333333',\n};\n\n/**\n * Create a new email schema with default sections\n */\nexport function createEmailSchema(partial: Partial<IEmailSchema> = {}): IEmailSchema {\n return {\n id: partial.id ?? crypto.randomUUID(),\n version: partial.version ?? '1.0.0',\n nameKey: partial.nameKey ?? 'email.template.untitled',\n subject: partial.subject ?? '',\n preheader: partial.preheader,\n sections: partial.sections ?? createDefaultSections(),\n variables: partial.variables ?? [],\n settings: { ...DEFAULT_EMAIL_SETTINGS, ...partial.settings },\n };\n}\n\n/**\n * Create default email sections (header, body, footer)\n */\nfunction createDefaultSections(): IEmailSection[] {\n return [\n { id: crypto.randomUUID(), type: 'header', nameKey: 'email.section.header', blocks: [], order: 0 },\n { id: crypto.randomUUID(), type: 'body', nameKey: 'email.section.body', blocks: [], order: 1 },\n { id: crypto.randomUUID(), type: 'footer', nameKey: 'email.section.footer', blocks: [], order: 2 },\n ];\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { APP_CONFIG, getServiceUrl, IAppConfig } from '@flusys/ng-core';\nimport { ApiResourceService, ISingleResponse } from '@flusys/ng-shared';\nimport { Observable } from 'rxjs';\nimport {\n ICreateEmailConfigDto,\n IEmailConfig,\n IUpdateEmailConfigDto,\n} from '../interfaces/email-config.interface';\nimport { ITestSendResult } from '../interfaces/email-send.interface';\n\n/**\n * Email Config API Service\n * Handles email configuration CRUD operations\n * Endpoint: POST /email/email-config/*\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class EmailConfigApiService extends ApiResourceService<\n ICreateEmailConfigDto | IUpdateEmailConfigDto,\n IEmailConfig\n> {\n private readonly appConfig = inject<IAppConfig>(APP_CONFIG);\n\n constructor() {\n super('email-config', inject(HttpClient), 'email');\n }\n\n /**\n * Send test email to verify configuration\n */\n sendTest(configId: string, recipient: string): Observable<ISingleResponse<ITestSendResult>> {\n const emailBaseUrl = getServiceUrl(this.appConfig, 'email');\n return this.http.post<ISingleResponse<ITestSendResult>>(\n `${emailBaseUrl}/send/test`,\n { emailConfigId: configId, recipient },\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ApiResourceService, ISingleResponse } from '@flusys/ng-shared';\nimport { ICreateEmailTemplateDto, IEmailTemplate, IUpdateEmailTemplateDto } from '../interfaces/email-template.interface';\nimport { Observable } from 'rxjs';\n\n/**\n * Email Template API Service\n * Handles email template CRUD operations\n * Endpoint: POST /email/email-template/*\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class EmailTemplateApiService extends ApiResourceService<\n ICreateEmailTemplateDto | IUpdateEmailTemplateDto,\n IEmailTemplate\n> {\n constructor() {\n super('email-template', inject(HttpClient), 'email');\n }\n\n /**\n * Get template by slug (POST-only RPC pattern)\n */\n getBySlug(slug: string): Observable<ISingleResponse<IEmailTemplate | null>> {\n return this.http.post<ISingleResponse<IEmailTemplate | null>>(\n `${this.baseUrl}/get-by-slug`,\n { slug },\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { APP_CONFIG, getServiceUrl, IAppConfig } from '@flusys/ng-core';\nimport { ISingleResponse } from '@flusys/ng-shared';\nimport { Observable } from 'rxjs';\nimport {\n ISendEmailDto,\n ISendTemplateEmailDto,\n ITestSendResult,\n} from '../interfaces/email-send.interface';\n\n/**\n * Email Send Service\n * Handles sending emails directly or using templates\n * Endpoint: POST /email/send/*\n *\n * Note: For testing configurations, use EmailConfigApiService.sendTest()\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class EmailSendService {\n private readonly http = inject(HttpClient);\n private readonly appConfig = inject<IAppConfig>(APP_CONFIG);\n private readonly baseUrl = `${getServiceUrl(this.appConfig, 'email')}/send`;\n\n /**\n * Send email directly (without template)\n */\n sendDirect(dto: ISendEmailDto): Observable<ISingleResponse<ITestSendResult>> {\n return this.http.post<ISingleResponse<ITestSendResult>>(\n `${this.baseUrl}/direct`,\n dto,\n );\n }\n\n /**\n * Send email using template\n */\n sendTemplate(dto: ISendTemplateEmailDto): Observable<ISingleResponse<ITestSendResult>> {\n return this.http.post<ISingleResponse<ITestSendResult>>(\n `${this.baseUrl}/template`,\n dto,\n );\n }\n}\n","import { Injectable, signal, computed } from '@angular/core';\nimport {\n IEmailSchema,\n IEmailSection,\n IEmailBlock,\n EmailBlockContent,\n createEmailSchema,\n DEFAULT_EMAIL_SETTINGS,\n} from '../interfaces/email-schema.interface';\nimport { EmailBlockType } from '../enums/email-block-type.enum';\n\n/**\n * Manages the email builder UI state including schema, selection, and UI toggles.\n * Should be provided at the EmailBuilder component level (not root).\n */\n@Injectable()\nexport class EmailBuilderStateService {\n // Schema state\n private readonly _schema = signal<IEmailSchema>(createEmailSchema());\n private readonly _isDirty = signal(false);\n\n // Selection state\n private readonly _selectedSectionId = signal<string | null>(null);\n private readonly _selectedBlockId = signal<string | null>(null);\n\n // View mode\n private readonly _viewMode = signal<'visual' | 'html'>('visual');\n\n // Public readonly signals\n readonly schema = this._schema.asReadonly();\n readonly isDirty = this._isDirty.asReadonly();\n readonly selectedSectionId = this._selectedSectionId.asReadonly();\n readonly selectedBlockId = this._selectedBlockId.asReadonly();\n readonly viewMode = this._viewMode.asReadonly();\n\n // Computed signals\n readonly sections = computed(() => this._schema().sections);\n readonly templateName = computed(() => this._schema().name);\n readonly subject = computed(() => this._schema().subject);\n readonly settings = computed(() => this._schema().settings ?? DEFAULT_EMAIL_SETTINGS);\n readonly variables = computed(() => this._schema().variables ?? []);\n\n readonly headerSection = computed((): IEmailSection | null => {\n return this.sections().find((s) => s.type === 'header') ?? null;\n });\n\n readonly bodySection = computed((): IEmailSection | null => {\n return this.sections().find((s) => s.type === 'body') ?? null;\n });\n\n readonly footerSection = computed((): IEmailSection | null => {\n return this.sections().find((s) => s.type === 'footer') ?? null;\n });\n\n readonly selectedSection = computed((): IEmailSection | null => {\n const sectionId = this._selectedSectionId();\n if (!sectionId) return null;\n return this.sections().find((s) => s.id === sectionId) ?? null;\n });\n\n readonly selectedBlock = computed((): IEmailBlock | null => {\n const blockId = this._selectedBlockId();\n if (!blockId) return null;\n for (const section of this.sections()) {\n const block = section.blocks.find((b) => b.id === blockId);\n if (block) return block;\n }\n return null;\n });\n\n readonly allBlocks = computed((): IEmailBlock[] => {\n return this.sections().flatMap((s) => s.blocks);\n });\n\n // =========================================\n // Schema Operations\n // =========================================\n\n /**\n * Load an existing schema into the builder\n */\n loadSchema(schema: IEmailSchema): void {\n const cloned = structuredClone(schema);\n this._schema.set(cloned);\n this._isDirty.set(false);\n this._selectedSectionId.set(null);\n this._selectedBlockId.set(null);\n }\n\n /**\n * Create a new empty schema\n */\n createNewSchema(name = ''): void {\n this._schema.set(createEmailSchema({ name }));\n this._isDirty.set(true);\n this._selectedSectionId.set(null);\n this._selectedBlockId.set(null);\n }\n\n /**\n * Update template metadata\n */\n updateSchemaMeta(\n updates: Partial<Pick<IEmailSchema, 'name' | 'subject' | 'preheader' | 'settings' | 'variables'>>,\n ): void {\n this._schema.update((schema) => ({\n ...schema,\n ...updates,\n }));\n this._isDirty.set(true);\n }\n\n /**\n * Mark schema as saved (clears dirty flag)\n */\n markAsSaved(): void {\n this._isDirty.set(false);\n }\n\n /**\n * Set view mode (visual or html)\n */\n setViewMode(mode: 'visual' | 'html'): void {\n this._viewMode.set(mode);\n }\n\n // =========================================\n // Section Operations\n // =========================================\n\n /**\n * Update section properties\n */\n updateSection(sectionId: string, updates: Partial<IEmailSection>): void {\n this._schema.update((schema) => ({\n ...schema,\n sections: schema.sections.map((s) =>\n s.id === sectionId ? { ...s, ...updates } : s,\n ),\n }));\n this._isDirty.set(true);\n }\n\n // =========================================\n // Block Operations\n // =========================================\n\n /**\n * Add a new block to a section\n */\n addBlock(\n sectionId: string,\n blockType: EmailBlockType,\n block?: Partial<IEmailBlock>,\n ): string | null {\n const newBlock: IEmailBlock = {\n id: crypto.randomUUID(),\n type: blockType,\n order: 0,\n content: this.getDefaultContent(blockType),\n ...block,\n };\n\n this._schema.update((schema) => ({\n ...schema,\n sections: schema.sections.map((s) => {\n if (s.id !== sectionId) return s;\n const blocks = [...s.blocks, newBlock];\n this.reindexBlocks(blocks);\n return { ...s, blocks };\n }),\n }));\n\n this._isDirty.set(true);\n return newBlock.id;\n }\n\n /**\n * Update block properties\n */\n updateBlock(sectionId: string, blockId: string, updates: Partial<IEmailBlock>): void {\n this._schema.update((schema) => ({\n ...schema,\n sections: schema.sections.map((s) => {\n if (s.id !== sectionId) return s;\n return {\n ...s,\n blocks: s.blocks.map((b) => (b.id === blockId ? { ...b, ...updates } : b)),\n };\n }),\n }));\n this._isDirty.set(true);\n }\n\n /**\n * Delete a block from a section\n */\n deleteBlock(sectionId: string, blockId: string): void {\n this._schema.update((schema) => ({\n ...schema,\n sections: schema.sections.map((s) => {\n if (s.id !== sectionId) return s;\n const blocks = s.blocks.filter((b) => b.id !== blockId);\n this.reindexBlocks(blocks);\n return { ...s, blocks };\n }),\n }));\n this._isDirty.set(true);\n\n // Clear selection if deleted block was selected\n if (this._selectedBlockId() === blockId) {\n this._selectedBlockId.set(null);\n }\n }\n\n /**\n * Reorder blocks within a section\n */\n reorderBlocks(sectionId: string, fromIndex: number, toIndex: number): void {\n this._schema.update((schema) => ({\n ...schema,\n sections: schema.sections.map((s) => {\n if (s.id !== sectionId) return s;\n const blocks = [...s.blocks];\n const [removed] = blocks.splice(fromIndex, 1);\n blocks.splice(toIndex, 0, removed);\n this.reindexBlocks(blocks);\n return { ...s, blocks };\n }),\n }));\n this._isDirty.set(true);\n }\n\n /**\n * Duplicate a block\n */\n duplicateBlock(sectionId: string, blockId: string): string | null {\n const section = this.sections().find((s) => s.id === sectionId);\n const block = section?.blocks.find((b) => b.id === blockId);\n if (!block) return null;\n\n const newBlock: IEmailBlock = {\n ...structuredClone(block),\n id: crypto.randomUUID(),\n };\n\n this._schema.update((schema) => ({\n ...schema,\n sections: schema.sections.map((s) => {\n if (s.id !== sectionId) return s;\n const blockIndex = s.blocks.findIndex((b) => b.id === blockId);\n const blocks = [...s.blocks];\n blocks.splice(blockIndex + 1, 0, newBlock);\n this.reindexBlocks(blocks);\n return { ...s, blocks };\n }),\n }));\n\n this._isDirty.set(true);\n return newBlock.id;\n }\n\n // =========================================\n // Selection Operations\n // =========================================\n\n /**\n * Select a section\n */\n selectSection(sectionId: string | null): void {\n this._selectedSectionId.set(sectionId);\n this._selectedBlockId.set(null);\n }\n\n /**\n * Select a block\n */\n selectBlock(blockId: string | null): void {\n if (blockId) {\n // Find the section containing this block\n for (const section of this.sections()) {\n if (section.blocks.some((b) => b.id === blockId)) {\n this._selectedSectionId.set(section.id);\n break;\n }\n }\n }\n this._selectedBlockId.set(blockId);\n }\n\n /**\n * Clear all selection\n */\n clearSelection(): void {\n this._selectedSectionId.set(null);\n this._selectedBlockId.set(null);\n }\n\n // =========================================\n // Helper Methods\n // =========================================\n\n /**\n * Get default content for a block type.\n * Note: Text content is intentionally empty - UI should display translated placeholders.\n */\n private getDefaultContent(type: EmailBlockType): EmailBlockContent {\n switch (type) {\n case EmailBlockType.TEXT:\n return { text: '', html: '' };\n case EmailBlockType.IMAGE:\n return { src: '', alt: '' };\n case EmailBlockType.BUTTON:\n return {\n text: '',\n link: '',\n backgroundColor: '#007bff',\n textColor: '#ffffff',\n borderRadius: '4px',\n };\n case EmailBlockType.DIVIDER:\n return { height: '1px', color: '#cccccc', style: 'solid' };\n case EmailBlockType.HTML:\n return { html: '' };\n default:\n return { text: '' };\n }\n }\n\n /**\n * Reindex block order values after add/remove/reorder\n */\n private reindexBlocks(blocks: IEmailBlock[]): void {\n blocks.forEach((b, i) => (b.order = i));\n }\n}\n","import { Routes } from '@angular/router';\nimport {\n EMAIL_CONFIG_PERMISSIONS,\n EMAIL_TEMPLATE_PERMISSIONS,\n permissionGuard,\n SHARED_MESSAGES,\n resolveTranslationModule,\n} from '@flusys/ng-shared';\nimport { EMAIL_MESSAGES } from '../constants/messages';\n\n/**\n * Email Module Routes\n * All routes protected by permission guards\n */\nexport const EMAIL_ROUTES: Routes = [\n {\n path: '',\n resolve: { translations: resolveTranslationModule({ modules: ['email'], fallbackMessages: { ...EMAIL_MESSAGES, ...SHARED_MESSAGES } }) },\n loadComponent: () =>\n import('../pages/email-container/email-container.component').then(\n (m) => m.EmailContainerComponent,\n ),\n children: [\n // Template Routes\n {\n path: 'templates',\n canActivate: [permissionGuard(EMAIL_TEMPLATE_PERMISSIONS.READ)],\n children: [\n {\n path: '',\n loadComponent: () =>\n import('../pages/template/template-list.component').then(\n (m) => m.TemplateListComponent,\n ),\n },\n {\n path: 'new',\n canActivate: [permissionGuard(EMAIL_TEMPLATE_PERMISSIONS.CREATE)],\n loadComponent: () =>\n import('../pages/template/template-form.component').then(\n (m) => m.TemplateFormComponent,\n ),\n },\n {\n path: ':id',\n canActivate: [permissionGuard(EMAIL_TEMPLATE_PERMISSIONS.UPDATE)],\n loadComponent: () =>\n import('../pages/template/template-form.component').then(\n (m) => m.TemplateFormComponent,\n ),\n },\n ],\n },\n\n // Config Routes\n {\n path: 'configs',\n canActivate: [permissionGuard(EMAIL_CONFIG_PERMISSIONS.READ)],\n children: [\n {\n path: '',\n loadComponent: () =>\n import('../pages/config/email-config-list.component').then(\n (m) => m.EmailConfigListComponent,\n ),\n },\n {\n path: 'new',\n canActivate: [permissionGuard(EMAIL_CONFIG_PERMISSIONS.CREATE)],\n loadComponent: () =>\n import('../pages/config/email-config-form.component').then(\n (m) => m.EmailConfigFormComponent,\n ),\n },\n {\n path: ':id',\n canActivate: [permissionGuard(EMAIL_CONFIG_PERMISSIONS.UPDATE)],\n loadComponent: () =>\n import('../pages/config/email-config-form.component').then(\n (m) => m.EmailConfigFormComponent,\n ),\n },\n ],\n },\n\n // Default redirect\n { path: '', redirectTo: 'templates', pathMatch: 'full' },\n ],\n },\n];\n","import { Component, computed, inject } from '@angular/core';\nimport { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';\nimport {\n EMAIL_CONFIG_PERMISSIONS,\n EMAIL_TEMPLATE_PERMISSIONS,\n PermissionValidatorService,\n TranslatePipe,\n} from '@flusys/ng-shared';\n\ninterface ITab {\n id: string;\n labelKey: string;\n icon: string;\n route: string;\n permission: string;\n}\n\n/**\n * Email container component with tab navigation\n * Filters tabs based on user permissions\n */\n@Component({\n selector: 'lib-email-container',\n imports: [RouterOutlet, RouterLink, RouterLinkActive, TranslatePipe],\n styles: `\n .scrollbar-hide {\n -ms-overflow-style: none;\n scrollbar-width: none;\n &::-webkit-scrollbar { display: none; }\n }\n `,\n template: `\n <div class=\"p-2 sm:p-4\">\n <div class=\"mb-4\">\n <h1 class=\"text-xl sm:text-2xl font-bold m-0\">{{ 'email.title' | translate }}</h1>\n <p class=\"text-sm text-muted-color mt-1\">{{ 'email.subtitle' | translate }}</p>\n </div>\n\n <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\">\n @for (tab of visibleTabs(); track tab.id) {\n <a\n [routerLink]=\"tab.route\"\n routerLinkActive=\"tab-active\"\n [routerLinkActiveOptions]=\"{ exact: false }\"\n 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\">\n <i [class]=\"tab.icon\"></i>\n <span>{{ tab.labelKey | translate }}</span>\n </a>\n }\n </div>\n\n <router-outlet />\n </div>\n `,\n})\nexport class EmailContainerComponent {\n private readonly permissionValidator = inject(PermissionValidatorService);\n\n /** All available tabs */\n private readonly allTabs: ITab[] = [\n {\n id: 'templates',\n labelKey: 'email.template.title',\n icon: 'pi pi-file',\n route: 'templates',\n permission: EMAIL_TEMPLATE_PERMISSIONS.READ,\n },\n {\n id: 'configs',\n labelKey: 'email.config.title',\n icon: 'pi pi-cog',\n route: 'configs',\n permission: EMAIL_CONFIG_PERMISSIONS.READ,\n },\n ];\n\n /** Visible tabs based on user permissions */\n readonly visibleTabs = computed(() =>\n this.allTabs.filter((tab) => this.permissionValidator.hasPermission(tab.permission)),\n );\n}\n","// =============================================================================\n// @flusys/ng-email - Email Package\n// =============================================================================\n\n// Constants\nexport * from './constants/messages';\n\n// Enums\nexport * from './enums/public-api';\n\n// Interfaces\nexport * from './interfaces/public-api';\n\n// Services\nexport { EmailConfigApiService } from './services/email-config-api.service';\nexport { EmailTemplateApiService } from './services/email-template-api.service';\nexport { EmailSendService } from './services/email-send.service';\nexport { EmailBuilderStateService } from './services/email-builder-state.service';\n\n// Routes\nexport { EMAIL_ROUTES } from './routes/email.routes';\n\n// Components\nexport { EmailContainerComponent } from './pages/email-container/email-container.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flusys/ng-email",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "Email management module for FLUSYS Angular applications",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"peerDependencies": {
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
"@angular/core": ">=21.0.0",
|
|
9
9
|
"@angular/forms": ">=21.0.0",
|
|
10
10
|
"@angular/router": ">=21.0.0",
|
|
11
|
-
"@flusys/ng-core": ">=
|
|
12
|
-
"@flusys/ng-layout": ">=
|
|
13
|
-
"@flusys/ng-shared": ">=
|
|
11
|
+
"@flusys/ng-core": ">=5.0.0",
|
|
12
|
+
"@flusys/ng-layout": ">=5.0.0",
|
|
13
|
+
"@flusys/ng-shared": ">=5.0.0",
|
|
14
14
|
"@primeuix/themes": ">=1.0.0",
|
|
15
15
|
"primeicons": ">=7.0.0",
|
|
16
16
|
"primeng": ">=21.0.0",
|
|
@@ -244,7 +244,6 @@ interface IEmailTemplate extends IBaseEntity {
|
|
|
244
244
|
schemaVersion: number;
|
|
245
245
|
isActive: boolean;
|
|
246
246
|
isHtml: boolean;
|
|
247
|
-
metadata: Record<string, unknown> | null;
|
|
248
247
|
companyId?: string | null;
|
|
249
248
|
}
|
|
250
249
|
/**
|
|
@@ -260,7 +259,6 @@ interface ICreateEmailTemplateDto {
|
|
|
260
259
|
textContent?: string;
|
|
261
260
|
isActive?: boolean;
|
|
262
261
|
isHtml?: boolean;
|
|
263
|
-
metadata?: Record<string, unknown>;
|
|
264
262
|
}
|
|
265
263
|
/**
|
|
266
264
|
* Update email template DTO
|