@@ -21,9 +21,12 @@ const textLink = tv({
21
21
suffixWrapper : 'shr-ms-0.25 shr-align-middle' ,
22
22
} ,
23
23
} )
24
+ const { anchor, prefixWrapper, suffixWrapper } = textLink ( )
25
+ const prefixWrapperClassName = prefixWrapper ( )
26
+ const suffixWrapperClassName = suffixWrapper ( )
24
27
25
28
export const TextLink = forwardRef < HTMLAnchorElement , Props & ElementProps > (
26
- ( { href, target, onClick, children, prefix, suffix, className, ...others } , ref ) => {
29
+ ( { href, target, rel , onClick, children, prefix, suffix, className, ...others } , ref ) => {
27
30
const actualSuffix = useMemo ( ( ) => {
28
31
if ( target === '_blank' && suffix === undefined ) {
29
32
return < FaExternalLinkAltIcon aria-label = "別タブで開く" />
@@ -41,6 +44,12 @@ export const TextLink = forwardRef<HTMLAnchorElement, Props & ElementProps>(
41
44
42
45
return undefined
43
46
} , [ href , onClick ] )
47
+ const actualRel = useMemo (
48
+ ( ) => ( rel === undefined && target === '_blank' ? 'noopener noreferrer' : rel ) ,
49
+ [ rel , target ] ,
50
+ )
51
+ const anchorClassName = useMemo ( ( ) => anchor ( { className } ) , [ className ] )
52
+
44
53
const actualOnClick = useMemo ( ( ) => {
45
54
if ( ! onClick ) {
46
55
return undefined
@@ -54,20 +63,19 @@ export const TextLink = forwardRef<HTMLAnchorElement, Props & ElementProps>(
54
63
}
55
64
} , [ href , onClick ] )
56
65
57
- const { anchor, prefixWrapper, suffixWrapper } = useMemo ( ( ) => textLink ( ) , [ ] )
58
-
59
66
return (
60
67
< a
61
68
{ ...others }
62
69
ref = { ref }
63
70
href = { actualHref }
64
71
target = { target }
72
+ rel = { actualRel }
65
73
onClick = { actualOnClick }
66
- className = { anchor ( { className } ) }
74
+ className = { anchorClassName }
67
75
>
68
- { prefix && < span className = { prefixWrapper ( ) } > { prefix } </ span > }
76
+ { prefix && < span className = { prefixWrapperClassName } > { prefix } </ span > }
69
77
{ children }
70
- { actualSuffix && < span className = { suffixWrapper ( ) } > { actualSuffix } </ span > }
78
+ { actualSuffix && < span className = { suffixWrapperClassName } > { actualSuffix } </ span > }
71
79
</ a >
72
80
)
73
81
} ,
0 commit comments