diff --git a/.changeset/tame-boats-hide.md b/.changeset/tame-boats-hide.md
new file mode 100644
index 00000000000..d13e7497cc4
--- /dev/null
+++ b/.changeset/tame-boats-hide.md
@@ -0,0 +1,5 @@
+---
+"@primer/react": minor
+---
+
+Refactor Avatar component to use CSS modules behind feature flag
diff --git a/e2e/components/Avatar.test.ts b/e2e/components/Avatar.test.ts
index dab9f9de809..cbf9922090b 100644
--- a/e2e/components/Avatar.test.ts
+++ b/e2e/components/Avatar.test.ts
@@ -3,139 +3,151 @@ import {visit} from '../test-helpers/storybook'
import {themes} from '../test-helpers/themes'
test.describe('Avatar', () => {
- test.describe('Default', () => {
- for (const theme of themes) {
- test.describe(theme, () => {
- test('default @vrt', async ({page}) => {
- await visit(page, {
- id: 'components-avatar--default',
- globals: {
- colorScheme: theme,
- },
- })
+ for (const enabled of [true, false]) {
+ test.describe(`Feature flag enabled: ${enabled}`, () => {
+ test.describe('Default', () => {
+ for (const theme of themes) {
+ test.describe(theme, () => {
+ test('default @vrt', async ({page}) => {
+ await visit(page, {
+ id: 'components-avatar--default',
+ globals: {
+ colorScheme: theme,
+ primer_react_css_modules_team: enabled,
+ },
+ })
- // Default state
- expect(await page.screenshot()).toMatchSnapshot(`Avatar.Default.${theme}.png`)
- })
+ // Default state
+ expect(await page.screenshot()).toMatchSnapshot(`Avatar.Default.${theme}.png`)
+ })
- test('axe @aat', async ({page}) => {
- await visit(page, {
- id: 'components-avatar--default',
- globals: {
- colorScheme: theme,
- },
- })
- await expect(page).toHaveNoViolations({
- rules: {
- 'color-contrast': {
- enabled: theme !== 'dark_dimmed',
- },
- },
+ test('axe @aat', async ({page}) => {
+ await visit(page, {
+ id: 'components-avatar--default',
+ globals: {
+ colorScheme: theme,
+ primer_react_css_modules_team: enabled,
+ },
+ })
+ await expect(page).toHaveNoViolations({
+ rules: {
+ 'color-contrast': {
+ enabled: theme !== 'dark_dimmed',
+ },
+ },
+ })
+ })
})
- })
+ }
})
- }
- })
- test.describe('Size', () => {
- for (const theme of themes) {
- test.describe(theme, () => {
- test('default @vrt', async ({page}) => {
- await visit(page, {
- id: 'components-avatar-features--size',
- globals: {
- colorScheme: theme,
- },
- })
+ test.describe('Size', () => {
+ for (const theme of themes) {
+ test.describe(theme, () => {
+ test('default @vrt', async ({page}) => {
+ await visit(page, {
+ id: 'components-avatar-features--size',
+ globals: {
+ colorScheme: theme,
+ primer_react_css_modules_team: enabled,
+ },
+ })
- // Default state
- expect(await page.screenshot()).toMatchSnapshot(`Avatar.Size.${theme}.png`)
- })
+ // Default state
+ expect(await page.screenshot()).toMatchSnapshot(`Avatar.Size.${theme}.png`)
+ })
- test('axe @aat', async ({page}) => {
- await visit(page, {
- id: 'components-avatar-features--size',
- globals: {
- colorScheme: theme,
- },
- })
- await expect(page).toHaveNoViolations({
- rules: {
- 'color-contrast': {
- enabled: theme !== 'dark_dimmed',
- },
- },
+ test('axe @aat', async ({page}) => {
+ await visit(page, {
+ id: 'components-avatar-features--size',
+ globals: {
+ colorScheme: theme,
+ primer_react_css_modules_team: enabled,
+ },
+ })
+ await expect(page).toHaveNoViolations({
+ rules: {
+ 'color-contrast': {
+ enabled: theme !== 'dark_dimmed',
+ },
+ },
+ })
+ })
})
- })
+ }
})
- }
- })
- test.describe('Size Responsive', () => {
- for (const theme of themes) {
- test.describe(theme, () => {
- test('default @vrt', async ({page}) => {
- await visit(page, {
- id: 'components-avatar-features--size-responsive',
- globals: {
- colorScheme: theme,
- },
- })
+ test.describe('Size Responsive', () => {
+ for (const theme of themes) {
+ test.describe(theme, () => {
+ test('default @vrt', async ({page}) => {
+ await visit(page, {
+ id: 'components-avatar-features--size-responsive',
+ globals: {
+ colorScheme: theme,
+ primer_react_css_modules_team: enabled,
+ },
+ })
- // Default state
- expect(await page.screenshot()).toMatchSnapshot(`Avatar.Size Responsive.${theme}.png`)
- })
+ // Default state
+ expect(await page.screenshot()).toMatchSnapshot(`Avatar.Size Responsive.${theme}.png`)
+ })
- test('axe @aat', async ({page}) => {
- await visit(page, {
- id: 'components-avatar-features--size-responsive',
- globals: {
- colorScheme: theme,
- },
- })
- await expect(page).toHaveNoViolations({
- rules: {
- 'color-contrast': {
- enabled: theme !== 'dark_dimmed',
- },
- },
+ test('axe @aat', async ({page}) => {
+ await visit(page, {
+ id: 'components-avatar-features--size-responsive',
+ globals: {
+ colorScheme: theme,
+ primer_react_css_modules_team: enabled,
+ },
+ })
+ await expect(page).toHaveNoViolations({
+ rules: {
+ 'color-contrast': {
+ enabled: theme !== 'dark_dimmed',
+ },
+ },
+ })
+ })
})
- })
+ }
})
- }
- })
- test.describe('Square', () => {
- for (const theme of themes) {
- test.describe(theme, () => {
- test('default @vrt', async ({page}) => {
- await visit(page, {
- id: 'components-avatar-features--square',
- globals: {
- colorScheme: theme,
- },
- })
+ test.describe('Square', () => {
+ for (const theme of themes) {
+ test.describe(theme, () => {
+ test('default @vrt', async ({page}) => {
+ await visit(page, {
+ id: 'components-avatar-features--square',
+ globals: {
+ colorScheme: theme,
+ primer_react_css_modules_team: enabled,
+ },
+ })
- // Default state
- expect(await page.screenshot()).toMatchSnapshot(`Avatar.Square.${theme}.png`)
- })
+ // Default state
+ expect(await page.screenshot()).toMatchSnapshot(`Avatar.Square.${theme}.png`)
+ })
- test('axe @aat', async ({page}) => {
- await visit(page, {
- id: 'components-avatar-features--square',
- globals: {
- colorScheme: theme,
- },
- })
- await expect(page).toHaveNoViolations({
- rules: {
- 'color-contrast': {
- enabled: theme !== 'dark_dimmed',
- },
- },
+ test('axe @aat', async ({page}) => {
+ await visit(page, {
+ id: 'components-avatar-features--square',
+ globals: {
+ colorScheme: theme,
+ primer_react_css_modules_team: enabled,
+ },
+ })
+ await expect(page).toHaveNoViolations({
+ rules: {
+ 'color-contrast': {
+ enabled: theme !== 'dark_dimmed',
+ },
+ },
+ })
+ })
})
- })
+ }
})
- }
- })
+ })
+ }
})
diff --git a/packages/react/src/Avatar/Avatar.features.stories.tsx b/packages/react/src/Avatar/Avatar.features.stories.tsx
index d9d85814c15..dc5ee4b0636 100644
--- a/packages/react/src/Avatar/Avatar.features.stories.tsx
+++ b/packages/react/src/Avatar/Avatar.features.stories.tsx
@@ -9,6 +9,16 @@ export default {
export const Square = () =>