diff --git a/.changeset/avatar-button-sizing.md b/.changeset/avatar-button-sizing.md new file mode 100644 index 00000000000..60ea3bfff0a --- /dev/null +++ b/.changeset/avatar-button-sizing.md @@ -0,0 +1,5 @@ +--- +"@primer/react": patch +--- + +Avatar: Add min-width and flex-shrink protection to prevent unexpected shrinking in Button leadingVisual and flex layouts (#7974). diff --git a/packages/react/src/Avatar/Avatar.module.css b/packages/react/src/Avatar/Avatar.module.css index fc67531b9a7..25c9d6b62d1 100644 --- a/packages/react/src/Avatar/Avatar.module.css +++ b/packages/react/src/Avatar/Avatar.module.css @@ -1,7 +1,9 @@ :where(.Avatar) { display: inline-block; width: var(--avatarSize-regular); + min-width: var(--avatarSize-regular); height: var(--avatarSize-regular); + flex-shrink: 0; overflow: hidden; /* Ensure page layout in Firefox should images fail to load */ /* stylelint-disable-next-line primer/typography */ line-height: 1; @@ -18,16 +20,19 @@ &:where([data-responsive]) { @media screen and (--viewportRange-narrow) { width: var(--avatarSize-narrow); + min-width: var(--avatarSize-narrow); height: var(--avatarSize-narrow); } @media screen and (--viewportRange-regular) { width: var(--avatarSize-regular); + min-width: var(--avatarSize-regular); height: var(--avatarSize-regular); } @media screen and (--viewportRange-wide) { width: var(--avatarSize-wide); + min-width: var(--avatarSize-wide); height: var(--avatarSize-wide); } } diff --git a/packages/react/src/Button/__tests__/Button.test.tsx b/packages/react/src/Button/__tests__/Button.test.tsx index e95eb5d614d..5abeecb98df 100644 --- a/packages/react/src/Button/__tests__/Button.test.tsx +++ b/packages/react/src/Button/__tests__/Button.test.tsx @@ -4,6 +4,7 @@ import {render, fireEvent} from '@testing-library/react' import {describe, it, expect, vi} from 'vitest' import React from 'react' import {IconButton, Button, LinkButton} from '../../Button' +import Avatar from '../../Avatar' import classes from '../ButtonBase.module.css' import {implementsClassName} from '../../utils/testing' import {FeatureFlags} from '../../FeatureFlags' @@ -708,4 +709,17 @@ describe('data-component attributes', () => { .toBeInTheDocument() }) }) + + it('renders Avatar in leadingVisual without collapsing dimensions (#7974)', async () => { + render( + , + ) + const avatar = page.getByTestId('button-avatar') + await expect.element(avatar).toBeInTheDocument() + await expect.element(avatar).toHaveAttribute('data-component', 'Avatar') + await expect.element(avatar).toHaveAttribute('width', '20') + await expect.element(avatar).toHaveAttribute('height', '20') + }) })