Skip to content

Commit fa70b5e

Browse files
feat(Flash): remove support for sx (#6834)
Co-authored-by: Marie Lucca <40550942+francinelucca@users.noreply.github.com> Co-authored-by: Marie Lucca <francinelucca@github.com>
1 parent 5ad1e93 commit fa70b5e

File tree

9 files changed

+75
-59
lines changed

9 files changed

+75
-59
lines changed

.changeset/metal-deer-refuse.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@primer/react': major
3+
---
4+
5+
Remove the `sx` prop from `Flash`

packages/react/src/Flash/Flash.docs.json

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,6 @@
4848
"name": "as",
4949
"type": "React.ElementType",
5050
"defaultValue": "\"div\""
51-
},
52-
{
53-
"name": "sx",
54-
"type": "SystemStyleObject",
55-
"deprecated": true
5651
}
5752
],
5853
"subcomponents": []

packages/react/src/Flash/Flash.features.stories.module.css

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,35 @@
3131
.Close {
3232
grid-area: close;
3333
margin-left: var(--base-size-8);
34+
35+
& svg {
36+
margin: 0;
37+
color: var(--fgColor-muted);
38+
}
39+
}
40+
41+
.WithIconAndAction {
42+
display: grid;
43+
grid-template-columns: min-content 1fr minmax(0, auto);
44+
grid-template-rows: min-content;
45+
grid-template-areas: 'visual message actions';
46+
47+
@media screen and (max-width: 543.98px) {
48+
grid-template-columns: min-content 1fr;
49+
grid-template-rows: min-content min-content;
50+
grid-template-areas: 'visual message' '. actions';
51+
}
52+
}
53+
54+
.WithIconActionDismiss {
55+
display: grid;
56+
grid-template-columns: min-content 1fr minmax(0, auto);
57+
grid-template-rows: min-content;
58+
grid-template-areas: 'visual message actions close';
59+
60+
@media screen and (max-width: 543.98px) {
61+
grid-template-columns: min-content 1fr;
62+
grid-template-rows: min-content min-content;
63+
grid-template-areas: 'visual message close' '. actions actions';
64+
}
3465
}
Lines changed: 13 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import type {Meta} from '@storybook/react-vite'
22
import Flash from './Flash'
3-
import Octicon from '../Octicon'
43
import {AlertIcon, CheckCircleIcon, InfoIcon, XIcon} from '@primer/octicons-react'
54
import {Button, IconButton} from '../Button'
65
import Link from '../Link'
@@ -14,14 +13,14 @@ export default {
1413
export const Success = () => (
1514
<Flash
1615
variant="success"
17-
sx={{
16+
style={{
1817
display: 'grid',
1918
gridTemplateColumns: 'min-content 1fr minmax(0, auto)',
2019
gridTemplateAreas: `'visual message actions'`,
2120
}}
2221
>
2322
<div className={classes.Visual}>
24-
<Octicon icon={CheckCircleIcon} aria-label="Success" />
23+
<CheckCircleIcon aria-label="Success" />
2524
</div>
2625
<div className={classes.Message}>Success</div>
2726
</Flash>
@@ -30,14 +29,14 @@ export const Success = () => (
3029
export const Danger = () => (
3130
<Flash
3231
variant="danger"
33-
sx={{
32+
style={{
3433
display: 'grid',
3534
gridTemplateColumns: 'min-content 1fr minmax(0, auto)',
3635
gridTemplateAreas: `'visual message actions'`,
3736
}}
3837
>
3938
<div className={classes.Visual}>
40-
<Octicon icon={InfoIcon} aria-label="Danger" />
39+
<InfoIcon aria-label="Danger" />
4140
</div>
4241
<div className={classes.Message}>Danger</div>
4342
</Flash>
@@ -46,14 +45,14 @@ export const Danger = () => (
4645
export const Warning = () => (
4746
<Flash
4847
variant="warning"
49-
sx={{
48+
style={{
5049
display: 'grid',
5150
gridTemplateColumns: 'min-content 1fr minmax(0, auto)',
5251
gridTemplateAreas: `'visual message actions'`,
5352
}}
5453
>
5554
<div className={classes.Visual}>
56-
<Octicon icon={AlertIcon} aria-label="Warning" />
55+
<AlertIcon aria-label="Warning" />
5756
</div>
5857
<div className={classes.Message}>Warning</div>
5958
</Flash>
@@ -62,38 +61,23 @@ export const Warning = () => (
6261
export const Full = () => (
6362
<Flash
6463
full
65-
sx={{
64+
style={{
6665
display: 'grid',
6766
gridTemplateColumns: 'min-content 1fr minmax(0, auto)',
6867
gridTemplateAreas: `'visual message actions'`,
6968
}}
7069
>
7170
<div className={classes.Visual}>
72-
<Octicon icon={InfoIcon} aria-label="Info" />
71+
<InfoIcon aria-label="Info" />
7372
</div>
7473
<div className={classes.Message}>Full</div>
7574
</Flash>
7675
)
7776

7877
export const WithIconAndAction = () => (
79-
<Flash
80-
sx={{
81-
display: 'grid',
82-
gridTemplateColumns: 'min-content 1fr minmax(0, auto)',
83-
gridTemplateRows: 'min-content',
84-
gridTemplateAreas: `'visual message actions'`,
85-
'@media screen and (max-width: 543.98px)': {
86-
gridTemplateColumns: 'min-content 1fr',
87-
gridTemplateRows: 'min-content min-content',
88-
gridTemplateAreas: `
89-
'visual message'
90-
'. actions'
91-
`,
92-
},
93-
}}
94-
>
78+
<Flash className={classes.WithIconAndAction}>
9579
<div className={classes.Visual}>
96-
<Octicon icon={InfoIcon} aria-label="Info" />
80+
<InfoIcon aria-label="Info" />
9781
</div>
9882
<div className={classes.Message}>
9983
This is a flash message with an icon and an action.
@@ -106,24 +90,9 @@ export const WithIconAndAction = () => (
10690
)
10791

10892
export const WithIconActionDismiss = () => (
109-
<Flash
110-
sx={{
111-
display: 'grid',
112-
gridTemplateColumns: 'min-content 1fr minmax(0, auto)',
113-
gridTemplateRows: 'min-content',
114-
gridTemplateAreas: `'visual message actions close'`,
115-
'@media screen and (max-width: 543.98px)': {
116-
gridTemplateColumns: 'min-content 1fr',
117-
gridTemplateRows: 'min-content min-content',
118-
gridTemplateAreas: `
119-
'visual message close'
120-
'. actions actions'
121-
`,
122-
},
123-
}}
124-
>
93+
<Flash className={classes.WithIconActionDismiss}>
12594
<div className={classes.Visual}>
126-
<Octicon icon={InfoIcon} aria-label="Info" />
95+
<InfoIcon aria-label="Info" />
12796
</div>
12897
<div className={classes.Message}>
12998
This is a flash message with an icon and an action.
@@ -133,7 +102,7 @@ export const WithIconActionDismiss = () => (
133102
<Button>Join waitlist</Button>
134103
</div>
135104
<div className={classes.Close}>
136-
<IconButton variant="invisible" icon={XIcon} aria-label="Dismiss" sx={{svg: {margin: '0', color: 'fg.muted'}}} />
105+
<IconButton variant="invisible" icon={XIcon} aria-label="Dismiss" />
137106
</div>
138107
</Flash>
139108
)

packages/react/src/Flash/Flash.tsx

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,25 @@
11
import {clsx} from 'clsx'
22
import React from 'react'
3-
import type {SxProp} from '../sx'
43
import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic'
5-
import {BoxWithFallback} from '../internal/components/BoxWithFallback'
64
import classes from './Flash.module.css'
75

86
export type FlashProps = React.ComponentPropsWithoutRef<'div'> & {
97
className?: string
108
variant?: 'default' | 'warning' | 'success' | 'danger'
119
full?: boolean
12-
} & SxProp
10+
}
1311

14-
const Flash = React.forwardRef(function Flash({as, className, variant = 'default', full, sx, ...rest}, ref) {
12+
const Flash = React.forwardRef(function Flash(
13+
{as: BaseComponent = 'div', className, variant = 'default', full, ...rest},
14+
ref,
15+
) {
1516
return (
16-
<BoxWithFallback
17+
<BaseComponent
1718
{...rest}
1819
ref={ref}
19-
as={as}
2020
className={clsx(classes.Flash, className)}
2121
data-full={full ? '' : undefined}
2222
data-variant={variant}
23-
sx={sx}
2423
/>
2524
)
2625
}) as PolymorphicForwardRefComponent<'div', FlashProps>

packages/react/src/experimental/SelectPanel2/SelectPanel.examples.stories.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -745,7 +745,7 @@ export const NestedSelection = () => {
745745
<>
746746
<h1>Nested selection</h1>
747747

748-
<Flash variant="warning" sx={{mb: 2}}>
748+
<Flash variant="warning" style={{marginBottom: '8px'}}>
749749
This story is not fully accessible, do not copy it without review!
750750
</Flash>
751751

@@ -1065,7 +1065,7 @@ const CreateNewLabelDialog = ({
10651065
{type: 'submit', buttonType: 'primary', content: 'Save', onClick: () => formSubmitRef.current?.click()},
10661066
]}
10671067
>
1068-
<Flash sx={{marginBottom: 2}} variant="warning">
1068+
<Flash style={{marginBottom: '8px'}} variant="warning">
10691069
Note this Dialog is not accessible. Do not copy this.
10701070
</Flash>
10711071
<form onSubmit={onSubmit}>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import {type FlashProps as PrimerFlashProps, Flash as PrimerFlash} from '@primer/react'
2+
import styled from 'styled-components'
3+
import {sx, type SxProp} from '../sx'
4+
import type {ForwardRefComponent} from '../polymorphic'
5+
6+
type FlashProps = PrimerFlashProps & SxProp
7+
8+
const Flash: ForwardRefComponent<'div', FlashProps> = styled(PrimerFlash).withConfig<FlashProps>({
9+
shouldForwardProp: prop => prop !== 'sx',
10+
})`
11+
${sx}
12+
`
13+
14+
export {Flash}
15+
export type {FlashProps}

packages/styled-react/src/index.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ const UnderlineNav = Object.assign(UnderlineNavImpl, {
189189
Item: UnderlineNavItem,
190190
})
191191

192+
export {Flash} from './components/Flash'
193+
192194
export {
193195
LinkButton,
194196
type LinkButtonProps,
@@ -214,7 +216,6 @@ export {
214216
CircleBadge,
215217
Details,
216218
Dialog,
217-
Flash,
218219
FormControl,
219220
Header,
220221
Heading,

packages/styled-react/src/sx.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export {sx, type SxProp} from '@primer/react'

0 commit comments

Comments
 (0)