diff --git a/admin-spa/src/components/EmailBuilder/BlockRenderer.tsx b/admin-spa/src/components/EmailBuilder/BlockRenderer.tsx
index 6e74f32..cbd93e2 100644
--- a/admin-spa/src/components/EmailBuilder/BlockRenderer.tsx
+++ b/admin-spa/src/components/EmailBuilder/BlockRenderer.tsx
@@ -39,33 +39,80 @@ export function BlockRenderer({
);
case 'card':
- const cardClasses = {
- default: 'bg-white border border-gray-200',
- success: 'bg-green-50 border border-green-200',
- info: 'bg-blue-50 border border-blue-200',
- warning: 'bg-orange-50 border border-orange-200',
- hero: 'bg-gradient-to-r from-purple-500 to-indigo-600 text-white'
+ const cardStyles: { [key: string]: React.CSSProperties } = {
+ default: {
+ background: '#ffffff',
+ borderRadius: '8px',
+ padding: '32px 40px',
+ marginBottom: '24px'
+ },
+ success: {
+ background: '#e8f5e9',
+ border: '1px solid #4caf50',
+ borderRadius: '8px',
+ padding: '32px 40px',
+ marginBottom: '24px'
+ },
+ info: {
+ background: '#f0f7ff',
+ border: '1px solid #0071e3',
+ borderRadius: '8px',
+ padding: '32px 40px',
+ marginBottom: '24px'
+ },
+ warning: {
+ background: '#fff8e1',
+ border: '1px solid #ff9800',
+ borderRadius: '8px',
+ padding: '32px 40px',
+ marginBottom: '24px'
+ },
+ hero: {
+ background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
+ color: '#fff',
+ borderRadius: '8px',
+ padding: '32px 40px',
+ marginBottom: '24px'
+ }
};
return (
-
+
);
case 'button':
- const buttonClasses = block.style === 'solid'
- ? 'bg-purple-600 text-white hover:bg-purple-700'
- : 'border-2 border-purple-600 text-purple-600 hover:bg-purple-50';
+ const buttonStyle: React.CSSProperties = block.style === 'solid'
+ ? {
+ display: 'inline-block',
+ background: '#7f54b3',
+ color: '#fff',
+ padding: '14px 28px',
+ borderRadius: '6px',
+ textDecoration: 'none',
+ fontWeight: 600
+ }
+ : {
+ display: 'inline-block',
+ background: 'transparent',
+ color: '#7f54b3',
+ padding: '12px 26px',
+ border: '2px solid #7f54b3',
+ borderRadius: '6px',
+ textDecoration: 'none',
+ fontWeight: 600
+ };
return (
-
+
{block.text}
diff --git a/admin-spa/src/components/EmailBuilder/EmailBuilder.tsx b/admin-spa/src/components/EmailBuilder/EmailBuilder.tsx
index 770b37a..4d248b8 100644
--- a/admin-spa/src/components/EmailBuilder/EmailBuilder.tsx
+++ b/admin-spa/src/components/EmailBuilder/EmailBuilder.tsx
@@ -5,6 +5,7 @@ import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import { Textarea } from '@/components/ui/textarea';
+import { RichTextEditor } from '@/components/ui/rich-text-editor';
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
import { Plus, Type, Square, MousePointer, Minus, Space } from 'lucide-react';
@@ -179,8 +180,8 @@ export function EmailBuilder({ blocks, onChange, variables = [] }: EmailBuilderP
{/* Email Canvas */}
-
-
+
+
{blocks.length === 0 ? (
{__('No blocks yet. Add blocks using the toolbar above.')}
@@ -221,14 +222,16 @@ export function EmailBuilder({ blocks, onChange, variables = [] }: EmailBuilderP
{(editingBlock?.type === 'header' || editingBlock?.type === 'text') && (
-
-
)}
@@ -250,14 +253,16 @@ export function EmailBuilder({ blocks, onChange, variables = [] }: EmailBuilderP
-
-
>
)}
diff --git a/admin-spa/src/routes/Settings/Notifications/EditTemplate.tsx b/admin-spa/src/routes/Settings/Notifications/EditTemplate.tsx
index cd12be9..2c78777 100644
--- a/admin-spa/src/routes/Settings/Notifications/EditTemplate.tsx
+++ b/admin-spa/src/routes/Settings/Notifications/EditTemplate.tsx
@@ -317,25 +317,7 @@ export default function EditTemplate() {
}
>
- {/* Tabs - Sticky in header area */}
-
-
-
-
-
- {__('Editor')}
-
-
-
- {__('Preview')}
-
-
-
-
-
- {/* Editor Tab */}
- {activeTab === 'editor' && (
-
+
{/* Subject */}
@@ -354,20 +336,37 @@ export default function EditTemplate() {
{/* Body */}
-
+
+ {/* Tabs for Editor/Preview */}
-
-
+
+
+
+
+
+
+ {__('Editor')}
+
+
+
+ {__('Preview')}
+
+
+
+ {activeTab === 'editor' && (
+
+ )}
+
- {codeMode ? (
+ {activeTab === 'editor' && codeMode ? (
- ) : (
+ ) : activeTab === 'editor' ? (
- )}
+ ) : activeTab === 'preview' ? (
+
+
+
+ ) : null}
- )}
-
- {/* Preview Tab */}
- {activeTab === 'preview' && (
-
-
- {/* Subject Preview */}
-
-
-
- {subject || {__('(No subject)')}}
-
-
-
- {/* Email Preview */}
-
-
-
-
-
- {__('This is how your email will look. Dynamic variables are highlighted in yellow.')}
-
-
-
-
- )}
);
}