-
Notifications
You must be signed in to change notification settings - Fork 35
/
MDXComponents.tsx
72 lines (64 loc) 路 1.69 KB
/
MDXComponents.tsx
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
72
/* eslint-disable import/no-cycle */
/* eslint-disable @typescript-eslint/no-explicit-any */
import Image from 'next/image';
import React from 'react';
import Link from 'next/link';
import { Tabs, Tab } from './Tabs';
import Code from './Code';
import Note from './Note';
import PostRequest from './PostRequest';
import Response from './Response';
import Codesandbox from './Codesandbox';
import Text from './Text';
import View from './View';
import Content from './Content';
import DownloadCollection from './DownloadCollection';
const CodeCustom = (props: any) => <Code>{props.children}</Code>;
const NoteCustom = (props: any) => <Note type="success">{props.children}</Note>;
const TableCustom = (props: any) => (
<div className="table-wrapper">
<table>{props.children}</table>
</div>
);
const LinkCustom = (props) => {
const { href } = props;
const isInternalLink =
href &&
(href.startsWith('/') ||
href.startsWith('#') ||
href.startsWith('../lib') ||
href.startsWith('.') ||
href.startsWith('index') ||
href.startsWith('-'));
if (isInternalLink) {
return (
<Link href={href}>
<a {...props}>{props.children}</a>
</Link>
);
}
return (
<a target="_blank" rel="noopener noreferrer" href={href}>
{props.children}
</a>
);
};
const MDXComponents = {
Response,
PostRequest,
Note,
Image,
blockquote: NoteCustom,
code: CodeCustom,
table: TableCustom,
Code,
Tab,
Tabs,
Codesandbox,
Text,
View,
a: LinkCustom,
Content,
DownloadCollection
};
export default MDXComponents;