7.4 KiB
UI Advanced Selection v1
1. Doel
Advanced Selection v1 maakt selectiegedrag in de dual-pane UI natuurlijker voor dagelijks file-managergebruik, zonder de bestaande interacties te breken. De uitbreiding richt zich op twee bekende patronen:
- range-selectie via
Shift + ArrowUp/ArrowDown - niet-aangrenzende selectie via
Cmd + klikop macOS enCtrl + klikop niet-Mac
Het doel is niet om een volledige desktop file manager exact te emuleren, maar om de meest bruikbare selectiepatronen toe te voegen met laag regressierisico.
2. Nieuwe Interacties In Scope
In scope voor v1:
Shift + ArrowDownShift + ArrowUpCmd + klikop MacCtrl + klikop niet-Mac
Niet in scope in deze stap:
Shift + klikrange-selectieCtrl/Cmd + AAlt-gebaseerde selectie- OS-specifieke volledige parity met Finder/Explorer
- backendwijzigingen
3. Gewenst Gedrag
Shift + ArrowDown / ArrowUp
Shift + ArrowDown en Shift + ArrowUp breiden de selectie uit of verkleinen die vanaf een vast selectie-anker binnen het actieve paneel.
Voorstel:
- elk paneel krijgt naast
currentRowIndexenselectedItemsookselectionAnchorIndex - als nog niets geselecteerd is:
- eerste
Shift + ArrowDown/ArrowUpselecteert de current row en de eerstvolgende rij in de gekozen richting selectionAnchorIndexwordt gezet op de oorspronkelijke current row
- eerste
- als al een range actief is:
- verdere
Shift + ArrowDown/ArrowUpverplaatst de actieve rand van de selectie - selectie groeit of krimpt tussen
selectionAnchorIndexen de nieuwecurrentRowIndex
- verdere
- current row blijft het bewegende uiteinde van de range
Ankerpunt
Het range-anker begint op het moment dat range-selectie start. Dat anker blijft staan totdat een andere actie de selectiemodus logisch reset, bijvoorbeeld:
- gewone rij-click zonder modifier
- klik op filenaam
- klik op directorynaam die navigeert
Escape- paneelnavigatie naar andere directory
Current row versus selected items
currentRowIndexblijft altijd exact 1 rij aanwijzen in het actieve paneelselectedItemskan 0, 1 of meerdere items bevatten- bij range-selectie hoeft current row niet de enige geselecteerde rij te zijn; current row is alleen de focusrij binnen de geselecteerde set
Als nog niets geselecteerd is
Voor veilige voorspelbaarheid:
Shift + ArrowDown/ArrowUpgebruikt de huidige current row als startpunt- current row moet dus al bestaan; in een leeg paneel doet de shortcut niets
Cmd/Ctrl + klik
Modifier-click werkt als toggle op een individueel item zonder andere selectie te wissen.
Voorstel:
Cmd + klikop Mac: toggle selectie van dat itemCtrl + klikop niet-Mac: toggle selectie van dat item- current row verhuist naar het aangeklikte item
selectionAnchorIndexwordt gezet op dat item, zodat een daaropvolgende range-selectie logisch verdergaat vanaf de laatst gemodificeerde rij
Dit geeft willekeurige toevoeging/verwijdering van items zonder checkbox verplicht te maken.
4. Interactie Met Bestaande Regels
Klik op checkbox
Blijft een expliciete toggle van dat ene item.
Aanvulling:
- checkbox-toggle mag ook
selectionAnchorIndexzetten op het betreffende item - daarmee sluit checkboxgedrag aan op latere range-selectie
Klik op rij
Blijft single-selectie op dat item zonder modifier.
Gevolg:
- eerdere multi-selectie wordt vervangen door exact dit item
currentRowIndexenselectionAnchorIndexworden beide op deze rij gezet
Klik op directorynaam
Blijft directory openen.
Gevolg:
- selectie van dat paneel wordt gewist
- current row reset logisch op de eerste zichtbare rij in de nieuwe map
selectionAnchorIndexwordt gewist
Klik op filenaam
Blijft single-selectie van dat item.
Gevolg:
- eerdere multi-selectie vervalt
- current row en anker worden op die rij gezet
Space toggle
Blijft toggle op current row.
Aanvulling:
Spacezet ookselectionAnchorIndexop current row- zo blijft keyboardselectie consistent met modifier-click en checkbox-toggle
Escape clear
Blijft selectie van actief paneel wissen.
Aanvulling:
- wist ook
selectionAnchorIndex - current row blijft behouden
currentRowIndex
Blijft de focusrij voor keyboardnavigatie en acties zoals Space, Enter en toekomstige range-selectie.
activePane
Alle advanced selection-interacties gelden alleen voor het actieve paneel. Het inactieve paneel behoudt zijn selectie ongewijzigd.
5. Scopebeperking
Niet meenemen in v1, tenzij later expliciet gevraagd:
Shift + klikrange-selectieCmd/Ctrl + A- drag selection
- desktop-specifieke contextmenu-semantiek
- backendwijzigingen
Aanbeveling: Shift + klik nu niet toevoegen. Dat is bruikbaar, maar verhoogt regressierisico in een web-UI met bestaande naam-click, rij-click en checkbox-click verschillen.
6. UX-regels
- current row moet visueel zichtbaar blijven, ook binnen een multi-selectie
- range-selectie moet eruitzien als normale multi-selectie; current row blijft herkenbaar als focusrij
- selectiegedrag moet voorspelbaar blijven:
- gewone klik reset selectie
- modifier-click togglet één item
- shift-arrow werkt vanaf een vast anker
- current row moet bij keyboard range-selectie in beeld blijven via bestaande scrolllogica
- in een leeg paneel doen shortcuts niets
7. Impactanalyse
Waarschijnlijk te wijzigen frontendbestanden:
webui/html/app.js- mogelijk beperkt
webui/html/style.cssvoor subtielere current-row/selected-row combinatie webui/backend/tests/golden/test_ui_smoke_golden.pywaarschijnlijk niet of nauwelijks
Geen backendimpact verwacht.
Regressierisico:
- medium in
app.js, omdat selectiegedrag al meerdere paden heeft: checkbox, rij-click, filenaam, directorynaam, keyboard en wildcardselectie - laag in CSS, zolang alleen bestaande states duidelijker gecombineerd worden
Belangrijkste regressierisico's:
- onbedoeld resetten van multi-selectie bij modifier-click
- current row en selectie die uit sync raken
- range-selectie die een verkeerd anker gebruikt na navigatie of escape
8. Teststrategie
Smoke/regressietests
Kleine frontend regressiechecks zijn zinvol voor:
- aanwezigheid van bestaande dual-pane UI na wijziging
- geen breuk in bestaande rooktesten voor panelen/modals/assets
Headless UI smoke-tests dekken keyboarddetail beperkt. De kernvalidatie zal daarom vooral handmatig zijn.
Handmatige validatie
Minimaal handmatig verifiëren:
- gewone rij-click blijft single-selectie
- checkbox blijft toggle zonder neveneffecten
Cmd/Ctrl + klikvoegt items toe en verwijdert ze weerShift + ArrowDownstart een range vanaf current rowShift + ArrowUpverkleint of verplaatst de range correctEscapewist selectie maar laat current row staan- directory openen wist selectie van alleen dat paneel
- current row blijft zichtbaar bij range-selectie met keyboard
- bestaande copy/move/delete/rename werken nog op de resulterende selectie
9. Aanbeveling
Aanbevolen v1-richting met laag regressierisico:
- voeg alleen
Shift + ArrowUp/ArrowDowntoe voor keyboard range-selectie - voeg alleen
Cmd + klik/Ctrl + kliktoe voor niet-aangrenzende toggle-selectie - gebruik een expliciete
selectionAnchorIndexper paneel - laat gewone click-semantiek ongewijzigd
- voeg nog geen
Shift + kliktoe in deze fase
Deze aanpak is klein genoeg om veilig te implementeren, sluit aan op standaard file manager gedrag en versterkt de bestaande dual-pane workflow zonder de huidige interacties semantisch te herontwerpen.