@docusaurus/theme-classic 2.0.0-beta.21 → 2.0.0-beta.22
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/getSwizzleConfig.js +5 -5
- package/lib/index.js +4 -2
- package/lib/theme/Admonition/index.d.ts +1 -1
- package/lib/theme/Admonition/index.js +139 -57
- package/lib/{admonitions.css → theme/Admonition/styles.module.css} +14 -15
- package/lib/theme/AnnouncementBar/index.js +3 -2
- package/lib/theme/BackToTopButton/index.js +2 -1
- package/lib/theme/BlogListPage/index.js +2 -11
- package/lib/theme/BlogPostItem/Container/index.d.ts +9 -0
- package/lib/theme/BlogPostItem/Container/index.js +26 -0
- package/lib/theme/BlogPostItem/Content/index.d.ts +9 -0
- package/lib/theme/BlogPostItem/Content/index.js +23 -0
- package/lib/theme/BlogPostItem/Footer/ReadMoreLink/index.d.ts +9 -0
- package/lib/theme/BlogPostItem/Footer/ReadMoreLink/index.js +38 -0
- package/lib/theme/BlogPostItem/Footer/index.d.ts +8 -0
- package/lib/theme/BlogPostItem/Footer/index.js +52 -0
- package/lib/theme/BlogPostItem/Footer/styles.module.css +10 -0
- package/lib/theme/BlogPostItem/Header/Author/index.d.ts +9 -0
- package/lib/theme/{BlogPostAuthor → BlogPostItem/Header/Author}/index.js +3 -2
- package/lib/theme/BlogPostItem/Header/Authors/index.d.ts +9 -0
- package/{src/theme/BlogPostAuthors/index.tsx → lib/theme/BlogPostItem/Header/Authors/index.js} +9 -10
- package/lib/theme/{BlogPostAuthors → BlogPostItem/Header/Authors}/styles.module.css +0 -0
- package/lib/theme/{BlogPostAuthors → BlogPostItem/Header/Info}/index.d.ts +2 -2
- package/lib/theme/BlogPostItem/Header/Info/index.js +60 -0
- package/lib/theme/BlogPostItem/Header/Info/styles.module.css +10 -0
- package/lib/theme/BlogPostItem/Header/Title/index.d.ts +9 -0
- package/lib/theme/BlogPostItem/Header/Title/index.js +27 -0
- package/{src/theme/BlogPostItem → lib/theme/BlogPostItem/Header/Title}/styles.module.css +2 -10
- package/lib/theme/BlogPostItem/Header/index.d.ts +8 -0
- package/lib/theme/BlogPostItem/Header/index.js +19 -0
- package/lib/theme/BlogPostItem/index.d.ts +1 -1
- package/lib/theme/BlogPostItem/index.js +16 -142
- package/lib/theme/BlogPostItems/index.d.ts +9 -0
- package/lib/theme/BlogPostItems/index.js +27 -0
- package/lib/theme/BlogPostPage/Metadata/index.d.ts +8 -0
- package/lib/theme/BlogPostPage/Metadata/index.js +41 -0
- package/lib/theme/BlogPostPage/index.js +21 -60
- package/lib/theme/BlogTagsListPage/index.js +1 -1
- package/lib/theme/BlogTagsPostsPage/index.d.ts +1 -1
- package/lib/theme/BlogTagsPostsPage/index.js +36 -30
- package/lib/theme/CodeBlock/Container/index.js +2 -5
- package/lib/theme/CodeBlock/Content/String.js +2 -3
- package/lib/theme/CodeBlock/CopyButton/index.js +1 -0
- package/lib/theme/CodeBlock/Line/styles.module.css +7 -7
- package/lib/theme/ColorModeToggle/index.js +2 -2
- package/lib/theme/DocBreadcrumbs/index.js +3 -3
- package/lib/theme/DocCard/index.js +4 -1
- package/lib/theme/DocCardList/index.js +2 -2
- package/lib/theme/DocItem/Content/index.d.ts +9 -0
- package/lib/theme/DocItem/Content/index.js +44 -0
- package/lib/theme/DocItem/Footer/index.d.ts +8 -0
- package/lib/theme/{DocItemFooter → DocItem/Footer}/index.js +3 -3
- package/lib/theme/{DocItemFooter → DocItem/Footer}/styles.module.css +0 -0
- package/lib/theme/{BlogPostAuthor → DocItem/Layout}/index.d.ts +2 -2
- package/lib/theme/DocItem/Layout/index.js +59 -0
- package/lib/theme/DocItem/Layout/styles.module.css +17 -0
- package/lib/theme/DocItem/Metadata/index.d.ts +8 -0
- package/lib/theme/DocItem/Metadata/index.js +20 -0
- package/lib/theme/{DocItemFooter → DocItem/Paginator}/index.d.ts +5 -3
- package/lib/theme/DocItem/Paginator/index.js +17 -0
- package/lib/theme/DocItem/TOC/Desktop/index.d.ts +8 -0
- package/lib/theme/DocItem/TOC/Desktop/index.js +21 -0
- package/lib/theme/DocItem/TOC/Mobile/index.d.ts +8 -0
- package/lib/theme/DocItem/TOC/Mobile/index.js +23 -0
- package/lib/theme/DocItem/{styles.module.css → TOC/Mobile/styles.module.css} +0 -9
- package/lib/theme/DocItem/index.js +13 -106
- package/lib/theme/DocPage/Layout/Main/index.js +1 -1
- package/lib/theme/DocPage/Layout/Sidebar/ExpandButton/index.js +1 -1
- package/lib/theme/DocPage/Layout/Sidebar/index.js +2 -1
- package/lib/theme/DocPage/Layout/index.js +1 -1
- package/lib/theme/DocPage/index.js +2 -3
- package/lib/theme/DocSidebar/Desktop/CollapseButton/index.js +1 -1
- package/lib/theme/DocSidebar/Desktop/Content/index.js +2 -2
- package/lib/theme/DocSidebar/Mobile/index.js +1 -1
- package/lib/theme/DocSidebarItem/Category/index.js +6 -4
- package/lib/theme/DocSidebarItem/Link/index.js +3 -2
- package/lib/theme/DocSidebarItems/index.js +1 -1
- package/lib/theme/DocVersionBadge/index.js +2 -1
- package/lib/theme/DocVersionBanner/index.js +2 -2
- package/lib/theme/EditThisPage/index.js +1 -1
- package/lib/theme/Footer/LinkItem/index.js +1 -1
- package/lib/theme/Footer/Logo/index.js +7 -2
- package/lib/theme/{IconArrow → Icon/Arrow}/index.d.ts +1 -1
- package/lib/theme/{IconArrow → Icon/Arrow}/index.js +0 -0
- package/lib/theme/{IconClose → Icon/Close}/index.d.ts +1 -1
- package/lib/theme/{IconClose → Icon/Close}/index.js +0 -0
- package/lib/theme/{IconDarkMode → Icon/DarkMode}/index.d.ts +1 -1
- package/lib/theme/{IconDarkMode → Icon/DarkMode}/index.js +0 -0
- package/lib/theme/{IconEdit → Icon/Edit}/index.d.ts +1 -1
- package/lib/theme/{IconEdit → Icon/Edit}/index.js +0 -0
- package/lib/theme/{IconEdit → Icon/Edit}/styles.module.css +0 -0
- package/lib/theme/{IconExternalLink → Icon/ExternalLink}/index.d.ts +1 -1
- package/lib/theme/{IconExternalLink → Icon/ExternalLink}/index.js +0 -0
- package/lib/theme/{IconExternalLink → Icon/ExternalLink}/styles.module.css +0 -0
- package/lib/theme/{IconHome → Icon/Home}/index.d.ts +1 -1
- package/lib/theme/{IconHome → Icon/Home}/index.js +0 -0
- package/lib/theme/{IconLanguage → Icon/Language}/index.d.ts +1 -1
- package/lib/theme/{IconLanguage → Icon/Language}/index.js +0 -0
- package/lib/theme/{IconLightMode → Icon/LightMode}/index.d.ts +1 -1
- package/lib/theme/{IconLightMode → Icon/LightMode}/index.js +0 -0
- package/lib/theme/{IconMenu → Icon/Menu}/index.d.ts +1 -1
- package/lib/theme/{IconMenu → Icon/Menu}/index.js +0 -0
- package/lib/theme/Layout/Provider/index.d.ts +9 -0
- package/lib/theme/Layout/Provider/index.js +29 -0
- package/lib/theme/Layout/index.d.ts +0 -1
- package/lib/theme/Layout/index.js +12 -10
- package/{src/theme/Layout/styles.css → lib/theme/Layout/styles.module.css} +10 -12
- package/lib/theme/Logo/index.js +35 -17
- package/lib/theme/MDXComponents/Code.js +1 -1
- package/lib/theme/MDXComponents/index.js +2 -0
- package/lib/theme/MDXPage/index.js +6 -4
- package/lib/theme/Navbar/Content/index.js +2 -2
- package/lib/theme/Navbar/Layout/index.js +2 -2
- package/lib/theme/Navbar/MobileSidebar/Header/index.js +2 -2
- package/lib/theme/Navbar/MobileSidebar/Layout/index.js +1 -1
- package/lib/theme/Navbar/MobileSidebar/PrimaryMenu/index.js +2 -1
- package/lib/theme/Navbar/MobileSidebar/SecondaryMenu/index.js +2 -1
- package/lib/theme/Navbar/MobileSidebar/Toggle/index.js +2 -2
- package/lib/theme/Navbar/MobileSidebar/index.js +1 -1
- package/lib/theme/NavbarItem/DocNavbarItem.js +1 -1
- package/lib/theme/NavbarItem/DocSidebarNavbarItem.js +1 -1
- package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +2 -4
- package/lib/theme/NavbarItem/DocsVersionNavbarItem.js +1 -1
- package/lib/theme/NavbarItem/DropdownNavbarItem.js +2 -3
- package/lib/theme/NavbarItem/LocaleDropdownNavbarItem/index.js +2 -2
- package/lib/theme/NavbarItem/NavbarNavLink.js +1 -1
- package/lib/theme/SiteMetadata/index.js +2 -3
- package/lib/theme/SkipToContent/index.js +1 -1
- package/lib/theme/TOCItems/index.js +2 -2
- package/lib/theme/Tabs/index.js +2 -2
- package/lib/validateThemeConfig.js +13 -18
- package/package.json +19 -15
- package/src/getSwizzleConfig.ts +5 -5
- package/src/index.ts +4 -2
- package/src/theme/Admonition/index.tsx +161 -58
- package/src/{admonitions.css → theme/Admonition/styles.module.css} +14 -15
- package/src/theme/AnnouncementBar/index.tsx +3 -2
- package/src/theme/BackToTopButton/index.tsx +2 -1
- package/src/theme/BlogListPage/index.tsx +2 -11
- package/src/theme/BlogPostItem/Container/index.tsx +32 -0
- package/src/theme/BlogPostItem/Content/index.tsx +29 -0
- package/src/theme/BlogPostItem/Footer/ReadMoreLink/index.tsx +44 -0
- package/src/theme/BlogPostItem/Footer/index.tsx +60 -0
- package/src/theme/BlogPostItem/Footer/styles.module.css +10 -0
- package/src/theme/{BlogPostAuthor → BlogPostItem/Header/Author}/index.tsx +8 -3
- package/{lib/theme/BlogPostAuthors/index.js → src/theme/BlogPostItem/Header/Authors/index.tsx} +14 -3
- package/src/theme/{BlogPostAuthors → BlogPostItem/Header/Authors}/styles.module.css +0 -0
- package/src/theme/BlogPostItem/Header/Info/index.tsx +71 -0
- package/src/theme/BlogPostItem/Header/Info/styles.module.css +10 -0
- package/src/theme/BlogPostItem/Header/Title/index.tsx +33 -0
- package/{lib/theme/BlogPostItem → src/theme/BlogPostItem/Header/Title}/styles.module.css +2 -10
- package/src/theme/BlogPostItem/Header/index.tsx +21 -0
- package/src/theme/BlogPostItem/index.tsx +19 -145
- package/src/theme/BlogPostItems/index.tsx +30 -0
- package/src/theme/BlogPostPage/Metadata/index.tsx +44 -0
- package/src/theme/BlogPostPage/index.tsx +29 -62
- package/src/theme/BlogTagsListPage/index.tsx +1 -1
- package/src/theme/BlogTagsPostsPage/index.tsx +42 -35
- package/src/theme/CodeBlock/Container/index.tsx +3 -6
- package/src/theme/CodeBlock/Content/String.tsx +2 -3
- package/src/theme/CodeBlock/CopyButton/index.tsx +1 -0
- package/src/theme/CodeBlock/Line/styles.module.css +7 -7
- package/src/theme/ColorModeToggle/index.tsx +2 -2
- package/src/theme/DocBreadcrumbs/index.tsx +3 -3
- package/src/theme/DocCard/index.tsx +4 -1
- package/src/theme/DocCardList/index.tsx +2 -2
- package/src/theme/DocItem/Content/index.tsx +48 -0
- package/src/theme/{DocItemFooter → DocItem/Footer}/index.tsx +4 -5
- package/src/theme/{DocItemFooter → DocItem/Footer}/styles.module.css +0 -0
- package/src/theme/DocItem/Layout/index.tsx +68 -0
- package/src/theme/DocItem/Layout/styles.module.css +17 -0
- package/src/theme/DocItem/Metadata/index.tsx +22 -0
- package/src/theme/DocItem/Paginator/index.tsx +19 -0
- package/src/theme/DocItem/TOC/Desktop/index.tsx +24 -0
- package/src/theme/DocItem/TOC/Mobile/index.tsx +27 -0
- package/src/theme/DocItem/{styles.module.css → TOC/Mobile/styles.module.css} +0 -9
- package/src/theme/DocItem/index.tsx +13 -115
- package/src/theme/DocPage/Layout/Main/index.tsx +1 -1
- package/src/theme/DocPage/Layout/Sidebar/ExpandButton/index.tsx +1 -1
- package/src/theme/DocPage/Layout/Sidebar/index.tsx +2 -1
- package/src/theme/DocPage/Layout/index.tsx +1 -1
- package/src/theme/DocPage/index.tsx +2 -3
- package/src/theme/DocPaginator/index.tsx +0 -1
- package/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx +1 -1
- package/src/theme/DocSidebar/Desktop/Content/index.tsx +2 -2
- package/src/theme/DocSidebar/Mobile/index.tsx +1 -1
- package/src/theme/DocSidebarItem/Category/index.tsx +6 -4
- package/src/theme/DocSidebarItem/Link/index.tsx +3 -2
- package/src/theme/DocSidebarItems/index.tsx +1 -1
- package/src/theme/DocVersionBadge/index.tsx +2 -1
- package/src/theme/DocVersionBanner/index.tsx +2 -3
- package/src/theme/EditThisPage/index.tsx +1 -1
- package/src/theme/Footer/LinkItem/index.tsx +1 -1
- package/src/theme/Footer/Logo/index.tsx +7 -2
- package/src/theme/{IconArrow → Icon/Arrow}/index.tsx +1 -1
- package/src/theme/{IconClose → Icon/Close}/index.tsx +1 -1
- package/src/theme/{IconDarkMode → Icon/DarkMode}/index.tsx +1 -1
- package/src/theme/{IconEdit → Icon/Edit}/index.tsx +1 -1
- package/src/theme/{IconEdit → Icon/Edit}/styles.module.css +0 -0
- package/src/theme/{IconExternalLink → Icon/ExternalLink}/index.tsx +1 -1
- package/src/theme/{IconExternalLink → Icon/ExternalLink}/styles.module.css +0 -0
- package/src/theme/{IconHome → Icon/Home}/index.tsx +1 -1
- package/src/theme/{IconLanguage → Icon/Language}/index.tsx +1 -1
- package/src/theme/{IconLightMode → Icon/LightMode}/index.tsx +1 -1
- package/src/theme/{IconMenu → Icon/Menu}/index.tsx +1 -1
- package/src/theme/Layout/Provider/index.tsx +33 -0
- package/src/theme/Layout/index.tsx +12 -10
- package/{lib/theme/Layout/styles.css → src/theme/Layout/styles.module.css} +10 -12
- package/src/theme/Logo/index.tsx +49 -19
- package/src/theme/MDXComponents/Code.tsx +5 -2
- package/src/theme/MDXComponents/Details.tsx +2 -1
- package/src/theme/MDXComponents/Head.tsx +3 -5
- package/src/theme/MDXComponents/Pre.tsx +2 -1
- package/src/theme/MDXComponents/index.tsx +2 -0
- package/src/theme/MDXPage/index.tsx +6 -4
- package/src/theme/Navbar/Content/index.tsx +2 -2
- package/src/theme/Navbar/Layout/index.tsx +2 -2
- package/src/theme/Navbar/MobileSidebar/Header/index.tsx +2 -2
- package/src/theme/Navbar/MobileSidebar/Layout/index.tsx +1 -1
- package/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx +2 -1
- package/src/theme/Navbar/MobileSidebar/SecondaryMenu/index.tsx +2 -1
- package/src/theme/Navbar/MobileSidebar/Toggle/index.tsx +2 -2
- package/src/theme/Navbar/MobileSidebar/index.tsx +1 -1
- package/src/theme/NavbarItem/DocNavbarItem.tsx +1 -1
- package/src/theme/NavbarItem/DocSidebarNavbarItem.tsx +1 -1
- package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +2 -4
- package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +1 -1
- package/src/theme/NavbarItem/DropdownNavbarItem.tsx +2 -3
- package/src/theme/NavbarItem/LocaleDropdownNavbarItem/index.tsx +2 -2
- package/src/theme/NavbarItem/NavbarNavLink.tsx +1 -1
- package/src/theme/NavbarItem/index.tsx +1 -1
- package/src/theme/SiteMetadata/index.tsx +2 -3
- package/src/theme/SkipToContent/index.tsx +1 -1
- package/src/theme/TOCItems/index.tsx +3 -3
- package/src/theme/Tabs/index.tsx +2 -2
- package/src/theme-classic.d.ts +128 -36
- package/src/validateThemeConfig.ts +14 -18
- package/lib/theme/LayoutProviders/index.d.ts +0 -9
- package/lib/theme/LayoutProviders/index.js +0 -33
- package/src/theme/LayoutProviders/index.tsx +0 -36
package/{src/theme/BlogPostAuthors/index.tsx → lib/theme/BlogPostItem/Header/Authors/index.js}
RENAMED
|
@@ -4,19 +4,17 @@
|
|
|
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
|
-
|
|
8
7
|
import React from 'react';
|
|
9
8
|
import clsx from 'clsx';
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
|
|
9
|
+
import {useBlogPost} from '@docusaurus/theme-common/internal';
|
|
10
|
+
import BlogPostItemHeaderAuthor from '@theme/BlogPostItem/Header/Author';
|
|
13
11
|
import styles from './styles.module.css';
|
|
14
|
-
|
|
15
12
|
// Component responsible for the authors layout
|
|
16
|
-
export default function
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
export default function BlogPostItemHeaderAuthors({className}) {
|
|
14
|
+
const {
|
|
15
|
+
metadata: {authors},
|
|
16
|
+
assets,
|
|
17
|
+
} = useBlogPost();
|
|
20
18
|
const authorsCount = authors.length;
|
|
21
19
|
if (authorsCount === 0) {
|
|
22
20
|
return null;
|
|
@@ -27,6 +25,7 @@ export default function BlogPostAuthors({
|
|
|
27
25
|
className={clsx(
|
|
28
26
|
'margin-top--md margin-bottom--sm',
|
|
29
27
|
imageOnly ? styles.imageOnlyAuthorRow : 'row',
|
|
28
|
+
className,
|
|
30
29
|
)}>
|
|
31
30
|
{authors.map((author, idx) => (
|
|
32
31
|
<div
|
|
@@ -35,7 +34,7 @@ export default function BlogPostAuthors({
|
|
|
35
34
|
imageOnly ? styles.imageOnlyAuthorCol : styles.authorCol,
|
|
36
35
|
)}
|
|
37
36
|
key={idx}>
|
|
38
|
-
<
|
|
37
|
+
<BlogPostItemHeaderAuthor
|
|
39
38
|
author={{
|
|
40
39
|
...author,
|
|
41
40
|
// Handle author images using relative paths
|
|
File without changes
|
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
/// <reference types="react" />
|
|
8
|
-
import type { Props } from '@theme/
|
|
9
|
-
export default function
|
|
8
|
+
import type { Props } from '@theme/BlogPostItem/Header/Info';
|
|
9
|
+
export default function BlogPostItemHeaderInfo({ className, }: Props): JSX.Element;
|
|
@@ -0,0 +1,60 @@
|
|
|
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 {translate} from '@docusaurus/Translate';
|
|
10
|
+
import {usePluralForm} from '@docusaurus/theme-common';
|
|
11
|
+
import {useBlogPost} from '@docusaurus/theme-common/internal';
|
|
12
|
+
import styles from './styles.module.css';
|
|
13
|
+
// Very simple pluralization: probably good enough for now
|
|
14
|
+
function useReadingTimePlural() {
|
|
15
|
+
const {selectMessage} = usePluralForm();
|
|
16
|
+
return (readingTimeFloat) => {
|
|
17
|
+
const readingTime = Math.ceil(readingTimeFloat);
|
|
18
|
+
return selectMessage(
|
|
19
|
+
readingTime,
|
|
20
|
+
translate(
|
|
21
|
+
{
|
|
22
|
+
id: 'theme.blog.post.readingTime.plurals',
|
|
23
|
+
description:
|
|
24
|
+
'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',
|
|
25
|
+
message: 'One min read|{readingTime} min read',
|
|
26
|
+
},
|
|
27
|
+
{readingTime},
|
|
28
|
+
),
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function ReadingTime({readingTime}) {
|
|
33
|
+
const readingTimePlural = useReadingTimePlural();
|
|
34
|
+
return <>{readingTimePlural(readingTime)}</>;
|
|
35
|
+
}
|
|
36
|
+
function Date({date, formattedDate}) {
|
|
37
|
+
return (
|
|
38
|
+
<time dateTime={date} itemProp="datePublished">
|
|
39
|
+
{formattedDate}
|
|
40
|
+
</time>
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
function Spacer() {
|
|
44
|
+
return <>{' · '}</>;
|
|
45
|
+
}
|
|
46
|
+
export default function BlogPostItemHeaderInfo({className}) {
|
|
47
|
+
const {metadata} = useBlogPost();
|
|
48
|
+
const {date, formattedDate, readingTime} = metadata;
|
|
49
|
+
return (
|
|
50
|
+
<div className={clsx(styles.container, 'margin-vert--md', className)}>
|
|
51
|
+
<Date date={date} formattedDate={formattedDate} />
|
|
52
|
+
{typeof readingTime !== 'undefined' && (
|
|
53
|
+
<>
|
|
54
|
+
<Spacer />
|
|
55
|
+
<ReadingTime readingTime={readingTime} />
|
|
56
|
+
</>
|
|
57
|
+
)}
|
|
58
|
+
</div>
|
|
59
|
+
);
|
|
60
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
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
|
+
/// <reference types="react" />
|
|
8
|
+
import type { Props } from '@theme/BlogPostItem/Header/Title';
|
|
9
|
+
export default function BlogPostItemHeaderTitle({ className, }: Props): JSX.Element;
|
|
@@ -0,0 +1,27 @@
|
|
|
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 {useBlogPost} from '@docusaurus/theme-common/internal';
|
|
11
|
+
import styles from './styles.module.css';
|
|
12
|
+
export default function BlogPostItemHeaderTitle({className}) {
|
|
13
|
+
const {metadata, isBlogPostPage} = useBlogPost();
|
|
14
|
+
const {permalink, title} = metadata;
|
|
15
|
+
const TitleHeading = isBlogPostPage ? 'h1' : 'h2';
|
|
16
|
+
return (
|
|
17
|
+
<TitleHeading className={clsx(styles.title, className)} itemProp="headline">
|
|
18
|
+
{isBlogPostPage ? (
|
|
19
|
+
title
|
|
20
|
+
) : (
|
|
21
|
+
<Link itemProp="url" to={permalink}>
|
|
22
|
+
{title}
|
|
23
|
+
</Link>
|
|
24
|
+
)}
|
|
25
|
+
</TitleHeading>
|
|
26
|
+
);
|
|
27
|
+
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
.
|
|
8
|
+
.title {
|
|
9
9
|
font-size: 3rem;
|
|
10
10
|
}
|
|
11
11
|
|
|
@@ -13,15 +13,7 @@
|
|
|
13
13
|
Blog post title should be smaller on smaller devices
|
|
14
14
|
**/
|
|
15
15
|
@media (max-width: 576px) {
|
|
16
|
-
.
|
|
16
|
+
.title {
|
|
17
17
|
font-size: 2rem;
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
|
|
21
|
-
.blogPostData {
|
|
22
|
-
font-size: 0.9rem;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
.blogPostDetailsFull {
|
|
26
|
-
flex-direction: column;
|
|
27
|
-
}
|
|
@@ -0,0 +1,8 @@
|
|
|
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
|
+
/// <reference types="react" />
|
|
8
|
+
export default function BlogPostItemHeader(): JSX.Element;
|
|
@@ -0,0 +1,19 @@
|
|
|
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 BlogPostItemHeaderTitle from '@theme/BlogPostItem/Header/Title';
|
|
9
|
+
import BlogPostItemHeaderInfo from '@theme/BlogPostItem/Header/Info';
|
|
10
|
+
import BlogPostItemHeaderAuthors from '@theme/BlogPostItem/Header/Authors';
|
|
11
|
+
export default function BlogPostItemHeader() {
|
|
12
|
+
return (
|
|
13
|
+
<header>
|
|
14
|
+
<BlogPostItemHeaderTitle />
|
|
15
|
+
<BlogPostItemHeaderInfo />
|
|
16
|
+
<BlogPostItemHeaderAuthors />
|
|
17
|
+
</header>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
@@ -6,149 +6,23 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import clsx from 'clsx';
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
import styles from './styles.module.css';
|
|
19
|
-
// Very simple pluralization: probably good enough for now
|
|
20
|
-
function useReadingTimePlural() {
|
|
21
|
-
const {selectMessage} = usePluralForm();
|
|
22
|
-
return (readingTimeFloat) => {
|
|
23
|
-
const readingTime = Math.ceil(readingTimeFloat);
|
|
24
|
-
return selectMessage(
|
|
25
|
-
readingTime,
|
|
26
|
-
translate(
|
|
27
|
-
{
|
|
28
|
-
id: 'theme.blog.post.readingTime.plurals',
|
|
29
|
-
description:
|
|
30
|
-
'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',
|
|
31
|
-
message: 'One min read|{readingTime} min read',
|
|
32
|
-
},
|
|
33
|
-
{readingTime},
|
|
34
|
-
),
|
|
35
|
-
);
|
|
36
|
-
};
|
|
9
|
+
import {useBlogPost} from '@docusaurus/theme-common/internal';
|
|
10
|
+
import BlogPostItemContainer from '@theme/BlogPostItem/Container';
|
|
11
|
+
import BlogPostItemHeader from '@theme/BlogPostItem/Header';
|
|
12
|
+
import BlogPostItemContent from '@theme/BlogPostItem/Content';
|
|
13
|
+
import BlogPostItemFooter from '@theme/BlogPostItem/Footer';
|
|
14
|
+
// apply a bottom margin in list view
|
|
15
|
+
function useContainerClassName() {
|
|
16
|
+
const {isBlogPostPage} = useBlogPost();
|
|
17
|
+
return !isBlogPostPage ? 'margin-bottom--xl' : undefined;
|
|
37
18
|
}
|
|
38
|
-
export default function BlogPostItem(
|
|
39
|
-
const
|
|
40
|
-
const {withBaseUrl} = useBaseUrlUtils();
|
|
41
|
-
const {
|
|
42
|
-
children,
|
|
43
|
-
frontMatter,
|
|
44
|
-
assets,
|
|
45
|
-
metadata,
|
|
46
|
-
truncated,
|
|
47
|
-
isBlogPostPage = false,
|
|
48
|
-
} = props;
|
|
49
|
-
const {
|
|
50
|
-
date,
|
|
51
|
-
formattedDate,
|
|
52
|
-
permalink,
|
|
53
|
-
tags,
|
|
54
|
-
readingTime,
|
|
55
|
-
title,
|
|
56
|
-
editUrl,
|
|
57
|
-
authors,
|
|
58
|
-
} = metadata;
|
|
59
|
-
const image = assets.image ?? frontMatter.image;
|
|
60
|
-
const truncatedPost = !isBlogPostPage && truncated;
|
|
61
|
-
const tagsExists = tags.length > 0;
|
|
62
|
-
const TitleHeading = isBlogPostPage ? 'h1' : 'h2';
|
|
19
|
+
export default function BlogPostItem({children, className}) {
|
|
20
|
+
const containerClassName = useContainerClassName();
|
|
63
21
|
return (
|
|
64
|
-
<
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
<header>
|
|
70
|
-
<TitleHeading className={styles.blogPostTitle} itemProp="headline">
|
|
71
|
-
{isBlogPostPage ? (
|
|
72
|
-
title
|
|
73
|
-
) : (
|
|
74
|
-
<Link itemProp="url" to={permalink}>
|
|
75
|
-
{title}
|
|
76
|
-
</Link>
|
|
77
|
-
)}
|
|
78
|
-
</TitleHeading>
|
|
79
|
-
<div className={clsx(styles.blogPostData, 'margin-vert--md')}>
|
|
80
|
-
<time dateTime={date} itemProp="datePublished">
|
|
81
|
-
{formattedDate}
|
|
82
|
-
</time>
|
|
83
|
-
|
|
84
|
-
{typeof readingTime !== 'undefined' && (
|
|
85
|
-
<>
|
|
86
|
-
{' · '}
|
|
87
|
-
{readingTimePlural(readingTime)}
|
|
88
|
-
</>
|
|
89
|
-
)}
|
|
90
|
-
</div>
|
|
91
|
-
<BlogPostAuthors authors={authors} assets={assets} />
|
|
92
|
-
</header>
|
|
93
|
-
|
|
94
|
-
{image && (
|
|
95
|
-
<meta itemProp="image" content={withBaseUrl(image, {absolute: true})} />
|
|
96
|
-
)}
|
|
97
|
-
|
|
98
|
-
<div
|
|
99
|
-
// This ID is used for the feed generation to locate the main content
|
|
100
|
-
id={isBlogPostPage ? blogPostContainerID : undefined}
|
|
101
|
-
className="markdown"
|
|
102
|
-
itemProp="articleBody">
|
|
103
|
-
<MDXContent>{children}</MDXContent>
|
|
104
|
-
</div>
|
|
105
|
-
|
|
106
|
-
{(tagsExists || truncated) && (
|
|
107
|
-
<footer
|
|
108
|
-
className={clsx(
|
|
109
|
-
'row docusaurus-mt-lg',
|
|
110
|
-
isBlogPostPage && styles.blogPostDetailsFull,
|
|
111
|
-
)}>
|
|
112
|
-
{tagsExists && (
|
|
113
|
-
<div className={clsx('col', {'col--9': truncatedPost})}>
|
|
114
|
-
<TagsListInline tags={tags} />
|
|
115
|
-
</div>
|
|
116
|
-
)}
|
|
117
|
-
|
|
118
|
-
{isBlogPostPage && editUrl && (
|
|
119
|
-
<div className="col margin-top--sm">
|
|
120
|
-
<EditThisPage editUrl={editUrl} />
|
|
121
|
-
</div>
|
|
122
|
-
)}
|
|
123
|
-
|
|
124
|
-
{truncatedPost && (
|
|
125
|
-
<div
|
|
126
|
-
className={clsx('col text--right', {
|
|
127
|
-
'col--3': tagsExists,
|
|
128
|
-
})}>
|
|
129
|
-
<Link
|
|
130
|
-
to={metadata.permalink}
|
|
131
|
-
aria-label={translate(
|
|
132
|
-
{
|
|
133
|
-
message: 'Read more about {title}',
|
|
134
|
-
id: 'theme.blog.post.readMoreLabel',
|
|
135
|
-
description:
|
|
136
|
-
'The ARIA label for the link to full blog posts from excerpts',
|
|
137
|
-
},
|
|
138
|
-
{title},
|
|
139
|
-
)}>
|
|
140
|
-
<b>
|
|
141
|
-
<Translate
|
|
142
|
-
id="theme.blog.post.readMore"
|
|
143
|
-
description="The label used in blog post item excerpts to link to full blog posts">
|
|
144
|
-
Read More
|
|
145
|
-
</Translate>
|
|
146
|
-
</b>
|
|
147
|
-
</Link>
|
|
148
|
-
</div>
|
|
149
|
-
)}
|
|
150
|
-
</footer>
|
|
151
|
-
)}
|
|
152
|
-
</article>
|
|
22
|
+
<BlogPostItemContainer className={clsx(containerClassName, className)}>
|
|
23
|
+
<BlogPostItemHeader />
|
|
24
|
+
<BlogPostItemContent>{children}</BlogPostItemContent>
|
|
25
|
+
<BlogPostItemFooter />
|
|
26
|
+
</BlogPostItemContainer>
|
|
153
27
|
);
|
|
154
28
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
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
|
+
/// <reference types="react" />
|
|
8
|
+
import type { Props } from '@theme/BlogPostItems';
|
|
9
|
+
export default function BlogPostItems({ items, component: BlogPostItemComponent, }: Props): JSX.Element;
|
|
@@ -0,0 +1,27 @@
|
|
|
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 {BlogPostProvider} from '@docusaurus/theme-common/internal';
|
|
9
|
+
import BlogPostItem from '@theme/BlogPostItem';
|
|
10
|
+
export default function BlogPostItems({
|
|
11
|
+
items,
|
|
12
|
+
component: BlogPostItemComponent = BlogPostItem,
|
|
13
|
+
}) {
|
|
14
|
+
return (
|
|
15
|
+
<>
|
|
16
|
+
{items.map(({content: BlogPostContent}) => (
|
|
17
|
+
<BlogPostProvider
|
|
18
|
+
key={BlogPostContent.metadata.permalink}
|
|
19
|
+
content={BlogPostContent}>
|
|
20
|
+
<BlogPostItemComponent>
|
|
21
|
+
<BlogPostContent />
|
|
22
|
+
</BlogPostItemComponent>
|
|
23
|
+
</BlogPostProvider>
|
|
24
|
+
))}
|
|
25
|
+
</>
|
|
26
|
+
);
|
|
27
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
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
|
+
/// <reference types="react" />
|
|
8
|
+
export default function BlogPostPageMetadata(): JSX.Element;
|
|
@@ -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 {PageMetadata} from '@docusaurus/theme-common';
|
|
9
|
+
import {useBlogPost} from '@docusaurus/theme-common/internal';
|
|
10
|
+
export default function BlogPostPageMetadata() {
|
|
11
|
+
const {assets, metadata} = useBlogPost();
|
|
12
|
+
const {title, description, date, tags, authors, frontMatter} = metadata;
|
|
13
|
+
const {keywords} = frontMatter;
|
|
14
|
+
const image = assets.image ?? frontMatter.image;
|
|
15
|
+
return (
|
|
16
|
+
<PageMetadata
|
|
17
|
+
title={title}
|
|
18
|
+
description={description}
|
|
19
|
+
keywords={keywords}
|
|
20
|
+
image={image}>
|
|
21
|
+
<meta property="og:type" content="article" />
|
|
22
|
+
<meta property="article:published_time" content={date} />
|
|
23
|
+
{/* TODO double check those article meta array syntaxes, see https://ogp.me/#array */}
|
|
24
|
+
{authors.some((author) => author.url) && (
|
|
25
|
+
<meta
|
|
26
|
+
property="article:author"
|
|
27
|
+
content={authors
|
|
28
|
+
.map((author) => author.url)
|
|
29
|
+
.filter(Boolean)
|
|
30
|
+
.join(',')}
|
|
31
|
+
/>
|
|
32
|
+
)}
|
|
33
|
+
{tags.length > 0 && (
|
|
34
|
+
<meta
|
|
35
|
+
property="article:tag"
|
|
36
|
+
content={tags.map((tag) => tag.label).join(',')}
|
|
37
|
+
/>
|
|
38
|
+
)}
|
|
39
|
+
</PageMetadata>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
@@ -6,51 +6,15 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import clsx from 'clsx';
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
HtmlClassNameProvider,
|
|
12
|
-
ThemeClassNames,
|
|
13
|
-
} from '@docusaurus/theme-common';
|
|
9
|
+
import {HtmlClassNameProvider, ThemeClassNames} from '@docusaurus/theme-common';
|
|
10
|
+
import {BlogPostProvider, useBlogPost} from '@docusaurus/theme-common/internal';
|
|
14
11
|
import BlogLayout from '@theme/BlogLayout';
|
|
15
12
|
import BlogPostItem from '@theme/BlogPostItem';
|
|
16
13
|
import BlogPostPaginator from '@theme/BlogPostPaginator';
|
|
14
|
+
import BlogPostPageMetadata from '@theme/BlogPostPage/Metadata';
|
|
17
15
|
import TOC from '@theme/TOC';
|
|
18
|
-
function
|
|
19
|
-
const {
|
|
20
|
-
const {assets, metadata} = BlogPostContents;
|
|
21
|
-
const {title, description, date, tags, authors, frontMatter} = metadata;
|
|
22
|
-
const {keywords} = frontMatter;
|
|
23
|
-
const image = assets.image ?? frontMatter.image;
|
|
24
|
-
return (
|
|
25
|
-
<PageMetadata
|
|
26
|
-
title={title}
|
|
27
|
-
description={description}
|
|
28
|
-
keywords={keywords}
|
|
29
|
-
image={image}>
|
|
30
|
-
<meta property="og:type" content="article" />
|
|
31
|
-
<meta property="article:published_time" content={date} />
|
|
32
|
-
{/* TODO double check those article meta array syntaxes, see https://ogp.me/#array */}
|
|
33
|
-
{authors.some((author) => author.url) && (
|
|
34
|
-
<meta
|
|
35
|
-
property="article:author"
|
|
36
|
-
content={authors
|
|
37
|
-
.map((author) => author.url)
|
|
38
|
-
.filter(Boolean)
|
|
39
|
-
.join(',')}
|
|
40
|
-
/>
|
|
41
|
-
)}
|
|
42
|
-
{tags.length > 0 && (
|
|
43
|
-
<meta
|
|
44
|
-
property="article:tag"
|
|
45
|
-
content={tags.map((tag) => tag.label).join(',')}
|
|
46
|
-
/>
|
|
47
|
-
)}
|
|
48
|
-
</PageMetadata>
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
function BlogPostPageContent(props) {
|
|
52
|
-
const {content: BlogPostContents, sidebar} = props;
|
|
53
|
-
const {assets, metadata} = BlogPostContents;
|
|
16
|
+
function BlogPostPageContent({sidebar, children}) {
|
|
17
|
+
const {metadata, toc} = useBlogPost();
|
|
54
18
|
const {nextItem, prevItem, frontMatter} = metadata;
|
|
55
19
|
const {
|
|
56
20
|
hide_table_of_contents: hideTableOfContents,
|
|
@@ -61,23 +25,15 @@ function BlogPostPageContent(props) {
|
|
|
61
25
|
<BlogLayout
|
|
62
26
|
sidebar={sidebar}
|
|
63
27
|
toc={
|
|
64
|
-
!hideTableOfContents &&
|
|
65
|
-
BlogPostContents.toc &&
|
|
66
|
-
BlogPostContents.toc.length > 0 ? (
|
|
28
|
+
!hideTableOfContents && toc.length > 0 ? (
|
|
67
29
|
<TOC
|
|
68
|
-
toc={
|
|
30
|
+
toc={toc}
|
|
69
31
|
minHeadingLevel={tocMinHeadingLevel}
|
|
70
32
|
maxHeadingLevel={tocMaxHeadingLevel}
|
|
71
33
|
/>
|
|
72
34
|
) : undefined
|
|
73
35
|
}>
|
|
74
|
-
<BlogPostItem
|
|
75
|
-
frontMatter={frontMatter}
|
|
76
|
-
assets={assets}
|
|
77
|
-
metadata={metadata}
|
|
78
|
-
isBlogPostPage>
|
|
79
|
-
<BlogPostContents />
|
|
80
|
-
</BlogPostItem>
|
|
36
|
+
<BlogPostItem>{children}</BlogPostItem>
|
|
81
37
|
|
|
82
38
|
{(nextItem || prevItem) && (
|
|
83
39
|
<BlogPostPaginator nextItem={nextItem} prevItem={prevItem} />
|
|
@@ -86,14 +42,19 @@ function BlogPostPageContent(props) {
|
|
|
86
42
|
);
|
|
87
43
|
}
|
|
88
44
|
export default function BlogPostPage(props) {
|
|
45
|
+
const BlogPostContent = props.content;
|
|
89
46
|
return (
|
|
90
|
-
<
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
47
|
+
<BlogPostProvider content={props.content} isBlogPostPage>
|
|
48
|
+
<HtmlClassNameProvider
|
|
49
|
+
className={clsx(
|
|
50
|
+
ThemeClassNames.wrapper.blogPages,
|
|
51
|
+
ThemeClassNames.page.blogPostPage,
|
|
52
|
+
)}>
|
|
53
|
+
<BlogPostPageMetadata />
|
|
54
|
+
<BlogPostPageContent sidebar={props.sidebar}>
|
|
55
|
+
<BlogPostContent />
|
|
56
|
+
</BlogPostPageContent>
|
|
57
|
+
</HtmlClassNameProvider>
|
|
58
|
+
</BlogPostProvider>
|
|
98
59
|
);
|
|
99
60
|
}
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from '@docusaurus/theme-common';
|
|
15
15
|
import BlogLayout from '@theme/BlogLayout';
|
|
16
16
|
import TagsListByLetter from '@theme/TagsListByLetter';
|
|
17
|
-
import SearchMetadata from '
|
|
17
|
+
import SearchMetadata from '@theme/SearchMetadata';
|
|
18
18
|
export default function BlogTagsListPage({tags, sidebar}) {
|
|
19
19
|
const title = translateTagsPageTitle();
|
|
20
20
|
return (
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
/// <reference types="@docusaurus/plugin-content-blog" />
|
|
8
8
|
/// <reference types="react" />
|
|
9
9
|
import type { Props } from '@theme/BlogTagsPostsPage';
|
|
10
|
-
export default function BlogTagsPostsPage(
|
|
10
|
+
export default function BlogTagsPostsPage(props: Props): JSX.Element;
|