ngx-email-builder 1.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 +101 -0
- package/fesm2022/ngx-email-builder.mjs +5116 -0
- package/fesm2022/ngx-email-builder.mjs.map +1 -0
- package/index.d.ts +429 -0
- package/package.json +46 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-email-builder.mjs","sources":["../../src/email-builder-storage.service.ts","../../src/version.ts","../../src/version.service.ts","../../src/components/email-builder-footer.component.ts","../../src/components/email-builder-header.component.ts","../../src/components/email-builder-inspector.component.ts","../../src/components/email-builder-sidebar.component.ts","../../src/components/email-builder-template-drawer.component.ts","../../src/shared/components/code-editor/code-editor.component.ts","../../src/components/email-template-canvas.component.ts","../../src/email-template-builder.library.ts","../../src/email-template-builder.templates.ts","../../src/email-template-builder.component.ts","../../src/email-template-builder.component.html","../../src/ngx-email-builder.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nexport interface EmailBuilderApiConfig {\n baseUrl?: string;\n headers?: Record<string, string>;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EmailBuilderStorageService {\n private http = inject(HttpClient);\n private apiUrl = 'https://mail.api.nowmail.in/api';\n private config: EmailBuilderApiConfig | null = null;\n\n setConfig(config: EmailBuilderApiConfig) {\n this.config = config;\n }\n\n private generateUniqueId(length: number): string {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n }\n\n private getSystemSessionId(): string {\n // sessionStorage is safer than localStorage as it clears when the tab is closed,\n // but unlike a private property, it survives page reloads (HMR/F5).\n const OBSCURE_KEY = '_0x1a2b3c';\n let sessionId = sessionStorage.getItem(OBSCURE_KEY);\n if (!sessionId || sessionId.length !== 32) {\n sessionId = this.generateUniqueId(32);\n sessionStorage.setItem(OBSCURE_KEY, sessionId);\n }\n return sessionId;\n }\n\n private getHeaders(): HttpHeaders {\n let headers = new HttpHeaders({\n 'x-system-session-id': this.getSystemSessionId()\n });\n\n if (this.config?.headers) {\n Object.entries(this.config.headers).forEach(([key, value]) => {\n headers = headers.set(key, value);\n });\n }\n\n return headers;\n }\n\n saveTemplate(data: any): Observable<any> {\n const baseUrl = this.config?.baseUrl || this.apiUrl;\n return this.http.post(`${baseUrl}/email-template-builder/save`, data, {\n headers: this.getHeaders()\n });\n }\n\n listTemplates(): Observable<any> {\n const baseUrl = this.config?.baseUrl || this.apiUrl;\n return this.http.get(`${baseUrl}/email-template-builder/list`, {\n headers: this.getHeaders()\n });\n }\n\n getTemplate(id: string): Observable<any> {\n const baseUrl = this.config?.baseUrl || this.apiUrl;\n return this.http.get(`${baseUrl}/email-template-builder/${id}`, {\n headers: this.getHeaders()\n });\n }\n\n deleteTemplate(id: string): Observable<any> {\n const baseUrl = this.config?.baseUrl || this.apiUrl;\n return this.http.delete(`${baseUrl}/email-template-builder/${id}`, {\n headers: this.getHeaders()\n });\n }\n}\n","export const LIB_VERSION = '1.0.0';\n","import { Injectable } from '@angular/core';\nimport { catchError, map, of, from, switchMap } from 'rxjs';\nimport Swal from 'sweetalert2';\nimport { LIB_VERSION } from './version';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class VersionService {\n readonly currentVersion = LIB_VERSION;\n private readonly registryUrl = 'https://registry.npmjs.org/ngx-email-builder/latest';\n\n checkVersion(): void {\n this.getLatestVersion().subscribe(latestVersion => {\n if (latestVersion && this.isNewer(latestVersion, this.currentVersion)) {\n this.showUpdateWarning(latestVersion);\n }\n });\n }\n\n private getLatestVersion() {\n // Use native fetch only to avoid HttpClient CORS/interceptor issues\n return from(fetch(this.registryUrl)).pipe(\n switchMap(res => res.ok ? from(res.json()) : of(null)),\n map((res: any) => res?.version),\n catchError(() => of(null))\n );\n }\n\n private isNewer(latest: string, current: string): boolean {\n const l = latest.split('.').map(Number);\n const c = current.split('.').map(Number);\n\n for (let i = 0; i < 3; i++) {\n if (l[i] > c[i]) return true;\n if (l[i] < c[i]) return false;\n }\n return false;\n }\n\n private showUpdateWarning(latestVersion: string): void {\n Swal.fire({\n title: 'Update Available!',\n html: `A newer version (v${latestVersion}) of <b>ngx-email-builder</b> is available.<br>Current version: v${this.currentVersion}`,\n icon: 'info',\n confirmButtonText: 'Upgrade Now',\n showCancelButton: true,\n cancelButtonText: 'Later',\n confirmButtonColor: '#1167ff',\n cancelButtonColor: '#64748b',\n background: '#111c2e',\n color: '#ffffff'\n }).then((result) => {\n if (result.isConfirmed) {\n window.open('https://github.com/jd-ashish/ngx-email-builder', '_blank');\n }\n });\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'app-email-builder-footer',\n standalone: true,\n template: `\n <footer class=\"status-bar\">\n <div class=\"status-left\">\n <span class=\"status-indicator\" [class.saving]=\"isSaving\"></span>\n <span class=\"status-text\">Status: {{ isSaving ? 'Saving...' : 'Ready' }}</span>\n <span class=\"save-time\">Last saved: {{ lastSaved }}</span>\n </div>\n \n <div class=\"status-center\">\n <a href=\"https://nowmail.in\" target=\"_blank\" class=\"powered-by\">\n Powered by <span>NowMail</span>\n </a>\n </div>\n \n <div class=\"status-right\">\n <div class=\"save-mode-toggle\" (click)=\"toggleAutoSave()\">\n <span class=\"toggle-label\">{{ autoSaveEnabled ? 'Auto Save' : 'Manual Save' }}</span>\n <div class=\"toggle-track\" [class.enabled]=\"autoSaveEnabled\">\n <div class=\"toggle-thumb\"></div>\n </div>\n </div>\n <span class=\"stats\">{{ blockCount }} blocks · {{ variableCount }} variables</span>\n <div class=\"version-tag\">v{{ version }}</div>\n </div>\n </footer>\n `,\n})\nexport class EmailBuilderFooterComponent {\n @Input({ required: true }) version!: string;\n @Input() isSaving = false;\n @Input({ required: true }) autoSaveEnabled = true;\n @Input({ required: true }) lastSaved!: string;\n @Input({ required: true }) blockCount!: number;\n @Input({ required: true }) variableCount!: number;\n\n @Output() autoSaveToggle = new EventEmitter<boolean>();\n\n toggleAutoSave(): void {\n this.autoSaveToggle.emit(!this.autoSaveEnabled);\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { EditorView, ViewportSize } from '../email-template-builder.models';\n\n@Component({\n selector: 'app-email-builder-header',\n standalone: true,\n imports: [FormsModule],\n template: `\n <header class=\"builder-topbar\">\n <div class=\"brand-cluster\">\n <div class=\"brand-mark\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 302.041 294.626\" class=\"logo-svg\">\n <defs>\n <linearGradient data-v-fde0c5aa=\"\" gradientTransform=\"rotate(25)\" id=\"logo-gradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop data-v-fde0c5aa=\"\" offset=\"0\" stop-color=\"#5F2517\" stop-opacity=\"1\"/>\n <stop data-v-fde0c5aa=\"\" offset=\"1\" stop-color=\"#CAB08D\" stop-opacity=\"1\"/>\n </linearGradient>\n </defs>\n <g data-v-fde0c5aa=\"\" id=\"logo-group\" stroke=\"none\" fill=\"url(#logo-gradient)\" transform=\"matrix(2.71537, 0, 0, 3.20261, 16.46262, -17.726465)\">\n <path d=\"M28.696 37.22a4.55 4.55 0 01-4.55 4.546H13.537a4.554 4.554 0 01-4.55-4.546c0-2.51 2.041-4.55 4.55-4.55h10.609c2.514 0 4.55 2.04 4.55 4.55zM40.332 53.107a4.55 4.55 0 01-4.55 4.546H25.173a4.554 4.554 0 01-4.55-4.546c0-2.51 2.041-4.55 4.55-4.55h10.609a4.552 4.552 0 014.55 4.55zM51.239 68.996a4.55 4.55 0 01-4.55 4.546H36.08a4.554 4.554 0 01-4.55-4.546 4.555 4.555 0 014.55-4.551h10.609a4.552 4.552 0 014.55 4.551z\"/>\n <path d=\"M83.101 12.878H17.026c-.038 0-.068-.021-.106-.021H6.311a4.555 4.555 0 00-4.55 4.55 4.554 4.554 0 004.55 4.546H24.504l23.268 23.574c6.059 6.14 15.973 6.203 22.112.145l19.429-19.173c.209.639.35 1.308.35 2.015v45.683a6.57 6.57 0 01-6.562 6.562H55.624c-.072-.005-.133-.043-.209-.043H44.806a4.555 4.555 0 00-4.55 4.551 4.554 4.554 0 004.55 4.546h2.625v.021h35.67c8.624 0 15.637-7.013 15.637-15.636V28.514c-.001-8.623-7.013-15.636-15.637-15.636zm-19.59 26.335c-2.574 2.543-6.741 2.514-9.28-.06l-16.979-17.2h43.744l-17.485 17.26z\"/>\n </g>\n </svg>\n </div>\n <div>\n <input \n type=\"text\" \n class=\"template-name-input\" \n [ngModel]=\"templateName\" \n (ngModelChange)=\"templateNameChange.emit($event)\"\n placeholder=\"Untitled Template\" />\n <p>Design, preview and export reusable email HTML</p>\n </div>\n </div>\n\n <div class=\"topbar-actions\">\n <div class=\"viewport-toggle\" aria-label=\"Preview size\">\n <button\n type=\"button\"\n [class.active]=\"viewport === 'desktop'\"\n (click)=\"viewportChange.emit('desktop')\"\n title=\"Desktop preview\">\n <span class=\"material-symbols-outlined\">desktop_windows</span>\n </button>\n <button\n type=\"button\"\n [class.active]=\"viewport === 'tablet'\"\n (click)=\"viewportChange.emit('tablet')\"\n title=\"Tablet preview\">\n <span class=\"material-symbols-outlined\">tablet</span>\n </button>\n <button\n type=\"button\"\n [class.active]=\"viewport === 'mobile'\"\n (click)=\"viewportChange.emit('mobile')\"\n title=\"Mobile preview\">\n <span class=\"material-symbols-outlined\">smartphone</span>\n </button>\n </div>\n <button type=\"button\" class=\"ghost-button\" (click)=\"openMyTemplates.emit()\">\n <span class=\"material-symbols-outlined\">folder_open</span>\n My Templates\n </button>\n <button type=\"button\" class=\"ghost-button\" (click)=\"previewModeChange.emit(!previewMode)\">\n <span class=\"material-symbols-outlined\">{{ previewMode ? 'edit' : 'visibility' }}</span>\n {{ previewMode ? 'Edit' : 'Preview' }}\n </button>\n <button\n type=\"button\"\n class=\"ghost-button\"\n [class.active-button]=\"editorView === 'source'\"\n (click)=\"editorViewChange.emit(editorView === 'source' ? 'canvas' : 'source')\">\n <span class=\"material-symbols-outlined\">code</span>\n {{ editorView === 'source' ? 'Canvas' : 'Source' }}\n </button>\n <button type=\"button\" class=\"ghost-button danger-text\" (click)=\"clearCanvas.emit()\">\n <span class=\"material-symbols-outlined\">delete_sweep</span>\n Clear\n </button>\n <button type=\"button\" class=\"ghost-button\" (click)=\"copyTemplate.emit()\">\n <span class=\"material-symbols-outlined\">content_copy</span>\n Copy HTML\n </button>\n <button type=\"button\" class=\"ghost-button\" (click)=\"saveTemplate.emit()\">\n <span class=\"material-symbols-outlined\">cloud_done</span>\n Save\n </button>\n <button type=\"button\" class=\"primary-button\" (click)=\"exportTemplate.emit()\">\n <span class=\"material-symbols-outlined\">download</span>\n Export\n </button>\n </div>\n </header>\n `,\n})\nexport class EmailBuilderHeaderComponent {\n @Input({ required: true }) viewport!: ViewportSize;\n @Input({ required: true }) previewMode!: boolean;\n @Input({ required: true }) editorView!: EditorView;\n\n @Input({ required: true }) templateName!: string;\n\n @Output() viewportChange = new EventEmitter<ViewportSize>();\n @Output() previewModeChange = new EventEmitter<boolean>();\n @Output() editorViewChange = new EventEmitter<EditorView>();\n @Output() copyTemplate = new EventEmitter<void>();\n @Output() saveTemplate = new EventEmitter<void>();\n @Output() clearCanvas = new EventEmitter<void>();\n @Output() exportTemplate = new EventEmitter<void>();\n @Output() templateNameChange = new EventEmitter<string>();\n @Output() openMyTemplates = new EventEmitter<void>();\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, Input, Output, ViewChild, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n BlockUpdate,\n TemplateBlock,\n TemplateVariable,\n VariableUpdate,\n} from '../email-template-builder.models';\n\n@Component({\n selector: 'app-email-builder-inspector',\n standalone: true,\n imports: [FormsModule, CommonModule],\n template: `\n <div class=\"inspector-tabs-container\">\n <div class=\"inspector-main-content\">\n <section class=\"panel-section inspector-header\">\n <div class=\"section-title\">\n <span>Inspector</span>\n </div>\n\n @if (block) {\n <div class=\"selected-card\">\n <span class=\"material-symbols-outlined\">{{ block.icon }}</span>\n <div>\n <strong>{{ block.label }}</strong>\n <small>{{ block.type }} block</small>\n </div>\n </div>\n }\n </section>\n\n @if (block) {\n <div class=\"inspector-tab-content\" (click)=\"onPanelClick($event)\">\n @if (selectedTab === 'basics') {\n <section class=\"panel-section controls active-tab-panel\">\n <label>\n <span>Layer Name</span>\n <input\n type=\"text\"\n [ngModel]=\"block.label\"\n (ngModelChange)=\"update.emit({ key: 'label', value: $event })\" />\n </label>\n\n @if (block.type === 'hero' || block.type === 'image') {\n <label class=\"mt-3\">\n <span>Image URL</span>\n <div class=\"url-upload-group\">\n <input\n type=\"url\"\n [ngModel]=\"block.imageUrl\"\n (ngModelChange)=\"update.emit({ key: 'imageUrl', value: $event })\" />\n <button type=\"button\" class=\"upload-btn\" (click)=\"fileInput.click()\" title=\"Upload Image\">\n <span class=\"material-symbols-outlined\">upload</span>\n </button>\n <input\n #fileInput\n type=\"file\"\n accept=\"image/*\"\n class=\"hidden-file-input\"\n (change)=\"onFileSelected($event)\" />\n </div>\n </label>\n }\n\n @if (block.type === 'hero' || block.type === 'text' || block.type === 'header' || block.type === 'quote' || block.type === 'coupon' || block.type === 'list') {\n <div class=\"input-with-tooltip mt-3\">\n <label>\n <span>{{ block.type === 'quote' ? 'Attribution' : 'Title' }}</span>\n <input\n #titleInput\n type=\"text\"\n [ngModel]=\"block.title\"\n (focus)=\"onFieldFocus('title', titleInput)\"\n (click)=\"updateCursor(titleInput)\"\n (keyup)=\"updateCursor(titleInput)\"\n (keydown.escape)=\"showVariablePicker.set(false)\"\n (ngModelChange)=\"update.emit({ key: 'title', value: $event })\" />\n </label>\n @if (showVariablePicker() && activeFieldName === 'title') {\n <ng-container *ngTemplateOutlet=\"variablePicker\"></ng-container>\n }\n </div>\n }\n\n @if (block.type !== 'divider' && block.type !== 'spacer' && block.type !== 'columns') {\n <div class=\"input-with-tooltip mt-3\">\n <label>\n <span>{{ block.type === 'button' ? 'Button Text' : block.type === 'paragraph' ? 'Paragraph Text' : 'Body Text' }}</span>\n <textarea\n #textInput\n rows=\"4\"\n [ngModel]=\"block.text\"\n (focus)=\"onFieldFocus('text', textInput)\"\n (blur)=\"showVariablePicker.set(false)\"\n (click)=\"updateCursor(textInput)\"\n (keyup)=\"updateCursor(textInput)\"\n (keydown.escape)=\"showVariablePicker.set(false)\"\n (ngModelChange)=\"update.emit({ key: 'text', value: $event })\"></textarea>\n </label>\n @if (showVariablePicker() && activeFieldName === 'text') {\n <ng-container *ngTemplateOutlet=\"variablePicker\"></ng-container>\n }\n </div>\n }\n\n @if (block.type === 'coupon') {\n <label class=\"mt-3\">\n <span>Coupon Note</span>\n <textarea\n rows=\"3\"\n [ngModel]=\"block.secondaryText\"\n (focus)=\"focusField.emit('secondaryText')\"\n (ngModelChange)=\"update.emit({ key: 'secondaryText', value: $event })\"></textarea>\n </label>\n }\n\n @if (block.type === 'columns') {\n <label class=\"mt-3\">\n <span>Columns: {{ block.columnCount }}</span>\n <input\n type=\"range\"\n min=\"1\"\n max=\"12\"\n [ngModel]=\"block.columnCount\"\n (ngModelChange)=\"update.emit({ key: 'columnCount', value: +$event })\" />\n </label>\n }\n\n @if (block.type === 'button' || block.type === 'header') {\n <label class=\"mt-3\">\n <span>Destination URL</span>\n <input\n type=\"url\"\n [ngModel]=\"block.url\"\n (ngModelChange)=\"update.emit({ key: 'url', value: $event })\" />\n </label>\n }\n\n <div class=\"control-group mt-3\">\n <span>Colors</span>\n <label class=\"color-row\">\n <span>Background</span>\n <input\n type=\"color\"\n [value]=\"block.backgroundColor || '#ffffff'\"\n (input)=\"update.emit({ key: 'backgroundColor', value: $any($event.target).value })\" />\n </label>\n\n @if (block.type === 'hero' || block.type === 'text' || block.type === 'header' || block.type === 'quote' || block.type === 'coupon' || block.type === 'list') {\n <label class=\"color-row\">\n <span>Title Color</span>\n <input\n type=\"color\"\n [value]=\"block.titleColor || '#111827'\"\n (input)=\"update.emit({ key: 'titleColor', value: $any($event.target).value })\" />\n </label>\n }\n\n @if (block.type === 'button') {\n <label class=\"color-row\">\n <span>Button Fill</span>\n <input\n type=\"color\"\n [value]=\"block.buttonColor || '#1167ff'\"\n (input)=\"update.emit({ key: 'buttonColor', value: $any($event.target).value })\" />\n </label>\n <label class=\"color-row\">\n <span>Button Text</span>\n <input\n type=\"color\"\n [value]=\"block.buttonTextColor || '#ffffff'\"\n (input)=\"update.emit({ key: 'buttonTextColor', value: $any($event.target).value })\" />\n </label>\n } @else if (block.type === 'divider') {\n <label class=\"color-row\">\n <span>Line Color</span>\n <input\n type=\"color\"\n [value]=\"block.textColor || '#dbe3ef'\"\n (input)=\"update.emit({ key: 'textColor', value: $any($event.target).value })\" />\n </label>\n } @else {\n <label class=\"color-row\">\n <span>Text Color</span>\n <input\n type=\"color\"\n [value]=\"block.textColor || '#111827'\"\n (input)=\"update.emit({ key: 'textColor', value: $any($event.target).value })\" />\n </label>\n }\n </div>\n\n <label class=\"mt-3\">\n <span>Padding: {{ block.padding }}px</span>\n <input\n type=\"range\"\n min=\"0\"\n max=\"72\"\n [ngModel]=\"block.padding\"\n (ngModelChange)=\"update.emit({ key: 'padding', value: +$event })\" />\n </label>\n\n <div class=\"control-group mt-3\">\n <span>Text Alignment</span>\n <div class=\"segmented-control\">\n @for (align of textAlignments; track align.value) {\n <button\n type=\"button\"\n [class.active]=\"block.textAlign === align.value\"\n (click)=\"update.emit({ key: 'textAlign', value: align.value })\">\n <span class=\"material-symbols-outlined\">{{ align.icon }}</span>\n </button>\n }\n </div>\n </div>\n\n @if (block.type === 'button' || block.type === 'coupon') {\n <label class=\"mt-3\">\n <span>Corner Radius: {{ block.radius }}px</span>\n <input\n type=\"range\"\n min=\"0\"\n max=\"32\"\n [ngModel]=\"block.radius\"\n (ngModelChange)=\"update.emit({ key: 'radius', value: +$event })\" />\n </label>\n }\n\n @if (block.type === 'social') {\n <div class=\"control-group\">\n <p class=\"tab-hint\">Social links have been moved to the Social tab.</p>\n </div>\n }\n </section>\n }\n\n @if (selectedTab === 'social' && block.type === 'social') {\n <section class=\"panel-section controls active-tab-panel\">\n <div class=\"control-group social-links-manager\">\n <div class=\"section-title compact-title\">\n <span>Social Links</span>\n <button type=\"button\" class=\"mini-action\" (click)=\"addSocialLink()\">Add</button>\n </div>\n <div class=\"social-links-list\">\n @for (link of block.socialLinks; track $index; let i = $index) {\n <div class=\"social-link-item\">\n <div class=\"link-row\">\n <select\n aria-label=\"Platform\"\n [ngModel]=\"link.type\"\n (ngModelChange)=\"updateSocialLink(i, 'type', $event)\">\n <option value=\"facebook\">Facebook</option>\n <option value=\"twitter\">Twitter</option>\n <option value=\"instagram\">Instagram</option>\n <option value=\"linkedin\">LinkedIn</option>\n <option value=\"youtube\">YouTube</option>\n <option value=\"website\">Website</option>\n <option value=\"email\">Email</option>\n <option value=\"custom\">Custom</option>\n </select>\n <button type=\"button\" class=\"danger-mini\" (click)=\"removeSocialLink(i)\">\n <span class=\"material-symbols-outlined\">delete</span>\n </button>\n </div>\n <div class=\"link-row\">\n <select\n aria-label=\"Icon Type\"\n [ngModel]=\"link.iconType || 'material'\"\n (ngModelChange)=\"updateSocialLink(i, 'iconType', $event)\">\n <option value=\"material\">Material Icon</option>\n <option value=\"url\">Image URL</option>\n <option value=\"svg\">SVG Code</option>\n </select>\n </div>\n\n @if ((link.iconType || 'material') === 'material') {\n <input\n type=\"text\"\n placeholder=\"Material icon name (e.g. facebook)\"\n [ngModel]=\"link.icon\"\n (ngModelChange)=\"updateSocialLink(i, 'icon', $event)\" />\n } @else if (link.iconType === 'url') {\n <div class=\"url-upload-group\">\n <input\n type=\"url\"\n placeholder=\"Image URL\"\n [ngModel]=\"link.icon\"\n (ngModelChange)=\"updateSocialLink(i, 'icon', $event)\" />\n <button type=\"button\" class=\"upload-btn\" (click)=\"socialIconInput.click()\" title=\"Upload Icon\">\n <span class=\"material-symbols-outlined\">upload</span>\n </button>\n <input\n #socialIconInput\n type=\"file\"\n accept=\"image/*\"\n class=\"hidden-file-input\"\n (change)=\"onSocialIconSelected($event, i)\" />\n </div>\n } @else if (link.iconType === 'svg') {\n <textarea\n rows=\"3\"\n placeholder=\"Paste SVG code here\"\n [ngModel]=\"link.icon\"\n (ngModelChange)=\"updateSocialLink(i, 'icon', $event)\"></textarea>\n }\n\n <input\n type=\"url\"\n placeholder=\"Destination URL\"\n [ngModel]=\"link.url\"\n (ngModelChange)=\"updateSocialLink(i, 'url', $event)\" />\n </div>\n }\n </div>\n </div>\n </section>\n }\n\n @if (selectedTab === 'variable') {\n <section class=\"panel-section controls variables-panel active-tab-panel\">\n <div class=\"section-title compact-title\">\n <span>Variables</span>\n <button type=\"button\" class=\"mini-action\" (click)=\"addVariable.emit()\">Add</button>\n </div>\n\n <div class=\"variable-list\">\n @for (variable of variables; track variable.id) {\n <div class=\"variable-item\">\n <input\n type=\"text\"\n aria-label=\"Variable name\"\n [ngModel]=\"variable.name\"\n (ngModelChange)=\"updateVariable.emit({ id: variable.id, key: 'name', value: $event })\" />\n <input\n type=\"text\"\n aria-label=\"Preview value\"\n [ngModel]=\"variable.value\"\n (ngModelChange)=\"updateVariable.emit({ id: variable.id, key: 'value', value: $event })\" />\n <button type=\"button\" title=\"Insert variable\" (click)=\"insertVariable.emit(variable.name)\">\n <span class=\"material-symbols-outlined\">data_object</span>\n </button>\n <button type=\"button\" class=\"danger-mini\" title=\"Delete variable\" (click)=\"deleteVariable.emit(variable.id)\">\n <span class=\"material-symbols-outlined\">close</span>\n </button>\n </div>\n }\n </div>\n </section>\n }\n </div>\n }\n </div>\n\n @if (block) {\n <aside class=\"inspector-tab-bar\">\n <button\n type=\"button\"\n class=\"tab-btn\"\n [class.active]=\"selectedTab === 'basics'\"\n (click)=\"selectedTab = 'basics'\"\n title=\"Basics\">\n <span class=\"material-symbols-outlined\">settings</span>\n </button>\n <button\n type=\"button\"\n class=\"tab-btn\"\n [class.active]=\"selectedTab === 'variable'\"\n (click)=\"selectedTab = 'variable'\"\n title=\"Variables\">\n <span class=\"material-symbols-outlined\">data_object</span>\n </button>\n @if (block.type === 'social') {\n <button\n type=\"button\"\n class=\"tab-btn\"\n [class.active]=\"selectedTab === 'social'\"\n (click)=\"selectedTab = 'social'\"\n title=\"Social\">\n <span class=\"material-symbols-outlined\">share</span>\n </button>\n }\n </aside>\n }\n </div>\n\n <ng-template #variablePicker>\n <div class=\"advanced-variable-panel\" (click)=\"$event.stopPropagation()\" (keydown.escape)=\"showVariablePicker.set(false)\">\n <div class=\"panel-header\">\n <span>Content</span>\n <div class=\"header-actions\">\n <button type=\"button\" class=\"mini-action\" (click)=\"addVariable.emit()\">+ New</button>\n <button type=\"button\" class=\"close-panel\" (click)=\"showVariablePicker.set(false)\">\n <span class=\"material-symbols-outlined\">close</span>\n </button>\n </div>\n </div>\n <div class=\"variable-search\">\n <span class=\"material-symbols-outlined\">search</span>\n <input type=\"text\" placeholder=\"Search variables...\" #searchBox (input)=\"0\" />\n </div>\n <div class=\"variable-grid\">\n @for (variable of variables; track variable.id) {\n @if (!searchBox.value || variable.name.toLowerCase().includes(searchBox.value.toLowerCase())) {\n <div class=\"variable-row-item cursor-pointer\" (click)=\"onVariableSelect(variable.name, 'name')\">\n <div class=\"chip-info\">\n <strong>{{ variable.name }}</strong>\n <small>{{ variable.value }}</small>\n </div>\n </div>\n }\n }\n </div>\n <div class=\"panel-footer\">\n <small>Insert variable or value at cursor position</small>\n </div>\n </div>\n </ng-template>\n `,\n})\nexport class EmailBuilderInspectorComponent {\n @Input() block: TemplateBlock | undefined;\n @Input({ required: true }) variables!: TemplateVariable[];\n\n selectedTab: 'basics' | 'variable' | 'social' = 'basics';\n \n // Advanced Variable Tooltip State\n readonly showVariablePicker = signal(false);\n activeFieldName: string | null = null;\n activeElement: HTMLInputElement | HTMLTextAreaElement | null = null;\n cursorPos = 0;\n\n @Output() update = new EventEmitter<BlockUpdate>();\n @Output() addVariable = new EventEmitter<void>();\n @Output() updateVariable = new EventEmitter<VariableUpdate>();\n @Output() deleteVariable = new EventEmitter<number>();\n @Output() insertVariable = new EventEmitter<string>();\n @Output() focusField = new EventEmitter<string>();\n @Output() uploadImage = new EventEmitter<File>();\n @Output() uploadSocialIcon = new EventEmitter<{ file: File; index: number }>();\n\n readonly textAlignments: Array<{\n value: NonNullable<TemplateBlock['textAlign']>;\n icon: string;\n }> = [\n { value: 'left', icon: 'format_align_left' },\n { value: 'center', icon: 'format_align_center' },\n { value: 'right', icon: 'format_align_right' },\n { value: 'justify', icon: 'format_align_justify' },\n ];\n\n onFieldFocus(fieldName: string, element: HTMLInputElement | HTMLTextAreaElement): void {\n this.activeFieldName = fieldName;\n this.activeElement = element;\n this.cursorPos = element.selectionStart || 0;\n this.showVariablePicker.set(true);\n this.focusField.emit(fieldName);\n }\n\n updateCursor(element: HTMLInputElement | HTMLTextAreaElement): void {\n this.cursorPos = element.selectionStart || 0;\n }\n\n onPanelClick(event: MouseEvent): void {\n // If clicking outside the input or the tooltip, hide tooltip\n const target = event.target as HTMLElement;\n if (!target.closest('.input-with-tooltip') && !target.closest('.advanced-variable-panel')) {\n this.showVariablePicker.set(false);\n }\n }\n\n onVariableSelect(variableData: string, type: 'name' | 'value'): void {\n if (!this.activeElement || !this.block) return;\n\n const value = (this.block as any)[this.activeFieldName!] || '';\n const token = type === 'name' ? `{{${variableData}}}` : variableData;\n const newValue = value.substring(0, this.cursorPos) + token + value.substring(this.cursorPos);\n \n this.update.emit({ key: this.activeFieldName as keyof TemplateBlock, value: newValue });\n \n // Focus back and move cursor\n setTimeout(() => {\n this.activeElement?.focus();\n const newPos = this.cursorPos + token.length;\n this.activeElement?.setSelectionRange(newPos, newPos);\n this.cursorPos = newPos;\n });\n }\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.uploadImage.emit(input.files[0]);\n // Reset input so the same file can be uploaded again if needed\n input.value = '';\n }\n }\n\n onSocialIconSelected(event: Event, index: number): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.uploadSocialIcon.emit({ file: input.files[0], index });\n input.value = '';\n }\n }\n\n addSocialLink(): void {\n if (!this.block) return;\n const links = [...(this.block.socialLinks || [])];\n links.push({ type: 'website', url: 'https://', iconType: 'material', icon: 'public' });\n this.update.emit({ key: 'socialLinks', value: links });\n }\n\n updateSocialLink(index: number, key: string, value: any): void {\n if (!this.block || !this.block.socialLinks) return;\n const links = this.block.socialLinks.map((link, i) => {\n if (i === index) {\n return { ...link, [key]: value };\n }\n return link;\n });\n this.update.emit({ key: 'socialLinks', value: links });\n }\n\n removeSocialLink(index: number): void {\n if (!this.block || !this.block.socialLinks) return;\n const links = this.block.socialLinks.filter((_, i) => i !== index);\n this.update.emit({ key: 'socialLinks', value: links });\n }\n}\n","import { Component, EventEmitter, Input, Output, signal, computed } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BlockPreset, SampleTemplate, TemplateBlock } from '../email-template-builder.models';\n\n@Component({\n selector: 'app-email-builder-sidebar',\n standalone: true,\n imports: [FormsModule],\n template: `\n <!-- Sample Templates Section -->\n <section class=\"panel-section templates-section\">\n <div class=\"section-title\">\n <span>Sample Templates</span>\n <span class=\"material-symbols-outlined templates-star\">auto_awesome</span>\n </div>\n\n <div class=\"sample-template-grid\">\n @for (tpl of previewTemplates(); track tpl.id) {\n <button\n type=\"button\"\n class=\"sample-template-card\"\n [style.--accent]=\"tpl.accentColor\"\n (click)=\"applyTemplate.emit(tpl)\">\n <span class=\"sample-icon\" [style.color]=\"tpl.accentColor\">\n <span class=\"material-symbols-outlined\">{{ tpl.icon }}</span>\n </span>\n <span class=\"sample-label\">{{ tpl.name }}</span>\n <span class=\"sample-category\" [style.color]=\"tpl.accentColor\">{{ tpl.category }}</span>\n </button>\n }\n <!-- More Templates tile -->\n <button\n type=\"button\"\n class=\"sample-template-card more-templates-card\"\n (click)=\"openTemplateDrawer.emit()\">\n <span class=\"sample-icon more-icon\">\n <span class=\"material-symbols-outlined\">grid_view</span>\n </span>\n <span class=\"sample-label\">More Templates</span>\n <span class=\"sample-category more-count\">+{{ sampleTemplates.length - 3 }} more</span>\n </button>\n </div>\n </section>\n\n <!-- Block Library Section -->\n <section class=\"panel-section\">\n <div class=\"section-title\">\n <span>Block Library</span>\n </div>\n\n <!-- Search -->\n <div class=\"search-wrap\">\n <span class=\"material-symbols-outlined search-icon\">search</span>\n <input\n type=\"text\"\n class=\"search-input\"\n placeholder=\"Search blocks…\"\n [ngModel]=\"blockSearch()\"\n (ngModelChange)=\"blockSearch.set($event); showAllBlocks.set(false)\" />\n @if (blockSearch()) {\n <button type=\"button\" class=\"search-clear\" (click)=\"blockSearch.set('')\">\n <span class=\"material-symbols-outlined\">close</span>\n </button>\n }\n </div>\n\n <div class=\"block-grid\">\n @for (block of visibleBlocks(); track block.label + block.type + block.columnCount) {\n <button\n type=\"button\"\n class=\"library-block\"\n draggable=\"true\"\n (dragstart)=\"libraryDragStart.emit({ preset: block, event: $event })\"\n (dragend)=\"clearDragState.emit()\"\n (click)=\"addBlock.emit(block)\">\n <span class=\"material-symbols-outlined\">{{ block.icon }}</span>\n <strong>{{ block.label }}</strong>\n <small>{{ block.description }}</small>\n </button>\n }\n @if (filteredBlocks().length === 0) {\n <p class=\"no-results\" style=\"grid-column:1/-1\">No blocks match \"{{ blockSearch() }}\"</p>\n }\n </div>\n\n <!-- Show More / Show Less -->\n @if (!blockSearch() && filteredBlocks().length > initialBlockCount) {\n <button\n type=\"button\"\n class=\"show-more-btn\"\n (click)=\"showAllBlocks.set(!showAllBlocks())\">\n <span class=\"material-symbols-outlined\">\n {{ showAllBlocks() ? 'expand_less' : 'expand_more' }}\n </span>\n {{ showAllBlocks() ? 'Show less' : 'Show ' + (filteredBlocks().length - initialBlockCount) + ' more blocks' }}\n </button>\n }\n </section>\n\n <!-- Template Layers Section -->\n <section class=\"panel-section layers-section\">\n <div class=\"section-title\">\n <span>Template Layers</span>\n <small>{{ blocks.length }} blocks</small>\n </div>\n\n <div\n class=\"layers-list\"\n [class.drop-at-end]=\"dropTargetIndex === blocks.length\"\n (dragover)=\"dragOver.emit({ event: $event })\"\n (drop)=\"drop.emit({ event: $event })\">\n @for (block of blocks; track block.id; let index = $index) {\n <button\n type=\"button\"\n class=\"layer-item\"\n [class.active]=\"selectedBlockId === block.id\"\n [class.dragging]=\"draggedBlockId === block.id\"\n [class.drop-before]=\"dropTargetIndex === index\"\n draggable=\"true\"\n (dragstart)=\"blockDragStart.emit({ blockId: block.id, event: $event })\"\n (dragover)=\"dragOver.emit({ event: $event, index })\"\n (drop)=\"drop.emit({ event: $event, index })\"\n (dragend)=\"clearDragState.emit()\"\n (click)=\"selectBlock.emit(block.id)\">\n <span class=\"material-symbols-outlined\">{{ block.icon }}</span>\n <span>{{ block.label }}</span>\n </button>\n }\n </div>\n </section>\n `,\n styles: [`\n .templates-section {\n border-bottom: 1px solid var(--border, #24324b);\n }\n\n .templates-star {\n font-size: 15px !important;\n color: #a78bfa !important;\n }\n\n /* ── Search ── */\n .search-wrap {\n position: relative;\n margin-bottom: 14px;\n }\n\n .search-icon {\n position: absolute;\n left: 10px;\n top: 50%;\n transform: translateY(-50%);\n font-size: 16px !important;\n color: #64748b;\n pointer-events: none;\n }\n\n .search-input {\n width: 100%;\n padding: 8px 32px 8px 34px;\n border: 1px solid #24324b;\n border-radius: 8px;\n background: #0c1524;\n color: #eef5ff;\n font-size: 12.5px;\n outline: none;\n transition: border-color 0.15s;\n }\n\n .search-input::placeholder {\n color: #4a5c78;\n }\n\n .search-input:focus {\n border-color: #4c86ff;\n }\n\n .search-clear {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n width: 18px;\n height: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n color: #64748b;\n cursor: pointer;\n padding: 0;\n }\n\n .search-clear .material-symbols-outlined {\n font-size: 14px !important;\n }\n\n /* ── Template Grid ── */\n .sample-template-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 8px;\n padding: 4px 0 8px;\n }\n\n .sample-template-card {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 4px;\n padding: 10px 12px;\n border-radius: 10px;\n border: 1.5px solid #24324b;\n background: #17243a;\n cursor: pointer;\n text-align: left;\n transition: border-color 0.15s, background 0.15s, transform 0.15s, box-shadow 0.15s;\n position: relative;\n overflow: hidden;\n }\n\n .sample-template-card::before {\n content: '';\n position: absolute;\n top: 0; left: 0; right: 0;\n height: 2px;\n background: var(--accent, #4c6ef5);\n opacity: 0;\n transition: opacity 0.15s;\n }\n\n .sample-template-card:hover {\n border-color: var(--accent, #4c6ef5);\n background: #1e2d46;\n transform: translateY(-1px);\n box-shadow: 0 4px 16px rgba(0,0,0,0.25);\n }\n\n .sample-template-card:hover::before {\n opacity: 1;\n }\n\n /* More Templates tile */\n .more-templates-card {\n border-style: dashed;\n border-color: #2d3f5c;\n background: #111d2e;\n }\n\n .more-templates-card:hover {\n border-color: #a78bfa;\n background: #19243a;\n }\n\n .more-templates-card:hover::before {\n background: #a78bfa;\n opacity: 1;\n }\n\n .more-icon {\n background: rgba(167, 139, 250, 0.12);\n color: #a78bfa !important;\n }\n\n .more-icon .material-symbols-outlined {\n color: #a78bfa !important;\n }\n\n .more-count {\n color: #a78bfa !important;\n opacity: 1 !important;\n }\n\n .sample-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 8px;\n background: rgba(255,255,255,0.06);\n margin-bottom: 2px;\n }\n\n .sample-icon .material-symbols-outlined {\n font-size: 18px !important;\n }\n\n .sample-label {\n font-size: 12px;\n font-weight: 700;\n color: #f1f5f9;\n line-height: 1.3;\n }\n\n .sample-category {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n opacity: 0.85;\n }\n\n /* ── Show More Button ── */\n .show-more-btn {\n margin-top: 12px;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 10px;\n border: 1px dashed #2a3a56;\n border-radius: 8px;\n background: transparent;\n color: #74a4ff;\n font-size: 12.5px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s, border-color 0.15s;\n }\n\n .show-more-btn:hover {\n background: #17243a;\n border-color: #4c86ff;\n }\n\n .show-more-btn .material-symbols-outlined {\n font-size: 18px !important;\n }\n\n /* ── No results ── */\n .no-results {\n grid-column: 1 / -1;\n margin: 8px 0 0;\n color: #4a5c78;\n font-size: 12px;\n text-align: center;\n }\n `],\n})\nexport class EmailBuilderSidebarComponent {\n readonly initialBlockCount = 8;\n readonly previewCount = 3;\n\n @Input({ required: true }) blockLibrary!: BlockPreset[];\n @Input({ required: true }) blocks!: TemplateBlock[];\n @Input({ required: true }) selectedBlockId!: number;\n @Input({ required: true }) sampleTemplates!: SampleTemplate[];\n @Input() draggedBlockId: number | null = null;\n @Input() dropTargetIndex: number | null = null;\n\n @Output() addBlock = new EventEmitter<BlockPreset>();\n @Output() selectBlock = new EventEmitter<number>();\n @Output() openTemplateDrawer = new EventEmitter<void>();\n @Output() applyTemplate = new EventEmitter<SampleTemplate>();\n @Output() libraryDragStart = new EventEmitter<{ preset: BlockPreset; event: DragEvent }>();\n @Output() blockDragStart = new EventEmitter<{ blockId: number; event: DragEvent }>();\n @Output() dragOver = new EventEmitter<{ event: DragEvent; index?: number }>();\n @Output() drop = new EventEmitter<{ event: DragEvent; index?: number }>();\n @Output() clearDragState = new EventEmitter<void>();\n\n readonly blockSearch = signal('');\n readonly showAllBlocks = signal(false);\n\n readonly previewTemplates = computed(() =>\n this.sampleTemplates.slice(0, this.previewCount)\n );\n\n readonly filteredBlocks = computed(() => {\n const q = this.blockSearch().toLowerCase().trim();\n if (!q) return this.blockLibrary;\n return this.blockLibrary.filter(\n (b) => b.label.toLowerCase().includes(q) || b.description.toLowerCase().includes(q),\n );\n });\n\n readonly visibleBlocks = computed(() => {\n const all = this.filteredBlocks();\n if (this.blockSearch() || this.showAllBlocks()) return all;\n return all.slice(0, this.initialBlockCount);\n });\n}\n","import { Component, EventEmitter, Input, Output, signal, computed, inject, OnInit } from '@angular/core';\nimport { EmailBuilderStorageService } from '../email-builder-storage.service';\nimport { FormsModule } from '@angular/forms';\nimport { DatePipe } from '@angular/common';\nimport { SampleTemplate } from '../email-template-builder.models';\n\n@Component({\n selector: 'app-email-builder-template-drawer',\n standalone: true,\n imports: [FormsModule, DatePipe],\n template: `\n <!-- Backdrop -->\n <div class=\"drawer-backdrop\" (click)=\"close.emit()\"></div>\n\n <!-- Drawer Panel -->\n <aside class=\"template-drawer\">\n <div class=\"drawer-header\">\n <div class=\"drawer-title\">\n <span class=\"material-symbols-outlined\">auto_awesome</span>\n <div>\n <strong>Sample Templates</strong>\n <small>{{ filteredTemplates().length }} of {{ templates.length }} templates</small>\n </div>\n </div>\n <button type=\"button\" class=\"drawer-close\" (click)=\"close.emit()\" title=\"Close\">\n <span class=\"material-symbols-outlined\">close</span>\n </button>\n </div>\n\n <div class=\"drawer-tabs\">\n <button [class.active]=\"activeTab() === 'samples'\" (click)=\"activeTab.set('samples')\">Samples</button>\n <button [class.active]=\"activeTab() === 'saved'\" (click)=\"activeTab.set('saved')\">Saved Templates</button>\n </div>\n\n <!-- Search -->\n <div class=\"drawer-search\">\n <span class=\"material-symbols-outlined drawer-search-icon\">search</span>\n <input\n type=\"text\"\n class=\"drawer-search-input\"\n placeholder=\"Search by name, category or description…\"\n [ngModel]=\"searchQuery()\"\n (ngModelChange)=\"searchQuery.set($event)\"\n autofocus />\n @if (searchQuery()) {\n <button type=\"button\" class=\"drawer-search-clear\" (click)=\"searchQuery.set('')\">\n <span class=\"material-symbols-outlined\">close</span>\n </button>\n }\n </div>\n\n <div class=\"drawer-body\">\n @if (filteredTemplates().length === 0) {\n <div class=\"drawer-no-results\">\n <span class=\"material-symbols-outlined\">search_off</span>\n <p>No templates match \"{{ searchQuery() }}\"</p>\n <button type=\"button\" class=\"clear-search-btn\" (click)=\"searchQuery.set('')\">Clear search</button>\n </div>\n } @else {\n <div class=\"template-grid\">\n @if (activeTab() === 'samples') {\n @for (template of filteredTemplates(); track template.id) {\n <div\n class=\"template-card\"\n [class.selected]=\"selectedId === template.id\"\n (click)=\"selectedId = template.id\">\n <div class=\"template-card-header\" [style.background]=\"template.accentColor + '18'\">\n <div class=\"template-icon-wrap\" [style.background]=\"template.accentColor + '22'\" [style.color]=\"template.accentColor\">\n <span class=\"material-symbols-outlined\">{{ template.icon }}</span>\n </div>\n <div class=\"template-meta\">\n <span class=\"template-category\" [style.color]=\"template.accentColor\">{{ template.category }}</span>\n <strong class=\"template-name\">{{ template.name }}</strong>\n </div>\n </div>\n\n <div class=\"template-card-body\">\n <p class=\"template-desc\">{{ template.description }}</p>\n \n <div class=\"template-id-row\">\n <code class=\"template-id-text\">{{ template.id }}</code>\n <button type=\"button\" class=\"copy-id-btn\" (click)=\"copyToClipboard(template.id); $event.stopPropagation()\" title=\"Copy ID\">\n <span class=\"material-symbols-outlined\">content_copy</span>\n </button>\n </div>\n <div class=\"template-block-pills\">\n @for (block of template.blocks.slice(0, 5); track block.id) {\n <span class=\"block-pill\">\n <span class=\"material-symbols-outlined\">{{ block.icon }}</span>\n {{ block.label }}\n </span>\n }\n </div>\n </div>\n\n <div class=\"template-card-footer\">\n <span class=\"block-count\">\n <span class=\"material-symbols-outlined\">layers</span>\n {{ template.blocks.length }} blocks\n </span>\n <button\n type=\"button\"\n class=\"use-template-btn\"\n [style.background]=\"template.accentColor\"\n (click)=\"applyTemplate(template); $event.stopPropagation()\">\n <span class=\"material-symbols-outlined\">bolt</span>\n Use Template\n </button>\n </div>\n </div>\n }\n } @else {\n @for (template of savedTemplates(); track template.id) {\n <div class=\"template-card saved-card\" (click)=\"loadSaved(template)\">\n <div class=\"template-card-header\">\n <div class=\"template-icon-wrap\" style=\"background: #3b82f622; color: #3b82f6;\">\n <span class=\"material-symbols-outlined\">history</span>\n </div>\n <div class=\"template-meta\">\n <span class=\"template-category\">Saved Template</span>\n <strong class=\"template-name\">{{ template.name }}</strong>\n </div>\n </div>\n <div class=\"template-card-body\">\n <p class=\"template-desc\">Last updated: {{ template.updatedAt | date:'medium' }}</p>\n <label>Termplate ID:</label>\n <div class=\"template-id-row\" style=\"margin-top: 3px !important;\">\n <code class=\"template-id-text\">{{ template.id }}</code>\n <button type=\"button\" class=\"copy-id-btn\" (click)=\"copyToClipboard(template.id); $event.stopPropagation()\" title=\"Copy ID\">\n <span class=\"material-symbols-outlined\">content_copy</span>\n </button>\n </div>\n </div>\n <div class=\"template-card-footer\">\n <button type=\"button\" class=\"use-template-btn\" style=\"background: #3b82f6\" (click)=\"loadSaved(template)\">\n Load\n </button>\n <button type=\"button\" class=\"delete-btn\" (click)=\"deleteTemplate(template.id); $event.stopPropagation()\">\n <span class=\"material-symbols-outlined\">delete</span>\n </button>\n </div>\n </div>\n }\n @if (savedTemplates().length === 0) {\n <div class=\"empty-saved\">No saved templates yet.</div>\n }\n }\n </div>\n }\n </div>\n\n <!-- Toast Notification -->\n @if (toastMessage()) {\n <div class=\"drawer-toast\" [class.show]=\"toastMessage()\">\n <span class=\"material-symbols-outlined\">check_circle</span>\n {{ toastMessage() }}\n </div>\n }\n </aside>\n `,\n styles: [`\n .drawer-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.45);\n backdrop-filter: blur(2px);\n z-index: 200;\n animation: fadeIn 0.2s ease;\n }\n\n .template-drawer {\n position: fixed;\n top: 0;\n left: 0;\n width: 780px;\n max-width: 92vw;\n height: 100vh;\n background: var(--surface, #1a1e2e);\n border-right: 1px solid var(--border, #2a2f45);\n z-index: 201;\n display: flex;\n flex-direction: column;\n box-shadow: 4px 0 40px rgba(0, 0, 0, 0.5);\n animation: slideInLeft 0.26s cubic-bezier(0.22, 1, 0.36, 1);\n }\n\n @keyframes slideInLeft {\n from { transform: translateX(-100%); opacity: 0; }\n to { transform: translateX(0); opacity: 1; }\n }\n\n @keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n /* ── Header ── */\n .drawer-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n border-bottom: 1px solid var(--border, #2a2f45);\n flex-shrink: 0;\n }\n\n .drawer-title {\n display: flex;\n align-items: center;\n gap: 14px;\n }\n\n .drawer-title .material-symbols-outlined {\n font-size: 26px;\n color: #a78bfa;\n }\n\n .drawer-title strong {\n display: block;\n font-size: 16px;\n font-weight: 700;\n color: var(--text-primary, #f1f5f9);\n letter-spacing: -0.01em;\n }\n\n .drawer-title small {\n display: block;\n font-size: 12px;\n color: var(--text-muted, #64748b);\n margin-top: 2px;\n }\n\n .drawer-close {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n border: 1px solid var(--border, #2a2f45);\n background: transparent;\n color: var(--text-muted, #64748b);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s, color 0.15s;\n }\n\n .drawer-close:hover {\n background: var(--surface-hover, #252b3b);\n color: var(--text-primary, #f1f5f9);\n }\n\n /* ── Search ── */\n .drawer-search {\n position: relative;\n padding: 14px 24px;\n border-bottom: 1px solid var(--border, #2a2f45);\n flex-shrink: 0;\n }\n\n .drawer-search-icon {\n position: absolute;\n left: 36px;\n top: 50%;\n transform: translateY(-50%);\n font-size: 17px !important;\n color: #64748b;\n pointer-events: none;\n }\n\n .drawer-search-input {\n width: 100%;\n padding: 10px 36px 10px 38px;\n border: 1px solid var(--border, #2a2f45);\n border-radius: 10px;\n background: #0c1524;\n color: #eef5ff;\n font-size: 13px;\n outline: none;\n transition: border-color 0.15s, box-shadow 0.15s;\n box-sizing: border-box;\n }\n\n .drawer-search-input::placeholder {\n color: #3d4f6a;\n }\n\n .drawer-search-input:focus {\n border-color: #a78bfa;\n box-shadow: 0 0 0 3px rgba(167, 139, 250, 0.12);\n }\n\n .drawer-search-clear {\n position: absolute;\n right: 36px;\n top: 50%;\n transform: translateY(-50%);\n width: 22px;\n height: 22px;\n border-radius: 6px;\n border: none;\n background: #252b3b;\n color: #64748b;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s, color 0.15s;\n }\n\n .drawer-search-clear:hover {\n background: #2e3a50;\n color: #f1f5f9;\n }\n\n .drawer-search-clear .material-symbols-outlined {\n font-size: 13px !important;\n }\n\n /* ── No Results ── */\n .drawer-no-results {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 64px 24px;\n color: #64748b;\n text-align: center;\n }\n\n .drawer-no-results .material-symbols-outlined {\n font-size: 48px;\n color: #2a3a56;\n }\n\n .drawer-no-results p {\n font-size: 14px;\n margin: 0;\n color: #64748b;\n }\n\n .clear-search-btn {\n padding: 8px 20px;\n border: 1px solid #2a3a56;\n border-radius: 8px;\n background: transparent;\n color: #a78bfa;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s, border-color 0.15s;\n }\n\n .clear-search-btn:hover {\n background: rgba(167, 139, 250, 0.1);\n border-color: #a78bfa;\n }\n\n /* ── Body ── */\n .drawer-body {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n .template-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 18px;\n }\n\n /* ── Template Card ── */\n .template-card {\n border-radius: 14px;\n border: 1.5px solid var(--border, #2a2f45);\n background: var(--surface-card, #1e2436);\n cursor: pointer;\n transition: border-color 0.18s, transform 0.18s, box-shadow 0.18s;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n\n .template-card:hover {\n border-color: #4c6ef5;\n transform: translateY(-2px);\n box-shadow: 0 8px 28px rgba(0, 0, 0, 0.3);\n }\n\n .template-card.selected {\n border-color: #a78bfa;\n box-shadow: 0 0 0 3px rgba(167, 139, 250, 0.18), 0 8px 28px rgba(0, 0, 0, 0.3);\n }\n\n .template-card-header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px 18px;\n }\n\n .template-icon-wrap {\n width: 44px;\n height: 44px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .template-icon-wrap .material-symbols-outlined {\n font-size: 22px;\n }\n\n .template-meta {\n display: flex;\n flex-direction: column;\n gap: 3px;\n }\n\n .template-category {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n }\n\n .template-name {\n font-size: 14px;\n font-weight: 700;\n color: var(--text-primary, #f1f5f9);\n line-height: 1.3;\n }\n\n .template-card-body {\n padding: 0 18px 16px;\n flex: 1;\n }\n\n .template-desc {\n font-size: 12.5px;\n line-height: 1.6;\n color: var(--text-muted, #64748b);\n margin: 0 0 14px;\n }\n\n .template-block-pills {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n }\n\n .block-pill {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 6px;\n background: var(--surface-hover, #252b3b);\n color: var(--text-muted, #64748b);\n font-size: 10.5px;\n font-weight: 500;\n }\n\n .block-pill .material-symbols-outlined {\n font-size: 12px;\n }\n\n .block-pill-more {\n color: #a78bfa;\n background: rgba(167, 139, 250, 0.12);\n }\n\n .template-card-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 18px;\n border-top: 1px solid var(--border, #2a2f45);\n }\n\n .block-count {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 11.5px;\n color: var(--text-muted, #64748b);\n }\n\n .block-count .material-symbols-outlined {\n font-size: 14px;\n }\n\n .use-template-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: none;\n border-radius: 8px;\n color: #fff;\n font-size: 12.5px;\n font-weight: 700;\n cursor: pointer;\n transition: opacity 0.15s, transform 0.15s;\n }\n\n .use-template-btn:hover {\n opacity: 0.88;\n transform: scale(1.03);\n }\n\n .use-template-btn .material-symbols-outlined {\n font-size: 15px;\n }\n .drawer-tabs {\n display: flex;\n padding: 10px 24px;\n gap: 10px;\n border-bottom: 1px solid var(--border, #2a2f45);\n }\n .drawer-tabs button {\n background: transparent;\n border: none;\n color: #64748b;\n padding: 8px 16px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 600;\n border-radius: 8px;\n }\n .drawer-tabs button.active {\n background: #a78bfa22;\n color: #a78bfa;\n }\n .delete-btn {\n background: transparent;\n border: none;\n color: #ef4444;\n cursor: pointer;\n }\n .empty-saved {\n grid-column: span 2;\n text-align: center;\n padding: 40px;\n color: #64748b;\n }\n\n /* ── Template ID ── */\n .template-id-row {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 10px;\n padding: 6px 10px;\n background: rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n border: 1px solid rgba(255, 255, 255, 0.05);\n }\n\n .template-id-text {\n font-family: 'JetBrains Mono', 'Fira Code', monospace;\n font-size: 11px;\n color: #94a3b8;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n }\n\n .copy-id-btn {\n width: 26px;\n height: 26px;\n display: grid;\n place-items: center;\n background: transparent;\n border: none;\n color: #64748b;\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.15s;\n }\n\n .copy-id-btn:hover {\n background: rgba(255, 255, 255, 0.08);\n color: #a78bfa;\n }\n\n .copy-id-btn .material-symbols-outlined {\n font-size: 14px;\n }\n\n /* ── Toast ── */\n .drawer-toast {\n position: absolute;\n top: 24px;\n left: 50%;\n transform: translateX(-50%) translateY(-20px);\n background: #10b981;\n color: white;\n padding: 10px 22px;\n border-radius: 30px;\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 13.5px;\n font-weight: 600;\n box-shadow: 0 12px 30px rgba(0, 0, 0, 0.4);\n z-index: 220;\n opacity: 0;\n transition: all 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);\n pointer-events: none;\n white-space: nowrap;\n border: 1px solid rgba(255, 255, 255, 0.1);\n }\n\n .drawer-toast.show {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n `],\n})\nexport class EmailBuilderTemplateDrawerComponent implements OnInit {\n @Input({ required: true }) templates!: SampleTemplate[];\n @Input() initialTab: 'samples' | 'saved' = 'samples';\n\n @Output() close = new EventEmitter<void>();\n @Output() useTemplate = new EventEmitter<SampleTemplate>();\n @Output() loadSavedTemplate = new EventEmitter<any>();\n\n private templateService = inject(EmailBuilderStorageService);\n \n selectedId: string | null = null;\n readonly searchQuery = signal('');\n readonly activeTab = signal<'samples' | 'saved'>('samples');\n readonly savedTemplates = signal<any[]>([]);\n readonly toastMessage = signal<string | null>(null);\n\n ngOnInit() {\n this.activeTab.set(this.initialTab);\n this.fetchSavedTemplates();\n }\n\n fetchSavedTemplates() {\n this.templateService.listTemplates().subscribe((res: any) => {\n if (res.success) {\n this.savedTemplates.set(res.data);\n }\n });\n }\n\n deleteTemplate(id: string) {\n this.templateService.deleteTemplate(id).subscribe((_: any) => {\n this.fetchSavedTemplates();\n });\n }\n\n loadSaved(template: any) {\n this.loadSavedTemplate.emit(template);\n this.close.emit();\n }\n\n copyToClipboard(id: string) {\n navigator.clipboard.writeText(id).then(() => {\n this.showToast('Template ID copied to clipboard!');\n });\n }\n\n private showToast(message: string) {\n this.toastMessage.set(message);\n setTimeout(() => {\n this.toastMessage.set(null);\n }, 2500);\n }\n\n readonly filteredTemplates = computed(() => {\n const q = this.searchQuery().toLowerCase().trim();\n if (!q) return this.templates;\n return this.templates.filter(\n (t) =>\n t.name.toLowerCase().includes(q) ||\n t.category.toLowerCase().includes(q) ||\n t.description.toLowerCase().includes(q),\n );\n });\n\n applyTemplate(template: SampleTemplate): void {\n this.useTemplate.emit(template);\n this.close.emit();\n }\n}\n","import {\n Component,\n ElementRef,\n Input,\n OnDestroy,\n AfterViewInit,\n Inject,\n PLATFORM_ID,\n ViewChild,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Component({\n selector: 'app-code-editor',\n standalone: true,\n template: `\n <div #editorContainer class=\"editor-container\"></div>\n `,\n styles: [`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n .editor-container {\n width: 100%;\n height: 100%;\n }\n `],\n})\nexport class CodeEditorComponent implements AfterViewInit, OnChanges, OnDestroy {\n @Input() language: string = 'html';\n @Input() theme: string = 'vs-dark';\n @Input() code: string = '';\n @Input() readonly: boolean = false;\n\n @Output() codeChange = new EventEmitter<string>();\n\n @ViewChild('editorContainer') editorContainer!: ElementRef;\n\n private editorInstance: any;\n private monaco: any;\n\n constructor(\n @Inject(PLATFORM_ID) private platformId: Object,\n ) {}\n\n async ngAfterViewInit(): Promise<void> {\n if (isPlatformBrowser(this.platformId)) {\n this.monaco = await import('monaco-editor');\n\n (window as any).MonacoEnvironment = {\n getWorkerUrl: (_moduleId: string, label: string) => {\n if (label === 'json')\n return 'assets/vs/language/json/json.worker.js';\n if (label === 'css' || label === 'scss' || label === 'less')\n return 'assets/vs/language/css/css.worker.js';\n if (label === 'html' || label === 'handlebars' || label === 'razor')\n return 'assets/vs/language/html/html.worker.js';\n if (label === 'typescript' || label === 'javascript')\n return 'assets/vs/language/typescript/ts.worker.js';\n return 'assets/vs/editor/editor.worker.js';\n },\n };\n\n this.editorInstance = this.monaco.editor.create(\n this.editorContainer.nativeElement,\n {\n value: this.code,\n language: this.language,\n theme: this.theme,\n automaticLayout: true,\n readOnly: this.readonly,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n fontSize: 13,\n fontFamily: \"'SFMono-Regular', Consolas, 'Liberation Mono', monospace\",\n },\n );\n\n this.editorInstance.onDidChangeModelContent(() => {\n const newValue = this.editorInstance.getValue();\n if (this.code !== newValue) {\n this.code = newValue;\n this.codeChange.emit(newValue);\n }\n });\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.editorInstance && changes['code'] && !changes['code'].firstChange) {\n const currentValue = this.editorInstance.getValue();\n if (changes['code'].currentValue !== currentValue) {\n this.editorInstance.setValue(changes['code'].currentValue);\n }\n }\n if (this.editorInstance && changes['language'] && !changes['language'].firstChange) {\n this.monaco.editor.setModelLanguage(this.editorInstance.getModel(), changes['language'].currentValue);\n }\n if (this.editorInstance && changes['readonly']) {\n this.editorInstance.updateOptions({ readOnly: changes['readonly'].currentValue });\n }\n }\n\n ngOnDestroy(): void {\n if (this.editorInstance) {\n this.editorInstance.dispose();\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n EditorView,\n TemplateBlock,\n TemplateBlockType,\n ViewportSize,\n} from '../email-template-builder.models';\nimport { CodeEditorComponent } from '../shared/components/code-editor/code-editor.component';\n\n@Component({\n selector: 'app-email-template-canvas',\n standalone: true,\n imports: [FormsModule, CodeEditorComponent],\n template: `\n <main class=\"canvas-panel\">\n <div class=\"canvas-header\">\n <div>\n <strong>Campaign Template</strong>\n <span>\n {{\n editorView === 'canvas'\n ? viewport === 'desktop'\n ? '600px desktop email'\n : viewport === 'tablet'\n ? '480px tablet preview'\n : '375px mobile preview'\n : sourceStatus\n }}\n </span>\n </div>\n <div class=\"view-tabs\" aria-label=\"Builder view\">\n <button type=\"button\" [class.active]=\"editorView === 'canvas'\" (click)=\"editorViewChange.emit('canvas')\">\n <span class=\"material-symbols-outlined\">dashboard_customize</span>\n </button>\n <button type=\"button\" [class.active]=\"editorView === 'source'\" (click)=\"editorViewChange.emit('source')\">\n <span class=\"material-symbols-outlined\">code_blocks</span>\n </button>\n </div>\n </div>\n\n <!-- @if (editorView === 'canvas' && selectedBlock()) {\n @if (selectedBlock()?.type === 'columns') {\n <div class=\"canvas-settings\">\n\n <label class=\"column-stepper\">\n <span>Columns</span>\n <input\n type=\"number\"\n min=\"1\"\n max=\"12\"\n [ngModel]=\"selectedBlock()?.columnCount\"\n (ngModelChange)=\"columnCountChange.emit({ blockId: selectedBlockId, columnCount: +$event })\" />\n </label>\n </div>\n }\n } -->\n\n @if (editorView === 'canvas') {\n <div\n class=\"canvas-stage\"\n [class.mobile-stage]=\"viewport === 'mobile'\"\n [class.tablet-stage]=\"viewport === 'tablet'\"\n (dragover)=\"dragOver.emit({ event: $event })\"\n (drop)=\"drop.emit({ event: $event })\"\n (dragleave)=\"dropTargetIndexChange.emit(null)\">\n <article\n class=\"email-preview\"\n [class.mobile-preview]=\"viewport === 'mobile'\"\n [class.tablet-preview]=\"viewport === 'tablet'\"\n [class.drop-at-end]=\"dropTargetIndex === blocks.length\">\n @for (block of blocks; track block.id; let index = $index) {\n <section\n class=\"email-block\"\n [class.selected]=\"selectedBlockId === block.id && !previewMode\"\n [class.previewing]=\"previewMode\"\n [class.dragging]=\"draggedBlockId === block.id\"\n [class.drop-before]=\"dropTargetIndex === index\"\n [style.background-color]=\"block.backgroundColor\"\n [style.color]=\"block.textColor\"\n [style.text-align]=\"block.textAlign\"\n [style.padding.px]=\"block.type === 'hero' ? null : block.padding\"\n draggable=\"true\"\n (dragstart)=\"blockDragStart.emit({ blockId: block.id, event: $event })\"\n (dragover)=\"dragOver.emit({ event: $event, index })\"\n (drop)=\"drop.emit({ event: $event, index })\"\n (dragend)=\"clearDragState.emit()\"\n (click)=\"selectBlock.emit(block.id)\">\n @if (!previewMode) {\n <div class=\"block-tools\">\n <button type=\"button\" (click)=\"moveBlock.emit({ blockId: block.id, direction: -1, event: $event })\" [disabled]=\"index === 0\" title=\"Move up\">\n <span class=\"material-symbols-outlined\">keyboard_arrow_up</span>\n </button>\n <button type=\"button\" (click)=\"moveBlock.emit({ blockId: block.id, direction: 1, event: $event })\" [disabled]=\"index === blocks.length - 1\" title=\"Move down\">\n <span class=\"material-symbols-outlined\">keyboard_arrow_down</span>\n </button>\n <button type=\"button\" (click)=\"duplicateBlock.emit({ blockId: block.id, event: $event })\" title=\"Duplicate\">\n <span class=\"material-symbols-outlined\">content_copy</span>\n </button>\n <button type=\"button\" class=\"danger\" (click)=\"deleteBlock.emit({ blockId: block.id, event: $event })\" [disabled]=\"blocks.length === 1\" title=\"Delete\">\n <span class=\"material-symbols-outlined\">delete</span>\n </button>\n </div>\n }\n\n @if (block.type === 'header') {\n <div class=\"header-block\" [style.justify-content]=\"justifyHeader(block.textAlign)\">\n <strong [style.color]=\"block.titleColor || block.textColor\">{{ resolveText(block.title) }}</strong>\n <a [href]=\"block.url || '#'\" (click)=\"$event.preventDefault()\" [style.color]=\"block.textColor\">{{ resolveText(block.text) }}</a>\n </div>\n }\n\n @if (block.type === 'hero') {\n <img class=\"hero-image\" [src]=\"block.imageUrl\" alt=\"\" />\n <div class=\"hero-copy\" [style.padding.px]=\"block.padding\">\n <h2 [style.color]=\"block.titleColor || block.textColor\">{{ resolveText(block.title) }}</h2>\n <p [style.color]=\"block.textColor\">{{ resolveText(block.text) }}</p>\n </div>\n }\n\n @if (block.type === 'text') {\n <div class=\"text-block\">\n <h3 [style.color]=\"block.titleColor || block.textColor\">{{ resolveText(block.title) }}</h3>\n <p [style.color]=\"block.textColor\">{{ resolveText(block.text) }}</p>\n </div>\n }\n\n @if (block.type === 'paragraph') {\n <div class=\"paragraph-block\">\n <p>{{ resolveText(block.text) }}</p>\n </div>\n }\n\n @if (block.type === 'image') {\n <img class=\"single-image\" [src]=\"block.imageUrl\" alt=\"\" />\n <p class=\"image-caption\">{{ resolveText(block.text) }}</p>\n }\n\n @if (block.type === 'columns') {\n <div class=\"columns-block\" [style.grid-template-columns]=\"columnsTemplate(block)\">\n @for (column of normalizedColumns(block); track $index; let columnIndex = $index) {\n <div class=\"email-column\">\n <div class=\"column-actions\">\n <button type=\"button\" (click)=\"addColumnContent.emit({ blockId: block.id, columnIndex, type: 'text' })\" title=\"Add text\">\n <span class=\"material-symbols-outlined\">subject</span>\n </button>\n <button type=\"button\" (click)=\"addColumnContent.emit({ blockId: block.id, columnIndex, type: 'image' })\" title=\"Add image\">\n <span class=\"material-symbols-outlined\">image</span>\n </button>\n <button type=\"button\" (click)=\"addColumnContent.emit({ blockId: block.id, columnIndex, type: 'quote' })\" title=\"Add quote\">\n <span class=\"material-symbols-outlined\">format_quote</span>\n </button>\n <button type=\"button\" (click)=\"addColumnContent.emit({ blockId: block.id, columnIndex, type: 'button' })\" title=\"Add button\">\n <span class=\"material-symbols-outlined\">smart_button</span>\n </button>\n <button type=\"button\" (click)=\"addColumnContent.emit({ blockId: block.id, columnIndex, type: 'list' })\" title=\"Add list\">\n <span class=\"material-symbols-outlined\">format_list_bulleted</span>\n </button>\n <button type=\"button\" (click)=\"addColumnContent.emit({ blockId: block.id, columnIndex, type: 'badge' })\" title=\"Add badge\">\n <span class=\"material-symbols-outlined\">verified</span>\n </button>\n </div>\n\n @for (child of column; track child.id) {\n <div class=\"column-child\">\n <button\n type=\"button\"\n class=\"column-child-remove\"\n title=\"Remove item\"\n (click)=\"removeColumnContent.emit({ blockId: block.id, columnIndex, childId: child.id })\">\n <span class=\"material-symbols-outlined\">close</span>\n </button>\n @if (child.type === 'image') {\n <img class=\"column-image\" [src]=\"child.imageUrl\" alt=\"\" />\n } @else if (child.type === 'quote') {\n <blockquote class=\"column-quote\">{{ resolveText(child.text) }}</blockquote>\n } @else if (child.type === 'button') {\n <a\n class=\"column-button\"\n [href]=\"child.url || '#'\"\n [style.background-color]=\"child.buttonColor\"\n [style.color]=\"child.buttonTextColor\"\n (click)=\"$event.preventDefault()\">\n {{ resolveText(child.text) }}\n </a>\n } @else if (child.type === 'badge') {\n <span class=\"column-badge\" [style.background-color]=\"child.backgroundColor\" [style.color]=\"child.textColor\">\n {{ resolveText(child.text) }}\n </span>\n } @else if (child.type === 'list') {\n <ul class=\"column-list\">\n @for (item of listItems(child.text); track item) {\n <li>{{ resolveText(item) }}</li>\n }\n </ul>\n } @else {\n <h4 [style.color]=\"block.titleColor || block.textColor\">{{ resolveText(child.title) }}</h4>\n <p [style.color]=\"block.textColor\">{{ resolveText(child.text) }}</p>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n @if (block.type === 'quote') {\n <blockquote class=\"quote-block\">\n <p [style.color]=\"block.textColor\">{{ resolveText(block.text) }}</p>\n <cite [style.color]=\"block.titleColor || block.textColor\">{{ resolveText(block.title) }}</cite>\n </blockquote>\n }\n\n @if (block.type === 'button') {\n <a\n class=\"cta-button\"\n [href]=\"block.url || '#'\"\n [style.background-color]=\"block.buttonColor\"\n [style.color]=\"block.buttonTextColor\"\n [style.border-radius.px]=\"block.radius\"\n (click)=\"$event.preventDefault()\">\n {{ resolveText(block.text) }}\n </a>\n }\n\n @if (block.type === 'coupon') {\n <div class=\"coupon-block\">\n <span [style.color]=\"block.textColor\">{{ resolveText(block.title) }}</span>\n <strong [style.color]=\"block.titleColor || block.textColor\">{{ resolveText(block.text) }}</strong>\n <small [style.color]=\"block.textColor\">{{ resolveText(block.secondaryText) }}</small>\n </div>\n }\n\n @if (block.type === 'list') {\n <div class=\"list-block\">\n <h3 [style.color]=\"block.titleColor || block.textColor\">{{ resolveText(block.title) }}</h3>\n <ul [style.color]=\"block.textColor\">\n @for (item of listItems(block.text); track item) {\n <li>{{ resolveText(item) }}</li>\n }\n </ul>\n </div>\n }\n\n @if (block.type === 'badge') {\n <span\n class=\"badge-block\"\n [style.background-color]=\"block.backgroundColor\"\n [style.color]=\"block.textColor\"\n [style.border-radius.px]=\"block.radius\">\n {{ resolveText(block.text) }}\n </span>\n }\n\n @if (block.type === 'divider') {\n <div class=\"divider-line\" [style.border-color]=\"block.textColor\"></div>\n }\n\n @if (block.type === 'spacer') {\n <div class=\"spacer-block\"></div>\n }\n\n @if (block.type === 'social') {\n <div class=\"social-footer\">\n <div class=\"social-icons\">\n @for (link of block.socialLinks; track $index) {\n <a [href]=\"link.url\" target=\"_blank\" (click)=\"$event.preventDefault()\">\n @if ((link.iconType || 'material') === 'material') {\n <span class=\"material-symbols-outlined\">{{ link.icon || getSocialIcon(link.type) }}</span>\n } @else if (link.iconType === 'url') {\n <img [src]=\"link.icon\" [alt]=\"link.type\" class=\"social-custom-icon\" />\n } @else if (link.iconType === 'svg') {\n <div class=\"social-svg-icon\" [innerHTML]=\"link.icon\"></div>\n }\n </a>\n } @empty {\n <div class=\"social-placeholder\">\n <span class=\"material-symbols-outlined\">share</span>\n <span class=\"material-symbols-outlined\">public</span>\n <span class=\"material-symbols-outlined\">mail</span>\n </div>\n }\n </div>\n <p>{{ resolveText(block.text) }}</p>\n </div>\n }\n\n @if (block.type === 'footer') {\n <p class=\"footer-block\">{{ resolveText(block.text) }}</p>\n }\n </section>\n }\n </article>\n </div>\n } @else {\n <div class=\"source-workspace\">\n <div class=\"source-editor-panel\">\n <div class=\"source-panel-header\">\n <strong>Generated HTML Source</strong>\n <span>{{ sourceStatus }}</span>\n </div>\n <app-code-editor\n class=\"source-code-monaco\"\n language=\"html\"\n [code]=\"sourceCode\"\n (codeChange)=\"sourceCodeChange.emit($event)\" />\n </div>\n <div class=\"source-preview-panel\">\n <div class=\"source-panel-header\">\n <strong>Email Preview</strong>\n <span>Live from source</span>\n </div>\n <iframe\n class=\"source-preview-frame\"\n title=\"Generated email HTML preview\"\n [srcdoc]=\"sourceCode\"></iframe>\n </div>\n </div>\n }\n </main>\n `,\n})\nexport class EmailTemplateCanvasComponent {\n @Input({ required: true }) blocks!: TemplateBlock[];\n @Input({ required: true }) selectedBlockId!: number;\n @Input({ required: true }) viewport!: ViewportSize;\n @Input({ required: true }) previewMode!: boolean;\n @Input({ required: true }) editorView!: EditorView;\n @Input({ required: true }) sourceCode!: string;\n @Input({ required: true }) sourceStatus!: string;\n @Input({ required: true }) variableValues!: Record<string, string>;\n @Input() draggedBlockId: number | null = null;\n @Input() dropTargetIndex: number | null = null;\n\n @Output() editorViewChange = new EventEmitter<EditorView>();\n @Output() sourceCodeChange = new EventEmitter<string>();\n @Output() selectBlock = new EventEmitter<number>();\n @Output() blockDragStart = new EventEmitter<{ blockId: number; event: DragEvent }>();\n @Output() dragOver = new EventEmitter<{ event: DragEvent; index?: number }>();\n @Output() drop = new EventEmitter<{ event: DragEvent; index?: number }>();\n @Output() clearDragState = new EventEmitter<void>();\n @Output() dropTargetIndexChange = new EventEmitter<number | null>();\n @Output() updateBlock = new EventEmitter<{ key: keyof TemplateBlock; value: TemplateBlock[keyof TemplateBlock] }>();\n @Output() columnCountChange = new EventEmitter<{ blockId: number; columnCount: number }>();\n @Output() addColumnContent = new EventEmitter<{ blockId: number; columnIndex: number; type: TemplateBlockType }>();\n @Output() removeColumnContent = new EventEmitter<{ blockId: number; columnIndex: number; childId: number }>();\n @Output() moveBlock = new EventEmitter<{ blockId: number; direction: -1 | 1; event: Event }>();\n @Output() duplicateBlock = new EventEmitter<{ blockId: number; event: Event }>();\n @Output() deleteBlock = new EventEmitter<{ blockId: number; event: Event }>();\n\n readonly textAlignments: Array<{\n value: NonNullable<TemplateBlock['textAlign']>;\n label: string;\n icon: string;\n }> = [\n { value: 'left', label: 'Align left', icon: 'format_align_left' },\n { value: 'center', label: 'Align center', icon: 'format_align_center' },\n { value: 'right', label: 'Align right', icon: 'format_align_right' },\n { value: 'justify', label: 'Justify', icon: 'format_align_justify' },\n ];\n\n resolveText(value: string | undefined): string {\n return (value ?? '').replace(/\\{\\{\\s*([\\w.-]+)\\s*\\}\\}/g, (_, name: string) => {\n return this.variableValues[name] ?? `{{${name}}}`;\n });\n }\n\n selectedBlock(): TemplateBlock | undefined {\n return this.blocks.find((block) => block.id === this.selectedBlockId);\n }\n\n normalizedColumns(block: TemplateBlock): TemplateBlock[][] {\n const columnCount = block.columnCount ?? block.columns?.length ?? 1;\n return Array.from({ length: columnCount }, (_, index) => block.columns?.[index] ?? []);\n }\n\n columnsTemplate(block: TemplateBlock): string {\n return `repeat(${block.columnCount ?? block.columns?.length ?? 1}, minmax(0, 1fr))`;\n }\n\n listItems(value: string | undefined): string[] {\n return (value ?? '').split('\\n').filter(Boolean);\n }\n\n justifyHeader(align: string | undefined): string {\n if (align === 'center') return 'center';\n if (align === 'right') return 'flex-end';\n return 'space-between';\n }\n\n getSocialIcon(type: string): string {\n switch (type) {\n case 'facebook': return 'facebook';\n case 'twitter': return 'twitter';\n case 'instagram': return 'photo_camera';\n case 'linkedin': return 'group';\n case 'youtube': return 'play_circle';\n case 'email': return 'mail';\n case 'website': return 'public';\n default: return 'link';\n }\n }\n}\n","import { BlockPreset } from './email-template-builder.models';\n\nexport const EMAIL_BLOCK_LIBRARY: BlockPreset[] = [\n {\n type: 'header',\n label: 'Header',\n icon: 'view_headline',\n description: 'Logo and link',\n },\n {\n type: 'hero',\n label: 'Hero',\n icon: 'image',\n description: 'Image with headline',\n },\n {\n type: 'text',\n label: 'Text',\n icon: 'subject',\n description: 'Heading and copy',\n },\n {\n type: 'paragraph',\n label: 'Paragraph',\n icon: 'short_text',\n description: 'Plain text block',\n },\n {\n type: 'image',\n label: 'Image',\n icon: 'add_photo_alternate',\n description: 'Full width media',\n },\n\n {\n type: 'quote',\n label: 'Quote',\n icon: 'format_quote',\n description: 'Testimonial callout',\n },\n {\n type: 'button',\n label: 'Button',\n icon: 'smart_button',\n description: 'Call to action',\n },\n {\n type: 'coupon',\n label: 'Coupon',\n icon: 'sell',\n description: 'Promo code block',\n },\n {\n type: 'list',\n label: 'List',\n icon: 'format_list_bulleted',\n description: 'Bullets or steps',\n },\n {\n type: 'badge',\n label: 'Badge',\n icon: 'verified',\n description: 'Small status label',\n },\n {\n type: 'divider',\n label: 'Divider',\n icon: 'horizontal_rule',\n description: 'Visual separator',\n },\n {\n type: 'spacer',\n label: 'Spacer',\n icon: 'height',\n description: 'Vertical spacing',\n },\n {\n type: 'footer',\n label: 'Footer',\n icon: 'notes',\n description: 'Legal footer text',\n },\n {\n type: 'social',\n label: 'Social',\n icon: 'share',\n description: 'Footer links',\n },\n ...Array.from({ length: 3 }, (_, index) => {\n const columnCount = index+1;\n\n return {\n type: 'columns' as const,\n label: `${columnCount} Column`,\n icon: 'view_column',\n description: `${columnCount} editable content columns`,\n columnCount,\n };\n }),\n];\n","import { SampleTemplate } from './email-template-builder.models';\n\nexport const EMAIL_SAMPLE_TEMPLATES: SampleTemplate[] = [\n {\n id: 'otp-verification',\n name: 'OTP Verification',\n description: 'Secure one-time password delivery with a prominent code display and verify button.',\n icon: 'verified_user',\n category: 'Authentication',\n accentColor: '#0ea5e9',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Security Notice', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Intro', icon: 'subject', title: 'Verify your email address', text: 'Use the one-time passcode below to verify your email. Expires in 10 minutes — do not share it.', backgroundColor: '#ffffff', textColor: '#475569', textAlign: 'center', padding: 36, radius: 0 },\n { id: 3, type: 'coupon', label: 'OTP Code', icon: 'sell', title: 'Your one-time passcode', text: '482 916', secondaryText: 'Expires in 10 minutes · Do not share', backgroundColor: '#f0f9ff', textColor: '#0369a1', textAlign: 'center', padding: 32, radius: 14 },\n { id: 4, type: 'button', label: 'Verify Button', icon: 'smart_button', text: 'Verify My Email', url: 'https://nowmail.app/verify', backgroundColor: '#ffffff', buttonColor: '#0ea5e9', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'text', label: 'Help Note', icon: 'subject', title: '', text: \"Didn't request this? Ignore this email. No changes will be made.\", backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n { id: 6, type: 'footer', label: 'Footer', icon: 'notes', text: 'You are receiving this because you signed up at {{company_name}}. Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'login-alert',\n name: 'Login Alert',\n description: 'Notify users of a new sign-in with device details and a security action button.',\n icon: 'lock_open',\n category: 'Security',\n accentColor: '#f59e0b',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Security Alert', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Alert Badge', icon: 'verified', text: '🔐 New Login Detected', backgroundColor: '#fef9c3', textColor: '#854d0e', textAlign: 'center', padding: 20, radius: 999 },\n { id: 3, type: 'text', label: 'Details', icon: 'subject', title: 'A new sign-in to your account', text: 'We noticed a new login to your {{company_name}} account. If this was you, no action is needed.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 4, type: 'list', label: 'Login Info', icon: 'format_list_bulleted', title: 'Login details', text: 'Time: Today at {{login_time}}\\nDevice: Chrome on Windows\\nLocation: India', backgroundColor: '#f8fafc', textColor: '#475569', textAlign: 'left', padding: 28, radius: 0 },\n { id: 5, type: 'button', label: 'Secure Account', icon: 'smart_button', text: 'Secure My Account', url: 'https://nowmail.app/security', backgroundColor: '#ffffff', buttonColor: '#dc2626', buttonTextColor: '#ffffff', textAlign: 'center', padding: 28, radius: 8 },\n { id: 6, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Security Team · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#9ca3af', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'welcome-email',\n name: 'Welcome Email',\n description: 'Warm onboarding email that introduces your product and guides users to get started.',\n icon: 'waving_hand',\n category: 'Onboarding',\n accentColor: '#10b981',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'View online', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'hero', label: 'Welcome Hero', icon: 'image', title: 'Welcome to {{company_name}}, {{first_name}}! 🎉', text: \"We're thrilled to have you on board. Your account is ready — let's get started.\", imageUrl: 'https://images.unsplash.com/photo-1531482615713-2afd69097998?auto=format&fit=crop&w=1200&q=80', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'list', label: 'Key Features', icon: 'format_list_bulleted', title: 'What you can do', text: 'Build beautiful email campaigns\\nAutomate onboarding flows\\nTrack opens and clicks\\nPersonalize with variables', backgroundColor: '#f0fdf4', textColor: '#166534', textAlign: 'left', padding: 32, radius: 0 },\n { id: 4, type: 'button', label: 'CTA', icon: 'smart_button', text: 'Open Your Dashboard →', url: 'https://nowmail.app/dashboard', backgroundColor: '#ffffff', buttonColor: '#10b981', buttonTextColor: '#ffffff', textAlign: 'center', padding: 28, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '© 2026 {{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 22, radius: 0 },\n ],\n },\n {\n id: 'newsletter',\n name: 'Newsletter',\n description: 'Engaging newsletter layout with hero image, featured article, and social links.',\n icon: 'newspaper',\n category: 'Marketing',\n accentColor: '#8b5cf6',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}} Weekly', text: 'View in browser', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'hero', label: 'Hero', icon: 'image', title: \"This Week's Top Story\", text: 'Discover the latest updates and curated insights from {{company_name}}.', imageUrl: 'https://images.unsplash.com/photo-1504711434969-e33886168f5c?auto=format&fit=crop&w=1200&q=80', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'text', label: 'Article', icon: 'subject', title: 'Building Better Workflows', text: 'Teams are using automation and smarter templates to cut email production time by 60%.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'left', padding: 32, radius: 0 },\n { id: 4, type: 'button', label: 'Read More', icon: 'smart_button', text: 'Read Full Article →', url: 'https://nowmail.app/blog', backgroundColor: '#ffffff', buttonColor: '#8b5cf6', buttonTextColor: '#ffffff', textAlign: 'center', padding: 16, radius: 8 },\n { id: 5, type: 'quote', label: 'Quote', icon: 'format_quote', text: 'A great email template is not just beautiful — it\\'s a conversation starter.', title: 'Head of Growth, {{company_name}}', backgroundColor: '#f5f3ff', textColor: '#5b21b6', textAlign: 'center', padding: 36, radius: 0 },\n { id: 6, type: 'social', label: 'Social', icon: 'share', text: 'Follow us', backgroundColor: '#f8fafc', textColor: '#64748b', textAlign: 'center', padding: 28, radius: 0, socialLinks: [{ type: 'twitter', url: 'https://twitter.com' }, { type: 'linkedin', url: 'https://linkedin.com' }, { type: 'website', url: 'https://nowmail.app' }] },\n { id: 7, type: 'footer', label: 'Footer', icon: 'notes', text: '© 2026 {{company_name}}. Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'password-reset',\n name: 'Password Reset',\n description: 'Clean password reset email with a secure link and expiry warning.',\n icon: 'lock_reset',\n category: 'Authentication',\n accentColor: '#ef4444',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Security', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Intro', icon: 'subject', title: 'Reset your password', text: 'We received a request to reset your password. Click the button below to choose a new one.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 36, radius: 0 },\n { id: 3, type: 'button', label: 'Reset Button', icon: 'smart_button', text: 'Reset My Password', url: '{{reset_url}}', backgroundColor: '#ffffff', buttonColor: '#ef4444', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 4, type: 'badge', label: 'Expiry Notice', icon: 'verified', text: '⏱ This link expires in 24 hours', backgroundColor: '#fef2f2', textColor: '#b91c1c', textAlign: 'center', padding: 16, radius: 8 },\n { id: 5, type: 'text', label: 'Safety Note', icon: 'subject', title: '', text: \"If you didn't request a password reset, ignore this email. Your password won't change.\", backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n { id: 6, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'flash-sale',\n name: 'Flash Sale',\n description: 'High-energy promotional email with bold discount coupon and countdown urgency.',\n icon: 'local_fire_department',\n category: 'Promotion',\n accentColor: '#f97316',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Shop Now', url: 'https://nowmail.app/shop', backgroundColor: '#fff7ed', textColor: '#9a3412', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'hero', label: 'Sale Hero', icon: 'image', title: '🔥 Flash Sale — 48 Hours Only!', text: 'Up to 70% off on all products. Hurry, stocks are limited!', imageUrl: 'https://images.unsplash.com/photo-1607082348824-0a96f2a4b9da?auto=format&fit=crop&w=1200&q=80', backgroundColor: '#fff7ed', textColor: '#9a3412', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'coupon', label: 'Promo Code', icon: 'sell', title: 'Use code at checkout', text: 'FLASH70', secondaryText: '70% off · Ends {{sale_end_date}}', backgroundColor: '#ffedd5', textColor: '#c2410c', textAlign: 'center', padding: 32, radius: 12 },\n { id: 4, type: 'button', label: 'Shop Now', icon: 'smart_button', text: 'Shop the Sale →', url: 'https://nowmail.app/sale', backgroundColor: '#fff7ed', buttonColor: '#f97316', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '© 2026 {{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'order-confirmation',\n name: 'Order Confirmation',\n description: 'Professional e-commerce order confirmation with item summary and tracking link.',\n icon: 'shopping_bag',\n category: 'E-Commerce',\n accentColor: '#06b6d4',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Order Confirmed', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Status Badge', icon: 'verified', text: '✅ Order Confirmed!', backgroundColor: '#ecfdf5', textColor: '#065f46', textAlign: 'center', padding: 20, radius: 999 },\n { id: 3, type: 'text', label: 'Order Info', icon: 'subject', title: 'Thank you, {{first_name}}!', text: 'Your order #{{order_id}} has been placed and is being processed. You will receive a shipping update soon.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 28, radius: 0 },\n { id: 4, type: 'list', label: 'Order Summary', icon: 'format_list_bulleted', title: 'Order Summary', text: 'Order ID: {{order_id}}\\nItems: {{item_count}}\\nTotal: {{order_total}}\\nDelivery by: {{delivery_date}}', backgroundColor: '#f0fdfa', textColor: '#134e4a', textAlign: 'left', padding: 28, radius: 0 },\n { id: 5, type: 'button', label: 'Track Order', icon: 'smart_button', text: 'Track Your Order', url: '{{tracking_url}}', backgroundColor: '#ffffff', buttonColor: '#06b6d4', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 6, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Questions? Contact support@{{company_domain}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'account-suspended',\n name: 'Account Suspended',\n description: 'Formal account suspension notice with reason details and appeal options.',\n icon: 'block',\n category: 'Security',\n accentColor: '#dc2626',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Account Notice', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Status', icon: 'verified', text: '🚫 Account Suspended', backgroundColor: '#fef2f2', textColor: '#b91c1c', textAlign: 'center', padding: 20, radius: 999 },\n { id: 3, type: 'text', label: 'Details', icon: 'subject', title: 'Your account has been suspended', text: 'We have temporarily suspended your account due to a violation of our terms of service. Please review the details below.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 4, type: 'list', label: 'Reason', icon: 'format_list_bulleted', title: 'Suspension details', text: 'Reason: {{suspension_reason}}\\nDate: {{suspension_date}}\\nDuration: {{suspension_duration}}', backgroundColor: '#fef2f2', textColor: '#7f1d1d', textAlign: 'left', padding: 28, radius: 0 },\n { id: 5, type: 'button', label: 'Appeal', icon: 'smart_button', text: 'Submit an Appeal', url: 'https://nowmail.app/appeal', backgroundColor: '#ffffff', buttonColor: '#dc2626', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 6, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Trust & Safety · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'invoice',\n name: 'Invoice / Receipt',\n description: 'Clean billing invoice email with itemized breakdown and payment confirmation.',\n icon: 'receipt_long',\n category: 'Finance',\n accentColor: '#3b82f6',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Billing', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Invoice Title', icon: 'subject', title: 'Invoice #{{invoice_id}}', text: 'Your payment has been received. Here is your invoice for the billing period {{billing_period}}.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'left', padding: 32, radius: 0 },\n { id: 3, type: 'list', label: 'Line Items', icon: 'format_list_bulleted', title: 'Billing Summary', text: 'Plan: {{plan_name}}\\nPeriod: {{billing_period}}\\nSubtotal: {{subtotal}}\\nTax: {{tax}}\\nTotal Paid: {{total}}', backgroundColor: '#eff6ff', textColor: '#1e3a8a', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Download', icon: 'smart_button', text: 'Download PDF Invoice', url: '{{invoice_url}}', backgroundColor: '#ffffff', buttonColor: '#3b82f6', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Billing · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'product-launch',\n name: 'Product Launch',\n description: 'Exciting product launch announcement with feature highlights and early access CTA.',\n icon: 'rocket_launch',\n category: 'Marketing',\n accentColor: '#7c3aed',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'New Product', url: 'https://nowmail.app', backgroundColor: '#faf5ff', textColor: '#4c1d95', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'hero', label: 'Launch Hero', icon: 'image', title: '🚀 Introducing {{product_name}}', text: 'The future of {{product_category}} is here. Be among the first to experience it.', imageUrl: 'https://images.unsplash.com/photo-1518770660439-4636190af475?auto=format&fit=crop&w=1200&q=80', backgroundColor: '#faf5ff', textColor: '#4c1d95', textAlign: 'center', padding: 40, radius: 0 },\n { id: 3, type: 'list', label: 'Features', icon: 'format_list_bulleted', title: 'Key Features', text: '{{feature_1}}\\n{{feature_2}}\\n{{feature_3}}\\n{{feature_4}}', backgroundColor: '#f5f3ff', textColor: '#4c1d95', textAlign: 'left', padding: 32, radius: 0 },\n { id: 4, type: 'button', label: 'Get Early Access', icon: 'smart_button', text: 'Get Early Access →', url: '{{product_url}}', backgroundColor: '#faf5ff', buttonColor: '#7c3aed', buttonTextColor: '#ffffff', textAlign: 'center', padding: 28, radius: 8 },\n { id: 5, type: 'social', label: 'Social', icon: 'share', text: 'Share the launch', backgroundColor: '#f8fafc', textColor: '#64748b', textAlign: 'center', padding: 24, radius: 0, socialLinks: [{ type: 'twitter', url: 'https://twitter.com' }, { type: 'linkedin', url: 'https://linkedin.com' }, { type: 'facebook', url: 'https://facebook.com' }] },\n { id: 6, type: 'footer', label: 'Footer', icon: 'notes', text: '© 2026 {{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'shipping-update',\n name: 'Shipping Update',\n description: 'Real-time shipment tracking update with carrier info and estimated delivery.',\n icon: 'local_shipping',\n category: 'E-Commerce',\n accentColor: '#0891b2',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Track Order', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Status', icon: 'verified', text: '📦 Your Order is on its Way!', backgroundColor: '#e0f2fe', textColor: '#0c4a6e', textAlign: 'center', padding: 20, radius: 999 },\n { id: 3, type: 'text', label: 'Info', icon: 'subject', title: 'Shipment dispatched', text: 'Great news! Your order #{{order_id}} has been shipped and is on its way to you.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 28, radius: 0 },\n { id: 4, type: 'list', label: 'Tracking Info', icon: 'format_list_bulleted', title: 'Shipment Details', text: 'Carrier: {{carrier}}\\nTracking #: {{tracking_number}}\\nEstimated Delivery: {{delivery_date}}', backgroundColor: '#f0f9ff', textColor: '#0c4a6e', textAlign: 'left', padding: 28, radius: 0 },\n { id: 5, type: 'button', label: 'Track', icon: 'smart_button', text: 'Track My Package', url: '{{tracking_url}}', backgroundColor: '#ffffff', buttonColor: '#0891b2', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 6, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'abandoned-cart',\n name: 'Abandoned Cart',\n description: 'Recover lost sales with a friendly reminder and special discount incentive.',\n icon: 'shopping_cart',\n category: 'E-Commerce',\n accentColor: '#f43f5e',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Your Cart', url: 'https://nowmail.app/cart', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Reminder', icon: 'subject', title: 'You left something behind, {{first_name}}!', text: 'Your cart is missing you. The items you selected are still available — but not for long!', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'coupon', label: 'Discount', icon: 'sell', title: 'Complete your order & save', text: 'SAVE15', secondaryText: '15% off your cart · Limited time', backgroundColor: '#fff1f2', textColor: '#be123c', textAlign: 'center', padding: 32, radius: 12 },\n { id: 4, type: 'button', label: 'Return to Cart', icon: 'smart_button', text: 'Return to My Cart →', url: '{{cart_url}}', backgroundColor: '#ffffff', buttonColor: '#f43f5e', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'job-offer',\n name: 'Job Offer Letter',\n description: 'Professional job offer email with role details, compensation, and acceptance CTA.',\n icon: 'work',\n category: 'HR',\n accentColor: '#0d9488',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Human Resources', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Offer', icon: 'subject', title: 'Congratulations, {{first_name}}! 🎉', text: 'We are delighted to offer you the position of {{job_title}} at {{company_name}}. We believe your skills are an excellent fit for our team.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'list', label: 'Offer Details', icon: 'format_list_bulleted', title: 'Offer Details', text: 'Role: {{job_title}}\\nDepartment: {{department}}\\nStart Date: {{start_date}}\\nSalary: {{salary}}\\nLocation: {{location}}', backgroundColor: '#f0fdfa', textColor: '#134e4a', textAlign: 'left', padding: 32, radius: 0 },\n { id: 4, type: 'button', label: 'Accept Offer', icon: 'smart_button', text: 'Accept This Offer', url: '{{offer_url}}', backgroundColor: '#ffffff', buttonColor: '#0d9488', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'text', label: 'Note', icon: 'subject', title: '', text: 'Please accept or decline by {{deadline_date}}. For any questions, contact HR at {{hr_email}}.', backgroundColor: '#f8fafc', textColor: '#64748b', textAlign: 'center', padding: 24, radius: 0 },\n { id: 6, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} HR Team · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'appointment-reminder',\n name: 'Appointment Reminder',\n description: 'Medical appointment reminder with date, doctor details, and preparation instructions.',\n icon: 'calendar_month',\n category: 'Healthcare',\n accentColor: '#059669',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{clinic_name}}', text: 'Health Portal', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Reminder', icon: 'verified', text: '🗓 Upcoming Appointment', backgroundColor: '#ecfdf5', textColor: '#065f46', textAlign: 'center', padding: 20, radius: 999 },\n { id: 3, type: 'text', label: 'Details', icon: 'subject', title: 'Your appointment is confirmed', text: 'This is a friendly reminder of your upcoming appointment at {{clinic_name}}. Please arrive 10 minutes early.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 28, radius: 0 },\n { id: 4, type: 'list', label: 'Appointment Info', icon: 'format_list_bulleted', title: 'Appointment Details', text: 'Doctor: Dr. {{doctor_name}}\\nDate: {{appointment_date}}\\nTime: {{appointment_time}}\\nLocation: {{clinic_address}}', backgroundColor: '#f0fdf4', textColor: '#14532d', textAlign: 'left', padding: 28, radius: 0 },\n { id: 5, type: 'button', label: 'Manage', icon: 'smart_button', text: 'View / Reschedule', url: '{{appointment_url}}', backgroundColor: '#ffffff', buttonColor: '#059669', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 6, type: 'footer', label: 'Footer', icon: 'notes', text: '{{clinic_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'course-enrollment',\n name: 'Course Enrollment',\n description: 'E-learning enrollment confirmation with course details and start guide.',\n icon: 'school',\n category: 'Education',\n accentColor: '#6366f1',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'My Learning', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'hero', label: 'Hero', icon: 'image', title: \"You're enrolled in {{course_name}}!\", text: 'Your learning journey begins now. Get ready to gain new skills and advance your career.', imageUrl: 'https://images.unsplash.com/photo-1522202176988-66273c2fd55f?auto=format&fit=crop&w=1200&q=80', backgroundColor: '#eef2ff', textColor: '#3730a3', textAlign: 'center', padding: 36, radius: 0 },\n { id: 3, type: 'list', label: 'Course Details', icon: 'format_list_bulleted', title: 'Course Info', text: 'Course: {{course_name}}\\nInstructor: {{instructor_name}}\\nDuration: {{course_duration}}\\nStarts: {{start_date}}', backgroundColor: '#eef2ff', textColor: '#3730a3', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Start Learning', icon: 'smart_button', text: 'Start Learning →', url: '{{course_url}}', backgroundColor: '#ffffff', buttonColor: '#6366f1', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Education · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'subscription-renewal',\n name: 'Subscription Renewal',\n description: 'Upcoming subscription renewal notice with plan details and manage link.',\n icon: 'autorenew',\n category: 'Finance',\n accentColor: '#2563eb',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Billing', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Notice', icon: 'subject', title: 'Your subscription renews soon', text: 'Your {{plan_name}} plan will automatically renew on {{renewal_date}}. No action needed unless you want to make changes.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'list', label: 'Plan Details', icon: 'format_list_bulleted', title: 'Renewal Summary', text: 'Plan: {{plan_name}}\\nRenewal Date: {{renewal_date}}\\nAmount: {{renewal_amount}}\\nPayment Method: {{payment_method}}', backgroundColor: '#eff6ff', textColor: '#1e3a8a', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Manage', icon: 'smart_button', text: 'Manage Subscription', url: '{{billing_url}}', backgroundColor: '#ffffff', buttonColor: '#2563eb', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Billing · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'event-invitation',\n name: 'Event Invitation',\n description: 'Elegant event invitation with venue details, schedule, and RSVP button.',\n icon: 'event',\n category: 'Events',\n accentColor: '#ec4899',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Events', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'hero', label: 'Event Hero', icon: 'image', title: \"You're Invited! 🎟\", text: 'Join us for {{event_name}} — an unforgettable experience on {{event_date}} at {{event_venue}}.', imageUrl: 'https://images.unsplash.com/photo-1492684223066-81342ee5ff30?auto=format&fit=crop&w=1200&q=80', backgroundColor: '#fdf2f8', textColor: '#831843', textAlign: 'center', padding: 36, radius: 0 },\n { id: 3, type: 'list', label: 'Event Details', icon: 'format_list_bulleted', title: 'Event Details', text: 'Date: {{event_date}}\\nTime: {{event_time}}\\nVenue: {{event_venue}}\\nDress Code: {{dress_code}}', backgroundColor: '#fdf2f8', textColor: '#831843', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'RSVP', icon: 'smart_button', text: 'RSVP Now →', url: '{{rsvp_url}}', backgroundColor: '#ffffff', buttonColor: '#ec4899', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Events · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'feedback-request',\n name: 'Feedback Request',\n description: 'Post-purchase feedback survey with star rating prompt and incentive.',\n icon: 'star_rate',\n category: 'Marketing',\n accentColor: '#f59e0b',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Share Feedback', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Ask', icon: 'subject', title: 'How was your experience, {{first_name}}?', text: 'We hope you enjoyed your recent order. Your feedback helps us improve and serve you better. It only takes 1 minute!', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'coupon', label: 'Incentive', icon: 'sell', title: 'Leave a review & get', text: '10% OFF', secondaryText: 'Your next purchase', backgroundColor: '#fefce8', textColor: '#92400e', textAlign: 'center', padding: 28, radius: 12 },\n { id: 4, type: 'button', label: 'Rate Us', icon: 'smart_button', text: '⭐ Leave a Review', url: '{{review_url}}', backgroundColor: '#ffffff', buttonColor: '#f59e0b', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'referral-program',\n name: 'Referral Program',\n description: 'Referral invite email with unique code, reward breakdown, and sharing CTA.',\n icon: 'group_add',\n category: 'Marketing',\n accentColor: '#14b8a6',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Refer & Earn', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Intro', icon: 'subject', title: 'Earn rewards by referring friends!', text: 'Share your unique referral link and earn {{reward_amount}} for every friend who signs up and makes their first purchase.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'coupon', label: 'Referral Code', icon: 'sell', title: 'Your referral code', text: '{{referral_code}}', secondaryText: 'Share this with your friends', backgroundColor: '#f0fdfa', textColor: '#0f766e', textAlign: 'center', padding: 28, radius: 12 },\n { id: 4, type: 'button', label: 'Share', icon: 'smart_button', text: 'Share Your Link →', url: '{{referral_url}}', backgroundColor: '#ffffff', buttonColor: '#14b8a6', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'annual-report',\n name: 'Annual Report',\n description: 'Corporate annual report summary with key metrics, milestones, and shareholder CTA.',\n icon: 'bar_chart',\n category: 'Corporate',\n accentColor: '#1e40af',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Annual Report {{year}}', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'hero', label: 'Report Hero', icon: 'image', title: '{{company_name}} Annual Report {{year}}', text: 'A year of growth, innovation, and impact. Here is a summary of our key achievements.', imageUrl: 'https://images.unsplash.com/photo-1551288049-bebda4e38f71?auto=format&fit=crop&w=1200&q=80', backgroundColor: '#eff6ff', textColor: '#1e3a8a', textAlign: 'center', padding: 36, radius: 0 },\n { id: 3, type: 'list', label: 'Highlights', icon: 'format_list_bulleted', title: 'Key Highlights', text: 'Revenue: {{annual_revenue}}\\nNew Customers: {{new_customers}}\\nEmployee Count: {{employee_count}}\\nMarkets Served: {{markets}}', backgroundColor: '#eff6ff', textColor: '#1e3a8a', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Full Report', icon: 'smart_button', text: 'Read Full Report', url: '{{report_url}}', backgroundColor: '#ffffff', buttonColor: '#1e40af', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Investor Relations · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'trial-expiry',\n name: 'Trial Expiring Soon',\n description: 'Remind free-trial users to upgrade before their trial ends with a clear CTA.',\n icon: 'hourglass_bottom',\n category: 'SaaS',\n accentColor: '#7c3aed',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Account', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Warning', icon: 'verified', text: '⏳ Your trial ends in {{days_left}} days', backgroundColor: '#faf5ff', textColor: '#6d28d9', textAlign: 'center', padding: 18, radius: 999 },\n { id: 3, type: 'text', label: 'Body', icon: 'subject', title: \"Don't lose access to {{company_name}}\", text: 'Upgrade now to keep your data, workflows, and access uninterrupted. Choose the plan that fits you best.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 4, type: 'button', label: 'Upgrade', icon: 'smart_button', text: 'Upgrade My Plan →', url: '{{upgrade_url}}', backgroundColor: '#ffffff', buttonColor: '#7c3aed', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'property-listing',\n name: 'Property Listing Alert',\n description: 'Real estate new listing alert with property specs, images, and contact CTA.',\n icon: 'home',\n category: 'Real Estate',\n accentColor: '#b45309',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{agency_name}}', text: 'New Listings', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'hero', label: 'Property', icon: 'image', title: '🏠 New Property Available!', text: '{{property_address}} · {{property_type}} · {{bedrooms}} bed / {{bathrooms}} bath', imageUrl: 'https://images.unsplash.com/photo-1564013799919-ab600027ffc6?auto=format&fit=crop&w=1200&q=80', backgroundColor: '#fffbeb', textColor: '#78350f', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'list', label: 'Details', icon: 'format_list_bulleted', title: 'Property Details', text: 'Price: {{price}}\\nArea: {{area}} sq ft\\nType: {{property_type}}\\nAvailable: {{available_date}}', backgroundColor: '#fffbeb', textColor: '#78350f', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'View', icon: 'smart_button', text: 'Schedule a Viewing', url: '{{listing_url}}', backgroundColor: '#ffffff', buttonColor: '#b45309', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{agency_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'flight-booking',\n name: 'Flight Booking Confirmation',\n description: 'Travel booking confirmation with itinerary, seat info, and check-in CTA.',\n icon: 'flight_takeoff',\n category: 'Travel',\n accentColor: '#0369a1',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'My Trips', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Status', icon: 'verified', text: '✈️ Booking Confirmed!', backgroundColor: '#e0f2fe', textColor: '#0c4a6e', textAlign: 'center', padding: 20, radius: 999 },\n { id: 3, type: 'list', label: 'Itinerary', icon: 'format_list_bulleted', title: 'Flight Details', text: 'Flight: {{flight_number}}\\nFrom: {{origin}} → To: {{destination}}\\nDate: {{departure_date}}\\nDeparture: {{departure_time}}\\nSeat: {{seat_number}}\\nBooking Ref: {{booking_ref}}', backgroundColor: '#f0f9ff', textColor: '#0c4a6e', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Check In', icon: 'smart_button', text: 'Online Check-In →', url: '{{checkin_url}}', backgroundColor: '#ffffff', buttonColor: '#0369a1', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Travel · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'donation-receipt',\n name: 'Donation Receipt',\n description: 'Nonprofit tax-deductible donation receipt with impact statement and share CTA.',\n icon: 'volunteer_activism',\n category: 'Nonprofit',\n accentColor: '#16a34a',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{org_name}}', text: 'Donation Receipt', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Thanks', icon: 'subject', title: 'Thank you for your generosity, {{first_name}}! 💚', text: 'Your donation of {{amount}} on {{donation_date}} makes a real difference. This email serves as your official tax receipt.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'list', label: 'Receipt', icon: 'format_list_bulleted', title: 'Donation Details', text: 'Amount: {{amount}}\\nDate: {{donation_date}}\\nTransaction ID: {{transaction_id}}\\nOrg EIN: {{ein_number}}', backgroundColor: '#f0fdf4', textColor: '#14532d', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Share', icon: 'smart_button', text: 'Spread the Word', url: '{{share_url}}', backgroundColor: '#ffffff', buttonColor: '#16a34a', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{org_name}} is a registered nonprofit · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'api-downtime',\n name: 'API / Service Downtime',\n description: 'IT incident notification for service disruption with status page and ETA.',\n icon: 'cloud_off',\n category: 'IT / DevOps',\n accentColor: '#dc2626',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}} Status', text: 'Incident Report', url: 'https://nowmail.app/status', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Alert', icon: 'verified', text: '🔴 Service Disruption Detected', backgroundColor: '#fef2f2', textColor: '#b91c1c', textAlign: 'center', padding: 18, radius: 999 },\n { id: 3, type: 'text', label: 'Details', icon: 'subject', title: 'We are investigating an issue', text: 'Our team is actively working to resolve the issue affecting {{affected_service}}. We apologize for the inconvenience.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 28, radius: 0 },\n { id: 4, type: 'list', label: 'Incident Info', icon: 'format_list_bulleted', title: 'Incident Details', text: 'Service: {{affected_service}}\\nStarted: {{incident_start}}\\nEstimated Fix: {{eta}}\\nIncident ID: {{incident_id}}', backgroundColor: '#fef2f2', textColor: '#7f1d1d', textAlign: 'left', padding: 28, radius: 0 },\n { id: 5, type: 'button', label: 'Status', icon: 'smart_button', text: 'View Status Page', url: '{{status_url}}', backgroundColor: '#ffffff', buttonColor: '#dc2626', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 6, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Engineering · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'pr-announcement',\n name: 'Press Release',\n description: 'Corporate press release announcement with key message and media contact info.',\n icon: 'campaign',\n category: 'Corporate',\n accentColor: '#0f172a',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Press Release', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Release', icon: 'subject', title: '{{headline}}', text: '{{company_name}} today announced {{announcement_summary}}. This marks a significant milestone in the company\\'s mission to {{company_mission}}.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'left', padding: 32, radius: 0 },\n { id: 3, type: 'quote', label: 'Quote', icon: 'format_quote', text: '\"{{executive_quote}}\"', title: '{{executive_name}}, {{executive_title}} at {{company_name}}', backgroundColor: '#f1f5f9', textColor: '#0f172a', textAlign: 'center', padding: 32, radius: 0 },\n { id: 4, type: 'button', label: 'Full Release', icon: 'smart_button', text: 'Read Full Press Release', url: '{{press_url}}', backgroundColor: '#ffffff', buttonColor: '#0f172a', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: 'Media Contact: {{pr_contact}} · {{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'gdpr-data-request',\n name: 'GDPR Data Request',\n description: 'Compliance email confirming user data export request with download link.',\n icon: 'privacy_tip',\n category: 'Compliance',\n accentColor: '#4338ca',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Privacy Center', url: 'https://nowmail.app/privacy', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Confirm', icon: 'subject', title: 'Your data is ready to download', text: 'We have processed your data export request. Your personal data archive is now available for download. The link expires in 48 hours.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'badge', label: 'Expiry', icon: 'verified', text: '⏱ Link expires in 48 hours', backgroundColor: '#eef2ff', textColor: '#3730a3', textAlign: 'center', padding: 16, radius: 8 },\n { id: 4, type: 'button', label: 'Download', icon: 'smart_button', text: 'Download My Data', url: '{{data_download_url}}', backgroundColor: '#ffffff', buttonColor: '#4338ca', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Privacy Team · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'employee-onboarding',\n name: 'Employee Onboarding',\n description: 'First-day onboarding email for new hires with schedule, resources, and IT setup links.',\n icon: 'badge',\n category: 'HR',\n accentColor: '#0891b2',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Welcome Aboard', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Welcome', icon: 'subject', title: \"Welcome to the team, {{first_name}}! 🎉\", text: \"We're so excited to have you join {{company_name}}. Here's everything you need to know for your first day.\", backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'list', label: 'First Day Info', icon: 'format_list_bulleted', title: 'Your First Day', text: 'Date: {{start_date}}\\nReporting Time: {{report_time}}\\nOffice: {{office_address}}\\nManager: {{manager_name}}\\nIT Setup: {{it_setup_url}}', backgroundColor: '#e0f2fe', textColor: '#0c4a6e', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Portal', icon: 'smart_button', text: 'Access Employee Portal', url: '{{portal_url}}', backgroundColor: '#ffffff', buttonColor: '#0891b2', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} People Team · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'two-factor-enabled',\n name: '2FA Enabled',\n description: 'Security confirmation that two-factor authentication has been successfully enabled.',\n icon: 'security',\n category: 'Authentication',\n accentColor: '#059669',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Security', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Status', icon: 'verified', text: '🛡️ Two-Factor Auth Enabled', backgroundColor: '#ecfdf5', textColor: '#065f46', textAlign: 'center', padding: 20, radius: 999 },\n { id: 3, type: 'text', label: 'Confirm', icon: 'subject', title: 'Your account is now more secure', text: 'Two-factor authentication has been enabled on your {{company_name}} account. You will now be required to enter a code each time you log in.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 4, type: 'text', label: 'Warning', icon: 'subject', title: '', text: \"If you didn't enable 2FA, please contact our support team immediately and secure your account.\", backgroundColor: '#fef2f2', textColor: '#b91c1c', textAlign: 'center', padding: 20, radius: 8 },\n { id: 5, type: 'button', label: 'Manage', icon: 'smart_button', text: 'Manage Security Settings', url: '{{security_url}}', backgroundColor: '#ffffff', buttonColor: '#059669', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 6, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Security · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'seasonal-promo',\n name: 'Seasonal Promotion',\n description: 'Holiday/seasonal promotional blast with festive design, discount code, and shop CTA.',\n icon: 'celebration',\n category: 'Promotion',\n accentColor: '#dc2626',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Special Offers', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'hero', label: 'Promo Hero', icon: 'image', title: '{{season}} Sale is here! 🎉', text: 'Celebrate the season with exclusive deals up to {{discount}}% off storewide.', imageUrl: 'https://images.unsplash.com/photo-1512389142860-9c449e58a543?auto=format&fit=crop&w=1200&q=80', backgroundColor: '#fff1f2', textColor: '#9f1239', textAlign: 'center', padding: 36, radius: 0 },\n { id: 3, type: 'coupon', label: 'Code', icon: 'sell', title: 'Your exclusive code', text: '{{promo_code}}', secondaryText: '{{discount}}% off · Ends {{end_date}}', backgroundColor: '#fff1f2', textColor: '#be123c', textAlign: 'center', padding: 28, radius: 12 },\n { id: 4, type: 'button', label: 'Shop', icon: 'smart_button', text: 'Shop the Sale →', url: '{{shop_url}}', backgroundColor: '#ffffff', buttonColor: '#dc2626', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'delivery-failed',\n name: 'Delivery Failed',\n description: 'Failed delivery notification with redelivery scheduling and support contact.',\n icon: 'package_2',\n category: 'Logistics',\n accentColor: '#ea580c',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Delivery Status', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Status', icon: 'verified', text: '⚠️ Delivery Attempt Failed', backgroundColor: '#fff7ed', textColor: '#9a3412', textAlign: 'center', padding: 20, radius: 999 },\n { id: 3, type: 'text', label: 'Info', icon: 'subject', title: \"We couldn't deliver your package\", text: 'Our courier attempted delivery for order #{{order_id}} but was unable to complete it. Please reschedule or pick up from the depot.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Reschedule', icon: 'smart_button', text: 'Reschedule Delivery', url: '{{reschedule_url}}', backgroundColor: '#ffffff', buttonColor: '#ea580c', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Logistics · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'game-achievement',\n name: 'Game Achievement',\n description: 'Gaming milestone email celebrating a user achievement with reward details.',\n icon: 'emoji_events',\n category: 'Gaming',\n accentColor: '#d97706',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{game_name}}', text: 'Achievements', url: 'https://nowmail.app', backgroundColor: '#1c1917', textColor: '#fef3c7', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'hero', label: 'Achievement', icon: 'image', title: '🏆 Achievement Unlocked!', text: 'You earned the \"{{achievement_name}}\" badge. Keep it up, {{first_name}}!', imageUrl: 'https://images.unsplash.com/photo-1542751371-adc38448a05e?auto=format&fit=crop&w=1200&q=80', backgroundColor: '#1c1917', textColor: '#fef3c7', textAlign: 'center', padding: 36, radius: 0 },\n { id: 3, type: 'coupon', label: 'Reward', icon: 'sell', title: 'Your reward', text: '+{{reward_points}} XP', secondaryText: 'Bonus: {{bonus_item}}', backgroundColor: '#292524', textColor: '#fbbf24', textAlign: 'center', padding: 28, radius: 12 },\n { id: 4, type: 'button', label: 'Play', icon: 'smart_button', text: 'Continue Playing →', url: '{{game_url}}', backgroundColor: '#1c1917', buttonColor: '#d97706', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{game_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#1c1917', textColor: '#78716c', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'bank-transaction',\n name: 'Bank Transaction Alert',\n description: 'Real-time banking transaction notification with amount, merchant, and fraud alert link.',\n icon: 'account_balance',\n category: 'Banking',\n accentColor: '#1d4ed8',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{bank_name}}', text: 'Transaction Alert', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Alert', icon: 'verified', text: '💳 Transaction Processed', backgroundColor: '#eff6ff', textColor: '#1e3a8a', textAlign: 'center', padding: 20, radius: 999 },\n { id: 3, type: 'list', label: 'Transaction', icon: 'format_list_bulleted', title: 'Transaction Details', text: 'Amount: {{amount}}\\nMerchant: {{merchant}}\\nDate: {{transaction_date}}\\nAccount: {{account_last4}}\\nBalance: {{balance}}', backgroundColor: '#eff6ff', textColor: '#1e3a8a', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Report', icon: 'smart_button', text: 'Not you? Report Fraud', url: '{{fraud_url}}', backgroundColor: '#ffffff', buttonColor: '#dc2626', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{bank_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'loyalty-points',\n name: 'Loyalty Points Earned',\n description: 'Retail loyalty program update showing points earned, balance, and redemption CTA.',\n icon: 'loyalty',\n category: 'Retail',\n accentColor: '#9333ea',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}} Rewards', text: 'My Points', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Update', icon: 'subject', title: \"You've earned {{points_earned}} points! ⭐\", text: 'Your recent purchase has been credited to your rewards account. Here is your updated balance.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'coupon', label: 'Balance', icon: 'sell', title: 'Total Points Balance', text: '{{total_points}} pts', secondaryText: 'Redeem for {{redemption_value}} in rewards', backgroundColor: '#faf5ff', textColor: '#7e22ce', textAlign: 'center', padding: 28, radius: 12 },\n { id: 4, type: 'button', label: 'Redeem', icon: 'smart_button', text: 'Redeem Points →', url: '{{redeem_url}}', backgroundColor: '#ffffff', buttonColor: '#9333ea', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Rewards · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'server-deployment',\n name: 'Deployment Notification',\n description: 'IT/DevOps deployment success or failure notification with release notes link.',\n icon: 'deployed_code',\n category: 'IT / DevOps',\n accentColor: '#0284c7',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}} DevOps', text: 'Deployment Alert', url: 'https://nowmail.app', backgroundColor: '#0f172a', textColor: '#f1f5f9', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Status', icon: 'verified', text: '✅ Deployment Successful', backgroundColor: '#ecfdf5', textColor: '#065f46', textAlign: 'center', padding: 18, radius: 999 },\n { id: 3, type: 'list', label: 'Deploy Info', icon: 'format_list_bulleted', title: 'Deployment Details', text: 'Service: {{service_name}}\\nVersion: {{version}}\\nEnvironment: {{environment}}\\nDeployed by: {{deployed_by}}\\nTime: {{deploy_time}}', backgroundColor: '#0f172a', textColor: '#94a3b8', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Release Notes', icon: 'smart_button', text: 'View Release Notes', url: '{{release_url}}', backgroundColor: '#0f172a', buttonColor: '#0284c7', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Engineering · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#0f172a', textColor: '#475569', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'webinar-invite',\n name: 'Webinar Invitation',\n description: 'Live webinar invite with speaker bio, agenda preview, and registration CTA.',\n icon: 'videocam',\n category: 'Events',\n accentColor: '#0ea5e9',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Webinars', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'hero', label: 'Hero', icon: 'image', title: \"📡 Join Us Live: {{webinar_title}}\", text: 'A free live session with {{speaker_name}} on {{webinar_date}} at {{webinar_time}}.', imageUrl: 'https://images.unsplash.com/photo-1591115765373-5207764f72e7?auto=format&fit=crop&w=1200&q=80', backgroundColor: '#f0f9ff', textColor: '#0c4a6e', textAlign: 'center', padding: 36, radius: 0 },\n { id: 3, type: 'list', label: 'Agenda', icon: 'format_list_bulleted', title: \"What you'll learn\", text: '{{topic_1}}\\n{{topic_2}}\\n{{topic_3}}\\nLive Q&A with {{speaker_name}}', backgroundColor: '#f0f9ff', textColor: '#0c4a6e', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Register', icon: 'smart_button', text: 'Register for Free →', url: '{{register_url}}', backgroundColor: '#ffffff', buttonColor: '#0ea5e9', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'support-ticket-opened',\n name: 'Support Ticket Opened',\n description: 'Customer support ticket confirmation with ticket number and expected response time.',\n icon: 'support_agent',\n category: 'Support',\n accentColor: '#0891b2',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}} Support', text: 'Help Center', url: 'https://nowmail.app/support', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Status', icon: 'verified', text: '🎟 Ticket #{{ticket_id}} Received', backgroundColor: '#e0f2fe', textColor: '#0c4a6e', textAlign: 'center', padding: 18, radius: 999 },\n { id: 3, type: 'text', label: 'Confirm', icon: 'subject', title: \"We've received your request\", text: 'Our support team will review your ticket and get back to you within {{response_time}}. You can track your ticket status anytime.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'View Ticket', icon: 'smart_button', text: 'View Ticket Status', url: '{{ticket_url}}', backgroundColor: '#ffffff', buttonColor: '#0891b2', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Support · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'product-restock',\n name: 'Back in Stock',\n description: 'Restock alert for wishlisted items with product details and quick buy CTA.',\n icon: 'inventory',\n category: 'E-Commerce',\n accentColor: '#16a34a',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Shop Now', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Alert', icon: 'verified', text: '🎉 Back in Stock!', backgroundColor: '#f0fdf4', textColor: '#14532d', textAlign: 'center', padding: 20, radius: 999 },\n { id: 3, type: 'text', label: 'Info', icon: 'subject', title: \"Good news, {{first_name}}! {{product_name}} is back!\", text: 'The item on your wishlist is available again. Grab it before it sells out — these go fast!', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Buy Now', icon: 'smart_button', text: 'Shop Now →', url: '{{product_url}}', backgroundColor: '#ffffff', buttonColor: '#16a34a', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'certificate-issued',\n name: 'Certificate Issued',\n description: 'Course completion certificate email with achievement summary and download CTA.',\n icon: 'workspace_premium',\n category: 'Education',\n accentColor: '#b45309',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Certificates', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'hero', label: 'Hero', icon: 'image', title: '🎓 Congratulations, {{first_name}}!', text: \"You've successfully completed {{course_name}}. Your certificate is ready.\", imageUrl: 'https://images.unsplash.com/photo-1523289333742-be1143f6b766?auto=format&fit=crop&w=1200&q=80', backgroundColor: '#fffbeb', textColor: '#78350f', textAlign: 'center', padding: 36, radius: 0 },\n { id: 3, type: 'list', label: 'Details', icon: 'format_list_bulleted', title: 'Certificate Details', text: 'Course: {{course_name}}\\nCompleted: {{completion_date}}\\nCertificate ID: {{cert_id}}\\nIssued by: {{company_name}}', backgroundColor: '#fffbeb', textColor: '#78350f', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Download', icon: 'smart_button', text: 'Download Certificate', url: '{{cert_url}}', backgroundColor: '#ffffff', buttonColor: '#b45309', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Education · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'policy-update',\n name: 'Policy Update',\n description: 'Terms of service or privacy policy update notification with change summary.',\n icon: 'gavel',\n category: 'Compliance',\n accentColor: '#475569',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Policy Update', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Notice', icon: 'subject', title: 'Important update to our {{policy_name}}', text: \"We're updating our {{policy_name}} effective {{effective_date}}. Here's a summary of the key changes.\", backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'list', label: 'Changes', icon: 'format_list_bulleted', title: 'Key Changes', text: '{{change_1}}\\n{{change_2}}\\n{{change_3}}', backgroundColor: '#f8fafc', textColor: '#475569', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Review', icon: 'smart_button', text: 'Review Full Policy', url: '{{policy_url}}', backgroundColor: '#ffffff', buttonColor: '#475569', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Legal · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'insurance-renewal',\n name: 'Insurance Renewal',\n description: 'Insurance policy renewal reminder with coverage summary and premium details.',\n icon: 'health_and_safety',\n category: 'Insurance',\n accentColor: '#0369a1',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Policy Renewal', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Notice', icon: 'subject', title: 'Your policy renews on {{renewal_date}}', text: 'Your {{policy_type}} policy #{{policy_number}} is due for renewal. Review your coverage and renew to stay protected.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'list', label: 'Policy Info', icon: 'format_list_bulleted', title: 'Policy Details', text: 'Policy: {{policy_number}}\\nType: {{policy_type}}\\nRenewal Date: {{renewal_date}}\\nPremium: {{premium_amount}}', backgroundColor: '#e0f2fe', textColor: '#0c4a6e', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Renew', icon: 'smart_button', text: 'Renew My Policy', url: '{{renew_url}}', backgroundColor: '#ffffff', buttonColor: '#0369a1', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Insurance · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'content-digest',\n name: 'Content Digest',\n description: 'Media weekly content digest with top articles, podcast episodes, and video links.',\n icon: 'rss_feed',\n category: 'Media',\n accentColor: '#e11d48',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}} Digest', text: 'View online', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Intro', icon: 'subject', title: \"This week's best content 🎬\", text: \"Here's your weekly roundup of the top articles, videos, and podcasts curated just for you.\", backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 28, radius: 0 },\n { id: 3, type: 'list', label: 'Top Picks', icon: 'format_list_bulleted', title: 'Top Picks This Week', text: '📰 {{article_1}}\\n🎧 {{podcast_1}}\\n📹 {{video_1}}\\n🔥 Trending: {{trending_topic}}', backgroundColor: '#fff1f2', textColor: '#881337', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Explore', icon: 'smart_button', text: 'Explore All Content →', url: '{{content_url}}', backgroundColor: '#ffffff', buttonColor: '#e11d48', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} Media · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'vehicle-service',\n name: 'Vehicle Service Reminder',\n description: 'Automotive service due reminder with mileage details and booking CTA.',\n icon: 'directions_car',\n category: 'Automotive',\n accentColor: '#374151',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{dealership_name}}', text: 'Service Center', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Info', icon: 'subject', title: 'Time for your {{service_type}}', text: 'Your {{vehicle_year}} {{vehicle_make}} {{vehicle_model}} is due for its {{service_type}}. Keep your vehicle in top condition.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 28, radius: 0 },\n { id: 3, type: 'list', label: 'Details', icon: 'format_list_bulleted', title: 'Service Info', text: 'Vehicle: {{vehicle_year}} {{vehicle_make}} {{vehicle_model}}\\nService: {{service_type}}\\nDue at: {{due_mileage}} miles', backgroundColor: '#f1f5f9', textColor: '#1e293b', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Book', icon: 'smart_button', text: 'Book a Service Appointment', url: '{{booking_url}}', backgroundColor: '#ffffff', buttonColor: '#374151', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{dealership_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'restaurant-reservation',\n name: 'Restaurant Reservation',\n description: 'Dining reservation confirmation with table details, location, and menu preview.',\n icon: 'restaurant',\n category: 'Hospitality',\n accentColor: '#b91c1c',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{restaurant_name}}', text: 'Reservations', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Status', icon: 'verified', text: '🍽 Reservation Confirmed!', backgroundColor: '#fef2f2', textColor: '#991b1b', textAlign: 'center', padding: 20, radius: 999 },\n { id: 3, type: 'list', label: 'Booking', icon: 'format_list_bulleted', title: 'Your Booking', text: 'Date: {{reservation_date}}\\nTime: {{reservation_time}}\\nGuests: {{guest_count}}\\nRef: {{reservation_ref}}', backgroundColor: '#fef2f2', textColor: '#991b1b', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Manage', icon: 'smart_button', text: 'Manage Reservation', url: '{{reservation_url}}', backgroundColor: '#ffffff', buttonColor: '#b91c1c', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{restaurant_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'crypto-alert',\n name: 'Crypto Price Alert',\n description: 'Cryptocurrency price alert notification with market data and trade CTA.',\n icon: 'currency_bitcoin',\n category: 'Crypto / Finance',\n accentColor: '#f59e0b',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Price Alerts', url: 'https://nowmail.app', backgroundColor: '#0f172a', textColor: '#fef3c7', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Alert', icon: 'subject', title: '{{coin_name}} hit {{alert_price}}!', text: '{{coin_name}} ({{coin_symbol}}) has reached your target price. Current price: {{current_price}}.', backgroundColor: '#0f172a', textColor: '#e2e8f0', textAlign: 'center', padding: 28, radius: 0 },\n { id: 3, type: 'list', label: 'Market Data', icon: 'format_list_bulleted', title: 'Market Snapshot', text: 'Price: {{current_price}}\\n24h Change: {{change_24h}}\\nMarket Cap: {{market_cap}}', backgroundColor: '#1e293b', textColor: '#94a3b8', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Trade', icon: 'smart_button', text: 'Trade Now →', url: '{{trade_url}}', backgroundColor: '#0f172a', buttonColor: '#f59e0b', buttonTextColor: '#000000', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Crypto investments carry risk. Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#0f172a', textColor: '#475569', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'account-verified',\n name: 'Account Verified',\n description: 'Email verification success confirmation with next steps and profile setup guide.',\n icon: 'verified',\n category: 'Authentication',\n accentColor: '#10b981',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Account Setup', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'badge', label: 'Status', icon: 'verified', text: '✅ Email Verified Successfully!', backgroundColor: '#ecfdf5', textColor: '#065f46', textAlign: 'center', padding: 20, radius: 999 },\n { id: 3, type: 'list', label: 'Next Steps', icon: 'format_list_bulleted', title: 'Complete your setup', text: 'Complete your profile\\nSet your preferences\\nExplore key features\\nInvite your team', backgroundColor: '#ecfdf5', textColor: '#065f46', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Get Started', icon: 'smart_button', text: 'Get Started →', url: '{{dashboard_url}}', backgroundColor: '#ffffff', buttonColor: '#10b981', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'survey-invite',\n name: 'Survey Invitation',\n description: 'Customer satisfaction survey with estimated time and incentive for completion.',\n icon: 'poll',\n category: 'Marketing',\n accentColor: '#6366f1',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Your Opinion Matters', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Ask', icon: 'subject', title: 'Share your thoughts, {{first_name}}!', text: \"We'd love to hear about your experience. Your feedback shapes our product roadmap.\", backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'coupon', label: 'Reward', icon: 'sell', title: 'Complete the survey to win', text: '{{prize_value}} Gift Card', secondaryText: 'Takes only {{survey_time}} minutes', backgroundColor: '#eef2ff', textColor: '#3730a3', textAlign: 'center', padding: 28, radius: 12 },\n { id: 4, type: 'button', label: 'Take Survey', icon: 'smart_button', text: 'Take the Survey →', url: '{{survey_url}}', backgroundColor: '#ffffff', buttonColor: '#6366f1', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'project-update',\n name: 'Project Status Update',\n description: 'Project management stakeholder update with milestones, blockers, and next steps.',\n icon: 'task_alt',\n category: 'Corporate',\n accentColor: '#0891b2',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Project Updates', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Status', icon: 'subject', title: '{{project_name}} — Status Update', text: 'Latest update for {{project_name}} as of {{update_date}}. Overall status: {{project_status}}.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'left', padding: 28, radius: 0 },\n { id: 3, type: 'list', label: 'Progress', icon: 'format_list_bulleted', title: 'Progress Summary', text: 'Completed: {{completed_tasks}}\\nIn Progress: {{in_progress_tasks}}\\nBlockers: {{blockers}}\\nNext Milestone: {{next_milestone}}', backgroundColor: '#e0f2fe', textColor: '#0c4a6e', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Dashboard', icon: 'smart_button', text: 'View Project Dashboard', url: '{{project_url}}', backgroundColor: '#ffffff', buttonColor: '#0891b2', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'subscription-cancelled',\n name: 'Subscription Cancelled',\n description: 'Cancellation confirmation with access end date, win-back offer, and resubscribe CTA.',\n icon: 'cancel',\n category: 'SaaS',\n accentColor: '#64748b',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'Account', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'text', label: 'Confirm', icon: 'subject', title: \"We're sorry to see you go, {{first_name}}\", text: 'Your {{plan_name}} subscription has been cancelled. You will continue to have access until {{access_end_date}}.', backgroundColor: '#ffffff', textColor: '#374151', textAlign: 'center', padding: 32, radius: 0 },\n { id: 3, type: 'coupon', label: 'Win-back', icon: 'sell', title: 'Come back with a special offer', text: 'COMEBACK30', secondaryText: '30% off if you resubscribe within 30 days', backgroundColor: '#f8fafc', textColor: '#475569', textAlign: 'center', padding: 28, radius: 12 },\n { id: 4, type: 'button', label: 'Resubscribe', icon: 'smart_button', text: 'Reactivate My Account', url: '{{reactivate_url}}', backgroundColor: '#ffffff', buttonColor: '#64748b', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n {\n id: 'partner-announcement',\n name: 'Partnership Announcement',\n description: 'Business partnership announcement with collaboration benefits and joint CTA.',\n icon: 'handshake',\n category: 'Corporate',\n accentColor: '#7c3aed',\n blocks: [\n { id: 1, type: 'header', label: 'Header', icon: 'view_headline', title: '{{company_name}}', text: 'News', url: 'https://nowmail.app', backgroundColor: '#ffffff', textColor: '#0f172a', textAlign: 'left', padding: 22, radius: 0 },\n { id: 2, type: 'hero', label: 'Hero', icon: 'image', title: '🤝 {{company_name}} × {{partner_name}}', text: \"We're thrilled to announce our new partnership with {{partner_name}} to bring you even more value.\", imageUrl: 'https://images.unsplash.com/photo-1521737604893-d14cc237f11d?auto=format&fit=crop&w=1200&q=80', backgroundColor: '#faf5ff', textColor: '#4c1d95', textAlign: 'center', padding: 36, radius: 0 },\n { id: 3, type: 'list', label: 'Benefits', icon: 'format_list_bulleted', title: 'What this means for you', text: '{{benefit_1}}\\n{{benefit_2}}\\n{{benefit_3}}', backgroundColor: '#faf5ff', textColor: '#4c1d95', textAlign: 'left', padding: 28, radius: 0 },\n { id: 4, type: 'button', label: 'Learn More', icon: 'smart_button', text: 'Learn More →', url: '{{partnership_url}}', backgroundColor: '#ffffff', buttonColor: '#7c3aed', buttonTextColor: '#ffffff', textAlign: 'center', padding: 24, radius: 8 },\n { id: 5, type: 'footer', label: 'Footer', icon: 'notes', text: '{{company_name}} · Unsubscribe: {{unsubscribe_url}}', backgroundColor: '#f8fafc', textColor: '#94a3b8', textAlign: 'center', padding: 24, radius: 0 },\n ],\n },\n];\n","import {\n Component,\n HostListener,\n ViewEncapsulation,\n computed,\n signal,\n inject,\n Input,\n Output,\n EventEmitter,\n OnInit,\n DestroyRef,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject, debounceTime } from 'rxjs';\nimport Swal from 'sweetalert2';\nimport { EmailBuilderStorageService, EmailBuilderApiConfig } from './email-builder-storage.service';\nimport { VersionService } from './version.service';\nimport { EmailBuilderFooterComponent } from './components/email-builder-footer.component';\nimport { EmailBuilderHeaderComponent } from './components/email-builder-header.component';\nimport { EmailBuilderInspectorComponent } from './components/email-builder-inspector.component';\nimport { EmailBuilderSidebarComponent } from './components/email-builder-sidebar.component';\nimport { EmailBuilderTemplateDrawerComponent } from './components/email-builder-template-drawer.component';\nimport { EmailTemplateCanvasComponent } from './components/email-template-canvas.component';\nimport { EMAIL_BLOCK_LIBRARY } from './email-template-builder.library';\nimport { EMAIL_SAMPLE_TEMPLATES } from './email-template-builder.templates';\nimport {\n BlockPreset,\n EditorView,\n ResizeSide,\n SampleTemplate,\n TemplateBlock,\n TemplateBlockType,\n TemplateVariable,\n ViewportSize,\n} from './email-template-builder.models';\n\n@Component({\n selector: 'ngx-email-builder',\n standalone: true,\n imports: [\n EmailBuilderFooterComponent,\n EmailBuilderHeaderComponent,\n EmailBuilderInspectorComponent,\n EmailBuilderSidebarComponent,\n EmailBuilderTemplateDrawerComponent,\n EmailTemplateCanvasComponent,\n ],\n templateUrl: './email-template-builder.component.html',\n styleUrls: ['./email-template-builder.component.css'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class EmailTemplateBuilderComponent implements OnInit {\n @Input() apiConfig?: EmailBuilderApiConfig;\n @Input() autoSave = true;\n @Input() saveInterval = 5000;\n @Input() initialTemplateId?: string;\n\n @Output() onSaveSuccess = new EventEmitter<any>();\n @Output() onSaveError = new EventEmitter<any>();\n\n readonly blockLibrary = signal<BlockPreset[]>(EMAIL_BLOCK_LIBRARY);\n readonly sampleTemplates = EMAIL_SAMPLE_TEMPLATES;\n readonly templateDrawerOpen = signal(false);\n\n readonly viewport = signal<ViewportSize>('desktop');\n readonly previewMode = signal(false);\n readonly editorView = signal<EditorView>('canvas');\n readonly lastSaved = signal('Not saved');\n readonly currentTemplateId = signal<string | null>(null);\n readonly isSaving = signal(false);\n private readonly templateService = inject(EmailBuilderStorageService);\n private readonly versionService = inject(VersionService);\n readonly libVersion = this.versionService.currentVersion;\n private readonly destroyRef = inject(DestroyRef);\n private readonly autoSave$ = new Subject<void>();\n readonly selectedBlockId = signal(2);\n readonly sourceCode = signal('');\n readonly sourceStatus = signal('Generated source is in sync');\n readonly draggedBlockId = signal<number | null>(null);\n readonly dropTargetIndex = signal<number | null>(null);\n readonly leftPanelWidth = signal(300);\n readonly rightPanelWidth = signal(340);\n readonly resizingSide = signal<ResizeSide | null>(null);\n readonly templateName = signal('Untitled Template');\n readonly focusedField = signal<string | null>(null);\n readonly drawerTab = signal<'samples' | 'saved'>('samples');\n readonly autoSaveEnabled = signal(true);\n readonly toastMessage = signal<string | null>(null);\n private isApplying = false;\n readonly variables = signal<TemplateVariable[]>([]);\n readonly blocks = signal<TemplateBlock[]>([\n {\n id: 1,\n type: 'header',\n label: 'Brand Header',\n icon: 'dock_to_left',\n title: 'NowMail',\n text: 'View Online',\n url: 'https://nowmail.app',\n backgroundColor: 'transparent',\n textColor: '#94a3b8',\n titleColor: '#000000',\n padding: 24,\n textAlign: 'center'\n },\n {\n id: 2,\n type: 'hero',\n label: 'Welcome Hero',\n icon: 'image',\n title: 'Welcome to the Future of Email Design',\n text: 'Create stunning, responsive email templates in minutes. Our builder combines power with simplicity to help you reach your audience with style.',\n imageUrl: 'https://images.unsplash.com/photo-1614850523296-d8c1af93d400?auto=format&fit=crop&w=1200&q=80',\n backgroundColor: '#1e293b',\n textColor: '#cbd5e1',\n titleColor: '#ffffff',\n padding: 64,\n radius: 12\n },\n {\n id: 3,\n type: 'text',\n label: 'Value Prop',\n icon: 'stars',\n title: 'Built for Performance',\n text: 'Every block is optimized for deliverability and high conversion. Export clean, table-based HTML that looks perfect in every inbox from Gmail to Outlook.',\n backgroundColor: 'transparent',\n textColor: '#4b5563',\n padding: 34,\n radius: 0,\n },\n {\n id: 4,\n type: 'button',\n label: 'Call To Action',\n icon: 'smart_button',\n text: 'Get Started Now',\n url: 'https://nowmail.app/get-started',\n backgroundColor: 'transparent',\n buttonColor: '#1167ff',\n buttonTextColor: '#ffffff',\n padding: 26,\n radius: 8,\n },\n {\n id: 5,\n type: 'social',\n label: 'Social Footer',\n icon: 'share',\n text: '(c) 2026 NowMail. All rights reserved.',\n backgroundColor: 'transparent',\n textColor: '#64748b',\n padding: 28,\n radius: 0,\n },\n ]);\n\n readonly selectedBlock = computed(() =>\n this.blocks().find((block) => block.id === this.selectedBlockId()),\n );\n readonly workspaceGridColumns = computed(\n () =>\n `${this.leftPanelWidth()}px minmax(360px, 1fr) ${this.rightPanelWidth()}px`,\n );\n readonly variableValues = computed(() =>\n this.variables().reduce<Record<string, string>>((values, variable) => {\n const name = variable.name.trim();\n if (name) {\n values[name] = variable.value;\n }\n\n return values;\n }, {}),\n );\n\n constructor() {\n this.syncSourceCode();\n }\n\n ngOnInit() {\n if (this.apiConfig) {\n this.templateService.setConfig(this.apiConfig);\n }\n\n this.versionService.checkVersion();\n\n this.autoSaveEnabled.set(this.autoSave);\n\n // Setup auto-save listener with dynamic interval\n this.autoSave$\n .pipe(\n debounceTime(this.saveInterval),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n if (this.autoSaveEnabled() && !this.isApplying) {\n this.saveTemplate(true);\n }\n });\n\n if (this.initialTemplateId) {\n this.templateService.getTemplate(this.initialTemplateId).subscribe({\n next: (tpl) => this.executeLoadSavedTemplate(tpl),\n error: (err) => {\n console.error('Failed to load initial template', err);\n this.onSaveError.emit(err);\n }\n });\n }\n }\n\n selectBlock(blockId: number): void {\n if (!this.previewMode()) {\n this.selectedBlockId.set(blockId);\n }\n }\n\n openTemplateDrawer(): void {\n this.templateDrawerOpen.set(true);\n }\n\n closeTemplateDrawer(): void {\n this.templateDrawerOpen.set(false);\n }\n\n applyTemplate(template: SampleTemplate): void {\n if (this.blocks().length > 0) {\n Swal.fire({\n title: 'Replace current design?',\n text: 'This will remove all your current blocks.',\n icon: 'warning',\n showCancelButton: true,\n confirmButtonColor: '#1167ff',\n cancelButtonColor: '#64748b',\n confirmButtonText: 'Yes, apply it',\n background: '#111c2e',\n color: '#ffffff'\n }).then((result) => {\n if (result.isConfirmed) {\n this.executeApplyTemplate(template);\n }\n });\n } else {\n this.executeApplyTemplate(template);\n }\n }\n\n private executeApplyTemplate(template: SampleTemplate): void {\n this.isApplying = true;\n const baseId = Math.max(...this.blocks().map((b) => b.id), 0) + 1;\n const remapped = template.blocks.map((block, index) => ({\n ...block,\n id: baseId + index,\n }));\n this.blocks.set(remapped);\n this.templateName.set(template.name);\n this.currentTemplateId.set(null);\n this.selectedBlockId.set(remapped[0]?.id ?? 1);\n this.templateDrawerOpen.set(false);\n this.syncSourceCode();\n setTimeout(() => (this.isApplying = false), 500);\n }\n\n loadSavedTemplate(template: any): void {\n if (this.blocks().length > 0) {\n Swal.fire({\n title: 'Load this template?',\n text: 'Your current design will be replaced.',\n icon: 'question',\n showCancelButton: true,\n confirmButtonColor: '#1167ff',\n cancelButtonColor: '#64748b',\n confirmButtonText: 'Yes, load it',\n background: '#111c2e',\n color: '#ffffff'\n }).then((result) => {\n if (result.isConfirmed) {\n this.executeLoadSavedTemplate(template);\n }\n });\n } else {\n this.executeLoadSavedTemplate(template);\n }\n }\n\n private executeLoadSavedTemplate(template: any): void {\n this.isApplying = true;\n if (template.jsonContent) {\n const { blocks, variables } = template.jsonContent;\n this.blocks.set(blocks || []);\n this.variables.set(variables || []);\n this.templateName.set(template.name || 'Untitled Template');\n this.currentTemplateId.set(template.id);\n this.selectedBlockId.set(blocks?.[0]?.id ?? 1);\n this.templateDrawerOpen.set(false);\n this.syncSourceCode();\n }\n setTimeout(() => (this.isApplying = false), 500);\n }\n\n openMyTemplates(): void {\n this.drawerTab.set('saved');\n this.templateDrawerOpen.set(true);\n }\n\n openSampleTemplates(): void {\n this.drawerTab.set('samples');\n this.templateDrawerOpen.set(true);\n }\n\n clearCanvas(): void {\n Swal.fire({\n title: 'Clear Canvas?',\n text: 'This will remove all blocks from your design. You cannot undo this.',\n icon: 'warning',\n showCancelButton: true,\n confirmButtonColor: '#ef4444',\n cancelButtonColor: '#64748b',\n confirmButtonText: 'Yes, clear it',\n background: '#111c2e',\n color: '#ffffff'\n }).then((result) => {\n if (result.isConfirmed) {\n this.blocks.set([]);\n this.currentTemplateId.set(null);\n this.templateName.set('Untitled Template');\n this.syncSourceCode();\n }\n });\n }\n\n addBlock(preset: BlockPreset): void {\n this.insertBlock(preset, this.blocks().length);\n }\n\n patchBlockLibrary(presets: BlockPreset[]): void {\n this.blockLibrary.set(\n presets.filter((preset) => this.isBlockType(preset.type)),\n );\n }\n\n insertBlock(preset: BlockPreset, index: number): void {\n const nextId = Math.max(...this.blocks().map((block) => block.id), 0) + 1;\n const block = this.createBlock(preset.type, nextId, preset.columnCount);\n\n this.blocks.update((blocks) => [\n ...blocks.slice(0, index),\n block,\n ...blocks.slice(index),\n ]);\n this.selectedBlockId.set(nextId);\n this.syncSourceCode();\n }\n\n duplicateBlock(blockId: number, event?: Event): void {\n event?.stopPropagation();\n\n const block = this.blocks().find((item) => item.id === blockId);\n if (!block) {\n return;\n }\n\n const nextId = Math.max(...this.blocks().map((item) => item.id), 0) + 1;\n const blockIndex = this.blocks().findIndex((item) => item.id === blockId);\n const copy = {\n ...block,\n id: nextId,\n label: `${block.label} Copy`,\n };\n\n this.blocks.update((blocks) => [\n ...blocks.slice(0, blockIndex + 1),\n copy,\n ...blocks.slice(blockIndex + 1),\n ]);\n this.selectedBlockId.set(nextId);\n this.syncSourceCode();\n }\n\n deleteBlock(blockId: number, event?: Event): void {\n event?.stopPropagation();\n\n if (this.blocks().length === 1) {\n return;\n }\n\n this.blocks.update((blocks) => blocks.filter((block) => block.id !== blockId));\n\n if (this.selectedBlockId() === blockId) {\n this.selectedBlockId.set(this.blocks()[0].id);\n }\n this.syncSourceCode();\n }\n\n moveBlock(blockId: number, direction: -1 | 1, event?: Event): void {\n event?.stopPropagation();\n\n const blocks = [...this.blocks()];\n const index = blocks.findIndex((block) => block.id === blockId);\n const nextIndex = index + direction;\n\n if (index < 0 || nextIndex < 0 || nextIndex >= blocks.length) {\n return;\n }\n\n [blocks[index], blocks[nextIndex]] = [blocks[nextIndex], blocks[index]];\n this.blocks.set(blocks);\n this.syncSourceCode();\n }\n\n updateSelected(\n key: keyof TemplateBlock,\n value: TemplateBlock[keyof TemplateBlock],\n ): void {\n const selected = this.selectedBlock();\n if (!selected) {\n return;\n }\n\n if (key === 'columnCount') {\n this.updateColumnCount(selected.id, Number(value));\n return;\n }\n\n this.blocks.update((blocks) =>\n blocks.map((block) =>\n block.id === selected.id\n ? {\n ...block,\n [key]: value,\n }\n : block,\n ),\n );\n this.syncSourceCode();\n }\n\n saveTemplate(isAutoSave = false): void {\n if (this.blocks().length === 0) {\n if (!isAutoSave) {\n Swal.fire({\n title: 'Empty Canvas',\n text: 'Please add at least one block before saving.',\n icon: 'info',\n confirmButtonColor: '#1167ff',\n background: '#111c2e',\n color: '#ffffff'\n });\n }\n return;\n }\n\n const now = new Date();\n const data = {\n id: this.currentTemplateId(),\n name: this.templateName(),\n jsonContent: {\n blocks: this.blocks(),\n variables: this.variables()\n },\n htmlContent: this.sourceCode() || this.buildEmailHtml()\n };\n\n this.isSaving.set(true);\n this.templateService.saveTemplate(data).subscribe({\n next: (res: any) => {\n if (res.success) {\n this.currentTemplateId.set(res.data.id);\n this.lastSaved.set(\n (isAutoSave ? 'Auto-saved at ' : 'Saved at ') +\n now.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n }),\n );\n\n if (!isAutoSave) {\n Swal.fire({\n title: 'Saved!',\n text: 'Template persisted successfully.',\n icon: 'success',\n timer: 1500,\n showConfirmButton: false,\n background: '#111c2e',\n color: '#ffffff',\n });\n }\n this.onSaveSuccess.emit(res.data);\n }\n this.isSaving.set(false);\n },\n error: (err) => {\n console.error('Save failed', err);\n this.isSaving.set(false);\n this.lastSaved.set('Save failed');\n if (!isAutoSave) {\n Swal.fire({\n title: 'Save Failed',\n text: 'There was an error persisting your template.',\n icon: 'error',\n confirmButtonColor: '#ef4444',\n background: '#111c2e',\n color: '#ffffff',\n });\n }\n this.onSaveError.emit(err);\n },\n });\n }\n\n exportTemplate(): void {\n const html = this.sourceCode() || this.buildEmailHtml();\n const blob = new Blob([html], { type: 'text/html;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n\n anchor.href = url;\n anchor.download = 'email-template.html';\n anchor.click();\n URL.revokeObjectURL(url);\n }\n\n copyTemplate(): void {\n const html = this.sourceCode() || this.buildEmailHtml();\n navigator.clipboard?.writeText(html).then(() => {\n this.showToast('HTML copied to clipboard!');\n });\n this.lastSaved.set('Copied HTML');\n }\n\n showToast(message: string): void {\n this.toastMessage.set(message);\n setTimeout(() => this.toastMessage.set(null), 3000);\n }\n\n onLibraryDragStart(preset: BlockPreset, event: DragEvent): void {\n const payload = JSON.stringify(preset);\n event.dataTransfer?.setData('application/x-email-block-preset', payload);\n event.dataTransfer?.setData('application/x-email-block-type', preset.type);\n event.dataTransfer?.setData('text/plain', preset.type);\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'copy';\n }\n }\n\n onBlockDragStart(blockId: number, event: DragEvent): void {\n event.stopPropagation();\n this.draggedBlockId.set(blockId);\n event.dataTransfer?.setData('application/x-email-block-id', String(blockId));\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n }\n }\n\n onDragOver(event: DragEvent, index = this.blocks().length): void {\n if (this.previewMode()) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n this.dropTargetIndex.set(index);\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = this.draggedBlockId() ? 'move' : 'copy';\n }\n }\n\n onDrop(event: DragEvent, index = this.blocks().length): void {\n if (this.previewMode()) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const droppedPreset = this.readDroppedPreset(event);\n const droppedBlockId = Number(\n event.dataTransfer?.getData('application/x-email-block-id'),\n );\n\n if (droppedPreset) {\n this.insertBlock(droppedPreset, index);\n } else if (Number.isFinite(droppedBlockId)) {\n this.reorderBlock(droppedBlockId, index);\n }\n\n this.clearDragState();\n }\n\n clearDragState(): void {\n this.draggedBlockId.set(null);\n this.dropTargetIndex.set(null);\n }\n\n onSourceCodeChange(html: string): void {\n this.sourceCode.set(html);\n this.applySourceCode(html);\n this.autoSave$.next();\n }\n\n addVariable(): void {\n const nextId =\n Math.max(...this.variables().map((variable) => variable.id), 0) + 1;\n\n this.variables.update((variables) => [\n {\n id: nextId,\n name: `variable_${nextId}`,\n value: 'Preview value',\n },\n ...variables,\n ]);\n }\n\n handleImageUpload(file: File): void {\n const selected = this.selectedBlock();\n if (!selected) return;\n\n const reader = new FileReader();\n reader.onload = (e: any) => {\n const base64String = e.target.result;\n this.updateSelected('imageUrl', base64String);\n this.showToast('Image uploaded and applied!');\n };\n reader.onerror = (err) => {\n console.error('File reading failed', err);\n Swal.fire({\n title: 'Read Failed',\n text: 'There was an error reading your image file.',\n icon: 'error',\n confirmButtonColor: '#ef4444',\n background: '#111c2e',\n color: '#ffffff',\n });\n };\n reader.readAsDataURL(file);\n }\n\n handleSocialIconUpload(event: { file: File; index: number }): void {\n const selected = this.selectedBlock();\n if (!selected || !selected.socialLinks) return;\n\n const reader = new FileReader();\n reader.onload = (e: any) => {\n const base64String = e.target.result;\n const links = selected.socialLinks!.map((link, i) => {\n if (i === event.index) {\n return { ...link, icon: base64String, iconType: 'url' as const };\n }\n return link;\n });\n this.updateSelected('socialLinks', links);\n this.showToast('Social icon uploaded!');\n };\n reader.readAsDataURL(event.file);\n }\n\n updateVariable(id: number, key: 'name' | 'value', value: string): void {\n this.variables.update((variables) =>\n variables.map((variable) =>\n variable.id === id\n ? {\n ...variable,\n [key]: value,\n }\n : variable,\n ),\n );\n this.autoSave$.next();\n }\n\n deleteVariable(id: number): void {\n if (this.variables().length === 1) {\n return;\n }\n\n this.variables.update((variables) =>\n variables.filter((variable) => variable.id !== id),\n );\n this.autoSave$.next();\n }\n\n insertVariableToken(name: string): void {\n const selected = this.selectedBlock();\n const variableName = name.trim();\n if (!selected || !variableName) {\n return;\n }\n\n let key: keyof TemplateBlock = this.focusedField() as any;\n\n if (!key || !(key in selected)) {\n key = ['hero', 'header', 'button', 'coupon', 'social', 'quote', 'text', 'paragraph', 'list', 'footer', 'image', 'badge'].includes(selected.type)\n ? 'text'\n : 'title';\n }\n\n const existing = String(selected[key] ?? '').trim();\n const token = `{{${variableName}}}`;\n\n this.updateSelected(key, `${existing}${existing ? ' ' : ''}${token}`);\n }\n\n addColumnContent(\n blockId: number,\n columnIndex: number,\n type: TemplateBlockType,\n ): void {\n const nextId = this.nextBlockId();\n const child = this.createColumnChild(type, nextId);\n\n this.blocks.update((blocks) =>\n blocks.map((block) => {\n if (block.id !== blockId || block.type !== 'columns') {\n return block;\n }\n\n const columns = this.normalizeColumns(block);\n columns[columnIndex] = [...(columns[columnIndex] ?? []), child];\n\n return {\n ...block,\n columns,\n };\n }),\n );\n this.syncSourceCode();\n }\n\n removeColumnContent(blockId: number, columnIndex: number, childId: number): void {\n this.blocks.update((blocks) =>\n blocks.map((block) => {\n if (block.id !== blockId || block.type !== 'columns') {\n return block;\n }\n\n const columns = this.normalizeColumns(block);\n columns[columnIndex] = (columns[columnIndex] ?? []).filter(\n (child) => child.id !== childId,\n );\n\n return {\n ...block,\n columns,\n };\n }),\n );\n this.syncSourceCode();\n }\n\n updateColumnCount(blockId: number, columnCount: number): void {\n const nextCount = this.clamp(Math.round(columnCount), 1, 12);\n\n this.blocks.update((blocks) =>\n blocks.map((block) => {\n if (block.id !== blockId || block.type !== 'columns') {\n return block;\n }\n\n const columns = this.normalizeColumns(block);\n const resizedColumns = Array.from(\n { length: nextCount },\n (_, index) => columns[index] ?? [],\n );\n\n return {\n ...block,\n label: `${nextCount} Column`,\n columnCount: nextCount,\n columns: resizedColumns,\n };\n }),\n );\n this.syncSourceCode();\n }\n\n startPanelResize(side: ResizeSide, event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.resizingSide.set(side);\n }\n\n @HostListener('document:mousemove', ['$event'])\n onPanelResize(event: MouseEvent): void {\n const side = this.resizingSide();\n if (!side) {\n return;\n }\n\n const viewportWidth = window.innerWidth;\n const canvasMinWidth = 360;\n const leftMax = Math.min(480, viewportWidth - this.rightPanelWidth() - canvasMinWidth);\n const rightMax = Math.min(540, viewportWidth - this.leftPanelWidth() - canvasMinWidth);\n\n if (side === 'left') {\n this.leftPanelWidth.set(this.clamp(event.clientX, 220, leftMax));\n return;\n }\n\n this.rightPanelWidth.set(\n this.clamp(viewportWidth - event.clientX, 260, rightMax),\n );\n }\n\n @HostListener('document:mouseup')\n stopPanelResize(): void {\n this.resizingSide.set(null);\n }\n\n trackByBlockId(_: number, block: TemplateBlock): number {\n return block.id;\n }\n\n private reorderBlock(blockId: number, targetIndex: number): void {\n const blocks = [...this.blocks()];\n const fromIndex = blocks.findIndex((block) => block.id === blockId);\n\n if (fromIndex < 0 || fromIndex === targetIndex) {\n return;\n }\n\n const [movedBlock] = blocks.splice(fromIndex, 1);\n const adjustedIndex = fromIndex < targetIndex ? targetIndex - 1 : targetIndex;\n blocks.splice(Math.max(0, adjustedIndex), 0, movedBlock);\n this.blocks.set(blocks);\n this.selectedBlockId.set(blockId);\n this.syncSourceCode();\n }\n\n private readDroppedPreset(event: DragEvent): BlockPreset | null {\n const rawPreset = event.dataTransfer?.getData('application/x-email-block-preset');\n if (rawPreset) {\n try {\n const preset = JSON.parse(rawPreset) as BlockPreset;\n return this.isBlockType(preset.type) ? preset : null;\n } catch {\n return null;\n }\n }\n\n const type = event.dataTransfer?.getData(\n 'application/x-email-block-type',\n ) as TemplateBlockType;\n\n return this.isBlockType(type)\n ? (this.blockLibrary().find((block) => block.type === type) ?? {\n type,\n label: type,\n icon: 'widgets',\n description: '',\n })\n : null;\n }\n\n private syncSourceCode(): void {\n this.sourceCode.set(this.buildEmailHtml());\n this.sourceStatus.set('Generated source is in sync');\n this.autoSave$.next();\n }\n\n private applySourceCode(html: string): void {\n if (typeof DOMParser === 'undefined') {\n this.sourceStatus.set('Source preview updated');\n return;\n }\n\n const doc = new DOMParser().parseFromString(html, 'text/html');\n const rows = Array.from(\n doc.querySelectorAll<HTMLTableRowElement>('tr[data-email-block]'),\n );\n\n if (!rows.length) {\n this.sourceStatus.set('Source preview updated; no editable blocks found');\n return;\n }\n\n const parsedBlocks = rows\n .map((row, index) => this.parseBlockRow(row, index + 1))\n .filter((block): block is TemplateBlock => Boolean(block));\n\n if (!parsedBlocks.length) {\n this.sourceStatus.set('Source preview updated; blocks could not be parsed');\n return;\n }\n\n this.blocks.set(parsedBlocks);\n this.selectedBlockId.set(\n parsedBlocks.some((block) => block.id === this.selectedBlockId())\n ? this.selectedBlockId()\n : parsedBlocks[0].id,\n );\n this.sourceStatus.set('Canvas updated from source');\n }\n\n private parseBlockRow(row: HTMLTableRowElement, id: number): TemplateBlock | null {\n const type = row.dataset['emailBlock'] as TemplateBlockType;\n if (!this.isBlockType(type)) {\n return null;\n }\n\n const preset = this.blockLibrary().find((block) => block.type === type);\n const cell = row.querySelector<HTMLTableCellElement>('td');\n const base = this.createBlock(type, id);\n const padding = this.readNumber(row.dataset['padding']) ?? this.readPadding(cell);\n const backgroundColor =\n row.dataset['background'] ?? this.readStyleValue(cell, 'background') ?? base.backgroundColor;\n const textColor =\n row.dataset['textColor'] ?? this.readStyleValue(cell, 'color') ?? base.textColor;\n const textAlign = this.readTextAlign(row.dataset['align']) ?? base.textAlign;\n\n const block: TemplateBlock = {\n ...base,\n id,\n label: row.dataset['label'] || base.label,\n icon: preset?.icon ?? base.icon,\n backgroundColor,\n textColor,\n textAlign,\n padding: padding ?? base.padding,\n };\n\n if (type === 'header') {\n const brand = row.querySelector('td td:first-child');\n const link = row.querySelector<HTMLAnchorElement>('a');\n block.title = this.readText(brand) || base.title;\n block.text = this.readText(link) || base.text;\n block.url = link?.getAttribute('href') ?? base.url;\n }\n\n if (type === 'hero') {\n block.imageUrl =\n row.querySelector<HTMLImageElement>('img')?.getAttribute('src') ??\n base.imageUrl;\n block.title = this.readText(row.querySelector('h1')) || base.title;\n block.text = this.readText(row.querySelector('p')) || base.text;\n }\n\n if (type === 'text') {\n block.title = this.readText(row.querySelector('h2')) || base.title;\n block.text = this.readText(row.querySelector('p')) || base.text;\n }\n\n if (type === 'image') {\n block.imageUrl =\n row.querySelector<HTMLImageElement>('img')?.getAttribute('src') ??\n base.imageUrl;\n block.text = this.readText(row.querySelector('p')) || base.text;\n }\n\n if (type === 'columns') {\n const columnCount = this.readNumber(row.dataset['columnCount']) ?? base.columnCount ?? 3;\n block.columnCount = columnCount;\n block.columns = this.createColumns(columnCount);\n }\n\n if (type === 'quote') {\n const paragraphs = Array.from(row.querySelectorAll('p'));\n block.text = this.readText(paragraphs[0]) || base.text;\n block.title = this.readText(paragraphs[1]) || base.title;\n }\n\n if (type === 'button') {\n const button = row.querySelector<HTMLAnchorElement>('a');\n block.text = this.readText(button) || base.text;\n block.url = button?.getAttribute('href') ?? base.url;\n block.buttonColor =\n row.dataset['buttonColor'] ??\n this.readStyleValue(button, 'background') ??\n base.buttonColor;\n block.buttonTextColor =\n row.dataset['buttonTextColor'] ??\n this.readStyleValue(button, 'color') ??\n base.buttonTextColor;\n block.radius =\n this.readNumber(row.dataset['radius']) ??\n this.readPixels(this.readStyleValue(button, 'border-radius')) ??\n base.radius;\n }\n\n if (type === 'coupon') {\n const paragraphs = Array.from(row.querySelectorAll('p'));\n block.title = this.readText(paragraphs[0]) || base.title;\n block.text = this.readText(paragraphs[1]) || base.text;\n block.secondaryText = this.readText(paragraphs[2]) || base.secondaryText;\n block.radius = this.readNumber(row.dataset['radius']) ?? base.radius;\n }\n\n if (type === 'divider') {\n const divider = row.querySelector<HTMLDivElement>('div');\n block.textColor =\n row.dataset['textColor'] ??\n this.readBorderColor(divider) ??\n base.textColor;\n }\n\n if (type === 'spacer') {\n block.padding = padding ?? this.readPixels(this.readStyleValue(cell, 'height')) ?? base.padding;\n }\n\n if (type === 'social') {\n block.text = this.readText(row.querySelector('p')) || base.text;\n }\n\n if (type === 'list' || type === 'footer' || type === 'badge') {\n block.title = this.readText(row.querySelector('h2')) || base.title;\n block.text = this.readText(row.querySelector('p, span, li')) || base.text;\n }\n\n return block;\n }\n\n private createBlock(\n type: TemplateBlockType,\n id: number,\n columnCount = 3,\n ): TemplateBlock {\n if (type === 'columns') {\n return {\n id,\n type,\n label: `${columnCount} Column`,\n icon: 'view_column',\n backgroundColor: '#ffffff',\n textColor: '#475569',\n textAlign: 'left',\n columnCount,\n columns: this.createColumns(columnCount),\n padding: 30,\n radius: 0,\n };\n }\n\n const defaults: Record<Exclude<TemplateBlockType, 'columns'>, TemplateBlock> = {\n header: {\n id,\n type,\n label: 'Header',\n icon: 'view_headline',\n title: '{{company_name}}',\n text: 'View online',\n url: 'https://nowmail.app',\n backgroundColor: '#ffffff',\n textColor: '#0f172a',\n textAlign: 'left',\n padding: 22,\n radius: 0,\n },\n hero: {\n id,\n type,\n label: 'Hero Section',\n icon: 'image',\n title: 'A clear headline goes here',\n text: 'Use this space for a campaign promise, announcement or product story.',\n imageUrl:\n 'https://images.unsplash.com/photo-1551434678-e076c223a692?auto=format&fit=crop&w=1200&q=80',\n backgroundColor: '#ffffff',\n textColor: '#111827',\n textAlign: 'center',\n padding: 32,\n radius: 0,\n },\n text: {\n id,\n type,\n label: 'Text Block',\n icon: 'subject',\n title: 'Section title',\n text: 'Add useful context, supporting details and next steps for your readers.',\n backgroundColor: '#ffffff',\n textColor: '#475569',\n textAlign: 'center',\n padding: 28,\n radius: 0,\n },\n paragraph: {\n id,\n type,\n label: 'Paragraph',\n icon: 'short_text',\n title: '',\n text: 'Write your paragraph text here. You can include links, formatting, and any supporting details your readers need.',\n backgroundColor: '#ffffff',\n textColor: '#475569',\n textAlign: 'left',\n padding: 28,\n radius: 0,\n },\n image: {\n id,\n type,\n label: 'Image',\n icon: 'add_photo_alternate',\n text: 'Product update preview',\n imageUrl:\n 'https://images.unsplash.com/photo-1516321318423-f06f85e504b3?auto=format&fit=crop&w=1200&q=80',\n backgroundColor: '#ffffff',\n textColor: '#64748b',\n textAlign: 'center',\n padding: 24,\n radius: 0,\n },\n quote: {\n id,\n type,\n label: 'Quote',\n icon: 'format_quote',\n title: 'Customer Success Team',\n text: 'This editor helps us move from idea to production-ready email in minutes.',\n backgroundColor: '#f8fafc',\n textColor: '#334155',\n textAlign: 'center',\n padding: 32,\n radius: 0,\n },\n button: {\n id,\n type,\n label: 'Call To Action',\n icon: 'smart_button',\n text: 'Open Dashboard',\n url: 'https://nowmail.app',\n backgroundColor: '#ffffff',\n buttonColor: '#1167ff',\n buttonTextColor: '#ffffff',\n textAlign: 'center',\n padding: 24,\n radius: 8,\n },\n coupon: {\n id,\n type,\n label: 'Coupon',\n icon: 'sell',\n title: 'Limited offer',\n text: 'SAVE20',\n secondaryText: 'Use this code before Friday',\n backgroundColor: '#eef6ff',\n textColor: '#0f172a',\n textAlign: 'center',\n padding: 28,\n radius: 10,\n },\n list: {\n id,\n type,\n label: 'List',\n icon: 'format_list_bulleted',\n title: 'What you get',\n text: 'Reusable sections\\nResponsive email layout\\nEditable source code',\n backgroundColor: '#ffffff',\n textColor: '#475569',\n textAlign: 'left',\n padding: 28,\n radius: 0,\n },\n badge: {\n id,\n type,\n label: 'Badge',\n icon: 'verified',\n text: 'New Feature',\n backgroundColor: '#e8f1ff',\n textColor: '#0f4fbf',\n textAlign: 'center',\n padding: 18,\n radius: 999,\n },\n divider: {\n id,\n type,\n label: 'Divider',\n icon: 'horizontal_rule',\n backgroundColor: '#ffffff',\n textColor: '#dbe3ef',\n textAlign: 'center',\n padding: 18,\n radius: 0,\n },\n spacer: {\n id,\n type,\n label: 'Spacer',\n icon: 'height',\n backgroundColor: '#ffffff',\n textColor: '#ffffff',\n textAlign: 'center',\n padding: 32,\n radius: 0,\n },\n footer: {\n id,\n type,\n label: 'Footer',\n icon: 'notes',\n text: 'You are receiving this email from {{company_name}}. Unsubscribe: {{unsubscribe_url}}',\n backgroundColor: '#f4f7fb',\n textColor: '#64748b',\n textAlign: 'center',\n padding: 26,\n radius: 0,\n },\n social: {\n id,\n type,\n label: 'Social Links',\n icon: 'share',\n text: 'Follow us on social media',\n backgroundColor: '#f8fafc',\n textColor: '#64748b',\n textAlign: 'center',\n padding: 28,\n radius: 0,\n socialLinks: [\n { type: 'facebook', url: 'https://facebook.com', iconType: 'material' },\n { type: 'twitter', url: 'https://twitter.com', iconType: 'material' },\n { type: 'linkedin', url: 'https://linkedin.com', iconType: 'material' },\n ],\n },\n };\n\n return defaults[type];\n }\n\n private createColumns(columnCount: number): TemplateBlock[][] {\n return Array.from({ length: columnCount }, (_, index) => [\n this.createColumnChild(index === 0 ? 'text' : 'image', -(index + 1)),\n ]);\n }\n\n private normalizeColumns(block: TemplateBlock): TemplateBlock[][] {\n const columnCount = block.columnCount ?? block.columns?.length ?? 3;\n\n return Array.from(\n { length: columnCount },\n (_, index) => [...(block.columns?.[index] ?? [])],\n );\n }\n\n private createColumnChild(type: TemplateBlockType, id: number): TemplateBlock {\n const supportedType = ['text', 'image', 'quote', 'button', 'badge', 'list'].includes(type)\n ? type\n : 'text';\n const block = this.createBlock(supportedType as TemplateBlockType, id);\n\n return {\n ...block,\n label: block.label.replace(' Block', ''),\n padding: supportedType === 'image' ? 0 : 10,\n };\n }\n\n private nextBlockId(): number {\n const childIds = this.blocks().reduce<number[]>((acc, block) => {\n const ids = (block.columns ?? []).reduce<number[]>((cAcc, column) => {\n return [...cAcc, ...column.map((child) => child.id)];\n }, []);\n return [...acc, ...ids];\n }, []);\n\n return Math.max(...this.blocks().map((block) => block.id), ...childIds, 0) + 1;\n }\n\n private renderColumnChildHtml(child: TemplateBlock): string {\n const color = child.textColor ?? '#475569';\n const align = child.textAlign ?? 'left';\n\n if (child.type === 'image') {\n return ` <img src=\"${this.escapeHtml(child.imageUrl ?? '')}\" alt=\"\" width=\"160\" style=\"display:block;width:100%;height:auto;border-radius:${child.radius ?? 8}px;\">`;\n }\n\n if (child.type === 'quote') {\n return ` <p style=\"margin:0 0 10px;font-size:14px;line-height:1.6;color:${color};font-style:italic;text-align:${align};\">\"${this.escapeHtml(child.text ?? '')}\"</p>`;\n }\n\n if (child.type === 'button') {\n return ` <p style=\"margin:0 0 10px;text-align:${align};\"><a href=\"${this.escapeHtml(child.url ?? '#')}\" style=\"display:inline-block;background:${child.buttonColor};color:${child.buttonTextColor};text-decoration:none;font-weight:700;font-size:13px;padding:10px 16px;border-radius:${child.radius ?? 8}px;\">${this.escapeHtml(child.text ?? '')}</a></p>`;\n }\n\n if (child.type === 'badge') {\n return ` <p style=\"margin:0 0 10px;text-align:${align};\"><span style=\"display:inline-block;background:${child.backgroundColor};color:${color};padding:7px 10px;border-radius:${child.radius ?? 999}px;font-size:12px;font-weight:700;\">${this.escapeHtml(child.text ?? '')}</span></p>`;\n }\n\n if (child.type === 'list') {\n const items = (child.text ?? '')\n .split('\\n')\n .filter(Boolean)\n .map((item) => `<li>${this.escapeHtml(item)}</li>`)\n .join('');\n\n return ` <ul style=\"margin:0 0 10px;padding-left:18px;font-size:13px;line-height:1.55;color:${color};text-align:${align};\">${items}</ul>`;\n }\n\n return ` <h3 style=\"margin:0 0 8px;font-size:16px;line-height:1.3;color:#111827;text-align:${align};\">${this.escapeHtml(child.title ?? '')}</h3>\n <p style=\"margin:0 0 10px;font-size:13px;line-height:1.6;color:${color};text-align:${align};\">${this.escapeHtml(child.text ?? '')}</p>`;\n }\n\n private buildEmailHtml(): string {\n const body = this.blocks()\n .map((block) => this.renderBlockHtml(block))\n .join('\\n');\n\n return `<!doctype html>\n<html>\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <title>Email Template</title>\n </head>\n <body style=\"margin:0;padding:0;background:#eef3f8;font-family:Arial,Helvetica,sans-serif;\">\n <table role=\"presentation\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" style=\"background:#eef3f8;padding:32px 12px;\">\n <tr>\n <td align=\"center\">\n <table role=\"presentation\" width=\"600\" cellspacing=\"0\" cellpadding=\"0\" style=\"width:100%;max-width:600px;background:#ffffff;border-radius:16px;overflow:hidden;\">\n${body}\n </table>\n </td>\n </tr>\n </table>\n </body>\n</html>`;\n }\n\n private renderBlockHtml(block: TemplateBlock): string {\n const padding = block.padding ?? 24;\n const background = block.backgroundColor ?? '#ffffff';\n const color = block.textColor ?? '#111827';\n const align = block.textAlign ?? 'center';\n const metadata = `data-email-block=\"${block.type}\" data-label=\"${this.escapeHtml(block.label)}\" data-padding=\"${padding}\" data-background=\"${background}\" data-text-color=\"${color}\" data-align=\"${align}\"`;\n\n if (block.type === 'header') {\n return ` <tr ${metadata}>\n <td style=\"background:${background};padding:${padding}px 32px;color:${color};text-align:${align};\">\n <table role=\"presentation\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">\n <tr>\n <td align=\"left\" style=\"font-size:20px;font-weight:700;color:${color};\">${this.escapeHtml(block.title ?? '')}</td>\n <td align=\"right\" style=\"font-size:13px;\"><a href=\"${this.escapeHtml(block.url ?? '#')}\" style=\"color:${color};text-decoration:none;\">${this.escapeHtml(block.text ?? '')}</a></td>\n </tr>\n </table>\n </td>\n </tr>`;\n }\n\n if (block.type === 'hero') {\n return ` <tr ${metadata}>\n <td align=\"${align === 'justify' ? 'left' : align}\" style=\"background:${background};padding:0 0 ${padding}px;color:${color};text-align:${align};\">\n <img src=\"${this.escapeHtml(block.imageUrl ?? '')}\" alt=\"\" width=\"600\" style=\"display:block;width:100%;max-width:600px;height:auto;\">\n <h1 style=\"margin:${padding}px 36px 14px;font-size:30px;line-height:1.2;color:${color};\">${this.escapeHtml(block.title ?? '')}</h1>\n <p style=\"margin:0;font-size:16px;line-height:1.6;color:${color};\">${this.escapeHtml(block.text ?? '')}</p>\n </td>\n </tr>`;\n }\n\n if (block.type === 'text') {\n return ` <tr ${metadata}>\n <td align=\"${align === 'justify' ? 'left' : align}\" style=\"background:${background};padding:${padding}px 40px;color:${color};text-align:${align};\">\n <h2 style=\"margin:0 0 12px;font-size:24px;line-height:1.25;color:${color};\">${this.escapeHtml(block.title ?? '')}</h2>\n <p style=\"margin:0;font-size:15px;line-height:1.7;color:${color};\">${this.escapeHtml(block.text ?? '')}</p>\n </td>\n </tr>`;\n }\n\n if (block.type === 'image') {\n return ` <tr ${metadata}>\n <td align=\"${align === 'justify' ? 'left' : align}\" style=\"background:${background};padding:${padding}px 32px;color:${color};text-align:${align};\">\n <img src=\"${this.escapeHtml(block.imageUrl ?? '')}\" alt=\"\" width=\"536\" style=\"display:block;width:100%;max-width:536px;height:auto;border-radius:${block.radius ?? 0}px;\">\n <p style=\"margin:12px 0 0;font-size:13px;line-height:1.5;color:${color};\">${this.escapeHtml(block.text ?? '')}</p>\n </td>\n </tr>`;\n }\n\n if (block.type === 'columns') {\n const columns = this.normalizeColumns(block);\n const columnWidth = Math.floor(100 / columns.length);\n const cells = columns\n .map(\n (column, index) => ` <td width=\"${columnWidth}%\" valign=\"top\" style=\"padding:${index === 0 ? '0 10px 0 0' : index === columns.length - 1 ? '0 0 0 10px' : '0 10px'};color:${color};text-align:${align};\">\n${column.map((child) => this.renderColumnChildHtml(child)).join('\\n')}\n </td>`,\n )\n .join('\\n');\n\n return ` <tr ${metadata} data-column-count=\"${columns.length}\">\n <td style=\"background:${background};padding:${padding}px 32px;color:${color};\">\n <table role=\"presentation\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">\n <tr>\n${cells}\n </tr>\n </table>\n </td>\n </tr>`;\n }\n\n if (block.type === 'quote') {\n return ` <tr ${metadata}>\n <td align=\"${align === 'justify' ? 'left' : align}\" style=\"background:${background};padding:${padding}px 40px;color:${color};text-align:${align};\">\n <p style=\"margin:0;font-size:20px;line-height:1.55;color:${color};font-style:italic;\">\"${this.escapeHtml(block.text ?? '')}\"</p>\n <p style=\"margin:14px 0 0;font-size:13px;font-weight:700;color:${color};\">${this.escapeHtml(block.title ?? '')}</p>\n </td>\n </tr>`;\n }\n\n if (block.type === 'button') {\n const buttonMetadata = `${metadata} data-button-color=\"${block.buttonColor}\" data-button-text-color=\"${block.buttonTextColor}\" data-radius=\"${block.radius ?? 8}\"`;\n\n return ` <tr ${buttonMetadata}>\n <td align=\"${align === 'justify' ? 'left' : align}\" style=\"background:${background};padding:${padding}px 40px;text-align:${align};\">\n <a href=\"${this.escapeHtml(block.url ?? '#')}\" style=\"display:inline-block;background:${block.buttonColor};color:${block.buttonTextColor};text-decoration:none;font-weight:700;font-size:15px;padding:15px 34px;border-radius:${block.radius ?? 8}px;\">${this.escapeHtml(block.text ?? '')}</a>\n </td>\n </tr>`;\n }\n\n if (block.type === 'coupon') {\n return ` <tr ${metadata} data-radius=\"${block.radius ?? 10}\">\n <td align=\"${align === 'justify' ? 'left' : align}\" style=\"background:${background};padding:${padding}px 40px;color:${color};text-align:${align};\">\n <div style=\"border:1px dashed ${color};border-radius:${block.radius ?? 10}px;padding:18px 20px;\">\n <p style=\"margin:0 0 8px;font-size:13px;text-transform:uppercase;letter-spacing:.08em;color:${color};\">${this.escapeHtml(block.title ?? '')}</p>\n <p style=\"margin:0;font-size:28px;font-weight:800;letter-spacing:.08em;color:${color};\">${this.escapeHtml(block.text ?? '')}</p>\n <p style=\"margin:8px 0 0;font-size:13px;color:${color};\">${this.escapeHtml(block.secondaryText ?? '')}</p>\n </div>\n </td>\n </tr>`;\n }\n\n if (block.type === 'list') {\n const items = (block.text ?? '')\n .split('\\n')\n .filter(Boolean)\n .map((item) => `<li style=\"margin:0 0 8px;\">${this.escapeHtml(item)}</li>`)\n .join('');\n\n return ` <tr ${metadata}>\n <td style=\"background:${background};padding:${padding}px 40px;color:${color};text-align:${align};\">\n <h2 style=\"margin:0 0 12px;font-size:22px;color:${color};\">${this.escapeHtml(block.title ?? '')}</h2>\n <ul style=\"margin:0;padding-left:20px;font-size:15px;line-height:1.6;color:${color};\">${items}</ul>\n </td>\n </tr>`;\n }\n\n if (block.type === 'badge') {\n return ` <tr ${metadata}>\n <td align=\"${align === 'justify' ? 'left' : align}\" style=\"background:#ffffff;padding:${padding}px 40px;text-align:${align};\">\n <span style=\"display:inline-block;background:${background};color:${color};padding:8px 14px;border-radius:${block.radius ?? 999}px;font-size:13px;font-weight:700;\">${this.escapeHtml(block.text ?? '')}</span>\n </td>\n </tr>`;\n }\n\n if (block.type === 'divider') {\n return ` <tr ${metadata}>\n <td style=\"background:${background};padding:${padding}px 40px;\">\n <div style=\"border-top:1px solid ${color};font-size:1px;line-height:1px;\"> </div>\n </td>\n </tr>`;\n }\n\n if (block.type === 'spacer') {\n return ` <tr ${metadata}>\n <td style=\"background:${background};font-size:1px;line-height:1px;height:${padding}px;\"> </td>\n </tr>`;\n }\n\n if (block.type === 'footer') {\n return ` <tr ${metadata}>\n <td align=\"${align === 'justify' ? 'left' : align}\" style=\"background:${background};padding:${padding}px 32px;color:${color};text-align:${align};\">\n <p style=\"margin:0;font-size:12px;line-height:1.6;color:${color};\">${this.escapeHtml(block.text ?? '')}</p>\n </td>\n </tr>`;\n }\n\n if (block.type === 'paragraph') {\n return ` <tr ${metadata}>\n <td align=\"${align === 'justify' ? 'left' : align}\" style=\"background:${background};padding:${padding}px 40px;color:${color};text-align:${align};\">\n <p style=\"margin:0;font-size:15px;line-height:1.75;color:${color};\">${this.escapeHtml(block.text ?? '')}</p>\n </td>\n </tr>`;\n }\n\n return ` <tr ${metadata}>\n <td align=\"${align === 'justify' ? 'left' : align}\" style=\"background:${background};padding:${padding}px 32px;color:${color};text-align:${align};\">\n <p style=\"margin:0 0 14px;font-size:14px;color:${color};\">${this.escapeHtml(block.text ?? '')}</p>\n <p style=\"margin:0;font-size:13px;\">\n <a href=\"#\" style=\"color:${color};text-decoration:none;margin:0 8px;\">Twitter</a>\n <a href=\"#\" style=\"color:${color};text-decoration:none;margin:0 8px;\">LinkedIn</a>\n <a href=\"#\" style=\"color:${color};text-decoration:none;margin:0 8px;\">Website</a>\n </p>\n </td>\n </tr>`;\n }\n\n private escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n\n private isBlockType(value: string): value is TemplateBlockType {\n return [\n 'hero',\n 'header',\n 'text',\n 'image',\n 'columns',\n 'quote',\n 'button',\n 'coupon',\n 'list',\n 'badge',\n 'divider',\n 'spacer',\n 'footer',\n 'social',\n 'paragraph',\n ].includes(value);\n }\n\n private readTextAlign(\n value: string | undefined,\n ): TemplateBlock['textAlign'] | undefined {\n return value === 'left' ||\n value === 'center' ||\n value === 'right' ||\n value === 'justify'\n ? value\n : undefined;\n }\n\n private readText(element: Element | null): string {\n return element?.textContent?.trim() ?? '';\n }\n\n private readStyleValue(element: HTMLElement | null, property: string): string | undefined {\n return element?.style.getPropertyValue(property).trim() || undefined;\n }\n\n private readPadding(element: HTMLElement | null): number | undefined {\n return this.readPixels(this.readStyleValue(element, 'padding'));\n }\n\n private readPixels(value: string | undefined): number | undefined {\n const match = value?.match(/(\\d+(?:\\.\\d+)?)px/);\n return match ? Number(match[1]) : undefined;\n }\n\n private readNumber(value: string | undefined): number | undefined {\n const number = Number(value);\n return Number.isFinite(number) ? number : undefined;\n }\n\n private readBorderColor(element: HTMLElement | null): string | undefined {\n const border = this.readStyleValue(element, 'border-top');\n return border?.match(/#[0-9a-f]{3,8}|rgb\\([^)]+\\)|rgba\\([^)]+\\)/i)?.[0];\n }\n\n private clamp(value: number, min: number, max: number): number {\n if (!Number.isFinite(value)) {\n return min;\n }\n\n return Math.min(Math.max(value, min), Math.max(min, max));\n }\n}\n","<div class=\"builder-shell\">\n <app-email-builder-header [viewport]=\"viewport()\" [previewMode]=\"previewMode()\" [editorView]=\"editorView()\"\n [templateName]=\"templateName()\" (templateNameChange)=\"templateName.set($event)\"\n (viewportChange)=\"viewport.set($event)\" (previewModeChange)=\"previewMode.set($event)\"\n (editorViewChange)=\"editorView.set($event)\" (copyTemplate)=\"copyTemplate()\" (saveTemplate)=\"saveTemplate()\"\n (exportTemplate)=\"exportTemplate()\" (openMyTemplates)=\"openMyTemplates()\" (clearCanvas)=\"clearCanvas()\" />\n\n <div class=\"builder-workspace\" [class.resizing-panels]=\"resizingSide()\"\n [style.grid-template-columns]=\"workspaceGridColumns()\">\n <aside class=\"left-panel\">\n <app-email-builder-sidebar [blockLibrary]=\"blockLibrary()\" [blocks]=\"blocks()\"\n [selectedBlockId]=\"selectedBlockId()\" [sampleTemplates]=\"sampleTemplates\" [draggedBlockId]=\"draggedBlockId()\"\n [dropTargetIndex]=\"dropTargetIndex()\" (addBlock)=\"addBlock($event)\" (selectBlock)=\"selectBlock($event)\"\n (openTemplateDrawer)=\"openSampleTemplates()\" (applyTemplate)=\"applyTemplate($event)\"\n (libraryDragStart)=\"onLibraryDragStart($event.preset, $event.event)\"\n (blockDragStart)=\"onBlockDragStart($event.blockId, $event.event)\"\n (dragOver)=\"onDragOver($event.event, $event.index)\" (drop)=\"onDrop($event.event, $event.index)\"\n (clearDragState)=\"clearDragState()\" />\n <button type=\"button\" class=\"resize-handle resize-handle-left\" title=\"Resize block library\"\n (mousedown)=\"startPanelResize('left', $event)\"></button>\n </aside>\n\n <app-email-template-canvas [blocks]=\"blocks()\" [selectedBlockId]=\"selectedBlockId()\" [viewport]=\"viewport()\"\n [previewMode]=\"previewMode()\" [editorView]=\"editorView()\" [sourceCode]=\"sourceCode()\"\n [sourceStatus]=\"sourceStatus()\" [variableValues]=\"variableValues()\" [draggedBlockId]=\"draggedBlockId()\"\n [dropTargetIndex]=\"dropTargetIndex()\" (editorViewChange)=\"editorView.set($event)\"\n (sourceCodeChange)=\"onSourceCodeChange($event)\" (selectBlock)=\"selectBlock($event)\"\n (blockDragStart)=\"onBlockDragStart($event.blockId, $event.event)\"\n (dragOver)=\"onDragOver($event.event, $event.index)\" (drop)=\"onDrop($event.event, $event.index)\"\n (clearDragState)=\"clearDragState()\" (dropTargetIndexChange)=\"dropTargetIndex.set($event)\"\n (updateBlock)=\"updateSelected($event.key, $event.value)\"\n (columnCountChange)=\"updateColumnCount($event.blockId, $event.columnCount)\"\n (addColumnContent)=\"addColumnContent($event.blockId, $event.columnIndex, $event.type)\"\n (removeColumnContent)=\"removeColumnContent($event.blockId, $event.columnIndex, $event.childId)\"\n (moveBlock)=\"moveBlock($event.blockId, $event.direction, $event.event)\"\n (duplicateBlock)=\"duplicateBlock($event.blockId, $event.event)\"\n (deleteBlock)=\"deleteBlock($event.blockId, $event.event)\" />\n\n <aside class=\"right-panel\">\n <button type=\"button\" class=\"resize-handle resize-handle-right\" title=\"Resize inspector\"\n (mousedown)=\"startPanelResize('right', $event)\"></button>\n <app-email-builder-inspector [block]=\"selectedBlock()\" [variables]=\"variables()\"\n (update)=\"updateSelected($event.key, $event.value)\" (addVariable)=\"addVariable()\"\n (updateVariable)=\"updateVariable($event.id, $event.key, $event.value)\" (deleteVariable)=\"deleteVariable($event)\"\n (insertVariable)=\"insertVariableToken($event)\" (focusField)=\"focusedField.set($event)\"\n (uploadImage)=\"handleImageUpload($event)\" (uploadSocialIcon)=\"handleSocialIconUpload($event)\" />\n </aside>\n </div>\n\n <app-email-builder-footer [isSaving]=\"isSaving()\" [lastSaved]=\"lastSaved()\" [blockCount]=\"blocks().length\"\n [variableCount]=\"variables().length\" [autoSaveEnabled]=\"autoSaveEnabled()\" [version]=\"libVersion\"\n (autoSaveToggle)=\"autoSaveEnabled.set($event)\" />\n\n @if (templateDrawerOpen()) {\n <app-email-builder-template-drawer [templates]=\"sampleTemplates\" [initialTab]=\"drawerTab()\"\n (close)=\"templateDrawerOpen.set(false)\" (useTemplate)=\"applyTemplate($event)\"\n (loadSavedTemplate)=\"loadSavedTemplate($event)\" />\n }\n\n @if (toastMessage()) {\n <div class=\"builder-toast\" [class.show]=\"toastMessage()\">\n <span class=\"material-symbols-outlined\">check_circle</span>\n {{ toastMessage() }}\n </div>\n }\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|