From 194fc53ade76355063473ba097f5f474e6102211 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 20 Mar 2026 20:02:57 +0100 Subject: [PATCH] fix(package/ui): override active hover effect of disabled button to not create visual glitches when button state changes (#9408) --- .../components/OsButton/button.variants.ts | 13 ++++ .../GroupContentMenu.spec.js.snap | 8 +-- .../CtaJoinLeaveGroup.spec.js.snap | 2 +- .../__snapshots__/ActionButton.spec.js.snap | 4 +- .../__snapshots__/ObserveButton.spec.js.snap | 4 +- .../__snapshots__/ShoutButton.spec.js.snap | 8 +-- .../CreateInvitation.spec.js.snap | 4 +- .../__snapshots__/Invitation.spec.js.snap | 8 +-- .../__snapshots__/InvitationList.spec.js.snap | 12 ++-- .../users/__snapshots__/index.spec.js.snap | 16 ++--- .../_id/__snapshots__/_slug.spec.js.snap | 72 +++++++++---------- .../_id/__snapshots__/invites.spec.js.snap | 6 +- .../_id/__snapshots__/_slug.spec.js.snap | 20 +++--- .../__snapshots__/notifications.spec.js.snap | 6 +- 14 files changed, 98 insertions(+), 85 deletions(-) diff --git a/packages/ui/src/components/OsButton/button.variants.ts b/packages/ui/src/components/OsButton/button.variants.ts index ac4050acb..2d29054f3 100644 --- a/packages/ui/src/components/OsButton/button.variants.ts +++ b/packages/ui/src/components/OsButton/button.variants.ts @@ -42,16 +42,29 @@ export const buttonVariants = cva( // Keep inset shadow to prevent layout shift 'disabled:bg-[var(--color-disabled)] disabled:text-[var(--color-disabled-contrast)]', 'disabled:border-[var(--color-disabled)] disabled:shadow-[inset_0_0_0_1px_transparent]', + // Override hover/active when disabled (hover persists until mouse leaves) + 'disabled:hover:bg-[var(--color-disabled)] disabled:hover:text-[var(--color-disabled-contrast)]', + 'disabled:hover:border-[var(--color-disabled)]', + 'disabled:active:bg-[var(--color-disabled)] disabled:active:text-[var(--color-disabled-contrast)]', + 'disabled:active:border-[var(--color-disabled)]', ], outline: [ 'bg-transparent shadow-none', // Disabled: light gray border and gray text 'disabled:border-[var(--color-disabled)] disabled:text-[var(--color-disabled)]', + // Override hover/active when disabled + 'disabled:hover:bg-transparent disabled:hover:text-[var(--color-disabled)]', + 'disabled:hover:border-[var(--color-disabled)]', + 'disabled:active:bg-transparent disabled:active:text-[var(--color-disabled)]', + 'disabled:active:border-[var(--color-disabled)]', ], ghost: [ 'bg-transparent shadow-none', // Disabled: gray text 'disabled:text-[var(--color-disabled)]', + // Override hover/active when disabled + 'disabled:hover:bg-transparent disabled:hover:text-[var(--color-disabled)]', + 'disabled:active:bg-transparent disabled:active:text-[var(--color-disabled)]', ], }, size: { diff --git a/webapp/components/ContentMenu/__snapshots__/GroupContentMenu.spec.js.snap b/webapp/components/ContentMenu/__snapshots__/GroupContentMenu.spec.js.snap index 9840bfa1c..3f45ded10 100644 --- a/webapp/components/ContentMenu/__snapshots__/GroupContentMenu.spec.js.snap +++ b/webapp/components/ContentMenu/__snapshots__/GroupContentMenu.spec.js.snap @@ -25,7 +25,7 @@ exports[`GroupContentMenu renders as groupProfile when I am the owner 1`] = ` > diff --git a/webapp/components/__snapshots__/ActionButton.spec.js.snap b/webapp/components/__snapshots__/ActionButton.spec.js.snap index 97a88e580..eb16eceaa 100644 --- a/webapp/components/__snapshots__/ActionButton.spec.js.snap +++ b/webapp/components/__snapshots__/ActionButton.spec.js.snap @@ -7,7 +7,7 @@ exports[`ActionButton.vue when disabled renders 1`] = ` >