@docusaurus/theme-classic 2.0.0-beta.16 → 2.0.0-beta.19
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.
- package/lib/admonitions.css +4 -0
- package/lib/default.css +3038 -0
- package/lib/getSwizzleConfig.js +177 -36
- package/lib/index.js +10 -15
- package/lib/nprogress.css +41 -0
- package/lib/nprogress.js +46 -0
- package/lib/theme-classic.d.ts +600 -76
- package/lib/translations.js +12 -2
- package/lib/validateThemeConfig.js +77 -28
- package/lib-next/theme/BackToTopButton/index.js +6 -104
- package/lib-next/theme/BlogArchivePage/index.js +14 -10
- package/lib-next/theme/BlogLayout/index.js +1 -5
- package/lib-next/theme/BlogListPage/index.js +34 -13
- package/lib-next/theme/BlogListPaginator/index.js +25 -28
- package/lib-next/theme/BlogPostAuthor/index.js +16 -7
- package/lib-next/theme/BlogPostItem/index.js +6 -6
- package/lib-next/theme/BlogPostItem/styles.module.css +9 -0
- package/lib-next/theme/BlogPostPage/index.js +56 -45
- package/lib-next/theme/BlogPostPaginator/index.js +25 -28
- package/lib-next/theme/BlogSidebar/Desktop/index.js +41 -0
- package/lib-next/theme/BlogSidebar/{styles.module.css → Desktop/styles.module.css} +1 -2
- package/lib-next/theme/BlogSidebar/Mobile/index.js +36 -0
- package/lib-next/theme/BlogSidebar/index.js +11 -31
- package/lib-next/theme/BlogTagsListPage/index.js +17 -14
- package/lib-next/theme/BlogTagsPostsPage/index.js +43 -38
- package/lib-next/theme/CodeBlock/Container/index.js +29 -0
- package/lib-next/theme/CodeBlock/Container/styles.module.css +14 -0
- package/lib-next/theme/CodeBlock/Content/Element.js +23 -0
- package/lib-next/theme/CodeBlock/Content/String.js +104 -0
- package/lib-next/theme/CodeBlock/{styles.module.css → Content/styles.module.css} +39 -29
- package/lib-next/theme/CodeBlock/CopyButton/index.js +61 -0
- package/lib-next/theme/CodeBlock/CopyButton/styles.module.css +47 -0
- package/lib-next/theme/CodeBlock/Line/index.js +49 -0
- package/lib-next/theme/CodeBlock/Line/styles.module.css +51 -0
- package/lib-next/theme/CodeBlock/WordWrapButton/index.js +40 -0
- package/lib-next/theme/CodeBlock/WordWrapButton/styles.module.css +15 -0
- package/lib-next/theme/CodeBlock/index.js +26 -164
- package/lib-next/theme/ColorModeToggle/index.js +62 -0
- package/lib-next/theme/ColorModeToggle/styles.module.css +35 -0
- package/lib-next/theme/Details/index.js +1 -1
- package/lib-next/theme/DocBreadcrumbs/index.js +63 -19
- package/lib-next/theme/DocBreadcrumbs/styles.module.css +8 -15
- package/lib-next/theme/DocCard/index.js +17 -15
- package/lib-next/theme/DocCard/styles.module.css +8 -17
- package/lib-next/theme/DocCardList/index.js +20 -6
- package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +30 -9
- package/lib-next/theme/DocCategoryGeneratedIndexPage/styles.module.css +8 -0
- package/lib-next/theme/DocItem/index.js +85 -67
- package/lib-next/theme/DocItem/styles.module.css +6 -0
- package/lib-next/theme/DocPage/Layout/Main/index.js +29 -0
- package/lib-next/theme/DocPage/Layout/Main/styles.module.css +28 -0
- package/lib-next/theme/DocPage/Layout/Sidebar/ExpandButton/index.js +34 -0
- package/lib-next/theme/DocPage/Layout/Sidebar/ExpandButton/styles.module.css +33 -0
- package/lib-next/theme/DocPage/Layout/Sidebar/index.js +68 -0
- package/lib-next/theme/DocPage/Layout/Sidebar/index.module.css +32 -0
- package/lib-next/theme/DocPage/Layout/index.js +34 -0
- package/lib-next/theme/{BlogPostAuthor/styles.module.css → DocPage/Layout/index.module.css} +6 -3
- package/lib-next/theme/DocPage/index.js +30 -149
- package/lib-next/theme/DocPaginator/index.js +25 -28
- package/lib-next/theme/DocSidebar/Desktop/CollapseButton/index.js +34 -0
- package/lib-next/theme/DocSidebar/Desktop/CollapseButton/styles.module.css +46 -0
- package/lib-next/theme/DocSidebar/Desktop/Content/index.js +46 -0
- package/lib-next/theme/DocSidebar/Desktop/Content/styles.module.css +23 -0
- package/lib-next/theme/DocSidebar/Desktop/index.js +36 -0
- package/lib-next/theme/DocSidebar/Desktop/styles.module.css +50 -0
- package/lib-next/theme/DocSidebar/Mobile/index.js +49 -0
- package/lib-next/theme/DocSidebar/index.js +6 -113
- package/lib-next/theme/DocSidebarItem/Category.js +197 -0
- package/lib-next/theme/DocSidebarItem/Html.js +27 -0
- package/lib-next/theme/DocSidebarItem/{styles.module.css → Html.module.css} +0 -0
- package/lib-next/theme/DocSidebarItem/Link.js +53 -0
- package/lib-next/theme/DocSidebarItem/Link.module.css +10 -0
- package/lib-next/theme/DocSidebarItem/index.js +4 -245
- package/lib-next/theme/DocSidebarItems/index.js +1 -6
- package/lib-next/theme/DocTagDocListPage/index.js +40 -33
- package/lib-next/theme/DocTagsListPage/index.js +21 -16
- package/lib-next/theme/DocVersionBanner/index.js +2 -2
- package/lib-next/theme/Footer/Copyright/index.js +18 -0
- package/lib-next/theme/Footer/Layout/index.js +26 -0
- package/lib-next/theme/Footer/LinkItem/index.js +33 -0
- package/lib-next/theme/Footer/Links/MultiColumn/index.js +47 -0
- package/lib-next/theme/Footer/Links/Simple/index.js +41 -0
- package/lib-next/theme/Footer/Links/index.js +17 -0
- package/lib-next/theme/Footer/Logo/index.js +38 -0
- package/lib-next/theme/Footer/{styles.module.css → Logo/styles.module.css} +0 -0
- package/lib-next/theme/Footer/index.js +11 -163
- package/lib-next/theme/Heading/index.js +10 -24
- package/lib-next/theme/IconDarkMode/index.js +17 -0
- package/lib-next/theme/IconExternalLink/styles.module.css +0 -2
- package/lib-next/theme/IconHome/index.js +17 -0
- package/lib-next/theme/IconLanguage/index.js +3 -3
- package/lib-next/theme/IconLightMode/index.js +17 -0
- package/lib-next/theme/LastUpdated/index.js +1 -0
- package/lib-next/theme/Layout/index.js +15 -10
- package/lib-next/theme/LayoutProviders/index.js +5 -4
- package/lib-next/theme/MDXComponents/A.js +11 -0
- package/lib-next/theme/MDXComponents/Code.js +28 -0
- package/lib-next/theme/MDXComponents/Details.js +20 -0
- package/lib-next/theme/MDXComponents/Head.js +26 -0
- package/lib-next/theme/MDXComponents/Heading.js +11 -0
- package/lib-next/theme/MDXComponents/Img.js +24 -0
- package/{src/theme/MDXComponents/styles.css → lib-next/theme/MDXComponents/Img.module.css} +1 -6
- package/lib-next/theme/MDXComponents/Pre.js +18 -0
- package/lib-next/theme/MDXComponents/Ul.js +21 -0
- package/lib-next/theme/MDXComponents/index.js +22 -57
- package/lib-next/theme/MDXContent/index.js +12 -0
- package/lib-next/theme/MDXPage/index.js +33 -28
- package/lib-next/theme/Navbar/ColorModeToggle/index.js +25 -0
- package/lib-next/theme/Navbar/Content/index.js +75 -0
- package/lib-next/theme/Navbar/Content/styles.module.css +15 -0
- package/lib-next/theme/Navbar/Layout/index.js +54 -0
- package/{src/theme/Navbar → lib-next/theme/Navbar/Layout}/styles.module.css +0 -13
- package/lib-next/theme/Navbar/Logo/index.js +17 -0
- package/lib-next/theme/Navbar/MobileSidebar/Header/index.js +33 -0
- package/lib-next/theme/Navbar/MobileSidebar/Layout/index.js +28 -0
- package/lib-next/theme/Navbar/MobileSidebar/PrimaryMenu/index.js +33 -0
- package/lib-next/theme/Navbar/MobileSidebar/SecondaryMenu/index.js +36 -0
- package/lib-next/theme/Navbar/MobileSidebar/Toggle/index.js +23 -0
- package/lib-next/theme/Navbar/MobileSidebar/index.js +31 -0
- package/lib-next/theme/Navbar/Search/index.js +11 -0
- package/lib-next/theme/Navbar/Search/styles.module.css +20 -0
- package/lib-next/theme/Navbar/index.js +6 -271
- package/lib-next/theme/NavbarItem/ComponentTypes.js +27 -0
- package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +2 -6
- package/lib-next/theme/NavbarItem/DocNavbarItem.js +11 -28
- package/lib-next/theme/NavbarItem/DocSidebarNavbarItem.js +10 -42
- package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +25 -29
- package/lib-next/theme/NavbarItem/DocsVersionNavbarItem.js +2 -9
- package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +14 -3
- package/lib-next/theme/NavbarItem/HtmlNavbarItem.js +30 -0
- package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/index.js +5 -10
- package/lib-next/theme/NavbarItem/NavbarNavLink.js +49 -35
- package/lib-next/theme/NavbarItem/SearchNavbarItem.js +6 -1
- package/lib-next/theme/NavbarItem/index.js +4 -23
- package/lib-next/theme/NavbarItem/utils.js +2 -1
- package/lib-next/theme/NotFound.js +38 -33
- package/lib-next/theme/PaginatorNavLink/index.js +8 -2
- package/lib-next/theme/SearchMetadata/index.js +9 -0
- package/lib-next/theme/{LayoutHead → SiteMetadata}/index.js +19 -33
- package/lib-next/theme/SkipToContent/index.js +3 -29
- package/lib-next/theme/TOCCollapsible/CollapseButton.js +29 -0
- package/{src/theme/TOCCollapsible/styles.module.css → lib-next/theme/TOCCollapsible/CollapseButton.module.css} +1 -22
- package/lib-next/theme/TOCCollapsible/index.js +4 -16
- package/lib-next/theme/TOCCollapsible/index.module.css +31 -0
- package/lib-next/theme/TOCItems/Tree.js +40 -0
- package/lib-next/theme/TOCItems/index.js +3 -34
- package/lib-next/theme/TabItem/index.js +3 -1
- package/lib-next/theme/TabItem/styles.module.css +10 -0
- package/lib-next/theme/Tabs/__tests__/index.test.js +8 -8
- package/lib-next/theme/Tabs/index.js +5 -5
- package/lib-next/theme/Tabs/styles.module.css +4 -0
- package/lib-next/theme/Tag/index.js +6 -7
- package/lib-next/theme/TagsListInline/index.js +1 -1
- package/lib-next/theme/ThemedImage/index.js +3 -3
- package/package.json +25 -20
- package/src/admonitions.css +4 -0
- package/src/getSwizzleConfig.ts +173 -22
- package/src/index.ts +14 -15
- package/src/nprogress.css +41 -0
- package/src/nprogress.ts +31 -0
- package/src/theme/BackToTopButton/index.tsx +5 -114
- package/src/theme/BlogArchivePage/index.tsx +18 -17
- package/src/theme/BlogLayout/index.tsx +1 -5
- package/src/theme/BlogListPage/index.tsx +32 -13
- package/src/theme/BlogListPaginator/index.tsx +25 -28
- package/src/theme/BlogPostAuthor/index.tsx +14 -8
- package/src/theme/BlogPostItem/index.tsx +6 -6
- package/src/theme/BlogPostItem/styles.module.css +9 -0
- package/src/theme/BlogPostPage/index.tsx +55 -48
- package/src/theme/BlogPostPaginator/index.tsx +25 -28
- package/src/theme/BlogSidebar/Desktop/index.tsx +45 -0
- package/src/theme/BlogSidebar/{styles.module.css → Desktop/styles.module.css} +1 -2
- package/src/theme/BlogSidebar/Mobile/index.tsx +38 -0
- package/src/theme/BlogSidebar/index.tsx +10 -31
- package/src/theme/BlogTagsListPage/index.tsx +17 -14
- package/src/theme/BlogTagsPostsPage/index.tsx +46 -36
- package/src/theme/CodeBlock/Container/index.tsx +35 -0
- package/src/theme/CodeBlock/Container/styles.module.css +14 -0
- package/src/theme/CodeBlock/Content/Element.tsx +30 -0
- package/src/theme/CodeBlock/Content/String.tsx +111 -0
- package/src/theme/CodeBlock/{styles.module.css → Content/styles.module.css} +39 -29
- package/src/theme/CodeBlock/CopyButton/index.tsx +67 -0
- package/src/theme/CodeBlock/CopyButton/styles.module.css +47 -0
- package/src/theme/CodeBlock/Line/index.tsx +48 -0
- package/src/theme/CodeBlock/Line/styles.module.css +51 -0
- package/src/theme/CodeBlock/WordWrapButton/index.tsx +49 -0
- package/src/theme/CodeBlock/WordWrapButton/styles.module.css +15 -0
- package/src/theme/CodeBlock/index.tsx +29 -165
- package/src/theme/ColorModeToggle/index.tsx +67 -0
- package/src/theme/ColorModeToggle/styles.module.css +35 -0
- package/src/theme/Details/index.tsx +1 -1
- package/src/theme/DocBreadcrumbs/index.tsx +65 -16
- package/src/theme/DocBreadcrumbs/styles.module.css +8 -15
- package/src/theme/DocCard/index.tsx +24 -17
- package/src/theme/DocCard/styles.module.css +8 -17
- package/src/theme/DocCardList/index.tsx +19 -10
- package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +34 -7
- package/src/theme/DocCategoryGeneratedIndexPage/styles.module.css +8 -0
- package/src/theme/DocItem/index.tsx +72 -56
- package/src/theme/DocItem/styles.module.css +6 -0
- package/src/theme/DocPage/Layout/Main/index.tsx +37 -0
- package/src/theme/DocPage/Layout/Main/styles.module.css +28 -0
- package/src/theme/DocPage/Layout/Sidebar/ExpandButton/index.tsx +40 -0
- package/src/theme/DocPage/Layout/Sidebar/ExpandButton/styles.module.css +33 -0
- package/src/theme/DocPage/Layout/Sidebar/index.module.css +32 -0
- package/src/theme/DocPage/Layout/Sidebar/index.tsx +74 -0
- package/src/theme/{BlogPostAuthor/styles.module.css → DocPage/Layout/index.module.css} +6 -3
- package/src/theme/DocPage/Layout/index.tsx +39 -0
- package/src/theme/DocPage/index.tsx +30 -160
- package/src/theme/DocPaginator/index.tsx +25 -28
- package/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx +38 -0
- package/src/theme/DocSidebar/Desktop/CollapseButton/styles.module.css +46 -0
- package/src/theme/DocSidebar/Desktop/Content/index.tsx +55 -0
- package/src/theme/DocSidebar/Desktop/Content/styles.module.css +23 -0
- package/src/theme/DocSidebar/Desktop/index.tsx +40 -0
- package/src/theme/DocSidebar/Desktop/styles.module.css +50 -0
- package/src/theme/DocSidebar/Mobile/index.tsx +54 -0
- package/src/theme/DocSidebar/index.tsx +6 -121
- package/src/theme/DocSidebarItem/Category.tsx +210 -0
- package/src/theme/DocSidebarItem/{styles.module.css → Html.module.css} +0 -0
- package/src/theme/DocSidebarItem/Html.tsx +34 -0
- package/src/theme/DocSidebarItem/Link.module.css +10 -0
- package/src/theme/DocSidebarItem/Link.tsx +58 -0
- package/src/theme/DocSidebarItem/index.tsx +4 -260
- package/src/theme/DocSidebarItems/index.tsx +1 -6
- package/src/theme/DocTagDocListPage/index.tsx +40 -33
- package/src/theme/DocTagsListPage/index.tsx +21 -16
- package/src/theme/DocVersionBanner/index.tsx +5 -6
- package/src/theme/Footer/Copyright/index.tsx +20 -0
- package/src/theme/Footer/Layout/index.tsx +34 -0
- package/src/theme/Footer/LinkItem/index.tsx +36 -0
- package/src/theme/Footer/Links/MultiColumn/index.tsx +51 -0
- package/src/theme/Footer/Links/Simple/index.tsx +42 -0
- package/src/theme/Footer/Links/index.tsx +21 -0
- package/src/theme/Footer/Logo/index.tsx +41 -0
- package/src/theme/Footer/{styles.module.css → Logo/styles.module.css} +0 -0
- package/src/theme/Footer/index.tsx +12 -186
- package/src/theme/Heading/index.tsx +10 -22
- package/src/theme/IconDarkMode/index.tsx +20 -0
- package/src/theme/IconExternalLink/styles.module.css +0 -2
- package/src/theme/IconHome/index.tsx +20 -0
- package/src/theme/IconLanguage/index.tsx +3 -3
- package/src/theme/IconLightMode/index.tsx +20 -0
- package/src/theme/LastUpdated/index.tsx +1 -0
- package/src/theme/Layout/index.tsx +15 -10
- package/src/theme/LayoutProviders/index.tsx +5 -4
- package/src/theme/MDXComponents/A.tsx +14 -0
- package/src/theme/MDXComponents/Code.tsx +37 -0
- package/src/theme/MDXComponents/Details.tsx +25 -0
- package/src/theme/MDXComponents/Head.tsx +29 -0
- package/src/theme/MDXComponents/Heading.tsx +14 -0
- package/{lib-next/theme/MDXComponents/styles.css → src/theme/MDXComponents/Img.module.css} +1 -6
- package/src/theme/MDXComponents/Img.tsx +26 -0
- package/src/theme/MDXComponents/Pre.tsx +22 -0
- package/src/theme/MDXComponents/Ul.tsx +24 -0
- package/src/theme/MDXComponents/index.tsx +23 -66
- package/src/theme/MDXContent/index.tsx +15 -0
- package/src/theme/MDXPage/index.tsx +33 -28
- package/src/theme/Navbar/ColorModeToggle/index.tsx +30 -0
- package/src/theme/Navbar/Content/index.tsx +86 -0
- package/src/theme/Navbar/Content/styles.module.css +15 -0
- package/src/theme/Navbar/Layout/index.tsx +57 -0
- package/{lib-next/theme/Navbar → src/theme/Navbar/Layout}/styles.module.css +0 -13
- package/src/theme/Navbar/Logo/index.tsx +19 -0
- package/src/theme/Navbar/MobileSidebar/Header/index.tsx +34 -0
- package/src/theme/Navbar/MobileSidebar/Layout/index.tsx +31 -0
- package/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx +38 -0
- package/src/theme/Navbar/MobileSidebar/SecondaryMenu/index.tsx +38 -0
- package/src/theme/Navbar/MobileSidebar/Toggle/index.tsx +25 -0
- package/src/theme/Navbar/MobileSidebar/index.tsx +33 -0
- package/src/theme/Navbar/Search/index.tsx +15 -0
- package/src/theme/Navbar/Search/styles.module.css +20 -0
- package/src/theme/Navbar/index.tsx +6 -286
- package/src/theme/NavbarItem/ComponentTypes.tsx +32 -0
- package/src/theme/NavbarItem/DefaultNavbarItem.tsx +2 -2
- package/src/theme/NavbarItem/DocNavbarItem.tsx +13 -32
- package/src/theme/NavbarItem/DocSidebarNavbarItem.tsx +9 -49
- package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +26 -33
- package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +3 -10
- package/src/theme/NavbarItem/DropdownNavbarItem.tsx +15 -3
- package/src/theme/NavbarItem/HtmlNavbarItem.tsx +32 -0
- package/src/theme/NavbarItem/LocaleDropdownNavbarItem/index.tsx +5 -9
- package/src/theme/NavbarItem/NavbarNavLink.tsx +41 -29
- package/src/theme/NavbarItem/SearchNavbarItem.tsx +6 -1
- package/src/theme/NavbarItem/index.tsx +9 -39
- package/src/theme/NavbarItem/utils.ts +5 -2
- package/src/theme/NotFound.tsx +38 -33
- package/src/theme/PaginatorNavLink/index.tsx +8 -2
- package/src/theme/SearchMetadata/index.tsx +9 -0
- package/src/theme/{LayoutHead → SiteMetadata}/index.tsx +19 -33
- package/src/theme/SkipToContent/index.tsx +3 -29
- package/{lib-next/theme/TOCCollapsible/styles.module.css → src/theme/TOCCollapsible/CollapseButton.module.css} +1 -22
- package/src/theme/TOCCollapsible/CollapseButton.tsx +35 -0
- package/src/theme/TOCCollapsible/index.module.css +31 -0
- package/src/theme/TOCCollapsible/index.tsx +4 -17
- package/src/theme/TOCItems/Tree.tsx +46 -0
- package/src/theme/TOCItems/index.tsx +2 -41
- package/src/theme/TabItem/index.tsx +7 -1
- package/src/theme/TabItem/styles.module.css +10 -0
- package/src/theme/Tabs/index.tsx +8 -9
- package/src/theme/Tabs/styles.module.css +4 -0
- package/src/theme/Tag/index.tsx +6 -8
- package/src/theme/TagsListInline/index.tsx +1 -1
- package/src/theme/ThemedImage/index.tsx +4 -3
- package/src/theme-classic.d.ts +600 -76
- package/src/translations.ts +12 -6
- package/src/validateThemeConfig.ts +90 -39
- package/lib/types.d.ts +0 -11
- package/lib-next/theme/DocPage/styles.module.css +0 -86
- package/lib-next/theme/DocSidebar/styles.module.css +0 -107
- package/lib-next/theme/Seo/index.js +0 -40
- package/lib-next/theme/Toggle/index.js +0 -100
- package/lib-next/theme/Toggle/styles.module.css +0 -106
- package/src/theme/DocPage/styles.module.css +0 -86
- package/src/theme/DocSidebar/styles.module.css +0 -107
- package/src/theme/Seo/index.tsx +0 -49
- package/src/theme/Toggle/index.tsx +0 -117
- package/src/theme/Toggle/styles.module.css +0 -106
- package/src/types.d.ts +0 -11
|
@@ -5,36 +5,62 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
|
-
import Seo from '@theme/Seo';
|
|
9
8
|
import BlogLayout from '@theme/BlogLayout';
|
|
10
9
|
import BlogPostItem from '@theme/BlogPostItem';
|
|
11
10
|
import BlogPostPaginator from '@theme/BlogPostPaginator';
|
|
12
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
PageMetadata,
|
|
13
|
+
HtmlClassNameProvider,
|
|
14
|
+
ThemeClassNames,
|
|
15
|
+
} from '@docusaurus/theme-common';
|
|
13
16
|
import TOC from '@theme/TOC';
|
|
14
|
-
|
|
17
|
+
import clsx from 'clsx';
|
|
18
|
+
|
|
19
|
+
function BlogPostPageMetadata(props) {
|
|
20
|
+
const {content: BlogPostContents} = props;
|
|
21
|
+
const {assets, metadata} = BlogPostContents;
|
|
22
|
+
const {title, description, date, tags, authors, frontMatter} = metadata;
|
|
23
|
+
const {keywords} = frontMatter;
|
|
24
|
+
const image = assets.image ?? frontMatter.image;
|
|
25
|
+
return (
|
|
26
|
+
<PageMetadata
|
|
27
|
+
title={title}
|
|
28
|
+
description={description}
|
|
29
|
+
keywords={keywords}
|
|
30
|
+
image={image}>
|
|
31
|
+
<meta property="og:type" content="article" />
|
|
32
|
+
<meta property="article:published_time" content={date} />
|
|
33
|
+
{/* TODO double check those article meta array syntaxes, see https://ogp.me/#array */}
|
|
34
|
+
{authors.some((author) => author.url) && (
|
|
35
|
+
<meta
|
|
36
|
+
property="article:author"
|
|
37
|
+
content={authors
|
|
38
|
+
.map((author) => author.url)
|
|
39
|
+
.filter(Boolean)
|
|
40
|
+
.join(',')}
|
|
41
|
+
/>
|
|
42
|
+
)}
|
|
43
|
+
{tags.length > 0 && (
|
|
44
|
+
<meta
|
|
45
|
+
property="article:tag"
|
|
46
|
+
content={tags.map((tag) => tag.label).join(',')}
|
|
47
|
+
/>
|
|
48
|
+
)}
|
|
49
|
+
</PageMetadata>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function BlogPostPageContent(props) {
|
|
15
54
|
const {content: BlogPostContents, sidebar} = props;
|
|
16
55
|
const {assets, metadata} = BlogPostContents;
|
|
17
|
-
const {
|
|
18
|
-
title,
|
|
19
|
-
description,
|
|
20
|
-
nextItem,
|
|
21
|
-
prevItem,
|
|
22
|
-
date,
|
|
23
|
-
tags,
|
|
24
|
-
authors,
|
|
25
|
-
frontMatter,
|
|
26
|
-
} = metadata;
|
|
56
|
+
const {nextItem, prevItem, frontMatter} = metadata;
|
|
27
57
|
const {
|
|
28
58
|
hide_table_of_contents: hideTableOfContents,
|
|
29
|
-
keywords,
|
|
30
59
|
toc_min_heading_level: tocMinHeadingLevel,
|
|
31
60
|
toc_max_heading_level: tocMaxHeadingLevel,
|
|
32
61
|
} = frontMatter;
|
|
33
|
-
const image = assets.image ?? frontMatter.image;
|
|
34
62
|
return (
|
|
35
63
|
<BlogLayout
|
|
36
|
-
wrapperClassName={ThemeClassNames.wrapper.blogPages}
|
|
37
|
-
pageClassName={ThemeClassNames.page.blogPostPage}
|
|
38
64
|
sidebar={sidebar}
|
|
39
65
|
toc={
|
|
40
66
|
!hideTableOfContents &&
|
|
@@ -47,34 +73,6 @@ export default function BlogPostPage(props) {
|
|
|
47
73
|
/>
|
|
48
74
|
) : undefined
|
|
49
75
|
}>
|
|
50
|
-
<Seo // TODO refactor needed: it's a bit annoying but Seo MUST be inside
|
|
51
|
-
// BlogLayout, otherwise default image (set by BlogLayout) would shadow
|
|
52
|
-
// the custom blog post image
|
|
53
|
-
title={title}
|
|
54
|
-
description={description}
|
|
55
|
-
keywords={keywords}
|
|
56
|
-
image={image}>
|
|
57
|
-
<meta property="og:type" content="article" />
|
|
58
|
-
<meta property="article:published_time" content={date} />
|
|
59
|
-
|
|
60
|
-
{/* TODO double check those article meta array syntaxes, see https://ogp.me/#array */}
|
|
61
|
-
{authors.some((author) => author.url) && (
|
|
62
|
-
<meta
|
|
63
|
-
property="article:author"
|
|
64
|
-
content={authors
|
|
65
|
-
.map((author) => author.url)
|
|
66
|
-
.filter(Boolean)
|
|
67
|
-
.join(',')}
|
|
68
|
-
/>
|
|
69
|
-
)}
|
|
70
|
-
{tags.length > 0 && (
|
|
71
|
-
<meta
|
|
72
|
-
property="article:tag"
|
|
73
|
-
content={tags.map((tag) => tag.label).join(',')}
|
|
74
|
-
/>
|
|
75
|
-
)}
|
|
76
|
-
</Seo>
|
|
77
|
-
|
|
78
76
|
<BlogPostItem
|
|
79
77
|
frontMatter={frontMatter}
|
|
80
78
|
assets={assets}
|
|
@@ -89,3 +87,16 @@ export default function BlogPostPage(props) {
|
|
|
89
87
|
</BlogLayout>
|
|
90
88
|
);
|
|
91
89
|
}
|
|
90
|
+
|
|
91
|
+
export default function BlogPostPage(props) {
|
|
92
|
+
return (
|
|
93
|
+
<HtmlClassNameProvider
|
|
94
|
+
className={clsx(
|
|
95
|
+
ThemeClassNames.wrapper.blogPages,
|
|
96
|
+
ThemeClassNames.page.blogPostPage,
|
|
97
|
+
)}>
|
|
98
|
+
<BlogPostPageMetadata {...props} />
|
|
99
|
+
<BlogPostPageContent {...props} />
|
|
100
|
+
</HtmlClassNameProvider>
|
|
101
|
+
);
|
|
102
|
+
}
|
|
@@ -17,34 +17,31 @@ export default function BlogPostPaginator(props) {
|
|
|
17
17
|
message: 'Blog post page navigation',
|
|
18
18
|
description: 'The ARIA label for the blog posts pagination',
|
|
19
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
|
-
</div>
|
|
20
|
+
{prevItem && (
|
|
21
|
+
<PaginatorNavLink
|
|
22
|
+
{...prevItem}
|
|
23
|
+
subLabel={
|
|
24
|
+
<Translate
|
|
25
|
+
id="theme.blog.post.paginator.newerPost"
|
|
26
|
+
description="The blog post button label to navigate to the newer/previous post">
|
|
27
|
+
Newer Post
|
|
28
|
+
</Translate>
|
|
29
|
+
}
|
|
30
|
+
/>
|
|
31
|
+
)}
|
|
32
|
+
{nextItem && (
|
|
33
|
+
<PaginatorNavLink
|
|
34
|
+
{...nextItem}
|
|
35
|
+
subLabel={
|
|
36
|
+
<Translate
|
|
37
|
+
id="theme.blog.post.paginator.olderPost"
|
|
38
|
+
description="The blog post button label to navigate to the older/next post">
|
|
39
|
+
Older Post
|
|
40
|
+
</Translate>
|
|
41
|
+
}
|
|
42
|
+
isNext
|
|
43
|
+
/>
|
|
44
|
+
)}
|
|
48
45
|
</nav>
|
|
49
46
|
);
|
|
50
47
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
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 Link from '@docusaurus/Link';
|
|
10
|
+
import {translate} from '@docusaurus/Translate';
|
|
11
|
+
import styles from './styles.module.css';
|
|
12
|
+
export default function BlogSidebarDesktop({sidebar}) {
|
|
13
|
+
return (
|
|
14
|
+
<aside className="col col--3">
|
|
15
|
+
<nav
|
|
16
|
+
className={clsx(styles.sidebar, 'thin-scrollbar')}
|
|
17
|
+
aria-label={translate({
|
|
18
|
+
id: 'theme.blog.sidebar.navAriaLabel',
|
|
19
|
+
message: 'Blog recent posts navigation',
|
|
20
|
+
description: 'The ARIA label for recent posts in the blog sidebar',
|
|
21
|
+
})}>
|
|
22
|
+
<div className={clsx(styles.sidebarItemTitle, 'margin-bottom--md')}>
|
|
23
|
+
{sidebar.title}
|
|
24
|
+
</div>
|
|
25
|
+
<ul className={clsx(styles.sidebarItemList, 'clean-list')}>
|
|
26
|
+
{sidebar.items.map((item) => (
|
|
27
|
+
<li key={item.permalink} className={styles.sidebarItem}>
|
|
28
|
+
<Link
|
|
29
|
+
isNavLink
|
|
30
|
+
to={item.permalink}
|
|
31
|
+
className={styles.sidebarItemLink}
|
|
32
|
+
activeClassName={styles.sidebarItemLinkActive}>
|
|
33
|
+
{item.title}
|
|
34
|
+
</Link>
|
|
35
|
+
</li>
|
|
36
|
+
))}
|
|
37
|
+
</ul>
|
|
38
|
+
</nav>
|
|
39
|
+
</aside>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
@@ -18,9 +18,7 @@
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
.sidebarItemList {
|
|
21
|
-
list-style: none;
|
|
22
21
|
font-size: 0.9rem;
|
|
23
|
-
padding-left: 0;
|
|
24
22
|
}
|
|
25
23
|
|
|
26
24
|
.sidebarItem {
|
|
@@ -29,6 +27,7 @@
|
|
|
29
27
|
|
|
30
28
|
.sidebarItemLink {
|
|
31
29
|
color: var(--ifm-font-color-base);
|
|
30
|
+
display: block;
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
.sidebarItemLink:hover {
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
import {NavbarSecondaryMenuFiller} from '@docusaurus/theme-common';
|
|
10
|
+
|
|
11
|
+
function BlogSidebarMobileSecondaryMenu({sidebar}) {
|
|
12
|
+
return (
|
|
13
|
+
<ul className="menu__list">
|
|
14
|
+
{sidebar.items.map((item) => (
|
|
15
|
+
<li key={item.permalink} className="menu__list-item">
|
|
16
|
+
<Link
|
|
17
|
+
isNavLink
|
|
18
|
+
to={item.permalink}
|
|
19
|
+
className="menu__link"
|
|
20
|
+
activeClassName="menu__link--active">
|
|
21
|
+
{item.title}
|
|
22
|
+
</Link>
|
|
23
|
+
</li>
|
|
24
|
+
))}
|
|
25
|
+
</ul>
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export default function BlogSidebarMobile(props) {
|
|
30
|
+
return (
|
|
31
|
+
<NavbarSecondaryMenuFiller
|
|
32
|
+
component={BlogSidebarMobileSecondaryMenu}
|
|
33
|
+
props={props}
|
|
34
|
+
/>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
@@ -5,39 +5,19 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import {translate} from '@docusaurus/Translate';
|
|
8
|
+
import BlogSidebarDesktop from '@theme/BlogSidebar/Desktop';
|
|
9
|
+
import BlogSidebarMobile from '@theme/BlogSidebar/Mobile';
|
|
10
|
+
import {useWindowSize} from '@docusaurus/theme-common';
|
|
12
11
|
export default function BlogSidebar({sidebar}) {
|
|
13
|
-
|
|
12
|
+
const windowSize = useWindowSize();
|
|
13
|
+
|
|
14
|
+
if (!sidebar?.items.length) {
|
|
14
15
|
return null;
|
|
16
|
+
} // Mobile sidebar doesn't need to be server-rendered
|
|
17
|
+
|
|
18
|
+
if (windowSize === 'mobile') {
|
|
19
|
+
return <BlogSidebarMobile sidebar={sidebar} />;
|
|
15
20
|
}
|
|
16
21
|
|
|
17
|
-
return
|
|
18
|
-
<nav
|
|
19
|
-
className={clsx(styles.sidebar, 'thin-scrollbar')}
|
|
20
|
-
aria-label={translate({
|
|
21
|
-
id: 'theme.blog.sidebar.navAriaLabel',
|
|
22
|
-
message: 'Blog recent posts navigation',
|
|
23
|
-
description: 'The ARIA label for recent posts in the blog sidebar',
|
|
24
|
-
})}>
|
|
25
|
-
<div className={clsx(styles.sidebarItemTitle, 'margin-bottom--md')}>
|
|
26
|
-
{sidebar.title}
|
|
27
|
-
</div>
|
|
28
|
-
<ul className={styles.sidebarItemList}>
|
|
29
|
-
{sidebar.items.map((item) => (
|
|
30
|
-
<li key={item.permalink} className={styles.sidebarItem}>
|
|
31
|
-
<Link
|
|
32
|
-
isNavLink
|
|
33
|
-
to={item.permalink}
|
|
34
|
-
className={styles.sidebarItemLink}
|
|
35
|
-
activeClassName={styles.sidebarItemLinkActive}>
|
|
36
|
-
{item.title}
|
|
37
|
-
</Link>
|
|
38
|
-
</li>
|
|
39
|
-
))}
|
|
40
|
-
</ul>
|
|
41
|
-
</nav>
|
|
42
|
-
);
|
|
22
|
+
return <BlogSidebarDesktop sidebar={sidebar} />;
|
|
43
23
|
}
|
|
@@ -8,24 +8,27 @@ import React from 'react';
|
|
|
8
8
|
import BlogLayout from '@theme/BlogLayout';
|
|
9
9
|
import TagsListByLetter from '@theme/TagsListByLetter';
|
|
10
10
|
import {
|
|
11
|
+
PageMetadata,
|
|
12
|
+
HtmlClassNameProvider,
|
|
11
13
|
ThemeClassNames,
|
|
12
14
|
translateTagsPageTitle,
|
|
13
15
|
} from '@docusaurus/theme-common';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
import SearchMetadata from '../SearchMetadata';
|
|
17
|
+
import clsx from 'clsx';
|
|
18
|
+
export default function BlogTagsListPage({tags, sidebar}) {
|
|
16
19
|
const title = translateTagsPageTitle();
|
|
17
20
|
return (
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
</
|
|
21
|
+
<HtmlClassNameProvider
|
|
22
|
+
className={clsx(
|
|
23
|
+
ThemeClassNames.wrapper.blogPages,
|
|
24
|
+
ThemeClassNames.page.blogTagsListPage,
|
|
25
|
+
)}>
|
|
26
|
+
<PageMetadata title={title} />
|
|
27
|
+
<SearchMetadata tag="blog_tags_list" />
|
|
28
|
+
<BlogLayout sidebar={sidebar}>
|
|
29
|
+
<h1>{title}</h1>
|
|
30
|
+
<TagsListByLetter tags={tags} />
|
|
31
|
+
</BlogLayout>
|
|
32
|
+
</HtmlClassNameProvider>
|
|
30
33
|
);
|
|
31
34
|
}
|
|
@@ -9,8 +9,15 @@ import Link from '@docusaurus/Link';
|
|
|
9
9
|
import BlogLayout from '@theme/BlogLayout';
|
|
10
10
|
import BlogPostItem from '@theme/BlogPostItem';
|
|
11
11
|
import Translate, {translate} from '@docusaurus/Translate';
|
|
12
|
-
import {
|
|
13
|
-
|
|
12
|
+
import {
|
|
13
|
+
PageMetadata,
|
|
14
|
+
HtmlClassNameProvider,
|
|
15
|
+
ThemeClassNames,
|
|
16
|
+
usePluralForm,
|
|
17
|
+
} from '@docusaurus/theme-common';
|
|
18
|
+
import BlogListPaginator from '@theme/BlogListPaginator';
|
|
19
|
+
import SearchMetadata from '@theme/SearchMetadata';
|
|
20
|
+
import clsx from 'clsx'; // Very simple pluralization: probably good enough for now
|
|
14
21
|
|
|
15
22
|
function useBlogPostsPlural() {
|
|
16
23
|
const {selectMessage} = usePluralForm();
|
|
@@ -31,9 +38,7 @@ function useBlogPostsPlural() {
|
|
|
31
38
|
);
|
|
32
39
|
}
|
|
33
40
|
|
|
34
|
-
export default function BlogTagsPostsPage(
|
|
35
|
-
const {metadata, items, sidebar, listMetadata} = props;
|
|
36
|
-
const {allTagsPath, name: tagName, count} = metadata;
|
|
41
|
+
export default function BlogTagsPostsPage({tag, items, sidebar, listMetadata}) {
|
|
37
42
|
const blogPostsPlural = useBlogPostsPlural();
|
|
38
43
|
const title = translate(
|
|
39
44
|
{
|
|
@@ -42,43 +47,43 @@ export default function BlogTagsPostsPage(props) {
|
|
|
42
47
|
message: '{nPosts} tagged with "{tagName}"',
|
|
43
48
|
},
|
|
44
49
|
{
|
|
45
|
-
nPosts: blogPostsPlural(count),
|
|
46
|
-
tagName,
|
|
50
|
+
nPosts: blogPostsPlural(tag.count),
|
|
51
|
+
tagName: tag.label,
|
|
47
52
|
},
|
|
48
53
|
);
|
|
49
54
|
return (
|
|
50
|
-
<
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
<h1>{title}</h1>
|
|
55
|
+
<HtmlClassNameProvider
|
|
56
|
+
className={clsx(
|
|
57
|
+
ThemeClassNames.wrapper.blogPages,
|
|
58
|
+
ThemeClassNames.page.blogTagPostListPage,
|
|
59
|
+
)}>
|
|
60
|
+
<PageMetadata title={title} />
|
|
61
|
+
<SearchMetadata tag="blog_tags_posts" />
|
|
62
|
+
<BlogLayout sidebar={sidebar}>
|
|
63
|
+
<header className="margin-bottom--xl">
|
|
64
|
+
<h1>{title}</h1>
|
|
61
65
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
<Link href={tag.allTagsPath}>
|
|
67
|
+
<Translate
|
|
68
|
+
id="theme.tags.tagsPageLink"
|
|
69
|
+
description="The label of the link targeting the tag list page">
|
|
70
|
+
View All Tags
|
|
71
|
+
</Translate>
|
|
72
|
+
</Link>
|
|
73
|
+
</header>
|
|
70
74
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
75
|
+
{items.map(({content: BlogPostContent}) => (
|
|
76
|
+
<BlogPostItem
|
|
77
|
+
key={BlogPostContent.metadata.permalink}
|
|
78
|
+
frontMatter={BlogPostContent.frontMatter}
|
|
79
|
+
assets={BlogPostContent.assets}
|
|
80
|
+
metadata={BlogPostContent.metadata}
|
|
81
|
+
truncated>
|
|
82
|
+
<BlogPostContent />
|
|
83
|
+
</BlogPostItem>
|
|
84
|
+
))}
|
|
85
|
+
<BlogListPaginator metadata={listMetadata} />
|
|
86
|
+
</BlogLayout>
|
|
87
|
+
</HtmlClassNameProvider>
|
|
83
88
|
);
|
|
84
89
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
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 {
|
|
10
|
+
usePrismTheme,
|
|
11
|
+
getPrismCssVariables,
|
|
12
|
+
ThemeClassNames,
|
|
13
|
+
} from '@docusaurus/theme-common';
|
|
14
|
+
import styles from './styles.module.css';
|
|
15
|
+
export default function CodeBlockContainer({as: As, ...props}) {
|
|
16
|
+
const prismTheme = usePrismTheme();
|
|
17
|
+
const prismCssVariables = getPrismCssVariables(prismTheme);
|
|
18
|
+
return (
|
|
19
|
+
<As // Polymorphic components are hard to type, without `oneOf` generics
|
|
20
|
+
{...props}
|
|
21
|
+
style={prismCssVariables}
|
|
22
|
+
className={clsx(
|
|
23
|
+
props.className,
|
|
24
|
+
styles.codeBlockContainer,
|
|
25
|
+
ThemeClassNames.common.codeBlock,
|
|
26
|
+
)}
|
|
27
|
+
/>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
.codeBlockContainer {
|
|
9
|
+
background: var(--prism-background-color);
|
|
10
|
+
color: var(--prism-color);
|
|
11
|
+
margin-bottom: var(--ifm-leading);
|
|
12
|
+
box-shadow: var(--ifm-global-shadow-lw);
|
|
13
|
+
border-radius: var(--ifm-code-border-radius);
|
|
14
|
+
}
|
|
@@ -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 Container from '@theme/CodeBlock/Container';
|
|
9
|
+
import clsx from 'clsx';
|
|
10
|
+
import styles from './styles.module.css'; // <pre> tags in markdown map to CodeBlocks. They may contain JSX children. When
|
|
11
|
+
// the children is not a simple string, we just return a styled block without
|
|
12
|
+
// actually highlighting.
|
|
13
|
+
|
|
14
|
+
export default function CodeBlockJSX({children, className}) {
|
|
15
|
+
return (
|
|
16
|
+
<Container
|
|
17
|
+
as="pre"
|
|
18
|
+
tabIndex={0}
|
|
19
|
+
className={clsx(styles.codeBlockStandalone, 'thin-scrollbar', className)}>
|
|
20
|
+
<code className={styles.codeBlockLines}>{children}</code>
|
|
21
|
+
</Container>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
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 {
|
|
9
|
+
useThemeConfig,
|
|
10
|
+
parseCodeBlockTitle,
|
|
11
|
+
parseLanguage,
|
|
12
|
+
parseLines,
|
|
13
|
+
containsLineNumbers,
|
|
14
|
+
usePrismTheme,
|
|
15
|
+
useCodeWordWrap,
|
|
16
|
+
} from '@docusaurus/theme-common';
|
|
17
|
+
import clsx from 'clsx';
|
|
18
|
+
import Highlight, {defaultProps} from 'prism-react-renderer';
|
|
19
|
+
import Line from '@theme/CodeBlock/Line';
|
|
20
|
+
import CopyButton from '@theme/CodeBlock/CopyButton';
|
|
21
|
+
import WordWrapButton from '@theme/CodeBlock/WordWrapButton';
|
|
22
|
+
import Container from '@theme/CodeBlock/Container';
|
|
23
|
+
import styles from './styles.module.css';
|
|
24
|
+
export default function CodeBlockString({
|
|
25
|
+
children,
|
|
26
|
+
className: blockClassName = '',
|
|
27
|
+
metastring,
|
|
28
|
+
title: titleProp,
|
|
29
|
+
showLineNumbers: showLineNumbersProp,
|
|
30
|
+
language: languageProp,
|
|
31
|
+
}) {
|
|
32
|
+
const {
|
|
33
|
+
prism: {defaultLanguage, magicComments},
|
|
34
|
+
} = useThemeConfig();
|
|
35
|
+
const language =
|
|
36
|
+
languageProp ?? parseLanguage(blockClassName) ?? defaultLanguage;
|
|
37
|
+
const prismTheme = usePrismTheme();
|
|
38
|
+
const wordWrap = useCodeWordWrap(); // We still parse the metastring in case we want to support more syntax in the
|
|
39
|
+
// future. Note that MDX doesn't strip quotes when parsing metastring:
|
|
40
|
+
// "title=\"xyz\"" => title: "\"xyz\""
|
|
41
|
+
|
|
42
|
+
const title = parseCodeBlockTitle(metastring) || titleProp;
|
|
43
|
+
const {lineClassNames, code} = parseLines(children, {
|
|
44
|
+
metastring,
|
|
45
|
+
language,
|
|
46
|
+
magicComments,
|
|
47
|
+
});
|
|
48
|
+
const showLineNumbers =
|
|
49
|
+
showLineNumbersProp || containsLineNumbers(metastring);
|
|
50
|
+
return (
|
|
51
|
+
<Container
|
|
52
|
+
as="div"
|
|
53
|
+
className={clsx(
|
|
54
|
+
blockClassName,
|
|
55
|
+
language &&
|
|
56
|
+
!blockClassName.includes(`language-${language}`) &&
|
|
57
|
+
`language-${language}`,
|
|
58
|
+
)}>
|
|
59
|
+
{title && <div className={styles.codeBlockTitle}>{title}</div>}
|
|
60
|
+
<div className={styles.codeBlockContent}>
|
|
61
|
+
<Highlight
|
|
62
|
+
{...defaultProps}
|
|
63
|
+
theme={prismTheme}
|
|
64
|
+
code={code}
|
|
65
|
+
language={language ?? 'text'}>
|
|
66
|
+
{({className, tokens, getLineProps, getTokenProps}) => (
|
|
67
|
+
<pre
|
|
68
|
+
/* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */
|
|
69
|
+
tabIndex={0}
|
|
70
|
+
ref={wordWrap.codeBlockRef}
|
|
71
|
+
className={clsx(className, styles.codeBlock, 'thin-scrollbar')}>
|
|
72
|
+
<code
|
|
73
|
+
className={clsx(
|
|
74
|
+
styles.codeBlockLines,
|
|
75
|
+
showLineNumbers && styles.codeBlockLinesWithNumbering,
|
|
76
|
+
)}>
|
|
77
|
+
{tokens.map((line, i) => (
|
|
78
|
+
<Line
|
|
79
|
+
key={i}
|
|
80
|
+
line={line}
|
|
81
|
+
getLineProps={getLineProps}
|
|
82
|
+
getTokenProps={getTokenProps}
|
|
83
|
+
classNames={lineClassNames[i]}
|
|
84
|
+
showLineNumbers={showLineNumbers}
|
|
85
|
+
/>
|
|
86
|
+
))}
|
|
87
|
+
</code>
|
|
88
|
+
</pre>
|
|
89
|
+
)}
|
|
90
|
+
</Highlight>
|
|
91
|
+
<div className={styles.buttonGroup}>
|
|
92
|
+
{(wordWrap.isEnabled || wordWrap.isCodeScrollable) && (
|
|
93
|
+
<WordWrapButton
|
|
94
|
+
className={styles.codeButton}
|
|
95
|
+
onClick={() => wordWrap.toggle()}
|
|
96
|
+
isEnabled={wordWrap.isEnabled}
|
|
97
|
+
/>
|
|
98
|
+
)}
|
|
99
|
+
<CopyButton className={styles.codeButton} code={code} />
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
</Container>
|
|
103
|
+
);
|
|
104
|
+
}
|