diff --git a/src/modules/email-signature/components/email-signature-module.tsx b/src/modules/email-signature/components/email-signature-module.tsx index 4b940b1..72acceb 100644 --- a/src/modules/email-signature/components/email-signature-module.tsx +++ b/src/modules/email-signature/components/email-signature-module.tsx @@ -12,7 +12,7 @@ import { RotateCcw } from 'lucide-react'; export function EmailSignatureModule() { const { config, updateField, updateColor, updateLayout, - setVariant, setCompany, resetToDefaults, loadConfig, + setVariant, setCompany, setAddress, resetToDefaults, loadConfig, } = useSignatureConfig(); const { saved, loading, save, remove } = useSavedSignatures(); @@ -28,6 +28,7 @@ export function EmailSignatureModule() { onUpdateLayout={updateLayout} onSetVariant={setVariant} onSetCompany={setCompany} + onSetAddress={setAddress} /> @@ -49,7 +50,7 @@ export function EmailSignatureModule() { - {/* Right panel — preview */} + {/* Right panel — preview (scrollable, resizable) */}
diff --git a/src/modules/email-signature/components/signature-configurator.tsx b/src/modules/email-signature/components/signature-configurator.tsx index 62f52eb..5649b53 100644 --- a/src/modules/email-signature/components/signature-configurator.tsx +++ b/src/modules/email-signature/components/signature-configurator.tsx @@ -2,7 +2,7 @@ import type { CompanyId } from '@/core/auth/types'; import type { SignatureConfig, SignatureColors, SignatureLayout, SignatureVariant } from '../types'; -import { COMPANY_BRANDING } from '../services/company-branding'; +import { COMPANY_BRANDING, BELETAGE_ADDRESSES } from '../services/company-branding'; import { Input } from '@/shared/components/ui/input'; import { Label } from '@/shared/components/ui/label'; import { Switch } from '@/shared/components/ui/switch'; @@ -17,13 +17,39 @@ interface SignatureConfiguratorProps { onUpdateLayout: (key: keyof SignatureLayout, value: number) => void; onSetVariant: (variant: SignatureVariant) => void; onSetCompany: (company: CompanyId) => void; + onSetAddress?: (address: string[]) => void; } -const COLOR_PALETTE: Record = { - verde: '#22B5AB', - griInchis: '#54504F', - griDeschis: '#A7A9AA', - negru: '#323232', +/** Color palette per company */ +const COMPANY_PALETTES: Record> = { + beletage: { + verde: '#22B5AB', + griInchis: '#54504F', + griDeschis: '#A7A9AA', + negru: '#323232', + }, + 'urban-switch': { + indigo: '#6366f1', + violet: '#4F46E5', + griInchis: '#2D2D2D', + griDeschis: '#6B7280', + albastru: '#3B82F6', + negru: '#1F2937', + }, + 'studii-de-teren': { + amber: '#f59e0b', + portocaliu: '#D97706', + griInchis: '#2D2D2D', + griDeschis: '#6B7280', + maro: '#92400E', + negru: '#1F2937', + }, + group: { + gri: '#64748b', + griInchis: '#334155', + griDeschis: '#94a3b8', + negru: '#1e293b', + }, }; const COLOR_LABELS: Record = { @@ -48,8 +74,10 @@ const LAYOUT_CONTROLS: { key: keyof SignatureLayout; label: string; min: number; ]; export function SignatureConfigurator({ - config, onUpdateField, onUpdateColor, onUpdateLayout, onSetVariant, onSetCompany, + config, onUpdateField, onUpdateColor, onUpdateLayout, onSetVariant, onSetCompany, onSetAddress, }: SignatureConfiguratorProps) { + const palette = COMPANY_PALETTES[config.company]; + return (
{/* Company selector */} @@ -67,6 +95,26 @@ export function SignatureConfigurator({
+ {/* Address selector (for Beletage) */} + {config.company === 'beletage' && onSetAddress && ( +
+ + +
+ )} + {/* Personal data */} @@ -113,14 +161,14 @@ export function SignatureConfigurator({ - {/* Colors */} + {/* Colors — company-specific palette */}

Culori text

{(Object.keys(COLOR_LABELS) as (keyof SignatureColors)[]).map((colorKey) => (
{COLOR_LABELS[colorKey]}
- {Object.values(COLOR_PALETTE).map((color) => ( + {Object.values(palette).map((color) => ( +
+ + {Math.round(zoom * 100)}% + +
-
+
{ + setConfig((prev) => ({ ...prev, addressOverride: address })); + }, []); + const resetToDefaults = useCallback(() => { setConfig(createDefaultConfig(config.company)); }, [config.company]); @@ -83,7 +87,8 @@ export function useSignatureConfig(initialCompany: CompanyId = 'beletage') { updateLayout, setVariant, setCompany, + setAddress, resetToDefaults, loadConfig, - }), [config, updateField, updateColor, updateLayout, setVariant, setCompany, resetToDefaults, loadConfig]); + }), [config, updateField, updateColor, updateLayout, setVariant, setCompany, setAddress, resetToDefaults, loadConfig]); } diff --git a/src/modules/email-signature/services/company-branding.ts b/src/modules/email-signature/services/company-branding.ts index 72ceb03..72ea398 100644 --- a/src/modules/email-signature/services/company-branding.ts +++ b/src/modules/email-signature/services/company-branding.ts @@ -12,25 +12,34 @@ const BELETAGE_COLORS: SignatureColors = { }; const URBAN_SWITCH_COLORS: SignatureColors = { - prefix: '#3B3B3B', - name: '#3B3B3B', - title: '#8B8B8B', - address: '#8B8B8B', - phone: '#3B3B3B', - website: '#3B3B3B', + prefix: '#2D2D2D', + name: '#2D2D2D', + title: '#6B7280', + address: '#6B7280', + phone: '#2D2D2D', + website: '#4F46E5', motto: '#6366f1', }; const STUDII_COLORS: SignatureColors = { - prefix: '#3B3B3B', - name: '#3B3B3B', - title: '#8B8B8B', - address: '#8B8B8B', - phone: '#3B3B3B', - website: '#3B3B3B', + prefix: '#2D2D2D', + name: '#2D2D2D', + title: '#6B7280', + address: '#6B7280', + phone: '#2D2D2D', + website: '#D97706', motto: '#f59e0b', }; +const ADDR_UNIRII = ['str. Unirii, nr. 3, ap. 26', 'Cluj-Napoca, Cluj 400417', 'România'] as const; +const ADDR_CHRISTESCU = ['str. G-ral Eremia Grigorescu, nr. 21', 'Cluj-Napoca, Cluj 400304', 'România'] as const; + +/** Available address options for Beletage (toggle between offices) */ +export const BELETAGE_ADDRESSES: { unirii: string[]; christescu: string[] } = { + unirii: [...ADDR_UNIRII], + christescu: [...ADDR_CHRISTESCU], +}; + export const COMPANY_BRANDING: Record = { beletage: { id: 'beletage', @@ -48,7 +57,7 @@ export const COMPANY_BRANDING: Record = { png: 'https://beletage.ro/img/Green-slash.png', svg: 'https://beletage.ro/img/Green-slash.svg', }, - address: ['str. Unirii, nr. 3, ap. 26', 'Cluj-Napoca, Cluj 400417', 'România'], + address: [...ADDR_UNIRII], website: 'www.beletage.ro', motto: 'we make complex simple', defaultColors: BELETAGE_COLORS, @@ -58,20 +67,20 @@ export const COMPANY_BRANDING: Record = { name: 'Urban Switch SRL', accent: '#6366f1', logo: { - png: '', - svg: '', + png: '/logos/logo-us-dark.svg', + svg: '/logos/logo-us-dark.svg', }, slashGrey: { png: 'https://beletage.ro/img/Grey-slash.png', svg: 'https://beletage.ro/img/Grey-slash.svg', }, slashAccent: { - png: '', - svg: '', + png: '/logos/logo-us-light.svg', + svg: '/logos/logo-us-light.svg', }, - address: ['Cluj-Napoca', 'România'], - website: '', - motto: '', + address: ['str. Unirii, nr. 3, ap. 26', 'Cluj-Napoca, Cluj 400417', 'România'], + website: 'www.urbanswitch.ro', + motto: 'shaping urban futures', defaultColors: URBAN_SWITCH_COLORS, }, 'studii-de-teren': { @@ -79,20 +88,20 @@ export const COMPANY_BRANDING: Record = { name: 'Studii de Teren SRL', accent: '#f59e0b', logo: { - png: '', - svg: '', + png: '/logos/logo-sdt-dark.svg', + svg: '/logos/logo-sdt-dark.svg', }, slashGrey: { png: 'https://beletage.ro/img/Grey-slash.png', svg: 'https://beletage.ro/img/Grey-slash.svg', }, slashAccent: { - png: '', - svg: '', + png: '/logos/logo-sdt-light.svg', + svg: '/logos/logo-sdt-light.svg', }, - address: ['Cluj-Napoca', 'România'], - website: '', - motto: '', + address: ['str. Unirii, nr. 3, ap. 26', 'Cluj-Napoca, Cluj 400417', 'România'], + website: 'www.studiideteren.ro', + motto: 'ground truth, measured right', defaultColors: STUDII_COLORS, }, group: { @@ -100,9 +109,12 @@ export const COMPANY_BRANDING: Record = { name: 'Grup Companii', accent: '#64748b', logo: { png: '', svg: '' }, - slashGrey: { png: '', svg: '' }, + slashGrey: { + png: 'https://beletage.ro/img/Grey-slash.png', + svg: 'https://beletage.ro/img/Grey-slash.svg', + }, slashAccent: { png: '', svg: '' }, - address: ['Cluj-Napoca', 'România'], + address: ['Cluj-Napoca, Cluj', 'România'], website: '', motto: '', defaultColors: BELETAGE_COLORS, diff --git a/src/modules/email-signature/services/signature-builder.ts b/src/modules/email-signature/services/signature-builder.ts index ec743e0..5c70c6e 100644 --- a/src/modules/email-signature/services/signature-builder.ts +++ b/src/modules/email-signature/services/signature-builder.ts @@ -14,6 +14,7 @@ export function formatPhone(raw: string): { display: string; link: string } { export function generateSignatureHtml(config: SignatureConfig): string { const branding = getBranding(config.company); + const address = config.addressOverride ?? branding.address; const { display: phone, link: phoneLink } = formatPhone(config.phone); const images = config.useSvg ? { logo: branding.logo.svg, greySlash: branding.slashGrey.svg, accentSlash: branding.slashAccent.svg } @@ -71,7 +72,7 @@ export function generateSignatureHtml(config: SignatureConfig): string { - ${branding.address.join('
')}
+ ${address.join('
')}
diff --git a/src/modules/email-signature/types.ts b/src/modules/email-signature/types.ts index 0936d92..95ade11 100644 --- a/src/modules/email-signature/types.ts +++ b/src/modules/email-signature/types.ts @@ -48,6 +48,8 @@ export interface SignatureConfig { layout: SignatureLayout; variant: SignatureVariant; useSvg: boolean; + /** Override the default company address */ + addressOverride?: string[]; } export interface SavedSignature {