diff --git a/packages/react/src/Avatar/Avatar.test.tsx b/packages/react/src/Avatar/Avatar.test.tsx
index 536c92f1710..ba816856822 100644
--- a/packages/react/src/Avatar/Avatar.test.tsx
+++ b/packages/react/src/Avatar/Avatar.test.tsx
@@ -7,6 +7,14 @@ import classes from './Avatar.module.css'
describe('Avatar', () => {
implementsClassName(Avatar, classes.Avatar)
+ describe('Avatar data-component attribute', () => {
+ it('renders Avatar with data-component attribute', () => {
+ render()
+ const avatar = screen.getByTestId('avatar')
+ expect(avatar).toHaveAttribute('data-component', 'Avatar')
+ })
+ })
+
it('renders small by default', () => {
const size = 20
render()
diff --git a/packages/react/src/AvatarStack/AvatarStack.test.tsx b/packages/react/src/AvatarStack/AvatarStack.test.tsx
index 81bc50838e6..b8c46e426e1 100644
--- a/packages/react/src/AvatarStack/AvatarStack.test.tsx
+++ b/packages/react/src/AvatarStack/AvatarStack.test.tsx
@@ -25,9 +25,24 @@ const rightAvatarComp = (
describe('AvatarStack', () => {
implementsClassName(AvatarStack, classes.AvatarStack)
+ describe('AvatarStack data-component attributes', () => {
+ it('renders AvatarStack with data-component attribute', () => {
+ const {container} = render(avatarComp)
+ const root = container.querySelector('[data-component="AvatarStack"]')
+ expect(root).toBeInTheDocument()
+ })
+
+ it('renders AvatarStack.Body with data-component attribute', () => {
+ const {container} = render(avatarComp)
+ const body = container.querySelector('[data-component="AvatarStack.Body"]')
+ expect(body).toBeInTheDocument()
+ })
+ })
+
it('respects alignRight props', () => {
const {container} = render(rightAvatarComp)
- expect(container.firstChild).toMatchSnapshot()
+ const root = container.querySelector('[data-component="AvatarStack"]')
+ expect(root).toHaveAttribute('data-align-right', '')
})
it('should have a tabindex of 0 if there are no interactive children', () => {
diff --git a/packages/react/src/AvatarStack/AvatarStack.tsx b/packages/react/src/AvatarStack/AvatarStack.tsx
index ae400a90876..f7df678552a 100644
--- a/packages/react/src/AvatarStack/AvatarStack.tsx
+++ b/packages/react/src/AvatarStack/AvatarStack.tsx
@@ -42,6 +42,7 @@ const AvatarStackBody = ({
} & React.ComponentPropsWithoutRef<'div'>) => {
return (
3 ? '3+' : count}
diff --git a/packages/react/src/AvatarStack/__snapshots__/AvatarStack.test.tsx.snap b/packages/react/src/AvatarStack/__snapshots__/AvatarStack.test.tsx.snap
deleted file mode 100644
index 04f86ce225d..00000000000
--- a/packages/react/src/AvatarStack/__snapshots__/AvatarStack.test.tsx.snap
+++ /dev/null
@@ -1,40 +0,0 @@
-// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
-
-exports[`AvatarStack > respects alignRight props 1`] = `
-
-
-
-`;
diff --git a/packages/react/src/Banner/Banner.test.tsx b/packages/react/src/Banner/Banner.test.tsx
index b8d71883c63..73d771ad36a 100644
--- a/packages/react/src/Banner/Banner.test.tsx
+++ b/packages/react/src/Banner/Banner.test.tsx
@@ -14,6 +14,36 @@ describe('Banner', () => {
expect(screen.getByRole('heading', {name: 'test'})).toBeInTheDocument()
})
+ it('renders data-component attributes', () => {
+ const {container} = render(
+
test primary action}
+ secondaryAction={test secondary action}
+ onDismiss={() => {}}
+ />,
+ )
+
+ expect(container.querySelector('[data-component="Banner"]')).toBeInTheDocument()
+ expect(container.querySelector('[data-component="Banner.Icon"]')).toBeInTheDocument()
+ expect(container.querySelector('[data-component="Banner.Content"]')).toBeInTheDocument()
+ expect(container.querySelector('[data-component="Banner.Actions"]')).toBeInTheDocument()
+
+ expect(container.querySelector('[data-component="Banner.PrimaryAction"]')).toBeInTheDocument()
+ expect(container.querySelector('[data-component="Banner.SecondaryAction"]')).toBeInTheDocument()
+
+ expect(container.querySelector('[data-component="Banner.Title"]')).toBeInTheDocument()
+ expect(container.querySelector('[data-component="Banner.Description"]')).toBeInTheDocument()
+ })
+
+ it('renders Banner dismiss IconButton with data-component attribute', () => {
+ const {container} = render( {}} />)
+
+ const dismissButton = container.querySelector('[data-component="Banner"] [data-component="IconButton"]')
+ expect(dismissButton).toBeInTheDocument()
+ })
+
it('should label the landmark element with the title by default', () => {
render()
const region = screen.getByRole('region', {name: 'My Banner Title'})
diff --git a/packages/react/src/Banner/Banner.tsx b/packages/react/src/Banner/Banner.tsx
index 44db1cbd3fb..8837134b86d 100644
--- a/packages/react/src/Banner/Banner.tsx
+++ b/packages/react/src/Banner/Banner.tsx
@@ -157,6 +157,7 @@ export const Banner = React.forwardRef(function Banner
return (
(function Banner
data-layout={rest.layout || 'default'}
data-flush={flush ? '' : undefined}
>
- {visual && supportsCustomIcon ? visual : iconForVariant[variant]}
+
+ {visual && supportsCustomIcon ? visual : iconForVariant[variant]}
+
-
+
{title ? (
hideTitle ? (
@@ -215,7 +218,13 @@ export function BannerTitle(props: BannerTitleProps
+
{children}
)
@@ -225,7 +234,7 @@ export type BannerDescriptionProps = React.ComponentPropsWithoutRef<'div'>
export function BannerDescription({children, className, ...rest}: BannerDescriptionProps) {
return (
-
+
{children}
)
@@ -238,7 +247,7 @@ export type BannerActionsProps = {
export function BannerActions({primaryAction, secondaryAction}: BannerActionsProps) {
return (
-
+
{secondaryAction ?? null}
{primaryAction ?? null}
@@ -255,7 +264,13 @@ export type BannerPrimaryActionProps = Omit
const BannerPrimaryAction = forwardRef(({children, className, ...rest}, forwardedRef) => {
return (
-