-
Notifications
You must be signed in to change notification settings - Fork 614
Expand file tree
/
Copy pathExternalLink.tsx
More file actions
71 lines (60 loc) · 1.35 KB
/
ExternalLink.tsx
File metadata and controls
71 lines (60 loc) · 1.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import * as React from "react"
import { styled } from "@mui/material/styles"
import { Tooltip } from "@mui/material"
import { Launch } from "@mui/icons-material"
import clsx from "classnames"
import { PropsWithChildren } from "react"
const PREFIX = "ExternalLink"
const classes = {
link: `${PREFIX}-link`,
icon: `${PREFIX}-icon`,
hover: `${PREFIX}-hover`,
}
const Root = styled("span")(() => ({
[`& .${classes.link}`]: {
display: "inline-flex",
alignItems: "center",
},
[`& .${classes.icon}`]: {
marginLeft: "0.5ch",
color: "inherit",
},
[`& .${classes.hover}`]: {
"&:hover": {
opacity: 1.0,
},
opacity: 0.3,
},
}))
type Props = {
href: string
title?: string
hover?: true | undefined
}
const ExternalLink: React.FC<PropsWithChildren<Props>> = ({
href,
title,
children,
hover,
}) => {
return (
<Root>
<Tooltip title={title || ""}>
<a
className={clsx({ [classes.hover]: hover }, classes.link)}
href={href}
target="_blank"
rel="noreferrer"
>
{children}
<Launch
className={clsx({ [classes.icon]: children !== undefined })}
color="action"
fontSize={children === undefined ? undefined : "inherit"}
/>
</a>
</Tooltip>
</Root>
)
}
export default ExternalLink