feat: velkost stitkov predajni nezavisla od velkosti cenovky

- novy posuvnik Velkost stitkov pri produkte (predvolene 14 px)
- Polohu a velkost stitkov pouzit na vsetky produkty prenesie aj velkost

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jakub_HostacnyandClaude Opus 5.5 committed 2026-10-21 12:36:48 +02:00
1 parent 8e4ad03af9
commit 6d73660cac
5 files changed
+17 -12

No files matched your search

+8 -6
View File
@@ -7,7 +7,7 @@ import { BadgeTemplate, CardProduct } from '@/types/newsletter';
import { ChevronDown, Trash2, Pencil, Globe, Layers } from 'lucide-react';
import { ImageUploadInput } from './ImageUploadInput';
import { pickAlt } from '@/lib/altText';
import { DEFAULT_STORES_OFFSET_X, DEFAULT_STORES_OFFSET_Y, badgeWidthFor, productCardAlt } from '@/lib/productCard';
import { DEFAULT_STORES_OFFSET_X, DEFAULT_STORES_OFFSET_Y, DEFAULT_STORES_SIZE, badgeWidthFor, productCardAlt } from '@/lib/productCard';
export const PRODUCT_BG_PRESETS = [
{ label: 'Červená', sub: 'Fantasticky', color: '#feeaea', border: '#f5d4d4' },
@@ -38,7 +38,7 @@ interface ProductEditorProps {
onOpenBadgeEditor?: () => void;
onApplyBadgeToSection?: () => void;
onApplyBadgeToAll?: () => void;
onApplyStoresOffsetToAll?: (x: number, y: number) => void; // poloha štítkov pre všetky produkty
onApplyStoresOffsetToAll?: (x: number, y: number, size: number) => void; // poloha a veľkosť štítkov pre všetky produkty
}
const inputCls = 'w-full text-xs border border-gray-300 rounded-lg px-2 py-1.5 bg-white';
@@ -135,6 +135,7 @@ export const ProductEditor: React.FC<ProductEditorProps> = ({
const offsetY = p.imageOffsetY || 0;
const storesX = p.storesOffsetX ?? DEFAULT_STORES_OFFSET_X;
const storesY = p.storesOffsetY ?? DEFAULT_STORES_OFFSET_Y;
const storesSize = p.storesSize ?? DEFAULT_STORES_SIZE;
const hasStores = !!(p.stores?.potraviny || p.stores?.supermarket || p.stores?.tempo);
const badgeWidth = badgeWidthFor(p, variant);
@@ -326,8 +327,8 @@ export const ProductEditor: React.FC<ProductEditorProps> = ({
{/* DOSTUPNOSŤ */}
<Block
title="Dostupnosť"
action={hasStores && (storesX !== DEFAULT_STORES_OFFSET_X || storesY !== DEFAULT_STORES_OFFSET_Y) && (
<ResetLink onClick={() => onChange({ storesOffsetX: undefined, storesOffsetY: undefined })} />
action={hasStores && (storesX !== DEFAULT_STORES_OFFSET_X || storesY !== DEFAULT_STORES_OFFSET_Y || storesSize !== DEFAULT_STORES_SIZE) && (
<ResetLink onClick={() => onChange({ storesOffsetX: undefined, storesOffsetY: undefined, storesSize: undefined })} />
)}
>
<div className="grid grid-cols-3 gap-1.5">
@@ -357,13 +358,14 @@ export const ProductEditor: React.FC<ProductEditorProps> = ({
<>
<Slider label="Štítky ↔" value={storesX} display={`${storesX}`} min={-80} max={80} step={1} onChange={set('storesOffsetX')} />
<Slider label="Štítky ↕" value={storesY} display={`${storesY}`} min={-40} max={60} step={1} onChange={set('storesOffsetY')} />
<Slider label="Veľkosť" value={storesSize} display={`${storesSize} px`} min={8} max={30} step={1} onChange={set('storesSize')} />
{onApplyStoresOffsetToAll && (
<button
type="button"
onClick={() => onApplyStoresOffsetToAll(storesX, storesY)}
onClick={() => onApplyStoresOffsetToAll(storesX, storesY, storesSize)}
className="flex items-center gap-1 text-[10px] font-bold text-red-700 bg-red-50 border border-red-200 hover:bg-red-100 px-2 py-1 rounded-lg"
>
<Globe className="w-3 h-3" /> Polohu štítkov použiť na všetky produkty
<Globe className="w-3 h-3" /> Polohu a veľkosť štítkov použiť na všetky produkty
</button>
)}
</>