@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,34 +5,11 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import React
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
usePrevious,
|
|
13
|
-
Collapsible,
|
|
14
|
-
useCollapsible,
|
|
15
|
-
findFirstCategoryLink,
|
|
16
|
-
ThemeClassNames,
|
|
17
|
-
useThemeConfig,
|
|
18
|
-
useDocSidebarItemsExpandedState,
|
|
19
|
-
isSamePath,
|
|
20
|
-
} from '@docusaurus/theme-common';
|
|
21
|
-
import Link from '@docusaurus/Link';
|
|
22
|
-
import isInternalUrl from '@docusaurus/isInternalUrl';
|
|
23
|
-
import {translate} from '@docusaurus/Translate';
|
|
24
|
-
import IconExternalLink from '@theme/IconExternalLink';
|
|
25
|
-
|
|
26
|
-
import DocSidebarItems from '@theme/DocSidebarItems';
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import DocSidebarItemCategory from '@theme/DocSidebarItem/Category';
|
|
10
|
+
import DocSidebarItemLink from '@theme/DocSidebarItem/Link';
|
|
11
|
+
import DocSidebarItemHtml from '@theme/DocSidebarItem/Html';
|
|
27
12
|
import type {Props} from '@theme/DocSidebarItem';
|
|
28
|
-
import type {
|
|
29
|
-
PropSidebarItemCategory,
|
|
30
|
-
PropSidebarItemLink,
|
|
31
|
-
} from '@docusaurus/plugin-content-docs';
|
|
32
|
-
|
|
33
|
-
import styles from './styles.module.css';
|
|
34
|
-
import useIsBrowser from '@docusaurus/useIsBrowser';
|
|
35
|
-
import type {SidebarItemHtml} from '@docusaurus/plugin-content-docs/src/sidebars/types';
|
|
36
13
|
|
|
37
14
|
export default function DocSidebarItem({
|
|
38
15
|
item,
|
|
@@ -48,236 +25,3 @@ export default function DocSidebarItem({
|
|
|
48
25
|
return <DocSidebarItemLink item={item} {...props} />;
|
|
49
26
|
}
|
|
50
27
|
}
|
|
51
|
-
|
|
52
|
-
// If we navigate to a category and it becomes active, it should automatically
|
|
53
|
-
// expand itself
|
|
54
|
-
function useAutoExpandActiveCategory({
|
|
55
|
-
isActive,
|
|
56
|
-
collapsed,
|
|
57
|
-
setCollapsed,
|
|
58
|
-
}: {
|
|
59
|
-
isActive: boolean;
|
|
60
|
-
collapsed: boolean;
|
|
61
|
-
setCollapsed: (b: boolean) => void;
|
|
62
|
-
}) {
|
|
63
|
-
const wasActive = usePrevious(isActive);
|
|
64
|
-
useEffect(() => {
|
|
65
|
-
const justBecameActive = isActive && !wasActive;
|
|
66
|
-
if (justBecameActive && collapsed) {
|
|
67
|
-
setCollapsed(false);
|
|
68
|
-
}
|
|
69
|
-
}, [isActive, wasActive, collapsed, setCollapsed]);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* When a collapsible category has no link, we still link it to its first child
|
|
74
|
-
* during SSR as a temporary fallback. This allows to be able to navigate inside
|
|
75
|
-
* the category even when JS fails to load, is delayed or simply disabled
|
|
76
|
-
* React hydration becomes an optional progressive enhancement
|
|
77
|
-
* see https://github.com/facebookincubator/infima/issues/36#issuecomment-772543188
|
|
78
|
-
* see https://github.com/facebook/docusaurus/issues/3030
|
|
79
|
-
*/
|
|
80
|
-
function useCategoryHrefWithSSRFallback(
|
|
81
|
-
item: PropSidebarItemCategory,
|
|
82
|
-
): string | undefined {
|
|
83
|
-
const isBrowser = useIsBrowser();
|
|
84
|
-
return useMemo(() => {
|
|
85
|
-
if (item.href) {
|
|
86
|
-
return item.href;
|
|
87
|
-
}
|
|
88
|
-
// In these cases, it's not necessary to render a fallback
|
|
89
|
-
// We skip the "findFirstCategoryLink" computation
|
|
90
|
-
if (isBrowser || !item.collapsible) {
|
|
91
|
-
return undefined;
|
|
92
|
-
}
|
|
93
|
-
return findFirstCategoryLink(item);
|
|
94
|
-
}, [item, isBrowser]);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
function DocSidebarItemCategory({
|
|
98
|
-
item,
|
|
99
|
-
onItemClick,
|
|
100
|
-
activePath,
|
|
101
|
-
level,
|
|
102
|
-
index,
|
|
103
|
-
...props
|
|
104
|
-
}: Props & {item: PropSidebarItemCategory}) {
|
|
105
|
-
const {items, label, collapsible, className, href} = item;
|
|
106
|
-
const hrefWithSSRFallback = useCategoryHrefWithSSRFallback(item);
|
|
107
|
-
|
|
108
|
-
const isActive = isActiveSidebarItem(item, activePath);
|
|
109
|
-
const isCurrentPage = isSamePath(href, activePath);
|
|
110
|
-
|
|
111
|
-
const {collapsed, setCollapsed} = useCollapsible({
|
|
112
|
-
// active categories are always initialized as expanded
|
|
113
|
-
// the default (item.collapsed) is only used for non-active categories
|
|
114
|
-
initialState: () => {
|
|
115
|
-
if (!collapsible) {
|
|
116
|
-
return false;
|
|
117
|
-
}
|
|
118
|
-
return isActive ? false : item.collapsed;
|
|
119
|
-
},
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
useAutoExpandActiveCategory({isActive, collapsed, setCollapsed});
|
|
123
|
-
const {expandedItem, setExpandedItem} = useDocSidebarItemsExpandedState();
|
|
124
|
-
function updateCollapsed(toCollapsed: boolean = !collapsed) {
|
|
125
|
-
setExpandedItem(toCollapsed ? null : index);
|
|
126
|
-
setCollapsed(toCollapsed);
|
|
127
|
-
}
|
|
128
|
-
const {autoCollapseSidebarCategories} = useThemeConfig();
|
|
129
|
-
useEffect(() => {
|
|
130
|
-
if (
|
|
131
|
-
collapsible &&
|
|
132
|
-
expandedItem &&
|
|
133
|
-
expandedItem !== index &&
|
|
134
|
-
autoCollapseSidebarCategories
|
|
135
|
-
) {
|
|
136
|
-
setCollapsed(true);
|
|
137
|
-
}
|
|
138
|
-
}, [
|
|
139
|
-
collapsible,
|
|
140
|
-
expandedItem,
|
|
141
|
-
index,
|
|
142
|
-
setCollapsed,
|
|
143
|
-
autoCollapseSidebarCategories,
|
|
144
|
-
]);
|
|
145
|
-
|
|
146
|
-
return (
|
|
147
|
-
<li
|
|
148
|
-
className={clsx(
|
|
149
|
-
ThemeClassNames.docs.docSidebarItemCategory,
|
|
150
|
-
ThemeClassNames.docs.docSidebarItemCategoryLevel(level),
|
|
151
|
-
'menu__list-item',
|
|
152
|
-
{
|
|
153
|
-
'menu__list-item--collapsed': collapsed,
|
|
154
|
-
},
|
|
155
|
-
className,
|
|
156
|
-
)}>
|
|
157
|
-
<div
|
|
158
|
-
className={clsx('menu__list-item-collapsible', {
|
|
159
|
-
'menu__list-item-collapsible--active': isCurrentPage,
|
|
160
|
-
})}>
|
|
161
|
-
<Link
|
|
162
|
-
className={clsx('menu__link', {
|
|
163
|
-
'menu__link--sublist': collapsible && !href,
|
|
164
|
-
'menu__link--active': isActive,
|
|
165
|
-
})}
|
|
166
|
-
onClick={
|
|
167
|
-
collapsible
|
|
168
|
-
? (e) => {
|
|
169
|
-
onItemClick?.(item);
|
|
170
|
-
if (href) {
|
|
171
|
-
updateCollapsed(false);
|
|
172
|
-
} else {
|
|
173
|
-
e.preventDefault();
|
|
174
|
-
updateCollapsed();
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
: () => {
|
|
178
|
-
onItemClick?.(item);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
aria-current={isCurrentPage ? 'page' : undefined}
|
|
182
|
-
href={collapsible ? hrefWithSSRFallback ?? '#' : hrefWithSSRFallback}
|
|
183
|
-
{...props}>
|
|
184
|
-
{label}
|
|
185
|
-
</Link>
|
|
186
|
-
{href && collapsible && (
|
|
187
|
-
<button
|
|
188
|
-
aria-label={translate(
|
|
189
|
-
{
|
|
190
|
-
id: 'theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel',
|
|
191
|
-
message: "Toggle the collapsible sidebar category '{label}'",
|
|
192
|
-
description:
|
|
193
|
-
'The ARIA label to toggle the collapsible sidebar category',
|
|
194
|
-
},
|
|
195
|
-
{label},
|
|
196
|
-
)}
|
|
197
|
-
type="button"
|
|
198
|
-
className="clean-btn menu__caret"
|
|
199
|
-
onClick={(e) => {
|
|
200
|
-
e.preventDefault();
|
|
201
|
-
updateCollapsed();
|
|
202
|
-
}}
|
|
203
|
-
/>
|
|
204
|
-
)}
|
|
205
|
-
</div>
|
|
206
|
-
|
|
207
|
-
<Collapsible lazy as="ul" className="menu__list" collapsed={collapsed}>
|
|
208
|
-
<DocSidebarItems
|
|
209
|
-
items={items}
|
|
210
|
-
tabIndex={collapsed ? -1 : 0}
|
|
211
|
-
onItemClick={onItemClick}
|
|
212
|
-
activePath={activePath}
|
|
213
|
-
level={level + 1}
|
|
214
|
-
/>
|
|
215
|
-
</Collapsible>
|
|
216
|
-
</li>
|
|
217
|
-
);
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
function DocSidebarItemHtml({
|
|
221
|
-
item,
|
|
222
|
-
level,
|
|
223
|
-
index,
|
|
224
|
-
}: Props & {item: SidebarItemHtml}) {
|
|
225
|
-
const {value, defaultStyle, className} = item;
|
|
226
|
-
return (
|
|
227
|
-
<li
|
|
228
|
-
className={clsx(
|
|
229
|
-
ThemeClassNames.docs.docSidebarItemLink,
|
|
230
|
-
ThemeClassNames.docs.docSidebarItemLinkLevel(level),
|
|
231
|
-
defaultStyle && `${styles.menuHtmlItem} menu__list-item`,
|
|
232
|
-
className,
|
|
233
|
-
)}
|
|
234
|
-
key={index}
|
|
235
|
-
// eslint-disable-next-line react/no-danger
|
|
236
|
-
dangerouslySetInnerHTML={{
|
|
237
|
-
__html: value,
|
|
238
|
-
}}
|
|
239
|
-
/>
|
|
240
|
-
);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
function DocSidebarItemLink({
|
|
244
|
-
item,
|
|
245
|
-
onItemClick,
|
|
246
|
-
activePath,
|
|
247
|
-
level,
|
|
248
|
-
index,
|
|
249
|
-
...props
|
|
250
|
-
}: Props & {item: PropSidebarItemLink}) {
|
|
251
|
-
const {href, label, className} = item;
|
|
252
|
-
const isActive = isActiveSidebarItem(item, activePath);
|
|
253
|
-
return (
|
|
254
|
-
<li
|
|
255
|
-
className={clsx(
|
|
256
|
-
ThemeClassNames.docs.docSidebarItemLink,
|
|
257
|
-
ThemeClassNames.docs.docSidebarItemLinkLevel(level),
|
|
258
|
-
'menu__list-item',
|
|
259
|
-
className,
|
|
260
|
-
)}
|
|
261
|
-
key={label}>
|
|
262
|
-
<Link
|
|
263
|
-
className={clsx('menu__link', {
|
|
264
|
-
'menu__link--active': isActive,
|
|
265
|
-
})}
|
|
266
|
-
aria-current={isActive ? 'page' : undefined}
|
|
267
|
-
to={href}
|
|
268
|
-
{...(isInternalUrl(href) && {
|
|
269
|
-
onClick: onItemClick ? () => onItemClick(item) : undefined,
|
|
270
|
-
})}
|
|
271
|
-
{...props}>
|
|
272
|
-
{isInternalUrl(href) ? (
|
|
273
|
-
label
|
|
274
|
-
) : (
|
|
275
|
-
<span>
|
|
276
|
-
{label}
|
|
277
|
-
<IconExternalLink />
|
|
278
|
-
</span>
|
|
279
|
-
)}
|
|
280
|
-
</Link>
|
|
281
|
-
</li>
|
|
282
|
-
);
|
|
283
|
-
}
|
|
@@ -17,12 +17,7 @@ function DocSidebarItems({items, ...props}: Props): JSX.Element {
|
|
|
17
17
|
return (
|
|
18
18
|
<DocSidebarItemsExpandedStateProvider>
|
|
19
19
|
{items.map((item, index) => (
|
|
20
|
-
<DocSidebarItem
|
|
21
|
-
key={index} // sidebar is static, the index does not change
|
|
22
|
-
item={item}
|
|
23
|
-
index={index}
|
|
24
|
-
{...props}
|
|
25
|
-
/>
|
|
20
|
+
<DocSidebarItem key={index} item={item} index={index} {...props} />
|
|
26
21
|
))}
|
|
27
22
|
</DocSidebarItemsExpandedStateProvider>
|
|
28
23
|
);
|
|
@@ -9,10 +9,16 @@ import React from 'react';
|
|
|
9
9
|
|
|
10
10
|
import Layout from '@theme/Layout';
|
|
11
11
|
import Link from '@docusaurus/Link';
|
|
12
|
-
import {
|
|
13
|
-
|
|
12
|
+
import {
|
|
13
|
+
PageMetadata,
|
|
14
|
+
HtmlClassNameProvider,
|
|
15
|
+
ThemeClassNames,
|
|
16
|
+
usePluralForm,
|
|
17
|
+
} from '@docusaurus/theme-common';
|
|
14
18
|
import Translate, {translate} from '@docusaurus/Translate';
|
|
15
19
|
import type {Props} from '@theme/DocTagDocListPage';
|
|
20
|
+
import SearchMetadata from '@theme/SearchMetadata';
|
|
21
|
+
import clsx from 'clsx';
|
|
16
22
|
|
|
17
23
|
// Very simple pluralization: probably good enough for now
|
|
18
24
|
function useNDocsTaggedPlural() {
|
|
@@ -32,7 +38,7 @@ function useNDocsTaggedPlural() {
|
|
|
32
38
|
);
|
|
33
39
|
}
|
|
34
40
|
|
|
35
|
-
function DocItem({doc}: {doc:
|
|
41
|
+
function DocItem({doc}: {doc: Props['tag']['items'][number]}): JSX.Element {
|
|
36
42
|
return (
|
|
37
43
|
<article className="margin-vert--lg">
|
|
38
44
|
<Link to={doc.permalink}>
|
|
@@ -51,39 +57,40 @@ export default function DocTagDocListPage({tag}: Props): JSX.Element {
|
|
|
51
57
|
description: 'The title of the page for a docs tag',
|
|
52
58
|
message: '{nDocsTagged} with "{tagName}"',
|
|
53
59
|
},
|
|
54
|
-
{nDocsTagged: nDocsTaggedPlural(tag.
|
|
60
|
+
{nDocsTagged: nDocsTaggedPlural(tag.count), tagName: tag.label},
|
|
55
61
|
);
|
|
56
62
|
|
|
57
63
|
return (
|
|
58
|
-
<
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
64
|
+
<HtmlClassNameProvider
|
|
65
|
+
className={clsx(
|
|
66
|
+
ThemeClassNames.wrapper.docsPages,
|
|
67
|
+
ThemeClassNames.page.docsTagDocListPage,
|
|
68
|
+
)}>
|
|
69
|
+
<PageMetadata title={title} />
|
|
70
|
+
<SearchMetadata tag="doc_tag_doc_list" />
|
|
71
|
+
<Layout>
|
|
72
|
+
<div className="container margin-vert--lg">
|
|
73
|
+
<div className="row">
|
|
74
|
+
<main className="col col--8 col--offset-2">
|
|
75
|
+
<header className="margin-bottom--xl">
|
|
76
|
+
<h1>{title}</h1>
|
|
77
|
+
<Link href={tag.allTagsPath}>
|
|
78
|
+
<Translate
|
|
79
|
+
id="theme.tags.tagsPageLink"
|
|
80
|
+
description="The label of the link targeting the tag list page">
|
|
81
|
+
View All Tags
|
|
82
|
+
</Translate>
|
|
83
|
+
</Link>
|
|
84
|
+
</header>
|
|
85
|
+
<section className="margin-vert--lg">
|
|
86
|
+
{tag.items.map((doc) => (
|
|
87
|
+
<DocItem key={doc.id} doc={doc} />
|
|
88
|
+
))}
|
|
89
|
+
</section>
|
|
90
|
+
</main>
|
|
91
|
+
</div>
|
|
85
92
|
</div>
|
|
86
|
-
</
|
|
87
|
-
</
|
|
93
|
+
</Layout>
|
|
94
|
+
</HtmlClassNameProvider>
|
|
88
95
|
);
|
|
89
96
|
}
|
|
@@ -9,31 +9,36 @@ import React from 'react';
|
|
|
9
9
|
|
|
10
10
|
import Layout from '@theme/Layout';
|
|
11
11
|
import {
|
|
12
|
+
PageMetadata,
|
|
13
|
+
HtmlClassNameProvider,
|
|
12
14
|
ThemeClassNames,
|
|
13
15
|
translateTagsPageTitle,
|
|
14
16
|
} from '@docusaurus/theme-common';
|
|
15
17
|
import TagsListByLetter from '@theme/TagsListByLetter';
|
|
16
18
|
import type {Props} from '@theme/DocTagsListPage';
|
|
19
|
+
import SearchMetadata from '@theme/SearchMetadata';
|
|
20
|
+
import clsx from 'clsx';
|
|
17
21
|
|
|
18
22
|
export default function DocTagsListPage({tags}: Props): JSX.Element {
|
|
19
23
|
const title = translateTagsPageTitle();
|
|
20
24
|
return (
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
<HtmlClassNameProvider
|
|
26
|
+
className={clsx(
|
|
27
|
+
ThemeClassNames.wrapper.docsPages,
|
|
28
|
+
ThemeClassNames.page.docsTagsListPage,
|
|
29
|
+
)}>
|
|
30
|
+
<PageMetadata title={title} />
|
|
31
|
+
<SearchMetadata tag="doc_tags_list" />
|
|
32
|
+
<Layout>
|
|
33
|
+
<div className="container margin-vert--lg">
|
|
34
|
+
<div className="row">
|
|
35
|
+
<main className="col col--8 col--offset-2">
|
|
36
|
+
<h1>{title}</h1>
|
|
37
|
+
<TagsListByLetter tags={tags} />
|
|
38
|
+
</main>
|
|
39
|
+
</div>
|
|
35
40
|
</div>
|
|
36
|
-
</
|
|
37
|
-
</
|
|
41
|
+
</Layout>
|
|
42
|
+
</HtmlClassNameProvider>
|
|
38
43
|
);
|
|
39
44
|
}
|
|
@@ -70,10 +70,9 @@ function UnmaintainedVersionLabel({
|
|
|
70
70
|
);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
const BannerLabelComponents:
|
|
74
|
-
VersionBanner
|
|
75
|
-
|
|
76
|
-
> = {
|
|
73
|
+
const BannerLabelComponents: {
|
|
74
|
+
[banner in VersionBanner]: ComponentType<BannerLabelComponentProps>;
|
|
75
|
+
} = {
|
|
77
76
|
unreleased: UnreleasedVersionLabel,
|
|
78
77
|
unmaintained: UnmaintainedVersionLabel,
|
|
79
78
|
};
|
|
@@ -137,8 +136,8 @@ function DocVersionBannerEnabled({
|
|
|
137
136
|
const {latestDocSuggestion, latestVersionSuggestion} =
|
|
138
137
|
useDocVersionSuggestions(pluginId);
|
|
139
138
|
|
|
140
|
-
//
|
|
141
|
-
//
|
|
139
|
+
// Try to link to same doc in latest version (not always possible), falling
|
|
140
|
+
// back to main doc of latest version
|
|
142
141
|
const latestVersionSuggestedDoc =
|
|
143
142
|
latestDocSuggestion ?? getVersionMainDoc(latestVersionSuggestion);
|
|
144
143
|
|
|
@@ -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
|
+
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import type {Props} from '@theme/Footer/Copyright';
|
|
10
|
+
|
|
11
|
+
export default function FooterCopyright({copyright}: Props): JSX.Element {
|
|
12
|
+
return (
|
|
13
|
+
<div
|
|
14
|
+
className="footer__copyright"
|
|
15
|
+
// Developer provided the HTML, so assume it's safe.
|
|
16
|
+
// eslint-disable-next-line react/no-danger
|
|
17
|
+
dangerouslySetInnerHTML={{__html: copyright}}
|
|
18
|
+
/>
|
|
19
|
+
);
|
|
20
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
import React from 'react';
|
|
9
|
+
import clsx from 'clsx';
|
|
10
|
+
import type {Props} from '@theme/Footer/Layout';
|
|
11
|
+
|
|
12
|
+
export default function FooterLayout({
|
|
13
|
+
style,
|
|
14
|
+
links,
|
|
15
|
+
logo,
|
|
16
|
+
copyright,
|
|
17
|
+
}: Props): JSX.Element {
|
|
18
|
+
return (
|
|
19
|
+
<footer
|
|
20
|
+
className={clsx('footer', {
|
|
21
|
+
'footer--dark': style === 'dark',
|
|
22
|
+
})}>
|
|
23
|
+
<div className="container container-fluid">
|
|
24
|
+
{links}
|
|
25
|
+
{(logo || copyright) && (
|
|
26
|
+
<div className="footer__bottom text--center">
|
|
27
|
+
{logo && <div className="margin-bottom--sm">{logo}</div>}
|
|
28
|
+
{copyright}
|
|
29
|
+
</div>
|
|
30
|
+
)}
|
|
31
|
+
</div>
|
|
32
|
+
</footer>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
@@ -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
|
+
|
|
8
|
+
import React from 'react';
|
|
9
|
+
|
|
10
|
+
import Link from '@docusaurus/Link';
|
|
11
|
+
import useBaseUrl from '@docusaurus/useBaseUrl';
|
|
12
|
+
import isInternalUrl from '@docusaurus/isInternalUrl';
|
|
13
|
+
import IconExternalLink from '@theme/IconExternalLink';
|
|
14
|
+
import type {Props} from '@theme/Footer/LinkItem';
|
|
15
|
+
|
|
16
|
+
export default function FooterLinkItem({item}: Props): JSX.Element {
|
|
17
|
+
const {to, href, label, prependBaseUrlToHref, ...props} = item;
|
|
18
|
+
const toUrl = useBaseUrl(to);
|
|
19
|
+
const normalizedHref = useBaseUrl(href, {forcePrependBaseUrl: true});
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<Link
|
|
23
|
+
className="footer__link-item"
|
|
24
|
+
{...(href
|
|
25
|
+
? {
|
|
26
|
+
href: prependBaseUrlToHref ? normalizedHref : href,
|
|
27
|
+
}
|
|
28
|
+
: {
|
|
29
|
+
to: toUrl,
|
|
30
|
+
})}
|
|
31
|
+
{...props}>
|
|
32
|
+
{label}
|
|
33
|
+
{href && !isInternalUrl(href) && <IconExternalLink />}
|
|
34
|
+
</Link>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
+
import React from 'react';
|
|
9
|
+
import type {Props} from '@theme/Footer/Links/MultiColumn';
|
|
10
|
+
import LinkItem from '@theme/Footer/LinkItem';
|
|
11
|
+
|
|
12
|
+
type ColumnType = Props['columns'][number];
|
|
13
|
+
type ColumnItemType = ColumnType['items'][number];
|
|
14
|
+
|
|
15
|
+
function ColumnLinkItem({item}: {item: ColumnItemType}) {
|
|
16
|
+
return item.html ? (
|
|
17
|
+
<li
|
|
18
|
+
className="footer__item"
|
|
19
|
+
// Developer provided the HTML, so assume it's safe.
|
|
20
|
+
// eslint-disable-next-line react/no-danger
|
|
21
|
+
dangerouslySetInnerHTML={{__html: item.html}}
|
|
22
|
+
/>
|
|
23
|
+
) : (
|
|
24
|
+
<li key={item.href || item.to} className="footer__item">
|
|
25
|
+
<LinkItem item={item} />
|
|
26
|
+
</li>
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function Column({column}: {column: ColumnType}) {
|
|
31
|
+
return (
|
|
32
|
+
<div className="col footer__col">
|
|
33
|
+
<div className="footer__title">{column.title}</div>
|
|
34
|
+
<ul className="footer__items clean-list">
|
|
35
|
+
{column.items.map((item, i) => (
|
|
36
|
+
<ColumnLinkItem key={i} item={item} />
|
|
37
|
+
))}
|
|
38
|
+
</ul>
|
|
39
|
+
</div>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export default function FooterLinksMultiColumn({columns}: Props): JSX.Element {
|
|
44
|
+
return (
|
|
45
|
+
<div className="row footer__links">
|
|
46
|
+
{columns.map((column, i) => (
|
|
47
|
+
<Column key={i} column={column} />
|
|
48
|
+
))}
|
|
49
|
+
</div>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
import React from 'react';
|
|
9
|
+
import type {Props} from '@theme/Footer/Links/Simple';
|
|
10
|
+
import LinkItem from '@theme/Footer/LinkItem';
|
|
11
|
+
|
|
12
|
+
function Separator() {
|
|
13
|
+
return <span className="footer__link-separator">·</span>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function SimpleLinkItem({item}: {item: Props['links'][number]}) {
|
|
17
|
+
return item.html ? (
|
|
18
|
+
<span
|
|
19
|
+
className="footer__link-item"
|
|
20
|
+
// Developer provided the HTML, so assume it's safe.
|
|
21
|
+
// eslint-disable-next-line react/no-danger
|
|
22
|
+
dangerouslySetInnerHTML={{__html: item.html}}
|
|
23
|
+
/>
|
|
24
|
+
) : (
|
|
25
|
+
<LinkItem item={item} />
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export default function FooterLinksSimple({links}: Props): JSX.Element {
|
|
30
|
+
return (
|
|
31
|
+
<div className="footer__links text--center">
|
|
32
|
+
<div className="footer__links">
|
|
33
|
+
{links.map((item, i) => (
|
|
34
|
+
<React.Fragment key={i}>
|
|
35
|
+
<SimpleLinkItem item={item} />
|
|
36
|
+
{links.length !== i + 1 && <Separator />}
|
|
37
|
+
</React.Fragment>
|
|
38
|
+
))}
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
);
|
|
42
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
+
import React from 'react';
|
|
9
|
+
|
|
10
|
+
import {isMultiColumnFooterLinks} from '@docusaurus/theme-common';
|
|
11
|
+
import type {Props} from '@theme/Footer/Links';
|
|
12
|
+
import FooterLinksMultiColumn from '@theme/Footer/Links/MultiColumn';
|
|
13
|
+
import FooterLinksSimple from '@theme/Footer/Links/Simple';
|
|
14
|
+
|
|
15
|
+
export default function FooterLinks({links}: Props): JSX.Element {
|
|
16
|
+
return isMultiColumnFooterLinks(links) ? (
|
|
17
|
+
<FooterLinksMultiColumn columns={links} />
|
|
18
|
+
) : (
|
|
19
|
+
<FooterLinksSimple links={links} />
|
|
20
|
+
);
|
|
21
|
+
}
|