# MyUIbrix Draggable & Resizable Update - Říjen 2025 ## 🎯 Přehled změn Všechny panely v MyUIbrix editoru jsou nyní **přetažitelné** a **měnitelné velikosti**. --- ## ✨ Nové Funkce ### 1. **Přetažitelné Panely** Všechny panely můžete přetáhnout kliknutím na záhlaví: - 🎨 **Vizuální Styly Panel** (levá strana) - ⚙️ **Style Picker** (kontextový panel u elementu) - 📋 **Layers Panel** (seznam vrstev) - ➕ **Element Picker** (přidávání elementů) ### 2. **Měnitelná Velikost** Každý panel má v pravém dolním rohu **resize handle** (šedý trojúhelník): - Přetáhněte pro změnu šířky a výšky - Minimální velikost: 280px × 300px - Vizuální feedback při hover ### 3. **Chytré Omezení** - Panely nelze přetáhnout mimo obrazovku - Automatické omezení pozice - Pamatuje si poslední pozici během editace --- ## 🐛 Opravené Chyby ### 1. **Duplicitní Text "Unsaved Changes"** **Problém**: Zobrazovalo se "12 neuložených změn1 Unsaved Changes" **Oprava**: ```typescript // PŘED {Object.keys(localChanges).length} neuložených změn // PO Neuložené změny: {Object.keys(localChanges).filter(...).length} ``` ### 2. **AboutPage Překlad** **Opraveno**: - ✅ "About MyClub" → "O klubu" - ✅ "This page is not set up yet..." → "Tato stránka ještě není nastavena..." - ✅ Meta descriptions přeloženy do češtiny - ✅ Odstraněn duplicitní `

About MyClub

` --- ## 🎨 Jak Používat ### **Přetahování Panelu** 1. Najeďte myší na **záhlaví panelu** (barevná lišta nahoře) 2. Kurzor se změní na "move" ✋ 3. Klikněte a držte levé tlačítko myši 4. Přetáhněte panel na novou pozici 5. Pusťte tlačítko myši ### **Změna Velikosti** 1. Najeďte na **pravý dolní roh** panelu 2. Zobrazí se šedý trojúhelník 3. Kurzor se změní na resize ↘️ 4. Klikněte a držte levé tlačítko myši 5. Přetáhněte pro změnu velikosti --- ## 📦 Technické Detaily ### State Management ```typescript const [panelPositions, setPanelPositions] = useState({ stylePicker: { x: 0, y: 0, width: 360, height: 550 }, layersPanel: { x: 0, y: 0, width: 320, height: 600 }, visualStylePanel: { x: 0, y: 60, width: 320, height: 700 }, elementPicker: { x: 0, y: 0, width: 600, height: 600 } }); ``` ### Drag Handlers ```typescript // Mouse down na záhlaví const handlePanelMouseDown = (panelName, e) => { if (!target.closest('.panel-header')) return; setDraggingPanel(panelName); // Zachytí offset od okraje panelu }; // Mouse move const handlePanelMouseMove = (e) => { // Aktualizuje pozici s boundary checking const newX = Math.max(0, Math.min(x, maxX)); const newY = Math.max(0, Math.min(y, maxY)); }; ``` ### Resize Handlers ```typescript // Resize handle - trojúhelník v rohu handleResizeStart(panelName, e)} sx={{ clipPath: 'polygon(100% 0, 100% 100%, 0 100%)' }} /> ``` ### Panel Header ```typescript // Všechna záhlaví mají class="panel-header" Panel Název } onClick={() => closePanel()} /> ``` --- ## 🎯 Upravené Komponenty ### 1. **Vizuální Styly Panel** (levá strana) - ✅ Přetažitelné záhlaví - ✅ Resize handle - ✅ Scroll pro obsah - ✅ Zachovaná funkčnost VisualStylePanel ### 2. **Style Picker** (kontextový) - ✅ Přetažitelný - ✅ Resizable - ✅ Výchozí pozice u elementu - ✅ Po přetažení zůstane na místě ### 3. **Layers Panel** (vrstvy) - ✅ Přetažitelný ze záhlaví - ✅ Resizable - ✅ Výchozí pozice vpravo - ✅ Drag & drop elementů funguje uvnitř ### 4. **Element Picker** (modal) - ✅ Přetažitelný - ✅ Resizable - ✅ Výchozí pozice centrovaná - ✅ Backdrop zůstává --- ## 🎨 Vizuální Změny ### Resize Handle Styling ```css /* Šedý trojúhelník v pravém dolním rohu */ clipPath: polygon(100% 0, 100% 100%, 0 100%) opacity: 0.6 _hover: { opacity: 1 } cursor: nwse-resize ``` ### Cursor Feedback - **Záhlaví**: `cursor: move` (ruka) - **Při tažení**: `cursor: grabbing` (zavřená ruka) - **Resize handle**: `cursor: nwse-resize` (diagonální šipky) ### Panel Borders - Aktivní panel: zvýrazněný border - Každý panel má svou barvu (primary, secondary, teal) --- ## 📝 Klávesové Zkratky Všechny původní zkratky zůstávají: | Zkratka | Akce | |---------|------| | `ESC` | Zavřít aktivní panel | | `L` | Toggle Layers Panel | | `A` | Otevřít Element Picker | | `Ctrl+S` | Uložit změny | --- ## 🚀 Testování ### Checklist - [✅] Přetažení Style Picker panelu - [✅] Přetažení Layers Panel - [✅] Přetažení Visual Style Panel - [✅] Přetažení Element Picker - [✅] Resize všech panelů - [✅] Boundary checking (nelze mimo obrazovku) - [✅] Minimální velikost panelů - [✅] Kurzor feedback - [✅] Oprava "Unsaved Changes" textu - [✅] AboutPage český překlad --- ## 📦 Soubory **Upravené:** ``` frontend/src/components/editor/MyUIbrixEditor.tsx frontend/src/pages/AboutPage.tsx ``` **Nové:** ``` MYUIBRIX_DRAGGABLE_UPDATE.md (tento soubor) ``` --- ## 🎓 Pro Vývojáře ### Přidání Nového Přetažitelného Panelu 1. **Přidat do state:** ```typescript const [panelPositions, setPanelPositions] = useState({ ...existujici, novyPanel: { x: 0, y: 0, width: 400, height: 500 } }); ``` 2. **Použít v JSX:** ```typescript handlePanelMouseDown('novyPanel', e)} cursor={draggingPanel === 'novyPanel' ? 'grabbing' : 'default'} > {/* Záhlaví */} {/* Obsah */} {/* Resize handle */} handleResizeStart('novyPanel', e)} /> ``` --- ## 📚 Reference - React useState hooks pro panel positions - Mouse events: mousedown, mousemove, mouseup - Boundary checking: Math.max, Math.min - CSS clip-path pro resize handle - Chakra UI positioning --- **Datum:** 18. října 2025 **Verze:** 2.1 **Status:** ✅ Kompletní a otestováno **Všechny panely jsou nyní plně přetažitelné a měnitelné velikosti! 🎉**