fix(sidebar) : rend cliquable toute la zone survolée des liens (MUI-47)

Le padding vertical (pt-1/pb-1) était porté par le <li> qui affiche le
fond de hover, alors que l'élément cliquable est l'<a> à l'intérieur :
les ~4px en haut et en bas de chaque lien étaient survolés mais non
cliquables. Le padding vertical passe sur l'<a> (py-1) — la zone de hover
épouse exactement la cible de clic, sans changement visuel.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-25 10:06:02 +02:00
parent ea020af9e2
commit 33cfa54a5d
3 changed files with 15 additions and 9 deletions
+12 -7
View File
@@ -107,19 +107,24 @@ describe('MalioSidebar', () => {
expect(links[2].attributes('href')).toBe('/fournisseurs')
})
it('hover : fond + couleur + semi-bold tous portés par le <li> (texte non figé sur le <a>)', () => {
it('hover : fond + couleur + semi-bold portés par le <li>', () => {
const wrapper = mountComponent({sections})
const li = wrapper.find('li')
expect(li.classes()).toContain('hover:bg-m-primary/10')
expect(li.classes()).toContain('hover:text-m-primary')
expect(li.classes()).toContain('hover:font-semibold')
expect(li.classes()).toContain('text-black')
expect(li.classes()).toContain('pt-1')
expect(li.classes()).toContain('pb-1')
// Le <a> ne fige PAS sa couleur (sinon le texte resterait noir sur les bandes
// pt-1/pb-1 hors du <a> alors que le fond du <li> est bleu).
expect(wrapper.find('a').classes()).not.toContain('text-black')
expect(wrapper.find('a').classes()).not.toContain('hover:text-m-primary')
})
it('zone cliquable : le padding vertical est sur le <a>, pas sur le <li> (pas de bande morte au survol)', () => {
const wrapper = mountComponent({sections})
// Le padding vertical doit appartenir à la cible de clic (<a>) pour que toute
// la bande survolée soit cliquable — sinon pt-1/pb-1 sur le <li> crée une
// bande colorée mais non cliquable en haut et en bas du lien.
const li = wrapper.find('li')
expect(li.classes()).not.toContain('pt-1')
expect(li.classes()).not.toContain('pb-1')
expect(wrapper.find('a').classes()).toContain('py-1')
})
it('actif : route exacte → lien en primary + semi-bold, sans fond', () => {
+2 -2
View File
@@ -49,14 +49,14 @@
<li
v-for="item in section.items"
:key="item.to"
:class="collapsed ? '' : 'text-black hover:bg-m-primary/10 hover:font-semibold hover:text-m-primary pt-1 pb-1'"
:class="collapsed ? '' : 'text-black hover:bg-m-primary/10 hover:font-semibold hover:text-m-primary'"
>
<NuxtLink
:to="item.to"
active-class="!text-m-primary font-semibold"
:class="twMerge(
'block truncate text-[15px] leading-[150%]',
collapsed ? 'px-3 text-center' : 'pl-[32px]',
collapsed ? 'px-3 text-center' : 'pl-[32px] py-1',
isActive(item) ? '!text-m-primary font-semibold' : '',
)"
>