# UI_FUNCTION_BAR_V2_DESIGN.md ## 1. Doel en scope Deze stap beschrijft de evolutie van de huidige onderbalk onder de twee panelen naar een compactere, duidelijkere functiebalk in Midnight Commander-stijl. Doel: - de balk onder de panelen wordt visueel en functioneel herkenbaar als vaste actiebalk - acties blijven direct gekoppeld aan het actieve paneel - de balk wordt voorbereid op latere functietoets-labeling zonder nu al functietoetsen te implementeren In scope: - compactere horizontale functiebalk onder de twee panelen - vaste knopvolgorde - duidelijkere relatie tussen actie, actief paneel en selectie - ontwerpvoorbereiding voor latere F3-F8 koppeling Out of scope: - geen implementatie van `View` - geen implementatie van `Edit` - geen functietoetsen - geen backendwijzigingen - geen nieuwe dependencies --- ## 2. Positie en layout De functiebalk staat vast onder de twee panelen, op de plek van de huidige onderste actiebalk. Layoutdoelen: - horizontaal gecentreerd in de beschikbare breedte - compact in hoogte - kleine, gelijkmatige spacing tussen knoppen - visueel duidelijk gescheiden van de paneelzone, maar zonder grote verticale band - uitbreidbaar naar extra labels of functietoetsbadges zonder redesign Voorstel: - één compacte horizontale rij - de rij krijgt een eigen container binnen de footerzone - links en rechts geen brede utilityblokken - status/fouttekst blijft buiten of onder de functiebalk, zodat de knoppenrij zelf compact blijft --- ## 3. Vaste volgorde van de knoppen De functiebalk gebruikt exact deze volgorde: 1. `View` 2. `Edit` 3. `Copy` 4. `Move` 5. `Rename` 6. `MKdir` 7. `Delete` Reden: - sluit aan op klassieke file-manager verwachtingen - groepeert navigatie-/inhoudsacties eerst, daarna muterende file-acties - houdt de destructieve actie `Delete` aan het einde --- ## 4. Relatie met toekomstig functietoetsgebruik De functiebalk moet later zonder structurele herbouw koppelbaar zijn aan: - `F3 = View` - `F4 = Edit` - `F5 = Copy` - `F6 = Move` - `F7 = MKdir` - `F8 = Delete` Ontwerpimplicatie: - elke knop moet later een compacte functietoetsbadge of prefix kunnen tonen - `Rename` blijft voorlopig zonder vaste F-toets in deze mapping - deze stap implementeert nog geen keyboardbindingen of badgegedrag --- ## 5. Relatie met actief paneel en selectie Alle acties in de functiebalk werken altijd vanuit het actieve paneel. ### Geen selectie - `View`: disabled - `Edit`: disabled - `Copy`: disabled - `Move`: disabled - `Rename`: disabled - `MKdir`: enabled - `Delete`: disabled ### Exact 1 selectie - `View`: later afhankelijk van file-type; in deze stap nog niet functioneel - `Edit`: later afhankelijk van file-type; in deze stap nog niet functioneel - `Copy`: enabled als huidige backendactie geldig is - `Move`: enabled als huidige backendactie geldig is - `Rename`: enabled - `MKdir`: enabled - `Delete`: enabled ### Meerdere selecties - `View`: disabled - `Edit`: disabled - `Copy`: enabled als alle geselecteerde items compatibel zijn met bestaande backendscope - `Move`: enabled als alle geselecteerde items compatibel zijn met bestaande backendscope - `Rename`: disabled - `MKdir`: enabled - `Delete`: enabled ### File- of directoryselectie - `Copy` en `Move` blijven gebonden aan de huidige backendbeperking - zolang backend `file-only` is voor copy/move: - selectie met directories blokkeert `Copy` - selectie met directories blokkeert `Move` - `Delete` blijft werken volgens bestaande backendregels - `Rename` volgt bestaande rename-semantiek Belangrijk: - de functiebalk toont niet alleen acties, maar reflecteert ook duidelijk welke acties in de huidige context geldig zijn via enabled/disabled toestand --- ## 6. Scopebeperking Nog niet in deze stap: - geen `View`-implementatie - geen `Edit`-implementatie - geen functietoetsen - geen backendwijzigingen - geen extra UI-frameworks Deze ontwerpstap gaat dus alleen over de functiebalk zelf, niet over nieuwe actiecapaciteit. --- ## 7. Impactanalyse Waarschijnlijk te wijzigen bestanden: - `webui/html/index.html` - `webui/html/style.css` - `webui/html/app.js` - `webui/backend/tests/golden/test_ui_smoke_golden.py` ### Regressierisico Belangrijkste risico's: - huidige actieknoppen verliezen hun correcte enabled/disabled logica - de relatie tussen actief paneel en actiebalk wordt visueel minder duidelijk - keyboard- en klikflows kunnen breken als knop-ids of handlers onzorgvuldig worden vervangen - extra compactheid kan ten koste gaan van leesbaarheid op smallere schermen Mitigatie: - bestaande action handlers hergebruiken waar mogelijk - ids voor bestaande werkende acties stabiel houden of gecontroleerd migreren - disabled-logica centraal laten in plaats van per knop ad hoc - smoke tests uitbreiden met de nieuwe functiebalkstructuur --- ## 8. Teststrategie ### Smoke/regressietests Aan te passen: - `test_ui_smoke_golden.py` Nieuwe of aangepaste checks: - functiebalkcontainer aanwezig onder de panelen - knopvolgorde in HTML komt overeen met het ontwerp - bestaande actieknoppen voor werkende backendacties blijven aanwezig - assets blijven correct gemount ### Handmatige validatie Te valideren bij implementatie: - functiebalk blijft compact op desktop - functiebalk blijft bruikbaar op smallere breedte - actief paneel blijft bepalend voor de actiecontext - disabled/enable toestand klopt bij: - geen selectie - 1 selectie - meerdere selecties - gemixte file/directory-selectie - bestaande keyboard- en klikselectieflow blijft intact