1
1
import { AlertFillIcon , AlertIcon , CheckCircleFillIcon , CheckCircleIcon } from '@primer/octicons-react'
2
2
import { clsx } from 'clsx'
3
3
import React from 'react'
4
- import styled from 'styled-components'
5
- import { get } from '../constants'
6
- import { toggleStyledComponent } from '../internal/utils/toggleStyledComponent'
7
- import { useFeatureFlag } from '../FeatureFlags'
8
4
import classes from './InlineMessage.module.css'
9
5
import type { SxProp } from '../sx'
6
+ import { defaultSxProp } from '../utils/defaultSxProp'
7
+ import Box from '../Box'
10
8
type MessageVariant = 'critical' | 'success' | 'unavailable' | 'warning'
11
9
12
- const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_ga'
13
-
14
10
export type InlineMessageProps = React . ComponentPropsWithoutRef < 'div' > &
15
11
SxProp & {
16
12
/**
@@ -24,62 +20,18 @@ export type InlineMessageProps = React.ComponentPropsWithoutRef<'div'> &
24
20
variant : MessageVariant
25
21
}
26
22
27
- const StyledMessage = toggleStyledComponent (
28
- CSS_MODULES_FEATURE_FLAG ,
29
- 'div' ,
30
- styled . div `
31
- display: grid;
32
- column-gap: 0.5rem;
33
- grid-template-columns: auto 1fr;
34
- align-items: start;
35
- color: var(--inline-message-fgColor, ${ get ( 'colors.fg.muted' ) } );
36
- line-height: var(--inline-message-lineHeight);
37
- font-size: var(--inline-message-fontSize, ${ get ( 'fontSizes.1' ) } );
38
-
39
- &[data-size='small'] {
40
- --inline-message-fontSize: var(--text-body-size-small, ${ get ( 'fontSizes.0' ) } );
41
- --inline-message-lineHeight: var(--text-body-lineHeight-small, 1.6666);
42
- }
43
-
44
- &[data-size='medium'] {
45
- --inline-message-fontSize: var(--text-body-size-medium, ${ get ( 'fontSizes.1' ) } );
46
- --inline-message-lineHeight: var(--text-body-lineHeight-medium, 1.4285);
47
- }
48
-
49
- &[data-variant='warning'] {
50
- --inline-message-fgColor: ${ get ( 'colors.attention.fg' ) } ;
51
- }
52
-
53
- &[data-variant='critical'] {
54
- --inline-message-fgColor: ${ get ( 'colors.danger.fg' ) } ;
55
- }
56
-
57
- &[data-variant='success'] {
58
- --inline-message-fgColor: ${ get ( 'colors.success.fg' ) } ;
59
- }
60
-
61
- &[data-variant='unavailable'] {
62
- --inline-message-fgColor: ${ get ( 'colors.fg.muted' ) } ;
63
- }
64
-
65
- & .InlineMessageIcon {
66
- min-height: calc(var(--inline-message-lineHeight) * var(--inline-message-fontSize));
67
- }
68
- ` ,
69
- )
70
-
71
- const variantToIcon = ( enabled : boolean , variant : MessageVariant ) : React . ReactNode => {
23
+ const variantToIcon = ( variant : MessageVariant ) : React . ReactNode => {
72
24
const icons = {
73
- warning : < AlertIcon className = { enabled ? classes . InlineMessageIcon : 'InlineMessageIcon' } /> ,
74
- critical : < AlertIcon className = { enabled ? classes . InlineMessageIcon : 'InlineMessageIcon' } /> ,
75
- success : < CheckCircleIcon className = { enabled ? classes . InlineMessageIcon : 'InlineMessageIcon' } /> ,
76
- unavailable : < AlertIcon className = { enabled ? classes . InlineMessageIcon : 'InlineMessageIcon' } /> ,
25
+ warning : < AlertIcon className = { classes . InlineMessageIcon } /> ,
26
+ critical : < AlertIcon className = { classes . InlineMessageIcon } /> ,
27
+ success : < CheckCircleIcon className = { classes . InlineMessageIcon } /> ,
28
+ unavailable : < AlertIcon className = { classes . InlineMessageIcon } /> ,
77
29
}
78
30
79
31
return icons [ variant ]
80
32
}
81
33
82
- const variantToSmallIcon = ( enabled : boolean , variant : MessageVariant ) : React . ReactNode => {
34
+ const variantToSmallIcon = ( variant : MessageVariant ) : React . ReactNode => {
83
35
const icons = {
84
36
warning : < AlertFillIcon className = { classes . InlineMessageIcon } size = { 12 } /> ,
85
37
critical : < AlertFillIcon className = { classes . InlineMessageIcon } size = { 12 } /> ,
@@ -89,19 +41,34 @@ const variantToSmallIcon = (enabled: boolean, variant: MessageVariant): React.Re
89
41
return icons [ variant ]
90
42
}
91
43
92
- export function InlineMessage ( { children, className, size = 'medium' , variant, ...rest } : InlineMessageProps ) {
93
- const enabled = useFeatureFlag ( CSS_MODULES_FEATURE_FLAG )
94
-
95
- const icon = size === 'small' ? variantToSmallIcon ( enabled , variant ) : variantToIcon ( enabled , variant )
44
+ export function InlineMessage ( {
45
+ children,
46
+ className,
47
+ size = 'medium' ,
48
+ variant,
49
+ sx : sxProp = defaultSxProp ,
50
+ ...rest
51
+ } : InlineMessageProps ) {
52
+ const icon = size === 'small' ? variantToSmallIcon ( variant ) : variantToIcon ( variant )
53
+
54
+ if ( sxProp !== defaultSxProp ) {
55
+ return (
56
+ < Box
57
+ sx = { sxProp }
58
+ className = { clsx ( className , classes . InlineMessage ) }
59
+ { ...rest }
60
+ data-size = { size }
61
+ data-variant = { variant }
62
+ >
63
+ { icon }
64
+ { children }
65
+ </ Box >
66
+ )
67
+ }
96
68
return (
97
- < StyledMessage
98
- className = { clsx ( className , enabled && classes . InlineMessage ) }
99
- { ...rest }
100
- data-size = { size }
101
- data-variant = { variant }
102
- >
69
+ < div className = { clsx ( className , classes . InlineMessage ) } { ...rest } data-size = { size } data-variant = { variant } >
103
70
{ icon }
104
71
{ children }
105
- </ StyledMessage >
72
+ </ div >
106
73
)
107
74
}
0 commit comments