@docusaurus/theme-classic 2.0.0-beta.12faed89d → 2.0.0-beta.13
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/README.md +1 -1
- package/lib/__tests__/validateThemeConfig.test.js +277 -3
- package/lib/admonitions.css +35 -0
- package/lib/deps.d.ts +13 -0
- package/lib/index.js +16 -15
- package/lib/prism-include-languages.js +9 -5
- package/lib/theme/AnnouncementBar/index.js +8 -12
- package/lib/theme/AnnouncementBar/styles.module.css +23 -32
- package/lib/theme/BackToTopButton/index.js +140 -0
- package/lib/theme/BackToTopButton/styles.module.css +42 -0
- package/lib/theme/BlogArchivePage/index.js +89 -0
- package/lib/theme/BlogLayout/index.js +51 -0
- package/lib/theme/BlogListPage/index.js +10 -21
- package/lib/theme/BlogPostAuthor/index.js +51 -0
- package/lib/theme/BlogPostAuthor/styles.module.css +12 -0
- package/lib/theme/BlogPostAuthors/index.js +47 -0
- package/lib/theme/BlogPostAuthors/styles.module.css +11 -0
- package/lib/theme/BlogPostItem/index.js +58 -67
- package/lib/theme/BlogPostPage/index.js +37 -24
- package/lib/theme/BlogSidebar/index.js +5 -7
- package/lib/theme/BlogSidebar/styles.module.css +2 -2
- package/lib/theme/BlogTagsListPage/index.js +8 -44
- package/lib/theme/BlogTagsPostsPage/index.js +24 -38
- package/lib/theme/CodeBlock/index.js +18 -138
- package/lib/theme/CodeBlock/styles.module.css +6 -9
- package/lib/theme/Details/index.js +30 -0
- package/lib/theme/Details/styles.module.css +13 -0
- package/lib/theme/DocCard/index.js +84 -0
- package/lib/theme/DocCard/styles.module.css +43 -0
- package/lib/theme/DocCardList/index.js +28 -0
- package/lib/theme/DocCategoryGeneratedIndexPage/index.js +57 -0
- package/lib/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
- package/lib/theme/DocItem/index.js +22 -48
- package/lib/theme/DocItem/styles.module.css +2 -11
- package/lib/theme/DocItemFooter/index.js +79 -0
- package/lib/theme/DocItemFooter/styles.module.css +18 -0
- package/lib/theme/DocPage/index.js +35 -20
- package/lib/theme/DocPaginator/index.js +6 -7
- package/lib/theme/DocSidebar/index.js +23 -22
- package/lib/theme/DocSidebarItem/index.js +84 -50
- package/lib/theme/DocSidebarItem/styles.module.css +4 -0
- package/lib/theme/DocTagDocListPage/index.js +89 -0
- package/lib/theme/DocTagsListPage/index.js +44 -0
- package/lib/theme/DocVersionBadge/index.js +34 -0
- package/lib/theme/DocVersionBanner/index.js +12 -10
- package/lib/theme/EditThisPage/index.js +3 -1
- package/lib/theme/ErrorPageContent.js +43 -0
- package/lib/theme/Footer/index.js +8 -4
- package/lib/theme/Heading/index.js +17 -22
- package/lib/theme/Heading/styles.css +5 -6
- package/lib/theme/Heading/styles.module.css +9 -5
- package/lib/theme/IconArrow/index.js +2 -2
- package/lib/theme/IconClose/index.js +31 -0
- package/lib/theme/IconEdit/index.js +3 -3
- package/lib/theme/IconExternalLink/index.js +3 -3
- package/lib/theme/IconLanguage/index.js +3 -3
- package/lib/theme/IconMenu/index.js +3 -3
- package/lib/theme/LastUpdated/index.js +4 -2
- package/lib/theme/Layout/index.js +5 -1
- package/lib/theme/LayoutHead/index.js +22 -17
- package/lib/theme/LayoutProviders/index.js +7 -5
- package/lib/theme/Logo/index.js +16 -14
- package/lib/theme/MDXComponents/index.js +45 -4
- package/lib/theme/MDXComponents/styles.css +11 -0
- package/lib/theme/MDXPage/index.js +2 -1
- package/lib/theme/Navbar/index.js +46 -27
- package/lib/theme/Navbar/styles.module.css +3 -39
- package/lib/theme/NavbarItem/DefaultNavbarItem.js +27 -124
- package/lib/theme/NavbarItem/DocNavbarItem.js +7 -8
- package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +19 -12
- package/lib/theme/NavbarItem/DropdownNavbarItem.js +155 -0
- package/lib/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +6 -10
- package/lib/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
- package/lib/theme/NavbarItem/index.js +31 -11
- package/lib/theme/{SearchMetadatas → SearchMetadata}/index.js +2 -2
- package/lib/theme/Seo/index.js +10 -7
- package/lib/theme/TOC/index.js +9 -30
- package/lib/theme/TOC/styles.module.css +1 -1
- package/lib/theme/TOCCollapsible/index.js +7 -5
- package/lib/theme/TOCCollapsible/styles.module.css +1 -0
- package/lib/theme/TOCInline/index.js +7 -27
- package/lib/theme/TOCItems/index.js +78 -0
- package/lib/theme/Tabs/__tests__/index.test.js +123 -0
- package/lib/theme/Tabs/index.js +73 -50
- package/lib/theme/Tabs/styles.module.css +0 -13
- package/lib/theme/Tag/index.js +40 -0
- package/lib/theme/Tag/styles.module.css +70 -0
- package/lib/theme/TagsListByLetter/index.js +48 -0
- package/lib/theme/TagsListByLetter/styles.module.css +11 -0
- package/lib/theme/TagsListInline/index.js +44 -0
- package/lib/theme/TagsListInline/styles.module.css +15 -0
- package/lib/theme/ThemeProvider/index.js +8 -3
- package/lib/theme/ThemedImage/index.js +5 -7
- package/lib/theme/Toggle/index.js +41 -44
- package/lib/theme/Toggle/styles.module.css +91 -3
- package/lib/theme/UserPreferencesProvider/index.js +8 -3
- package/lib/theme/hooks/useHideableNavbar.js +14 -32
- package/lib/theme/hooks/useTheme.js +3 -5
- package/lib/theme/hooks/useWindowSize.js +2 -7
- package/lib/theme/prism-include-languages.js +4 -3
- package/lib/theme-classic.d.ts +806 -0
- package/lib/translations.js +4 -4
- package/lib/types.d.ts +0 -629
- package/lib/validateThemeConfig.js +230 -248
- package/lib-next/__tests__/validateThemeConfig.test.js +277 -3
- package/lib-next/admonitions.css +35 -0
- package/lib-next/deps.d.ts +13 -0
- package/lib-next/index.js +16 -10
- package/lib-next/prism-include-languages.js +0 -2
- package/lib-next/theme/AnnouncementBar/index.js +7 -12
- package/lib-next/theme/AnnouncementBar/styles.module.css +23 -32
- package/lib-next/theme/BackToTopButton/index.js +131 -0
- package/lib-next/theme/BackToTopButton/styles.module.css +42 -0
- package/lib-next/theme/BlogArchivePage/index.js +80 -0
- package/lib-next/theme/BlogLayout/index.js +40 -0
- package/lib-next/theme/BlogListPage/index.js +17 -25
- package/lib-next/theme/BlogPostAuthor/index.js +46 -0
- package/lib-next/theme/BlogPostAuthor/styles.module.css +12 -0
- package/lib-next/theme/BlogPostAuthors/index.js +34 -0
- package/lib-next/theme/BlogPostAuthors/styles.module.css +11 -0
- package/lib-next/theme/BlogPostItem/index.js +79 -86
- package/lib-next/theme/BlogPostPage/index.js +70 -35
- package/lib-next/theme/BlogSidebar/index.js +11 -13
- package/lib-next/theme/BlogSidebar/styles.module.css +2 -2
- package/lib-next/theme/BlogTagsListPage/index.js +14 -55
- package/lib-next/theme/BlogTagsPostsPage/index.js +29 -39
- package/lib-next/theme/CodeBlock/index.js +17 -149
- package/lib-next/theme/CodeBlock/styles.module.css +6 -9
- package/lib-next/theme/Details/index.js +20 -0
- package/lib-next/theme/Details/styles.module.css +13 -0
- package/lib-next/theme/DocCard/index.js +80 -0
- package/lib-next/theme/DocCard/styles.module.css +43 -0
- package/lib-next/theme/DocCardList/index.js +19 -0
- package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +49 -0
- package/lib-next/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
- package/lib-next/theme/DocItem/index.js +30 -59
- package/lib-next/theme/DocItem/styles.module.css +2 -11
- package/lib-next/theme/DocItemFooter/index.js +79 -0
- package/lib-next/theme/DocItemFooter/styles.module.css +18 -0
- package/lib-next/theme/DocPage/index.js +46 -23
- package/lib-next/theme/DocPaginator/index.js +7 -11
- package/lib-next/theme/DocSidebar/index.js +37 -43
- package/lib-next/theme/DocSidebarItem/index.js +115 -65
- package/lib-next/theme/DocSidebarItem/styles.module.css +4 -0
- package/lib-next/theme/DocTagDocListPage/index.js +89 -0
- package/lib-next/theme/DocTagsListPage/index.js +38 -0
- package/lib-next/theme/DocVersionBadge/index.js +27 -0
- package/lib-next/theme/DocVersionBanner/index.js +28 -14
- package/lib-next/theme/EditThisPage/index.js +6 -1
- package/lib-next/theme/ErrorPageContent.js +35 -0
- package/lib-next/theme/Footer/index.js +17 -4
- package/lib-next/theme/Heading/index.js +25 -29
- package/lib-next/theme/Heading/styles.css +5 -6
- package/lib-next/theme/Heading/styles.module.css +9 -5
- package/lib-next/theme/IconArrow/index.js +2 -2
- package/lib-next/theme/IconClose/index.js +23 -0
- package/lib-next/theme/IconEdit/index.js +2 -2
- package/lib-next/theme/IconExternalLink/index.js +2 -2
- package/lib-next/theme/IconLanguage/index.js +2 -2
- package/lib-next/theme/IconMenu/index.js +2 -2
- package/lib-next/theme/LastUpdated/index.js +3 -2
- package/lib-next/theme/Layout/index.js +3 -1
- package/lib-next/theme/LayoutHead/index.js +18 -23
- package/lib-next/theme/LayoutProviders/index.js +8 -5
- package/lib-next/theme/Logo/index.js +25 -21
- package/lib-next/theme/MDXComponents/index.js +34 -7
- package/lib-next/theme/MDXComponents/styles.css +11 -0
- package/lib-next/theme/MDXPage/index.js +10 -2
- package/lib-next/theme/Navbar/index.js +62 -34
- package/lib-next/theme/Navbar/styles.module.css +3 -39
- package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +45 -143
- package/lib-next/theme/NavbarItem/DocNavbarItem.js +7 -7
- package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +31 -19
- package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +159 -0
- package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +4 -12
- package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
- package/lib-next/theme/NavbarItem/index.js +25 -12
- package/lib-next/theme/{SearchMetadatas → SearchMetadata}/index.js +1 -1
- package/lib-next/theme/Seo/index.js +11 -7
- package/lib-next/theme/TOC/index.js +12 -36
- package/lib-next/theme/TOC/styles.module.css +1 -1
- package/lib-next/theme/TOCCollapsible/index.js +13 -4
- package/lib-next/theme/TOCCollapsible/styles.module.css +1 -0
- package/lib-next/theme/TOCInline/index.js +10 -28
- package/lib-next/theme/TOCItems/index.js +85 -0
- package/lib-next/theme/Tabs/__tests__/index.test.js +142 -0
- package/lib-next/theme/Tabs/index.js +91 -43
- package/lib-next/theme/Tabs/styles.module.css +0 -13
- package/lib-next/theme/Tag/index.js +27 -0
- package/lib-next/theme/Tag/styles.module.css +70 -0
- package/lib-next/theme/TagsListByLetter/index.js +42 -0
- package/lib-next/theme/TagsListByLetter/styles.module.css +11 -0
- package/lib-next/theme/TagsListInline/index.js +31 -0
- package/lib-next/theme/TagsListInline/styles.module.css +15 -0
- package/lib-next/theme/ThemeProvider/index.js +10 -7
- package/lib-next/theme/ThemedImage/index.js +5 -5
- package/lib-next/theme/Toggle/index.js +34 -37
- package/lib-next/theme/Toggle/styles.module.css +91 -3
- package/lib-next/theme/UserPreferencesProvider/index.js +9 -6
- package/lib-next/theme/hooks/useHideableNavbar.js +31 -44
- package/lib-next/theme/hooks/useTheme.js +4 -5
- package/lib-next/theme/hooks/useWindowSize.js +2 -6
- package/lib-next/theme/prism-include-languages.js +2 -1
- package/lib-next/theme-classic.d.ts +806 -0
- package/lib-next/translations.js +6 -10
- package/lib-next/types.d.ts +0 -629
- package/lib-next/validateThemeConfig.js +141 -116
- package/package.json +27 -24
- package/src/__tests__/validateThemeConfig.test.js +277 -3
- package/src/admonitions.css +35 -0
- package/src/deps.d.ts +13 -0
- package/src/index.ts +23 -17
- package/src/{prism-include-languages.js → prism-include-languages.ts} +0 -0
- package/src/theme/AnnouncementBar/index.tsx +8 -12
- package/src/theme/AnnouncementBar/styles.module.css +23 -32
- package/src/theme/BackToTopButton/index.tsx +142 -0
- package/src/theme/BackToTopButton/styles.module.css +42 -0
- package/src/theme/BlogArchivePage/index.tsx +91 -0
- package/src/theme/BlogLayout/index.tsx +44 -0
- package/src/theme/BlogListPage/index.tsx +18 -25
- package/src/theme/BlogPostAuthor/index.tsx +49 -0
- package/src/theme/BlogPostAuthor/styles.module.css +12 -0
- package/src/theme/BlogPostAuthors/index.tsx +39 -0
- package/src/theme/BlogPostAuthors/styles.module.css +11 -0
- package/src/theme/BlogPostItem/index.tsx +70 -80
- package/src/theme/BlogPostPage/index.tsx +72 -35
- package/src/theme/BlogSidebar/index.tsx +11 -13
- package/src/theme/BlogSidebar/styles.module.css +2 -2
- package/src/theme/BlogTagsListPage/index.tsx +14 -57
- package/src/theme/BlogTagsPostsPage/index.tsx +29 -39
- package/src/theme/CodeBlock/index.tsx +21 -151
- package/src/theme/CodeBlock/styles.module.css +6 -9
- package/src/theme/Details/index.tsx +24 -0
- package/src/theme/Details/styles.module.css +13 -0
- package/src/theme/DocCard/index.tsx +100 -0
- package/src/theme/DocCard/styles.module.css +43 -0
- package/src/theme/DocCardList/index.tsx +27 -0
- package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +53 -0
- package/src/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
- package/src/theme/DocItem/index.tsx +30 -60
- package/src/theme/DocItem/styles.module.css +2 -11
- package/src/theme/DocItemFooter/index.tsx +91 -0
- package/src/theme/DocItemFooter/styles.module.css +18 -0
- package/src/theme/DocPage/index.tsx +44 -22
- package/src/theme/DocPaginator/index.tsx +9 -13
- package/src/theme/DocSidebar/index.tsx +38 -39
- package/src/theme/DocSidebarItem/index.tsx +108 -49
- package/src/theme/DocSidebarItem/styles.module.css +4 -0
- package/src/theme/DocTagDocListPage/index.tsx +89 -0
- package/src/theme/DocTagsListPage/index.tsx +41 -0
- package/src/theme/DocVersionBadge/index.tsx +30 -0
- package/src/theme/DocVersionBanner/index.tsx +48 -21
- package/src/theme/EditThisPage/index.tsx +6 -1
- package/src/theme/ErrorPageContent.tsx +41 -0
- package/src/theme/Footer/index.tsx +20 -5
- package/src/theme/Heading/index.tsx +25 -31
- package/src/theme/Heading/styles.css +5 -6
- package/src/theme/Heading/styles.module.css +9 -5
- package/src/theme/IconArrow/index.tsx +2 -2
- package/src/theme/IconClose/index.tsx +26 -0
- package/src/theme/IconEdit/index.tsx +2 -2
- package/src/theme/IconExternalLink/index.tsx +2 -5
- package/src/theme/IconLanguage/index.tsx +2 -6
- package/src/theme/IconMenu/index.tsx +3 -3
- package/src/theme/LastUpdated/index.tsx +3 -2
- package/src/theme/Layout/index.tsx +3 -1
- package/src/theme/LayoutHead/index.tsx +18 -17
- package/src/theme/LayoutProviders/index.tsx +8 -5
- package/src/theme/Logo/index.tsx +21 -17
- package/src/theme/MDXComponents/index.tsx +39 -5
- package/src/theme/MDXComponents/styles.css +11 -0
- package/src/theme/MDXPage/index.tsx +10 -2
- package/src/theme/Navbar/index.tsx +62 -35
- package/src/theme/Navbar/styles.module.css +3 -39
- package/src/theme/NavbarItem/DefaultNavbarItem.tsx +42 -149
- package/src/theme/NavbarItem/DocNavbarItem.tsx +12 -16
- package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +33 -21
- package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +7 -3
- package/src/theme/NavbarItem/DropdownNavbarItem.tsx +181 -0
- package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +8 -9
- package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
- package/src/theme/NavbarItem/index.tsx +41 -16
- package/src/theme/{SearchMetadatas → SearchMetadata}/index.tsx +2 -2
- package/src/theme/Seo/index.tsx +7 -4
- package/src/theme/TOC/index.tsx +13 -35
- package/src/theme/TOC/styles.module.css +1 -1
- package/src/theme/TOCCollapsible/index.tsx +13 -4
- package/src/theme/TOCCollapsible/styles.module.css +1 -0
- package/src/theme/TOCInline/index.tsx +13 -32
- package/src/theme/TOCItems/index.tsx +96 -0
- package/src/theme/Tabs/__tests__/index.test.tsx +129 -0
- package/src/theme/Tabs/index.tsx +93 -49
- package/src/theme/Tabs/styles.module.css +0 -13
- package/src/theme/Tag/index.tsx +31 -0
- package/src/theme/Tag/styles.module.css +70 -0
- package/src/theme/TagsListByLetter/index.tsx +45 -0
- package/src/theme/TagsListByLetter/styles.module.css +11 -0
- package/src/theme/TagsListInline/index.tsx +35 -0
- package/src/theme/TagsListInline/styles.module.css +15 -0
- package/src/theme/ThemeProvider/index.tsx +6 -2
- package/src/theme/ThemedImage/index.tsx +5 -5
- package/src/theme/Toggle/index.tsx +36 -43
- package/src/theme/Toggle/styles.module.css +91 -3
- package/src/theme/UserPreferencesProvider/index.tsx +9 -6
- package/src/theme/hooks/useHideableNavbar.ts +32 -45
- package/src/theme/hooks/useTabGroupChoice.ts +2 -2
- package/src/theme/hooks/useTheme.ts +4 -5
- package/src/theme/hooks/useWindowSize.ts +2 -7
- package/src/theme/prism-include-languages.ts +3 -2
- package/src/theme-classic.d.ts +806 -0
- package/src/translations.ts +8 -10
- package/src/types.d.ts +0 -629
- package/src/{validateThemeConfig.js → validateThemeConfig.ts} +151 -96
- package/tsconfig.json +1 -2
- package/codeTranslations/README.md +0 -20
- package/codeTranslations/ar.json +0 -56
- package/codeTranslations/base.json +0 -110
- package/codeTranslations/bn.json +0 -56
- package/codeTranslations/da.json +0 -56
- package/codeTranslations/de.json +0 -56
- package/codeTranslations/es.json +0 -56
- package/codeTranslations/fa.json +0 -56
- package/codeTranslations/fil.json +0 -56
- package/codeTranslations/fr.json +0 -56
- package/codeTranslations/he.json +0 -56
- package/codeTranslations/hi.json +0 -56
- package/codeTranslations/ja.json +0 -56
- package/codeTranslations/ko.json +0 -56
- package/codeTranslations/pl.json +0 -56
- package/codeTranslations/pt-BR.json +0 -56
- package/codeTranslations/pt-PT.json +0 -56
- package/codeTranslations/ru.json +0 -56
- package/codeTranslations/tr.json +0 -56
- package/codeTranslations/vi.json +0 -56
- package/codeTranslations/zh-Hans.json +0 -56
- package/codeTranslations/zh-Hant.json +0 -56
- package/lib/theme/Toggle/styles.css +0 -103
- package/lib/theme/hooks/useContextualSearchFilters.js +0 -47
- package/lib/theme/hooks/useScrollPosition.js +0 -49
- package/lib/theme/hooks/useTOCHighlight.js +0 -87
- package/lib-next/theme/Toggle/styles.css +0 -103
- package/lib-next/theme/hooks/useContextualSearchFilters.js +0 -41
- package/lib-next/theme/hooks/useScrollPosition.js +0 -38
- package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
- package/src/theme/Toggle/styles.css +0 -103
- package/src/theme/hooks/useContextualSearchFilters.ts +0 -52
- package/src/theme/hooks/useScrollPosition.ts +0 -45
- package/src/theme/hooks/useTOCHighlight.ts +0 -98
- package/update-code-translations.js +0 -242
- package/update-code-translations.test.js +0 -33
|
@@ -15,22 +15,30 @@ import {
|
|
|
15
15
|
useThemeConfig,
|
|
16
16
|
useMobileSecondaryMenuRenderer,
|
|
17
17
|
usePrevious,
|
|
18
|
+
useHistoryPopHandler,
|
|
18
19
|
} from '@docusaurus/theme-common';
|
|
19
20
|
import useHideableNavbar from '@theme/hooks/useHideableNavbar';
|
|
20
21
|
import useLockBodyScroll from '@theme/hooks/useLockBodyScroll';
|
|
21
22
|
import useWindowSize from '@theme/hooks/useWindowSize';
|
|
22
|
-
import
|
|
23
|
+
import {useActivePlugin} from '@theme/hooks/useDocs';
|
|
24
|
+
import NavbarItem, {Props as NavbarItemConfig} from '@theme/NavbarItem';
|
|
23
25
|
import Logo from '@theme/Logo';
|
|
24
26
|
import IconMenu from '@theme/IconMenu';
|
|
27
|
+
import IconClose from '@theme/IconClose';
|
|
25
28
|
|
|
26
29
|
import styles from './styles.module.css';
|
|
27
30
|
|
|
28
31
|
// retrocompatible with v1
|
|
29
32
|
const DefaultNavItemPosition = 'right';
|
|
30
33
|
|
|
34
|
+
function useNavbarItems() {
|
|
35
|
+
// TODO temporary casting until ThemeConfig type is improved
|
|
36
|
+
return useThemeConfig().navbar.items as NavbarItemConfig[];
|
|
37
|
+
}
|
|
38
|
+
|
|
31
39
|
// If split links by left/right
|
|
32
40
|
// if position is unspecified, fallback to right (as v1)
|
|
33
|
-
function splitNavItemsByPosition(items) {
|
|
41
|
+
function splitNavItemsByPosition(items: NavbarItemConfig[]) {
|
|
34
42
|
const leftItems = items.filter(
|
|
35
43
|
(item) => (item.position ?? DefaultNavItemPosition) === 'left',
|
|
36
44
|
);
|
|
@@ -51,6 +59,18 @@ function useMobileSidebar() {
|
|
|
51
59
|
|
|
52
60
|
const [shown, setShown] = useState(false);
|
|
53
61
|
|
|
62
|
+
// Close mobile sidebar on navigation pop
|
|
63
|
+
// Most likely firing when using the Android back button (but not only)
|
|
64
|
+
useHistoryPopHandler(() => {
|
|
65
|
+
if (shown) {
|
|
66
|
+
setShown(false);
|
|
67
|
+
// Should we prevent the navigation here?
|
|
68
|
+
// See https://github.com/facebook/docusaurus/pull/5462#issuecomment-911699846
|
|
69
|
+
return false; // prevent pop navigation
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
});
|
|
73
|
+
|
|
54
74
|
const toggle = useCallback(() => {
|
|
55
75
|
setShown((s) => !s);
|
|
56
76
|
}, []);
|
|
@@ -85,12 +105,13 @@ function useSecondaryMenu({
|
|
|
85
105
|
});
|
|
86
106
|
const previousContent = usePrevious(content);
|
|
87
107
|
|
|
88
|
-
const [shown, setShown] = useState<boolean>(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
108
|
+
const [shown, setShown] = useState<boolean>(
|
|
109
|
+
() =>
|
|
110
|
+
// /!\ content is set with useEffect,
|
|
111
|
+
// so it's not available on mount anyway
|
|
112
|
+
// "return !!content" => always returns false
|
|
113
|
+
false,
|
|
114
|
+
);
|
|
94
115
|
|
|
95
116
|
// When content is become available for the first time (set in useEffect)
|
|
96
117
|
// we set this content to be shown!
|
|
@@ -132,9 +153,7 @@ function NavbarMobileSidebar({
|
|
|
132
153
|
toggleSidebar,
|
|
133
154
|
}: NavbarMobileSidebarProps) {
|
|
134
155
|
useLockBodyScroll(sidebarShown);
|
|
135
|
-
const
|
|
136
|
-
navbar: {items},
|
|
137
|
-
} = useThemeConfig();
|
|
156
|
+
const items = useNavbarItems();
|
|
138
157
|
|
|
139
158
|
const colorModeToggle = useColorModeToggle();
|
|
140
159
|
|
|
@@ -151,42 +170,49 @@ function NavbarMobileSidebar({
|
|
|
151
170
|
imageClassName="navbar__logo"
|
|
152
171
|
titleClassName="navbar__title"
|
|
153
172
|
/>
|
|
154
|
-
{!colorModeToggle.disabled &&
|
|
173
|
+
{!colorModeToggle.disabled && (
|
|
155
174
|
<Toggle
|
|
175
|
+
className={styles.navbarSidebarToggle}
|
|
156
176
|
checked={colorModeToggle.isDarkTheme}
|
|
157
177
|
onChange={colorModeToggle.toggle}
|
|
158
178
|
/>
|
|
159
179
|
)}
|
|
180
|
+
<button
|
|
181
|
+
type="button"
|
|
182
|
+
className="clean-btn navbar-sidebar__close"
|
|
183
|
+
onClick={toggleSidebar}>
|
|
184
|
+
<IconClose
|
|
185
|
+
color="var(--ifm-color-emphasis-600)"
|
|
186
|
+
className={styles.navbarSidebarCloseSvg}
|
|
187
|
+
/>
|
|
188
|
+
</button>
|
|
160
189
|
</div>
|
|
161
190
|
|
|
162
191
|
<div
|
|
163
|
-
className={clsx('navbar-sidebar__items',
|
|
164
|
-
|
|
192
|
+
className={clsx('navbar-sidebar__items', {
|
|
193
|
+
'navbar-sidebar__items--show-secondary': secondaryMenu.shown,
|
|
165
194
|
})}>
|
|
166
|
-
<div className="menu">
|
|
195
|
+
<div className="navbar-sidebar__item menu">
|
|
167
196
|
<ul className="menu__list">
|
|
168
197
|
{items.map((item, i) => (
|
|
169
|
-
<NavbarItem
|
|
170
|
-
mobile
|
|
171
|
-
{...(item as any)} // TODO fix typing
|
|
172
|
-
onClick={toggleSidebar}
|
|
173
|
-
key={i}
|
|
174
|
-
/>
|
|
198
|
+
<NavbarItem mobile {...item} onClick={toggleSidebar} key={i} />
|
|
175
199
|
))}
|
|
176
200
|
</ul>
|
|
177
201
|
</div>
|
|
178
202
|
|
|
179
|
-
<div className=
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
203
|
+
<div className="navbar-sidebar__item menu">
|
|
204
|
+
{items.length > 0 && (
|
|
205
|
+
<button
|
|
206
|
+
type="button"
|
|
207
|
+
className="clean-btn navbar-sidebar__back"
|
|
208
|
+
onClick={secondaryMenu.hide}>
|
|
209
|
+
<Translate
|
|
210
|
+
id="theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel"
|
|
211
|
+
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)">
|
|
212
|
+
← Back to main menu
|
|
213
|
+
</Translate>
|
|
214
|
+
</button>
|
|
215
|
+
)}
|
|
190
216
|
{secondaryMenu.content}
|
|
191
217
|
</div>
|
|
192
218
|
</div>
|
|
@@ -196,14 +222,15 @@ function NavbarMobileSidebar({
|
|
|
196
222
|
|
|
197
223
|
function Navbar(): JSX.Element {
|
|
198
224
|
const {
|
|
199
|
-
navbar: {
|
|
225
|
+
navbar: {hideOnScroll, style},
|
|
200
226
|
} = useThemeConfig();
|
|
201
227
|
|
|
202
228
|
const mobileSidebar = useMobileSidebar();
|
|
203
229
|
const colorModeToggle = useColorModeToggle();
|
|
204
|
-
|
|
230
|
+
const activeDocPlugin = useActivePlugin();
|
|
205
231
|
const {navbarRef, isNavbarVisible} = useHideableNavbar(hideOnScroll);
|
|
206
232
|
|
|
233
|
+
const items = useNavbarItems();
|
|
207
234
|
const hasSearchNavbarItem = items.some((item) => item.type === 'search');
|
|
208
235
|
const {leftItems, rightItems} = splitNavItemsByPosition(items);
|
|
209
236
|
|
|
@@ -219,7 +246,7 @@ function Navbar(): JSX.Element {
|
|
|
219
246
|
})}>
|
|
220
247
|
<div className="navbar__inner">
|
|
221
248
|
<div className="navbar__items">
|
|
222
|
-
{items?.length > 0 && (
|
|
249
|
+
{(items?.length > 0 || activeDocPlugin) && (
|
|
223
250
|
<button
|
|
224
251
|
aria-label="Navigation bar toggle"
|
|
225
252
|
className="navbar__toggle clean-btn"
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
/*
|
|
9
9
|
Hide toggle in small viewports
|
|
10
10
|
*/
|
|
11
|
-
@media
|
|
11
|
+
@media (max-width: 996px) {
|
|
12
12
|
.toggle {
|
|
13
13
|
display: none;
|
|
14
14
|
}
|
|
@@ -22,42 +22,6 @@ Hide toggle in small viewports
|
|
|
22
22
|
transform: translate3d(0, calc(-100% - 2px), 0);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
:global(.navbar-sidebar) {
|
|
30
|
-
overflow-x: hidden;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.menuWrapper {
|
|
34
|
-
display: flex;
|
|
35
|
-
width: calc(var(--ifm-navbar-sidebar-width));
|
|
36
|
-
transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
37
|
-
transform: translateZ(0);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.menuWrapperSecondaryMenuShown {
|
|
41
|
-
transform: translate3d(calc((var(--ifm-navbar-sidebar-width)) * -1), 0, 0);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.menuWrapper > div {
|
|
45
|
-
flex-shrink: 0;
|
|
46
|
-
width: calc(var(--ifm-navbar-sidebar-width));
|
|
47
|
-
font-weight: var(--ifm-font-weight-semibold);
|
|
48
|
-
padding: 0.5rem;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.backButton {
|
|
52
|
-
width: calc(100% + 1rem);
|
|
53
|
-
margin: 0 0 0.7rem -0.5rem;
|
|
54
|
-
text-align: left;
|
|
55
|
-
font-size: 15px;
|
|
56
|
-
padding: 0.6rem 1.5rem;
|
|
57
|
-
background: var(--ifm-menu-color-background-active);
|
|
58
|
-
font-weight: var(--ifm-button-font-weight);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.secondaryMenu {
|
|
62
|
-
padding-top: 0 !important;
|
|
25
|
+
.navbarSidebarToggle {
|
|
26
|
+
margin-right: 1rem;
|
|
63
27
|
}
|
|
@@ -5,16 +5,10 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import React
|
|
8
|
+
import React from 'react';
|
|
9
9
|
import clsx from 'clsx';
|
|
10
10
|
import Link from '@docusaurus/Link';
|
|
11
11
|
import useBaseUrl from '@docusaurus/useBaseUrl';
|
|
12
|
-
import {useLocation} from '@docusaurus/router';
|
|
13
|
-
import {
|
|
14
|
-
isSamePath,
|
|
15
|
-
useCollapsible,
|
|
16
|
-
Collapsible,
|
|
17
|
-
} from '@docusaurus/theme-common';
|
|
18
12
|
import type {
|
|
19
13
|
NavLinkProps,
|
|
20
14
|
DesktopOrMobileNavBarItemProps,
|
|
@@ -22,19 +16,21 @@ import type {
|
|
|
22
16
|
} from '@theme/NavbarItem/DefaultNavbarItem';
|
|
23
17
|
import IconExternalLink from '@theme/IconExternalLink';
|
|
24
18
|
import isInternalUrl from '@docusaurus/isInternalUrl';
|
|
19
|
+
import {isRegexpStringMatch} from '@docusaurus/theme-common';
|
|
20
|
+
import {getInfimaActiveClassName} from './index';
|
|
25
21
|
|
|
26
22
|
const dropdownLinkActiveClass = 'dropdown__link--active';
|
|
27
23
|
|
|
28
|
-
function NavLink({
|
|
24
|
+
export function NavLink({
|
|
29
25
|
activeBasePath,
|
|
30
26
|
activeBaseRegex,
|
|
31
27
|
to,
|
|
32
28
|
href,
|
|
33
29
|
label,
|
|
34
|
-
activeClassName = '
|
|
30
|
+
activeClassName = '',
|
|
35
31
|
prependBaseUrlToHref,
|
|
36
32
|
...props
|
|
37
|
-
}: NavLinkProps) {
|
|
33
|
+
}: NavLinkProps): JSX.Element {
|
|
38
34
|
// TODO all this seems hacky
|
|
39
35
|
// {to: 'version'} should probably be forbidden, in favor of {to: '/version'}
|
|
40
36
|
const toUrl = useBaseUrl(to);
|
|
@@ -51,13 +47,15 @@ function NavLink({
|
|
|
51
47
|
}
|
|
52
48
|
: {
|
|
53
49
|
isNavLink: true,
|
|
54
|
-
activeClassName
|
|
50
|
+
activeClassName: !props.className?.includes(activeClassName)
|
|
51
|
+
? activeClassName
|
|
52
|
+
: '',
|
|
55
53
|
to: toUrl,
|
|
56
54
|
...(activeBasePath || activeBaseRegex
|
|
57
55
|
? {
|
|
58
56
|
isActive: (_match, location) =>
|
|
59
57
|
activeBaseRegex
|
|
60
|
-
?
|
|
58
|
+
? isRegexpStringMatch(activeBaseRegex, location.pathname)
|
|
61
59
|
: location.pathname.startsWith(activeBaseUrl),
|
|
62
60
|
}
|
|
63
61
|
: null),
|
|
@@ -75,159 +73,54 @@ function NavLink({
|
|
|
75
73
|
);
|
|
76
74
|
}
|
|
77
75
|
|
|
78
|
-
function
|
|
79
|
-
items,
|
|
80
|
-
position,
|
|
76
|
+
function DefaultNavbarItemDesktop({
|
|
81
77
|
className,
|
|
78
|
+
isDropdownItem = false,
|
|
82
79
|
...props
|
|
83
80
|
}: DesktopOrMobileNavBarItemProps) {
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
setShowDropdown(false);
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
document.addEventListener('mousedown', handleClickOutside);
|
|
98
|
-
document.addEventListener('touchstart', handleClickOutside);
|
|
99
|
-
|
|
100
|
-
return () => {
|
|
101
|
-
document.removeEventListener('mousedown', handleClickOutside);
|
|
102
|
-
document.removeEventListener('touchstart', handleClickOutside);
|
|
103
|
-
};
|
|
104
|
-
}, [dropdownRef]);
|
|
105
|
-
|
|
106
|
-
const navLinkClassNames = (extraClassName?: string, isDropdownItem = false) =>
|
|
107
|
-
clsx(
|
|
108
|
-
{
|
|
109
|
-
'navbar__item navbar__link': !isDropdownItem,
|
|
110
|
-
dropdown__link: isDropdownItem,
|
|
111
|
-
},
|
|
112
|
-
extraClassName,
|
|
113
|
-
);
|
|
81
|
+
const element = (
|
|
82
|
+
<NavLink
|
|
83
|
+
className={clsx(
|
|
84
|
+
isDropdownItem ? 'dropdown__link' : 'navbar__item navbar__link',
|
|
85
|
+
className,
|
|
86
|
+
)}
|
|
87
|
+
{...props}
|
|
88
|
+
/>
|
|
89
|
+
);
|
|
114
90
|
|
|
115
|
-
if (
|
|
116
|
-
return <
|
|
91
|
+
if (isDropdownItem) {
|
|
92
|
+
return <li>{element}</li>;
|
|
117
93
|
}
|
|
118
94
|
|
|
119
|
-
return
|
|
120
|
-
<div
|
|
121
|
-
ref={dropdownRef}
|
|
122
|
-
className={clsx('navbar__item', 'dropdown', 'dropdown--hoverable', {
|
|
123
|
-
'dropdown--left': position === 'left',
|
|
124
|
-
'dropdown--right': position === 'right',
|
|
125
|
-
'dropdown--show': showDropdown,
|
|
126
|
-
})}>
|
|
127
|
-
<NavLink
|
|
128
|
-
className={navLinkClassNames(className)}
|
|
129
|
-
{...props}
|
|
130
|
-
onClick={props.to ? undefined : (e) => e.preventDefault()}
|
|
131
|
-
onKeyDown={(e) => {
|
|
132
|
-
if (e.key === 'Enter') {
|
|
133
|
-
e.preventDefault();
|
|
134
|
-
setShowDropdown(!showDropdown);
|
|
135
|
-
}
|
|
136
|
-
}}>
|
|
137
|
-
{props.children ?? props.label}
|
|
138
|
-
</NavLink>
|
|
139
|
-
<ul ref={dropdownMenuRef} className="dropdown__menu">
|
|
140
|
-
{items.map(({className: childItemClassName, ...childItemProps}, i) => (
|
|
141
|
-
<li key={i}>
|
|
142
|
-
<NavLink
|
|
143
|
-
onKeyDown={(e) => {
|
|
144
|
-
if (i === items.length - 1 && e.key === 'Tab') {
|
|
145
|
-
e.preventDefault();
|
|
146
|
-
|
|
147
|
-
setShowDropdown(false);
|
|
148
|
-
|
|
149
|
-
const nextNavbarItem = (dropdownRef.current as HTMLElement)
|
|
150
|
-
.nextElementSibling;
|
|
151
|
-
|
|
152
|
-
if (nextNavbarItem) {
|
|
153
|
-
(nextNavbarItem as HTMLElement).focus();
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}}
|
|
157
|
-
activeClassName={dropdownLinkActiveClass}
|
|
158
|
-
className={navLinkClassNames(childItemClassName, true)}
|
|
159
|
-
{...childItemProps}
|
|
160
|
-
/>
|
|
161
|
-
</li>
|
|
162
|
-
))}
|
|
163
|
-
</ul>
|
|
164
|
-
</div>
|
|
165
|
-
);
|
|
95
|
+
return element;
|
|
166
96
|
}
|
|
167
97
|
|
|
168
|
-
function
|
|
169
|
-
items,
|
|
98
|
+
function DefaultNavbarItemMobile({
|
|
170
99
|
className,
|
|
171
|
-
|
|
100
|
+
isDropdownItem: _isDropdownItem,
|
|
172
101
|
...props
|
|
173
102
|
}: DesktopOrMobileNavBarItemProps) {
|
|
174
|
-
const {pathname} = useLocation();
|
|
175
|
-
const {collapsed, toggleCollapsed} = useCollapsible({
|
|
176
|
-
initialState: () =>
|
|
177
|
-
!items?.some((item) => isSamePath(item.to, pathname)) ?? true,
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
const navLinkClassNames = (extraClassName?: string, isSubList = false) =>
|
|
181
|
-
clsx(
|
|
182
|
-
'menu__link',
|
|
183
|
-
{
|
|
184
|
-
'menu__link--sublist': isSubList,
|
|
185
|
-
},
|
|
186
|
-
extraClassName,
|
|
187
|
-
);
|
|
188
|
-
|
|
189
|
-
if (!items) {
|
|
190
|
-
return (
|
|
191
|
-
<li className="menu__list-item">
|
|
192
|
-
<NavLink className={navLinkClassNames(className)} {...props} />
|
|
193
|
-
</li>
|
|
194
|
-
);
|
|
195
|
-
}
|
|
196
|
-
|
|
197
103
|
return (
|
|
198
|
-
<li
|
|
199
|
-
className={clsx('
|
|
200
|
-
'menu__list-item--collapsed': collapsed,
|
|
201
|
-
})}>
|
|
202
|
-
<NavLink
|
|
203
|
-
role="button"
|
|
204
|
-
className={navLinkClassNames(className, true)}
|
|
205
|
-
{...props}
|
|
206
|
-
onClick={(e) => {
|
|
207
|
-
e.preventDefault();
|
|
208
|
-
toggleCollapsed();
|
|
209
|
-
}}>
|
|
210
|
-
{props.children ?? props.label}
|
|
211
|
-
</NavLink>
|
|
212
|
-
<Collapsible as="ul" className="menu__list" collapsed={collapsed}>
|
|
213
|
-
{items.map(({className: childItemClassName, ...childItemProps}, i) => (
|
|
214
|
-
<li className="menu__list-item" key={i}>
|
|
215
|
-
<NavLink
|
|
216
|
-
activeClassName="menu__link--active"
|
|
217
|
-
className={navLinkClassNames(childItemClassName)}
|
|
218
|
-
{...childItemProps}
|
|
219
|
-
onClick={props.onClick}
|
|
220
|
-
/>
|
|
221
|
-
</li>
|
|
222
|
-
))}
|
|
223
|
-
</Collapsible>
|
|
104
|
+
<li className="menu__list-item">
|
|
105
|
+
<NavLink className={clsx('menu__link', className)} {...props} />
|
|
224
106
|
</li>
|
|
225
107
|
);
|
|
226
108
|
}
|
|
227
109
|
|
|
228
|
-
function DefaultNavbarItem({
|
|
229
|
-
|
|
230
|
-
|
|
110
|
+
function DefaultNavbarItem({
|
|
111
|
+
mobile = false,
|
|
112
|
+
position: _position, // Need to destructure position from props so that it doesn't get passed on.
|
|
113
|
+
...props
|
|
114
|
+
}: Props): JSX.Element {
|
|
115
|
+
const Comp = mobile ? DefaultNavbarItemMobile : DefaultNavbarItemDesktop;
|
|
116
|
+
return (
|
|
117
|
+
<Comp
|
|
118
|
+
{...props}
|
|
119
|
+
activeClassName={
|
|
120
|
+
props.activeClassName ?? getInfimaActiveClassName(mobile)
|
|
121
|
+
}
|
|
122
|
+
/>
|
|
123
|
+
);
|
|
231
124
|
}
|
|
232
125
|
|
|
233
126
|
export default DefaultNavbarItem;
|
|
@@ -9,20 +9,13 @@ import React from 'react';
|
|
|
9
9
|
import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
|
|
10
10
|
import {useLatestVersion, useActiveDocContext} from '@theme/hooks/useDocs';
|
|
11
11
|
import clsx from 'clsx';
|
|
12
|
+
import {getInfimaActiveClassName} from './index';
|
|
12
13
|
import type {Props} from '@theme/NavbarItem/DocNavbarItem';
|
|
13
|
-
import {useDocsPreferredVersion} from '@docusaurus/theme-common';
|
|
14
|
-
import {
|
|
15
|
-
import type {
|
|
16
|
-
GlobalDataVersion,
|
|
17
|
-
GlobalDataDoc,
|
|
18
|
-
} from '@docusaurus/plugin-content-docs-types';
|
|
14
|
+
import {useDocsPreferredVersion, uniq} from '@docusaurus/theme-common';
|
|
15
|
+
import type {GlobalDataVersion} from '@docusaurus/plugin-content-docs';
|
|
19
16
|
|
|
20
17
|
function getDocInVersions(versions: GlobalDataVersion[], docId: string) {
|
|
21
|
-
|
|
22
|
-
const allDocs: GlobalDataDoc[] = [].concat(
|
|
23
|
-
...versions.map((version) => version.docs),
|
|
24
|
-
);
|
|
25
|
-
|
|
18
|
+
const allDocs = versions.flatMap((version) => version.docs);
|
|
26
19
|
const doc = allDocs.find((versionDoc) => versionDoc.id === docId);
|
|
27
20
|
if (!doc) {
|
|
28
21
|
const docIds = allDocs.map((versionDoc) => versionDoc.id).join('\n- ');
|
|
@@ -38,7 +31,6 @@ Available doc ids are:\n- ${docIds}`,
|
|
|
38
31
|
|
|
39
32
|
export default function DocNavbarItem({
|
|
40
33
|
docId,
|
|
41
|
-
activeSidebarClassName,
|
|
42
34
|
label: staticLabel,
|
|
43
35
|
docsPluginId,
|
|
44
36
|
...props
|
|
@@ -48,19 +40,23 @@ export default function DocNavbarItem({
|
|
|
48
40
|
const latestVersion = useLatestVersion(docsPluginId);
|
|
49
41
|
|
|
50
42
|
// Versions used to look for the doc to link to, ordered + no duplicate
|
|
51
|
-
const versions
|
|
52
|
-
[activeVersion, preferredVersion, latestVersion].filter(
|
|
43
|
+
const versions = uniq(
|
|
44
|
+
[activeVersion, preferredVersion, latestVersion].filter(
|
|
45
|
+
Boolean,
|
|
46
|
+
) as GlobalDataVersion[],
|
|
53
47
|
);
|
|
54
48
|
const doc = getDocInVersions(versions, docId);
|
|
49
|
+
const activeDocInfimaClassName = getInfimaActiveClassName(props.mobile);
|
|
55
50
|
|
|
56
51
|
return (
|
|
57
52
|
<DefaultNavbarItem
|
|
58
53
|
exact
|
|
59
54
|
{...props}
|
|
60
55
|
className={clsx(props.className, {
|
|
61
|
-
[
|
|
62
|
-
activeDoc && activeDoc.sidebar === doc.sidebar,
|
|
56
|
+
[activeDocInfimaClassName]:
|
|
57
|
+
activeDoc?.sidebar && activeDoc.sidebar === doc.sidebar,
|
|
63
58
|
})}
|
|
59
|
+
activeClassName={activeDocInfimaClassName}
|
|
64
60
|
label={staticLabel ?? doc.id}
|
|
65
61
|
to={doc.path}
|
|
66
62
|
/>
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import React from 'react';
|
|
9
9
|
import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
|
|
10
|
+
import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
|
|
10
11
|
import {
|
|
11
12
|
useVersions,
|
|
12
13
|
useLatestVersion,
|
|
@@ -14,9 +15,11 @@ import {
|
|
|
14
15
|
} from '@theme/hooks/useDocs';
|
|
15
16
|
import type {Props} from '@theme/NavbarItem/DocsVersionDropdownNavbarItem';
|
|
16
17
|
import {useDocsPreferredVersion} from '@docusaurus/theme-common';
|
|
18
|
+
import {translate} from '@docusaurus/Translate';
|
|
19
|
+
import type {GlobalDataVersion} from '@docusaurus/plugin-content-docs';
|
|
17
20
|
|
|
18
|
-
const getVersionMainDoc = (version) =>
|
|
19
|
-
version.docs.find((doc) => doc.id === version.mainDocId)
|
|
21
|
+
const getVersionMainDoc = (version: GlobalDataVersion) =>
|
|
22
|
+
version.docs.find((doc) => doc.id === version.mainDocId)!;
|
|
20
23
|
|
|
21
24
|
export default function DocsVersionDropdownNavbarItem({
|
|
22
25
|
mobile,
|
|
@@ -30,9 +33,8 @@ export default function DocsVersionDropdownNavbarItem({
|
|
|
30
33
|
const versions = useVersions(docsPluginId);
|
|
31
34
|
const latestVersion = useLatestVersion(docsPluginId);
|
|
32
35
|
|
|
33
|
-
const {preferredVersion, savePreferredVersionName} =
|
|
34
|
-
docsPluginId
|
|
35
|
-
);
|
|
36
|
+
const {preferredVersion, savePreferredVersionName} =
|
|
37
|
+
useDocsPreferredVersion(docsPluginId);
|
|
36
38
|
|
|
37
39
|
function getItems() {
|
|
38
40
|
const versionLinks = versions.map((version) => {
|
|
@@ -52,20 +54,7 @@ export default function DocsVersionDropdownNavbarItem({
|
|
|
52
54
|
};
|
|
53
55
|
});
|
|
54
56
|
|
|
55
|
-
|
|
56
|
-
...dropdownItemsBefore,
|
|
57
|
-
...versionLinks,
|
|
58
|
-
...dropdownItemsAfter,
|
|
59
|
-
];
|
|
60
|
-
|
|
61
|
-
// We don't want to render a version dropdown with 0 or 1 item
|
|
62
|
-
// If we build the site with a single docs version (onlyIncludeVersions: ['1.0.0'])
|
|
63
|
-
// We'd rather render a button instead of a dropdown
|
|
64
|
-
if (items.length <= 1) {
|
|
65
|
-
return undefined;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return items;
|
|
57
|
+
return [...dropdownItemsBefore, ...versionLinks, ...dropdownItemsAfter];
|
|
69
58
|
}
|
|
70
59
|
|
|
71
60
|
const items = getItems();
|
|
@@ -74,12 +63,35 @@ export default function DocsVersionDropdownNavbarItem({
|
|
|
74
63
|
activeDocContext.activeVersion ?? preferredVersion ?? latestVersion;
|
|
75
64
|
|
|
76
65
|
// Mobile dropdown is handled a bit differently
|
|
77
|
-
const dropdownLabel =
|
|
66
|
+
const dropdownLabel =
|
|
67
|
+
mobile && items
|
|
68
|
+
? translate({
|
|
69
|
+
id: 'theme.navbar.mobileVersionsDropdown.label',
|
|
70
|
+
message: 'Versions',
|
|
71
|
+
description:
|
|
72
|
+
'The label for the navbar versions dropdown on mobile view',
|
|
73
|
+
})
|
|
74
|
+
: dropdownVersion.label;
|
|
78
75
|
const dropdownTo =
|
|
79
76
|
mobile && items ? undefined : getVersionMainDoc(dropdownVersion).path;
|
|
80
77
|
|
|
78
|
+
// We don't want to render a version dropdown with 0 or 1 item
|
|
79
|
+
// If we build the site with a single docs version (onlyIncludeVersions: ['1.0.0'])
|
|
80
|
+
// We'd rather render a button instead of a dropdown
|
|
81
|
+
if (items.length <= 1) {
|
|
82
|
+
return (
|
|
83
|
+
<DefaultNavbarItem
|
|
84
|
+
{...props}
|
|
85
|
+
mobile={mobile}
|
|
86
|
+
label={dropdownLabel}
|
|
87
|
+
to={dropdownTo}
|
|
88
|
+
isActive={dropdownActiveClassDisabled ? () => false : undefined}
|
|
89
|
+
/>
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
81
93
|
return (
|
|
82
|
-
<
|
|
94
|
+
<DropdownNavbarItem
|
|
83
95
|
{...props}
|
|
84
96
|
mobile={mobile}
|
|
85
97
|
label={dropdownLabel}
|
|
@@ -7,12 +7,16 @@
|
|
|
7
7
|
|
|
8
8
|
import React from 'react';
|
|
9
9
|
import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
useActiveVersion,
|
|
12
|
+
useLatestVersion,
|
|
13
|
+
GlobalVersion,
|
|
14
|
+
} from '@theme/hooks/useDocs';
|
|
11
15
|
import type {Props} from '@theme/NavbarItem/DocsVersionNavbarItem';
|
|
12
16
|
import {useDocsPreferredVersion} from '@docusaurus/theme-common';
|
|
13
17
|
|
|
14
|
-
const getVersionMainDoc = (version) =>
|
|
15
|
-
version.docs.find((doc) => doc.id === version.mainDocId)
|
|
18
|
+
const getVersionMainDoc = (version: GlobalVersion) =>
|
|
19
|
+
version.docs.find((doc) => doc.id === version.mainDocId)!;
|
|
16
20
|
|
|
17
21
|
export default function DocsVersionNavbarItem({
|
|
18
22
|
label: staticLabel,
|