Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/metal-deer-refuse.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@primer/react': major
---

Remove the `sx` prop from `Flash`
5 changes: 0 additions & 5 deletions packages/react/src/Flash/Flash.docs.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -48,11 +48,6 @@
"name": "as",
"type": "React.ElementType",
"defaultValue": "\"div\""
},
{
"name": "sx",
"type": "SystemStyleObject",
"deprecated": true
}
],
"subcomponents": []
Expand Down
31 changes: 31 additions & 0 deletions packages/react/src/Flash/Flash.features.stories.module.css
Original file line numberDiff line numberDiff line change
Expand Up@@ -31,4 +31,35 @@
.Close {
grid-area: close;
margin-left: var(--base-size-8);

& svg {
margin: 0;
color: var(--fgColor-muted);
}
}

.WithIconAndAction {
display: grid;
grid-template-columns: min-content 1fr minmax(0, auto);
grid-template-rows: min-content;
grid-template-areas: 'visual message actions';

@media screen and (max-width: 543.98px) {
grid-template-columns: min-content 1fr;
grid-template-rows: min-content min-content;
grid-template-areas: 'visual message' '. actions';
}
}

.WithIconActionDismiss {
display: grid;
grid-template-columns: min-content 1fr minmax(0, auto);
grid-template-rows: min-content;
grid-template-areas: 'visual message actions close';

@media screen and (max-width: 543.98px) {
grid-template-columns: min-content 1fr;
grid-template-rows: min-content min-content;
grid-template-areas: 'visual message close' '. actions actions';
}
}
57 changes: 13 additions & 44 deletions packages/react/src/Flash/Flash.features.stories.tsx
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
import type {Meta} from '@storybook/react-vite'
import Flash from './Flash'
import Octicon from '../Octicon'
import {AlertIcon, CheckCircleIcon, InfoIcon, XIcon} from '@primer/octicons-react'
import {Button, IconButton} from '../Button'
import Link from '../Link'
Expand All@@ -14,14 +13,14 @@ export default {
export const Success = () => (
<Flash
variant="success"
sx={{
style={{
display: 'grid',
gridTemplateColumns: 'min-content 1fr minmax(0, auto)',
gridTemplateAreas: `'visual message actions'`,
}}
>
<div className={classes.Visual}>
<Octicon icon={CheckCircleIcon} aria-label="Success" />
<CheckCircleIcon aria-label="Success" />
</div>
<div className={classes.Message}>Success</div>
</Flash>
Expand All@@ -30,14 +29,14 @@ export const Success = () => (
export const Danger = () => (
<Flash
variant="danger"
sx={{
style={{
display: 'grid',
gridTemplateColumns: 'min-content 1fr minmax(0, auto)',
gridTemplateAreas: `'visual message actions'`,
}}
>
<div className={classes.Visual}>
<Octicon icon={InfoIcon} aria-label="Danger" />
<InfoIcon aria-label="Danger" />
</div>
<div className={classes.Message}>Danger</div>
</Flash>
Expand All@@ -46,14 +45,14 @@ export const Danger = () => (
export const Warning = () => (
<Flash
variant="warning"
sx={{
style={{
display: 'grid',
gridTemplateColumns: 'min-content 1fr minmax(0, auto)',
gridTemplateAreas: `'visual message actions'`,
}}
>
<div className={classes.Visual}>
<Octicon icon={AlertIcon} aria-label="Warning" />
<AlertIcon aria-label="Warning" />
</div>
<div className={classes.Message}>Warning</div>
</Flash>
Expand All@@ -62,38 +61,23 @@ export const Warning = () => (
export const Full = () => (
<Flash
full
sx={{
style={{
display: 'grid',
gridTemplateColumns: 'min-content 1fr minmax(0, auto)',
gridTemplateAreas: `'visual message actions'`,
}}
>
<div className={classes.Visual}>
<Octicon icon={InfoIcon} aria-label="Info" />
<InfoIcon aria-label="Info" />
</div>
<div className={classes.Message}>Full</div>
</Flash>
)

export const WithIconAndAction = () => (
<Flash
sx={{
display: 'grid',
gridTemplateColumns: 'min-content 1fr minmax(0, auto)',
gridTemplateRows: 'min-content',
gridTemplateAreas: `'visual message actions'`,
'@media screen and (max-width: 543.98px)': {
gridTemplateColumns: 'min-content 1fr',
gridTemplateRows: 'min-content min-content',
gridTemplateAreas: `
'visual message'
'. actions'
`,
},
}}
>
<Flash className={classes.WithIconAndAction}>
<div className={classes.Visual}>
<Octicon icon={InfoIcon} aria-label="Info" />
<InfoIcon aria-label="Info" />
</div>
<div className={classes.Message}>
This is a flash message with an icon and an action.
Expand All@@ -106,24 +90,9 @@ export const WithIconAndAction = () => (
)

export const WithIconActionDismiss = () => (
<Flash
sx={{
display: 'grid',
gridTemplateColumns: 'min-content 1fr minmax(0, auto)',
gridTemplateRows: 'min-content',
gridTemplateAreas: `'visual message actions close'`,
'@media screen and (max-width: 543.98px)': {
gridTemplateColumns: 'min-content 1fr',
gridTemplateRows: 'min-content min-content',
gridTemplateAreas: `
'visual message close'
'. actions actions'
`,
},
}}
>
<Flash className={classes.WithIconActionDismiss}>
<div className={classes.Visual}>
<Octicon icon={InfoIcon} aria-label="Info" />
<InfoIcon aria-label="Info" />
</div>
<div className={classes.Message}>
This is a flash message with an icon and an action.
Expand All@@ -133,7 +102,7 @@ export const WithIconActionDismiss = () => (
<Button>Join waitlist</Button>
</div>
<div className={classes.Close}>
<IconButton variant="invisible" icon={XIcon} aria-label="Dismiss" sx={{svg: {margin: '0', color: 'fg.muted'}}} />
<IconButton variant="invisible" icon={XIcon} aria-label="Dismiss" />
</div>
</Flash>
)
13 changes: 6 additions & 7 deletions packages/react/src/Flash/Flash.tsx
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,25 @@
import {clsx} from 'clsx'
import React from 'react'
import type {SxProp} from '../sx'
import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic'
import {BoxWithFallback} from '../internal/components/BoxWithFallback'
import classes from './Flash.module.css'

export type FlashProps = React.ComponentPropsWithoutRef<'div'> & {
className?: string
variant?: 'default' | 'warning' | 'success' | 'danger'
full?: boolean
} & SxProp
}

const Flash = React.forwardRef(function Flash({as, className, variant = 'default', full, sx, ...rest}, ref) {
const Flash = React.forwardRef(function Flash(
{as: BaseComponent = 'div', className, variant = 'default', full, ...rest},
ref,
) {
return (
<BoxWithFallback
<BaseComponent
{...rest}
ref={ref}
as={as}
className={clsx(classes.Flash, className)}
data-full={full ? '' : undefined}
data-variant={variant}
sx={sx}
/>
)
}) as PolymorphicForwardRefComponent<'div', FlashProps>
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -745,7 +745,7 @@ export const NestedSelection = () => {
<>
<h1>Nested selection</h1>

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

Expand DownExpand Up@@ -1065,7 +1065,7 @@ const CreateNewLabelDialog = ({
{type: 'submit', buttonType: 'primary', content: 'Save', onClick: () => formSubmitRef.current?.click()},
]}
>
<Flash sx={{marginBottom: 2}} variant="warning">
<Flash style={{marginBottom: '8px'}} variant="warning">
Note this Dialog is not accessible. Do not copy this.
</Flash>
<form onSubmit={onSubmit}>
Expand Down
15 changes: 15 additions & 0 deletions packages/styled-react/src/components/Flash.tsx
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
import {type FlashProps as PrimerFlashProps, Flash as PrimerFlash} from '@primer/react'
import styled from 'styled-components'
import {sx, type SxProp} from '../sx'
import type {ForwardRefComponent} from '../polymorphic'

type FlashProps = PrimerFlashProps & SxProp

const Flash: ForwardRefComponent<'div', FlashProps> = styled(PrimerFlash).withConfig<FlashProps>({
shouldForwardProp: prop => prop !== 'sx',
})`
${sx}
`

export {Flash}
export type {FlashProps}
3 changes: 2 additions & 1 deletion packages/styled-react/src/index.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -133,6 +133,8 @@ const UnderlineNav = Object.assign(UnderlineNavImpl, {
Item: UnderlineNavItem,
})

export {Flash} from './components/Flash'

export {
LinkButton,
type LinkButtonProps,
Expand All@@ -156,7 +158,6 @@ export {
CircleBadge,
Details,
Dialog,
Flash,
FormControl,
Header,
Heading,
Expand Down
1 change: 1 addition & 0 deletions packages/styled-react/src/sx.ts
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
export {sx, type SxProp} from '@primer/react'
Loading