From 54fa5af2d47c29999af88680c4afd207ef960cc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isaque=20B=C3=B6ck?= Date: Wed, 22 Jul 2026 13:05:48 -0300 Subject: [PATCH 1/5] fix: [Dropdown] clip content and divider padding (ENG-46740, ENG-46741) From 5934127e262316e4962102133f5aa878cfa9f053 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isaque=20B=C3=B6ck?= Date: Wed, 22 Jul 2026 13:12:03 -0300 Subject: [PATCH 2/5] fix: clip dropdown panel content and remove padding around group divider --- .../dropdown-group/dropdown-group.vue | 2 +- .../navigation/dropdown/dropdown.test.ts | 46 +++++++++++++++++++ .../navigation/dropdown/dropdown.vue | 2 +- 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/packages/webkit/src/components/navigation/dropdown/dropdown-group/dropdown-group.vue b/packages/webkit/src/components/navigation/dropdown/dropdown-group/dropdown-group.vue index c37eafeea..dfb437cda 100644 --- a/packages/webkit/src/components/navigation/dropdown/dropdown-group/dropdown-group.vue +++ b/packages/webkit/src/components/navigation/dropdown/dropdown-group/dropdown-group.vue @@ -49,7 +49,7 @@ :aria-labelledby="hasLabel ? labelId : undefined" :data-testid="testId" :data-first="groupIndex === 0 || null" - class="flex flex-col data-[first]:pt-0 [&:not([data-first])]:mt-[var(--spacing-xxs)] [&:not([data-first])]:border-t [&:not([data-first])]:border-[var(--border-default)] [&:not([data-first])]:pt-[var(--spacing-xxs)]" + class="flex flex-col [&:not([data-first])]:border-t [&:not([data-first])]:border-[var(--border-default)]" >
{ expect(command?.textContent?.trim()).toBe('⌘P') }) + // ---- ENG-46740: panel body clips overflowing content --------------------- + it('clips horizontal overflow on the panel body so content respects the panel rounded borders', async () => { + const { getByTestId } = render(Host) + await fireEvent.click(getByTestId('navigation-dropdown__trigger')) + await waitForOpen(3) + + const body = document.body.querySelector( + '[data-testid="navigation-dropdown__body"]' + ) as HTMLElement + expect(body).not.toBeNull() + + // Body must declare horizontal clipping and vertical auto-scroll on the + // rendered class attribute (ENG-46740). Tests do not run Tailwind, so we + // assert the utility classnames that carry the behavior. + const cls = body.className + expect(cls).toContain('overflow-x-hidden') + expect(cls).toContain('overflow-y-auto') + }) + + // ---- ENG-46741: divider between groups is a flush hairline --------------- + it('separates consecutive groups with a flush hairline (no vertical padding around the divider)', async () => { + render(Host, { props: { open: true, grouped: true } }) + await waitForOpen(5) + + const groups = Array.from(document.body.querySelectorAll('[role="group"]')) as HTMLElement[] + expect(groups).toHaveLength(2) + + const secondCls = groups[1].className + const firstCls = groups[0].className + + // The divider is a hairline top border applied only to non-first groups. + expect(secondCls).toContain('[&:not([data-first])]:border-t') + expect(secondCls).toContain('[&:not([data-first])]:border-[var(--border-default)]') + + // No margin-top and no padding-top around the divider — must be flush. + expect(secondCls).not.toMatch(/(?:^|[\s:])mt-\[/) + expect(secondCls).not.toMatch(/(?:^|[\s:])pt-\[/) + expect(secondCls).not.toMatch(/\[&:not\(\[data-first\]\)\]:mt-/) + expect(secondCls).not.toMatch(/\[&:not\(\[data-first\]\)\]:pt-/) + + // Both groups share the same base class; first group has data-first so the + // non-first variant never applies to it (no border, no spacing). + expect(firstCls).toBe(secondCls) + expect(groups[0].hasAttribute('data-first')).toBe(true) + }) + // ---- Accessibility: axe on the open menu overlay -------------------------- it('has no axe violations on the open menu panel with grouped options', async () => { render(Host, { props: { open: true, grouped: true } }) diff --git a/packages/webkit/src/components/navigation/dropdown/dropdown.vue b/packages/webkit/src/components/navigation/dropdown/dropdown.vue index 4130950c0..b9c72c515 100644 --- a/packages/webkit/src/components/navigation/dropdown/dropdown.vue +++ b/packages/webkit/src/components/navigation/dropdown/dropdown.vue @@ -362,7 +362,7 @@
Date: Mon, 27 Jul 2026 11:37:58 -0300 Subject: [PATCH 3/5] test: regenerate dropdown visual baselines for desktop and mobile modes --- ...with-top-and-bottom-slots--dark-mobile.png | Bin 1790 -> 1808 bytes ...th-top-and-bottom-slots--light-desktop.png | Bin 920 -> 723 bytes ...ith-top-and-bottom-slots--light-mobile.png | Bin 1805 -> 1828 bytes ...down--groups-with-top-and-bottom-slots.png | Bin 877 -> 689 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--groups-with-top-and-bottom-slots--dark-mobile.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--groups-with-top-and-bottom-slots--dark-mobile.png index 062d68706d85a2fa21b71f0ca812a536ba0d883c..8355300829f9ebf9cf4b42d0cb9b54471cc12e11 100644 GIT binary patch delta 1766 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 Y0I^Q3&JNwrNB{r;07*qoM6N<$g41lhZ~y=R diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--groups-with-top-and-bottom-slots--light-mobile.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--groups-with-top-and-bottom-slots--light-mobile.png index 0173951fe63bd296c47475df65ac0c01fdbb23f6..412d6fef0dc42a61e0b5fa2e4b76dd44c9c59104 100644 GIT binary patch delta 1813 zcmV+w2kQ8Z4x|o{B!AgSL_t(|oa~!dOjKJGhBq?yUawPx5b(waTYM8^qM~AK z;Q@Qp2Q|i6qCVIYYfLmTzDOjBqF6EdV2olHH5QcKJE3zwW|4i5!@xxu91l5v0@-KH z+GXvv*B<8o8C!LAwQ8YgrCKhm*vttlHgm!~vF+TsbJ3zjWq)O5+EP(bv1G}T?c292 z*TFrp#l^+lzI{79JX~9@UAy++!GpJN-zwL^!!7S`3l=Qs+O;bYK79Dl!@~p1^y$;b zjvbqrm>3Ze!Q+)HSH6Dz+No2g@#Dt_1O&8dRg;5Lr%nY22S-OoXJuv0m@#9-h!HZH zQ)lJIdLx+P;(y|M_wLbt^ym=_nml>3gHJ+2LP$u+u3fw2@$A{N>({R*;q;n1b*e*> z9h^f$Lv6}UAefaaSDrq7njrbTeED+9PamSWbLUEffDax#NPWuVlqpm2q!AVtM!HCp zQ|D*Tp5458)1CL^;>C+u1eF#W8ygf9r0v`*n>TM}p?_XpUaMBEBE9-0Z*OmDj2bm6 zDJiKw=lJ+|A0Hq0#8zzw6~b+~V#SJO%a*lm+g86C85tQ96Laa(rHqUWw%^!Mic=3# zpL4fv-Ka^ook_vQjT>jrp6%=FYc!UZm$NuBLpv%es^JlwI#Z49+O>1@dv}i>Jpuy* zyL9PdG=I*VIWs3GhdT84_cy)=I)zi`)~#EgJ9p0G@BEBYT3Y)2`Ew4fpP%1vJO8Dz zH66*x$!@N<<^ySLv3XP0=K!<9ip`v`VlyYK*vttlHgm$3nVG3tD6GFH%?T?ubHa+v zoM_SSZ~PP#6dXT(eCyV&(mrm~jy>8t)Sl)N<-kmscV(;F)%Fd-7 zI)8L%;>3y2^axJ)6Smk7A3i*3(j*5veaePdiLx&Yu2nCJ9a2L-3NEC>k5A!mHi;0R2bJPcF?9xo4WJiuQfsO*P+sI zZ4PT=V_!+v%a<>&UcEYUTNCU1@(7+Mz>-Aw!1f;k2Dg<$vR1x4U=mjsQyqLlhy` zeKnG;rQ=7bfSIbp?SPFS&-6IN{IgcX}P zVZ~-nSh1NCP5s}{n3$NSPoL5lIB;Naa4?PR?Cgk$2-qvA+kfm(e+sA(On;}pL($Z{ zd3kwxdwZkEBqk>ESXEWU1V4WK2nq@sI&|p8ix;0fd7}Ol5M+>$^rL65UcKN$*>&ha zW&h4k|Ni|SKYo1u`gO=wBo5=heSLkQkdu;< z{Qdp4KjZi5(}!%|zkeUy1AoSjxgsMY5vZ6~eAua|sHi)4?tK6L9qte+v5_4SYFG@E zu^b#50va7&ym*16hTpAQx7c-LD%Ohr1gAZ1+BDT@5bBmKTcphhnVFebj1G+d?b|ob zEdfB$Ls!Sf#lIDipl zkGf@voGa3`d-rbH6qL>A=xEVE8ty2Av-q&EFxlCfyM)3Z%U`~Hk=Xk7?JItqf#l?5 zFE0)W6i5`uRIAdRzgT8-k9HkB_Pc?ADPZN1*i^PuF?1ficd10RRC1|NV9JMF0Q*21!IgR09CAyr+c5&JKqh00000NkvXXu0mjf D+0U2D delta 1789 zcmV@kvQZ2@DK8aNvMEUcP*J+qP{F9z3Ae{Q2`geE86cb8v95MY9tivth%A zix)3KlK+E(f`6*2s?;I!_xG0ugpVITzJLFId7L+I9-cHpLP7`^fwJlR^5x5W_wLy( zZeY!tH7p_`A|gIM-p|iZ*=uTQLPJAYsH>~%#*G^ZulmT%%}p9pr%p{vOKZtFDJjXr z!^1w@>a8F{R(=$`*;9QQ85tQ96LaInjene+9JXKIQIb;)(vq`_iwikv zw=*f&v17;5rAs|MJ@v-w>S`88WN1f4MYTSHO=q&PSFc|7JdI&o zUR+R6KpuK~dy|B%k6_c;+1dHZl`9T*`5EwAR905Ldi9D!>*eM3$IgE#xAr4FJ>Aav z)_EX|-G4T2njL>H=>nMCj0uyQF=28uCQNR|gvrgAFu55M-I<#uH#b-7rZE40GbT)K z#)Qeum@v5+6DBufqFety$-k14lCx*e?%usy+Goz3*|TSleEjz9TLjzM+S>m8`)}XA zee~$j;)AmYLV7zu;6s%~G@3YZBHA<}nAo$kvwyJ{78dI5jKf5zFyiCnS74zfA zkLS*vJAC-CX4Q&LoH#Li_H1P6r%#{a4{foZJb7}?oHL<7ie*v;&DXa?|7P z-G95|#*I@vnGX$;_M}OZh~aK@Ez|EUCtBKjytgI~B=+S%k?p59JhdB-WaZ`5wst`3@FTiWoZzV`@ zMvfdwp!DNZR8(l41B;qt%a$!PHf`FZl7D2#kReN!EZMhjpJtV_(56*h;m@OHJxD0= z`n8H3^ytx}`F!}R@4Se=qDrGy zd8PbWXrDfP#*ZJbhEsMfm76zjHlL575)%^@J>^eZ&$&a;cqZlCuUfT={2|xH$bTsf z3k#b*eY(55J6T80sBYqqT~ADJpEhlp&H1=6PoF;B+#lGCb9?a1UBdn?TeeKy0ptw# z1R3Ju;_~U!r@nprYJUW}bEFBQ+>`tmP#@xD#JqU%g2tFJV*&yK zXyoVThlht#y`pscj}=;10X2f@)H{Ohjhm~htDBn}icD&1Dvxz_bxe?)oPX@+=Qm-( zgzML@KY#vQ>nb3~AR(zor=dfKQV(U$rE%BDt62j85xN{ z#k}IfPDMpUJ$(4^=g*(i4u2^nwy`5Z4U3^Q76O#$DObnG$FqI!-n|PB4xTk@7Bxl0 zz@nleFE1~aK~+<9g5P$O@iC$|5h}LWvUcs-q@*N@o^(Ju)2wnKihlUO+nd=j*b=$r1g$6 zIExPn36Y&`xJyV3qWt~)ci}c-#0c@@45X*0>zBnw-nw;*J!|r&p&pz=&d=AcUwwRh zSPGLhabQ@@s*+MmS9Wp&sli6j;M5R}t5>gzo%|t(+tN{ht{@GH)(za)2}=KxZ`!Z# zbgFR$Xl@8P9v&WA3t+cSojOHXzZG@2r397=w@63`t7<)M>?qLl{1*TK|Nn(6Kq>$L f00v1!K~w_(3bc#_i_^}S00000NkvXXu0mjfj-ZG( diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--groups-with-top-and-bottom-slots.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--groups-with-top-and-bottom-slots.png index 124353393951336d989d9da4e364ed5c3725ecca..7e4f7f15614e4f97fd1db8c852f7423a1fae9a75 100644 GIT binary patch delta 666 zcmaFMwvly$ay?U;r;B4q#hf>@Z1Zmgh_w0VY!IC9q~M-(;@ZTucXz2u|6dS&Wo5K+ z+3RaQf!q7$-r6Xgy!;dYuGU^g#TJ%lw`;!TI$H&XK6lyo$@Te78P`2F&+c7sOK$fQ z0V2`Oycnog#Pj6y&pTtzeg7Nc^{-y(f70fgE`cVq&n~;H*=eC{XRtDC^}5%7YQlS% zyV#eAaJ9ZIvzFjt(G=PkwYE*=wNus`#pPk zYK)o<4eeK$OZ85Fp288^wQZq2?+4AR>)*e-cg4H?u+Pg!kNzB;F5mm~A%EcS*Slx; zueCes)RT1D@Ac>0{ZlF}J~f}7{XP8q{Jj08iw@hj%>6y#k&@d+jhyZKw#)bbNk6!H z!@W$?+4jmt4b$3lGqmkQOCG#l{cKZyN^|{0$Bp+>FZHjy)xWU%j9CZ-y%F?LId@Ja z*wnB?xX1BE((0>PbNwbe3bcc~Cf$F0h8>JE`~33=i6+6tJS>TJZ2?J-gyheB)}HER zHv8z4tnIgt8tNUcFq?dG%IVZKhvU|(cTBi`fYXjIk+n*8GwAhT}BzcFPx!k~Vfciu!->gR#(mSEaV|>KsfnS`s^6OQ;H+4650&REn>CO2Un& zjkT?!7E-+$H#gWDZaJE?(c=x*pYA7$h6kr}eD*kUp>ayZ5C5r_exI%@zSNysJ7>)e reFg@G|NsAiqBYy)TNkl{~!&R zNJs%B;xb*jP+92=RjQ=4L_wJ7c@eZCRG=^?UuyiES(tIp7(yqa8F~fp)Ku z&z#x0*E7DW(F;YR7m6|_8_Jk$C}XmrjLC*FCL79_Y$#*0F@H(C%+Jry&CTh$J~_$% zA^)S?7)f7=ks_x#bOa7AZLKe!ootU)yihG94b7TnM@KR%sB=nP1D4<0$3D~gD5e=Yz%n?F%k$S5u(Hhv$5&vY3K54D2+w~qQnSu zK|@Y=Ivo-SU2Y9s2Td)6_`}!i?!=AQ%k3^^+jfQj`t# z(*Qe0AQXvw2pIiaud%k~fAjrUu+|UQw?96Gzs57<2o4&nCF0+XGlsW!r<r+!xBoN3!lo(+) zRwxwEeI|iG4x+>ev$0C0f`!4+V&nrt=#N2^81WE0=;yDjtjx~NqI1=5w+HRAXY8Ay zJ?r&)mw%R)untqH6vrp?mjSF0cys!72tZtnRo~zWO9hjPRw{b?S6G4he4gA5^Akh0s8*}4 zU4a95USQ$a;E0FE7-}H79`-k0G|m0%kkolhK7Z6t+~eW%`3?>auv@>oyNgDn*x(N0 zhlhuTVT>4GUtizZ*}=9OC$y836KwpcyJ6Vd+lxdZ53fZ$F%;7M{r&6fYYeeiEQUg% zhw-bcs}bWE^!E04EEYrj^73+bcefXxnVIqX{r_Bxcw(4%jOpy`jJgN#a5y|Pespy7 zcu*XJ#s>A`;)1#xx{ZyEM??kX7)}E?yy2qvcfjCGkWQyhPfwqWkIo+e00960ST72v h00006Nkl# From b7d3d77ed60986ec55298e06246e515bd2630826 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isaque=20B=C3=B6ck?= Date: Mon, 27 Jul 2026 16:59:23 -0300 Subject: [PATCH 4/5] Update packages/webkit/src/components/navigation/dropdown/dropdown.test.ts Co-authored-by: Herbert Vicente Cotta Julio --- .../webkit/src/components/navigation/dropdown/dropdown.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/webkit/src/components/navigation/dropdown/dropdown.test.ts b/packages/webkit/src/components/navigation/dropdown/dropdown.test.ts index c25cf7119..4eb03f780 100644 --- a/packages/webkit/src/components/navigation/dropdown/dropdown.test.ts +++ b/packages/webkit/src/components/navigation/dropdown/dropdown.test.ts @@ -361,7 +361,6 @@ describe('Dropdown (compound / overlay)', () => { expect(command?.textContent?.trim()).toBe('⌘P') }) - // ---- ENG-46740: panel body clips overflowing content --------------------- it('clips horizontal overflow on the panel body so content respects the panel rounded borders', async () => { const { getByTestId } = render(Host) await fireEvent.click(getByTestId('navigation-dropdown__trigger')) From 1a5d03cbce9524f46ce3187d837e27abcc85fd20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isaque=20B=C3=B6ck?= Date: Mon, 27 Jul 2026 17:07:07 -0300 Subject: [PATCH 5/5] test: remove comments from dropdown test additions --- .../src/components/navigation/dropdown/dropdown.test.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/webkit/src/components/navigation/dropdown/dropdown.test.ts b/packages/webkit/src/components/navigation/dropdown/dropdown.test.ts index 4eb03f780..78075e6a0 100644 --- a/packages/webkit/src/components/navigation/dropdown/dropdown.test.ts +++ b/packages/webkit/src/components/navigation/dropdown/dropdown.test.ts @@ -371,15 +371,11 @@ describe('Dropdown (compound / overlay)', () => { ) as HTMLElement expect(body).not.toBeNull() - // Body must declare horizontal clipping and vertical auto-scroll on the - // rendered class attribute (ENG-46740). Tests do not run Tailwind, so we - // assert the utility classnames that carry the behavior. const cls = body.className expect(cls).toContain('overflow-x-hidden') expect(cls).toContain('overflow-y-auto') }) - // ---- ENG-46741: divider between groups is a flush hairline --------------- it('separates consecutive groups with a flush hairline (no vertical padding around the divider)', async () => { render(Host, { props: { open: true, grouped: true } }) await waitForOpen(5) @@ -390,18 +386,14 @@ describe('Dropdown (compound / overlay)', () => { const secondCls = groups[1].className const firstCls = groups[0].className - // The divider is a hairline top border applied only to non-first groups. expect(secondCls).toContain('[&:not([data-first])]:border-t') expect(secondCls).toContain('[&:not([data-first])]:border-[var(--border-default)]') - // No margin-top and no padding-top around the divider — must be flush. expect(secondCls).not.toMatch(/(?:^|[\s:])mt-\[/) expect(secondCls).not.toMatch(/(?:^|[\s:])pt-\[/) expect(secondCls).not.toMatch(/\[&:not\(\[data-first\]\)\]:mt-/) expect(secondCls).not.toMatch(/\[&:not\(\[data-first\]\)\]:pt-/) - // Both groups share the same base class; first group has data-first so the - // non-first variant never applies to it (no border, no spacing). expect(firstCls).toBe(secondCls) expect(groups[0].hasAttribute('data-first')).toBe(true) })