diff --git a/src/lib/emailRenderer.ts b/src/lib/emailRenderer.ts
index 97a52d8..c98c2bd 100644
--- a/src/lib/emailRenderer.ts
+++ b/src/lib/emailRenderer.ts
@@ -792,12 +792,17 @@ function renderExactProductCard(
const effectiveCardBg = p.cardBgColor || cardBg || '#feeaea';
const storesHtml = renderStoresHtml(p);
+ // Posun štítkov je nastavenie produktu (staršie kampane mohli mať hodnotu na sekcii)
+ const productStoresOffset: StoresOffset = {
+ x: p.storesOffsetX ?? storesOffset.x,
+ y: p.storesOffsetY ?? storesOffset.y
+ };
const badgeLayout = p.badgeLayout || 'below';
// Cenovka so štítkami predajní nad hornou hranou (bez obalového
)
const renderBadgeContent = (bWidth: number, bAlign: string, padTop: number, padBottom: number, marginStyle: string) =>
- attachStoresToBadge(renderBadgeOnly(bWidth, bAlign, 0, padBottom, marginStyle), storesHtml, bWidth, bAlign, marginStyle, padTop, storesOffset);
+ attachStoresToBadge(renderBadgeOnly(bWidth, bAlign, 0, padBottom, marginStyle), storesHtml, bWidth, bAlign, marginStyle, padTop, productStoresOffset);
// Pomocná funkcia na render samotnej cenovky (bez obalového | )
const renderBadgeOnly = (bWidth: number, bAlign: string, padTop: number, padBottom: number, marginStyle: string) => {
@@ -958,6 +963,11 @@ function renderExactProductCard(
function renderExactLoyaltyCard(p: any, validity: string, storesOffset: StoresOffset = {}): string {
const cardValidity = p.validityOverride || validity;
const storesHtml = renderStoresHtml(p);
+ // Posun štítkov je nastavenie produktu (staršie kampane mohli mať hodnotu na sekcii)
+ const productStoresOffset: StoresOffset = {
+ x: p.storesOffsetX ?? storesOffset.x,
+ y: p.storesOffsetY ?? storesOffset.y
+ };
const loyaltyBg = p.cardBgColor || '#e6e1d9';
return `
@@ -1027,7 +1037,7 @@ function renderExactLoyaltyCard(p: any, validity: string, storesOffset: StoresOf
: renderCleanBadgeSvg(p.badgeCustomTemplate, loyaltyProductData, bWidth)}
|
- `, storesHtml, bWidth, bAlign, marginStyle, padTop, storesOffset);
+ `, storesHtml, bWidth, bAlign, marginStyle, padTop, productStoresOffset);
}
// 2. Predvolený Dual Sticker Block (Bez karty / S kartou) 1:1
@@ -1084,7 +1094,7 @@ function renderExactLoyaltyCard(p: any, validity: string, storesOffset: StoresOf
${escapeHtml(p.cardUnitPrice)}
- `, storesHtml, 140, 'center', 'margin: 0 auto;', 0, storesOffset);
+ `, storesHtml, 140, 'center', 'margin: 0 auto;', 0, productStoresOffset);
})()}
diff --git a/src/types/newsletter.ts b/src/types/newsletter.ts
index b1bd34c..764403d 100644
--- a/src/types/newsletter.ts
+++ b/src/types/newsletter.ts
@@ -47,6 +47,8 @@ export interface ProductItem {
showSlovakFlag?: boolean;
customBadgePngUrl?: string; // Voliteľná statická PNG cenovka
imageAlt?: string; // Ručný alt text fotky (inak názov produktu)
+ storesOffsetX?: number; // posun štítkov predajní voči cenovke (+ doprava)
+ storesOffsetY?: number; // posun štítkov predajní voči hornej hrane cenovky (+ vyššie)
imageScale?: number; // Zoom fotky (1 = 100 %)
imageOffsetX?: number; // Posun fotky vodorovne v px (+ doprava)
imageOffsetY?: number; // Posun fotky zvisle v px (+ nadol)
@@ -114,8 +116,9 @@ export interface ProductsGridModuleData {
cardBorderColor?: string;
columns?: 1 | 2;
showCardValidity?: boolean; // platnosť na kartách produktov (predvolene skrytá)
- storesOffsetX?: number; // posun štítkov predajní voči cenovke (+ doprava)
- storesOffsetY?: number; // posun štítkov predajní voči hornej hrane cenovky (+ vyššie)
+ // staršie kampane: posun štítkov na úrovni sekcie (dnes sa nastavuje pri produkte)
+ storesOffsetX?: number;
+ storesOffsetY?: number;
}
export interface LoyaltyClubModuleData {