From 379f4a2d6fdfe6ba585e07a1eca2bfd9df206162 Mon Sep 17 00:00:00 2001 From: tristan Date: Tue, 9 Jun 2026 16:51:42 +0200 Subject: [PATCH] feat(autocomplete) : anneau focus clavier + navigation clavier APG MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Anneau de focus clavier (clavier-only) ; quand la liste est ouverte, l'anneau entoure tout le bloc input + liste d'un seul tenant (utilitaires CSS .m-combo-ring-top / .m-combo-ring-bottom) - Navigation clavier aux normes WAI-ARIA APG : scroll auto de l'option active dans la vue, ArrowUp ouvre sur la dernière option, Home/End, Tab ferme la liste Co-Authored-By: Claude Opus 4.8 (1M context) --- app/assets/css/malio.css | 17 ++++++++ .../malio/input/InputAutocomplete.vue | 40 ++++++++++++++++++- 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/app/assets/css/malio.css b/app/assets/css/malio.css index 95c5667..0ab6772 100644 --- a/app/assets/css/malio.css +++ b/app/assets/css/malio.css @@ -18,6 +18,23 @@ outline: 2px solid rgb(var(--m-primary) / 1); outline-offset: 2px; } + + /* Anneau de focus clavier pour un combobox ouvert (input + liste) : l'anneau + entoure le bloc entier d'un seul tenant. L'input porte le contour haut+côtés, + la liste le contour côtés+bas ; la jonction (bas de l'input / haut de la liste) + reste sans contour pour un raccord sans couture. */ + .m-combo-ring-top { + box-shadow: + -2px 0 0 0 rgb(var(--m-primary) / 1), + 2px 0 0 0 rgb(var(--m-primary) / 1), + 0 -2px 0 0 rgb(var(--m-primary) / 1); + } + .m-combo-ring-bottom { + box-shadow: + -2px 0 0 0 rgb(var(--m-primary) / 1), + 2px 0 0 0 rgb(var(--m-primary) / 1), + 0 2px 0 0 rgb(var(--m-primary) / 1); + } } @layer base { diff --git a/app/components/malio/input/InputAutocomplete.vue b/app/components/malio/input/InputAutocomplete.vue index 5343ac0..362a97f 100644 --- a/app/components/malio/input/InputAutocomplete.vue +++ b/app/components/malio/input/InputAutocomplete.vue @@ -24,6 +24,7 @@ type="text" @input="onInput" @focus="onFocus" + @blur="onKbdBlur" @click="onInputClick" @keydown="onKeydown" > @@ -90,6 +91,7 @@ : hasSuccess ? 'border-m-success select-scrollbar-success' : 'border-m-primary select-scrollbar-primary', + keyboardFocused ? 'm-combo-ring-bottom' : '', ]" >