@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
|
@@ -4,278 +4,13 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
import React
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import SearchBar from '@theme/SearchBar';
|
|
11
|
-
import Toggle from '@theme/Toggle';
|
|
12
|
-
import {
|
|
13
|
-
useThemeConfig,
|
|
14
|
-
useMobileSecondaryMenuRenderer,
|
|
15
|
-
usePrevious,
|
|
16
|
-
useHistoryPopHandler,
|
|
17
|
-
useHideableNavbar,
|
|
18
|
-
useLockBodyScroll,
|
|
19
|
-
useWindowSize,
|
|
20
|
-
useColorMode,
|
|
21
|
-
} from '@docusaurus/theme-common';
|
|
22
|
-
import {useActivePlugin} from '@docusaurus/plugin-content-docs/client';
|
|
23
|
-
import NavbarItem from '@theme/NavbarItem';
|
|
24
|
-
import Logo from '@theme/Logo';
|
|
25
|
-
import IconMenu from '@theme/IconMenu';
|
|
26
|
-
import IconClose from '@theme/IconClose';
|
|
27
|
-
import styles from './styles.module.css'; // retrocompatible with v1
|
|
28
|
-
|
|
29
|
-
const DefaultNavItemPosition = 'right';
|
|
30
|
-
|
|
31
|
-
function useNavbarItems() {
|
|
32
|
-
// TODO temporary casting until ThemeConfig type is improved
|
|
33
|
-
return useThemeConfig().navbar.items;
|
|
34
|
-
} // If split links by left/right
|
|
35
|
-
// if position is unspecified, fallback to right (as v1)
|
|
36
|
-
|
|
37
|
-
function splitNavItemsByPosition(items) {
|
|
38
|
-
const leftItems = items.filter(
|
|
39
|
-
(item) => (item.position ?? DefaultNavItemPosition) === 'left',
|
|
40
|
-
);
|
|
41
|
-
const rightItems = items.filter(
|
|
42
|
-
(item) => (item.position ?? DefaultNavItemPosition) === 'right',
|
|
43
|
-
);
|
|
44
|
-
return {
|
|
45
|
-
leftItems,
|
|
46
|
-
rightItems,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function useMobileSidebar() {
|
|
51
|
-
const windowSize = useWindowSize(); // Mobile sidebar not visible on hydration: can avoid SSR rendering
|
|
52
|
-
|
|
53
|
-
const shouldRender = windowSize === 'mobile'; // || windowSize === 'ssr';
|
|
54
|
-
|
|
55
|
-
const [shown, setShown] = useState(false); // Close mobile sidebar on navigation pop
|
|
56
|
-
// Most likely firing when using the Android back button (but not only)
|
|
57
|
-
|
|
58
|
-
useHistoryPopHandler(() => {
|
|
59
|
-
if (shown) {
|
|
60
|
-
setShown(false); // Should we prevent the navigation here?
|
|
61
|
-
// See https://github.com/facebook/docusaurus/pull/5462#issuecomment-911699846
|
|
62
|
-
|
|
63
|
-
return false; // prevent pop navigation
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return undefined;
|
|
67
|
-
});
|
|
68
|
-
const toggle = useCallback(() => {
|
|
69
|
-
setShown((s) => !s);
|
|
70
|
-
}, []);
|
|
71
|
-
useEffect(() => {
|
|
72
|
-
if (windowSize === 'desktop') {
|
|
73
|
-
setShown(false);
|
|
74
|
-
}
|
|
75
|
-
}, [windowSize]);
|
|
76
|
-
return {
|
|
77
|
-
shouldRender,
|
|
78
|
-
toggle,
|
|
79
|
-
shown,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function useColorModeToggle() {
|
|
84
|
-
const {
|
|
85
|
-
colorMode: {disableSwitch},
|
|
86
|
-
} = useThemeConfig();
|
|
87
|
-
const {isDarkTheme, setLightTheme, setDarkTheme} = useColorMode();
|
|
88
|
-
const toggle = useCallback(
|
|
89
|
-
(e) => (e.target.checked ? setDarkTheme() : setLightTheme()),
|
|
90
|
-
[setLightTheme, setDarkTheme],
|
|
91
|
-
);
|
|
92
|
-
return {
|
|
93
|
-
isDarkTheme,
|
|
94
|
-
toggle,
|
|
95
|
-
disabled: disableSwitch,
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function useSecondaryMenu({sidebarShown, toggleSidebar}) {
|
|
100
|
-
const content = useMobileSecondaryMenuRenderer()?.({
|
|
101
|
-
toggleSidebar,
|
|
102
|
-
});
|
|
103
|
-
const previousContent = usePrevious(content);
|
|
104
|
-
const [shown, setShown] = useState(
|
|
105
|
-
() =>
|
|
106
|
-
// /!\ content is set with useEffect,
|
|
107
|
-
// so it's not available on mount anyway
|
|
108
|
-
// "return !!content" => always returns false
|
|
109
|
-
false,
|
|
110
|
-
); // When content is become available for the first time (set in useEffect)
|
|
111
|
-
// we set this content to be shown!
|
|
112
|
-
|
|
113
|
-
useEffect(() => {
|
|
114
|
-
const contentBecameAvailable = content && !previousContent;
|
|
115
|
-
|
|
116
|
-
if (contentBecameAvailable) {
|
|
117
|
-
setShown(true);
|
|
118
|
-
}
|
|
119
|
-
}, [content, previousContent]);
|
|
120
|
-
const hasContent = !!content; // On sidebar close, secondary menu is set to be shown on next re-opening
|
|
121
|
-
// (if any secondary menu content available)
|
|
122
|
-
|
|
123
|
-
useEffect(() => {
|
|
124
|
-
if (!hasContent) {
|
|
125
|
-
setShown(false);
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
if (!sidebarShown) {
|
|
130
|
-
setShown(true);
|
|
131
|
-
}
|
|
132
|
-
}, [sidebarShown, hasContent]);
|
|
133
|
-
const hide = useCallback(() => {
|
|
134
|
-
setShown(false);
|
|
135
|
-
}, []);
|
|
136
|
-
return {
|
|
137
|
-
shown,
|
|
138
|
-
hide,
|
|
139
|
-
content,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
function NavbarMobileSidebar({sidebarShown, toggleSidebar}) {
|
|
144
|
-
useLockBodyScroll(sidebarShown);
|
|
145
|
-
const items = useNavbarItems();
|
|
146
|
-
const colorModeToggle = useColorModeToggle();
|
|
147
|
-
const secondaryMenu = useSecondaryMenu({
|
|
148
|
-
sidebarShown,
|
|
149
|
-
toggleSidebar,
|
|
150
|
-
});
|
|
151
|
-
return (
|
|
152
|
-
<div className="navbar-sidebar">
|
|
153
|
-
<div className="navbar-sidebar__brand">
|
|
154
|
-
<Logo
|
|
155
|
-
className="navbar__brand"
|
|
156
|
-
imageClassName="navbar__logo"
|
|
157
|
-
titleClassName="navbar__title"
|
|
158
|
-
/>
|
|
159
|
-
{!colorModeToggle.disabled && (
|
|
160
|
-
<Toggle
|
|
161
|
-
className={styles.navbarSidebarToggle}
|
|
162
|
-
checked={colorModeToggle.isDarkTheme}
|
|
163
|
-
onChange={colorModeToggle.toggle}
|
|
164
|
-
/>
|
|
165
|
-
)}
|
|
166
|
-
<button
|
|
167
|
-
type="button"
|
|
168
|
-
className="clean-btn navbar-sidebar__close"
|
|
169
|
-
onClick={toggleSidebar}>
|
|
170
|
-
<IconClose
|
|
171
|
-
color="var(--ifm-color-emphasis-600)"
|
|
172
|
-
className={styles.navbarSidebarCloseSvg}
|
|
173
|
-
/>
|
|
174
|
-
</button>
|
|
175
|
-
</div>
|
|
176
|
-
|
|
177
|
-
<div
|
|
178
|
-
className={clsx('navbar-sidebar__items', {
|
|
179
|
-
'navbar-sidebar__items--show-secondary': secondaryMenu.shown,
|
|
180
|
-
})}>
|
|
181
|
-
<div className="navbar-sidebar__item menu">
|
|
182
|
-
<ul className="menu__list">
|
|
183
|
-
{items.map((item, i) => (
|
|
184
|
-
<NavbarItem mobile {...item} onClick={toggleSidebar} key={i} />
|
|
185
|
-
))}
|
|
186
|
-
</ul>
|
|
187
|
-
</div>
|
|
188
|
-
|
|
189
|
-
<div className="navbar-sidebar__item menu">
|
|
190
|
-
{items.length > 0 && (
|
|
191
|
-
<button
|
|
192
|
-
type="button"
|
|
193
|
-
className="clean-btn navbar-sidebar__back"
|
|
194
|
-
onClick={secondaryMenu.hide}>
|
|
195
|
-
<Translate
|
|
196
|
-
id="theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel"
|
|
197
|
-
description="The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)">
|
|
198
|
-
← Back to main menu
|
|
199
|
-
</Translate>
|
|
200
|
-
</button>
|
|
201
|
-
)}
|
|
202
|
-
{secondaryMenu.content}
|
|
203
|
-
</div>
|
|
204
|
-
</div>
|
|
205
|
-
</div>
|
|
206
|
-
);
|
|
207
|
-
}
|
|
208
|
-
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import NavbarLayout from '@theme/Navbar/Layout';
|
|
9
|
+
import NavbarContent from '@theme/Navbar/Content';
|
|
209
10
|
export default function Navbar() {
|
|
210
|
-
const {
|
|
211
|
-
navbar: {hideOnScroll, style},
|
|
212
|
-
} = useThemeConfig();
|
|
213
|
-
const mobileSidebar = useMobileSidebar();
|
|
214
|
-
const colorModeToggle = useColorModeToggle();
|
|
215
|
-
const activeDocPlugin = useActivePlugin();
|
|
216
|
-
const {navbarRef, isNavbarVisible} = useHideableNavbar(hideOnScroll);
|
|
217
|
-
const items = useNavbarItems();
|
|
218
|
-
const hasSearchNavbarItem = items.some((item) => item.type === 'search');
|
|
219
|
-
const {leftItems, rightItems} = splitNavItemsByPosition(items);
|
|
220
11
|
return (
|
|
221
|
-
<
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
'navbar--dark': style === 'dark',
|
|
225
|
-
'navbar--primary': style === 'primary',
|
|
226
|
-
'navbar-sidebar--show': mobileSidebar.shown,
|
|
227
|
-
[styles.navbarHideable]: hideOnScroll,
|
|
228
|
-
[styles.navbarHidden]: hideOnScroll && !isNavbarVisible,
|
|
229
|
-
})}>
|
|
230
|
-
<div className="navbar__inner">
|
|
231
|
-
<div className="navbar__items">
|
|
232
|
-
{(items?.length > 0 || activeDocPlugin) && (
|
|
233
|
-
<button
|
|
234
|
-
aria-label="Navigation bar toggle"
|
|
235
|
-
className="navbar__toggle clean-btn"
|
|
236
|
-
type="button"
|
|
237
|
-
tabIndex={0}
|
|
238
|
-
onClick={mobileSidebar.toggle}
|
|
239
|
-
onKeyDown={mobileSidebar.toggle}>
|
|
240
|
-
<IconMenu />
|
|
241
|
-
</button>
|
|
242
|
-
)}
|
|
243
|
-
<Logo
|
|
244
|
-
className="navbar__brand"
|
|
245
|
-
imageClassName="navbar__logo"
|
|
246
|
-
titleClassName="navbar__title"
|
|
247
|
-
/>
|
|
248
|
-
{leftItems.map((item, i) => (
|
|
249
|
-
<NavbarItem {...item} key={i} />
|
|
250
|
-
))}
|
|
251
|
-
</div>
|
|
252
|
-
<div className="navbar__items navbar__items--right">
|
|
253
|
-
{rightItems.map((item, i) => (
|
|
254
|
-
<NavbarItem {...item} key={i} />
|
|
255
|
-
))}
|
|
256
|
-
{!colorModeToggle.disabled && (
|
|
257
|
-
<Toggle
|
|
258
|
-
className={styles.toggle}
|
|
259
|
-
checked={colorModeToggle.isDarkTheme}
|
|
260
|
-
onChange={colorModeToggle.toggle}
|
|
261
|
-
/>
|
|
262
|
-
)}
|
|
263
|
-
{!hasSearchNavbarItem && <SearchBar />}
|
|
264
|
-
</div>
|
|
265
|
-
</div>
|
|
266
|
-
|
|
267
|
-
<div
|
|
268
|
-
role="presentation"
|
|
269
|
-
className="navbar-sidebar__backdrop"
|
|
270
|
-
onClick={mobileSidebar.toggle}
|
|
271
|
-
/>
|
|
272
|
-
|
|
273
|
-
{mobileSidebar.shouldRender && (
|
|
274
|
-
<NavbarMobileSidebar
|
|
275
|
-
sidebarShown={mobileSidebar.shown}
|
|
276
|
-
toggleSidebar={mobileSidebar.toggle}
|
|
277
|
-
/>
|
|
278
|
-
)}
|
|
279
|
-
</nav>
|
|
12
|
+
<NavbarLayout>
|
|
13
|
+
<NavbarContent />
|
|
14
|
+
</NavbarLayout>
|
|
280
15
|
);
|
|
281
16
|
}
|
|
@@ -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 DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
|
|
8
|
+
import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
|
|
9
|
+
import LocaleDropdownNavbarItem from '@theme/NavbarItem/LocaleDropdownNavbarItem';
|
|
10
|
+
import SearchNavbarItem from '@theme/NavbarItem/SearchNavbarItem';
|
|
11
|
+
import HtmlNavbarItem from '@theme/NavbarItem/HtmlNavbarItem';
|
|
12
|
+
import DocNavbarItem from '@theme/NavbarItem/DocNavbarItem';
|
|
13
|
+
import DocSidebarNavbarItem from '@theme/NavbarItem/DocSidebarNavbarItem';
|
|
14
|
+
import DocsVersionNavbarItem from '@theme/NavbarItem/DocsVersionNavbarItem';
|
|
15
|
+
import DocsVersionDropdownNavbarItem from '@theme/NavbarItem/DocsVersionDropdownNavbarItem';
|
|
16
|
+
const ComponentTypes = {
|
|
17
|
+
default: DefaultNavbarItem,
|
|
18
|
+
localeDropdown: LocaleDropdownNavbarItem,
|
|
19
|
+
search: SearchNavbarItem,
|
|
20
|
+
dropdown: DropdownNavbarItem,
|
|
21
|
+
html: HtmlNavbarItem,
|
|
22
|
+
doc: DocNavbarItem,
|
|
23
|
+
docSidebar: DocSidebarNavbarItem,
|
|
24
|
+
docsVersion: DocsVersionNavbarItem,
|
|
25
|
+
docsVersionDropdown: DocsVersionDropdownNavbarItem,
|
|
26
|
+
};
|
|
27
|
+
export default ComponentTypes;
|
|
@@ -31,11 +31,7 @@ function DefaultNavbarItemDesktop({
|
|
|
31
31
|
return element;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
function DefaultNavbarItemMobile({
|
|
35
|
-
className,
|
|
36
|
-
isDropdownItem: _isDropdownItem,
|
|
37
|
-
...props
|
|
38
|
-
}) {
|
|
34
|
+
function DefaultNavbarItemMobile({className, isDropdownItem, ...props}) {
|
|
39
35
|
return (
|
|
40
36
|
<li className="menu__list-item">
|
|
41
37
|
<NavbarNavLink className={clsx('menu__link', className)} {...props} />
|
|
@@ -45,7 +41,7 @@ function DefaultNavbarItemMobile({
|
|
|
45
41
|
|
|
46
42
|
export default function DefaultNavbarItem({
|
|
47
43
|
mobile = false,
|
|
48
|
-
position
|
|
44
|
+
position,
|
|
49
45
|
// Need to destructure position from props so that it doesn't get passed on.
|
|
50
46
|
...props
|
|
51
47
|
}) {
|
|
@@ -6,50 +6,33 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
|
|
9
|
-
import {
|
|
10
|
-
useLatestVersion,
|
|
11
|
-
useActiveDocContext,
|
|
12
|
-
} from '@docusaurus/plugin-content-docs/client';
|
|
9
|
+
import {useActiveDocContext} from '@docusaurus/plugin-content-docs/client';
|
|
13
10
|
import clsx from 'clsx';
|
|
14
11
|
import {getInfimaActiveClassName} from '@theme/NavbarItem/utils';
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
function getDocInVersions(versions, docId) {
|
|
18
|
-
const allDocs = versions.flatMap((version) => version.docs);
|
|
19
|
-
const doc = allDocs.find((versionDoc) => versionDoc.id === docId);
|
|
20
|
-
|
|
21
|
-
if (!doc) {
|
|
22
|
-
const docIds = allDocs.map((versionDoc) => versionDoc.id).join('\n- ');
|
|
23
|
-
throw new Error(`DocNavbarItem: couldn't find any doc with id "${docId}" in version${
|
|
24
|
-
versions.length ? 's' : ''
|
|
25
|
-
} ${versions.map((version) => version.name).join(', ')}".
|
|
26
|
-
Available doc ids are:\n- ${docIds}`);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return doc;
|
|
30
|
-
}
|
|
31
|
-
|
|
12
|
+
import {useLayoutDoc} from '@docusaurus/theme-common';
|
|
32
13
|
export default function DocNavbarItem({
|
|
33
14
|
docId,
|
|
34
15
|
label: staticLabel,
|
|
35
16
|
docsPluginId,
|
|
36
17
|
...props
|
|
37
18
|
}) {
|
|
38
|
-
const {
|
|
39
|
-
const
|
|
40
|
-
|
|
19
|
+
const {activeDoc} = useActiveDocContext(docsPluginId);
|
|
20
|
+
const doc = useLayoutDoc(docId, docsPluginId); // Draft items are not displayed in the navbar.
|
|
21
|
+
|
|
22
|
+
if (doc === null) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
41
25
|
|
|
42
|
-
const versions = uniq(
|
|
43
|
-
[activeVersion, preferredVersion, latestVersion].filter(Boolean),
|
|
44
|
-
);
|
|
45
|
-
const doc = getDocInVersions(versions, docId);
|
|
46
26
|
const activeDocInfimaClassName = getInfimaActiveClassName(props.mobile);
|
|
47
27
|
return (
|
|
48
28
|
<DefaultNavbarItem
|
|
49
29
|
exact
|
|
50
30
|
{...props}
|
|
51
31
|
className={clsx(props.className, {
|
|
32
|
+
// Do not make the item active if the active doc doesn't have sidebar.
|
|
52
33
|
[activeDocInfimaClassName]:
|
|
34
|
+
// If `activeDoc === doc` react-router will make it active anyways,
|
|
35
|
+
// regardless of the existence of a sidebar
|
|
53
36
|
activeDoc?.sidebar && activeDoc.sidebar === doc.sidebar,
|
|
54
37
|
})}
|
|
55
38
|
activeClassName={activeDocInfimaClassName}
|
|
@@ -6,57 +6,25 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
|
|
9
|
-
import {
|
|
10
|
-
useLatestVersion,
|
|
11
|
-
useActiveDocContext,
|
|
12
|
-
} from '@docusaurus/plugin-content-docs/client';
|
|
9
|
+
import {useActiveDocContext} from '@docusaurus/plugin-content-docs/client';
|
|
13
10
|
import clsx from 'clsx';
|
|
14
11
|
import {getInfimaActiveClassName} from '@theme/NavbarItem/utils';
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
function getSidebarLink(versions, sidebarId) {
|
|
18
|
-
const allSidebars = versions
|
|
19
|
-
.flatMap((version) => {
|
|
20
|
-
if (version.sidebars) {
|
|
21
|
-
return Object.entries(version.sidebars);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return undefined;
|
|
25
|
-
})
|
|
26
|
-
.filter((sidebarItem) => !!sidebarItem);
|
|
27
|
-
const sidebarEntry = allSidebars.find((sidebar) => sidebar[0] === sidebarId);
|
|
28
|
-
|
|
29
|
-
if (!sidebarEntry) {
|
|
30
|
-
throw new Error(`DocSidebarNavbarItem: couldn't find any sidebar with id "${sidebarId}" in version${
|
|
31
|
-
versions.length ? 's' : ''
|
|
32
|
-
} ${versions.map((version) => version.name).join(', ')}".
|
|
33
|
-
Available sidebar ids are:
|
|
34
|
-
- ${Object.keys(allSidebars).join('\n- ')}`);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (!sidebarEntry[1].link) {
|
|
38
|
-
throw new Error(
|
|
39
|
-
`DocSidebarNavbarItem: couldn't find any document for sidebar with id "${sidebarId}"`,
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return sidebarEntry[1].link;
|
|
44
|
-
}
|
|
45
|
-
|
|
12
|
+
import {useLayoutDocsSidebar} from '@docusaurus/theme-common';
|
|
46
13
|
export default function DocSidebarNavbarItem({
|
|
47
14
|
sidebarId,
|
|
48
15
|
label,
|
|
49
16
|
docsPluginId,
|
|
50
17
|
...props
|
|
51
18
|
}) {
|
|
52
|
-
const {
|
|
53
|
-
const
|
|
54
|
-
|
|
19
|
+
const {activeDoc} = useActiveDocContext(docsPluginId);
|
|
20
|
+
const sidebarLink = useLayoutDocsSidebar(sidebarId, docsPluginId).link;
|
|
21
|
+
|
|
22
|
+
if (!sidebarLink) {
|
|
23
|
+
throw new Error(
|
|
24
|
+
`DocSidebarNavbarItem: Sidebar with ID "${sidebarId}" doesn't have anything to be linked to.`,
|
|
25
|
+
);
|
|
26
|
+
}
|
|
55
27
|
|
|
56
|
-
const versions = uniq(
|
|
57
|
-
[activeVersion, preferredVersion, latestVersion].filter(Boolean),
|
|
58
|
-
);
|
|
59
|
-
const sidebarLink = getSidebarLink(versions, sidebarId);
|
|
60
28
|
const activeDocInfimaClassName = getInfimaActiveClassName(props.mobile);
|
|
61
29
|
return (
|
|
62
30
|
<DefaultNavbarItem
|
|
@@ -9,10 +9,12 @@ import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
|
|
|
9
9
|
import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
|
|
10
10
|
import {
|
|
11
11
|
useVersions,
|
|
12
|
-
useLatestVersion,
|
|
13
12
|
useActiveDocContext,
|
|
14
13
|
} from '@docusaurus/plugin-content-docs/client';
|
|
15
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
useDocsPreferredVersion,
|
|
16
|
+
useDocsVersionCandidates,
|
|
17
|
+
} from '@docusaurus/theme-common';
|
|
16
18
|
import {translate} from '@docusaurus/Translate';
|
|
17
19
|
|
|
18
20
|
const getVersionMainDoc = (version) =>
|
|
@@ -28,33 +30,27 @@ export default function DocsVersionDropdownNavbarItem({
|
|
|
28
30
|
}) {
|
|
29
31
|
const activeDocContext = useActiveDocContext(docsPluginId);
|
|
30
32
|
const versions = useVersions(docsPluginId);
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return [...dropdownItemsBefore, ...versionLinks, ...dropdownItemsAfter];
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const items = getItems();
|
|
56
|
-
const dropdownVersion =
|
|
57
|
-
activeDocContext.activeVersion ?? preferredVersion ?? latestVersion; // Mobile dropdown is handled a bit differently
|
|
33
|
+
const {savePreferredVersionName} = useDocsPreferredVersion(docsPluginId);
|
|
34
|
+
const versionLinks = versions.map((version) => {
|
|
35
|
+
// We try to link to the same doc, in another version
|
|
36
|
+
// When not possible, fallback to the "main doc" of the version
|
|
37
|
+
const versionDoc =
|
|
38
|
+
activeDocContext?.alternateDocVersions[version.name] ??
|
|
39
|
+
getVersionMainDoc(version);
|
|
40
|
+
return {
|
|
41
|
+
isNavLink: true,
|
|
42
|
+
label: version.label,
|
|
43
|
+
to: versionDoc.path,
|
|
44
|
+
isActive: () => version === activeDocContext?.activeVersion,
|
|
45
|
+
onClick: () => savePreferredVersionName(version.name),
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
const items = [
|
|
49
|
+
...dropdownItemsBefore,
|
|
50
|
+
...versionLinks,
|
|
51
|
+
...dropdownItemsAfter,
|
|
52
|
+
];
|
|
53
|
+
const dropdownVersion = useDocsVersionCandidates(docsPluginId)[0]; // Mobile dropdown is handled a bit differently
|
|
58
54
|
|
|
59
55
|
const dropdownLabel =
|
|
60
56
|
mobile && items.length > 1
|
|
@@ -6,11 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
|
|
9
|
-
import {
|
|
10
|
-
useActiveVersion,
|
|
11
|
-
useLatestVersion,
|
|
12
|
-
} from '@docusaurus/plugin-content-docs/client';
|
|
13
|
-
import {useDocsPreferredVersion} from '@docusaurus/theme-common';
|
|
9
|
+
import {useDocsVersionCandidates} from '@docusaurus/theme-common';
|
|
14
10
|
|
|
15
11
|
const getVersionMainDoc = (version) =>
|
|
16
12
|
version.docs.find((doc) => doc.id === version.mainDocId);
|
|
@@ -21,10 +17,7 @@ export default function DocsVersionNavbarItem({
|
|
|
21
17
|
docsPluginId,
|
|
22
18
|
...props
|
|
23
19
|
}) {
|
|
24
|
-
const
|
|
25
|
-
const {preferredVersion} = useDocsPreferredVersion(docsPluginId);
|
|
26
|
-
const latestVersion = useLatestVersion(docsPluginId);
|
|
27
|
-
const version = activeVersion ?? preferredVersion ?? latestVersion;
|
|
20
|
+
const version = useDocsVersionCandidates(docsPluginId)[0];
|
|
28
21
|
const label = staticLabel ?? version.label;
|
|
29
22
|
const path = staticTo ?? getVersionMainDoc(version).path;
|
|
30
23
|
return <DefaultNavbarItem {...props} label={label} to={path} />;
|
|
@@ -64,6 +64,9 @@ function DropdownNavbarItemDesktop({items, position, className, ...props}) {
|
|
|
64
64
|
'dropdown--show': showDropdown,
|
|
65
65
|
})}>
|
|
66
66
|
<NavbarNavLink
|
|
67
|
+
aria-haspopup="true"
|
|
68
|
+
aria-expanded={showDropdown}
|
|
69
|
+
role="button"
|
|
67
70
|
href={props.to ? undefined : '#'}
|
|
68
71
|
className={clsx('navbar__link', className)}
|
|
69
72
|
{...props}
|
|
@@ -87,7 +90,12 @@ function DropdownNavbarItemDesktop({items, position, className, ...props}) {
|
|
|
87
90
|
const nextNavbarItem = dropdownRef.current.nextElementSibling;
|
|
88
91
|
|
|
89
92
|
if (nextNavbarItem) {
|
|
90
|
-
|
|
93
|
+
const targetItem =
|
|
94
|
+
nextNavbarItem instanceof HTMLAnchorElement
|
|
95
|
+
? nextNavbarItem // Next item is another dropdown; focus on the inner
|
|
96
|
+
: // anchor element instead so there's outline
|
|
97
|
+
nextNavbarItem.querySelector('a');
|
|
98
|
+
targetItem.focus();
|
|
91
99
|
}
|
|
92
100
|
}
|
|
93
101
|
}}
|
|
@@ -104,7 +112,7 @@ function DropdownNavbarItemDesktop({items, position, className, ...props}) {
|
|
|
104
112
|
function DropdownNavbarItemMobile({
|
|
105
113
|
items,
|
|
106
114
|
className,
|
|
107
|
-
position
|
|
115
|
+
position,
|
|
108
116
|
// Need to destructure position from props so that it doesn't get passed on.
|
|
109
117
|
...props
|
|
110
118
|
}) {
|
|
@@ -126,7 +134,10 @@ function DropdownNavbarItemMobile({
|
|
|
126
134
|
})}>
|
|
127
135
|
<NavbarNavLink
|
|
128
136
|
role="button"
|
|
129
|
-
className={clsx(
|
|
137
|
+
className={clsx(
|
|
138
|
+
'menu__link menu__link--sublist menu__link--sublist-caret',
|
|
139
|
+
className,
|
|
140
|
+
)}
|
|
130
141
|
{...props}
|
|
131
142
|
onClick={(e) => {
|
|
132
143
|
e.preventDefault();
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
export default function HtmlNavbarItem({
|
|
10
|
+
value,
|
|
11
|
+
className,
|
|
12
|
+
mobile = false,
|
|
13
|
+
isDropdownItem = false,
|
|
14
|
+
}) {
|
|
15
|
+
const Comp = isDropdownItem ? 'li' : 'div';
|
|
16
|
+
return (
|
|
17
|
+
<Comp
|
|
18
|
+
className={clsx(
|
|
19
|
+
{
|
|
20
|
+
navbar__item: !mobile && !isDropdownItem,
|
|
21
|
+
'menu__list-item': mobile,
|
|
22
|
+
},
|
|
23
|
+
className,
|
|
24
|
+
)}
|
|
25
|
+
dangerouslySetInnerHTML={{
|
|
26
|
+
__html: value,
|
|
27
|
+
}}
|
|
28
|
+
/>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
@@ -21,11 +21,6 @@ export default function LocaleDropdownNavbarItem({
|
|
|
21
21
|
i18n: {currentLocale, locales, localeConfigs},
|
|
22
22
|
} = useDocusaurusContext();
|
|
23
23
|
const alternatePageUtils = useAlternatePageUtils();
|
|
24
|
-
|
|
25
|
-
function getLocaleLabel(locale) {
|
|
26
|
-
return localeConfigs[locale].label;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
24
|
const localeItems = locales.map((locale) => {
|
|
30
25
|
const to = `pathname://${alternatePageUtils.createUrl({
|
|
31
26
|
locale,
|
|
@@ -33,7 +28,7 @@ export default function LocaleDropdownNavbarItem({
|
|
|
33
28
|
})}`;
|
|
34
29
|
return {
|
|
35
30
|
isNavLink: true,
|
|
36
|
-
label:
|
|
31
|
+
label: localeConfigs[locale].label,
|
|
37
32
|
to,
|
|
38
33
|
target: '_self',
|
|
39
34
|
autoAddBaseUrl: false,
|
|
@@ -48,16 +43,16 @@ export default function LocaleDropdownNavbarItem({
|
|
|
48
43
|
id: 'theme.navbar.mobileLanguageDropdown.label',
|
|
49
44
|
description: 'The label for the mobile language switcher dropdown',
|
|
50
45
|
})
|
|
51
|
-
:
|
|
46
|
+
: localeConfigs[currentLocale].label;
|
|
52
47
|
return (
|
|
53
48
|
<DropdownNavbarItem
|
|
54
49
|
{...props}
|
|
55
50
|
mobile={mobile}
|
|
56
51
|
label={
|
|
57
|
-
|
|
52
|
+
<>
|
|
58
53
|
<IconLanguage className={styles.iconLanguage} />
|
|
59
|
-
|
|
60
|
-
|
|
54
|
+
{dropdownLabel}
|
|
55
|
+
</>
|
|
61
56
|
}
|
|
62
57
|
items={items}
|
|
63
58
|
/>
|