diff --git a/src/components/express/builder/BuilderCanvas.tsx b/src/components/express/builder/BuilderCanvas.tsx index e29485e..aa24e42 100644 --- a/src/components/express/builder/BuilderCanvas.tsx +++ b/src/components/express/builder/BuilderCanvas.tsx @@ -57,6 +57,8 @@ function resolveBrandPreview(field: TemplateField, designMD: DesignMD, company: case 'twitter': return company.socialLinks?.x || '@x'; case 'youtube': return company.socialLinks?.youtube || 'YouTube'; case 'website': return company.socialLinks?.website || 'www.example.com'; + case 'intro-video': return designMD.introVideoUrl || ''; + case 'outro-video': return designMD.outroVideoUrl || ''; default: return field.content; } } @@ -365,11 +367,48 @@ const BrandVariableContent: React.FC<{ field: TemplateField; designMD: DesignMD; src={designMD.logoUrl} alt="Logo" className="max-w-full max-h-full object-contain pointer-events-none p-1" - style={{ opacity: (field.style.opacity ?? 100) / 100 }} + style={{ + opacity: (field.style.opacity ?? 100) / 100, + mixBlendMode: field.style.blendMode as any, + }} /> ); } + // Intro / Outro Video: show video player or placeholder + if (field.brandSource === 'intro-video' || field.brandSource === 'outro-video') { + if (preview) { + const objectFit = field.brandSource === 'intro-video' + ? (designMD.introVideoFit || field.style.mediaFit || 'cover') + : (designMD.outroVideoFit || field.style.mediaFit || 'cover'); + const bgColor = field.brandSource === 'intro-video' ? designMD.introVideoBgColor : designMD.outroVideoBgColor; + + return ( + + ); + } else { + return ( +