mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 10:42:57 +00:00
1 line
290 KiB
Plaintext
1 line
290 KiB
Plaintext
{"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":""} |