@docusaurus/theme-classic 2.0.0-beta.17 → 2.0.0-beta.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/lib/getSwizzleConfig.js +113 -2
  2. package/lib/index.js +7 -12
  3. package/lib/theme-classic.d.ts +286 -60
  4. package/lib/translations.js +12 -2
  5. package/lib/validateThemeConfig.js +1 -1
  6. package/lib-next/theme/BackToTopButton/index.js +1 -3
  7. package/lib-next/theme/BlogArchivePage/index.js +14 -10
  8. package/lib-next/theme/BlogListPage/index.js +34 -13
  9. package/lib-next/theme/BlogPostItem/index.js +6 -6
  10. package/lib-next/theme/BlogPostPage/index.js +56 -45
  11. package/lib-next/theme/BlogTagsListPage/index.js +16 -12
  12. package/lib-next/theme/BlogTagsPostsPage/index.js +40 -33
  13. package/lib-next/theme/CodeBlock/CopyButton/index.js +60 -0
  14. package/lib-next/theme/CodeBlock/CopyButton/styles.module.css +66 -0
  15. package/lib-next/theme/CodeBlock/index.js +4 -36
  16. package/lib-next/theme/CodeBlock/styles.module.css +2 -22
  17. package/lib-next/theme/ColorModeToggle/index.js +36 -57
  18. package/lib-next/theme/ColorModeToggle/styles.module.css +8 -24
  19. package/lib-next/theme/DocBreadcrumbs/index.js +28 -11
  20. package/lib-next/theme/DocBreadcrumbs/styles.module.css +2 -17
  21. package/lib-next/theme/DocCard/index.js +17 -15
  22. package/lib-next/theme/DocCard/styles.module.css +8 -17
  23. package/lib-next/theme/DocCardList/index.js +15 -3
  24. package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +27 -6
  25. package/lib-next/theme/DocItem/index.js +84 -66
  26. package/lib-next/theme/DocPage/index.js +88 -89
  27. package/lib-next/theme/DocPage/styles.module.css +0 -4
  28. package/lib-next/theme/DocSidebar/Desktop/CollapseButton/index.js +34 -0
  29. package/lib-next/theme/DocSidebar/Desktop/CollapseButton/styles.module.css +44 -0
  30. package/lib-next/theme/DocSidebar/Desktop/Content/index.js +46 -0
  31. package/lib-next/theme/DocSidebar/Desktop/Content/styles.module.css +17 -0
  32. package/lib-next/theme/DocSidebar/Desktop/index.js +34 -0
  33. package/lib-next/theme/DocSidebar/Desktop/styles.module.css +50 -0
  34. package/lib-next/theme/DocSidebar/Mobile/index.js +49 -0
  35. package/lib-next/theme/DocSidebar/index.js +6 -113
  36. package/lib-next/theme/DocSidebarItem/index.js +14 -13
  37. package/lib-next/theme/DocSidebarItem/styles.module.css +4 -0
  38. package/lib-next/theme/DocTagDocListPage/index.js +38 -31
  39. package/lib-next/theme/DocTagsListPage/index.js +21 -16
  40. package/lib-next/theme/Footer/Copyright/index.js +18 -0
  41. package/lib-next/theme/Footer/Layout/index.js +26 -0
  42. package/lib-next/theme/Footer/LinkItem/index.js +33 -0
  43. package/lib-next/theme/Footer/Links/MultiColumn/index.js +47 -0
  44. package/lib-next/theme/Footer/Links/Simple/index.js +41 -0
  45. package/lib-next/theme/Footer/Links/index.js +17 -0
  46. package/lib-next/theme/Footer/Logo/index.js +38 -0
  47. package/lib-next/theme/Footer/{styles.module.css → Logo/styles.module.css} +0 -0
  48. package/lib-next/theme/Footer/index.js +11 -163
  49. package/lib-next/theme/Heading/index.js +6 -4
  50. package/lib-next/theme/IconExternalLink/styles.module.css +0 -2
  51. package/lib-next/theme/Layout/index.js +15 -10
  52. package/lib-next/theme/LayoutProviders/index.js +5 -4
  53. package/lib-next/theme/MDXComponents/A.js +11 -0
  54. package/lib-next/theme/MDXComponents/Code.js +28 -0
  55. package/lib-next/theme/MDXComponents/Details.js +20 -0
  56. package/lib-next/theme/MDXComponents/Head.js +26 -0
  57. package/lib-next/theme/MDXComponents/Heading.js +11 -0
  58. package/lib-next/theme/MDXComponents/Img.js +24 -0
  59. package/lib-next/theme/MDXComponents/Img.module.css +10 -0
  60. package/lib-next/theme/MDXComponents/Pre.js +18 -0
  61. package/lib-next/theme/MDXComponents/Ul.js +23 -0
  62. package/{src/theme/MDXComponents/styles.css → lib-next/theme/MDXComponents/Ul.module.css} +1 -5
  63. package/lib-next/theme/MDXComponents/index.js +22 -71
  64. package/lib-next/theme/MDXContent/index.js +12 -0
  65. package/lib-next/theme/MDXPage/index.js +33 -28
  66. package/lib-next/theme/Navbar/ColorModeToggle/index.js +25 -0
  67. package/lib-next/theme/Navbar/Content/index.js +70 -0
  68. package/lib-next/theme/Navbar/Content/styles.module.css +15 -0
  69. package/lib-next/theme/Navbar/Layout/index.js +54 -0
  70. package/{src/theme/Navbar → lib-next/theme/Navbar/Layout}/styles.module.css +0 -13
  71. package/lib-next/theme/Navbar/Logo/index.js +17 -0
  72. package/lib-next/theme/Navbar/MobileSidebar/Header/index.js +33 -0
  73. package/lib-next/theme/Navbar/MobileSidebar/Layout/index.js +28 -0
  74. package/lib-next/theme/Navbar/MobileSidebar/PrimaryMenu/index.js +33 -0
  75. package/lib-next/theme/Navbar/MobileSidebar/SecondaryMenu/index.js +36 -0
  76. package/lib-next/theme/Navbar/MobileSidebar/Toggle/index.js +23 -0
  77. package/lib-next/theme/Navbar/MobileSidebar/index.js +31 -0
  78. package/lib-next/theme/Navbar/index.js +6 -271
  79. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +2 -6
  80. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +10 -2
  81. package/lib-next/theme/NavbarItem/NavbarNavLink.js +8 -12
  82. package/lib-next/theme/NotFound.js +38 -33
  83. package/lib-next/theme/{LayoutHead → SiteMetadata}/index.js +11 -26
  84. package/lib-next/theme/TOCCollapsible/index.js +1 -3
  85. package/lib-next/theme/Tabs/__tests__/index.test.js +5 -5
  86. package/lib-next/theme/Tabs/index.js +2 -2
  87. package/lib-next/theme/Tag/index.js +4 -4
  88. package/lib-next/theme/ThemedImage/index.js +3 -3
  89. package/package.json +17 -17
  90. package/src/getSwizzleConfig.ts +122 -1
  91. package/src/index.ts +10 -12
  92. package/src/theme/BackToTopButton/index.tsx +1 -3
  93. package/src/theme/BlogArchivePage/index.tsx +18 -17
  94. package/src/theme/BlogLayout/index.tsx +1 -1
  95. package/src/theme/BlogListPage/index.tsx +32 -13
  96. package/src/theme/BlogPostItem/index.tsx +6 -6
  97. package/src/theme/BlogPostPage/index.tsx +55 -48
  98. package/src/theme/BlogTagsListPage/index.tsx +16 -12
  99. package/src/theme/BlogTagsPostsPage/index.tsx +39 -32
  100. package/src/theme/CodeBlock/CopyButton/index.tsx +66 -0
  101. package/src/theme/CodeBlock/CopyButton/styles.module.css +66 -0
  102. package/src/theme/CodeBlock/index.tsx +6 -38
  103. package/src/theme/CodeBlock/styles.module.css +2 -22
  104. package/src/theme/ColorModeToggle/index.tsx +36 -61
  105. package/src/theme/ColorModeToggle/styles.module.css +8 -24
  106. package/src/theme/DocBreadcrumbs/index.tsx +29 -10
  107. package/src/theme/DocBreadcrumbs/styles.module.css +2 -17
  108. package/src/theme/DocCard/index.tsx +24 -17
  109. package/src/theme/DocCard/styles.module.css +8 -17
  110. package/src/theme/DocCardList/index.tsx +14 -3
  111. package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +31 -4
  112. package/src/theme/DocItem/index.tsx +71 -55
  113. package/src/theme/DocPage/index.tsx +89 -90
  114. package/src/theme/DocPage/styles.module.css +0 -4
  115. package/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx +38 -0
  116. package/src/theme/DocSidebar/Desktop/CollapseButton/styles.module.css +44 -0
  117. package/src/theme/DocSidebar/Desktop/Content/index.tsx +55 -0
  118. package/src/theme/DocSidebar/Desktop/Content/styles.module.css +17 -0
  119. package/src/theme/DocSidebar/Desktop/index.tsx +38 -0
  120. package/src/theme/DocSidebar/Desktop/styles.module.css +50 -0
  121. package/src/theme/DocSidebar/Mobile/index.tsx +54 -0
  122. package/src/theme/DocSidebar/index.tsx +6 -121
  123. package/src/theme/DocSidebarItem/index.tsx +15 -16
  124. package/src/theme/DocSidebarItem/styles.module.css +4 -0
  125. package/src/theme/DocTagDocListPage/index.tsx +38 -30
  126. package/src/theme/DocTagsListPage/index.tsx +21 -16
  127. package/src/theme/DocVersionBanner/index.tsx +3 -4
  128. package/src/theme/Footer/Copyright/index.tsx +20 -0
  129. package/src/theme/Footer/Layout/index.tsx +34 -0
  130. package/src/theme/Footer/LinkItem/index.tsx +36 -0
  131. package/src/theme/Footer/Links/MultiColumn/index.tsx +51 -0
  132. package/src/theme/Footer/Links/Simple/index.tsx +42 -0
  133. package/src/theme/Footer/Links/index.tsx +21 -0
  134. package/src/theme/Footer/Logo/index.tsx +41 -0
  135. package/src/theme/Footer/{styles.module.css → Logo/styles.module.css} +0 -0
  136. package/src/theme/Footer/index.tsx +12 -186
  137. package/src/theme/Heading/index.tsx +6 -4
  138. package/src/theme/IconExternalLink/styles.module.css +0 -2
  139. package/src/theme/Layout/index.tsx +15 -10
  140. package/src/theme/LayoutProviders/index.tsx +5 -4
  141. package/src/theme/MDXComponents/A.tsx +14 -0
  142. package/src/theme/MDXComponents/Code.tsx +37 -0
  143. package/src/theme/MDXComponents/Details.tsx +26 -0
  144. package/src/theme/MDXComponents/Head.tsx +29 -0
  145. package/src/theme/MDXComponents/Heading.tsx +14 -0
  146. package/src/theme/MDXComponents/Img.module.css +10 -0
  147. package/src/theme/MDXComponents/Img.tsx +26 -0
  148. package/src/theme/MDXComponents/Pre.tsx +22 -0
  149. package/{lib-next/theme/MDXComponents/styles.css → src/theme/MDXComponents/Ul.module.css} +1 -5
  150. package/src/theme/MDXComponents/Ul.tsx +28 -0
  151. package/src/theme/MDXComponents/index.tsx +23 -80
  152. package/src/theme/MDXContent/index.tsx +15 -0
  153. package/src/theme/MDXPage/index.tsx +33 -28
  154. package/src/theme/Navbar/ColorModeToggle/index.tsx +30 -0
  155. package/src/theme/Navbar/Content/index.tsx +81 -0
  156. package/src/theme/Navbar/Content/styles.module.css +15 -0
  157. package/src/theme/Navbar/Layout/index.tsx +57 -0
  158. package/{lib-next/theme/Navbar → src/theme/Navbar/Layout}/styles.module.css +0 -13
  159. package/src/theme/Navbar/Logo/index.tsx +19 -0
  160. package/src/theme/Navbar/MobileSidebar/Header/index.tsx +34 -0
  161. package/src/theme/Navbar/MobileSidebar/Layout/index.tsx +31 -0
  162. package/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx +38 -0
  163. package/src/theme/Navbar/MobileSidebar/SecondaryMenu/index.tsx +38 -0
  164. package/src/theme/Navbar/MobileSidebar/Toggle/index.tsx +25 -0
  165. package/src/theme/Navbar/MobileSidebar/index.tsx +33 -0
  166. package/src/theme/Navbar/index.tsx +6 -286
  167. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +2 -2
  168. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +11 -2
  169. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/index.tsx +1 -1
  170. package/src/theme/NavbarItem/NavbarNavLink.tsx +3 -7
  171. package/src/theme/NavbarItem/index.tsx +3 -4
  172. package/src/theme/NotFound.tsx +38 -33
  173. package/src/theme/{LayoutHead → SiteMetadata}/index.tsx +11 -25
  174. package/src/theme/TOCCollapsible/index.tsx +1 -3
  175. package/src/theme/Tabs/index.tsx +5 -6
  176. package/src/theme/Tag/index.tsx +4 -4
  177. package/src/theme/ThemedImage/index.tsx +4 -3
  178. package/src/theme-classic.d.ts +286 -60
  179. package/src/translations.ts +12 -6
  180. package/src/validateThemeConfig.ts +6 -6
  181. package/lib-next/theme/DocSidebar/styles.module.css +0 -107
  182. package/lib-next/theme/Seo/index.js +0 -40
  183. package/src/theme/DocSidebar/styles.module.css +0 -107
  184. package/src/theme/Seo/index.tsx +0 -49
@@ -12,16 +12,26 @@ import AnnouncementBar from '@theme/AnnouncementBar';
12
12
  import Navbar from '@theme/Navbar';
13
13
  import Footer from '@theme/Footer';
14
14
  import LayoutProviders from '@theme/LayoutProviders';
15
- import LayoutHead from '@theme/LayoutHead';
16
- import {ThemeClassNames, useKeyboardNavigation} from '@docusaurus/theme-common';
15
+ import {
16
+ PageMetadata,
17
+ ThemeClassNames,
18
+ useKeyboardNavigation,
19
+ } from '@docusaurus/theme-common';
17
20
  import ErrorPageContent from '@theme/ErrorPageContent';
18
21
  import './styles.css';
19
22
  export default function Layout(props) {
20
- const {children, noFooter, wrapperClassName, pageClassName} = props;
23
+ const {
24
+ children,
25
+ noFooter,
26
+ wrapperClassName,
27
+ // not really layout-related, but kept for convenience/retro-compatibility
28
+ title,
29
+ description,
30
+ } = props;
21
31
  useKeyboardNavigation();
22
32
  return (
23
33
  <LayoutProviders>
24
- <LayoutHead {...props} />
34
+ <PageMetadata title={title} description={description} />
25
35
 
26
36
  <SkipToContent />
27
37
 
@@ -29,12 +39,7 @@ export default function Layout(props) {
29
39
 
30
40
  <Navbar />
31
41
 
32
- <div
33
- className={clsx(
34
- ThemeClassNames.wrapper.main,
35
- wrapperClassName,
36
- pageClassName,
37
- )}>
42
+ <div className={clsx(ThemeClassNames.wrapper.main, wrapperClassName)}>
38
43
  <ErrorBoundary fallback={ErrorPageContent}>{children}</ErrorBoundary>
39
44
  </div>
40
45
 
@@ -10,8 +10,9 @@ import {
10
10
  TabGroupChoiceProvider,
11
11
  AnnouncementBarProvider,
12
12
  DocsPreferredVersionContextProvider,
13
- MobileSecondaryMenuProvider,
14
13
  ScrollControllerProvider,
14
+ NavbarProvider,
15
+ PluginHtmlClassNameProvider,
15
16
  } from '@docusaurus/theme-common';
16
17
  export default function LayoutProviders({children}) {
17
18
  return (
@@ -20,9 +21,9 @@ export default function LayoutProviders({children}) {
20
21
  <TabGroupChoiceProvider>
21
22
  <ScrollControllerProvider>
22
23
  <DocsPreferredVersionContextProvider>
23
- <MobileSecondaryMenuProvider>
24
- {children}
25
- </MobileSecondaryMenuProvider>
24
+ <PluginHtmlClassNameProvider>
25
+ <NavbarProvider>{children}</NavbarProvider>
26
+ </PluginHtmlClassNameProvider>
26
27
  </DocsPreferredVersionContextProvider>
27
28
  </ScrollControllerProvider>
28
29
  </TabGroupChoiceProvider>
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React from 'react';
8
+ import Link from '@docusaurus/Link';
9
+ export default function MDXA(props) {
10
+ return <Link {...props} />;
11
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React, {isValidElement} from 'react';
8
+ import CodeBlock from '@theme/CodeBlock';
9
+ export default function MDXCode(props) {
10
+ const inlineElements = [
11
+ 'a',
12
+ 'b',
13
+ 'big',
14
+ 'i',
15
+ 'span',
16
+ 'em',
17
+ 'strong',
18
+ 'sup',
19
+ 'sub',
20
+ 'small',
21
+ ];
22
+ const shouldBeInline = React.Children.toArray(props.children).every(
23
+ (el) =>
24
+ (typeof el === 'string' && !el.includes('\n')) ||
25
+ (isValidElement(el) && inlineElements.includes(el.props.mdxType)),
26
+ );
27
+ return shouldBeInline ? <code {...props} /> : <CodeBlock {...props} />;
28
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React from 'react';
8
+ import Details from '@theme/Details';
9
+ export default function MDXDetails(props) {
10
+ const items = React.Children.toArray(props.children); // Split summary item from the rest to pass it as a separate prop to the
11
+ // Details theme component
12
+
13
+ const summary = items.find((item) => item?.props?.mdxType === 'summary');
14
+ const children = <>{items.filter((item) => item !== summary)}</>;
15
+ return (
16
+ <Details {...props} summary={summary}>
17
+ {children}
18
+ </Details>
19
+ );
20
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React from 'react';
8
+ import Head from '@docusaurus/Head';
9
+
10
+ // MDX elements are wrapped through the MDX pragma. In some cases (notably usage
11
+ // with Head/Helmet) we need to unwrap those elements.
12
+ function unwrapMDXElement(element) {
13
+ if (element?.props?.mdxType && element?.props?.originalType) {
14
+ const {mdxType, originalType, ...newProps} = element.props;
15
+ return React.createElement(element.props.originalType, newProps);
16
+ }
17
+
18
+ return element;
19
+ }
20
+
21
+ export default function MDXHead(props) {
22
+ const unwrappedChildren = React.Children.map(props.children, (child) =>
23
+ unwrapMDXElement(child),
24
+ );
25
+ return <Head {...props}>{unwrappedChildren}</Head>;
26
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React from 'react';
8
+ import Heading from '@theme/Heading';
9
+ export default function MDXHeading(props) {
10
+ return <Heading {...props} />;
11
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React from 'react';
8
+ import styles from './Img.module.css';
9
+ import clsx from 'clsx';
10
+
11
+ function transformImgClassName(className) {
12
+ return clsx(className, styles.img);
13
+ }
14
+
15
+ export default function MDXImg(props) {
16
+ return (
17
+ // eslint-disable-next-line jsx-a11y/alt-text
18
+ <img
19
+ loading="lazy"
20
+ {...props}
21
+ className={transformImgClassName(props.className)}
22
+ />
23
+ );
24
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ .img {
9
+ height: auto;
10
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React, {isValidElement} from 'react';
8
+ import CodeBlock from '@theme/CodeBlock';
9
+ export default function MDXPre(props) {
10
+ return (
11
+ <CodeBlock // If this pre is created by a ``` fenced codeblock, unwrap the children
12
+ {...(isValidElement(props.children) &&
13
+ props.children.props.originalType === 'code'
14
+ ? props.children?.props
15
+ : {...props})}
16
+ />
17
+ );
18
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React from 'react';
8
+ import clsx from 'clsx';
9
+ import styles from './Ul.module.css';
10
+ const containsClassListLocalClass = styles['contains-task-list'];
11
+
12
+ function transformUlClassName(className) {
13
+ return clsx(
14
+ className, // This class is set globally by GitHub/MDX
15
+ // We keep the global class, but apply scoped CSS
16
+ // See https://github.com/syntax-tree/mdast-util-to-hast/issues/28
17
+ className?.includes('contains-task-list') && containsClassListLocalClass,
18
+ );
19
+ }
20
+
21
+ export default function MDXUl(props) {
22
+ return <ul {...props} className={transformUlClassName(props.className)} />;
23
+ }
@@ -5,11 +5,7 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- ul.contains-task-list {
8
+ .contains-task-list {
9
9
  padding-left: 0;
10
10
  list-style: none;
11
11
  }
12
-
13
- img {
14
- height: auto;
15
- }
@@ -4,77 +4,28 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import React, {isValidElement} from 'react';
8
- import Head from '@docusaurus/Head';
9
- import Link from '@docusaurus/Link';
10
- import CodeBlock from '@theme/CodeBlock';
11
- import Heading from '@theme/Heading';
12
- import Details from '@theme/Details';
13
- import './styles.css'; // MDX elements are wrapped through the MDX pragma. In some cases (notably usage
14
- // with Head/Helmet) we need to unwrap those elements.
15
-
16
- function unwrapMDXElement(element) {
17
- if (element?.props?.mdxType && element?.props?.originalType) {
18
- const {mdxType, originalType, ...newProps} = element.props;
19
- return React.createElement(element.props.originalType, newProps);
20
- }
21
-
22
- return element;
23
- }
24
-
7
+ import React from 'react';
8
+ import MDXHead from '@theme/MDXComponents/Head';
9
+ import MDXCode from '@theme/MDXComponents/Code';
10
+ import MDXA from '@theme/MDXComponents/A';
11
+ import MDXPre from '@theme/MDXComponents/Pre';
12
+ import MDXDetails from '@theme/MDXComponents/Details';
13
+ import MDXHeading from '@theme/MDXComponents/Heading';
14
+ import MDXUl from '@theme/MDXComponents/Ul';
15
+ import MDXImg from '@theme/MDXComponents/Img';
25
16
  const MDXComponents = {
26
- head: (props) => {
27
- const unwrappedChildren = React.Children.map(props.children, (child) =>
28
- unwrapMDXElement(child),
29
- );
30
- return <Head {...props}>{unwrappedChildren}</Head>;
31
- },
32
- code: (props) => {
33
- const inlineElements = [
34
- 'a',
35
- 'b',
36
- 'big',
37
- 'i',
38
- 'span',
39
- 'em',
40
- 'strong',
41
- 'sup',
42
- 'sub',
43
- 'small',
44
- ];
45
- const shouldBeInline = React.Children.toArray(props.children).every(
46
- (el) =>
47
- (typeof el === 'string' && !el.includes('\n')) ||
48
- (React.isValidElement(el) && inlineElements.includes(el.props.mdxType)),
49
- );
50
- return shouldBeInline ? <code {...props} /> : <CodeBlock {...props} />;
51
- },
52
- a: (props) => <Link {...props} />,
53
- pre: (props) => (
54
- <CodeBlock // If this pre is created by a ``` fenced codeblock, unwrap the children
55
- {...(isValidElement(props.children) &&
56
- props.children.props.originalType === 'code'
57
- ? props.children?.props
58
- : {...props})}
59
- />
60
- ),
61
- details: (props) => {
62
- const items = React.Children.toArray(props.children); // Split summary item from the rest to pass it as a separate prop to the
63
- // Details theme component
64
-
65
- const summary = items.find((item) => item?.props?.mdxType === 'summary');
66
- const children = <>{items.filter((item) => item !== summary)}</>;
67
- return (
68
- <Details {...props} summary={summary}>
69
- {children}
70
- </Details>
71
- );
72
- },
73
- h1: (props) => <Heading as="h1" {...props} />,
74
- h2: (props) => <Heading as="h2" {...props} />,
75
- h3: (props) => <Heading as="h3" {...props} />,
76
- h4: (props) => <Heading as="h4" {...props} />,
77
- h5: (props) => <Heading as="h5" {...props} />,
78
- h6: (props) => <Heading as="h6" {...props} />,
17
+ head: MDXHead,
18
+ code: MDXCode,
19
+ a: MDXA,
20
+ pre: MDXPre,
21
+ details: MDXDetails,
22
+ ul: MDXUl,
23
+ img: MDXImg,
24
+ h1: (props) => <MDXHeading as="h1" {...props} />,
25
+ h2: (props) => <MDXHeading as="h2" {...props} />,
26
+ h3: (props) => <MDXHeading as="h3" {...props} />,
27
+ h4: (props) => <MDXHeading as="h4" {...props} />,
28
+ h5: (props) => <MDXHeading as="h5" {...props} />,
29
+ h6: (props) => <MDXHeading as="h6" {...props} />,
79
30
  };
80
31
  export default MDXComponents;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React from 'react';
8
+ import {MDXProvider} from '@mdx-js/react';
9
+ import MDXComponents from '@theme/MDXComponents';
10
+ export default function MDXContent({children}) {
11
+ return <MDXProvider components={MDXComponents}>{children}</MDXProvider>;
12
+ }
@@ -7,43 +7,48 @@
7
7
  import React from 'react';
8
8
  import clsx from 'clsx';
9
9
  import Layout from '@theme/Layout';
10
- import {MDXProvider} from '@mdx-js/react';
11
- import MDXComponents from '@theme/MDXComponents';
10
+ import MDXContent from '@theme/MDXContent';
12
11
  import TOC from '@theme/TOC';
13
- import {ThemeClassNames} from '@docusaurus/theme-common';
12
+ import {
13
+ PageMetadata,
14
+ HtmlClassNameProvider,
15
+ ThemeClassNames,
16
+ } from '@docusaurus/theme-common';
14
17
  import styles from './styles.module.css';
15
18
  export default function MDXPage(props) {
16
19
  const {content: MDXPageContent} = props;
17
20
  const {
18
- metadata: {title, description, permalink, frontMatter},
21
+ metadata: {title, description, frontMatter},
19
22
  } = MDXPageContent;
20
23
  const {wrapperClassName, hide_table_of_contents: hideTableOfContents} =
21
24
  frontMatter;
22
25
  return (
23
- <Layout
24
- title={title}
25
- description={description}
26
- permalink={permalink}
27
- wrapperClassName={wrapperClassName ?? ThemeClassNames.wrapper.mdxPages}
28
- pageClassName={ThemeClassNames.page.mdxPage}>
29
- <main className="container container--fluid margin-vert--lg">
30
- <div className={clsx('row', styles.mdxPageWrapper)}>
31
- <div className={clsx('col', !hideTableOfContents && 'col--8')}>
32
- <MDXProvider components={MDXComponents}>
33
- <MDXPageContent />
34
- </MDXProvider>
35
- </div>
36
- {!hideTableOfContents && MDXPageContent.toc && (
37
- <div className="col col--2">
38
- <TOC
39
- toc={MDXPageContent.toc}
40
- minHeadingLevel={frontMatter.toc_min_heading_level}
41
- maxHeadingLevel={frontMatter.toc_max_heading_level}
42
- />
26
+ <HtmlClassNameProvider
27
+ className={clsx(
28
+ wrapperClassName ?? ThemeClassNames.wrapper.mdxPages,
29
+ ThemeClassNames.page.mdxPage,
30
+ )}>
31
+ <PageMetadata title={title} description={description} />
32
+ <Layout>
33
+ <main className="container container--fluid margin-vert--lg">
34
+ <div className={clsx('row', styles.mdxPageWrapper)}>
35
+ <div className={clsx('col', !hideTableOfContents && 'col--8')}>
36
+ <MDXContent>
37
+ <MDXPageContent />
38
+ </MDXContent>
43
39
  </div>
44
- )}
45
- </div>
46
- </main>
47
- </Layout>
40
+ {!hideTableOfContents && MDXPageContent.toc && (
41
+ <div className="col col--2">
42
+ <TOC
43
+ toc={MDXPageContent.toc}
44
+ minHeadingLevel={frontMatter.toc_min_heading_level}
45
+ maxHeadingLevel={frontMatter.toc_max_heading_level}
46
+ />
47
+ </div>
48
+ )}
49
+ </div>
50
+ </main>
51
+ </Layout>
52
+ </HtmlClassNameProvider>
48
53
  );
49
54
  }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import {useColorMode, useThemeConfig} from '@docusaurus/theme-common';
8
+ import ColorModeToggle from '@theme/ColorModeToggle';
9
+ import React from 'react';
10
+ export default function NavbarColorModeToggle({className}) {
11
+ const disabled = useThemeConfig().colorMode.disableSwitch;
12
+ const {colorMode, setColorMode} = useColorMode();
13
+
14
+ if (disabled) {
15
+ return null;
16
+ }
17
+
18
+ return (
19
+ <ColorModeToggle
20
+ className={className}
21
+ value={colorMode}
22
+ onChange={setColorMode}
23
+ />
24
+ );
25
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React from 'react';
8
+ import NavbarItem from '@theme/NavbarItem';
9
+ import NavbarColorModeToggle from '@theme/Navbar/ColorModeToggle';
10
+ import SearchBar from '@theme/SearchBar';
11
+ import {
12
+ splitNavbarItems,
13
+ useNavbarMobileSidebar,
14
+ useThemeConfig,
15
+ } from '@docusaurus/theme-common';
16
+ import NavbarMobileSidebarToggle from '@theme/Navbar/MobileSidebar/Toggle';
17
+ import NavbarLogo from '@theme/Navbar/Logo';
18
+ import styles from './styles.module.css';
19
+
20
+ function useNavbarItems() {
21
+ // TODO temporary casting until ThemeConfig type is improved
22
+ return useThemeConfig().navbar.items;
23
+ }
24
+
25
+ function NavbarItems({items}) {
26
+ return (
27
+ <>
28
+ {items.map((item, i) => (
29
+ <NavbarItem {...item} key={i} />
30
+ ))}
31
+ </>
32
+ );
33
+ }
34
+
35
+ function NavbarContentLayout({left, right}) {
36
+ return (
37
+ <div className="navbar__inner">
38
+ <div className="navbar__items">{left}</div>
39
+ <div className="navbar__items navbar__items--right">{right}</div>
40
+ </div>
41
+ );
42
+ }
43
+
44
+ export default function NavbarContent() {
45
+ const mobileSidebar = useNavbarMobileSidebar();
46
+ const items = useNavbarItems();
47
+ const [leftItems, rightItems] = splitNavbarItems(items);
48
+ const autoAddSearchBar = !items.some((item) => item.type === 'search');
49
+ return (
50
+ <NavbarContentLayout
51
+ left={
52
+ // TODO stop hardcoding items?
53
+ <>
54
+ {!mobileSidebar.disabled && <NavbarMobileSidebarToggle />}
55
+ <NavbarLogo />
56
+ <NavbarItems items={leftItems} />
57
+ </>
58
+ }
59
+ right={
60
+ // TODO stop hardcoding items?
61
+ // Ask the user to add the respective navbar items => more flexible
62
+ <>
63
+ <NavbarItems items={rightItems} />
64
+ <NavbarColorModeToggle className={styles.colorModeToggle} />
65
+ {autoAddSearchBar && <SearchBar />}
66
+ </>
67
+ }
68
+ />
69
+ );
70
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ /*
9
+ Hide color mode toggle in small viewports
10
+ */
11
+ @media (max-width: 996px) {
12
+ .colorModeToggle {
13
+ display: none;
14
+ }
15
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React from 'react';
8
+ import clsx from 'clsx';
9
+ import NavbarMobileSidebar from '@theme/Navbar/MobileSidebar';
10
+ import {
11
+ useThemeConfig,
12
+ useHideableNavbar,
13
+ useNavbarMobileSidebar,
14
+ } from '@docusaurus/theme-common';
15
+ import styles from './styles.module.css';
16
+
17
+ function NavbarBackdrop(props) {
18
+ return (
19
+ <div
20
+ role="presentation"
21
+ {...props}
22
+ className={clsx('navbar-sidebar__backdrop', props.className)}
23
+ />
24
+ );
25
+ }
26
+
27
+ export default function NavbarLayout({children}) {
28
+ const {
29
+ navbar: {hideOnScroll, style},
30
+ } = useThemeConfig();
31
+ const mobileSidebar = useNavbarMobileSidebar();
32
+ const {navbarRef, isNavbarVisible} = useHideableNavbar(hideOnScroll);
33
+ return (
34
+ <nav
35
+ ref={navbarRef}
36
+ className={clsx(
37
+ 'navbar',
38
+ 'navbar--fixed-top',
39
+ hideOnScroll && [
40
+ styles.navbarHideable,
41
+ !isNavbarVisible && styles.navbarHidden,
42
+ ],
43
+ {
44
+ 'navbar--dark': style === 'dark',
45
+ 'navbar--primary': style === 'primary',
46
+ 'navbar-sidebar--show': mobileSidebar.shown,
47
+ },
48
+ )}>
49
+ {children}
50
+ <NavbarBackdrop onClick={mobileSidebar.toggle} />
51
+ <NavbarMobileSidebar />
52
+ </nav>
53
+ );
54
+ }
@@ -5,15 +5,6 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- /*
9
- Hide toggle in small viewports
10
- */
11
- @media (max-width: 996px) {
12
- .toggle {
13
- display: none;
14
- }
15
- }
16
-
17
8
  .navbarHideable {
18
9
  transition: transform var(--ifm-transition-fast) ease;
19
10
  }
@@ -21,7 +12,3 @@ Hide toggle in small viewports
21
12
  .navbarHidden {
22
13
  transform: translate3d(0, calc(-100% - 2px), 0);
23
14
  }
24
-
25
- .navbarSidebarToggle {
26
- margin-right: 1rem;
27
- }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React from 'react';
8
+ import Logo from '@theme/Logo';
9
+ export default function NavbarLogo() {
10
+ return (
11
+ <Logo
12
+ className="navbar__brand"
13
+ imageClassName="navbar__logo"
14
+ titleClassName="navbar__title"
15
+ />
16
+ );
17
+ }