Files
MyClub/frontend/build/static/js/334.0d196877.chunk.js.map
T
Tomas Dvorak 84a8acf944 update
2026-03-02 20:20:56 +01:00

1 line
290 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"version":3,"file":"static/js/334.0d196877.chunk.js","mappings":"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","sources":["services/myuibrix.ts","components/editor/elementContext.ts","components/editor/CustomCSSEditor.tsx","components/editor/ContextualAdminLinks.tsx","components/editor/VisualStylePanel.tsx","data/defaultElements.ts","components/editor/MyUIbrixEditor.tsx"],"sourcesContent":["/**\n * MyUIbrix Backend API Service\n * Provides validation and optimization for MyUIbrix editor\n */\n\nimport api from './api';\n\nexport interface ElementConfig {\n page_type: string;\n element_name: string;\n variant: string;\n visible: boolean;\n display_order: number;\n custom_styles?: Record<string, any>;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n optimized_styles?: Record<string, any>;\n suggestions?: string[];\n error?: string;\n}\n\nexport interface OptimizationResult {\n current_layout: any[];\n suggestions: string[];\n performance_score: number;\n}\n\n/**\n * Validate a single element configuration\n */\nexport const validateElementConfig = async (config: ElementConfig): Promise<ValidationResult> => {\n try {\n const response = await api.post('/admin/myuibrix/validate', config);\n return response.data;\n } catch (error: any) {\n console.error('Failed to validate element config:', error);\n return {\n valid: false,\n error: error.response?.data?.error || 'Validation failed'\n };\n }\n};\n\n/**\n * Validate multiple element configurations at once\n */\nexport const batchValidateConfigs = async (configs: ElementConfig[]): Promise<any> => {\n try {\n const response = await api.post('/admin/myuibrix/validate-batch', configs);\n return response.data;\n } catch (error: any) {\n console.error('Failed to batch validate configs:', error);\n throw error;\n }\n};\n\n/**\n * Get element preview metadata\n */\nexport const getElementPreview = async (\n element: string,\n variant: string,\n viewport: 'desktop' | 'tablet' | 'mobile' = 'desktop'\n): Promise<any> => {\n try {\n const response = await api.get('/admin/myuibrix/preview', {\n params: { element, variant, viewport }\n });\n return response.data;\n } catch (error: any) {\n console.error('Failed to get element preview:', error);\n throw error;\n }\n};\n\n/**\n * Get layout optimization suggestions\n */\nexport const optimizePageLayout = async (pageType: string = 'homepage'): Promise<OptimizationResult> => {\n try {\n const response = await api.get('/admin/myuibrix/optimize-layout', {\n params: { page_type: pageType }\n });\n return response.data;\n } catch (error: any) {\n console.error('Failed to optimize layout:', error);\n throw error;\n }\n};\n\n/**\n * Debounce helper for style changes\n */\nexport const debounce = <T extends (...args: any[]) => any>(\n func: T,\n wait: number\n): ((...args: Parameters<T>) => void) => {\n let timeout: NodeJS.Timeout | null = null;\n \n return (...args: Parameters<T>) => {\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n};\n\n/**\n * Safe DOM manipulation wrapper\n */\nexport const safeDOM = {\n /**\n * Safely append child element\n */\n appendChild: (parent: Element, child: Element): boolean => {\n try {\n if (!parent.contains(child)) {\n parent.appendChild(child);\n return true;\n }\n return false;\n } catch (e) {\n console.warn('Failed to append child:', e);\n return false;\n }\n },\n\n /**\n * Safely remove child element\n */\n removeChild: (parent: Element, child: Element): boolean => {\n try {\n if (parent.contains(child)) {\n parent.removeChild(child);\n return true;\n }\n return false;\n } catch (e) {\n console.warn('Failed to remove child:', e);\n return false;\n }\n },\n\n /**\n * Safely replace child element\n */\n replaceChild: (parent: Element, newChild: Element, oldChild: Element): boolean => {\n try {\n if (parent.contains(oldChild)) {\n parent.replaceChild(newChild, oldChild);\n return true;\n }\n return false;\n } catch (e) {\n console.warn('Failed to replace child:', e);\n return false;\n }\n },\n\n /**\n * Safely query selector\n */\n querySelector: (selector: string): Element | null => {\n try {\n return document.querySelector(selector);\n } catch (e) {\n console.warn('Invalid selector:', selector, e);\n return null;\n }\n },\n\n /**\n * Safely query selector all\n */\n querySelectorAll: (selector: string): Element[] => {\n try {\n return Array.from(document.querySelectorAll(selector));\n } catch (e) {\n console.warn('Invalid selector:', selector, e);\n return [];\n }\n },\n\n /**\n * Safely insert before another element\n */\n insertBefore: (parent: Element, newChild: Element, referenceChild: Node | null): boolean => {\n try {\n if (referenceChild && !parent.contains(referenceChild)) {\n console.warn('Reference child is not a child of parent');\n return false;\n }\n if (!parent.contains(newChild)) {\n parent.insertBefore(newChild, referenceChild);\n return true;\n }\n return false;\n } catch (e) {\n console.warn('Failed to insert before:', e);\n return false;\n }\n }\n};\n","// Static TSX context snippets for AI CSS generation. Keep concise and representative.\n// These snippets help the AI understand structure and common selectors per section.\n\nexport const ELEMENT_TSX_CONTEXT: Record<string, { tsx: string; selectors?: string[]; notes?: string }> = {\n hero: {\n tsx: `\n<section data-element=\"hero\" className=\"hero-grid\">\n {/* variant: grid | scroller | swiper | swiper_full */}\n <a className=\"hero-card big\">\n <div className=\"bg\" />\n <div className=\"meta\">\n <div className=\"tag\">Aktuality</div>\n <h2 className=\"title\">Nadpis</h2>\n </div>\n </a>\n <a className=\"hero-card\" />\n <a className=\"hero-card\" />\n</section>\n`.trim(),\n selectors: ['.hero-grid', '.hero-card', '.bg', '.meta', '.tag', '.title'],\n notes: 'Full-bleed variants may use negative margins and viewport width tricks.'\n },\n matches: {\n tsx: `\n<section data-element=\"matches\" className=\"next-match\">\n <button className=\"nav prev\" />\n <div className=\"team\">\n <img className=\"logo\" />\n <div>Domácí</div>\n </div>\n <div className=\"countdown\">Začátek zápasu</div>\n <div className=\"team\">\n <img className=\"logo\" />\n <div>Hosté</div>\n </div>\n <button className=\"nav next\" />\n</section>\n`.trim(),\n selectors: ['.next-match', '.team', '.logo', '.countdown', '.nav.prev', '.nav.next'],\n notes: 'Center content, strong contrast on countdown. Keep buttons accessible.'\n },\n 'matches-slider': {\n tsx: `\n<section data-element=\"matches-slider\" className=\"matches-slider\">\n <div className=\"section-head\">\n <h3>Zápasy</h3>\n <a className=\"see-all\" />\n </div>\n <div className=\"matches-grid\">\n <div className=\"matches-track\">\n <div className=\"match-card\">\n <div className=\"match-meta\" />\n <div className=\"teams\">\n <div className=\"team\"><img /><div className=\"name\" /></div>\n <div className=\"score\"><span className=\"home\" /><span className=\"sep\" /><span className=\"away\" /></div>\n <div className=\"team\"><img /><div className=\"name\" /></div>\n </div>\n </div>\n </div>\n <div className=\"matches-tabs\"><button className=\"active\" /></div>\n </div>\n</section>\n`.trim(),\n selectors: ['.matches-slider', '.section-head', '.see-all', '.matches-grid', '.matches-track', '.match-card', '.match-meta', '.teams', '.team', '.score', '.matches-tabs'],\n notes: 'Horizontal scrolling track with cards; consider responsive card widths and gaps.'\n },\n news: {\n tsx: `\n<section data-element=\"news\" className=\"news-list\">\n <div className=\"section-head\"><h3>Další aktuality</h3></div>\n <div className=\"blog-list\">\n <a className=\"card\">\n <div className=\"thumb\" />\n <div><h4>Title</h4><div className=\"excerpt\" /></div>\n </a>\n </div>\n <div><a className=\"btn\">Zobrazit všechny aktuality</a></div>\n</section>\n`.trim(),\n selectors: ['.news-list', '.section-head', '.blog-list', '.card', '.thumb', '.btn'],\n },\n table: {\n tsx: `\n<section data-element=\"table\" className=\"standings\">\n <div className=\"table-card\">\n <div className=\"section-head\">\n <h3>Tabulky</h3>\n <a className=\"see-all\" />\n </div>\n <div className=\"standings-table-wrapper\">\n <table className=\"standings-table-compact\">\n <thead><tr><th>#</th><th>Tým</th><th>Z</th><th>V</th><th>R</th><th>P</th><th className=\"hide-mobile\">Skóre</th><th>Body</th></tr></thead>\n <tbody><tr><td>#1</td><td><img />Tým</td><td>…</td></tr></tbody>\n </table>\n </div>\n </div>\n</section>\n`.trim(),\n selectors: ['.standings', '.table-card', '.section-head', '.standings-table-wrapper', '.standings-table-compact', '.see-all'],\n notes: 'Compact table; mind overflow-x on small screens.'\n },\n sponsors: {\n tsx: `\n<section data-element=\"sponsors\" className=\"sponsors\">\n <div className=\"section-head\"><h3>Sponzoři</h3></div>\n <div className=\"sponsors-grid\"><a className=\"sponsor-tile\"><img /></a></div>\n</section>\n`.trim(),\n selectors: ['.sponsors', '.section-head', '.sponsors-grid', '.sponsor-tile'],\n },\n};\n","import React, { useState, useEffect } from 'react';\nimport {\n Box,\n VStack,\n HStack,\n Text,\n Textarea,\n Button,\n IconButton,\n useToast,\n Tabs,\n TabList,\n Tab,\n TabPanels,\n TabPanel,\n Code,\n Alert,\n AlertIcon,\n useColorModeValue,\n Divider,\n Spinner,\n} from '@chakra-ui/react';\nimport { FiCode, FiEye, FiSave, FiRefreshCw, FiZap } from 'react-icons/fi';\nimport { generateCSSAI, AIGenerateCSSReq } from '../../services/ai';\nimport { ELEMENT_TSX_CONTEXT } from './elementContext';\n\ninterface CustomCSSEditorProps {\n elementName: string;\n onCSSChange: (css: string) => void;\n currentCSS?: string;\n currentStyles?: Record<string, any>;\n theme?: Record<string, string>;\n}\n\nconst CustomCSSEditor: React.FC<CustomCSSEditorProps> = ({\n elementName,\n onCSSChange,\n currentCSS = '',\n currentStyles = {},\n theme = {},\n}) => {\n const [css, setCSS] = useState(currentCSS);\n const [isValid, setIsValid] = useState(true);\n const [preview, setPreview] = useState(false);\n const [aiPrompt, setAIPrompt] = useState('Zvýrazni tento blok: moderní vzhled, zaoblené rohy, stín, lepší hover efekt; respektuj klubové barvy a responzivitu.');\n const [aiLoading, setAILoading] = useState(false);\n const toast = useToast();\n const bgColor = useColorModeValue('white', 'gray.800');\n const borderColor = useColorModeValue('gray.200', 'gray.600');\n\n useEffect(() => {\n setCSS(currentCSS);\n }, [currentCSS]);\n\n const validateCSS = (cssString: string): boolean => {\n try {\n // Basic CSS validation\n if (!cssString.trim()) return true;\n \n // Check for balanced braces\n const openBraces = (cssString.match(/{/g) || []).length;\n const closeBraces = (cssString.match(/}/g) || []).length;\n \n return openBraces === closeBraces;\n } catch {\n return false;\n }\n };\n\n // Collect rich AI context about the current element and page layout\n const collectAIContext = (elName: string) => {\n try {\n const rootSelector = `[data-element=\"${elName}\"]`;\n const el = document.querySelector(rootSelector) as HTMLElement | null;\n const container = (document.querySelector('.myuibrix-viewport-wrapper') as HTMLElement) || (document.querySelector('.container') as HTMLElement) || null;\n\n const cssVars = (() => {\n const style = getComputedStyle(document.documentElement);\n const keys = ['--primary','--primary-light','--secondary','--text','--bg','--bg-soft','--club-primary','--club-text-on-primary'];\n const out: Record<string,string> = {};\n keys.forEach(k => { const v = style.getPropertyValue(k); if (v) out[k] = v.trim(); });\n return out;\n })();\n\n const elComputed = el ? getComputedStyle(el) : null;\n const computed = elComputed ? {\n display: elComputed.display,\n gridTemplateColumns: elComputed.gridTemplateColumns,\n gridTemplateRows: elComputed.gridTemplateRows,\n gap: elComputed.gap,\n justifyItems: (elComputed as any).justifyItems,\n alignItems: (elComputed as any).alignItems,\n color: elComputed.color,\n backgroundColor: elComputed.backgroundColor,\n padding: `${elComputed.paddingTop} ${elComputed.paddingRight} ${elComputed.paddingBottom} ${elComputed.paddingLeft}`,\n margin: `${elComputed.marginTop} ${elComputed.marginRight} ${elComputed.marginBottom} ${elComputed.marginLeft}`,\n fontFamily: elComputed.fontFamily,\n fontSize: elComputed.fontSize,\n } : {};\n\n const rect = el ? el.getBoundingClientRect() : null;\n const neighborInfo = (() => {\n try {\n const nodes = Array.from((container || document).querySelectorAll('[data-element]')) as HTMLElement[];\n const names = nodes.map(n => n.getAttribute('data-element')) as (string|null)[];\n const index = names.findIndex(n => n === elName);\n const prev = index > 0 ? names[index-1] : null;\n const next = index >= 0 && index < names.length - 1 ? names[index+1] : null;\n return { index, total: names.length, previous: prev, next };\n } catch { return {}; }\n })();\n\n const containerComputed = container ? getComputedStyle(container) : null;\n const containerInfo = containerComputed ? {\n display: containerComputed.display,\n gridTemplateColumns: containerComputed.gridTemplateColumns,\n gridAutoFlow: containerComputed.gridAutoFlow,\n gap: containerComputed.gap,\n } : {};\n\n // HTML snapshot (truncate to keep payload small)\n const rootHtml = el ? el.outerHTML.slice(0, 6000) : '';\n\n const tsxCtx = ELEMENT_TSX_CONTEXT[elName] || {};\n return {\n page_path: typeof window !== 'undefined' ? window.location.pathname : '',\n element: {\n name: elName,\n variant: el?.getAttribute('data-variant') || null,\n classList: el ? Array.from(el.classList) : [],\n attributes: el ? Array.from(el.attributes).map(a => ({ name: a.name, value: a.value })) : [],\n rect: rect ? { width: rect.width, height: rect.height } : undefined,\n computed,\n root_html_snapshot: rootHtml,\n },\n container: containerInfo,\n neighbors: neighborInfo,\n css_variables: cssVars,\n tsx_snippet: tsxCtx.tsx || undefined,\n known_selectors: tsxCtx.selectors || undefined,\n design_notes: tsxCtx.notes || undefined,\n };\n } catch {\n return {};\n }\n };\n\n const handleCSSChange = (value: string) => {\n setCSS(value);\n const valid = validateCSS(value);\n setIsValid(valid);\n \n if (valid && preview) {\n applyCSS(value);\n }\n };\n\n const applyCSS = (cssString: string) => {\n // Remove existing custom style\n const existingStyle = document.getElementById(`custom-css-${elementName}`);\n if (existingStyle) {\n existingStyle.remove();\n }\n\n if (cssString.trim()) {\n // Create new style element\n const style = document.createElement('style');\n style.id = `custom-css-${elementName}`;\n // If the CSS contains braces or at-rules, assume full CSS block already scoped\n const hasBlocks = /\\{[^}]*\\}|@media|@keyframes/.test(cssString);\n if (hasBlocks) {\n style.textContent = cssString;\n } else {\n // Treat as declarations, scope under element\n // Ensure each declaration is marked important to override theme CSS\n const importantDecls = cssString\n .split(';')\n .map(s => s.trim())\n .filter(Boolean)\n .map(s => {\n // Avoid double !important\n return /!important\\s*$/.test(s) ? s : `${s} !important`;\n })\n .join(';\\n ');\n\n style.textContent = `\n [data-element=\"${elementName}\"] {\n ${importantDecls};\n }\n `;\n }\n document.head.appendChild(style);\n }\n };\n\n const handleSave = () => {\n if (!isValid) {\n toast({\n title: 'Invalid CSS',\n description: 'Please fix CSS errors before saving',\n status: 'error',\n duration: 3000,\n });\n return;\n }\n\n applyCSS(css);\n onCSSChange(css);\n \n toast({\n title: 'CSS Applied',\n description: 'Custom styles have been applied',\n status: 'success',\n duration: 2000,\n });\n };\n\n const handleReset = () => {\n setCSS('');\n const existingStyle = document.getElementById(`custom-css-${elementName}`);\n if (existingStyle) {\n existingStyle.remove();\n }\n onCSSChange('');\n };\n\n const cssExamples = [\n {\n label: 'Background Gradient',\n code: `background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\ncolor: white;`,\n },\n {\n label: 'Shadow & Hover',\n code: `box-shadow: 0 10px 25px rgba(0,0,0,0.1);\ntransition: transform 0.3s;\n\n&:hover {\n transform: translateY(-5px);\n}`,\n },\n {\n label: 'Border Radius',\n code: `border-radius: 20px;\noverflow: hidden;`,\n },\n {\n label: 'Animation',\n code: `animation: fadeIn 1s ease-in;\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}`,\n },\n ];\n\n return (\n <Box width=\"100%\" height=\"100%\">\n <Tabs size=\"sm\" variant=\"enclosed\" colorScheme=\"purple\">\n <TabList>\n <Tab>\n <HStack spacing={2}>\n <FiCode />\n <Text>CSS Editor</Text>\n </HStack>\n </Tab>\n <Tab>\n <HStack spacing={2}>\n <FiEye />\n <Text>Examples</Text>\n </HStack>\n </Tab>\n <Tab>\n <HStack spacing={2}>\n <FiZap />\n <Text>AI (beta)</Text>\n </HStack>\n </Tab>\n </TabList>\n\n <TabPanels>\n {/* Editor Tab */}\n <TabPanel p={0}>\n <VStack align=\"stretch\" spacing={3} p={4}>\n <HStack justify=\"space-between\">\n <Text fontSize=\"xs\" fontWeight=\"bold\" color=\"gray.500\" textTransform=\"uppercase\">\n Custom CSS for {elementName}\n </Text>\n <HStack spacing={2}>\n <Button\n size=\"xs\"\n leftIcon={<FiEye />}\n variant={preview ? 'solid' : 'outline'}\n colorScheme={preview ? 'blue' : 'gray'}\n onClick={() => {\n setPreview(!preview);\n if (!preview && isValid) {\n applyCSS(css);\n }\n }}\n >\n Preview\n </Button>\n <Button\n size=\"xs\"\n leftIcon={<FiRefreshCw />}\n variant=\"ghost\"\n onClick={handleReset}\n >\n Reset\n </Button>\n </HStack>\n </HStack>\n\n {!isValid && (\n <Alert status=\"error\" borderRadius=\"md\" fontSize=\"sm\">\n <AlertIcon />\n Invalid CSS syntax. Check for missing braces or semicolons.\n </Alert>\n )}\n\n <Textarea\n value={css}\n onChange={(e) => handleCSSChange(e.target.value)}\n placeholder={`/* Enter custom CSS properties */\nbackground: #f0f0f0;\npadding: 20px;\nborder-radius: 10px;`}\n fontFamily=\"monospace\"\n fontSize=\"sm\"\n minHeight=\"300px\"\n bg={useColorModeValue('gray.50', 'gray.900')}\n borderColor={isValid ? borderColor : 'red.300'}\n _focus={{\n borderColor: isValid ? 'purple.400' : 'red.400',\n boxShadow: isValid ? '0 0 0 1px var(--chakra-colors-purple-400)' : '0 0 0 1px var(--chakra-colors-red-400)',\n }}\n />\n\n <Divider />\n\n <Alert status=\"info\" borderRadius=\"md\" fontSize=\"xs\">\n <AlertIcon />\n <Box>\n <Text fontWeight=\"bold\">Pro tip:</Text>\n <Text>Use standard CSS properties. Avoid selectors - styles apply to the element automatically.</Text>\n </Box>\n </Alert>\n\n <Button\n leftIcon={<FiSave />}\n colorScheme=\"purple\"\n size=\"sm\"\n onClick={handleSave}\n isDisabled={!isValid}\n >\n Apply CSS\n </Button>\n </VStack>\n </TabPanel>\n\n {/* Examples Tab */}\n <TabPanel>\n <VStack align=\"stretch\" spacing={3} p={4}>\n <Text fontSize=\"xs\" fontWeight=\"bold\" color=\"gray.500\" textTransform=\"uppercase\">\n Quick CSS Examples\n </Text>\n \n {cssExamples.map((example, index) => (\n <Box\n key={index}\n p={3}\n borderRadius=\"md\"\n border=\"1px\"\n borderColor={borderColor}\n cursor=\"pointer\"\n transition=\"all 0.2s\"\n _hover={{\n borderColor: 'purple.400',\n transform: 'translateX(4px)',\n }}\n onClick={() => setCSS(example.code)}\n >\n <Text fontWeight=\"bold\" fontSize=\"sm\" mb={2}>\n {example.label}\n </Text>\n <Code\n fontSize=\"xs\"\n display=\"block\"\n whiteSpace=\"pre\"\n p={2}\n borderRadius=\"sm\"\n bg={useColorModeValue('gray.100', 'gray.900')}\n >\n {example.code}\n </Code>\n </Box>\n ))}\n </VStack>\n </TabPanel>\n\n {/* AI Tab */}\n <TabPanel>\n <VStack align=\"stretch\" spacing={3} p={4}>\n <Text fontSize=\"xs\" fontWeight=\"bold\" color=\"gray.500\" textTransform=\"uppercase\">\n Vygenerovat CSS pomocí AI\n </Text>\n\n <Textarea\n value={aiPrompt}\n onChange={(e) => setAIPrompt(e.target.value)}\n placeholder=\"Popište, jak má daný blok vypadat (česky). Např.: Tmavé pozadí, světlý text, zaoblené rohy, 2-sloupcový layout na desktopu, jeden sloupec na mobilu.\"\n fontSize=\"sm\"\n minHeight=\"120px\"\n bg={useColorModeValue('gray.50', 'gray.900')}\n borderColor={borderColor}\n />\n\n <HStack spacing={2} flexWrap=\"wrap\">\n {[\n 'Tmavé pozadí a světlý text',\n 'Skleněný efekt (glassmorphism)',\n 'Zaoblené rohy a měkký stín',\n 'Dvou-sloupcový grid, mobil 1 sloupec',\n 'Akcent klubových barev',\n ].map((t, idx) => (\n <Button key={idx} size=\"xs\" variant=\"outline\" onClick={() => setAIPrompt(p => `${p} ${t}.`)}>\n {t}\n </Button>\n ))}\n </HStack>\n\n <HStack>\n <Button\n leftIcon={aiLoading ? <Spinner size=\"xs\" /> : <FiZap />}\n colorScheme=\"purple\"\n size=\"sm\"\n isLoading={aiLoading}\n onClick={async () => {\n try {\n setAILoading(true);\n const payload: AIGenerateCSSReq = {\n prompt: aiPrompt,\n element_name: elementName,\n root_selector: `[data-element=\"${elementName}\"]`,\n current_css: css,\n current_styles: currentStyles || {},\n theme: (theme as any) || {},\n breakpoints: [640, 960, 1200],\n context: collectAIContext(elementName),\n };\n const res = await generateCSSAI(payload);\n const next = (res?.css || '').trim();\n if (!next) {\n toast({ title: 'AI nevrátila CSS', status: 'warning', duration: 2500 });\n return;\n }\n setCSS(next);\n setIsValid(true);\n setPreview(true);\n applyCSS(next);\n // Persist into parent editor state so it survives panel close\n onCSSChange(next);\n toast({ title: 'CSS vygenerováno', status: 'success', duration: 1500 });\n } catch (e: any) {\n toast({ title: 'Chyba při generování CSS', description: e?.message || 'Zkuste to znovu', status: 'error', duration: 3000 });\n } finally {\n setAILoading(false);\n }\n }}\n >\n Vygenerovat CSS\n </Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setAIPrompt('')}>Vymazat zadání</Button>\n </HStack>\n\n <Alert status=\"info\" borderRadius=\"md\" fontSize=\"xs\">\n <AlertIcon />\n AI výstup je automaticky scope-nutý pod `[data-element=\"název\"]`. Po vygenerování se CSS předvyplní do editoru a lze ho dál upravovat.\n </Alert>\n </VStack>\n </TabPanel>\n </TabPanels>\n </Tabs>\n </Box>\n );\n};\n\nexport default CustomCSSEditor;\n","import React from 'react';\nimport {\n Box,\n VStack,\n HStack,\n Text,\n Button,\n Link,\n Icon,\n Divider,\n useColorModeValue,\n Badge,\n} from '@chakra-ui/react';\nimport {\n FiExternalLink,\n FiSettings,\n FiUsers,\n FiFileText,\n FiVideo,\n FiImage,\n FiCalendar,\n FiTag,\n FiShoppingCart,\n FiMail,\n} from 'react-icons/fi';\n\ninterface AdminLink {\n label: string;\n url: string;\n icon: any;\n description?: string;\n badge?: string;\n}\n\ninterface ContextualAdminLinksProps {\n elementName: string;\n}\n\nconst ContextualAdminLinks: React.FC<ContextualAdminLinksProps> = ({ elementName }) => {\n const bgColor = useColorModeValue('blue.50', 'blue.900');\n const borderColor = useColorModeValue('blue.200', 'blue.700');\n\n const getLinksForElement = (element: string): AdminLink[] => {\n const links: Record<string, AdminLink[]> = {\n hero: [\n { label: 'Manage Articles', url: '/admin/articles', icon: FiFileText, description: 'Edit featured articles' },\n { label: 'Upload Images', url: '/admin/soubory', icon: FiImage, description: 'Manage hero images' },\n ],\n news: [\n { label: 'Manage Articles', url: '/admin/articles', icon: FiFileText, description: 'Create and edit news' },\n { label: 'Categories', url: '/admin/categories', icon: FiTag, description: 'Organize article categories' },\n { label: 'Article Settings', url: '/admin/settings/articles', icon: FiSettings, description: 'Configure display options' },\n ],\n matches: [\n { label: 'Manage Matches', url: '/admin/matches', icon: FiCalendar, description: 'Schedule and edit matches' },\n { label: 'Match Settings', url: '/admin/settings/matches', icon: FiSettings, description: 'Configure match display' },\n ],\n table: [\n { label: 'Update Table', url: '/admin/table', icon: FiSettings, description: 'Refresh league standings' },\n { label: 'Team Settings', url: '/admin/settings/team', icon: FiSettings },\n ],\n team: [\n { label: 'Manage Players', url: '/admin/team/players', icon: FiUsers, description: 'Add and edit players' },\n { label: 'Team Settings', url: '/admin/settings/team', icon: FiSettings, description: 'Configure team display' },\n ],\n videos: [\n { label: 'Manage Videos', url: '/admin/videos', icon: FiVideo, description: 'Add YouTube videos' },\n { label: 'Video Settings', url: '/admin/settings/videos', icon: FiSettings, description: 'Configure video player' },\n ],\n gallery: [\n { label: 'Gallery Settings', url: '/admin/settings/gallery', icon: FiImage, description: 'Set gallery URL' },\n ],\n merch: [\n { label: 'Fanshop Settings', url: '/admin/settings/fanshop', icon: FiShoppingCart, description: 'Configure merchandise' },\n ],\n newsletter: [\n { label: 'Newsletter Settings', url: '/admin/settings/newsletter', icon: FiMail, description: 'Email configuration' },\n { label: 'Subscribers', url: '/admin/newsletter/subscribers', icon: FiUsers, description: 'View subscribers' },\n ],\n sponsors: [\n { label: 'Manage Sponsors', url: '/admin/sponsors', icon: FiImage, description: 'Add and edit sponsors' },\n ],\n };\n\n return links[element] || [\n { label: 'Administrace', url: '/admin', icon: FiSettings, description: 'Přejít do administrace' },\n ];\n };\n\n const links = getLinksForElement(elementName);\n\n return (\n <Box>\n <VStack align=\"stretch\" spacing={3}>\n <HStack>\n <Icon as={FiExternalLink} color=\"blue.500\" />\n <Text fontSize=\"xs\" fontWeight=\"bold\" color=\"gray.500\" textTransform=\"uppercase\">\n Rychlé odkazy administrace\n </Text>\n </HStack>\n\n <Box\n p={3}\n borderRadius=\"md\"\n bg={bgColor}\n border=\"1px\"\n borderColor={borderColor}\n >\n <VStack align=\"stretch\" spacing={2} divider={<Divider />}>\n {links.map((link, index) => (\n <Link\n key={index}\n href={link.url}\n _hover={{ textDecoration: 'none' }}\n isExternal\n >\n <HStack\n p={2}\n borderRadius=\"md\"\n transition=\"all 0.2s\"\n _hover={{\n bg: useColorModeValue('white', 'gray.800'),\n transform: 'translateX(4px)',\n }}\n justify=\"space-between\"\n >\n <HStack spacing={3} flex={1}>\n <Icon as={link.icon} boxSize={4} color=\"blue.500\" />\n <VStack align=\"start\" spacing={0} flex={1}>\n <Text fontSize=\"sm\" fontWeight=\"medium\">\n {link.label}\n </Text>\n {link.description && (\n <Text fontSize=\"xs\" color=\"gray.500\">\n {link.description}\n </Text>\n )}\n </VStack>\n </HStack>\n \n {link.badge && (\n <Badge colorScheme=\"green\" fontSize=\"xs\">\n {link.badge}\n </Badge>\n )}\n \n <Icon as={FiExternalLink} boxSize={3} color=\"gray.400\" />\n </HStack>\n </Link>\n ))}\n </VStack>\n </Box>\n\n <Text fontSize=\"xs\" color=\"gray.500\" textAlign=\"center\">\n 💡 Tyto odkazy vám pomohou spravovat obsah této sekce\n </Text>\n </VStack>\n </Box>\n );\n};\n\nexport default ContextualAdminLinks;\n","import React, { useState, useEffect, useMemo } from 'react';\nimport {\n Box,\n VStack,\n HStack,\n Text,\n Tabs,\n TabList,\n TabPanels,\n Tab,\n TabPanel,\n FormControl,\n FormLabel,\n Input,\n Slider,\n SliderTrack,\n SliderFilledTrack,\n SliderThumb,\n Select,\n Switch,\n NumberInput,\n NumberInputField,\n NumberInputStepper,\n NumberIncrementStepper,\n NumberDecrementStepper,\n IconButton,\n Divider,\n Button,\n useColorModeValue,\n} from '@chakra-ui/react';\nimport { FiType, FiLayout, FiBox, FiDroplet, FiGrid, FiSmartphone, FiBarChart2, FiSidebar, FiCode, FiColumns, FiExternalLink } from 'react-icons/fi';\nimport { FaRegNewspaper, FaRegSquare, FaColumns } from 'react-icons/fa';\nimport CustomCSSEditor from './CustomCSSEditor';\nimport ColumnLayoutManager from './ColumnLayoutManager';\nimport ContextualAdminLinks from './ContextualAdminLinks';\nimport { useClubTheme } from '../../contexts/ClubThemeContext';\nimport { FONT_PAIRINGS, loadGoogleFont } from '../../config/fonts';\nimport ColorPicker from '../common/ColorPicker';\n\ninterface VisualStylePanelProps {\n elementName: string;\n onStyleChange: (styles: Record<string, any>) => void;\n currentStyles?: Record<string, any>;\n}\n\nconst VisualStylePanel: React.FC<VisualStylePanelProps> = ({\n elementName,\n onStyleChange,\n currentStyles = {},\n}) => {\n const bgColor = useColorModeValue('white', 'gray.800');\n const borderColor = useColorModeValue('gray.200', 'gray.600');\n const clubTheme = useClubTheme();\n const primaryColor = clubTheme.primary || '#0b5cff';\n\n const [styles, setStyles] = useState({\n // Typography\n fontFamily: currentStyles.fontFamily || 'Inter',\n fontSize: currentStyles.fontSize || 16,\n fontWeight: currentStyles.fontWeight || 400,\n lineHeight: currentStyles.lineHeight || 1.5,\n letterSpacing: currentStyles.letterSpacing || 0,\n textTransform: currentStyles.textTransform || 'none',\n \n // Colors\n color: currentStyles.color || '#000000',\n backgroundColor: currentStyles.backgroundColor || '#ffffff',\n \n // Spacing\n paddingTop: currentStyles.paddingTop || 0,\n paddingRight: currentStyles.paddingRight || 0,\n paddingBottom: currentStyles.paddingBottom || 0,\n paddingLeft: currentStyles.paddingLeft || 0,\n marginTop: currentStyles.marginTop || 0,\n marginRight: currentStyles.marginRight || 0,\n marginBottom: currentStyles.marginBottom || 0,\n marginLeft: currentStyles.marginLeft || 0,\n \n // Layout\n width: currentStyles.width || 'auto',\n height: currentStyles.height || 'auto',\n display: currentStyles.display || 'block',\n \n // Grid Layout\n gridTemplateColumns: currentStyles.gridTemplateColumns || 'repeat(3, 1fr)',\n gridTemplateRows: currentStyles.gridTemplateRows || 'auto',\n gridColumnGap: currentStyles.gridColumnGap || 16,\n gridRowGap: currentStyles.gridRowGap || 16,\n gridAutoFlow: currentStyles.gridAutoFlow || 'row',\n alignItems: currentStyles.alignItems || 'stretch',\n justifyItems: currentStyles.justifyItems || 'stretch',\n \n // Custom CSS\n customCSS: currentStyles.customCSS || '',\n \n ...currentStyles,\n });\n\n // Sync local styles state when switching element or when parent provides updated styles\n useEffect(() => {\n setStyles({\n // Typography\n fontFamily: currentStyles.fontFamily || 'Inter',\n fontSize: currentStyles.fontSize || 16,\n fontWeight: currentStyles.fontWeight || 400,\n lineHeight: currentStyles.lineHeight || 1.5,\n letterSpacing: currentStyles.letterSpacing || 0,\n textTransform: currentStyles.textTransform || 'none',\n\n // Colors\n color: currentStyles.color || '#000000',\n backgroundColor: currentStyles.backgroundColor || '#ffffff',\n\n // Spacing\n paddingTop: currentStyles.paddingTop || 0,\n paddingRight: currentStyles.paddingRight || 0,\n paddingBottom: currentStyles.paddingBottom || 0,\n paddingLeft: currentStyles.paddingLeft || 0,\n marginTop: currentStyles.marginTop || 0,\n marginRight: currentStyles.marginRight || 0,\n marginBottom: currentStyles.marginBottom || 0,\n marginLeft: currentStyles.marginLeft || 0,\n\n // Layout\n width: currentStyles.width || 'auto',\n height: currentStyles.height || 'auto',\n display: currentStyles.display || 'block',\n\n // Grid Layout\n gridTemplateColumns: currentStyles.gridTemplateColumns || 'repeat(3, 1fr)',\n gridTemplateRows: currentStyles.gridTemplateRows || 'auto',\n gridColumnGap: currentStyles.gridColumnGap || 16,\n gridRowGap: currentStyles.gridRowGap || 16,\n gridAutoFlow: currentStyles.gridAutoFlow || 'row',\n alignItems: currentStyles.alignItems || 'stretch',\n justifyItems: currentStyles.justifyItems || 'stretch',\n\n // Custom CSS\n customCSS: currentStyles.customCSS || '',\n\n ...currentStyles,\n });\n }, [elementName, currentStyles]);\n\n const updateStyle = (key: string, value: any) => {\n const newStyles = { ...styles, [key]: value };\n setStyles(newStyles);\n onStyleChange(newStyles);\n };\n\n // Font pairing and curated font options\n const [pairingId, setPairingId] = useState<string>(FONT_PAIRINGS[0]?.id || '');\n const selectedPairing = useMemo(() => FONT_PAIRINGS.find(p => p.id === pairingId) || FONT_PAIRINGS[0], [pairingId]);\n const curatedFonts = useMemo(() => {\n const map = new Map<string, { name: string; googleFontsUrl: string }>();\n FONT_PAIRINGS.forEach(p => {\n map.set(p.heading, { name: p.heading, googleFontsUrl: p.googleFontsUrl });\n map.set(p.body, { name: p.body, googleFontsUrl: p.googleFontsUrl });\n });\n return Array.from(map.values());\n }, []);\n\n return (\n <Box\n width=\"280px\"\n bg={bgColor}\n borderRight=\"1px\"\n borderColor={primaryColor}\n height=\"100vh\"\n overflowY=\"auto\"\n pt=\"60px\"\n >\n <Tabs size=\"sm\" colorScheme=\"blue\">\n <TabList px={2} flexWrap=\"wrap\">\n <Tab><FiType /> <Text ml={1}>Obsah</Text></Tab>\n <Tab><FiLayout /> <Text ml={1}>Styl</Text></Tab>\n <Tab><FiColumns /> <Text ml={1}>Rozvržení</Text></Tab>\n <Tab><FiCode /> <Text ml={1}>CSS</Text></Tab>\n <Tab><FiExternalLink /> <Text ml={1}>Admin</Text></Tab>\n </TabList>\n\n <TabPanels>\n {/* Záložka: Obsah */}\n <TabPanel>\n <VStack align=\"stretch\" spacing={4}>\n <Text fontWeight=\"bold\" fontSize=\"sm\" textTransform=\"uppercase\" color=\"gray.500\">\n Typografie\n </Text>\n\n {/* Font pairing from Setup (curated) */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Párování fontů (Setup)</FormLabel>\n <HStack>\n <Select\n size=\"sm\"\n value={pairingId}\n onChange={(e) => {\n const id = e.target.value;\n setPairingId(id);\n const p = FONT_PAIRINGS.find(pp => pp.id === id);\n if (p) {\n loadGoogleFont(p.googleFontsUrl);\n }\n }}\n >\n {FONT_PAIRINGS.map((p) => (\n <option key={p.id} value={p.id}>{p.name}</option>\n ))}\n </Select>\n </HStack>\n <HStack spacing={2} mt={2}>\n <Button size=\"xs\" variant=\"outline\" onClick={() => { if (selectedPairing) { loadGoogleFont(selectedPairing.googleFontsUrl); updateStyle('fontFamily', selectedPairing.cssHeading); } }}>Použít nadpisový</Button>\n <Button size=\"xs\" variant=\"outline\" onClick={() => { if (selectedPairing) { loadGoogleFont(selectedPairing.googleFontsUrl); updateStyle('fontFamily', selectedPairing.cssBody); } }}>Použít textový</Button>\n </HStack>\n </FormControl>\n\n {/* Curated font list (unique from pairing set) */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Dostupné fonty (Setup)</FormLabel>\n <Select\n size=\"sm\"\n value={styles.fontFamily}\n onChange={(e) => {\n const val = e.target.value;\n updateStyle('fontFamily', val);\n const found = FONT_PAIRINGS.find(p => p.cssHeading === val || p.cssBody === val);\n if (found) loadGoogleFont(found.googleFontsUrl);\n }}\n >\n {curatedFonts.map(f => (\n <option key={f.name} value={f.name}>{f.name}</option>\n ))}\n </Select>\n </FormControl>\n\n {/* Rodina písma */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Písmo</FormLabel>\n <Select\n size=\"sm\"\n value={styles.fontFamily}\n onChange={(e) => updateStyle('fontFamily', e.target.value)}\n >\n <option value=\"Inter\">Inter</option>\n <option value=\"Roboto\">Roboto</option>\n <option value=\"Open Sans\">Open Sans</option>\n <option value=\"Lato\">Lato</option>\n <option value=\"Montserrat\">Montserrat</option>\n <option value=\"Poppins\">Poppins</option>\n <option value=\"Georgia\">Georgia</option>\n <option value=\"Times New Roman\">Times New Roman</option>\n </Select>\n </FormControl>\n\n {/* Velikost písma */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Velikost (px)</FormLabel>\n <HStack>\n <NumberInput\n size=\"sm\"\n value={styles.fontSize}\n min={8}\n max={128}\n onChange={(_, val) => updateStyle('fontSize', val)}\n flex={1}\n >\n <NumberInputField />\n <NumberInputStepper>\n <NumberIncrementStepper />\n <NumberDecrementStepper />\n </NumberInputStepper>\n </NumberInput>\n </HStack>\n </FormControl>\n\n {/* Tloušťka písma */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Tloušťka</FormLabel>\n <HStack spacing={2}>\n <Slider\n value={styles.fontWeight}\n min={100}\n max={900}\n step={100}\n onChange={(val) => updateStyle('fontWeight', val)}\n flex={1}\n >\n <SliderTrack>\n <SliderFilledTrack bg={primaryColor} />\n </SliderTrack>\n <SliderThumb />\n </Slider>\n <Text fontSize=\"xs\" minW=\"40px\">{styles.fontWeight}</Text>\n </HStack>\n </FormControl>\n\n {/* Řádkování */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Řádkování</FormLabel>\n <HStack spacing={2}>\n <Slider\n value={styles.lineHeight}\n min={0.5}\n max={3}\n step={0.1}\n onChange={(val) => updateStyle('lineHeight', val)}\n flex={1}\n >\n <SliderTrack>\n <SliderFilledTrack bg={primaryColor} />\n </SliderTrack>\n <SliderThumb />\n </Slider>\n <Text fontSize=\"xs\" minW=\"40px\">{styles.lineHeight.toFixed(1)}</Text>\n </HStack>\n </FormControl>\n\n {/* Mezery mezi písmeny */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Mezera mezi písmeny (px)</FormLabel>\n <HStack spacing={2}>\n <Slider\n value={styles.letterSpacing}\n min={-5}\n max={10}\n step={0.1}\n onChange={(val) => updateStyle('letterSpacing', val)}\n flex={1}\n >\n <SliderTrack>\n <SliderFilledTrack bg={primaryColor} />\n </SliderTrack>\n <SliderThumb />\n </Slider>\n <Text fontSize=\"xs\" minW=\"40px\">{styles.letterSpacing.toFixed(1)}</Text>\n </HStack>\n </FormControl>\n\n {/* Transformace textu */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Transformace</FormLabel>\n <Select\n size=\"sm\"\n value={styles.textTransform}\n onChange={(e) => updateStyle('textTransform', e.target.value)}\n >\n <option value=\"none\">Žádné</option>\n <option value=\"uppercase\">VELKÁ PÍSMENA</option>\n <option value=\"lowercase\">malá písmena</option>\n <option value=\"capitalize\">První písmena velká</option>\n </Select>\n </FormControl>\n </VStack>\n </TabPanel>\n\n {/* Záložka: Styl */}\n <TabPanel>\n <VStack align=\"stretch\" spacing={4}>\n <Text fontWeight=\"bold\" fontSize=\"sm\" textTransform=\"uppercase\" color=\"gray.500\">\n Barvy\n </Text>\n\n {/* Barva textu */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Barva textu</FormLabel>\n <ColorPicker\n value={styles.color}\n onChange={(hex) => updateStyle('color', hex)}\n recentStorageKey={`editor-text-${elementName}`}\n />\n </FormControl>\n\n {/* Barva pozadí */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Barva pozadí</FormLabel>\n <ColorPicker\n value={styles.backgroundColor}\n onChange={(hex) => updateStyle('backgroundColor', hex)}\n recentStorageKey={`editor-bg-${elementName}`}\n />\n </FormControl>\n\n <Divider my={2} />\n\n <Text fontWeight=\"bold\" fontSize=\"sm\" textTransform=\"uppercase\" color=\"gray.500\">\n Odsazení a okraje\n </Text>\n\n {/* Vnitřní odsazení (padding) */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Vnitřní odsazení (px)</FormLabel>\n <VStack spacing={2}>\n <HStack width=\"100%\">\n <Text fontSize=\"xs\" minW=\"20px\">N</Text>\n <NumberInput\n size=\"xs\"\n value={styles.paddingTop}\n min={0}\n onChange={(_, val) => updateStyle('paddingTop', val)}\n flex={1}\n >\n <NumberInputField />\n </NumberInput>\n </HStack>\n <HStack width=\"100%\">\n <Text fontSize=\"xs\" minW=\"20px\">P</Text>\n <NumberInput\n size=\"xs\"\n value={styles.paddingRight}\n min={0}\n onChange={(_, val) => updateStyle('paddingRight', val)}\n flex={1}\n >\n <NumberInputField />\n </NumberInput>\n </HStack>\n <HStack width=\"100%\">\n <Text fontSize=\"xs\" minW=\"20px\">D</Text>\n <NumberInput\n size=\"xs\"\n value={styles.paddingBottom}\n min={0}\n onChange={(_, val) => updateStyle('paddingBottom', val)}\n flex={1}\n >\n <NumberInputField />\n </NumberInput>\n </HStack>\n <HStack width=\"100%\">\n <Text fontSize=\"xs\" minW=\"20px\">L</Text>\n <NumberInput\n size=\"xs\"\n value={styles.paddingLeft}\n min={0}\n onChange={(_, val) => updateStyle('paddingLeft', val)}\n flex={1}\n >\n <NumberInputField />\n </NumberInput>\n </HStack>\n </VStack>\n </FormControl>\n\n {/* Vnější okraj (margin) */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Vnější okraj (px)</FormLabel>\n <VStack spacing={2}>\n <HStack width=\"100%\">\n <Text fontSize=\"xs\" minW=\"20px\">N</Text>\n <NumberInput\n size=\"xs\"\n value={styles.marginTop}\n onChange={(_, val) => updateStyle('marginTop', val)}\n flex={1}\n >\n <NumberInputField />\n </NumberInput>\n </HStack>\n <HStack width=\"100%\">\n <Text fontSize=\"xs\" minW=\"20px\">P</Text>\n <NumberInput\n size=\"xs\"\n value={styles.marginRight}\n onChange={(_, val) => updateStyle('marginRight', val)}\n flex={1}\n >\n <NumberInputField />\n </NumberInput>\n </HStack>\n <HStack width=\"100%\">\n <Text fontSize=\"xs\" minW=\"20px\">D</Text>\n <NumberInput\n size=\"xs\"\n value={styles.marginBottom}\n onChange={(_, val) => updateStyle('marginBottom', val)}\n flex={1}\n >\n <NumberInputField />\n </NumberInput>\n </HStack>\n <HStack width=\"100%\">\n <Text fontSize=\"xs\" minW=\"20px\">L</Text>\n <NumberInput\n size=\"xs\"\n value={styles.marginLeft}\n onChange={(_, val) => updateStyle('marginLeft', val)}\n flex={1}\n >\n <NumberInputField />\n </NumberInput>\n </HStack>\n </VStack>\n </FormControl>\n </VStack>\n </TabPanel>\n\n {/* Záložka: Rozvržení (mřížka) */}\n <TabPanel>\n <VStack align=\"stretch\" spacing={4}>\n <Text fontWeight=\"bold\" fontSize=\"sm\" textTransform=\"uppercase\" color=\"gray.500\">\n Mřížkové rozložení\n </Text>\n\n {/* Povolit mřížkové rozložení */}\n <FormControl display=\"flex\" alignItems=\"center\">\n <FormLabel fontSize=\"xs\" mb={0} flex={1}>Povolit mřížkové rozložení</FormLabel>\n <Switch\n size=\"sm\"\n isChecked={styles.display === 'grid'}\n onChange={(e) => updateStyle('display', e.target.checked ? 'grid' : 'block')}\n sx={{\n 'span[data-checked]': {\n bg: primaryColor,\n borderColor: primaryColor,\n }\n }}\n />\n </FormControl>\n\n {styles.display === 'grid' && (\n <>\n <Divider />\n\n {/* Rychlé šablony */}\n <FormControl>\n <FormLabel fontSize=\"xs\" fontWeight=\"bold\">Rychlé šablony</FormLabel>\n <VStack spacing={2}>\n <Button\n size=\"xs\"\n width=\"100%\"\n variant=\"outline\"\n onClick={() => updateStyle('gridTemplateColumns', '1fr')}\n justifyContent=\"flex-start\"\n >\n <HStack spacing={2}>\n <FiSmartphone />\n <Text>Jeden sloupec</Text>\n </HStack>\n </Button>\n <Button\n size=\"xs\"\n width=\"100%\"\n variant=\"outline\"\n onClick={() => updateStyle('gridTemplateColumns', '1fr 1fr')}\n justifyContent=\"flex-start\"\n >\n <HStack spacing={2}>\n <FaColumns />\n <Text>Dva stejné (50 % / 50 %)</Text>\n </HStack>\n </Button>\n <Button\n size=\"xs\"\n width=\"100%\"\n variant=\"outline\"\n onClick={() => updateStyle('gridTemplateColumns', '2fr 1fr')}\n justifyContent=\"flex-start\"\n >\n <HStack spacing={2}>\n <FiBarChart2 />\n <Text>Vlevo větší (66 % / 33 %)</Text>\n </HStack>\n </Button>\n <Button\n size=\"xs\"\n width=\"100%\"\n variant=\"outline\"\n onClick={() => updateStyle('gridTemplateColumns', '1fr 2fr')}\n justifyContent=\"flex-start\"\n >\n <HStack spacing={2}>\n <FiBarChart2 style={{ transform: 'scaleX(-1)' }} />\n <Text>Vpravo větší (33 % / 66 %)</Text>\n </HStack>\n </Button>\n <Button\n size=\"xs\"\n width=\"100%\"\n variant=\"outline\"\n onClick={() => updateStyle('gridTemplateColumns', '1fr 1fr 1fr')}\n justifyContent=\"flex-start\"\n >\n <HStack spacing={2}>\n <FiGrid />\n <Text>Tři stejné (33 % / 33 % / 33 %)</Text>\n </HStack>\n </Button>\n <Button\n size=\"xs\"\n width=\"100%\"\n variant=\"outline\"\n onClick={() => updateStyle('gridTemplateColumns', '2fr 1fr 1fr')}\n justifyContent=\"flex-start\"\n >\n <HStack spacing={2}>\n <FaRegNewspaper />\n <Text>Zvýrazněný + dva (50 % / 25 % / 25 %)</Text>\n </HStack>\n </Button>\n <Button\n size=\"xs\"\n width=\"100%\"\n variant=\"outline\"\n onClick={() => updateStyle('gridTemplateColumns', 'repeat(4, 1fr)')}\n justifyContent=\"flex-start\"\n >\n <HStack spacing={2}>\n <FaRegSquare />\n <Text>Čtyři stejné (25 % každá)</Text>\n </HStack>\n </Button>\n <Button\n size=\"xs\"\n width=\"100%\"\n variant=\"outline\"\n onClick={() => updateStyle('gridTemplateColumns', '3fr 1fr')}\n justifyContent=\"flex-start\"\n >\n <HStack spacing={2}>\n <FiSidebar />\n <Text>Hlavní + postranní (75 % / 25 %)</Text>\n </HStack>\n </Button>\n </VStack>\n </FormControl>\n\n <Divider />\n\n {/* Vlastní sloupce */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Sloupce mřížky</FormLabel>\n <Input\n size=\"sm\"\n value={styles.gridTemplateColumns}\n onChange={(e) => updateStyle('gridTemplateColumns', e.target.value)}\n placeholder=\"např. 1fr 2fr nebo 300px 1fr\"\n fontFamily=\"monospace\"\n fontSize=\"xs\"\n />\n <Text fontSize=\"10px\" color=\"gray.500\" mt={1}>\n Příklady: 1fr 1fr | 2fr 1fr | 200px 1fr | repeat(3, 1fr)\n </Text>\n </FormControl>\n\n {/* Řádky mřížky */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Řádky mřížky</FormLabel>\n <Input\n size=\"sm\"\n value={styles.gridTemplateRows}\n onChange={(e) => updateStyle('gridTemplateRows', e.target.value)}\n placeholder=\"auto nebo 200px 1fr\"\n fontFamily=\"monospace\"\n fontSize=\"xs\"\n />\n </FormControl>\n\n {/* Mezera mezi sloupci */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Mezera mezi sloupci (px)</FormLabel>\n <HStack spacing={2}>\n <Slider\n value={styles.gridColumnGap}\n min={0}\n max={100}\n step={4}\n onChange={(val) => updateStyle('gridColumnGap', val)}\n flex={1}\n >\n <SliderTrack>\n <SliderFilledTrack bg=\"purple.500\" />\n </SliderTrack>\n <SliderThumb />\n </Slider>\n <Text fontSize=\"xs\" minW=\"40px\">{styles.gridColumnGap}px</Text>\n </HStack>\n </FormControl>\n\n {/* Mezera mezi řádky */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Mezera mezi řádky (px)</FormLabel>\n <HStack spacing={2}>\n <Slider\n value={styles.gridRowGap}\n min={0}\n max={100}\n step={4}\n onChange={(val) => updateStyle('gridRowGap', val)}\n flex={1}\n >\n <SliderTrack>\n <SliderFilledTrack bg=\"purple.500\" />\n </SliderTrack>\n <SliderThumb />\n </Slider>\n <Text fontSize=\"xs\" minW=\"40px\">{styles.gridRowGap}px</Text>\n </HStack>\n </FormControl>\n\n <Divider />\n\n {/* Automatické rozmístění */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Automatické rozmístění</FormLabel>\n <Select\n size=\"sm\"\n value={styles.gridAutoFlow}\n onChange={(e) => updateStyle('gridAutoFlow', e.target.value)}\n >\n <option value=\"row\">Řádek (vodorovně)</option>\n <option value=\"column\">Sloupec (svisle)</option>\n <option value=\"row dense\">Řádek (zahuštěný)</option>\n <option value=\"column dense\">Sloupec (zahuštěný)</option>\n </Select>\n </FormControl>\n\n {/* Zarovnání (vertikálně) */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Zarovnání prvků (vertikálně)</FormLabel>\n <Select\n size=\"sm\"\n value={styles.alignItems}\n onChange={(e) => updateStyle('alignItems', e.target.value)}\n >\n <option value=\"stretch\">Roztáhnout</option>\n <option value=\"start\">Začátek</option>\n <option value=\"center\">Střed</option>\n <option value=\"end\">Konec</option>\n <option value=\"baseline\">Základní řádek</option>\n </Select>\n </FormControl>\n\n {/* Zarovnání (horizontálně) */}\n <FormControl>\n <FormLabel fontSize=\"xs\">Zarovnání prvků (horizontálně)</FormLabel>\n <Select\n size=\"sm\"\n value={styles.justifyItems}\n onChange={(e) => updateStyle('justifyItems', e.target.value)}\n >\n <option value=\"stretch\">Roztáhnout</option>\n <option value=\"start\">Začátek</option>\n <option value=\"center\">Střed</option>\n <option value=\"end\">Konec</option>\n </Select>\n </FormControl>\n </>\n )}\n </VStack>\n </TabPanel>\n\n {/* Záložka: Vlastní CSS */}\n <TabPanel p={0}>\n <CustomCSSEditor\n elementName={elementName}\n onCSSChange={(css) => updateStyle('customCSS', css)}\n currentCSS={styles.customCSS || ''}\n currentStyles={styles}\n theme={{ primary: clubTheme.primary, secondary: clubTheme.secondary, accent: (clubTheme as any).accent }}\n />\n </TabPanel>\n\n {/* Záložka: Admin odkazy */}\n <TabPanel>\n <ContextualAdminLinks elementName={elementName} />\n </TabPanel>\n </TabPanels>\n </Tabs>\n </Box>\n );\n};\n\nexport default VisualStylePanel;\n","// Default element configuration for homepage\n// This provides the initial intended order and elements\n\nimport { PageElementConfig } from '../services/pageElements';\n\n// Elements that are actually implemented on HomePage\n// Only these should be available in the editor\nexport const HOMEPAGE_IMPLEMENTED_ELEMENTS = [\n 'style-pack', // Global style pack selector\n 'container', // Hlavní kontejner stránky (šířka rozložení)\n 'header', // Site navigation/header\n 'hero-topbar', // Club bar above hero\n 'hero', // Hero section with news cards (grid/scroller/swiper variants)\n 'news', // Featured news articles\n 'matches', // Upcoming/recent matches\n 'matches-slider', // Matches slider by competition\n 'table', // League standings table\n 'team', // Players scroller\n 'gallery', // Photo gallery albums from Zonerama\n 'videos', // Videos section\n 'merch', // Merchandise/fanshop\n 'newsletter',// Newsletter subscription\n 'poll', // Polls / voting widget\n 'sponsors', // Sponsors/partners\n 'banner', // Advertisement banners (various placements)\n];\n\nexport const DEFAULT_HOMEPAGE_ELEMENTS: PageElementConfig[] = [\n {\n page_type: 'homepage',\n element_name: 'style-pack',\n variant: 'default',\n visible: true,\n display_order: -1,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'container',\n variant: 'boxed',\n visible: true,\n display_order: -1,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'header',\n variant: 'unified',\n visible: true,\n display_order: 0,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'hero-topbar',\n variant: 'brand',\n visible: true,\n display_order: 1,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'hero',\n variant: 'grid',\n visible: true,\n display_order: 1,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'news',\n variant: 'grid_one',\n visible: true,\n display_order: 11,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'matches',\n variant: 'compact',\n visible: true,\n display_order: 2,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'matches-slider',\n variant: 'carousel',\n visible: true,\n display_order: 4,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'sponsors',\n variant: 'grid',\n visible: true,\n display_order: 9,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'gallery',\n variant: 'grid',\n visible: false,\n display_order: 5,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'videos',\n variant: 'carousel',\n visible: false,\n display_order: 7,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'team',\n variant: 'grid',\n visible: false,\n display_order: 6,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'merch',\n variant: 'grid',\n visible: true,\n display_order: 8,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'table',\n variant: 'split_news',\n visible: true,\n display_order: 3,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'banner',\n variant: 'top',\n visible: false,\n display_order: 10,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'newsletter',\n variant: 'default',\n visible: false,\n display_order: 4,\n settings: {},\n },\n {\n page_type: 'homepage',\n element_name: 'poll',\n variant: 'vertical',\n visible: false,\n display_order: 12,\n settings: {},\n },\n];\n","import React, { useState, useEffect, useCallback, useRef, useMemo } from 'react';\nimport {\n Box,\n Flex,\n IconButton,\n VStack,\n HStack,\n Text,\n Button,\n useToast,\n Tooltip,\n Badge,\n useColorModeValue,\n Portal,\n Image,\n SimpleGrid,\n Heading,\n Divider,\n Tabs,\n TabList,\n TabPanels,\n Tab,\n TabPanel,\n FormControl,\n FormLabel,\n Input,\n Slider,\n SliderTrack,\n SliderFilledTrack,\n SliderThumb,\n Select,\n Switch,\n NumberInput,\n NumberInputField,\n NumberInputStepper,\n NumberIncrementStepper,\n NumberDecrementStepper,\n Icon,\n} from '@chakra-ui/react';\nimport {\n FaPlus,\n FaCog,\n FaPaintBrush,\n FaLayerGroup,\n FaCube,\n FaRegEye,\n FaAngleLeft,\n FaAngleRight,\n FaTrash,\n FaGripVertical,\n FaChevronDown,\n FaChevronUp,\n FaMagic,\n FaRegSave,\n FaFileAlt,\n FaFileImport,\n FaExternalLinkAlt,\n FaBolt,\n FaFilter,\n FaBoxOpen,\n FaSearch,\n FaShapes,\n FaCopy,\n FaPaste,\n FaUndo,\n FaRedo,\n FaThLarge,\n FaNewspaper,\n FaPhotoVideo,\n FaGamepad,\n FaFutbol,\n FaSmile,\n FaExclamationCircle\n} from 'react-icons/fa';\nimport {\n FiMonitor,\n FiTablet,\n FiSmartphone,\n FiSave,\n FiX,\n FiEdit,\n FiMove,\n FiChevronUp,\n FiChevronDown,\n FiTrash2,\n FiEyeOff,\n FiSettings,\n FiLock,\n FiAlertTriangle\n} from 'react-icons/fi';\nimport {\n PageElementConfig,\n getPageElementConfigs,\n batchUpdatePageElementConfigs,\n ELEMENT_VARIANTS,\n ElementVariant,\n PREDEFINED_ELEMENTS,\n PredefinedElement,\n} from '../../services/pageElements';\nimport api from '../../services/api';\nimport { safeDOM } from '../../services/myuibrix';\nimport { useAuth } from '../../contexts/AuthContext';\nimport { useClubTheme } from '../../contexts/ClubThemeContext';\nimport VisualStylePanel from './VisualStylePanel';\nimport { DEFAULT_HOMEPAGE_ELEMENTS, HOMEPAGE_IMPLEMENTED_ELEMENTS } from '../../data/defaultElements';\n\nconst SUPPORTED_HOME_VARIANTS: Record<string, string[]> = {\n hero: ['grid', 'scroller', 'swiper', 'swiper_full'],\n news: ['grid_one', 'grid_two', 'grid', 'list', 'scroller'],\n matches: ['compact'],\n sponsors: ['grid', 'slider', 'scroller', 'logos3', 'pyramid'],\n gallery: ['grid'],\n videos: ['grid', 'carousel'],\n merch: ['grid'],\n table: ['split_news'],\n banner: ['top'],\n sidebar: ['right'],\n newsletter: ['default'],\n};\n\ninterface MyUIbrixStyleEditorProps {\n pageType: string;\n onConfigChange?: (configs: PageElementConfig[]) => void;\n}\n\ninterface ElementPosition {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nconst MyUIbrixStyleEditor: React.FC<MyUIbrixStyleEditorProps> = ({ pageType, onConfigChange }) => {\n const { user } = useAuth();\n const isAdmin = user?.role === 'admin';\n const clubTheme = useClubTheme();\n \n const [isEditing, setIsEditing] = useState(false);\n const [configs, setConfigs] = useState<PageElementConfig[]>([]);\n const [localChanges, setLocalChanges] = useState<Record<string, string>>({});\n const [hasChanges, setHasChanges] = useState(false);\n const [selectedElement, setSelectedElement] = useState<string | null>(null);\n const [hoveredElement, setHoveredElement] = useState<string | null>(null);\n const [elementPosition, setElementPosition] = useState<ElementPosition | null>(null);\n const [showElementPicker, setShowElementPicker] = useState(false);\n const [showLayersPanel, setShowLayersPanel] = useState(false);\n const [showElementsPanel, setShowElementsPanel] = useState(false);\n const [visibleElements, setVisibleElements] = useState<Set<string>>(new Set());\n const [elementOrder, setElementOrder] = useState<string[]>([]);\n const [draggedElement, setDraggedElement] = useState<string | null>(null);\n const [dragOverElement, setDragOverElement] = useState<string | null>(null);\n const [viewport, setViewport] = useState<'desktop' | 'tablet' | 'mobile'>('desktop');\n const [elementStyles, setElementStyles] = useState<Record<string, any>>({});\n const [showStylePanel, setShowStylePanel] = useState(false);\n const [stylePanelRight, setStylePanelRight] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedCategory, setSelectedCategory] = useState<string>('all');\n const [showHelpHint, setShowHelpHint] = useState(true);\n const [baseline, setBaseline] = useState<{ variants: Record<string, string>; visible: Set<string>; order: string[]; css: Record<string, string> }>({ variants: {}, visible: new Set<string>(), order: [], css: {} });\n const overlayRef = useRef<HTMLDivElement>(null);\n const isReorderingRef = useRef(false);\n const [allowCrossContainer, setAllowCrossContainer] = useState(false);\n const [pendingInsertIndex, setPendingInsertIndex] = useState<number | null>(null);\n const [containerGridCols, setContainerGridCols] = useState<number>(0);\n const elementOrderRef = useRef<string[]>([]);\n useEffect(() => { elementOrderRef.current = elementOrder; }, [elementOrder]);\n const applyVisualReorderRef = useRef<(order: string[]) => void>(() => {});\n \n // Draggable panel states\n const [panelPositions, setPanelPositions] = useState({\n stylePicker: { x: 0, y: 0, width: 360, height: 550 },\n layersPanel: { x: 0, y: 0, width: 320, height: 600 },\n visualStylePanel: { x: 0, y: 60, width: 320, height: 700 },\n elementPicker: { x: 0, y: 0, width: 600, height: 600 },\n elementsPanel: { x: 0, y: 72, width: 420, height: 700 }\n });\n const [draggingPanel, setDraggingPanel] = useState<string | null>(null);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n const [resizingPanel, setResizingPanel] = useState<string | null>(null);\n \n const toast = useToast();\n const bgColor = useColorModeValue('white', 'gray.800');\n const borderColor = useColorModeValue('gray.200', 'gray.600');\n const hoverBg = useColorModeValue('blue.50', 'blue.900');\n const primaryColor = clubTheme.primary || '#0b5cff';\n const secondaryColor = clubTheme.secondary || '#ffd200';\n const selectedBg = primaryColor;\n\n const getAvailableVariants = useCallback((elementName: string) => {\n const variants = ELEMENT_VARIANTS[elementName] || [];\n if (pageType === 'homepage') {\n const allowed = SUPPORTED_HOME_VARIANTS[elementName];\n if (allowed && allowed.length > 0) {\n return variants.filter(variant => allowed.includes(variant.value));\n }\n }\n return variants;\n }, [pageType]);\n\n const getDefaultVariant = useCallback((elementName: string) => {\n const element = PREDEFINED_ELEMENTS.find(e => e.name === elementName);\n const candidate = element?.defaultVariant;\n const available = getAvailableVariants(elementName);\n if (available.length === 0) {\n return candidate || 'default';\n }\n if (candidate && available.some(v => v.value === candidate)) {\n return candidate;\n }\n return available[0].value;\n }, [getAvailableVariants]);\n\n const normalizeVariant = useCallback((elementName: string, variant?: string) => {\n const available = getAvailableVariants(elementName);\n if (available.length === 0) {\n return variant || getDefaultVariant(elementName);\n }\n if (variant && available.some(v => v.value === variant)) {\n return variant;\n }\n return getDefaultVariant(elementName);\n }, [getAvailableVariants, getDefaultVariant]);\n\n // Draggable panel handlers\n const handlePanelMouseDown = useCallback((panelName: string, e: React.MouseEvent) => {\n // Only allow dragging from header area\n const target = e.target as HTMLElement;\n if (!target.closest('.panel-header') && !target.classList.contains('panel-header')) {\n return;\n }\n \n e.preventDefault();\n e.stopPropagation();\n \n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n setDraggingPanel(panelName);\n setDragOffset({\n x: e.clientX - rect.left,\n y: e.clientY - rect.top\n });\n }, []);\n\n const handlePanelMouseMove = useCallback((e: MouseEvent) => {\n if (!draggingPanel) return;\n \n const newX = e.clientX - dragOffset.x;\n const newY = e.clientY - dragOffset.y;\n \n setPanelPositions(prev => ({\n ...prev,\n [draggingPanel]: {\n ...prev[draggingPanel as keyof typeof prev],\n x: Math.max(0, Math.min(newX, window.innerWidth - prev[draggingPanel as keyof typeof prev].width)),\n y: Math.max(0, Math.min(newY, window.innerHeight - prev[draggingPanel as keyof typeof prev].height))\n }\n }));\n }, [draggingPanel, dragOffset]);\n\n const handlePanelMouseUp = useCallback(() => {\n setDraggingPanel(null);\n setResizingPanel(null);\n }, []);\n\n // Panel dragging effect\n useEffect(() => {\n if (draggingPanel) {\n window.addEventListener('mousemove', handlePanelMouseMove);\n window.addEventListener('mouseup', handlePanelMouseUp);\n return () => {\n window.removeEventListener('mousemove', handlePanelMouseMove);\n window.removeEventListener('mouseup', handlePanelMouseUp);\n };\n }\n }, [draggingPanel, handlePanelMouseMove, handlePanelMouseUp]);\n\n // Resize handler\n const handleResizeStart = useCallback((panelName: string, e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setResizingPanel(panelName);\n setDragOffset({ x: e.clientX, y: e.clientY });\n }, []);\n\n const handleResizeMove = useCallback((e: MouseEvent) => {\n if (!resizingPanel) return;\n \n const deltaX = e.clientX - dragOffset.x;\n const deltaY = e.clientY - dragOffset.y;\n \n setPanelPositions(prev => {\n const panel = prev[resizingPanel as keyof typeof prev];\n return {\n ...prev,\n [resizingPanel]: {\n ...panel,\n width: Math.max(280, panel.width + deltaX),\n height: Math.max(300, panel.height + deltaY)\n }\n };\n });\n \n setDragOffset({ x: e.clientX, y: e.clientY });\n }, [resizingPanel, dragOffset]);\n\n useEffect(() => {\n if (resizingPanel) {\n window.addEventListener('mousemove', handleResizeMove);\n window.addEventListener('mouseup', handlePanelMouseUp);\n return () => {\n window.removeEventListener('mousemove', handleResizeMove);\n window.removeEventListener('mouseup', handlePanelMouseUp);\n };\n }\n }, [resizingPanel, handleResizeMove, handlePanelMouseUp]);\n\n // Auto-activate editing mode if URL parameter is present\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n if (params.get('myuibrix') === 'edit') {\n setIsEditing(true);\n // Remove parameter from URL without reload\n const newUrl = window.location.pathname;\n window.history.replaceState({}, '', newUrl);\n \n toast({\n title: 'MyUIbrix Editor',\n description: 'Režim úprav byl aktivován. Klikněte na elementy pro jejich úpravu.',\n status: 'info',\n duration: 5000,\n isClosable: true,\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Toggle body class for edit mode so other parts can detect reliably\n useEffect(() => {\n try {\n if (isEditing) {\n document.body.classList.add('myuibrix-edit-mode');\n } else {\n document.body.classList.remove('myuibrix-edit-mode');\n }\n } catch {}\n return () => {\n try {\n document.body.classList.remove('myuibrix-edit-mode');\n } catch {}\n };\n }, [isEditing]);\n\n // Editor-only CSS: hide MyClub watermark and stabilize footer appearance in edit mode\n useEffect(() => {\n let styleEl: HTMLStyleElement | null = null;\n try {\n if (isEditing) {\n styleEl = document.createElement('style');\n styleEl.id = 'myuibrix-footer-editor-fixes';\n styleEl.textContent = `\n body.myuibrix-edit-mode [data-watermark=\"myclub\"] { display: none !important; }\n body.myuibrix-edit-mode [data-element=\"footer\"] { position: relative; z-index: 0; }\n `;\n document.head.appendChild(styleEl);\n }\n } catch {}\n return () => {\n try { const n = document.getElementById('myuibrix-footer-editor-fixes'); if (n) n.remove(); } catch {}\n };\n }, [isEditing]);\n\n // Toggle cross-container reorder mode class for global checks\n useEffect(() => {\n try {\n if (allowCrossContainer) {\n document.body.classList.add('myuibrix-cross-container-reorder');\n } else {\n document.body.classList.remove('myuibrix-cross-container-reorder');\n }\n } catch {}\n return () => {\n try { document.body.classList.remove('myuibrix-cross-container-reorder'); } catch {}\n };\n }, [allowCrossContainer]);\n\n // Auto-open Layers panel on the left by default when entering edit mode\n useEffect(() => {\n if (isEditing) {\n setShowLayersPanel(false);\n }\n }, [isEditing]);\n\n // Detect grid columns on main container for grid insertion UI\n useEffect(() => {\n try {\n const el = safeDOM.querySelector('.container') as HTMLElement | null;\n if (!el) { setContainerGridCols(0); return; }\n const cs = window.getComputedStyle(el);\n if (cs.display !== 'grid') { setContainerGridCols(0); return; }\n const gtc = cs.gridTemplateColumns || '';\n let cols = 0;\n const m = gtc.match(/repeat\\((\\d+)/);\n if (m) cols = parseInt(m[1], 10);\n if (!cols) {\n // Fallback: naive split\n cols = gtc.split(' ').filter(Boolean).length || 2;\n }\n setContainerGridCols(cols);\n } catch {\n setContainerGridCols(0);\n }\n }, [isEditing, elementStyles]);\n\n // Auto-dismiss help hint after 5 seconds\n useEffect(() => {\n if (isEditing && showHelpHint) {\n const timer = setTimeout(() => {\n setShowHelpHint(false);\n }, 5000);\n return () => clearTimeout(timer);\n }\n }, [isEditing, showHelpHint]);\n\n // Load configurations\n useEffect(() => {\n const loadConfigs = async () => {\n try {\n const data = await getPageElementConfigs(pageType);\n const configsToUse = data.length > 0 ? data : DEFAULT_HOMEPAGE_ELEMENTS;\n const sanitizedConfigs = configsToUse.map(cfg => ({\n ...cfg,\n variant: normalizeVariant(cfg.element_name, cfg.variant)\n }));\n // Load saved styles and custom CSS from settings\n const cssByElement: Record<string, string> = {};\n const stylesByElement: Record<string, Record<string, any>> = {};\n sanitizedConfigs.forEach(cfg => {\n const css = String(((cfg.settings as any)?.customCSS) || ((cfg.settings as any)?.styles?.customCSS) || '');\n if (css) cssByElement[cfg.element_name] = css;\n const st = (cfg.settings && (cfg.settings as any).styles) || {};\n if (st && typeof st === 'object' && Object.keys(st).length > 0) {\n stylesByElement[cfg.element_name] = st as Record<string, any>;\n }\n });\n setConfigs(sanitizedConfigs);\n const changes: Record<string, string> = {};\n const visible = new Set<string>();\n const sorted = [...sanitizedConfigs].sort((a, b) => (a.display_order || 0) - (b.display_order || 0));\n const order: string[] = [];\n sorted.forEach(cfg => {\n changes[cfg.element_name] = cfg.variant;\n if (cfg.visible !== false) {\n visible.add(cfg.element_name);\n }\n order.push(cfg.element_name);\n });\n \n setLocalChanges(changes);\n setVisibleElements(visible);\n setElementOrder(order);\n // Prime style state with saved styles + custom CSS\n if (Object.keys(stylesByElement).length > 0 || Object.keys(cssByElement).length > 0) {\n setElementStyles(prev => {\n const next = { ...prev } as Record<string, any>;\n Object.entries(stylesByElement).forEach(([name, st]) => {\n next[name] = { ...(next[name] || {}), ...st };\n });\n Object.entries(cssByElement).forEach(([name, css]) => {\n next[name] = { ...(next[name] || {}), customCSS: css };\n });\n return next;\n });\n // Inject saved custom CSS for preview (admin only)\n Object.entries(cssByElement).forEach(([name, css]) => {\n try {\n const styleId = `custom-css-${name}`;\n const existing = document.getElementById(styleId);\n if (existing) existing.remove();\n const style = document.createElement('style');\n style.id = styleId;\n const hasBlocks = /\\{[^}]*\\}|@media|@keyframes/.test(css);\n if (hasBlocks) {\n style.textContent = css;\n } else {\n const importantDecls = css\n .split(';')\n .map(s => s.trim())\n .filter(Boolean)\n .map(s => (/!important\\s*$/.test(s) ? s : `${s} !important`))\n .join(';\\n ');\n style.textContent = `\\n [data-element=\"${name}\"] {\\n ${importantDecls};\\n }\\n `;\n }\n document.head.appendChild(style);\n } catch {}\n });\n }\n setBaseline({ variants: { ...changes }, visible: new Set<string>(visible), order: [...order], css: cssByElement });\n \n // If using defaults and no data exists, treat everything as unsaved\n if (data.length === 0) {\n setHasChanges(true);\n setBaseline({ variants: {}, visible: new Set<string>(), order: [], css: {} });\n }\n } catch (error) {\n console.error('Failed to load page element configs:', error);\n \n const fallbackConfigs = DEFAULT_HOMEPAGE_ELEMENTS.map(cfg => ({\n ...cfg,\n variant: normalizeVariant(cfg.element_name, cfg.variant)\n }));\n const changes: Record<string, string> = {};\n const visible = new Set<string>();\n const order: string[] = [];\n fallbackConfigs.forEach(cfg => {\n changes[cfg.element_name] = cfg.variant;\n if (cfg.visible !== false) {\n visible.add(cfg.element_name);\n }\n order.push(cfg.element_name);\n });\n setConfigs(fallbackConfigs);\n setLocalChanges(changes);\n setVisibleElements(visible);\n setElementOrder(order);\n setHasChanges(true);\n // Treat fallback like unsaved defaults so counter encourages save\n setBaseline({ variants: {}, visible: new Set<string>(), order: [], css: {} });\n }\n };\n\n loadConfigs();\n }, [pageType, normalizeVariant]);\n\n // Compute unsaved changes count by diffing against baseline\n const unsavedCount = useMemo(() => {\n try {\n const saved = baseline || { variants: {}, visible: new Set<string>(), order: [], css: {} } as any;\n const names = new Set<string>([\n ...Object.keys(localChanges || {}),\n ...Object.keys(saved.variants || {}),\n ...elementOrder,\n ...saved.order,\n ]);\n const changedElements = new Set<string>();\n names.forEach((name) => {\n const curVar = normalizeVariant(name, localChanges[name]);\n const savVar = normalizeVariant(name, saved.variants[name]);\n if ((curVar || '') !== (savVar || '')) changedElements.add(name);\n const curVis = visibleElements.has(name);\n const savVis = saved.visible.has(name);\n if (curVis !== savVis) changedElements.add(name);\n const curCSS = String((elementStyles[name]?.customCSS || '')).trim();\n const savCSS = String((saved.css?.[name] || '')).trim();\n if (curCSS !== savCSS) changedElements.add(name);\n });\n const orderEqual = (elementOrder.length === saved.order.length) && elementOrder.every((n, i) => n === saved.order[i]);\n return changedElements.size + (orderEqual ? 0 : 1);\n } catch {\n return 0;\n }\n }, [localChanges, visibleElements, elementOrder, baseline, normalizeVariant]);\n\n // Keep hasChanges in sync with computed counter\n useEffect(() => {\n setHasChanges(unsavedCount > 0);\n }, [unsavedCount]);\n\n const historyRef = useRef<Array<{ localChanges: Record<string, string>; visible: string[]; order: string[]; styles: Record<string, any> }>>([]);\n const historyIndexRef = useRef<number>(-1);\n const pushHistorySnapshot = useCallback(() => {\n try {\n const snap = {\n localChanges: { ...localChanges },\n visible: Array.from(visibleElements),\n order: [...elementOrder],\n styles: JSON.parse(JSON.stringify(elementStyles || {})),\n };\n const arr = historyRef.current.slice(0, historyIndexRef.current + 1);\n arr.push(snap);\n historyRef.current = arr;\n historyIndexRef.current = arr.length - 1;\n } catch {}\n }, [localChanges, visibleElements, elementOrder, elementStyles]);\n const canUndo = () => historyIndexRef.current > 0;\n const canRedo = () => historyIndexRef.current >= 0 && historyIndexRef.current < historyRef.current.length - 1;\n const applySnapshot = useCallback((idx: number) => {\n const snap = historyRef.current[idx];\n if (!snap) return;\n setLocalChanges(snap.localChanges);\n setVisibleElements(new Set(snap.visible));\n setElementOrder(snap.order);\n setElementStyles(snap.styles);\n try {\n if (isEditing) {\n requestAnimationFrame(() => {\n applyVisualReorderRef.current(snap.order);\n window.dispatchEvent(new CustomEvent('myuibrix-reorder', { detail: { order: snap.order, previewMode: true } }));\n });\n }\n } catch {}\n }, [isEditing]);\n const undo = useCallback(() => {\n if (!canUndo()) return;\n historyIndexRef.current -= 1;\n applySnapshot(historyIndexRef.current);\n }, [applySnapshot]);\n const redo = useCallback(() => {\n if (!canRedo()) return;\n historyIndexRef.current += 1;\n applySnapshot(historyIndexRef.current);\n }, [applySnapshot]);\n\n // Keyboard shortcuts\n useEffect(() => {\n if (!isEditing) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n if (showElementPicker) setShowElementPicker(false);\n else if (showLayersPanel) setShowLayersPanel(false);\n else if (selectedElement) setSelectedElement(null);\n else handleExitEditing();\n }\n if ((e.ctrlKey || e.metaKey) && e.key === 's' && hasChanges) {\n e.preventDefault();\n handleSave();\n }\n if ((e.ctrlKey || e.metaKey) && !e.shiftKey && (e.key === 'z' || e.code === 'KeyZ')) {\n e.preventDefault();\n undo();\n }\n if ((e.ctrlKey || e.metaKey) && e.shiftKey && (e.key === 'z' || e.code === 'KeyZ')) {\n e.preventDefault();\n redo();\n }\n if (e.key === 'l' && !e.ctrlKey && !e.metaKey && !e.altKey) {\n setShowLayersPanel(!showLayersPanel);\n }\n if (e.key === 'a' && !e.ctrlKey && !e.metaKey && !e.altKey) {\n setShowElementPicker(true);\n }\n if (selectedElement) {\n if (e.key === 'ArrowUp' && !e.shiftKey) {\n e.preventDefault();\n handleMoveUp(selectedElement);\n }\n if (e.key === 'ArrowDown' && !e.shiftKey) {\n e.preventDefault();\n handleMoveDown(selectedElement);\n }\n if (e.key === 'Delete' || e.key === 'Backspace') {\n e.preventDefault();\n handleRemoveElement(selectedElement);\n }\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isEditing, selectedElement, showElementPicker, showLayersPanel, hasChanges, undo, redo]);\n\n useEffect(() => {\n if (!isEditing) {\n // Clean up overlays when exiting edit mode\n try {\n safeDOM.querySelectorAll('.elementor-overlay').forEach(el => {\n try { el.replaceWith(el.cloneNode(true)); } catch {}\n try { el.remove(); } catch {}\n });\n } catch {}\n setSelectedElement(null);\n return;\n }\n\n const addOverlay = (elementName: string) => {\n const selector = `[data-element=\"${elementName}\"]`;\n const elements = safeDOM.querySelectorAll(selector);\n \n elements.forEach((element) => {\n const existing = element.querySelector('.elementor-overlay');\n if (existing) return;\n\n const overlay = document.createElement('div');\n overlay.className = 'elementor-overlay';\n overlay.style.cssText = `\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: auto;\n border: 2px dashed transparent;\n transition: all 0.2s;\n z-index: 9998;\n cursor: move;\n user-select: none;\n -webkit-user-select: none;\n `;\n\n const badge = document.createElement('div');\n badge.className = 'elementor-badge';\n badge.textContent = elementName.toUpperCase();\n badge.style.cssText = `\n position: absolute;\n top: -1px;\n left: -1px;\n background: ${primaryColor};\n color: white;\n padding: 4px 12px;\n font-size: 11px;\n font-weight: 700;\n border-radius: 0 0 6px 0;\n opacity: 0;\n transition: opacity 0.2s;\n pointer-events: none;\n z-index: 9999;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n `;\n\n // Action buttons (visible on hover)\n const actionsBar = document.createElement('div');\n actionsBar.className = 'elementor-actions';\n actionsBar.style.cssText = `\n position: absolute;\n top: 8px;\n right: 8px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s;\n z-index: 10000;\n pointer-events: auto;\n `;\n\n // Edit button\n const editBtn = document.createElement('button');\n editBtn.innerHTML = '⚙️';\n editBtn.title = 'Upravit styl';\n editBtn.style.cssText = `\n background: ${primaryColor};\n color: white;\n border: none;\n width: 32px;\n height: 32px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n transition: transform 0.2s;\n `;\n editBtn.onmouseover = () => editBtn.style.transform = 'scale(1.1)';\n editBtn.onmouseout = () => editBtn.style.transform = 'scale(1)';\n\n // Move up button\n const moveUpBtn = document.createElement('button');\n moveUpBtn.innerHTML = '⬆️';\n moveUpBtn.title = 'Přesunout nahoru';\n moveUpBtn.style.cssText = editBtn.style.cssText;\n moveUpBtn.onmouseover = () => moveUpBtn.style.transform = 'scale(1.1)';\n moveUpBtn.onmouseout = () => moveUpBtn.style.transform = 'scale(1)';\n\n // Move down button\n const moveDownBtn = document.createElement('button');\n moveDownBtn.innerHTML = '⬇️';\n moveDownBtn.title = 'Přesunout dolů';\n moveDownBtn.style.cssText = editBtn.style.cssText;\n moveDownBtn.onmouseover = () => moveDownBtn.style.transform = 'scale(1.1)';\n moveDownBtn.onmouseout = () => moveDownBtn.style.transform = 'scale(1)';\n\n // Delete button\n const deleteBtn = document.createElement('button');\n deleteBtn.innerHTML = '🗑️';\n deleteBtn.title = 'Odstranit element';\n deleteBtn.style.cssText = `\n background: #e53e3e;\n color: white;\n border: none;\n width: 32px;\n height: 32px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n transition: transform 0.2s;\n `;\n deleteBtn.onmouseover = () => deleteBtn.style.transform = 'scale(1.1)';\n deleteBtn.onmouseout = () => deleteBtn.style.transform = 'scale(1)';\n\n // Add before button\n const addBeforeBtn = document.createElement('button');\n addBeforeBtn.innerHTML = '';\n addBeforeBtn.title = 'Přidat před';\n addBeforeBtn.style.cssText = editBtn.style.cssText;\n addBeforeBtn.onmouseover = () => addBeforeBtn.style.transform = 'scale(1.1)';\n addBeforeBtn.onmouseout = () => addBeforeBtn.style.transform = 'scale(1)';\n // Add after button\n const addAfterBtn = document.createElement('button');\n addAfterBtn.innerHTML = '';\n addAfterBtn.title = 'Přidat za';\n addAfterBtn.style.cssText = editBtn.style.cssText;\n addAfterBtn.onmouseover = () => addAfterBtn.style.transform = 'scale(1.1)';\n addAfterBtn.onmouseout = () => addAfterBtn.style.transform = 'scale(1)';\n\n // Grid column quick-insert buttons (add into specific grid column)\n let colWrap: HTMLDivElement | null = null;\n if (containerGridCols > 1) {\n colWrap = document.createElement('div');\n colWrap.className = 'elementor-col-picker';\n colWrap.style.cssText = `\n display: flex;\n gap: 4px;\n `;\n for (let c = 0; c < containerGridCols; c++) {\n const colBtn = document.createElement('button');\n colBtn.innerHTML = '';\n colBtn.title = `Přidat do sloupce ${c + 1}`;\n colBtn.style.cssText = editBtn.style.cssText;\n colBtn.onmouseover = () => (colBtn.style.transform = 'scale(1.1)');\n colBtn.onmouseout = () => (colBtn.style.transform = 'scale(1)');\n colBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n try {\n const cols = Math.max(1, containerGridCols || 1);\n const L = elementOrderRef.current.length;\n let countInCol = 0;\n for (let i = 0; i < L; i++) {\n if (i % cols === c) countInCol++;\n }\n const targetIndex = c + countInCol * cols;\n setPendingInsertIndex(Math.min(targetIndex, elementOrderRef.current.length));\n setShowElementPicker(true);\n } catch {}\n });\n safeDOM.appendChild(colWrap!, colBtn);\n }\n }\n\n // Use safeDOM to build overlay structure\n safeDOM.appendChild(actionsBar, editBtn);\n safeDOM.appendChild(actionsBar, moveUpBtn);\n safeDOM.appendChild(actionsBar, moveDownBtn);\n safeDOM.appendChild(actionsBar, addBeforeBtn);\n safeDOM.appendChild(actionsBar, addAfterBtn);\n if (containerGridCols > 1 && colWrap) {\n safeDOM.appendChild(actionsBar, colWrap);\n }\n safeDOM.appendChild(actionsBar, deleteBtn);\n\n safeDOM.appendChild(overlay, badge);\n safeDOM.appendChild(overlay, actionsBar);\n \n const parentPos = window.getComputedStyle(element).position;\n if (parentPos === 'static') {\n (element as HTMLElement).style.position = 'relative';\n }\n\n // Add overlay using safeDOM to avoid React conflicts\n if (!safeDOM.appendChild(element, overlay)) {\n console.warn(`Failed to add overlay to element: ${elementName}`);\n return;\n }\n\n // Click to auto-select and open style panel\n overlay.addEventListener('click', (e) => {\n // Don't trigger if clicking on action buttons\n if ((e.target as HTMLElement).closest('.elementor-actions')) {\n return;\n }\n e.stopPropagation();\n const rect = element.getBoundingClientRect();\n setElementPosition({\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n });\n setSelectedElement(elementName);\n setShowStylePanel(true);\n });\n\n // Hover effects\n overlay.addEventListener('mouseenter', () => {\n setHoveredElement(elementName);\n overlay.style.border = `2px dashed ${primaryColor}`;\n overlay.style.background = `${primaryColor}15`;\n badge.style.opacity = '1';\n actionsBar.style.opacity = '1';\n });\n\n overlay.addEventListener('mouseleave', () => {\n setHoveredElement(null);\n if (selectedElement !== elementName) {\n overlay.style.border = '2px dashed transparent';\n overlay.style.background = 'transparent';\n badge.style.opacity = '0';\n actionsBar.style.opacity = '0';\n }\n });\n\n // Button click handlers\n editBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n const rect = element.getBoundingClientRect();\n setElementPosition({\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n });\n setSelectedElement(elementName);\n setShowStylePanel(true);\n });\n\n moveUpBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n handleMoveUp(elementName);\n });\n\n moveDownBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n handleMoveDown(elementName);\n });\n\n deleteBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n if (confirm(`Opravdu chcete odstranit element \"${elementName}\"?`)) {\n handleRemoveElement(elementName);\n }\n });\n\n // Add before/after handlers\n addBeforeBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n try {\n const idx = elementOrderRef.current.indexOf(elementName);\n if (idx >= 0) {\n setPendingInsertIndex(idx);\n setShowElementPicker(true);\n }\n } catch {}\n });\n addAfterBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n try {\n const idx = elementOrderRef.current.indexOf(elementName);\n if (idx >= 0) {\n setPendingInsertIndex(idx + 1);\n setShowElementPicker(true);\n }\n } catch {}\n });\n\n // per-column insert handled by elementor-col-picker buttons above\n\n // Make overlay draggable\n overlay.draggable = true;\n overlay.addEventListener('dragstart', (e) => {\n e.stopPropagation();\n try { (e as DragEvent).dataTransfer?.setData('text/plain', elementName); } catch {}\n setDraggedElement(elementName);\n overlay.style.opacity = '0.5';\n });\n\n overlay.addEventListener('dragend', (e) => {\n e.stopPropagation();\n overlay.style.opacity = '1';\n setDraggedElement(null);\n });\n\n overlay.addEventListener('dragover', (e) => {\n e.preventDefault();\n e.stopPropagation();\n try { (e as DragEvent).dataTransfer!.dropEffect = 'move'; } catch {}\n if (draggedElement && draggedElement !== elementName) {\n overlay.style.border = `3px solid ${secondaryColor}`;\n setDragOverElement(elementName);\n }\n });\n\n overlay.addEventListener('dragleave', (e) => {\n e.stopPropagation();\n if (selectedElement !== elementName) {\n overlay.style.border = `2px dashed ${primaryColor}`;\n }\n setDragOverElement(null);\n });\n\n overlay.addEventListener('drop', (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (draggedElement && draggedElement !== elementName) {\n // Reorder elements\n const newOrder = [...elementOrderRef.current];\n const draggedIndex = newOrder.indexOf(draggedElement as string);\n const targetIndex = newOrder.indexOf(elementName);\n \n if (draggedIndex !== -1 && targetIndex !== -1) {\n newOrder.splice(draggedIndex, 1);\n newOrder.splice(targetIndex, 0, draggedElement as string);\n setElementOrder(newOrder);\n setHasChanges(true);\n applyVisualReorderRef.current(newOrder);\n }\n }\n overlay.style.border = `2px dashed ${primaryColor}`;\n setDragOverElement(null);\n });\n });\n };\n \n // Add overlays for all present [data-element] nodes in DOM (dynamic)\n try {\n const nodes = Array.from(safeDOM.querySelectorAll('[data-element]')) as HTMLElement[];\n const names = Array.from(new Set(nodes\n .map(n => n.getAttribute('data-element'))\n .filter((v): v is string => !!v && v !== 'container')\n ));\n names.forEach(name => addOverlay(name));\n } catch {\n // fallback to implemented list if needed\n const implementedElements = pageType === 'homepage' ? HOMEPAGE_IMPLEMENTED_ELEMENTS : Object.keys(ELEMENT_VARIANTS);\n implementedElements.forEach((elementName) => {\n if (ELEMENT_VARIANTS[elementName]) {\n addOverlay(elementName);\n }\n });\n }\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setSelectedElement(null);\n }\n };\n document.addEventListener('keydown', handleEscape);\n\n return () => {\n // Cleanup: Remove all overlays and event listeners - with safe DOM\n try {\n const overlays = safeDOM.querySelectorAll('.elementor-overlay');\n overlays.forEach(el => {\n try {\n // Remove event listeners by cloning\n const clone = el.cloneNode(false) as Element;\n const parent = el.parentElement;\n if (parent && safeDOM.replaceChild(parent, clone, el)) {\n safeDOM.removeChild(parent, clone);\n }\n } catch (e) {\n console.warn('Failed to cleanup overlay:', e);\n }\n });\n } catch (e) {\n console.error('Error during cleanup:', e);\n }\n \n try {\n document.removeEventListener('keydown', handleEscape);\n } catch (e) {\n console.warn('Failed to remove event listener:', e);\n }\n \n // Clear debounce timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [isEditing, selectedElement, pageType, elementOrder, visibleElements]);\n\n // Update selected element overlay styling\n useEffect(() => {\n safeDOM.querySelectorAll('.elementor-overlay').forEach((overlay) => {\n const parent = overlay.parentElement;\n const elementName = parent?.getAttribute('data-element');\n \n if (elementName === selectedElement) {\n (overlay as HTMLElement).style.border = `3px solid ${primaryColor}`;\n (overlay as HTMLElement).style.background = `${primaryColor}1A`;\n const badge = overlay.querySelector('.elementor-badge') as HTMLElement;\n if (badge) {\n badge.style.opacity = '1';\n badge.style.background = primaryColor;\n }\n } else if (elementName === hoveredElement) {\n (overlay as HTMLElement).style.border = `2px dashed ${primaryColor}`;\n (overlay as HTMLElement).style.background = `${primaryColor}15`;\n const badge = overlay.querySelector('.elementor-badge') as HTMLElement;\n if (badge) badge.style.opacity = '1';\n } else {\n (overlay as HTMLElement).style.border = '2px dashed transparent';\n (overlay as HTMLElement).style.background = 'transparent';\n const badge = overlay.querySelector('.elementor-badge') as HTMLElement;\n if (badge) badge.style.opacity = '0';\n }\n });\n }, [selectedElement, hoveredElement]);\n\n const handleVariantChange = useCallback((elementName: string, variant: string) => {\n // Prevent crashes by checking if variant exists\n const variants = getAvailableVariants(elementName);\n if (!variants || variants.length === 0) {\n console.warn(`Invalid variant \"${variant}\" for element \"${elementName}\"`);\n return;\n }\n const safeVariant = normalizeVariant(elementName, variant);\n\n // Helper function to apply the variant change\n const applyChange = () => {\n try {\n pushHistorySnapshot();\n const newChanges = { ...localChanges, [elementName]: safeVariant };\n setLocalChanges(newChanges);\n setHasChanges(true);\n \n // Update configs array to reflect the change\n setConfigs(prevConfigs => {\n const configIndex = prevConfigs.findIndex(c => c.element_name === elementName);\n if (configIndex !== -1) {\n const updated = [...prevConfigs];\n updated[configIndex] = { ...updated[configIndex], variant: safeVariant };\n return updated;\n }\n return prevConfigs;\n });\n \n // Live preview ONLY during editing (not visible in production)\n // Use requestAnimationFrame to avoid DOM conflicts\n if (isEditing) {\n requestAnimationFrame(() => {\n window.dispatchEvent(new CustomEvent('myuibrix-change', {\n detail: { elementName, variant: safeVariant, visible: visibleElements.has(elementName), previewMode: true }\n }));\n });\n }\n } catch (error) {\n console.error('Error applying variant change:', error);\n toast({\n title: 'Chyba při aplikaci stylu',\n description: 'Styl se nepodařilo aplikovat. Zkuste to prosím znovu.',\n status: 'error',\n duration: 3000,\n isClosable: true,\n });\n }\n };\n \n // Wait if we're currently reordering to avoid DOM conflicts\n if (isReorderingRef.current) {\n // Wait for reordering to complete, then apply change\n const checkAndApply = () => {\n if (!isReorderingRef.current) {\n applyChange();\n } else {\n setTimeout(checkAndApply, 50);\n }\n };\n setTimeout(checkAndApply, 50);\n return;\n }\n \n applyChange();\n }, [localChanges, visibleElements, isEditing, toast, getAvailableVariants, normalizeVariant]);\n\n // Apply visual reordering with optional cross-container moves\n const applyVisualReorder = useCallback((order: string[]) => {\n if (isReorderingRef.current) return;\n isReorderingRef.current = true;\n\n requestAnimationFrame(() => {\n try {\n const cross = allowCrossContainer || (typeof document !== 'undefined' && document.body?.classList?.contains('myuibrix-cross-container-reorder'));\n if (cross) {\n // Prefer the in-page content wrapper as the canonical parent\n const primary = (safeDOM.querySelector('.container') as HTMLElement) ||\n (safeDOM.querySelector('.myuibrix-viewport-wrapper') as HTMLElement) ||\n (safeDOM.querySelector('main') as HTMLElement) || null;\n\n if (primary) {\n // Move any element not under the primary into it\n order.forEach((name) => {\n const el = safeDOM.querySelector(`[data-element=\"${name}\"]`) as HTMLElement | null;\n if (el && el.parentElement !== primary) {\n safeDOM.appendChild(primary, el);\n }\n });\n // Append in requested order\n order.forEach((name) => {\n const el = safeDOM.querySelector(`[data-element=\"${name}\"]`) as HTMLElement | null;\n if (el) {\n try { el.style.order = ''; } catch {}\n safeDOM.appendChild(primary, el);\n }\n });\n }\n } else {\n // Reorder only within each element's existing parent\n const parentMap = new Map<HTMLElement, HTMLElement[]>();\n order.forEach((name) => {\n const el = safeDOM.querySelector(`[data-element=\"${name}\"]`) as HTMLElement | null;\n if (!el || !el.parentElement) return;\n const parent = el.parentElement as HTMLElement;\n if (!parentMap.has(parent)) parentMap.set(parent, []);\n parentMap.get(parent)!.push(el);\n });\n parentMap.forEach((els, parent) => {\n els.forEach((el) => { try { el.style.order = ''; } catch {} });\n order.forEach((name) => {\n const el = safeDOM.querySelector(`[data-element=\"${name}\"]`) as HTMLElement | null;\n if (el && el.parentElement === parent) {\n safeDOM.appendChild(parent, el);\n }\n });\n });\n }\n\n // Notify listeners (HomePage hook) about the new order\n window.dispatchEvent(new CustomEvent('myuibrix-reorder', {\n detail: { order, previewMode: true }\n }));\n\n setTimeout(() => { isReorderingRef.current = false; }, 50);\n } catch (error) {\n console.error('Error during DOM reordering:', error);\n isReorderingRef.current = false;\n }\n });\n }, [allowCrossContainer]);\n applyVisualReorderRef.current = applyVisualReorder;\n\n // Debounce style changes to prevent lag\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null);\n \n const handleStyleChange = useCallback((elementName: string, styles: Record<string, any>) => {\n setElementStyles(prev => ({\n ...prev,\n [elementName]: styles\n }));\n setHasChanges(true);\n \n // Debounce the dispatch to reduce event flooding\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n \n debounceTimerRef.current = setTimeout(() => {\n // Live preview ONLY during editing\n if (isEditing) {\n window.dispatchEvent(new CustomEvent('myuibrix-style-change', {\n detail: { elementName, styles, previewMode: true }\n }));\n }\n }, 100); // 100ms debounce\n }, [isEditing]);\n\n // Helper: compute insert index for a given grid column (append at end of that column)\n const computeInsertIndexForColumn = useCallback((col: number) => {\n const cols = Math.max(1, containerGridCols || 1);\n const L = elementOrderRef.current.length;\n let countInCol = 0;\n for (let i = 0; i < L; i++) {\n if (i % cols === col) countInCol++;\n }\n return col + countInCol * cols;\n }, [containerGridCols]);\n\n // Add element from picker and make it visible + ordered in preview\n const handleAddElement = useCallback((elementName: string, insertAt?: number) => {\n pushHistorySnapshot();\n const element = PREDEFINED_ELEMENTS.find(e => e.name === elementName);\n const existingVariant = localChanges[elementName];\n const defaultVariant = normalizeVariant(elementName, element?.defaultVariant || 'default');\n const variantToUse = normalizeVariant(elementName, existingVariant || defaultVariant);\n if (!localChanges[elementName]) {\n setLocalChanges(prev => ({ ...prev, [elementName]: variantToUse }));\n }\n // Mark as visible in editor state\n setVisibleElements(prev => {\n const next = new Set(prev);\n next.add(elementName);\n return next;\n });\n\n // Ensure config entry exists and is visible\n setConfigs(prev => {\n const index = prev.findIndex(cfg => cfg.element_name === elementName);\n if (index !== -1) {\n const updated = [...prev];\n updated[index] = { ...updated[index], variant: variantToUse, visible: true };\n return updated;\n }\n return [\n ...prev,\n {\n page_type: pageType,\n element_name: elementName,\n variant: variantToUse,\n visible: true,\n display_order: prev.length,\n }\n ];\n });\n\n // Close picker UI\n setHasChanges(true);\n setShowElementPicker(false);\n setSearchQuery('');\n setSelectedCategory('all');\n\n // Add into ordering at desired position and apply reordering\n setElementOrder(prev => {\n const targetIndex = (typeof insertAt === 'number') ? insertAt : (pendingInsertIndex != null ? pendingInsertIndex : undefined);\n if (prev.includes(elementName)) {\n try {\n toast({\n title: 'Duplicitní element',\n description: 'Tento element již na stránce existuje. Přesouvám existující na zvolené místo.',\n status: 'warning',\n duration: 2500,\n isClosable: true,\n });\n } catch {}\n const existingIdx = prev.indexOf(elementName);\n if (typeof targetIndex === 'number' && targetIndex !== existingIdx) {\n const reordered = [...prev];\n reordered.splice(existingIdx, 1);\n reordered.splice(Math.min(targetIndex, reordered.length), 0, elementName);\n if (isEditing) {\n requestAnimationFrame(() => {\n applyVisualReorder(reordered);\n window.dispatchEvent(new CustomEvent('myuibrix-reorder', { detail: { order: reordered, previewMode: true } }));\n });\n }\n return reordered;\n }\n if (isEditing) {\n requestAnimationFrame(() => {\n applyVisualReorder(prev);\n window.dispatchEvent(new CustomEvent('myuibrix-reorder', { detail: { order: prev, previewMode: true } }));\n });\n }\n return prev;\n }\n const newOrder = [...prev];\n if (typeof targetIndex === 'number') {\n newOrder.splice(Math.min(targetIndex, newOrder.length), 0, elementName);\n } else {\n newOrder.push(elementName);\n }\n if (isEditing) {\n requestAnimationFrame(() => {\n applyVisualReorder(newOrder);\n window.dispatchEvent(new CustomEvent('myuibrix-reorder', {\n detail: { order: newOrder, previewMode: true }\n }));\n });\n }\n // Ensure element is visible in DOM for editing\n setTimeout(() => {\n try {\n const el = safeDOM.querySelector(`[data-element=\"${elementName}\"]`);\n if (el) {\n (el as HTMLElement).style.display = '';\n }\n } catch {}\n }, 0);\n return newOrder;\n });\n\n // Notify preview consumers to render element\n if (isEditing) {\n window.dispatchEvent(new CustomEvent('myuibrix-change', {\n detail: { elementName, variant: variantToUse, visible: true, previewMode: true }\n }));\n }\n setPendingInsertIndex(null);\n // Auto-select and open style panel for the newly added element\n try {\n setSelectedElement(elementName);\n setTimeout(() => {\n const el = safeDOM.querySelector(`[data-element=\"${elementName}\"]`) as HTMLElement | null;\n if (el) {\n const rect = el.getBoundingClientRect();\n setElementPosition({ top: rect.top, left: rect.left, width: rect.width, height: rect.height });\n setShowStylePanel(true);\n }\n }, 0);\n } catch {}\n }, [localChanges, isEditing, normalizeVariant, pageType, applyVisualReorder, pendingInsertIndex]);\n\n const handleRemoveElement = useCallback((elementName: string) => {\n pushHistorySnapshot();\n // Update state - React will handle DOM removal\n const newVisible = new Set(visibleElements);\n newVisible.delete(elementName);\n setVisibleElements(newVisible);\n setHasChanges(true);\n setSelectedElement(null);\n \n // Hide the element via React state event\n if (isEditing) {\n window.dispatchEvent(new CustomEvent('myuibrix-change', {\n detail: { elementName, variant: localChanges[elementName], visible: false, previewMode: true }\n }));\n }\n \n // Force React to re-render by triggering a state update\n setTimeout(() => {\n const element = safeDOM.querySelector(`[data-element=\"${elementName}\"]`);\n if (element) {\n (element as HTMLElement).style.display = 'none';\n }\n }, 0);\n }, [visibleElements, localChanges, isEditing]);\n\n \n\n const handleMoveUp = useCallback((elementName: string) => {\n pushHistorySnapshot();\n const currentIndex = elementOrder.indexOf(elementName);\n if (currentIndex <= 0) return;\n \n const newOrder = [...elementOrder];\n [newOrder[currentIndex - 1], newOrder[currentIndex]] = [newOrder[currentIndex], newOrder[currentIndex - 1]];\n setElementOrder(newOrder);\n setHasChanges(true);\n \n // Trigger reorder event and apply visual reordering\n if (isEditing) {\n applyVisualReorder(newOrder);\n window.dispatchEvent(new CustomEvent('myuibrix-reorder', {\n detail: { order: newOrder, previewMode: true }\n }));\n }\n }, [elementOrder, isEditing, applyVisualReorder]);\n\n const handleMoveDown = useCallback((elementName: string) => {\n pushHistorySnapshot();\n const currentIndex = elementOrder.indexOf(elementName);\n if (currentIndex < 0 || currentIndex >= elementOrder.length - 1) return;\n \n const newOrder = [...elementOrder];\n [newOrder[currentIndex], newOrder[currentIndex + 1]] = [newOrder[currentIndex + 1], newOrder[currentIndex]];\n setElementOrder(newOrder);\n setHasChanges(true);\n \n // Trigger reorder event and apply visual reordering\n if (isEditing) {\n applyVisualReorder(newOrder);\n window.dispatchEvent(new CustomEvent('myuibrix-reorder', {\n detail: { order: newOrder, previewMode: true }\n }));\n }\n }, [elementOrder, isEditing, applyVisualReorder]);\n\n\n // Drag and drop handlers with improved state management\n const handleDragStart = useCallback((elementName: string, e: React.DragEvent) => {\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/html', elementName);\n setDraggedElement(elementName);\n }, []);\n\n const handleDragOver = useCallback((e: React.DragEvent, elementName: string) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n if (draggedElement !== elementName) {\n setDragOverElement(elementName);\n }\n }, [draggedElement]);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n // Only clear if we're leaving to a non-child element\n const relatedTarget = e.relatedTarget as HTMLElement;\n if (!relatedTarget || !(e.currentTarget as HTMLElement).contains(relatedTarget)) {\n setDragOverElement(null);\n }\n }, []);\n \n const handleDragEnd = useCallback(() => {\n setDraggedElement(null);\n setDragOverElement(null);\n }, []);\n\n const handleDrop = useCallback((e: React.DragEvent, targetElementName: string) => {\n e.preventDefault();\n \n if (!draggedElement || draggedElement === targetElementName) {\n setDraggedElement(null);\n setDragOverElement(null);\n return;\n }\n \n const newOrder = [...elementOrder];\n const draggedIndex = newOrder.indexOf(draggedElement);\n const targetIndex = newOrder.indexOf(targetElementName);\n \n if (draggedIndex === -1 || targetIndex === -1) {\n setDraggedElement(null);\n setDragOverElement(null);\n return;\n }\n \n // Remove dragged element and insert at target position\n newOrder.splice(draggedIndex, 1);\n newOrder.splice(targetIndex, 0, draggedElement);\n \n setElementOrder(newOrder);\n setHasChanges(true);\n setDraggedElement(null);\n setDragOverElement(null);\n \n // Apply visual reordering\n if (isEditing) {\n applyVisualReorder(newOrder);\n window.dispatchEvent(new CustomEvent('myuibrix-reorder', {\n detail: { order: newOrder, previewMode: true }\n }));\n }\n }, [draggedElement, elementOrder, isEditing, applyVisualReorder]);\n\n // Start with a blank layout: hide all elements and clear order\n const handleStartBlank = useCallback(() => {\n try {\n if (!confirm('Začít s prázdným rozložením? Všechny sekce (kromě hlavičky a patičky) budou skryté.')) {\n return;\n }\n } catch {}\n\n const previouslyVisible = Array.from(visibleElements);\n const keep = new Set(['header', 'footer']);\n const toHide = previouslyVisible.filter(n => !keep.has(n));\n const newVisible = new Set<string>();\n previouslyVisible.forEach(n => { if (keep.has(n)) newVisible.add(n); });\n setVisibleElements(newVisible);\n setElementOrder(prev => prev.filter(n => keep.has(n)));\n setHasChanges(true);\n\n if (isEditing) {\n toHide.forEach((elementName) => {\n try {\n window.dispatchEvent(new CustomEvent('myuibrix-change', {\n detail: { elementName, variant: localChanges[elementName], visible: false, previewMode: true }\n }));\n const el = safeDOM.querySelector(`[data-element=\"${elementName}\"]`);\n if (el) {\n (el as HTMLElement).style.display = 'none';\n }\n } catch {}\n });\n requestAnimationFrame(() => {\n const order = Array.from(newVisible).filter(n => keep.has(n));\n applyVisualReorder(order);\n window.dispatchEvent(new CustomEvent('myuibrix-reorder', {\n detail: { order, previewMode: true }\n }));\n });\n }\n\n try {\n toast({\n title: 'Prázdné rozložení',\n description: 'Všechny sekce byly skryty. Můžete začít přidávat prvky.',\n status: 'info',\n duration: 2500,\n isClosable: true,\n });\n } catch {}\n\n setShowElementPicker(true);\n }, [visibleElements, isEditing, localChanges, applyVisualReorder, toast]);\n\n const handleSave = async () => {\n try {\n // Persist ALL elements that have order, styles, or variant/visibility changes\n const knownOrder = [...elementOrder];\n const extraNames = Array.from(new Set([\n ...Object.keys(elementStyles || {}),\n ...Object.keys(localChanges || {}),\n ...Array.from(visibleElements || new Set<string>())\n ].filter(Boolean))).filter(name => !knownOrder.includes(name));\n\n const allNames = [...knownOrder, ...extraNames];\n\n const configsToSave: PageElementConfig[] = allNames.map((elementName, idx) => ({\n page_type: pageType,\n element_name: elementName,\n variant: localChanges[elementName] || 'default',\n visible: visibleElements.has(elementName) || elementName === 'style-pack' || elementName === 'container',\n display_order: knownOrder.includes(elementName) ? knownOrder.indexOf(elementName) : idx,\n settings: {\n ...(configs.find(c => c.element_name === elementName)?.settings || {}),\n // Persist full styles object and custom CSS\n styles: (elementStyles[elementName] || (configs.find(c => c.element_name === elementName)?.settings as any)?.styles || {}),\n customCSS: (elementStyles[elementName]?.customCSS ?? (configs.find(c => c.element_name === elementName)?.settings as any)?.customCSS ?? ''),\n },\n }));\n\n // Try admin batch first (works for admins in dev/prod)\n let saved = false;\n try {\n await batchUpdatePageElementConfigs(configsToSave);\n saved = true;\n } catch (err: any) {\n // Fallback for editors (403/401): use editor preview apply endpoint\n const status = err?.response?.status || err?.status;\n if (status !== 401 && status !== 403) throw err;\n const sessionId = `${pageType}-autosave`;\n const elements = configsToSave.map(cfg => ({\n element_name: cfg.element_name,\n variant: cfg.variant,\n visible: Boolean(cfg.visible),\n display_order: Number(cfg.display_order || 0),\n custom_styles: ((cfg.settings as any)?.styles) || {},\n }));\n await api.post(`/editor/preview/${encodeURIComponent(sessionId)}/apply`, {\n page_type: pageType,\n elements,\n });\n saved = true;\n }\n\n if (!saved) return;\n \n toast({\n title: 'Změny úspěšně uloženy!',\n description: 'Změny jsou nyní viditelné na produkci.',\n status: 'success',\n duration: 3000,\n isClosable: true,\n });\n\n // Update baseline to current state so counter resets immediately\n setBaseline({\n variants: { ...localChanges },\n visible: new Set<string>(visibleElements),\n order: [...elementOrder],\n css: Object.fromEntries(Object.entries(elementStyles).map(([k, v]) => [k, String((v as any)?.customCSS || '')])),\n });\n setHasChanges(false);\n \n // Reload the page to apply changes in production view\n // This ensures saved changes are visible to all visitors\n setTimeout(() => {\n window.location.reload();\n }, 1500);\n } catch (error) {\n toast({\n title: 'Nepodařilo se uložit změny',\n description: 'Zkuste to prosím znovu nebo kontaktujte podporu.',\n status: 'error',\n duration: 5000,\n isClosable: true,\n });\n }\n };\n\n // Memoize current variants to avoid recalculation\n const currentVariants = useMemo(() => \n selectedElement ? getAvailableVariants(selectedElement) : [],\n [selectedElement, getAvailableVariants]\n );\n\n const currentVariant = useMemo(() => \n selectedElement ? normalizeVariant(selectedElement, localChanges[selectedElement]) : null,\n [selectedElement, localChanges, normalizeVariant]\n );\n\n const handleExitEditing = useCallback(() => {\n try { document.body.classList.remove('myuibrix-edit-mode'); } catch {}\n setIsEditing(false);\n setTimeout(() => {\n try { window.location.reload(); } catch {}\n }, 120);\n }, []);\n\n // Calculate viewport width - USE REAL DEVICE WIDTHS WITHOUT SCALING\n const getViewportConfig = useCallback(() => ({\n width: '100%',\n label: 'Desktop (100%)'\n }), []);\n\n const viewportConfig = useMemo(() => getViewportConfig(), [getViewportConfig]);\n\n // Apply viewport width changes with smooth transitions - REAL WIDTH CONSTRAINTS\n useEffect(() => {\n if (!isEditing) return;\n \n const wrapper = safeDOM.querySelector('.myuibrix-viewport-wrapper') as HTMLElement;\n if (!wrapper) return;\n \n // Apply actual width constraints without scaling for real responsive behavior\n wrapper.style.width = '100%';\n if (viewport === 'mobile') {\n wrapper.style.maxWidth = '420px';\n } else if (viewport === 'tablet') {\n wrapper.style.maxWidth = '820px';\n } else {\n wrapper.style.maxWidth = '100%';\n }\n wrapper.style.transition = 'all 0.3s ease';\n wrapper.style.margin = '0 auto';\n wrapper.style.transform = 'none';\n wrapper.style.transformOrigin = '';\n \n // Add visual indicator for non-desktop viewports only\n if (viewport !== 'desktop') {\n wrapper.style.border = `3px solid ${primaryColor}`;\n wrapper.style.boxShadow = `0 0 0 9999px rgba(0,0,0,0.25), 0 8px 32px rgba(0,0,0,0.2)`;\n wrapper.style.marginTop = '20px';\n wrapper.style.marginBottom = '20px';\n wrapper.style.minHeight = 'calc(100vh - 100px)';\n } else {\n wrapper.style.border = 'none';\n wrapper.style.boxShadow = 'none';\n wrapper.style.marginTop = '0';\n wrapper.style.marginBottom = '0';\n wrapper.style.minHeight = '100vh';\n }\n \n // Show toast notification when changing viewport\n const label = viewport === 'mobile' ? 'Mobile' : viewport === 'tablet' ? 'Tablet' : 'Desktop';\n const desc = viewport === 'mobile' ? 'Šířka ~420px' : viewport === 'tablet' ? 'Šířka ~820px' : 'Zobrazení na plnou šířku (100%)';\n toast({\n title: `Viewport: ${label}`,\n description: desc,\n status: 'info',\n duration: 1500,\n isClosable: true,\n position: 'bottom-right',\n });\n }, [isEditing, viewport, primaryColor, toast, viewportConfig]);\n\n // Prevent all clicks on page content during edit mode\n useEffect(() => {\n if (!isEditing) return;\n \n const preventPageInteractions = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n \n // Allow clicks on MyUIbrix UI elements (panels, buttons, overlays)\n if (\n target.closest('.myuibrix-panel') ||\n target.closest('.myuibrix-toolbar') ||\n target.closest('.elementor-overlay') ||\n target.closest('[role=\"dialog\"]') ||\n target.closest('.chakra-portal') ||\n target.closest('.chakra-modal') ||\n target.classList.contains('elementor-overlay')\n ) {\n return; // Allow MyUIbrix interactions\n }\n \n // Prevent all other interactions on the page content\n const wrapper = safeDOM.querySelector('.myuibrix-viewport-wrapper');\n if (wrapper && wrapper.contains(target)) {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n };\n \n // Capture phase to ensure we intercept before any handlers\n document.addEventListener('click', preventPageInteractions, true);\n document.addEventListener('mousedown', preventPageInteractions, true);\n \n return () => {\n document.removeEventListener('click', preventPageInteractions, true);\n document.removeEventListener('mousedown', preventPageInteractions, true);\n };\n }, [isEditing]);\n\n // Add padding to body when editor is active and apply viewport width\n useEffect(() => {\n if (isEditing) {\n document.body.style.paddingTop = '60px';\n document.body.style.backgroundColor = '#e2e8f0';\n document.body.style.userSelect = 'none'; // Prevent text selection during editing\n \n const wrapperEl = safeDOM.querySelector('.container') as HTMLElement | null;\n if (wrapperEl) {\n try { wrapperEl.classList.add('myuibrix-viewport-wrapper'); } catch {}\n try { wrapperEl.setAttribute('data-myuibrix-wrapped', '1'); } catch {}\n try { wrapperEl.style.width = '100%'; } catch {}\n try { wrapperEl.style.maxWidth = '100%'; } catch {}\n try { wrapperEl.style.transition = 'all 0.3s ease'; } catch {}\n try { wrapperEl.style.margin = '0 auto'; } catch {}\n try { wrapperEl.style.transform = 'none'; } catch {}\n try { wrapperEl.style.transformOrigin = ''; } catch {}\n }\n } else {\n document.body.style.paddingTop = '0';\n document.body.style.backgroundColor = '';\n document.body.style.userSelect = '';\n \n const wrapperEl = safeDOM.querySelector('.myuibrix-viewport-wrapper') as HTMLElement | null;\n if (wrapperEl) {\n try { wrapperEl.classList.remove('myuibrix-viewport-wrapper'); } catch {}\n try { wrapperEl.removeAttribute('data-myuibrix-wrapped'); } catch {}\n try { wrapperEl.style.width = ''; } catch {}\n try { wrapperEl.style.maxWidth = ''; } catch {}\n try { wrapperEl.style.transition = ''; } catch {}\n try { wrapperEl.style.margin = ''; } catch {}\n try { wrapperEl.style.transform = ''; } catch {}\n try { wrapperEl.style.transformOrigin = ''; } catch {}\n }\n }\n return () => {\n document.body.style.paddingTop = '0';\n document.body.style.backgroundColor = '';\n document.body.style.userSelect = '';\n const wrapperEl = safeDOM.querySelector('.myuibrix-viewport-wrapper') as HTMLElement | null;\n if (wrapperEl) {\n try { wrapperEl.classList.remove('myuibrix-viewport-wrapper'); } catch {}\n try { wrapperEl.removeAttribute('data-myuibrix-wrapped'); } catch {}\n try { wrapperEl.style.width = ''; } catch {}\n try { wrapperEl.style.maxWidth = ''; } catch {}\n try { wrapperEl.style.transition = ''; } catch {}\n try { wrapperEl.style.margin = ''; } catch {}\n try { wrapperEl.style.transform = ''; } catch {}\n try { wrapperEl.style.transformOrigin = ''; } catch {}\n }\n };\n }, [isEditing]);\n\n // Early return if not admin (after all hooks)\n if (!isAdmin) return null;\n\n return (\n <>\n {/* Edit Mode - Active */}\n {isEditing && (\n <>\n {/* Top Control Bar - Actions */}\n <Box\n className=\"myuibrix-toolbar\"\n position=\"fixed\"\n top={0}\n left={0}\n right={0}\n bg=\"rgba(17, 25, 40, 0.55)\"\n color=\"white\"\n p={3}\n zIndex={10000}\n boxShadow=\"0 10px 30px rgba(0,0,0,0.2)\"\n backdropFilter=\"saturate(180%) blur(14px)\"\n borderBottom=\"1px solid rgba(255,255,255,0.12)\"\n fontFamily=\"var(--chakra-fonts-body)\"\n >\n <Flex align=\"center\" justify=\"space-between\" maxW=\"100%\">\n {/* Left: Elementor Logo */}\n <HStack spacing={3}>\n <Box \n bgGradient={`linear(135deg, ${secondaryColor}, ${secondaryColor}dd)`}\n px={4} \n py={2} \n borderRadius=\"xl\" \n color={clubTheme.textOnSecondary || 'black'}\n boxShadow=\"0 4px 12px rgba(0,0,0,0.2)\"\n border=\"2px solid rgba(255,255,255,0.2)\"\n transition=\"all 0.3s\"\n _hover={{ transform: 'translateY(-1px)', boxShadow: '0 6px 16px rgba(0,0,0,0.25)' }}\n >\n <HStack spacing={2} align=\"center\">\n <Icon as={FaFutbol} color=\"white\" boxSize={5} />\n <Text fontWeight=\"800\" fontSize=\"md\" color=\"white\" letterSpacing=\"tight\">\n MyUIbrix\n </Text>\n </HStack>\n </Box>\n <Badge\n bg=\"orange.500\"\n color=\"white\"\n fontSize=\"xs\"\n px={3}\n py={1.5}\n borderRadius=\"full\"\n fontWeight=\"700\"\n display=\"flex\"\n alignItems=\"center\"\n gap={1}\n boxShadow=\"0 2px 8px rgba(237, 137, 54, 0.4)\"\n border=\"1px solid rgba(255,255,255,0.3)\"\n sx={{\n '@keyframes pulseBadge': {\n '0%, 100%': { transform: 'scale(1)', opacity: 1 },\n '50%': { transform: 'scale(1.05)', opacity: 0.9 }\n },\n animation: 'pulseBadge 2s infinite'\n }}\n >\n <Icon as={FiLock} boxSize={3} />\n REŽIM NÁHLEDU\n </Badge>\n <Text fontSize=\"sm\" fontWeight=\"600\" color=\"whiteAlpha.800\">Změny vidíte pouze vy</Text>\n </HStack>\n\n <Text fontSize=\"sm\" fontWeight=\"700\" color=\"whiteAlpha.900\">\n Náhled: Desktop (100%)\n </Text>\n\n {/* Right: Actions */}\n <HStack spacing={2}>\n {/* Viewport toggles */}\n <Tooltip label=\"Mobilní náhled\">\n <IconButton\n aria-label=\"Mobile viewport\"\n icon={<FiSmartphone />}\n size=\"sm\"\n variant={viewport === 'mobile' ? 'solid' : 'ghost'}\n colorScheme={viewport === 'mobile' ? 'blue' : 'whiteAlpha'}\n onClick={() => setViewport('mobile')}\n />\n </Tooltip>\n <Tooltip label=\"Tablet náhled\">\n <IconButton\n aria-label=\"Tablet viewport\"\n icon={<FiTablet />}\n size=\"sm\"\n variant={viewport === 'tablet' ? 'solid' : 'ghost'}\n colorScheme={viewport === 'tablet' ? 'blue' : 'whiteAlpha'}\n onClick={() => setViewport('tablet')}\n />\n </Tooltip>\n <Tooltip label=\"Desktop náhled\">\n <IconButton\n aria-label=\"Desktop viewport\"\n icon={<FiMonitor />}\n size=\"sm\"\n variant={viewport === 'desktop' ? 'solid' : 'ghost'}\n colorScheme={viewport === 'desktop' ? 'blue' : 'whiteAlpha'}\n onClick={() => setViewport('desktop')}\n />\n </Tooltip>\n <Divider orientation=\"vertical\" borderColor=\"whiteAlpha.400\" />\n {/* Undo/Redo */}\n <Tooltip label=\"Zpět (Ctrl+Z)\">\n <IconButton\n aria-label=\"Undo\"\n icon={<FaUndo />}\n size=\"sm\"\n variant=\"ghost\"\n colorScheme=\"whiteAlpha\"\n onClick={undo}\n isDisabled={!canUndo()}\n />\n </Tooltip>\n <Tooltip label=\"Znovu (Ctrl+Shift+Z)\">\n <IconButton\n aria-label=\"Redo\"\n icon={<FaRedo />}\n size=\"sm\"\n variant=\"ghost\"\n colorScheme=\"whiteAlpha\"\n onClick={redo}\n isDisabled={!canRedo()}\n />\n </Tooltip>\n <Button\n leftIcon={<FaPaintBrush />}\n size=\"sm\"\n variant={showStylePanel ? 'solid' : 'outline'}\n colorScheme={showStylePanel ? 'blue' : 'whiteAlpha'}\n onClick={() => setShowStylePanel(!showStylePanel)}\n borderRadius=\"xl\"\n >\n Vizuální styly\n </Button>\n <Tooltip label={stylePanelRight ? 'Ukotvit vlevo' : 'Ukotvit vpravo'}>\n <IconButton\n aria-label=\"Dock panel\"\n icon={stylePanelRight ? <FaAngleLeft /> : <FaAngleRight />}\n size=\"sm\"\n variant=\"ghost\"\n colorScheme=\"whiteAlpha\"\n onClick={() => setStylePanelRight(!stylePanelRight)}\n />\n </Tooltip>\n <Button\n size=\"sm\"\n variant=\"outline\"\n colorScheme=\"whiteAlpha\"\n onClick={handleStartBlank}\n >\n Začít s prázdnou stránkou\n </Button>\n {unsavedCount > 0 && (\n <Badge \n bg=\"yellow.400\" \n color=\"gray.900\"\n fontSize=\"sm\"\n px={3}\n py={1.5}\n borderRadius=\"full\"\n fontWeight=\"700\"\n boxShadow=\"0 2px 8px rgba(250, 204, 21, 0.4)\"\n border=\"1px solid rgba(255,255,255,0.5)\"\n sx={{\n '@keyframes bounce': {\n '0%, 100%': { transform: 'translateY(0)' },\n '50%': { transform: 'translateY(-2px)' }\n },\n animation: 'bounce 1s infinite'\n }}\n >\n {unsavedCount} neuložených změn\n </Badge>\n )}\n <Button\n leftIcon={<FiSave />}\n bgGradient={`linear(135deg, ${secondaryColor}, ${secondaryColor}dd)`}\n color=\"white\"\n size=\"sm\"\n onClick={handleSave}\n isDisabled={!hasChanges}\n fontWeight=\"700\"\n px={6}\n borderRadius=\"xl\"\n boxShadow=\"0 4px 12px rgba(0,0,0,0.2)\"\n border=\"2px solid rgba(255,255,255,0.2)\"\n _hover={{ \n transform: 'translateY(-2px)', \n boxShadow: '0 6px 16px rgba(0,0,0,0.25)'\n }}\n _active={{ transform: 'translateY(0)' }}\n transition=\"all 0.2s\"\n >\n Publikovat\n </Button>\n <IconButton\n aria-label=\"Ukončit\"\n icon={<FiX />}\n size=\"sm\"\n variant=\"ghost\"\n colorScheme=\"whiteAlpha\"\n onClick={handleExitEditing}\n />\n </HStack>\n </Flex>\n </Box>\n {/* Visual Style Panel (anchored, non-movable) */}\n {showStylePanel && (\n <Box\n className=\"myuibrix-panel\"\n position=\"fixed\"\n left={stylePanelRight ? undefined : 0}\n right={stylePanelRight ? 0 : undefined}\n top=\"72px\"\n bottom={0}\n width=\"380px\"\n zIndex={10002}\n overflow=\"hidden\"\n display=\"flex\"\n flexDirection=\"column\"\n fontFamily=\"var(--chakra-fonts-body)\"\n bg=\"rgba(255, 255, 255, 0.95)\"\n backdropFilter=\"blur(12px) saturate(180%)\"\n borderRadius=\"0\"\n boxShadow=\"0 20px 60px rgba(0,0,0,0.3), 0 8px 24px rgba(0,0,0,0.2)\"\n border=\"1px solid rgba(255,255,255,0.3)\"\n sx={{\n '@keyframes slideInLeft': {\n from: { opacity: 0, transform: 'translateX(-40px)' },\n to: { opacity: 1, transform: 'translateX(0)' }\n },\n animation: 'slideInLeft 0.3s cubic-bezier(0.4, 0, 0.2, 1)'\n }}\n >\n <Box \n className=\"panel-header\"\n bgGradient={`linear(135deg, ${primaryColor}, ${primaryColor}dd)`}\n color=\"white\"\n p={3}\n cursor=\"default\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n flexShrink={0}\n borderTopRadius=\"0\"\n boxShadow=\"0 2px 8px rgba(0,0,0,0.1)\"\n borderBottom=\"1px solid rgba(255,255,255,0.2)\"\n >\n <HStack>\n <Icon as={FaPaintBrush} />\n <Text fontWeight=\"bold\" fontSize=\"sm\">Vizuální Styly</Text>\n </HStack>\n <IconButton\n aria-label=\"Zavřít\"\n icon={<FiX />}\n size=\"xs\"\n variant=\"ghost\"\n colorScheme=\"whiteAlpha\"\n onClick={() => setShowStylePanel(false)}\n />\n </Box>\n <Box flex=\"1\" overflow=\"auto\">\n {selectedElement ? (\n <VisualStylePanel\n elementName={selectedElement}\n onStyleChange={(styles) => handleStyleChange(selectedElement, styles)}\n currentStyles={elementStyles[selectedElement]}\n />\n ) : (\n <Box p={4} color=\"gray.600\" fontSize=\"sm\">\n <Text fontWeight=\"bold\" mb={2}>Vyberte sekci</Text>\n <Text>Vyberte sekci na stránce pro úpravu vizuálních stylů. Klikněte na zvýrazněný překryv sekce nebo vyberte ze seznamu vrstev.</Text>\n </Box>\n )}\n </Box>\n </Box>\n )}\n </>\n )}\n\n {/* Floating Control Panel - Minimalist */}\n <Box\n className=\"myuibrix-toolbar\"\n position=\"fixed\"\n left={4}\n bottom={4}\n zIndex={10000}\n bg={isEditing ? 'rgba(255,255,255,0.95)' : primaryColor}\n borderRadius=\"full\"\n boxShadow=\"0 12px 40px rgba(0,0,0,0.25), 0 4px 16px rgba(0,0,0,0.15)\"\n border=\"2px solid\"\n borderColor={isEditing ? selectedBg : primaryColor}\n backdropFilter=\"blur(12px)\"\n transition=\"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\"\n _hover={{ transform: 'scale(1.05)', boxShadow: '0 16px 48px rgba(0,0,0,0.3), 0 6px 20px rgba(0,0,0,0.2)' }}\n >\n <VStack spacing={0}>\n {/* Edit Toggle */}\n <Tooltip label={isEditing ? \"Ukončit režim úprav (ESC)\" : \"Aktivovat MyUIbrix Editor\"} placement=\"right\">\n <IconButton\n aria-label=\"Toggle edit mode\"\n icon={isEditing ? <FiX /> : <FiEdit />}\n colorScheme={isEditing ? \"red\" : \"whiteAlpha\"}\n size=\"lg\"\n onClick={() => {\n if (isEditing) {\n handleExitEditing();\n } else {\n setIsEditing(true);\n }\n }}\n borderRadius=\"full\"\n variant=\"solid\"\n color={isEditing ? undefined : \"white\"}\n _hover={{\n transform: 'scale(1.1)',\n boxShadow: 'lg',\n }}\n transition=\"all 0.2s\"\n />\n </Tooltip>\n\n {isEditing && (\n <>\n <Divider my={1} />\n \n {/* Add Element Button */}\n <Tooltip label=\"Přidat element (A)\" placement=\"right\">\n <IconButton\n aria-label=\"Přidat element\"\n icon={<FaPlus />}\n bgGradient={`linear(135deg, ${primaryColor}, ${primaryColor}dd)`}\n color=\"white\"\n _hover={{ transform: 'scale(1.15) rotate(90deg)', boxShadow: 'lg' }}\n size=\"md\"\n onClick={() => setShowElementPicker(true)}\n borderRadius=\"full\"\n boxShadow=\"0 4px 12px rgba(0,0,0,0.2)\"\n transition=\"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\"\n />\n </Tooltip>\n \n <Divider my={1} />\n \n {/* Layers Panel Toggle */}\n <Tooltip label=\"Vrstvy elementů (L)\" placement=\"right\">\n <IconButton\n aria-label=\"Zobrazit vrstvy\"\n icon={<FiMove />}\n bg={showLayersPanel ? secondaryColor : undefined}\n color={showLayersPanel ? (clubTheme.textOnSecondary || 'black') : undefined}\n _hover={{ bg: secondaryColor, color: clubTheme.textOnSecondary || 'black' }}\n size=\"md\"\n onClick={() => setShowLayersPanel(!showLayersPanel)}\n borderRadius=\"full\"\n variant={showLayersPanel ? \"solid\" : \"ghost\"}\n sx={{\n '&:hover': {\n transform: 'scale(1.1)',\n boxShadow: 'md',\n }\n }}\n transition=\"all 0.2s\"\n />\n </Tooltip>\n \n {hasChanges && (\n <>\n <Divider my={1} />\n <Tooltip label=\"Uložit změny (Ctrl+S)\" placement=\"right\">\n <IconButton\n aria-label=\"Uložit\"\n icon={<FiSave />}\n bgGradient=\"linear(135deg, green.400, green.600)\"\n color=\"white\"\n _hover={{ transform: 'scale(1.2)', bgGradient: 'linear(135deg, green.500, green.700)' }}\n size=\"md\"\n onClick={handleSave}\n borderRadius=\"full\"\n boxShadow=\"0 0 0 0 rgba(72, 187, 120, 0.4)\"\n transition=\"all 0.2s\"\n sx={{\n '@keyframes pulseGreen': {\n '0%, 100%': { boxShadow: '0 0 0 0 rgba(72, 187, 120, 0.6), 0 4px 12px rgba(72, 187, 120, 0.4)' },\n '50%': { boxShadow: '0 0 0 10px rgba(72, 187, 120, 0), 0 6px 16px rgba(72, 187, 120, 0.2)' },\n },\n animation: 'pulseGreen 2s infinite'\n }}\n />\n </Tooltip>\n </>\n )}\n </>\n )}\n </VStack>\n </Box>\n\n {/* Contextual Style Selector - Appears near clicked element */}\n {isEditing && selectedElement && elementPosition && (\n <Portal>\n <Box\n className=\"myuibrix-panel\"\n ref={overlayRef}\n position=\"fixed\"\n top={panelPositions.stylePicker.y === 0 ? `${Math.min(elementPosition.top + elementPosition.height + 10, window.innerHeight - 450)}px` : `${panelPositions.stylePicker.y}px`}\n left={panelPositions.stylePicker.x === 0 ? `${Math.min(elementPosition.left, window.innerWidth - 380)}px` : `${panelPositions.stylePicker.x}px`}\n width={`${panelPositions.stylePicker.width}px`}\n height={`${panelPositions.stylePicker.height}px`}\n bg=\"rgba(255, 255, 255, 0.98)\"\n backdropFilter=\"blur(16px) saturate(180%)\"\n borderRadius=\"2xl\"\n boxShadow=\"0 24px 70px rgba(0,0,0,0.3), 0 10px 30px rgba(0,0,0,0.22), inset 0 1px 0 rgba(255,255,255,0.5)\"\n border=\"2px solid\"\n borderColor=\"rgba(255,255,255,0.4)\"\n zIndex={10001}\n overflow=\"hidden\"\n onMouseDown={(e) => handlePanelMouseDown('stylePicker', e)}\n cursor={draggingPanel === 'stylePicker' ? 'grabbing' : 'default'}\n fontFamily=\"var(--chakra-fonts-body)\"\n sx={{\n '@keyframes slideInBounce': {\n '0%': { opacity: 0, transform: 'translateY(-30px) scale(0.9)' },\n '60%': { opacity: 1, transform: 'translateY(5px) scale(1.02)' },\n '100%': { opacity: 1, transform: 'translateY(0) scale(1)' },\n },\n animation: 'slideInBounce 0.4s cubic-bezier(0.34, 1.56, 0.64, 1)',\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: '2px',\n background: `linear-gradient(90deg, ${selectedBg}, transparent)`,\n opacity: 0.6\n }\n }}\n >\n {/* Header */}\n <Flex\n className=\"panel-header\"\n bgGradient={`linear(135deg, ${selectedBg}, ${selectedBg}dd)`}\n color=\"white\"\n p={4}\n align=\"center\"\n justify=\"space-between\"\n cursor=\"move\"\n borderTopRadius=\"2xl\"\n boxShadow=\"0 4px 12px rgba(0,0,0,0.1)\"\n borderBottom=\"1px solid rgba(255,255,255,0.2)\"\n >\n <HStack>\n <FiSettings />\n <Heading size=\"sm\" textTransform=\"uppercase\" letterSpacing=\"wider\" fontWeight=\"800\">\n {PREDEFINED_ELEMENTS.find(e => e.name === selectedElement)?.label || selectedElement}\n </Heading>\n </HStack>\n <HStack spacing={1}>\n <Tooltip label=\"Přesunout nahoru\">\n <IconButton\n aria-label=\"Přesunout nahoru\"\n icon={<FiChevronUp />}\n size=\"sm\"\n variant=\"ghost\"\n colorScheme=\"whiteAlpha\"\n onClick={() => handleMoveUp(selectedElement)}\n isDisabled={elementOrder.indexOf(selectedElement) === 0}\n />\n </Tooltip>\n <Tooltip label=\"Přesunout dolů\">\n <IconButton\n aria-label=\"Přesunout dolů\"\n icon={<FiChevronDown />}\n size=\"sm\"\n variant=\"ghost\"\n colorScheme=\"whiteAlpha\"\n onClick={() => handleMoveDown(selectedElement)}\n isDisabled={elementOrder.indexOf(selectedElement) === elementOrder.length - 1}\n />\n </Tooltip>\n <Divider orientation=\"vertical\" h=\"20px\" borderColor=\"whiteAlpha.400\" />\n <Tooltip label=\"Odebrat element\">\n <IconButton\n aria-label=\"Odebrat element\"\n icon={<FiTrash2 />}\n size=\"sm\"\n variant=\"ghost\"\n colorScheme=\"whiteAlpha\"\n onClick={() => handleRemoveElement(selectedElement)}\n />\n </Tooltip>\n <IconButton\n aria-label=\"Zavřít\"\n icon={<FiX />}\n size=\"sm\"\n variant=\"ghost\"\n colorScheme=\"whiteAlpha\"\n onClick={() => setSelectedElement(null)}\n borderRadius=\"full\"\n />\n </HStack>\n </Flex>\n\n {/* Variant Grid */}\n <VStack align=\"stretch\" p={4} spacing={3} maxH=\"450px\" overflowY=\"auto\">\n {/* Position Info */}\n <Flex justify=\"space-between\" align=\"center\" pb={2}>\n <HStack spacing={2}>\n <FiMove size={14} />\n <Text fontSize=\"xs\" fontWeight=\"bold\" color=\"gray.500\" textTransform=\"uppercase\">\n Pozice {elementOrder.indexOf(selectedElement) + 1} z {elementOrder.length}\n </Text>\n </HStack>\n <HStack spacing={1}>\n <IconButton\n aria-label=\"Přesunout nahoru\"\n icon={<FiChevronUp />}\n size=\"xs\"\n variant=\"ghost\"\n onClick={() => handleMoveUp(selectedElement)}\n isDisabled={elementOrder.indexOf(selectedElement) === 0}\n />\n <IconButton\n aria-label=\"Přesunout dolů\"\n icon={<FiChevronDown />}\n size=\"xs\"\n variant=\"ghost\"\n onClick={() => handleMoveDown(selectedElement)}\n isDisabled={elementOrder.indexOf(selectedElement) === elementOrder.length - 1}\n />\n </HStack>\n </Flex>\n \n <Divider />\n \n <Text fontSize=\"xs\" fontWeight=\"bold\" color=\"gray.500\" textTransform=\"uppercase\">\n Vyberte Styl\n </Text>\n \n <SimpleGrid columns={2} spacing={3}>\n {currentVariants.map((variant) => {\n const isActive = currentVariant === variant.value;\n return (\n <Box\n key={variant.value}\n p={3}\n borderRadius=\"lg\"\n border=\"2px\"\n borderColor={isActive ? selectedBg : borderColor}\n bg={isActive ? useColorModeValue('blue.50', 'blue.900') : 'transparent'}\n cursor=\"pointer\"\n transition=\"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\"\n _hover={{\n borderColor: selectedBg,\n transform: 'translateY(-4px) scale(1.02)',\n boxShadow: 'lg',\n }}\n _active={{\n transform: 'translateY(-2px) scale(0.98)',\n }}\n onClick={() => handleVariantChange(selectedElement, variant.value)}\n position=\"relative\"\n >\n {isActive && (\n <Badge\n position=\"absolute\"\n top={1}\n right={1}\n colorScheme=\"green\"\n fontSize=\"9px\"\n >\n AKTIVNÍ\n </Badge>\n )}\n <VStack align=\"start\" spacing={1}>\n <Text fontWeight=\"bold\" fontSize=\"sm\">\n {variant.label}\n </Text>\n <Text fontSize=\"xs\" color=\"gray.500\" noOfLines={2}>\n {variant.description}\n </Text>\n </VStack>\n </Box>\n );\n })}\n </SimpleGrid>\n\n <Divider />\n\n {/* Quick Actions */}\n <HStack justify=\"space-between\">\n <Text fontSize=\"xs\" color=\"gray.500\">\n {currentVariants.length} dostupných stylů\n </Text>\n <Badge colorScheme={hasChanges ? 'orange' : 'gray'}>\n {hasChanges ? 'Změněno' : 'Uloženo'}\n </Badge>\n </HStack>\n </VStack>\n {/* Resize handle */}\n <Box\n position=\"absolute\"\n bottom={0}\n right={0}\n width=\"24px\"\n height=\"24px\"\n cursor=\"nwse-resize\"\n bgGradient=\"linear(135deg, transparent, rgba(0,0,0,0.15))\"\n opacity={0.4}\n _hover={{ opacity: 1, bgGradient: 'linear(135deg, transparent, rgba(0,0,0,0.25))' }}\n onMouseDown={(e) => handleResizeStart('stylePicker', e)}\n sx={{\n clipPath: 'polygon(100% 0, 100% 100%, 0 100%)'\n }}\n transition=\"all 0.2s\"\n />\n </Box>\n </Portal>\n )}\n\n {/* Unsaved Changes Indicator */}\n {false && isEditing && hasChanges && (\n <Box\n position=\"fixed\"\n top={4}\n right={4}\n zIndex={10000}\n bgGradient=\"linear(135deg, orange.400, orange.600)\"\n color=\"white\"\n px={5}\n py={2.5}\n borderRadius=\"full\"\n boxShadow=\"0 8px 24px rgba(237, 137, 54, 0.4), 0 4px 12px rgba(0,0,0,0.2)\"\n fontSize=\"sm\"\n fontWeight=\"800\"\n display=\"flex\"\n alignItems=\"center\"\n gap={2}\n border=\"2px solid rgba(255,255,255,0.3)\"\n backdropFilter=\"blur(8px)\"\n sx={{\n '@keyframes wiggle': {\n '0%, 100%': { transform: 'rotate(0deg)' },\n '25%': { transform: 'rotate(-3deg)' },\n '75%': { transform: 'rotate(3deg)' }\n },\n animation: 'wiggle 2s infinite'\n }}\n >\n <Icon as={FiAlertTriangle} boxSize={4} />\n Neuložené změny: {Object.keys(localChanges).filter(k => localChanges[k] !== (configs.find(c => c.element_name === k)?.variant)).length}\n </Box>\n )}\n\n {/* Help Hint */}\n {isEditing && showHelpHint && !selectedElement && (\n <Box\n position=\"fixed\"\n top=\"50%\"\n left=\"50%\"\n transform=\"translate(-50%, -50%)\"\n bg=\"rgba(255, 255, 255, 0.98)\"\n backdropFilter=\"blur(20px) saturate(180%)\"\n p={8}\n borderRadius=\"3xl\"\n boxShadow=\"0 30px 90px rgba(0,0,0,0.3), 0 12px 40px rgba(0,0,0,0.22)\"\n border=\"2px solid\"\n borderColor=\"rgba(255,255,255,0.4)\"\n zIndex={9999}\n maxW=\"450px\"\n textAlign=\"center\"\n fontFamily=\"var(--chakra-fonts-body)\"\n sx={{\n '@keyframes fadeInScale': {\n '0%': { opacity: 0, transform: 'translate(-50%, -50%) scale(0.8)' },\n '100%': { opacity: 1, transform: 'translate(-50%, -50%) scale(1)' },\n },\n animation: 'fadeInScale 0.4s cubic-bezier(0.34, 1.56, 0.64, 1)'\n }}\n >\n <IconButton\n aria-label=\"Zavřít nápovědu\"\n icon={<FiX />}\n size=\"sm\"\n position=\"absolute\"\n top={2}\n right={2}\n variant=\"ghost\"\n onClick={() => setShowHelpHint(false)}\n />\n <VStack spacing={3}>\n <Box fontSize=\"48px\">👆</Box>\n <Heading size=\"md\">Klikněte na element pro úpravu</Heading>\n <Text color=\"gray.500\" fontSize=\"sm\">\n • Přejetím myši zvýrazníte sekce\n <br />\n • Klikněte přímo na element pro úpravu stylu\n <br />\n • Použijte tlačítka ⬆️⬇️ pro změnu pozice\n <br />\n • Klikněte na 🗑️ pro odstranění\n <br />\n • Přepněte viewport pro test responzivity\n </Text>\n <Button\n size=\"sm\"\n colorScheme=\"blue\"\n onClick={() => {\n setShowHelpHint(false);\n setShowElementPicker(true);\n }}\n leftIcon={<FaPlus />}\n >\n Přidat nový element\n </Button>\n </VStack>\n </Box>\n )}\n\n {/* Grid insertion pickers */}\n {containerGridCols > 1 && (\n <Box p={4} borderBottom=\"1px\" borderColor=\"gray.100\" bg=\"white\">\n <VStack align=\"stretch\" spacing={2}>\n <Text fontSize=\"sm\" fontWeight=\"bold\" color=\"gray.600\">Vložit do sloupce</Text>\n <HStack spacing={2} flexWrap=\"wrap\">\n {Array.from({ length: containerGridCols }).map((_, col) => (\n <Button\n key={col}\n size=\"sm\"\n variant={pendingInsertIndex != null && (pendingInsertIndex % containerGridCols) === col ? 'solid' : 'outline'}\n colorScheme={pendingInsertIndex != null && (pendingInsertIndex % containerGridCols) === col ? 'blue' : 'gray'}\n onClick={(e) => {\n e.stopPropagation();\n const idx = computeInsertIndexForColumn(col);\n setPendingInsertIndex(idx);\n toast({ title: 'Pozice zvolena', description: `Sloupec ${col + 1}`, status: 'info', duration: 1500 });\n }}\n >\n Sloupec {col + 1}\n </Button>\n ))}\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setPendingInsertIndex(null)}>Zrušit pozici</Button>\n </HStack>\n </VStack>\n </Box>\n )}\n\n {/* Layers Panel - Visual element list with drag-drop */}\n {isEditing && showLayersPanel && (\n <Box\n className=\"myuibrix-panel\"\n position=\"fixed\"\n left={panelPositions.layersPanel.x === 0 ? undefined : `${panelPositions.layersPanel.x}px`}\n right={panelPositions.layersPanel.x === 0 ? 4 : undefined}\n top={panelPositions.layersPanel.y === 0 ? '72px' : `${panelPositions.layersPanel.y}px`}\n bottom={panelPositions.layersPanel.y === 0 ? 4 : undefined}\n transform={undefined}\n width={`${panelPositions.layersPanel.width}px`}\n height={panelPositions.layersPanel.y === 0 ? 'auto' : `${panelPositions.layersPanel.height}px`}\n bg=\"rgba(255, 255, 255, 0.97)\"\n backdropFilter=\"blur(16px) saturate(180%)\"\n borderRadius=\"2xl\"\n boxShadow=\"0 24px 70px rgba(0,0,0,0.3), 0 10px 30px rgba(0,0,0,0.22)\"\n border=\"2px solid\"\n borderColor=\"rgba(255,255,255,0.4)\"\n zIndex={10001}\n overflow=\"hidden\"\n onMouseDown={(e) => handlePanelMouseDown('layersPanel', e)}\n cursor={draggingPanel === 'layersPanel' ? 'grabbing' : 'default'}\n fontFamily=\"var(--chakra-fonts-body)\"\n display=\"flex\"\n flexDirection=\"column\"\n sx={{\n '@keyframes slideInRight': {\n from: { opacity: 0, transform: 'translateX(40px)' },\n to: { opacity: 1, transform: 'translateX(0)' }\n },\n animation: 'slideInRight 0.3s cubic-bezier(0.4, 0, 0.2, 1)'\n }}\n >\n {/* Header */}\n <Flex\n className=\"panel-header\"\n bgGradient={`linear(135deg, ${secondaryColor}, ${secondaryColor}dd)`}\n color=\"white\"\n p={4}\n align=\"center\"\n justify=\"space-between\"\n cursor=\"move\"\n borderTopRadius=\"2xl\"\n boxShadow=\"0 4px 12px rgba(0,0,0,0.15)\"\n borderBottom=\"1px solid rgba(255,255,255,0.2)\"\n >\n <HStack>\n <FiMove />\n <Heading size=\"sm\" fontWeight=\"800\" letterSpacing=\"wide\">Vrstvy Elementů</Heading>\n </HStack>\n <IconButton\n aria-label=\"Zavřít\"\n icon={<FiX />}\n size=\"sm\"\n variant=\"ghost\"\n colorScheme=\"whiteAlpha\"\n onClick={() => setShowLayersPanel(false)}\n />\n </Flex>\n\n {/* Blank layout action */}\n <Box p={2} borderBottom=\"1px\" borderColor=\"whiteAlpha.400\" bg=\"whiteAlpha.200\">\n <HStack justify=\"space-between\">\n <Text fontSize=\"xs\" opacity={0.85}>Začít s prázdným rozložením</Text>\n <Button size=\"xs\" variant=\"outline\" onClick={handleStartBlank}>\n Začít s prázdným rozložením\n </Button>\n </HStack>\n </Box>\n\n {/* Layers List */}\n <VStack align=\"stretch\" p={3} spacing={2} flex={1} overflowY=\"auto\">\n {elementOrder.map((elementName, index) => {\n const element = PREDEFINED_ELEMENTS.find(e => e.name === elementName);\n const isVisible = visibleElements.has(elementName);\n const isSelected = selectedElement === elementName;\n \n const isDragging = draggedElement === elementName;\n const isDragOver = dragOverElement === elementName;\n \n return (\n <Box\n key={elementName}\n p={3}\n borderRadius=\"lg\"\n border=\"2px\"\n borderColor={isDragOver ? primaryColor : isSelected ? secondaryColor : 'gray.200'}\n bgGradient={isDragging ? 'linear(to-r, gray.100, gray.200)' : isSelected ? `linear(135deg, ${secondaryColor}15, ${secondaryColor}25)` : isVisible ? 'linear(to-r, white, gray.50)' : 'linear(to-r, gray.100, gray.150)'}\n cursor={isDragging ? 'grabbing' : 'grab'}\n opacity={isDragging ? 0.6 : isVisible ? 1 : 0.5}\n transition=\"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\"\n transform={isDragOver ? 'scale(1.03) translateX(8px)' : undefined}\n boxShadow={isSelected ? '0 4px 12px rgba(0,0,0,0.1)' : '0 2px 4px rgba(0,0,0,0.05)'}\n _hover={{\n borderColor: secondaryColor,\n transform: isDragOver ? 'scale(1.03) translateX(8px)' : 'translateX(6px) translateY(-2px)',\n boxShadow: '0 6px 16px rgba(0,0,0,0.12)'\n }}\n draggable\n onDragStart={(e) => {\n handleDragStart(elementName, e);\n (e.target as HTMLElement).style.cursor = 'grabbing';\n }}\n onDragEnd={(e) => {\n (e.target as HTMLElement).style.cursor = 'grab';\n handleDragEnd();\n }}\n onDragOver={(e) => handleDragOver(e, elementName)}\n onDragLeave={(e) => handleDragLeave(e)}\n onDrop={(e) => handleDrop(e, elementName)}\n onClick={() => {\n setSelectedElement(elementName);\n const el = safeDOM.querySelector(`[data-element=\"${elementName}\"]`);\n if (el) {\n const rect = el.getBoundingClientRect();\n setElementPosition({\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n });\n }\n }}\n >\n <Flex align=\"center\" justify=\"space-between\">\n <HStack flex={1} spacing={2}>\n <Icon \n as={FaGripVertical} \n boxSize={4} \n color=\"gray.400\"\n cursor=\"grab\"\n _active={{ cursor: 'grabbing' }}\n />\n <Box\n p={2}\n bg={isSelected ? secondaryColor : `${secondaryColor}20`}\n borderRadius=\"lg\"\n transition=\"all 0.2s\"\n >\n <Icon as={element?.icon || FaCube} boxSize={5} color={isSelected ? 'white' : secondaryColor} />\n </Box>\n <VStack align=\"start\" spacing={0} flex={1}>\n <Text fontWeight=\"bold\" fontSize=\"sm\">\n {element?.label || elementName}\n </Text>\n <Text fontSize=\"xs\" color=\"gray.500\">\n Pozice {index + 1}\n </Text>\n </VStack>\n </HStack>\n \n <HStack spacing={1}>\n <IconButton\n aria-label=\"Přesunout nahoru\"\n icon={<FiChevronUp />}\n size=\"xs\"\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n handleMoveUp(elementName);\n }}\n isDisabled={index === 0}\n />\n <IconButton\n aria-label=\"Přesunout dolů\"\n icon={<FiChevronDown />}\n size=\"xs\"\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n handleMoveDown(elementName);\n }}\n isDisabled={index === elementOrder.length - 1}\n />\n <IconButton\n aria-label={isVisible ? \"Skrýt\" : \"Zobrazit\"}\n icon={<FiEyeOff />}\n size=\"xs\"\n variant=\"ghost\"\n colorScheme={isVisible ? \"gray\" : \"red\"}\n onClick={(e) => {\n e.stopPropagation();\n if (isVisible) {\n handleRemoveElement(elementName);\n } else {\n const newVisible = new Set(visibleElements);\n newVisible.add(elementName);\n setVisibleElements(newVisible);\n setHasChanges(true);\n // Live preview: show element again\n if (isEditing) {\n window.dispatchEvent(new CustomEvent('myuibrix-change', {\n detail: { elementName, variant: localChanges[elementName], visible: true, previewMode: true }\n }));\n }\n // Restore element display and re-apply current visual order\n setTimeout(() => {\n const el = safeDOM.querySelector(`[data-element=\"${elementName}\"]`);\n if (el) {\n (el as HTMLElement).style.display = '';\n }\n applyVisualReorder(elementOrder);\n }, 0);\n }\n }}\n />\n </HStack>\n </Flex>\n </Box>\n );\n })}\n \n {elementOrder.length === 0 && (\n <Box textAlign=\"center\" py={8}>\n <Icon as={FaBoxOpen} boxSize={12} color=\"gray.300\" mb={3} />\n <Text fontSize=\"sm\" color=\"gray.500\" fontWeight=\"bold\">\n Zatím žádné elementy\n </Text>\n <Text fontSize=\"xs\" color=\"gray.400\" mb={3}>\n Začněte přidáním prvého elementu\n </Text>\n <Button\n size=\"sm\"\n bg={primaryColor}\n color=\"white\"\n _hover={{ opacity: 0.9 }}\n leftIcon={<FaPlus />}\n onClick={() => {\n setShowLayersPanel(false);\n setShowElementPicker(true);\n }}\n >\n Přidat Element\n </Button>\n </Box>\n )}\n </VStack>\n {/* Resize handle */}\n <Box\n position=\"absolute\"\n bottom={0}\n right={0}\n width=\"20px\"\n height=\"20px\"\n cursor=\"nwse-resize\"\n bg=\"gray.400\"\n opacity={0.6}\n _hover={{ opacity: 1 }}\n onMouseDown={(e) => handleResizeStart('layersPanel', e)}\n sx={{\n clipPath: 'polygon(100% 0, 100% 100%, 0 100%)'\n }}\n />\n </Box>\n )}\n\n {/* Element Picker Modal */}\n {showElementPicker && (\n <Portal>\n <Box\n position=\"fixed\"\n top={0}\n left={0}\n right={0}\n bottom={0}\n bg=\"blackAlpha.700\"\n backdropFilter=\"blur(8px)\"\n zIndex={10002}\n onClick={() => {\n setShowElementPicker(false);\n setSearchQuery('');\n setSelectedCategory('all');\n }}\n sx={{\n '@keyframes fadeInBackdrop': {\n from: { opacity: 0 },\n to: { opacity: 1 }\n },\n animation: 'fadeInBackdrop 0.2s ease-out'\n }}\n />\n <Box\n className=\"myuibrix-panel\"\n position=\"fixed\"\n left={panelPositions.elementPicker.x === 0 ? \"50%\" : `${panelPositions.elementPicker.x}px`}\n top={panelPositions.elementPicker.y === 0 ? \"50%\" : `${panelPositions.elementPicker.y}px`}\n transform={panelPositions.elementPicker.x === 0 && panelPositions.elementPicker.y === 0 ? \"translate(-50%, -50%)\" : undefined}\n width={`${panelPositions.elementPicker.width}px`}\n height={`${panelPositions.elementPicker.height}px`}\n maxWidth=\"90vw\"\n bg=\"rgba(255, 255, 255, 0.98)\"\n backdropFilter=\"blur(20px) saturate(180%)\"\n borderRadius=\"3xl\"\n boxShadow=\"0 40px 120px rgba(0,0,0,0.4), 0 16px 50px rgba(0,0,0,0.3)\"\n border=\"2px solid\"\n borderColor=\"rgba(255,255,255,0.5)\"\n zIndex={10003}\n overflow=\"hidden\"\n onMouseDown={(e) => handlePanelMouseDown('elementPicker', e)}\n cursor={draggingPanel === 'elementPicker' ? 'grabbing' : 'default'}\n fontFamily=\"var(--chakra-fonts-body)\"\n sx={{\n '@keyframes modalZoomIn': {\n '0%': { opacity: 0, transform: panelPositions.elementPicker.x === 0 && panelPositions.elementPicker.y === 0 ? 'translate(-50%, -50%) scale(0.85)' : 'scale(0.85)' },\n '100%': { opacity: 1, transform: panelPositions.elementPicker.x === 0 && panelPositions.elementPicker.y === 0 ? 'translate(-50%, -50%) scale(1)' : 'scale(1)' }\n },\n animation: 'modalZoomIn 0.3s cubic-bezier(0.34, 1.56, 0.64, 1)'\n }}\n >\n {/* Header */}\n <Flex\n className=\"panel-header\"\n bgGradient={`linear(135deg, ${primaryColor}, ${primaryColor}dd)`}\n color=\"white\"\n p={5}\n align=\"center\"\n justify=\"space-between\"\n cursor=\"move\"\n borderTopRadius=\"3xl\"\n boxShadow=\"0 6px 16px rgba(0,0,0,0.15)\"\n borderBottom=\"1px solid rgba(255,255,255,0.2)\"\n >\n <HStack spacing={3}>\n <Box\n p={2}\n bg=\"whiteAlpha.300\"\n borderRadius=\"lg\"\n backdropFilter=\"blur(8px)\"\n >\n <Icon as={FaPlus} boxSize={6} />\n </Box>\n <Heading size=\"md\" fontWeight=\"900\" letterSpacing=\"tight\">Přidat Element</Heading>\n </HStack>\n <IconButton\n aria-label=\"Zavřít\"\n icon={<FiX />}\n size=\"sm\"\n variant=\"ghost\"\n colorScheme=\"whiteAlpha\"\n onClick={() => {\n setShowElementPicker(false);\n setSearchQuery('');\n setSelectedCategory('all');\n }}\n />\n </Flex>\n\n {/* Search and Filter Bar */}\n <Box p={5} borderBottom=\"1px\" borderColor=\"gray.100\" bg=\"gray.50\">\n <VStack spacing={4}>\n <Input\n placeholder=\"🔍 Hledat element...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n size=\"lg\"\n bg=\"white\"\n borderRadius=\"xl\"\n border=\"2px solid\"\n borderColor=\"gray.200\"\n _hover={{ borderColor: primaryColor }}\n _focus={{ borderColor: primaryColor, boxShadow: `0 0 0 3px ${primaryColor}33` }}\n fontSize=\"md\"\n fontWeight=\"500\"\n transition=\"all 0.2s\"\n />\n <HStack spacing={2} w=\"full\" overflowX=\"auto\" pb={1}>\n {[\n { value: 'all', label: 'Všechny', icon: FaCube },\n { value: 'layout', label: 'Rozvržení', icon: FaThLarge },\n { value: 'content', label: 'Obsah', icon: FaNewspaper },\n { value: 'media', label: 'Média', icon: FaPhotoVideo },\n { value: 'interactive', label: 'Interaktivní', icon: FaGamepad },\n ].map((cat) => (\n <Button\n key={cat.value}\n size=\"md\"\n variant={selectedCategory === cat.value ? 'solid' : 'outline'}\n bgGradient={selectedCategory === cat.value ? `linear(135deg, ${primaryColor}, ${primaryColor}dd)` : undefined}\n color={selectedCategory === cat.value ? 'white' : 'gray.700'}\n borderColor={selectedCategory === cat.value ? 'transparent' : 'gray.300'}\n borderRadius=\"xl\"\n fontWeight=\"700\"\n boxShadow={selectedCategory === cat.value ? '0 4px 12px rgba(0,0,0,0.15)' : 'none'}\n _hover={{ \n bg: selectedCategory === cat.value ? undefined : 'gray.100',\n transform: 'translateY(-2px)',\n boxShadow: selectedCategory === cat.value ? '0 6px 16px rgba(0,0,0,0.2)' : '0 2px 8px rgba(0,0,0,0.1)'\n }}\n onClick={() => setSelectedCategory(cat.value)}\n leftIcon={<Icon as={cat.icon} />}\n minW=\"fit-content\"\n transition=\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"\n >\n {cat.label}\n </Button>\n ))}\n </HStack>\n </VStack>\n </Box>\n\n {/* Element Grid by Category */}\n <VStack align=\"stretch\" p={4} spacing={4} maxH=\"calc(80vh - 200px)\" overflowY=\"auto\">\n {['layout', 'content', 'media', 'interactive'].map((category) => {\n // Filter by category selection\n if (selectedCategory !== 'all' && selectedCategory !== category) return null;\n \n // IMPORTANT: Only show elements that are actually implemented on this page\n const implementedForThisPage = pageType === 'homepage' ? HOMEPAGE_IMPLEMENTED_ELEMENTS : [];\n \n const elements = PREDEFINED_ELEMENTS.filter(e => \n e.category === category && \n (implementedForThisPage.length === 0 || implementedForThisPage.includes(e.name))\n );\n \n const availableElements = elements.filter(e => {\n // Filter by search query only; allow duplicates (we'll warn and move existing)\n if (searchQuery) {\n const query = searchQuery.toLowerCase();\n return e.label.toLowerCase().includes(query) || \n e.description.toLowerCase().includes(query);\n }\n return true;\n });\n \n if (availableElements.length === 0) return null;\n \n const categoryLabels = {\n layout: 'Rozvržení',\n content: 'Obsah',\n media: 'Média',\n interactive: 'Interaktivní'\n };\n \n return (\n <Box key={category}>\n <Text fontSize=\"sm\" fontWeight=\"bold\" color=\"gray.500\" textTransform=\"uppercase\" mb={2}>\n {categoryLabels[category as keyof typeof categoryLabels]}\n </Text>\n <SimpleGrid columns={{ base: 1, md: 2 }} spacing={3}>\n {availableElements.map((element) => (\n <Box\n key={element.name}\n p={4}\n borderRadius=\"xl\"\n border=\"2px solid\"\n borderColor=\"gray.200\"\n bg=\"white\"\n cursor=\"pointer\"\n transition=\"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\"\n _hover={{\n borderColor: primaryColor,\n transform: 'translateY(-4px) scale(1.02)',\n boxShadow: `0 8px 24px rgba(0,0,0,0.12), 0 0 0 2px ${primaryColor}22`,\n bg: `${primaryColor}05`\n }}\n _active={{\n transform: 'translateY(-2px) scale(1)'\n }}\n onClick={() => handleAddElement(element.name)}\n >\n <HStack spacing={3}>\n <Box\n p={3}\n bgGradient={`linear(135deg, ${primaryColor}15, ${primaryColor}25)`}\n borderRadius=\"xl\"\n transition=\"all 0.2s\"\n >\n <Icon as={element.icon} boxSize={6} color={primaryColor} />\n </Box>\n <VStack align=\"start\" spacing={0} flex={1}>\n <Text fontWeight=\"bold\" fontSize=\"sm\">\n {element.label}\n </Text>\n <Text fontSize=\"xs\" color=\"gray.500\">\n {element.description}\n </Text>\n </VStack>\n <Icon as={FaPlus} color={primaryColor} />\n </HStack>\n </Box>\n ))}\n </SimpleGrid>\n </Box>\n );\n })}\n \n {PREDEFINED_ELEMENTS.every(e => visibleElements.has(e.name)) && (\n <Box textAlign=\"center\" py={8}>\n <Icon as={FaSmile} boxSize={8} color={primaryColor} mb={2} />\n <Text fontSize=\"lg\" fontWeight=\"bold\" mb={2}>\n Všechny elementy přidány!\n </Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n Používáte všechny dostupné elementy\n </Text>\n </Box>\n )}\n \n {/* No results message */}\n {!PREDEFINED_ELEMENTS.some(e => {\n const matchesCategory = selectedCategory === 'all' || e.category === selectedCategory;\n const matchesSearch = !searchQuery || \n e.label.toLowerCase().includes(searchQuery.toLowerCase()) || \n e.description.toLowerCase().includes(searchQuery.toLowerCase());\n return !visibleElements.has(e.name) && matchesCategory && matchesSearch;\n }) && !PREDEFINED_ELEMENTS.every(e => visibleElements.has(e.name)) && (\n <Box textAlign=\"center\" py={8}>\n <Icon as={FaExclamationCircle} boxSize={8} color=\"gray.400\" mb={2} />\n <Text fontSize=\"md\" fontWeight=\"bold\" mb={1}>\n Žádné výsledky\n </Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n Zkuste změnit vyhledávací dotaz nebo filtr\n </Text>\n </Box>\n )}\n </VStack>\n {/* Resize handle */}\n <Box\n position=\"absolute\"\n bottom={0}\n right={0}\n width=\"24px\"\n height=\"24px\"\n cursor=\"nwse-resize\"\n bgGradient=\"linear(135deg, transparent, rgba(0,0,0,0.15))\"\n opacity={0.4}\n _hover={{ opacity: 1, bgGradient: 'linear(135deg, transparent, rgba(0,0,0,0.25))' }}\n onMouseDown={(e) => handleResizeStart('elementPicker', e)}\n sx={{\n clipPath: 'polygon(100% 0, 100% 100%, 0 100%)'\n }}\n transition=\"all 0.2s\"\n />\n </Box>\n </Portal>\n )}\n </>\n );\n};\n\nexport default MyUIbrixStyleEditor;\n"],"names":["safeDOM","appendChild","parent","child","contains","e","console","warn","removeChild","replaceChild","newChild","oldChild","selector","document","querySelector","Array","from","querySelectorAll","ELEMENT_TSX_CONTEXT","hero","tsx","trim","selectors","notes","matches","news","table","sponsors","_ref","elementName","onCSSChange","currentCSS","currentStyles","theme","css","setCSS","useState","isValid","setIsValid","preview","setPreview","aiPrompt","setAIPrompt","aiLoading","setAILoading","toast","useToast","borderColor","useColorModeValue","useEffect","collectAIContext","elName","rootSelector","concat","el","container","cssVars","style","getComputedStyle","documentElement","out","forEach","k","v","getPropertyValue","elComputed","computed","display","gridTemplateColumns","gridTemplateRows","gap","justifyItems","alignItems","color","backgroundColor","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","margin","marginTop","marginRight","marginBottom","marginLeft","fontFamily","fontSize","rect","getBoundingClientRect","neighborInfo","names","map","n","getAttribute","index","findIndex","prev","next","length","total","previous","_unused2","containerComputed","containerInfo","gridAutoFlow","rootHtml","outerHTML","slice","tsxCtx","page_path","window","location","pathname","element","name","variant","classList","attributes","a","value","width","height","undefined","root_html_snapshot","neighbors","css_variables","tsx_snippet","known_selectors","design_notes","_unused3","applyCSS","cssString","existingStyle","getElementById","remove","createElement","id","test","textContent","importantDecls","split","s","filter","Boolean","join","head","_jsx","Box","children","_jsxs","Tabs","size","colorScheme","TabList","Tab","HStack","spacing","FiCode","Text","FiEye","FiZap","TabPanels","TabPanel","p","VStack","align","justify","fontWeight","textTransform","Button","leftIcon","onClick","FiRefreshCw","handleReset","Alert","status","borderRadius","AlertIcon","Textarea","onChange","valid","match","_unused","validateCSS","handleCSSChange","target","placeholder","minHeight","bg","_focus","boxShadow","Divider","FiSave","handleSave","title","description","duration","isDisabled","label","code","example","border","cursor","transition","_hover","transform","mb","Code","whiteSpace","flexWrap","t","idx","Spinner","isLoading","async","payload","prompt","element_name","root_selector","current_css","current_styles","breakpoints","context","res","generateCSSAI","message","bgColor","links","url","icon","FiFileText","FiImage","FiTag","FiSettings","FiCalendar","team","FiUsers","videos","FiVideo","gallery","merch","FiShoppingCart","newsletter","FiMail","Icon","as","FiExternalLink","divider","link","Link","href","textDecoration","isExternal","flex","boxSize","badge","Badge","textAlign","_FONT_PAIRINGS$","onStyleChange","clubTheme","useClubTheme","primaryColor","primary","styles","setStyles","_objectSpread","lineHeight","letterSpacing","gridColumnGap","gridRowGap","customCSS","updateStyle","key","newStyles","pairingId","setPairingId","FONT_PAIRINGS","selectedPairing","useMemo","find","curatedFonts","Map","set","heading","googleFontsUrl","body","values","borderRight","overflowY","pt","px","FiType","ml","FiLayout","FiColumns","FormControl","FormLabel","Select","pp","loadGoogleFont","mt","cssHeading","cssBody","val","found","f","NumberInput","min","max","_","NumberInputField","NumberInputStepper","NumberIncrementStepper","NumberDecrementStepper","Slider","step","SliderTrack","SliderFilledTrack","SliderThumb","minW","toFixed","ColorPicker","hex","recentStorageKey","my","Switch","isChecked","checked","sx","_Fragment","justifyContent","FiSmartphone","FaColumns","FiBarChart2","FiGrid","FaRegNewspaper","FaRegSquare","FiSidebar","Input","CustomCSSEditor","secondary","accent","ContextualAdminLinks","HOMEPAGE_IMPLEMENTED_ELEMENTS","DEFAULT_HOMEPAGE_ELEMENTS","page_type","visible","display_order","settings","SUPPORTED_HOME_VARIANTS","banner","sidebar","_PREDEFINED_ELEMENTS$","pageType","onConfigChange","user","useAuth","isAdmin","role","isEditing","setIsEditing","configs","setConfigs","localChanges","setLocalChanges","hasChanges","setHasChanges","selectedElement","setSelectedElement","hoveredElement","setHoveredElement","elementPosition","setElementPosition","showElementPicker","setShowElementPicker","showLayersPanel","setShowLayersPanel","showElementsPanel","setShowElementsPanel","visibleElements","setVisibleElements","Set","elementOrder","setElementOrder","draggedElement","setDraggedElement","dragOverElement","setDragOverElement","viewport","setViewport","elementStyles","setElementStyles","showStylePanel","setShowStylePanel","stylePanelRight","setStylePanelRight","searchQuery","setSearchQuery","selectedCategory","setSelectedCategory","showHelpHint","setShowHelpHint","baseline","setBaseline","variants","order","overlayRef","useRef","isReorderingRef","allowCrossContainer","setAllowCrossContainer","pendingInsertIndex","setPendingInsertIndex","containerGridCols","setContainerGridCols","elementOrderRef","current","applyVisualReorderRef","panelPositions","setPanelPositions","stylePicker","x","y","layersPanel","visualStylePanel","elementPicker","elementsPanel","draggingPanel","setDraggingPanel","dragOffset","setDragOffset","resizingPanel","setResizingPanel","secondaryColor","selectedBg","getAvailableVariants","useCallback","ELEMENT_VARIANTS","allowed","includes","getDefaultVariant","PREDEFINED_ELEMENTS","candidate","defaultVariant","available","some","normalizeVariant","handlePanelMouseDown","panelName","closest","preventDefault","stopPropagation","currentTarget","clientX","left","clientY","top","handlePanelMouseMove","newX","newY","Math","innerWidth","innerHeight","handlePanelMouseUp","addEventListener","removeEventListener","handleResizeStart","handleResizeMove","deltaX","deltaY","panel","URLSearchParams","search","get","newUrl","history","replaceState","isClosable","add","styleEl","_unused4","_unused5","_unused6","cs","gtc","cols","m","parseInt","_unused7","timer","setTimeout","clearTimeout","data","getPageElementConfigs","sanitizedConfigs","cfg","cssByElement","stylesByElement","_cfg$settings","_cfg$settings2","_cfg$settings2$styles","String","st","Object","keys","changes","sorted","sort","b","push","entries","_ref2","_ref3","_ref4","styleId","existing","_unused8","error","fallbackConfigs","loadConfigs","unsavedCount","saved","changedElements","_elementStyles$name","_saved$css","has","orderEqual","every","i","_unused9","historyRef","historyIndexRef","pushHistorySnapshot","snap","JSON","parse","stringify","arr","_unused0","canUndo","canRedo","applySnapshot","requestAnimationFrame","dispatchEvent","CustomEvent","detail","previewMode","_unused1","undo","redo","handleKeyDown","handleExitEditing","ctrlKey","metaKey","shiftKey","altKey","handleMoveUp","handleMoveDown","handleRemoveElement","replaceWith","cloneNode","_unused10","_unused11","_unused12","addOverlay","overlay","className","cssText","toUpperCase","actionsBar","editBtn","innerHTML","onmouseover","onmouseout","moveUpBtn","moveDownBtn","deleteBtn","addBeforeBtn","addAfterBtn","colWrap","c","colBtn","L","countInCol","targetIndex","_unused13","position","background","opacity","confirm","indexOf","_unused14","_unused15","draggable","_dataTransfer","dataTransfer","setData","_unused16","dropEffect","_unused17","newOrder","draggedIndex","splice","nodes","_unused18","handleEscape","clone","parentElement","debounceTimerRef","handleVariantChange","safeVariant","applyChange","newChanges","prevConfigs","configIndex","updated","checkAndApply","applyVisualReorder","_document$body","_document$body$classL","_unused19","parentMap","els","_unused20","handleStyleChange","computeInsertIndexForColumn","col","handleAddElement","insertAt","existingVariant","variantToUse","_unused21","existingIdx","reordered","_unused22","_unused23","newVisible","delete","currentIndex","handleDragStart","effectAllowed","handleDragOver","handleDragLeave","relatedTarget","handleDragEnd","handleDrop","targetElementName","handleStartBlank","_unused24","previouslyVisible","keep","toHide","_unused25","_unused26","knownOrder","extraNames","configsToSave","_configs$find","_configs$find2","_configs$find2$settin","_ref5","_elementStyles$elemen","_elementStyles$elemen2","_configs$find3","_configs$find3$settin","batchUpdatePageElementConfigs","err","_err$response","response","sessionId","elements","_cfg$settings3","Number","custom_styles","api","post","encodeURIComponent","fromEntries","_ref6","reload","currentVariants","currentVariant","_unused27","_unused28","getViewportConfig","viewportConfig","wrapper","maxWidth","transformOrigin","desc","preventPageInteractions","stopImmediatePropagation","userSelect","wrapperEl","_unused29","setAttribute","_unused30","_unused31","_unused32","_unused33","_unused34","_unused35","_unused36","_unused37","removeAttribute","_unused38","_unused39","_unused40","_unused41","_unused42","_unused43","_unused44","_unused45","_unused46","_unused47","_unused48","_unused49","_unused50","_unused51","_unused52","right","zIndex","backdropFilter","borderBottom","Flex","maxW","bgGradient","py","textOnSecondary","FaFutbol","animation","FiLock","Tooltip","IconButton","FiTablet","FiMonitor","orientation","FaUndo","FaRedo","FaPaintBrush","FaAngleLeft","FaAngleRight","_active","FiX","bottom","overflow","flexDirection","to","flexShrink","borderTopRadius","VisualStylePanel","placement","FiEdit","FaPlus","FiMove","Portal","ref","onMouseDown","content","Heading","FiChevronUp","FiChevronDown","h","FiTrash2","maxH","pb","SimpleGrid","columns","isActive","noOfLines","clipPath","isVisible","isSelected","isDragging","isDragOver","onDragStart","onDragEnd","onDragOver","onDragLeave","onDrop","FaGripVertical","FaCube","FiEyeOff","FaBoxOpen","w","overflowX","FaThLarge","FaNewspaper","FaPhotoVideo","FaGamepad","cat","category","implementedForThisPage","availableElements","query","toLowerCase","layout","media","interactive","base","md","FaSmile","matchesCategory","matchesSearch","FaExclamationCircle"],"sourceRoot":""}