From 0e34299bd94cea0a4bf9f2f50752b457b088d69b Mon Sep 17 00:00:00 2001 From: llastflowers Date: Fri, 14 Aug 2026 09:03:15 -0700 Subject: [PATCH 1/6] deprecate Flash --- packages/react/src/Flash/Flash.docs.json | 4 ++-- packages/react/src/Flash/Flash.tsx | 6 ++++++ .../react/src/__tests__/__snapshots__/exports.test.ts.snap | 2 ++ packages/react/src/deprecated/index.ts | 5 +++++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/react/src/Flash/Flash.docs.json b/packages/react/src/Flash/Flash.docs.json index 5b154bce1ee..4d371c28d59 100644 --- a/packages/react/src/Flash/Flash.docs.json +++ b/packages/react/src/Flash/Flash.docs.json @@ -1,7 +1,7 @@ { "id": "flash", "name": "Flash", - "status": "alpha", + "status": "deprecated", "a11yReviewed": "2025-01-08", "stories": [ { @@ -26,7 +26,7 @@ "id": "components-flash-features--with-icon-action-dismiss" } ], - "importPath": "@primer/react", + "importPath": "@primer/react/deprecated", "props": [ { "name": "full", diff --git a/packages/react/src/Flash/Flash.tsx b/packages/react/src/Flash/Flash.tsx index b1b67db5f79..663d3db473b 100644 --- a/packages/react/src/Flash/Flash.tsx +++ b/packages/react/src/Flash/Flash.tsx @@ -3,12 +3,18 @@ import React from 'react' import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic' import classes from './Flash.module.css' +/** + * @deprecated Use `Banner` instead. + */ export type FlashProps = React.ComponentPropsWithoutRef<'div'> & { className?: string variant?: 'default' | 'warning' | 'success' | 'danger' full?: boolean } +/** + * @deprecated Use `Banner` instead. + */ const Flash = React.forwardRef(function Flash( {as: BaseComponent = 'div', className, variant = 'default', full, ...rest}, ref, diff --git a/packages/react/src/__tests__/__snapshots__/exports.test.ts.snap b/packages/react/src/__tests__/__snapshots__/exports.test.ts.snap index 068bacd8275..94bd40f056e 100644 --- a/packages/react/src/__tests__/__snapshots__/exports.test.ts.snap +++ b/packages/react/src/__tests__/__snapshots__/exports.test.ts.snap @@ -272,6 +272,8 @@ exports[`@primer/react/deprecated > should not update exports without a semver c "type DialogProps", "FilteredSearch", "type FilteredSearchProps", + "Flash", + "type FlashProps", "Octicon", "type OcticonProps", "Pagehead", diff --git a/packages/react/src/deprecated/index.ts b/packages/react/src/deprecated/index.ts index ad64fa29e32..f6aba361470 100644 --- a/packages/react/src/deprecated/index.ts +++ b/packages/react/src/deprecated/index.ts @@ -42,3 +42,8 @@ export type {TabNavProps, TabNavLinkProps} from '../TabNav' export {default as Tooltip} from '../Tooltip/Tooltip' export type {TooltipProps} from '../Tooltip/Tooltip' // end of v37.0.0 + +// Deprecated in v38 +export {default as Flash} from '../Flash' +export type {FlashProps} from '../Flash' +// end of v38 From e9e9c156adea24801d846e6ed1762eb6049da3ba Mon Sep 17 00:00:00 2001 From: "Brittany L. Houtz" <55068883+llastflowers@users.noreply.github.com> Date: Fri, 14 Aug 2026 09:14:13 -0700 Subject: [PATCH 2/6] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- packages/react/src/deprecated/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react/src/deprecated/index.ts b/packages/react/src/deprecated/index.ts index f6aba361470..e7ab95f7bd1 100644 --- a/packages/react/src/deprecated/index.ts +++ b/packages/react/src/deprecated/index.ts @@ -43,7 +43,7 @@ export {default as Tooltip} from '../Tooltip/Tooltip' export type {TooltipProps} from '../Tooltip/Tooltip' // end of v37.0.0 -// Deprecated in v38 +// Deprecated in v38.0.0 export {default as Flash} from '../Flash' export type {FlashProps} from '../Flash' -// end of v38 +// end of v38.0.0 From 0ad0c79512ec91fd6a36e029c877861f5b2d5f20 Mon Sep 17 00:00:00 2001 From: "Brittany L. Houtz" <55068883+llastflowers@users.noreply.github.com> Date: Fri, 14 Aug 2026 09:14:46 -0700 Subject: [PATCH 3/6] Create shy-moments-invent.md --- .changeset/shy-moments-invent.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/shy-moments-invent.md diff --git a/.changeset/shy-moments-invent.md b/.changeset/shy-moments-invent.md new file mode 100644 index 00000000000..61ba479a9fe --- /dev/null +++ b/.changeset/shy-moments-invent.md @@ -0,0 +1,5 @@ +--- +"@primer/react": minor +--- + +Deprecate the `Flash` component and move to `@primer/react/deprecated` From 083fc95a9a003764febc36ccaf68295edc259ec3 Mon Sep 17 00:00:00 2001 From: "Brittany L. Houtz" <55068883+llastflowers@users.noreply.github.com> Date: Fri, 14 Aug 2026 09:18:35 -0700 Subject: [PATCH 4/6] Update Flash.tsx expand deprecation notice a little more --- packages/react/src/Flash/Flash.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react/src/Flash/Flash.tsx b/packages/react/src/Flash/Flash.tsx index 663d3db473b..5c2584857d0 100644 --- a/packages/react/src/Flash/Flash.tsx +++ b/packages/react/src/Flash/Flash.tsx @@ -4,7 +4,7 @@ import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../uti import classes from './Flash.module.css' /** - * @deprecated Use `Banner` instead. + * @deprecated Use `Banner` instead. If migration is not yet possible, import `Flash` from `@primer/react/deprecated`. */ export type FlashProps = React.ComponentPropsWithoutRef<'div'> & { className?: string @@ -13,7 +13,7 @@ export type FlashProps = React.ComponentPropsWithoutRef<'div'> & { } /** - * @deprecated Use `Banner` instead. + * @deprecated Use `Banner` instead. If migration is not yet possible, import `Flash` from `@primer/react/deprecated`. */ const Flash = React.forwardRef(function Flash( {as: BaseComponent = 'div', className, variant = 'default', full, ...rest}, From 0e7d54e55242f9fd8876ba998c4f6e985948a284 Mon Sep 17 00:00:00 2001 From: llastflowers Date: Fri, 14 Aug 2026 15:25:16 -0700 Subject: [PATCH 5/6] Move Flash stories to Deprecated, and update e2e prefixes --- e2e/components/Axe.test.ts | 4 ++-- e2e/components/Flash.test.ts | 10 +++++----- packages/react/src/Flash/Flash.docs.json | 14 +++++++------- .../react/src/Flash/Flash.features.stories.tsx | 2 +- packages/react/src/Flash/Flash.stories.tsx | 2 +- script/generate-e2e-tests.js | 10 +++++----- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/e2e/components/Axe.test.ts b/e2e/components/Axe.test.ts index 7cd0e333107..41d53645820 100644 --- a/e2e/components/Axe.test.ts +++ b/e2e/components/Axe.test.ts @@ -11,8 +11,8 @@ import {themes} from '../test-helpers/themes' const SKIPPED_TESTS = [ 'components-treeview-features--stress-test', 'components-treeview-features--contain-intrinsic-size', - 'components-flash-features--with-icon-action-dismiss', // TODO: Remove once color-contrast issues have been resolved - 'components-flash-features--with-icon-and-action', // TODO: Remove once color-contrast issues have been resolved + 'deprecated-flash-features--with-icon-action-dismiss', // TODO: Remove once color-contrast issues have been resolved + 'deprecated-flash-features--with-icon-and-action', // TODO: Remove once color-contrast issues have been resolved 'components-filteredactionlist--default', // TODO: Remove these once FilteredActionList feature stories no longer trigger label/nested-interactive axe violations. 'components-filteredactionlist-features--loading-with-body-skeleton', diff --git a/e2e/components/Flash.test.ts b/e2e/components/Flash.test.ts index 0968a0f73d8..e832112dd3c 100644 --- a/e2e/components/Flash.test.ts +++ b/e2e/components/Flash.test.ts @@ -5,23 +5,23 @@ import {themes} from '../test-helpers/themes' const stories = [ { title: 'Default', - id: 'components-flash--default', + id: 'deprecated-flash--default', }, { title: 'Danger', - id: 'components-flash-features--danger', + id: 'deprecated-flash-features--danger', }, { title: 'Full', - id: 'components-flash-features--full', + id: 'deprecated-flash-features--full', }, { title: 'Success', - id: 'components-flash-features--success', + id: 'deprecated-flash-features--success', }, { title: 'Warning', - id: 'components-flash-features--warning', + id: 'deprecated-flash-features--warning', }, ] as const diff --git a/packages/react/src/Flash/Flash.docs.json b/packages/react/src/Flash/Flash.docs.json index 4d371c28d59..df479116618 100644 --- a/packages/react/src/Flash/Flash.docs.json +++ b/packages/react/src/Flash/Flash.docs.json @@ -5,25 +5,25 @@ "a11yReviewed": "2025-01-08", "stories": [ { - "id": "components-flash--default" + "id": "deprecated-flash--default" }, { - "id": "components-flash-features--success" + "id": "deprecated-flash-features--success" }, { - "id": "components-flash-features--danger" + "id": "deprecated-flash-features--danger" }, { - "id": "components-flash-features--warning" + "id": "deprecated-flash-features--warning" }, { - "id": "components-flash-features--full" + "id": "deprecated-flash-features--full" }, { - "id": "components-flash-features--with-icon-and-action" + "id": "deprecated-flash-features--with-icon-and-action" }, { - "id": "components-flash-features--with-icon-action-dismiss" + "id": "deprecated-flash-features--with-icon-action-dismiss" } ], "importPath": "@primer/react/deprecated", diff --git a/packages/react/src/Flash/Flash.features.stories.tsx b/packages/react/src/Flash/Flash.features.stories.tsx index 19e19123cdf..6a929261908 100644 --- a/packages/react/src/Flash/Flash.features.stories.tsx +++ b/packages/react/src/Flash/Flash.features.stories.tsx @@ -6,7 +6,7 @@ import Link from '../Link' import classes from './Flash.features.stories.module.css' export default { - title: 'Components/Flash/Features', + title: 'Deprecated/Flash/Features', component: Flash, } as Meta diff --git a/packages/react/src/Flash/Flash.stories.tsx b/packages/react/src/Flash/Flash.stories.tsx index 1b873397055..96407bcd9fb 100644 --- a/packages/react/src/Flash/Flash.stories.tsx +++ b/packages/react/src/Flash/Flash.stories.tsx @@ -2,7 +2,7 @@ import type {Meta, StoryFn} from '@storybook/react-vite' import Flash from './Flash' export default { - title: 'Components/Flash', + title: 'Deprecated/Flash', component: Flash, } as Meta diff --git a/script/generate-e2e-tests.js b/script/generate-e2e-tests.js index e086b73d662..a515fcf7e3c 100755 --- a/script/generate-e2e-tests.js +++ b/script/generate-e2e-tests.js @@ -500,23 +500,23 @@ const components = new Map([ { stories: [ { - id: 'components-flash--default', + id: 'deprecated-flash--default', name: 'Default', }, { - id: 'components-flash-features--danger', + id: 'deprecated-flash-features--danger', name: 'Danger', }, { - id: 'components-flash-features--full', + id: 'deprecated-flash-features--full', name: 'Full', }, { - id: 'components-flash-features--success', + id: 'deprecated-flash-features--success', name: 'Success', }, { - id: 'components-flash-features--warning', + id: 'deprecated-flash-features--warning', name: 'Warning', }, ], From cf7f35c3cb79e60c68c6594c84b77a409964f86a Mon Sep 17 00:00:00 2001 From: llastflowers Date: Fri, 14 Aug 2026 15:48:33 -0700 Subject: [PATCH 6/6] un-break everything --- e2e/components/Axe.test.ts | 4 ++-- e2e/components/Flash.test.ts | 10 +++++----- packages/react/src/Flash/Flash.docs.json | 14 +++++++------- .../react/src/Flash/Flash.features.stories.tsx | 2 +- packages/react/src/Flash/Flash.stories.tsx | 2 +- script/generate-e2e-tests.js | 10 +++++----- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/e2e/components/Axe.test.ts b/e2e/components/Axe.test.ts index 41d53645820..5d029fb2e88 100644 --- a/e2e/components/Axe.test.ts +++ b/e2e/components/Axe.test.ts @@ -11,8 +11,8 @@ import {themes} from '../test-helpers/themes' const SKIPPED_TESTS = [ 'components-treeview-features--stress-test', 'components-treeview-features--contain-intrinsic-size', - 'deprecated-flash-features--with-icon-action-dismiss', // TODO: Remove once color-contrast issues have been resolved - 'deprecated-flash-features--with-icon-and-action', // TODO: Remove once color-contrast issues have been resolved + 'deprecated-components-flash-features--with-icon-action-dismiss', // TODO: Remove once color-contrast issues have been resolved + 'deprecated-components-flash-features--with-icon-and-action', // TODO: Remove once color-contrast issues have been resolved 'components-filteredactionlist--default', // TODO: Remove these once FilteredActionList feature stories no longer trigger label/nested-interactive axe violations. 'components-filteredactionlist-features--loading-with-body-skeleton', diff --git a/e2e/components/Flash.test.ts b/e2e/components/Flash.test.ts index e832112dd3c..98acd1cbee8 100644 --- a/e2e/components/Flash.test.ts +++ b/e2e/components/Flash.test.ts @@ -5,23 +5,23 @@ import {themes} from '../test-helpers/themes' const stories = [ { title: 'Default', - id: 'deprecated-flash--default', + id: 'deprecated-components-flash--default', }, { title: 'Danger', - id: 'deprecated-flash-features--danger', + id: 'deprecated-components-flash-features--danger', }, { title: 'Full', - id: 'deprecated-flash-features--full', + id: 'deprecated-components-flash-features--full', }, { title: 'Success', - id: 'deprecated-flash-features--success', + id: 'deprecated-components-flash-features--success', }, { title: 'Warning', - id: 'deprecated-flash-features--warning', + id: 'deprecated-components-flash-features--warning', }, ] as const diff --git a/packages/react/src/Flash/Flash.docs.json b/packages/react/src/Flash/Flash.docs.json index df479116618..d86d6c6a578 100644 --- a/packages/react/src/Flash/Flash.docs.json +++ b/packages/react/src/Flash/Flash.docs.json @@ -5,25 +5,25 @@ "a11yReviewed": "2025-01-08", "stories": [ { - "id": "deprecated-flash--default" + "id": "deprecated-components-flash--default" }, { - "id": "deprecated-flash-features--success" + "id": "deprecated-components-flash-features--success" }, { - "id": "deprecated-flash-features--danger" + "id": "deprecated-components-flash-features--danger" }, { - "id": "deprecated-flash-features--warning" + "id": "deprecated-components-flash-features--warning" }, { - "id": "deprecated-flash-features--full" + "id": "deprecated-components-flash-features--full" }, { - "id": "deprecated-flash-features--with-icon-and-action" + "id": "deprecated-components-flash-features--with-icon-and-action" }, { - "id": "deprecated-flash-features--with-icon-action-dismiss" + "id": "deprecated-components-flash-features--with-icon-action-dismiss" } ], "importPath": "@primer/react/deprecated", diff --git a/packages/react/src/Flash/Flash.features.stories.tsx b/packages/react/src/Flash/Flash.features.stories.tsx index 6a929261908..d6de4bdfb91 100644 --- a/packages/react/src/Flash/Flash.features.stories.tsx +++ b/packages/react/src/Flash/Flash.features.stories.tsx @@ -6,7 +6,7 @@ import Link from '../Link' import classes from './Flash.features.stories.module.css' export default { - title: 'Deprecated/Flash/Features', + title: 'Deprecated/Components/Flash/Features', component: Flash, } as Meta diff --git a/packages/react/src/Flash/Flash.stories.tsx b/packages/react/src/Flash/Flash.stories.tsx index 96407bcd9fb..3a3953a14a5 100644 --- a/packages/react/src/Flash/Flash.stories.tsx +++ b/packages/react/src/Flash/Flash.stories.tsx @@ -2,7 +2,7 @@ import type {Meta, StoryFn} from '@storybook/react-vite' import Flash from './Flash' export default { - title: 'Deprecated/Flash', + title: 'Deprecated/Components/Flash', component: Flash, } as Meta diff --git a/script/generate-e2e-tests.js b/script/generate-e2e-tests.js index a515fcf7e3c..56f10ac36fb 100755 --- a/script/generate-e2e-tests.js +++ b/script/generate-e2e-tests.js @@ -500,23 +500,23 @@ const components = new Map([ { stories: [ { - id: 'deprecated-flash--default', + id: 'deprecated-components-flash--default', name: 'Default', }, { - id: 'deprecated-flash-features--danger', + id: 'deprecated-components-flash-features--danger', name: 'Danger', }, { - id: 'deprecated-flash-features--full', + id: 'deprecated-components-flash-features--full', name: 'Full', }, { - id: 'deprecated-flash-features--success', + id: 'deprecated-components-flash-features--success', name: 'Success', }, { - id: 'deprecated-flash-features--warning', + id: 'deprecated-components-flash-features--warning', name: 'Warning', }, ],