{"version":3,"sources":["../../src/email/index.ts","../../src/email/services/email.service.ts","../../src/email/hooks/useEmail.ts","../../src/email/hooks/useEmailTemplate.ts","../../src/email/components/EmailPreview/EmailPreview.tsx","../../src/email/components/EmailTemplateEditor/EmailTemplateEditor.tsx","../../src/email/components/EmailComposer/EmailComposer.tsx","../../src/email/templates/WelcomeEmail.tsx","../../src/email/templates/InviteEmail.tsx","../../src/email/templates/ResetPasswordEmail.tsx"],"sourcesContent":["// Core exports\nexport { Email } from './services/email.service';\nexport type { EmailConfig, SendEmailOptions } from './types';\n\n// Hooks\nexport { useEmail } from './hooks/useEmail';\nexport { useEmailTemplate } from './hooks/useEmailTemplate';\n\n// Components\nexport { EmailPreview } from './components/EmailPreview';\nexport { EmailTemplateEditor } from './components/EmailTemplateEditor';\nexport { EmailComposer } from './components/EmailComposer';\n\n// Templates\nexport { WelcomeEmail } from './templates/WelcomeEmail';\nexport { InviteEmail } from './templates/InviteEmail';\nexport { ResetPasswordEmail } from './templates/ResetPasswordEmail';\n\n// Types\nexport type {\n  EmailProvider,\n  EmailResult,\n  EmailError,\n  EmailTemplate,\n  BatchEmailOptions,\n  BatchEmailResult,\n  Attachment,\n  ReactEmailTemplate,\n  EmailTheme,\n} from './types';","import {\n  EmailConfig,\n  EmailProvider,\n  SendEmailOptions,\n  EmailResult,\n  EmailError,\n  EmailTemplate,\n  BatchEmailOptions,\n  BatchEmailResult,\n} from '../types';\n\nexport class Email {\n  private config: EmailConfig;\n  private templates: Map<string, EmailTemplate> = new Map();\n  private provider: any; // Provider implementation\n\n  constructor(config: EmailConfig) {\n    this.config = config;\n    this.initializeProvider();\n  }\n\n  // Register an email template\n  registerTemplate<T = Record<string, any>>(template: EmailTemplate<T>): void {\n    this.templates.set(template.id, template);\n  }\n\n  // Send a single email\n  async send<T = Record<string, any>>(options: SendEmailOptions<T>): Promise<EmailResult> {\n    try {\n      // Get template if using template ID\n      let template: EmailTemplate<T> | undefined;\n      if (typeof options.template === 'string') {\n        template = this.templates.get(options.template) as EmailTemplate<T>;\n        if (!template) {\n          throw new Error(`Template '${options.template}' not found`);\n        }\n      } else {\n        template = options.template;\n      }\n\n      // Compile template\n      const compiled = this.compileTemplate(template, options.data);\n\n      // Prepare email data\n      const emailData = {\n        to: Array.isArray(options.to) ? options.to : [options.to],\n        from: options.from || this.config.from,\n        replyTo: options.replyTo || this.config.replyTo,\n        subject: compiled.subject,\n        html: compiled.html,\n        text: compiled.text,\n        cc: options.cc,\n        bcc: options.bcc,\n        attachments: options.attachments,\n        tags: options.tags,\n        metadata: {\n          ...options.metadata,\n          templateId: template?.id,\n        },\n      };\n\n      // Handle scheduling\n      if (options.schedule) {\n        return this.scheduleEmail(emailData, options.schedule);\n      }\n\n      // Send email via provider\n      const result = await this.sendViaProvider(emailData);\n\n      // Call onSent callback if configured\n      if (this.config.onSent) {\n        await this.config.onSent(result);\n      }\n\n      return result;\n    } catch (error: any) {\n      const emailError: EmailError = {\n        code: error.code || 'email/send-failed',\n        message: error.message || 'Failed to send email',\n        provider: this.config.provider,\n        originalError: error,\n      };\n\n      if (this.config.onError) {\n        this.config.onError(emailError);\n      }\n\n      throw emailError;\n    }\n  }\n\n  // Send batch emails\n  async sendBatch<T = Record<string, any>>(\n    options: BatchEmailOptions<T>\n  ): Promise<BatchEmailResult> {\n    const batchId = this.generateBatchId();\n    const results: EmailResult[] = [];\n    let successful = 0;\n    let failed = 0;\n\n    // Process batch\n    for (const recipient of options.recipients) {\n      try {\n        const result = await this.send({\n          ...options,\n          to: recipient.to,\n          data: { ...options.recipients[0].data, ...recipient.data },\n          metadata: {\n            ...recipient.metadata,\n            batchId,\n          },\n        });\n        \n        results.push(result);\n        successful++;\n      } catch (error) {\n        failed++;\n        results.push({\n          id: '',\n          provider: this.config.provider,\n          to: [recipient.to],\n          sentAt: new Date(),\n          status: 'failed',\n          error: error.message,\n        });\n      }\n    }\n\n    return {\n      batchId,\n      total: options.recipients.length,\n      successful,\n      failed,\n      results,\n    };\n  }\n\n  // Get a template by ID\n  getTemplate(id: string): EmailTemplate | undefined {\n    return this.templates.get(id);\n  }\n\n  // List all templates\n  listTemplates(): EmailTemplate[] {\n    return Array.from(this.templates.values());\n  }\n\n  // Private methods\n  private initializeProvider(): void {\n    // Initialize provider based on config\n    switch (this.config.provider) {\n      case 'resend':\n        // this.provider = new ResendProvider(this.config);\n        break;\n      case 'sendgrid':\n        // this.provider = new SendGridProvider(this.config);\n        break;\n      default:\n        console.warn(`Provider ${this.config.provider} not implemented yet`);\n    }\n  }\n\n  private compileTemplate<T>(\n    template: EmailTemplate<T> | undefined,\n    data?: T\n  ): { subject: string; html: string; text?: string } {\n    if (!template) {\n      return {\n        subject: 'No Subject',\n        html: '<p>No content</p>',\n        text: 'No content',\n      };\n    }\n\n    // Compile subject\n    const subject = typeof template.subject === 'function'\n      ? template.subject(data || {} as T)\n      : template.subject;\n\n    // Compile HTML body\n    let html = typeof template.body.html === 'function'\n      ? template.body.html(data || {} as T)\n      : template.body.html;\n\n    // Compile text body\n    let text: string | undefined;\n    if (template.body.text) {\n      text = typeof template.body.text === 'function'\n        ? template.body.text(data || {} as T)\n        : template.body.text;\n    }\n\n    // Add footer if not disabled\n    if (template.includeFooter !== false && this.config.footer) {\n      const footerHtml = this.generateFooterHtml();\n      const footerText = this.generateFooterText();\n\n      if (footerHtml) {\n        html = this.injectFooterHtml(html, footerHtml);\n      }\n\n      if (footerText && text) {\n        text = `${text}\\n\\n${footerText}`;\n      }\n    }\n\n    return { subject, html, text };\n  }\n\n  private generateFooterHtml(): string {\n    const footer = this.config.footer;\n    if (!footer) return '';\n\n    let footerHtml = '<div style=\"margin-top: 40px; padding-top: 20px; border-top: 1px solid #e2e8f0; font-size: 14px; color: #718096;\">';\n\n    // Custom footer HTML\n    if (footer.html) {\n      const customHtml = typeof footer.html === 'function' ? footer.html() : footer.html;\n      footerHtml += customHtml;\n    } else {\n      // Build default footer\n      const parts: string[] = [];\n\n      // Disclaimer\n      if (footer.disclaimer?.enabled && footer.disclaimer.text) {\n        parts.push(`<p style=\"margin: 10px 0; font-style: italic;\">${footer.disclaimer.text}</p>`);\n      }\n\n      // Unsubscribe\n      if (footer.unsubscribe?.enabled) {\n        const unsubUrl = footer.unsubscribe.url || '#unsubscribe';\n        const unsubText = footer.unsubscribe.text || 'Unsubscribe';\n        parts.push(`<p style=\"margin: 10px 0;\"><a href=\"${unsubUrl}\" style=\"color: #3182ce;\">${unsubText}</a></p>`);\n      }\n\n      // Privacy\n      if (footer.privacy?.enabled) {\n        const privacyUrl = footer.privacy.url || '#privacy';\n        const privacyText = footer.privacy.text || 'Privacy Policy';\n        parts.push(`<p style=\"margin: 10px 0;\"><a href=\"${privacyUrl}\" style=\"color: #3182ce;\">${privacyText}</a></p>`);\n      }\n\n      // Company info\n      if (footer.company) {\n        let companyHtml = `<p style=\"margin: 10px 0;\">© ${new Date().getFullYear()} ${footer.company.name}`;\n        if (footer.company.address) {\n          companyHtml += ` | ${footer.company.address}`;\n        }\n        if (footer.company.website) {\n          companyHtml += ` | <a href=\"${footer.company.website}\" style=\"color: #3182ce;\">${footer.company.website}</a>`;\n        }\n        companyHtml += '</p>';\n        parts.push(companyHtml);\n      }\n\n      footerHtml += parts.join('');\n    }\n\n    footerHtml += '</div>';\n    return footerHtml;\n  }\n\n  private generateFooterText(): string {\n    const footer = this.config.footer;\n    if (!footer) return '';\n\n    if (footer.text) {\n      return typeof footer.text === 'function' ? footer.text() : footer.text;\n    }\n\n    // Build default text footer\n    const parts: string[] = [];\n\n    if (footer.disclaimer?.enabled && footer.disclaimer.text) {\n      parts.push(footer.disclaimer.text);\n    }\n\n    if (footer.unsubscribe?.enabled) {\n      const unsubText = footer.unsubscribe.text || 'Unsubscribe';\n      const unsubUrl = footer.unsubscribe.url || '#unsubscribe';\n      parts.push(`${unsubText}: ${unsubUrl}`);\n    }\n\n    if (footer.privacy?.enabled) {\n      const privacyText = footer.privacy.text || 'Privacy Policy';\n      const privacyUrl = footer.privacy.url || '#privacy';\n      parts.push(`${privacyText}: ${privacyUrl}`);\n    }\n\n    if (footer.company) {\n      let companyText = `© ${new Date().getFullYear()} ${footer.company.name}`;\n      if (footer.company.address) {\n        companyText += ` | ${footer.company.address}`;\n      }\n      if (footer.company.website) {\n        companyText += ` | ${footer.company.website}`;\n      }\n      parts.push(companyText);\n    }\n\n    return parts.join('\\n');\n  }\n\n  private injectFooterHtml(html: string, footerHtml: string): string {\n    // Try to inject before closing body tag\n    if (html.includes('</body>')) {\n      return html.replace('</body>', `${footerHtml}</body>`);\n    }\n    \n    // Otherwise append to end\n    return html + footerHtml;\n  }\n\n  private async sendViaProvider(data: any): Promise<EmailResult> {\n    // Simulate sending (replace with actual provider implementation)\n    const result: EmailResult = {\n      id: this.generateEmailId(),\n      provider: this.config.provider,\n      to: data.to,\n      template: data.metadata?.templateId,\n      sentAt: new Date(),\n      status: 'sent',\n    };\n\n    // Simulate async send\n    await new Promise(resolve => setTimeout(resolve, 100));\n\n    return result;\n  }\n\n  private async scheduleEmail(data: any, scheduleDate: Date): Promise<EmailResult> {\n    // Simulate scheduling (replace with actual implementation)\n    const result: EmailResult = {\n      id: this.generateEmailId(),\n      provider: this.config.provider,\n      to: data.to,\n      template: data.metadata?.templateId,\n      sentAt: scheduleDate,\n      status: 'scheduled',\n    };\n\n    return result;\n  }\n\n  private generateEmailId(): string {\n    return `email_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n  }\n\n  private generateBatchId(): string {\n    return `batch_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n  }\n}","import { useCallback, useState } from 'react';\nimport { Email } from '../services/email.service';\nimport { SendEmailOptions, EmailResult, EmailError, EmailProvider } from '../types';\n\nexport function useEmail(emailService: Email) {\n  const [sending, setSending] = useState(false);\n  const [error, setError] = useState<EmailError | null>(null);\n  const [lastResult, setLastResult] = useState<EmailResult | null>(null);\n\n  const send = useCallback(async <T = Record<string, any>>(\n    options: SendEmailOptions<T>\n  ): Promise<EmailResult> => {\n    setSending(true);\n    setError(null);\n    \n    try {\n      const result = await emailService.send(options);\n      setLastResult(result);\n      return result;\n    } catch (err: any) {\n      const emailError: EmailError = {\n        code: err.code || 'email/send-failed',\n        message: err.message || 'Failed to send email',\n        provider: 'resend' as EmailProvider,\n        originalError: err,\n      };\n      setError(emailError);\n      throw emailError;\n    } finally {\n      setSending(false);\n    }\n  }, [emailService]);\n\n  const sendBatch = useCallback(async <T = Record<string, any>>(\n    options: any\n  ) => {\n    setSending(true);\n    setError(null);\n    \n    try {\n      const result = await emailService.sendBatch(options);\n      return result;\n    } catch (err: any) {\n      const emailError: EmailError = {\n        code: err.code || 'email/batch-failed',\n        message: err.message || 'Failed to send batch emails',\n        provider: 'resend' as EmailProvider,\n        originalError: err,\n      };\n      setError(emailError);\n      throw emailError;\n    } finally {\n      setSending(false);\n    }\n  }, [emailService]);\n\n  return {\n    send,\n    sendBatch,\n    sending,\n    error,\n    lastResult,\n  };\n}","import { useState, useEffect } from 'react';\nimport { Email } from '../services/email.service';\nimport { EmailTemplate } from '../types';\n\nexport function useEmailTemplate(emailService: Email, templateId: string) {\n  const [template, setTemplate] = useState<EmailTemplate | null>(null);\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<Error | null>(null);\n\n  useEffect(() => {\n    try {\n      const tmpl = emailService.getTemplate(templateId);\n      if (tmpl) {\n        setTemplate(tmpl);\n      } else {\n        setError(new Error(`Template '${templateId}' not found`));\n      }\n    } catch (err: any) {\n      setError(err);\n    } finally {\n      setLoading(false);\n    }\n  }, [emailService, templateId]);\n\n  const reload = () => {\n    setLoading(true);\n    setError(null);\n    \n    try {\n      const tmpl = emailService.getTemplate(templateId);\n      if (tmpl) {\n        setTemplate(tmpl);\n      } else {\n        setError(new Error(`Template '${templateId}' not found`));\n      }\n    } catch (err: any) {\n      setError(err);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  return {\n    template,\n    loading,\n    error,\n    reload,\n  };\n}","'use client';\n\nimport React, { useState, useMemo } from 'react';\nimport {\n  Paper,\n  Stack,\n  Title,\n  Text,\n  SegmentedControl,\n  Box,\n  Group,\n  Badge,\n  ScrollArea,\n  ActionIcon,\n  Tooltip,\n} from '@mantine/core';\nimport { IconDeviceMobile, IconDeviceDesktop, IconCode } from '@tabler/icons-react';\nimport { EmailTemplate } from '../../types';\n\ninterface EmailPreviewProps {\n  template: EmailTemplate | string;\n  data?: any;\n  showDeviceFrames?: boolean;\n  className?: string;\n}\n\nexport function EmailPreview({\n  template,\n  data = {},\n  showDeviceFrames = true,\n  className,\n}: EmailPreviewProps) {\n  const [viewMode, setViewMode] = useState<'desktop' | 'mobile' | 'html'>('desktop');\n  const [format, setFormat] = useState<'html' | 'text'>('html');\n\n  // Compile template\n  const compiled = useMemo(() => {\n    if (typeof template === 'string') {\n      return {\n        subject: 'No subject',\n        html: '<p>Template not found</p>',\n        text: 'Template not found',\n      };\n    }\n\n    const subject = typeof template.subject === 'function'\n      ? template.subject(data)\n      : template.subject;\n\n    const html = typeof template.body.html === 'function'\n      ? template.body.html(data)\n      : template.body.html;\n\n    const text = template.body.text\n      ? typeof template.body.text === 'function'\n        ? template.body.text(data)\n        : template.body.text\n      : 'Text version not available';\n\n    return { subject, html, text };\n  }, [template, data]);\n\n  const renderContent = () => {\n    if (format === 'text') {\n      return (\n        <Box\n          p=\"md\"\n          style={{\n            fontFamily: 'monospace',\n            whiteSpace: 'pre-wrap',\n            backgroundColor: '#f8f9fa',\n          }}\n        >\n          {compiled.text}\n        </Box>\n      );\n    }\n\n    if (viewMode === 'html') {\n      return (\n        <Box\n          p=\"md\"\n          style={{\n            fontFamily: 'monospace',\n            fontSize: '12px',\n            backgroundColor: '#1e1e1e',\n            color: '#d4d4d4',\n            overflow: 'auto',\n          }}\n        >\n          <pre>{compiled.html}</pre>\n        </Box>\n      );\n    }\n\n    const content = (\n      <Box\n        style={{\n          width: '100%',\n          height: '100%',\n          backgroundColor: 'white',\n        }}\n        dangerouslySetInnerHTML={{ __html: compiled.html }}\n      />\n    );\n\n    if (!showDeviceFrames) {\n      return content;\n    }\n\n    if (viewMode === 'mobile') {\n      return (\n        <Box\n          style={{\n            width: 375,\n            height: 667,\n            margin: '0 auto',\n            border: '16px solid #333',\n            borderRadius: 36,\n            overflow: 'hidden',\n            boxShadow: '0 0 0 2px #666',\n          }}\n        >\n          <ScrollArea h={635}>{content}</ScrollArea>\n        </Box>\n      );\n    }\n\n    return (\n      <Box\n        style={{\n          width: '100%',\n          maxWidth: 1200,\n          margin: '0 auto',\n          border: '1px solid #e2e8f0',\n          borderRadius: 8,\n          overflow: 'hidden',\n        }}\n      >\n        <Box\n          style={{\n            backgroundColor: '#f8f9fa',\n            padding: '8px 16px',\n            borderBottom: '1px solid #e2e8f0',\n          }}\n        >\n          <Group gap=\"xs\">\n            <Box\n              style={{\n                width: 12,\n                height: 12,\n                borderRadius: '50%',\n                backgroundColor: '#ff5f57',\n              }}\n            />\n            <Box\n              style={{\n                width: 12,\n                height: 12,\n                borderRadius: '50%',\n                backgroundColor: '#ffbd2e',\n              }}\n            />\n            <Box\n              style={{\n                width: 12,\n                height: 12,\n                borderRadius: '50%',\n                backgroundColor: '#28ca42',\n              }}\n            />\n          </Group>\n        </Box>\n        <ScrollArea h={600}>{content}</ScrollArea>\n      </Box>\n    );\n  };\n\n  return (\n    <Paper shadow=\"sm\" radius=\"md\" p=\"lg\" className={className}>\n      <Stack>\n        <Group justify=\"space-between\" align=\"center\">\n          <div>\n            <Title order={4}>Email Preview</Title>\n            <Text size=\"sm\" c=\"dimmed\">\n              Subject: {compiled.subject}\n            </Text>\n          </div>\n          \n          <Group>\n            <SegmentedControl\n              value={format}\n              onChange={(value) => setFormat(value as 'html' | 'text')}\n              data={[\n                { label: 'HTML', value: 'html' },\n                { label: 'Text', value: 'text' },\n              ]}\n            />\n            \n            {format === 'html' && (\n              <Group gap=\"xs\">\n                <Tooltip label=\"Desktop view\">\n                  <ActionIcon\n                    variant={viewMode === 'desktop' ? 'filled' : 'default'}\n                    onClick={() => setViewMode('desktop')}\n                  >\n                    <IconDeviceDesktop size={18} />\n                  </ActionIcon>\n                </Tooltip>\n                \n                <Tooltip label=\"Mobile view\">\n                  <ActionIcon\n                    variant={viewMode === 'mobile' ? 'filled' : 'default'}\n                    onClick={() => setViewMode('mobile')}\n                  >\n                    <IconDeviceMobile size={18} />\n                  </ActionIcon>\n                </Tooltip>\n                \n                <Tooltip label=\"HTML source\">\n                  <ActionIcon\n                    variant={viewMode === 'html' ? 'filled' : 'default'}\n                    onClick={() => setViewMode('html')}\n                  >\n                    <IconCode size={18} />\n                  </ActionIcon>\n                </Tooltip>\n              </Group>\n            )}\n          </Group>\n        </Group>\n\n        <Box>{renderContent()}</Box>\n      </Stack>\n    </Paper>\n  );\n}","'use client';\n\nimport React from 'react';\nimport { Paper, Title, Text } from '@mantine/core';\n\ninterface EmailTemplateEditorProps {\n  template: any;\n  onChange: (template: any) => void;\n  testData?: any;\n}\n\nexport function EmailTemplateEditor({ template, onChange, testData }: EmailTemplateEditorProps) {\n  return (\n    <Paper shadow=\"sm\" radius=\"md\" p=\"lg\">\n      <Title order={4}>Email Template Editor</Title>\n      <Text c=\"dimmed\" size=\"sm\">Template editor coming soon</Text>\n    </Paper>\n  );\n}","'use client';\n\nimport React from 'react';\nimport { Paper, Title, Text } from '@mantine/core';\n\ninterface EmailComposerProps {\n  templates: string[];\n  onSend: (email: any) => Promise<void>;\n}\n\nexport function EmailComposer({ templates, onSend }: EmailComposerProps) {\n  return (\n    <Paper shadow=\"sm\" radius=\"md\" p=\"lg\">\n      <Title order={4}>Email Composer</Title>\n      <Text c=\"dimmed\" size=\"sm\">Email composer coming soon</Text>\n    </Paper>\n  );\n}","import React from 'react';\nimport { EmailTemplate } from '../types';\n\ninterface WelcomeEmailData {\n  name: string;\n  email: string;\n  confirmationUrl?: string;\n}\n\nexport const WelcomeEmailTemplate: EmailTemplate<WelcomeEmailData> = {\n  id: 'welcome',\n  name: 'Welcome Email',\n  subject: ({ name }) => `Welcome to our app, ${name}!`,\n  preview: 'Welcome to our community',\n  body: {\n    html: (data) => `\n      <!DOCTYPE html>\n      <html>\n        <head>\n          <meta charset=\"utf-8\">\n          <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n          <title>Welcome</title>\n          <style>\n            body {\n              font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n              line-height: 1.6;\n              color: #333;\n              max-width: 600px;\n              margin: 0 auto;\n              padding: 20px;\n            }\n            .header {\n              background-color: #007bff;\n              color: white;\n              padding: 30px;\n              text-align: center;\n              border-radius: 8px 8px 0 0;\n            }\n            .content {\n              background-color: #f8f9fa;\n              padding: 30px;\n              border-radius: 0 0 8px 8px;\n            }\n            .button {\n              display: inline-block;\n              padding: 12px 24px;\n              background-color: #007bff;\n              color: white;\n              text-decoration: none;\n              border-radius: 5px;\n              margin-top: 20px;\n            }\n            .footer {\n              text-align: center;\n              margin-top: 30px;\n              color: #6c757d;\n              font-size: 14px;\n            }\n          </style>\n        </head>\n        <body>\n          <div class=\"header\">\n            <h1>Welcome to Our App!</h1>\n          </div>\n          <div class=\"content\">\n            <h2>Hi ${data.name},</h2>\n            <p>We're excited to have you join our community! Your account has been successfully created.</p>\n            <p>Here are your account details:</p>\n            <ul>\n              <li><strong>Email:</strong> ${data.email}</li>\n            </ul>\n            ${data.confirmationUrl ? `\n              <p>Please confirm your email address by clicking the button below:</p>\n              <a href=\"${data.confirmationUrl}\" class=\"button\">Confirm Email</a>\n            ` : ''}\n            <p>If you have any questions, feel free to reach out to our support team.</p>\n            <p>Best regards,<br>The Team</p>\n          </div>\n          <div class=\"footer\">\n            <p>© 2024 Your Company. All rights reserved.</p>\n          </div>\n        </body>\n      </html>\n    `,\n    text: (data) => `\nWelcome to Our App!\n\nHi ${data.name},\n\nWe're excited to have you join our community! Your account has been successfully created.\n\nHere are your account details:\n- Email: ${data.email}\n\n${data.confirmationUrl ? `Please confirm your email address by visiting: ${data.confirmationUrl}` : ''}\n\nIf you have any questions, feel free to reach out to our support team.\n\nBest regards,\nThe Team\n\n© 2024 Your Company. All rights reserved.\n    `.trim(),\n  },\n};\n\nexport function WelcomeEmail(props: WelcomeEmailData) {\n  return (\n    <div style={{ fontFamily: 'Arial, sans-serif', maxWidth: 600, margin: '0 auto' }}>\n      <div style={{ backgroundColor: '#007bff', color: 'white', padding: 30, textAlign: 'center' }}>\n        <h1>Welcome to Our App!</h1>\n      </div>\n      <div style={{ backgroundColor: '#f8f9fa', padding: 30 }}>\n        <h2>Hi {props.name},</h2>\n        <p>We're excited to have you join our community! Your account has been successfully created.</p>\n        <p>Here are your account details:</p>\n        <ul>\n          <li><strong>Email:</strong> {props.email}</li>\n        </ul>\n        {props.confirmationUrl && (\n          <>\n            <p>Please confirm your email address by clicking the button below:</p>\n            <a \n              href={props.confirmationUrl} \n              style={{\n                display: 'inline-block',\n                padding: '12px 24px',\n                backgroundColor: '#007bff',\n                color: 'white',\n                textDecoration: 'none',\n                borderRadius: 5,\n                marginTop: 20,\n              }}\n            >\n              Confirm Email\n            </a>\n          </>\n        )}\n        <p>If you have any questions, feel free to reach out to our support team.</p>\n        <p>Best regards,<br />The Team</p>\n      </div>\n      <div style={{ textAlign: 'center', marginTop: 30, color: '#6c757d', fontSize: 14 }}>\n        <p>© 2024 Your Company. All rights reserved.</p>\n      </div>\n    </div>\n  );\n}","import React from 'react';\nimport { EmailTemplate } from '../types';\n\ninterface InviteEmailData {\n  inviteeName?: string;\n  inviterName: string;\n  inviteLink: string;\n  role?: string;\n  department?: string;\n  expiresIn?: string;\n  organizationName?: string;\n}\n\nexport const InviteEmailTemplate: EmailTemplate<InviteEmailData> = {\n  id: 'invite',\n  name: 'User Invitation Email',\n  subject: ({ inviterName, organizationName }) => \n    `${inviterName} invited you to join ${organizationName || 'our app'}`,\n  preview: 'You have been invited to join our platform',\n  body: {\n    html: (data) => `\n      <!DOCTYPE html>\n      <html>\n        <head>\n          <meta charset=\"utf-8\">\n          <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n          <title>Invitation</title>\n          <style>\n            body {\n              font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n              line-height: 1.6;\n              color: #333;\n              max-width: 600px;\n              margin: 0 auto;\n              padding: 20px;\n            }\n            .header {\n              background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n              color: white;\n              padding: 40px 30px;\n              text-align: center;\n              border-radius: 8px 8px 0 0;\n            }\n            .content {\n              background-color: #ffffff;\n              padding: 40px 30px;\n              border: 1px solid #e2e8f0;\n              border-radius: 0 0 8px 8px;\n            }\n            .role-badge {\n              display: inline-block;\n              padding: 6px 12px;\n              background-color: #e2e8f0;\n              color: #4a5568;\n              border-radius: 4px;\n              font-weight: 500;\n              margin: 5px 0;\n            }\n            .button {\n              display: inline-block;\n              padding: 14px 28px;\n              background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n              color: white;\n              text-decoration: none;\n              border-radius: 6px;\n              font-weight: 500;\n              margin: 20px 0;\n            }\n            .expiry-notice {\n              background-color: #fff5f5;\n              border-left: 4px solid #fc8181;\n              padding: 12px;\n              margin: 20px 0;\n              font-size: 14px;\n            }\n            .footer {\n              text-align: center;\n              margin-top: 40px;\n              color: #718096;\n              font-size: 14px;\n            }\n          </style>\n        </head>\n        <body>\n          <div class=\"header\">\n            <h1>You're Invited!</h1>\n          </div>\n          <div class=\"content\">\n            <p>Hi${data.inviteeName ? ` ${data.inviteeName}` : ''},</p>\n            <p><strong>${data.inviterName}</strong> has invited you to join <strong>${data.organizationName || 'our platform'}</strong>.</p>\n            \n            ${data.role || data.department ? `\n              <p>You've been invited with the following access:</p>\n              ${data.role ? `<span class=\"role-badge\">Role: ${data.role}</span><br>` : ''}\n              ${data.department ? `<span class=\"role-badge\">Department: ${data.department}</span>` : ''}\n            ` : ''}\n            \n            <p>Click the button below to accept the invitation and create your account:</p>\n            \n            <div style=\"text-align: center;\">\n              <a href=\"${data.inviteLink}\" class=\"button\">Accept Invitation</a>\n            </div>\n            \n            <div class=\"expiry-notice\">\n              <strong>⏰ Note:</strong> This invitation will expire ${data.expiresIn || 'in 7 days'}. \n              Please accept it before then.\n            </div>\n            \n            <p>If you have any questions about this invitation, please contact ${data.inviterName} or our support team.</p>\n            \n            <p>Best regards,<br>The ${data.organizationName || 'Team'}</p>\n          </div>\n          <div class=\"footer\">\n            <p>If you didn't expect this invitation, you can safely ignore this email.</p>\n            <p>© 2024 ${data.organizationName || 'Your Company'}. All rights reserved.</p>\n          </div>\n        </body>\n      </html>\n    `,\n    text: (data) => `\nYou're Invited!\n\nHi${data.inviteeName ? ` ${data.inviteeName}` : ''},\n\n${data.inviterName} has invited you to join ${data.organizationName || 'our platform'}.\n\n${data.role || data.department ? `You've been invited with the following access:\n${data.role ? `- Role: ${data.role}` : ''}\n${data.department ? `- Department: ${data.department}` : ''}` : ''}\n\nAccept the invitation: ${data.inviteLink}\n\n⏰ Note: This invitation will expire ${data.expiresIn || 'in 7 days'}. Please accept it before then.\n\nIf you have any questions about this invitation, please contact ${data.inviterName} or our support team.\n\nBest regards,\nThe ${data.organizationName || 'Team'}\n\nIf you didn't expect this invitation, you can safely ignore this email.\n© 2024 ${data.organizationName || 'Your Company'}. All rights reserved.\n    `.trim(),\n  },\n};\n\nexport function InviteEmail(props: InviteEmailData) {\n  return (\n    <div style={{ fontFamily: 'Arial, sans-serif', maxWidth: 600, margin: '0 auto' }}>\n      <div style={{\n        background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\n        color: 'white',\n        padding: '40px 30px',\n        textAlign: 'center',\n        borderRadius: '8px 8px 0 0',\n      }}>\n        <h1>You're Invited!</h1>\n      </div>\n      <div style={{\n        backgroundColor: '#ffffff',\n        padding: '40px 30px',\n        border: '1px solid #e2e8f0',\n        borderRadius: '0 0 8px 8px',\n      }}>\n        <p>Hi{props.inviteeName ? ` ${props.inviteeName}` : ''},</p>\n        <p><strong>{props.inviterName}</strong> has invited you to join <strong>{props.organizationName || 'our platform'}</strong>.</p>\n        \n        {(props.role || props.department) && (\n          <>\n            <p>You've been invited with the following access:</p>\n            {props.role && (\n              <span style={{\n                display: 'inline-block',\n                padding: '6px 12px',\n                backgroundColor: '#e2e8f0',\n                color: '#4a5568',\n                borderRadius: 4,\n                fontWeight: 500,\n                margin: '5px 0',\n              }}>\n                Role: {props.role}\n              </span>\n            )}\n            {props.role && props.department && <br />}\n            {props.department && (\n              <span style={{\n                display: 'inline-block',\n                padding: '6px 12px',\n                backgroundColor: '#e2e8f0',\n                color: '#4a5568',\n                borderRadius: 4,\n                fontWeight: 500,\n                margin: '5px 0',\n              }}>\n                Department: {props.department}\n              </span>\n            )}\n          </>\n        )}\n        \n        <p>Click the button below to accept the invitation and create your account:</p>\n        \n        <div style={{ textAlign: 'center' }}>\n          <a \n            href={props.inviteLink} \n            style={{\n              display: 'inline-block',\n              padding: '14px 28px',\n              background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\n              color: 'white',\n              textDecoration: 'none',\n              borderRadius: 6,\n              fontWeight: 500,\n              margin: '20px 0',\n            }}\n          >\n            Accept Invitation\n          </a>\n        </div>\n        \n        <div style={{\n          backgroundColor: '#fff5f5',\n          borderLeft: '4px solid #fc8181',\n          padding: 12,\n          margin: '20px 0',\n          fontSize: 14,\n        }}>\n          <strong>⏰ Note:</strong> This invitation will expire {props.expiresIn || 'in 7 days'}. \n          Please accept it before then.\n        </div>\n        \n        <p>If you have any questions about this invitation, please contact {props.inviterName} or our support team.</p>\n        \n        <p>Best regards,<br />The {props.organizationName || 'Team'}</p>\n      </div>\n      <div style={{ textAlign: 'center', marginTop: 40, color: '#718096', fontSize: 14 }}>\n        <p>If you didn't expect this invitation, you can safely ignore this email.</p>\n        <p>© 2024 {props.organizationName || 'Your Company'}. All rights reserved.</p>\n      </div>\n    </div>\n  );\n}","import React from 'react';\nimport { EmailTemplate } from '../types';\n\ninterface ResetPasswordEmailData {\n  name?: string;\n  email: string;\n  resetLink: string;\n  expiresIn?: string;\n  ipAddress?: string;\n  userAgent?: string;\n}\n\nexport const ResetPasswordEmailTemplate: EmailTemplate<ResetPasswordEmailData> = {\n  id: 'reset-password',\n  name: 'Password Reset Email',\n  subject: 'Reset your password',\n  preview: 'Reset your password for your account',\n  body: {\n    html: (data) => `\n      <!DOCTYPE html>\n      <html>\n        <head>\n          <meta charset=\"utf-8\">\n          <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n          <title>Reset Password</title>\n          <style>\n            body {\n              font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n              line-height: 1.6;\n              color: #333;\n              max-width: 600px;\n              margin: 0 auto;\n              padding: 20px;\n            }\n            .header {\n              background-color: #dc3545;\n              color: white;\n              padding: 30px;\n              text-align: center;\n              border-radius: 8px 8px 0 0;\n            }\n            .content {\n              background-color: #ffffff;\n              padding: 40px 30px;\n              border: 1px solid #e2e8f0;\n              border-radius: 0 0 8px 8px;\n            }\n            .button {\n              display: inline-block;\n              padding: 14px 28px;\n              background-color: #dc3545;\n              color: white;\n              text-decoration: none;\n              border-radius: 6px;\n              font-weight: 500;\n              margin: 20px 0;\n            }\n            .security-notice {\n              background-color: #f0f9ff;\n              border-left: 4px solid #3182ce;\n              padding: 12px;\n              margin: 20px 0;\n              font-size: 14px;\n            }\n            .details {\n              background-color: #f7fafc;\n              padding: 15px;\n              border-radius: 6px;\n              margin: 20px 0;\n              font-size: 14px;\n            }\n            .footer {\n              text-align: center;\n              margin-top: 40px;\n              color: #718096;\n              font-size: 14px;\n            }\n            code {\n              background-color: #f7fafc;\n              padding: 2px 6px;\n              border-radius: 3px;\n              font-family: monospace;\n            }\n          </style>\n        </head>\n        <body>\n          <div class=\"header\">\n            <h1>Password Reset Request</h1>\n          </div>\n          <div class=\"content\">\n            <p>Hi${data.name ? ` ${data.name}` : ''},</p>\n            \n            <p>We received a request to reset the password for your account associated with <strong>${data.email}</strong>.</p>\n            \n            <p>Click the button below to reset your password:</p>\n            \n            <div style=\"text-align: center;\">\n              <a href=\"${data.resetLink}\" class=\"button\">Reset Password</a>\n            </div>\n            \n            <p>Or copy and paste this link into your browser:</p>\n            <p><code style=\"word-break: break-all;\">${data.resetLink}</code></p>\n            \n            <div class=\"security-notice\">\n              <strong>🔒 Security Notice:</strong> This link will expire ${data.expiresIn || 'in 1 hour'} for your security. \n              If you need to reset your password after this time, please request a new reset link.\n            </div>\n            \n            ${data.ipAddress || data.userAgent ? `\n              <div class=\"details\">\n                <strong>Request Details:</strong><br>\n                ${data.ipAddress ? `IP Address: ${data.ipAddress}<br>` : ''}\n                ${data.userAgent ? `Device: ${data.userAgent}` : ''}\n              </div>\n            ` : ''}\n            \n            <p><strong>Didn't request this?</strong></p>\n            <p>If you didn't request a password reset, please ignore this email. Your password won't be changed unless you click the link above and create a new one.</p>\n            \n            <p>For security reasons, we recommend:</p>\n            <ul>\n              <li>Using a strong, unique password</li>\n              <li>Enabling two-factor authentication if available</li>\n              <li>Not sharing your password with anyone</li>\n            </ul>\n            \n            <p>Best regards,<br>The Security Team</p>\n          </div>\n          <div class=\"footer\">\n            <p>This is an automated message, please do not reply to this email.</p>\n            <p>© 2024 Your Company. All rights reserved.</p>\n          </div>\n        </body>\n      </html>\n    `,\n    text: (data) => `\nPassword Reset Request\n\nHi${data.name ? ` ${data.name}` : ''},\n\nWe received a request to reset the password for your account associated with ${data.email}.\n\nReset your password: ${data.resetLink}\n\n🔒 Security Notice: This link will expire ${data.expiresIn || 'in 1 hour'} for your security. If you need to reset your password after this time, please request a new reset link.\n\n${data.ipAddress || data.userAgent ? `Request Details:\n${data.ipAddress ? `IP Address: ${data.ipAddress}` : ''}\n${data.userAgent ? `Device: ${data.userAgent}` : ''}` : ''}\n\nDidn't request this?\nIf you didn't request a password reset, please ignore this email. Your password won't be changed unless you click the link above and create a new one.\n\nFor security reasons, we recommend:\n- Using a strong, unique password\n- Enabling two-factor authentication if available\n- Not sharing your password with anyone\n\nBest regards,\nThe Security Team\n\nThis is an automated message, please do not reply to this email.\n© 2024 Your Company. All rights reserved.\n    `.trim(),\n  },\n};\n\nexport function ResetPasswordEmail(props: ResetPasswordEmailData) {\n  return (\n    <div style={{ fontFamily: 'Arial, sans-serif', maxWidth: 600, margin: '0 auto' }}>\n      <div style={{\n        backgroundColor: '#dc3545',\n        color: 'white',\n        padding: 30,\n        textAlign: 'center',\n        borderRadius: '8px 8px 0 0',\n      }}>\n        <h1>Password Reset Request</h1>\n      </div>\n      <div style={{\n        backgroundColor: '#ffffff',\n        padding: '40px 30px',\n        border: '1px solid #e2e8f0',\n        borderRadius: '0 0 8px 8px',\n      }}>\n        <p>Hi{props.name ? ` ${props.name}` : ''},</p>\n        \n        <p>We received a request to reset the password for your account associated with <strong>{props.email}</strong>.</p>\n        \n        <p>Click the button below to reset your password:</p>\n        \n        <div style={{ textAlign: 'center' }}>\n          <a \n            href={props.resetLink} \n            style={{\n              display: 'inline-block',\n              padding: '14px 28px',\n              backgroundColor: '#dc3545',\n              color: 'white',\n              textDecoration: 'none',\n              borderRadius: 6,\n              fontWeight: 500,\n              margin: '20px 0',\n            }}\n          >\n            Reset Password\n          </a>\n        </div>\n        \n        <p>Or copy and paste this link into your browser:</p>\n        <p>\n          <code style={{\n            backgroundColor: '#f7fafc',\n            padding: '2px 6px',\n            borderRadius: 3,\n            fontFamily: 'monospace',\n            wordBreak: 'break-all',\n          }}>\n            {props.resetLink}\n          </code>\n        </p>\n        \n        <div style={{\n          backgroundColor: '#f0f9ff',\n          borderLeft: '4px solid #3182ce',\n          padding: 12,\n          margin: '20px 0',\n          fontSize: 14,\n        }}>\n          <strong>🔒 Security Notice:</strong> This link will expire {props.expiresIn || 'in 1 hour'} for your security. \n          If you need to reset your password after this time, please request a new reset link.\n        </div>\n        \n        {(props.ipAddress || props.userAgent) && (\n          <div style={{\n            backgroundColor: '#f7fafc',\n            padding: 15,\n            borderRadius: 6,\n            margin: '20px 0',\n            fontSize: 14,\n          }}>\n            <strong>Request Details:</strong><br />\n            {props.ipAddress && <>IP Address: {props.ipAddress}<br /></>}\n            {props.userAgent && <>Device: {props.userAgent}</>}\n          </div>\n        )}\n        \n        <p><strong>Didn't request this?</strong></p>\n        <p>If you didn't request a password reset, please ignore this email. Your password won't be changed unless you click the link above and create a new one.</p>\n        \n        <p>For security reasons, we recommend:</p>\n        <ul>\n          <li>Using a strong, unique password</li>\n          <li>Enabling two-factor authentication if available</li>\n          <li>Not sharing your password with anyone</li>\n        </ul>\n        \n        <p>Best regards,<br />The Security Team</p>\n      </div>\n      <div style={{ textAlign: 'center', marginTop: 40, color: '#718096', fontSize: 14 }}>\n        <p>This is an automated message, please do not reply to this email.</p>\n        <p>© 2024 Your Company. All rights reserved.</p>\n      </div>\n    </div>\n  );\n}"],"mappings":"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","names":["import_react","import_react","import_core","import_jsx_runtime","import_core","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}