@docusaurus/theme-classic 2.0.0-beta.138b4c997 → 2.0.0-beta.14
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/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-next/types.d.ts → lib/theme-classic.d.ts} +374 -150
- package/lib/translations.js +16 -7
- package/lib/types.d.ts +0 -587
- package/lib/validateThemeConfig.js +232 -246
- package/lib-next/theme/Admonition/index.js +101 -0
- 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/theme/MDXPage → lib-next/theme/BlogPostAuthor}/styles.module.css +4 -2
- package/lib-next/theme/BlogPostAuthors/index.js +34 -0
- package/{lib/theme/IconExternalLink → lib-next/theme/BlogPostAuthors}/styles.module.css +3 -4
- 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 +23 -149
- package/lib-next/theme/CodeBlock/styles.module.css +12 -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 +40 -51
- package/lib-next/theme/DocItem/styles.module.css +5 -9
- package/lib-next/theme/DocItemFooter/index.js +79 -0
- package/{lib/theme/DocItem → lib-next/theme/DocItemFooter}/styles.module.css +1 -9
- package/lib-next/theme/DocPage/index.js +46 -49
- package/lib-next/theme/DocPage/styles.module.css +5 -6
- package/lib-next/theme/DocPaginator/index.js +5 -33
- package/lib-next/theme/DocPaginatorNavLink/index.js +36 -0
- package/lib-next/theme/DocSidebar/index.js +65 -285
- package/lib-next/theme/DocSidebar/styles.module.css +0 -18
- package/lib-next/theme/DocSidebarItem/index.js +217 -0
- package/{lib/theme/ThemedImage → lib-next/theme/DocSidebarItem}/styles.module.css +10 -9
- 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 +100 -40
- package/lib-next/theme/Heading/index.js +24 -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 +9 -3
- package/lib-next/theme/Logo/index.js +25 -21
- package/lib-next/theme/MDXComponents/index.js +34 -7
- package/{lib/theme/hooks → lib-next/theme/MDXComponents}/styles.css +3 -2
- package/lib-next/theme/MDXPage/index.js +10 -2
- package/lib-next/theme/Navbar/index.js +193 -56
- package/lib-next/theme/Navbar/styles.module.css +10 -3
- package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +45 -147
- 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 +158 -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/SkipToContent/index.js +5 -2
- 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 +54 -0
- package/lib-next/theme/TOCCollapsible/styles.module.css +50 -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 +103 -48
- 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 +34 -20
- package/lib-next/theme/prism-include-languages.js +2 -1
- package/package.json +27 -25
- package/src/admonitions.css +35 -0
- package/src/deps.d.ts +13 -0
- package/src/index.ts +23 -20
- package/{lib-next/prism-include-languages.js → src/prism-include-languages.ts} +0 -0
- package/src/theme/Admonition/index.tsx +106 -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/{lib/theme/IconEdit → src/theme/BlogPostAuthor}/styles.module.css +4 -3
- 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 +27 -151
- package/src/theme/CodeBlock/styles.module.css +12 -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 +43 -51
- package/src/theme/DocItem/styles.module.css +5 -9
- package/src/theme/DocItemFooter/index.tsx +91 -0
- package/{lib/theme/BlogPostItem → src/theme/DocItemFooter}/styles.module.css +8 -8
- package/src/theme/DocPage/index.tsx +44 -42
- package/src/theme/DocPage/styles.module.css +5 -6
- package/src/theme/DocPaginator/index.tsx +5 -33
- package/src/theme/DocPaginatorNavLink/index.tsx +38 -0
- package/src/theme/DocSidebar/index.tsx +76 -297
- package/src/theme/DocSidebar/styles.module.css +0 -18
- package/src/theme/DocSidebarItem/index.tsx +242 -0
- package/{lib/theme/Footer → src/theme/DocSidebarItem}/styles.module.css +10 -6
- 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 +113 -43
- package/src/theme/Heading/index.tsx +24 -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 +9 -3
- 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 +203 -61
- package/src/theme/Navbar/styles.module.css +10 -3
- package/src/theme/NavbarItem/DefaultNavbarItem.tsx +42 -154
- 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 +180 -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/SkipToContent/index.tsx +5 -2
- package/src/theme/TOC/index.tsx +12 -41
- package/src/theme/TOC/styles.module.css +1 -1
- package/src/theme/TOCCollapsible/index.tsx +58 -0
- package/src/theme/TOCCollapsible/styles.module.css +50 -0
- package/src/theme/TOCInline/index.tsx +13 -32
- package/src/theme/TOCItems/index.tsx +96 -0
- package/src/theme/Tabs/index.tsx +110 -54
- 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 +38 -20
- package/src/theme/prism-include-languages.ts +3 -2
- package/src/theme-classic.d.ts +822 -0
- package/src/translations.ts +41 -23
- package/src/types.d.ts +0 -587
- package/src/{validateThemeConfig.js → validateThemeConfig.ts} +160 -98
- package/babel.config.js +0 -35
- package/codeTranslations/README.md +0 -20
- package/codeTranslations/ar.json +0 -57
- package/codeTranslations/base.json +0 -112
- package/codeTranslations/bn.json +0 -56
- package/codeTranslations/da.json +0 -57
- package/codeTranslations/de.json +0 -57
- package/codeTranslations/es.json +0 -57
- package/codeTranslations/fa.json +0 -57
- package/codeTranslations/fil.json +0 -57
- package/codeTranslations/fr.json +0 -57
- package/codeTranslations/he.json +0 -57
- package/codeTranslations/hi.json +0 -57
- package/codeTranslations/ja.json +0 -57
- package/codeTranslations/ko.json +0 -57
- package/codeTranslations/pl.json +0 -57
- package/codeTranslations/pt-BR.json +0 -57
- package/codeTranslations/pt-PT.json +0 -57
- package/codeTranslations/ru.json +0 -57
- package/codeTranslations/tr.json +0 -57
- package/codeTranslations/vi.json +0 -57
- package/codeTranslations/zh-Hans.json +0 -57
- package/codeTranslations/zh-Hant.json +0 -57
- package/lib/__tests__/__snapshots__/translations.test.ts.snap +0 -116
- package/lib/__tests__/translations.test.js +0 -112
- package/lib/__tests__/validateThemeConfig.test.js +0 -333
- package/lib/theme/AnnouncementBar/index.js +0 -72
- package/lib/theme/AnnouncementBar/styles.module.css +0 -72
- package/lib/theme/BlogListPage/index.js +0 -71
- package/lib/theme/BlogListPaginator/index.js +0 -63
- package/lib/theme/BlogPostItem/index.js +0 -161
- package/lib/theme/BlogPostPage/index.js +0 -69
- package/lib/theme/BlogPostPaginator/index.js +0 -64
- package/lib/theme/BlogSidebar/index.js +0 -51
- package/lib/theme/BlogSidebar/styles.module.css +0 -44
- package/lib/theme/BlogTagsListPage/index.js +0 -76
- package/lib/theme/BlogTagsPostsPage/index.js +0 -100
- package/lib/theme/CodeBlock/index.js +0 -253
- package/lib/theme/CodeBlock/styles.module.css +0 -68
- package/lib/theme/DocItem/index.js +0 -129
- package/lib/theme/DocPage/index.js +0 -173
- package/lib/theme/DocPage/styles.module.css +0 -86
- package/lib/theme/DocPaginator/index.js +0 -63
- package/lib/theme/DocSidebar/index.js +0 -306
- package/lib/theme/DocSidebar/styles.module.css +0 -124
- package/lib/theme/DocVersionBanner/index.js +0 -128
- package/lib/theme/EditThisPage/index.js +0 -31
- package/lib/theme/Footer/index.js +0 -108
- package/lib/theme/Heading/index.js +0 -76
- package/lib/theme/Heading/styles.css +0 -23
- package/lib/theme/Heading/styles.module.css +0 -15
- package/lib/theme/IconArrow/index.js +0 -28
- package/lib/theme/IconEdit/index.js +0 -34
- package/lib/theme/IconExternalLink/index.js +0 -30
- package/lib/theme/IconLanguage/index.js +0 -29
- package/lib/theme/IconMenu/index.js +0 -30
- package/lib/theme/LastUpdated/index.js +0 -61
- package/lib/theme/Layout/index.js +0 -64
- package/lib/theme/Layout/styles.css +0 -27
- package/lib/theme/LayoutHead/index.js +0 -144
- package/lib/theme/LayoutProviders/index.js +0 -36
- package/lib/theme/Logo/index.js +0 -60
- package/lib/theme/MDXComponents/index.js +0 -65
- package/lib/theme/MDXPage/index.js +0 -66
- package/lib/theme/Navbar/index.js +0 -147
- package/lib/theme/Navbar/styles.module.css +0 -20
- package/lib/theme/NavbarItem/DefaultNavbarItem.js +0 -209
- package/lib/theme/NavbarItem/DocNavbarItem.js +0 -63
- package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +0 -76
- package/lib/theme/NavbarItem/DocsVersionNavbarItem.js +0 -43
- package/lib/theme/NavbarItem/LocaleDropdownNavbarItem.js +0 -72
- package/lib/theme/NavbarItem/SearchNavbarItem.js +0 -28
- package/lib/theme/NavbarItem/index.js +0 -54
- package/lib/theme/NotFound.js +0 -57
- package/lib/theme/SearchBar.js +0 -15
- package/lib/theme/SearchMetadatas/index.js +0 -33
- package/lib/theme/Seo/index.js +0 -49
- package/lib/theme/SkipToContent/index.js +0 -63
- package/lib/theme/SkipToContent/styles.module.css +0 -14
- package/lib/theme/TOC/index.js +0 -59
- package/lib/theme/TOC/styles.module.css +0 -23
- package/lib/theme/TOCInline/index.js +0 -53
- package/lib/theme/TOCInline/styles.module.css +0 -12
- package/lib/theme/TabItem/index.js +0 -32
- package/lib/theme/Tabs/index.js +0 -150
- package/lib/theme/Tabs/styles.module.css +0 -23
- package/lib/theme/ThemeContext.js +0 -21
- package/lib/theme/ThemeProvider/index.js +0 -38
- package/lib/theme/ThemedImage/index.js +0 -49
- package/lib/theme/Toggle/index.js +0 -94
- package/lib/theme/Toggle/styles.css +0 -103
- package/lib/theme/Toggle/styles.module.css +0 -17
- package/lib/theme/UserPreferencesContext.js +0 -18
- package/lib/theme/UserPreferencesProvider/index.js +0 -36
- package/lib/theme/hooks/useContextualSearchFilters.js +0 -47
- package/lib/theme/hooks/useDocs.js +0 -18
- package/lib/theme/hooks/useHideableNavbar.js +0 -92
- package/lib/theme/hooks/useKeyboardNavigation.js +0 -45
- package/lib/theme/hooks/useLocationHash.js +0 -28
- package/lib/theme/hooks/useLockBodyScroll.js +0 -26
- package/lib/theme/hooks/usePrismTheme.js +0 -36
- package/lib/theme/hooks/useScrollPosition.js +0 -49
- package/lib/theme/hooks/useTOCHighlight.js +0 -87
- package/lib/theme/hooks/useTabGroupChoice.js +0 -51
- package/lib/theme/hooks/useTheme.js +0 -99
- package/lib/theme/hooks/useThemeContext.js +0 -31
- package/lib/theme/hooks/useUserPreferencesContext.js +0 -31
- package/lib/theme/hooks/useWindowSize.js +0 -55
- package/lib/theme/prism-include-languages.js +0 -39
- package/lib-next/__tests__/__snapshots__/translations.test.ts.snap +0 -116
- package/lib-next/__tests__/translations.test.js +0 -128
- package/lib-next/__tests__/validateThemeConfig.test.js +0 -333
- package/lib-next/index.js +0 -221
- package/lib-next/theme/Toggle/styles.css +0 -103
- package/lib-next/theme/hooks/useContextualSearchFilters.js +0 -41
- package/lib-next/theme/hooks/useLocationHash.js +0 -20
- package/lib-next/theme/hooks/useScrollPosition.js +0 -38
- package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
- package/lib-next/translations.js +0 -145
- package/lib-next/validateThemeConfig.js +0 -317
- package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -116
- package/src/__tests__/translations.test.ts +0 -116
- package/src/__tests__/validateThemeConfig.test.js +0 -333
- package/src/prism-include-languages.js +0 -11
- package/src/theme/Toggle/styles.css +0 -103
- package/src/theme/hooks/useContextualSearchFilters.ts +0 -52
- package/src/theme/hooks/useLocationHash.ts +0 -25
- package/src/theme/hooks/useScrollPosition.ts +0 -45
- package/src/theme/hooks/useTOCHighlight.ts +0 -98
- package/tsconfig.json +0 -12
- package/update-code-translations.js +0 -240
- package/update-code-translations.test.js +0 -33
|
@@ -5,9 +5,12 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
/*
|
|
9
|
+
Hide toggle in small viewports
|
|
10
|
+
*/
|
|
11
|
+
@media (max-width: 996px) {
|
|
12
|
+
.toggle {
|
|
13
|
+
display: none;
|
|
11
14
|
}
|
|
12
15
|
}
|
|
13
16
|
|
|
@@ -18,3 +21,7 @@
|
|
|
18
21
|
.navbarHidden {
|
|
19
22
|
transform: translate3d(0, calc(-100% - 2px), 0);
|
|
20
23
|
}
|
|
24
|
+
|
|
25
|
+
.navbarSidebarToggle {
|
|
26
|
+
margin-right: 1rem;
|
|
27
|
+
}
|
|
@@ -4,23 +4,22 @@
|
|
|
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
|
|
7
|
+
import React from 'react';
|
|
8
8
|
import clsx from 'clsx';
|
|
9
9
|
import Link from '@docusaurus/Link';
|
|
10
10
|
import useBaseUrl from '@docusaurus/useBaseUrl';
|
|
11
|
-
import {useLocation} from '@docusaurus/router';
|
|
12
|
-
import {isSamePath} from '@docusaurus/theme-common';
|
|
13
11
|
import IconExternalLink from '@theme/IconExternalLink';
|
|
14
12
|
import isInternalUrl from '@docusaurus/isInternalUrl';
|
|
13
|
+
import {isRegexpStringMatch} from '@docusaurus/theme-common';
|
|
14
|
+
import {getInfimaActiveClassName} from './index';
|
|
15
15
|
const dropdownLinkActiveClass = 'dropdown__link--active';
|
|
16
|
-
|
|
17
|
-
function NavLink({
|
|
16
|
+
export function NavLink({
|
|
18
17
|
activeBasePath,
|
|
19
18
|
activeBaseRegex,
|
|
20
19
|
to,
|
|
21
20
|
href,
|
|
22
21
|
label,
|
|
23
|
-
activeClassName = '
|
|
22
|
+
activeClassName = '',
|
|
24
23
|
prependBaseUrlToHref,
|
|
25
24
|
...props
|
|
26
25
|
}) {
|
|
@@ -41,13 +40,15 @@ function NavLink({
|
|
|
41
40
|
}
|
|
42
41
|
: {
|
|
43
42
|
isNavLink: true,
|
|
44
|
-
activeClassName
|
|
43
|
+
activeClassName: !props.className?.includes(activeClassName)
|
|
44
|
+
? activeClassName
|
|
45
|
+
: '',
|
|
45
46
|
to: toUrl,
|
|
46
47
|
...(activeBasePath || activeBaseRegex
|
|
47
48
|
? {
|
|
48
49
|
isActive: (_match, location) =>
|
|
49
50
|
activeBaseRegex
|
|
50
|
-
?
|
|
51
|
+
? isRegexpStringMatch(activeBaseRegex, location.pathname)
|
|
51
52
|
: location.pathname.startsWith(activeBaseUrl),
|
|
52
53
|
}
|
|
53
54
|
: null),
|
|
@@ -70,158 +71,55 @@ function NavLink({
|
|
|
70
71
|
);
|
|
71
72
|
}
|
|
72
73
|
|
|
73
|
-
function
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
document.addEventListener('touchstart', handleClickOutside);
|
|
88
|
-
return () => {
|
|
89
|
-
document.removeEventListener('mousedown', handleClickOutside);
|
|
90
|
-
document.removeEventListener('touchstart', handleClickOutside);
|
|
91
|
-
};
|
|
92
|
-
}, [dropdownRef]);
|
|
93
|
-
|
|
94
|
-
const navLinkClassNames = (extraClassName, isDropdownItem = false) =>
|
|
95
|
-
clsx(
|
|
96
|
-
{
|
|
97
|
-
'navbar__item navbar__link': !isDropdownItem,
|
|
98
|
-
dropdown__link: isDropdownItem,
|
|
99
|
-
},
|
|
100
|
-
extraClassName,
|
|
101
|
-
);
|
|
74
|
+
function DefaultNavbarItemDesktop({
|
|
75
|
+
className,
|
|
76
|
+
isDropdownItem = false,
|
|
77
|
+
...props
|
|
78
|
+
}) {
|
|
79
|
+
const element = (
|
|
80
|
+
<NavLink
|
|
81
|
+
className={clsx(
|
|
82
|
+
isDropdownItem ? 'dropdown__link' : 'navbar__item navbar__link',
|
|
83
|
+
className,
|
|
84
|
+
)}
|
|
85
|
+
{...props}
|
|
86
|
+
/>
|
|
87
|
+
);
|
|
102
88
|
|
|
103
|
-
if (
|
|
104
|
-
return <
|
|
89
|
+
if (isDropdownItem) {
|
|
90
|
+
return <li>{element}</li>;
|
|
105
91
|
}
|
|
106
92
|
|
|
107
|
-
return
|
|
108
|
-
<div
|
|
109
|
-
ref={dropdownRef}
|
|
110
|
-
className={clsx('navbar__item', 'dropdown', 'dropdown--hoverable', {
|
|
111
|
-
'dropdown--left': position === 'left',
|
|
112
|
-
'dropdown--right': position === 'right',
|
|
113
|
-
'dropdown--show': showDropdown,
|
|
114
|
-
})}>
|
|
115
|
-
<NavLink
|
|
116
|
-
className={navLinkClassNames(className)}
|
|
117
|
-
{...props}
|
|
118
|
-
onClick={props.to ? undefined : (e) => e.preventDefault()}
|
|
119
|
-
onKeyDown={(e) => {
|
|
120
|
-
if (e.key === 'Enter') {
|
|
121
|
-
e.preventDefault();
|
|
122
|
-
setShowDropdown(!showDropdown);
|
|
123
|
-
}
|
|
124
|
-
}}>
|
|
125
|
-
{props.children ?? props.label}
|
|
126
|
-
</NavLink>
|
|
127
|
-
<ul ref={dropdownMenuRef} className="dropdown__menu">
|
|
128
|
-
{items.map(({className: childItemClassName, ...childItemProps}, i) => (
|
|
129
|
-
<li key={i}>
|
|
130
|
-
<NavLink
|
|
131
|
-
onKeyDown={(e) => {
|
|
132
|
-
if (i === items.length - 1 && e.key === 'Tab') {
|
|
133
|
-
e.preventDefault();
|
|
134
|
-
setShowDropdown(false);
|
|
135
|
-
const nextNavbarItem = dropdownRef.current.nextElementSibling;
|
|
136
|
-
|
|
137
|
-
if (nextNavbarItem) {
|
|
138
|
-
nextNavbarItem.focus();
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}}
|
|
142
|
-
activeClassName={dropdownLinkActiveClass}
|
|
143
|
-
className={navLinkClassNames(childItemClassName, true)}
|
|
144
|
-
{...childItemProps}
|
|
145
|
-
/>
|
|
146
|
-
</li>
|
|
147
|
-
))}
|
|
148
|
-
</ul>
|
|
149
|
-
</div>
|
|
150
|
-
);
|
|
93
|
+
return element;
|
|
151
94
|
}
|
|
152
95
|
|
|
153
|
-
function
|
|
154
|
-
items,
|
|
96
|
+
function DefaultNavbarItemMobile({
|
|
155
97
|
className,
|
|
156
|
-
|
|
157
|
-
// Need to destructure position from props so that it doesn't get passed on.
|
|
98
|
+
isDropdownItem: _isDropdownItem,
|
|
158
99
|
...props
|
|
159
100
|
}) {
|
|
160
|
-
const menuListRef = useRef(null);
|
|
161
|
-
const {pathname} = useLocation();
|
|
162
|
-
const [collapsed, setCollapsed] = useState(
|
|
163
|
-
() => !items?.some((item) => isSamePath(item.to, pathname)) ?? true,
|
|
164
|
-
);
|
|
165
|
-
|
|
166
|
-
const navLinkClassNames = (extraClassName, isSubList = false) =>
|
|
167
|
-
clsx(
|
|
168
|
-
'menu__link',
|
|
169
|
-
{
|
|
170
|
-
'menu__link--sublist': isSubList,
|
|
171
|
-
},
|
|
172
|
-
extraClassName,
|
|
173
|
-
);
|
|
174
|
-
|
|
175
|
-
if (!items) {
|
|
176
|
-
return (
|
|
177
|
-
<li className="menu__list-item">
|
|
178
|
-
<NavLink className={navLinkClassNames(className)} {...props} />
|
|
179
|
-
</li>
|
|
180
|
-
);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
const menuListHeight = menuListRef.current?.scrollHeight
|
|
184
|
-
? `${menuListRef.current?.scrollHeight}px`
|
|
185
|
-
: undefined;
|
|
186
101
|
return (
|
|
187
|
-
<li
|
|
188
|
-
className={clsx('
|
|
189
|
-
'menu__list-item--collapsed': collapsed,
|
|
190
|
-
})}>
|
|
191
|
-
<NavLink
|
|
192
|
-
role="button"
|
|
193
|
-
className={navLinkClassNames(className, true)}
|
|
194
|
-
{...props}
|
|
195
|
-
onClick={(e) => {
|
|
196
|
-
e.preventDefault();
|
|
197
|
-
setCollapsed((state) => !state);
|
|
198
|
-
}}>
|
|
199
|
-
{props.children ?? props.label}
|
|
200
|
-
</NavLink>
|
|
201
|
-
<ul
|
|
202
|
-
className="menu__list"
|
|
203
|
-
ref={menuListRef}
|
|
204
|
-
style={{
|
|
205
|
-
height: !collapsed ? menuListHeight : undefined,
|
|
206
|
-
}}>
|
|
207
|
-
{items.map(({className: childItemClassName, ...childItemProps}, i) => (
|
|
208
|
-
<li className="menu__list-item" key={i}>
|
|
209
|
-
<NavLink
|
|
210
|
-
activeClassName="menu__link--active"
|
|
211
|
-
className={navLinkClassNames(childItemClassName)}
|
|
212
|
-
{...childItemProps}
|
|
213
|
-
onClick={props.onClick}
|
|
214
|
-
/>
|
|
215
|
-
</li>
|
|
216
|
-
))}
|
|
217
|
-
</ul>
|
|
102
|
+
<li className="menu__list-item">
|
|
103
|
+
<NavLink className={clsx('menu__link', className)} {...props} />
|
|
218
104
|
</li>
|
|
219
105
|
);
|
|
220
106
|
}
|
|
221
107
|
|
|
222
|
-
function DefaultNavbarItem({
|
|
223
|
-
|
|
224
|
-
|
|
108
|
+
function DefaultNavbarItem({
|
|
109
|
+
mobile = false,
|
|
110
|
+
position: _position,
|
|
111
|
+
// Need to destructure position from props so that it doesn't get passed on.
|
|
112
|
+
...props
|
|
113
|
+
}) {
|
|
114
|
+
const Comp = mobile ? DefaultNavbarItemMobile : DefaultNavbarItemDesktop;
|
|
115
|
+
return (
|
|
116
|
+
<Comp
|
|
117
|
+
{...props}
|
|
118
|
+
activeClassName={
|
|
119
|
+
props.activeClassName ?? getInfimaActiveClassName(mobile)
|
|
120
|
+
}
|
|
121
|
+
/>
|
|
122
|
+
);
|
|
225
123
|
}
|
|
226
124
|
|
|
227
125
|
export default DefaultNavbarItem;
|
|
@@ -8,12 +8,11 @@ import React from 'react';
|
|
|
8
8
|
import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
|
|
9
9
|
import {useLatestVersion, useActiveDocContext} from '@theme/hooks/useDocs';
|
|
10
10
|
import clsx from 'clsx';
|
|
11
|
-
import {
|
|
12
|
-
import {uniq} from '@docusaurus/
|
|
11
|
+
import {getInfimaActiveClassName} from './index';
|
|
12
|
+
import {useDocsPreferredVersion, uniq} from '@docusaurus/theme-common';
|
|
13
13
|
|
|
14
14
|
function getDocInVersions(versions, docId) {
|
|
15
|
-
|
|
16
|
-
const allDocs = [].concat(...versions.map((version) => version.docs));
|
|
15
|
+
const allDocs = versions.flatMap((version) => version.docs);
|
|
17
16
|
const doc = allDocs.find((versionDoc) => versionDoc.id === docId);
|
|
18
17
|
|
|
19
18
|
if (!doc) {
|
|
@@ -29,7 +28,6 @@ Available doc ids are:\n- ${docIds}`);
|
|
|
29
28
|
|
|
30
29
|
export default function DocNavbarItem({
|
|
31
30
|
docId,
|
|
32
|
-
activeSidebarClassName,
|
|
33
31
|
label: staticLabel,
|
|
34
32
|
docsPluginId,
|
|
35
33
|
...props
|
|
@@ -42,14 +40,16 @@ export default function DocNavbarItem({
|
|
|
42
40
|
[activeVersion, preferredVersion, latestVersion].filter(Boolean),
|
|
43
41
|
);
|
|
44
42
|
const doc = getDocInVersions(versions, docId);
|
|
43
|
+
const activeDocInfimaClassName = getInfimaActiveClassName(props.mobile);
|
|
45
44
|
return (
|
|
46
45
|
<DefaultNavbarItem
|
|
47
46
|
exact
|
|
48
47
|
{...props}
|
|
49
48
|
className={clsx(props.className, {
|
|
50
|
-
[
|
|
51
|
-
activeDoc && activeDoc.sidebar === doc.sidebar,
|
|
49
|
+
[activeDocInfimaClassName]:
|
|
50
|
+
activeDoc?.sidebar && activeDoc.sidebar === doc.sidebar,
|
|
52
51
|
})}
|
|
52
|
+
activeClassName={activeDocInfimaClassName}
|
|
53
53
|
label={staticLabel ?? doc.id}
|
|
54
54
|
to={doc.path}
|
|
55
55
|
/>
|
|
@@ -6,12 +6,14 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
|
|
9
|
+
import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
|
|
9
10
|
import {
|
|
10
11
|
useVersions,
|
|
11
12
|
useLatestVersion,
|
|
12
13
|
useActiveDocContext,
|
|
13
14
|
} from '@theme/hooks/useDocs';
|
|
14
15
|
import {useDocsPreferredVersion} from '@docusaurus/theme-common';
|
|
16
|
+
import {translate} from '@docusaurus/Translate';
|
|
15
17
|
|
|
16
18
|
const getVersionMainDoc = (version) =>
|
|
17
19
|
version.docs.find((doc) => doc.id === version.mainDocId);
|
|
@@ -27,9 +29,8 @@ export default function DocsVersionDropdownNavbarItem({
|
|
|
27
29
|
const activeDocContext = useActiveDocContext(docsPluginId);
|
|
28
30
|
const versions = useVersions(docsPluginId);
|
|
29
31
|
const latestVersion = useLatestVersion(docsPluginId);
|
|
30
|
-
const {preferredVersion, savePreferredVersionName} =
|
|
31
|
-
docsPluginId
|
|
32
|
-
);
|
|
32
|
+
const {preferredVersion, savePreferredVersionName} =
|
|
33
|
+
useDocsPreferredVersion(docsPluginId);
|
|
33
34
|
|
|
34
35
|
function getItems() {
|
|
35
36
|
const versionLinks = versions.map((version) => {
|
|
@@ -48,30 +49,41 @@ export default function DocsVersionDropdownNavbarItem({
|
|
|
48
49
|
},
|
|
49
50
|
};
|
|
50
51
|
});
|
|
51
|
-
|
|
52
|
-
...dropdownItemsBefore,
|
|
53
|
-
...versionLinks,
|
|
54
|
-
...dropdownItemsAfter,
|
|
55
|
-
]; // We don't want to render a version dropdown with 0 or 1 item
|
|
56
|
-
// If we build the site with a single docs version (onlyIncludeVersions: ['1.0.0'])
|
|
57
|
-
// We'd rather render a button instead of a dropdown
|
|
58
|
-
|
|
59
|
-
if (items.length <= 1) {
|
|
60
|
-
return undefined;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return items;
|
|
52
|
+
return [...dropdownItemsBefore, ...versionLinks, ...dropdownItemsAfter];
|
|
64
53
|
}
|
|
65
54
|
|
|
66
55
|
const items = getItems();
|
|
67
56
|
const dropdownVersion =
|
|
68
57
|
activeDocContext.activeVersion ?? preferredVersion ?? latestVersion; // Mobile dropdown is handled a bit differently
|
|
69
58
|
|
|
70
|
-
const dropdownLabel =
|
|
59
|
+
const dropdownLabel =
|
|
60
|
+
mobile && items
|
|
61
|
+
? translate({
|
|
62
|
+
id: 'theme.navbar.mobileVersionsDropdown.label',
|
|
63
|
+
message: 'Versions',
|
|
64
|
+
description:
|
|
65
|
+
'The label for the navbar versions dropdown on mobile view',
|
|
66
|
+
})
|
|
67
|
+
: dropdownVersion.label;
|
|
71
68
|
const dropdownTo =
|
|
72
|
-
mobile && items ? undefined : getVersionMainDoc(dropdownVersion).path;
|
|
69
|
+
mobile && items ? undefined : getVersionMainDoc(dropdownVersion).path; // We don't want to render a version dropdown with 0 or 1 item
|
|
70
|
+
// If we build the site with a single docs version (onlyIncludeVersions: ['1.0.0'])
|
|
71
|
+
// We'd rather render a button instead of a dropdown
|
|
72
|
+
|
|
73
|
+
if (items.length <= 1) {
|
|
74
|
+
return (
|
|
75
|
+
<DefaultNavbarItem
|
|
76
|
+
{...props}
|
|
77
|
+
mobile={mobile}
|
|
78
|
+
label={dropdownLabel}
|
|
79
|
+
to={dropdownTo}
|
|
80
|
+
isActive={dropdownActiveClassDisabled ? () => false : undefined}
|
|
81
|
+
/>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
73
85
|
return (
|
|
74
|
-
<
|
|
86
|
+
<DropdownNavbarItem
|
|
75
87
|
{...props}
|
|
76
88
|
mobile={mobile}
|
|
77
89
|
label={dropdownLabel}
|
|
@@ -0,0 +1,158 @@
|
|
|
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, {useState, useRef, useEffect} from 'react';
|
|
8
|
+
import clsx from 'clsx';
|
|
9
|
+
import {
|
|
10
|
+
isSamePath,
|
|
11
|
+
useCollapsible,
|
|
12
|
+
Collapsible,
|
|
13
|
+
isRegexpStringMatch,
|
|
14
|
+
useLocalPathname,
|
|
15
|
+
} from '@docusaurus/theme-common';
|
|
16
|
+
import {NavLink} from '@theme/NavbarItem/DefaultNavbarItem';
|
|
17
|
+
import NavbarItem from '@theme/NavbarItem';
|
|
18
|
+
const dropdownLinkActiveClass = 'dropdown__link--active';
|
|
19
|
+
|
|
20
|
+
function isItemActive(item, localPathname) {
|
|
21
|
+
if (isSamePath(item.to, localPathname)) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (isRegexpStringMatch(item.activeBaseRegex, localPathname)) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (item.activeBasePath && localPathname.startsWith(item.activeBasePath)) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function containsActiveItems(items, localPathname) {
|
|
37
|
+
return items.some((item) => isItemActive(item, localPathname));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function DropdownNavbarItemDesktop({items, position, className, ...props}) {
|
|
41
|
+
const dropdownRef = useRef(null);
|
|
42
|
+
const [showDropdown, setShowDropdown] = useState(false);
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
const handleClickOutside = (event) => {
|
|
45
|
+
if (!dropdownRef.current || dropdownRef.current.contains(event.target)) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
setShowDropdown(false);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
53
|
+
document.addEventListener('touchstart', handleClickOutside);
|
|
54
|
+
return () => {
|
|
55
|
+
document.removeEventListener('mousedown', handleClickOutside);
|
|
56
|
+
document.removeEventListener('touchstart', handleClickOutside);
|
|
57
|
+
};
|
|
58
|
+
}, [dropdownRef]);
|
|
59
|
+
return (
|
|
60
|
+
<div
|
|
61
|
+
ref={dropdownRef}
|
|
62
|
+
className={clsx('navbar__item', 'dropdown', 'dropdown--hoverable', {
|
|
63
|
+
'dropdown--right': position === 'right',
|
|
64
|
+
'dropdown--show': showDropdown,
|
|
65
|
+
})}>
|
|
66
|
+
<NavLink
|
|
67
|
+
href={props.to ? undefined : '#'}
|
|
68
|
+
className={clsx('navbar__link', className)}
|
|
69
|
+
{...props}
|
|
70
|
+
onClick={props.to ? undefined : (e) => e.preventDefault()}
|
|
71
|
+
onKeyDown={(e) => {
|
|
72
|
+
if (e.key === 'Enter') {
|
|
73
|
+
e.preventDefault();
|
|
74
|
+
setShowDropdown(!showDropdown);
|
|
75
|
+
}
|
|
76
|
+
}}>
|
|
77
|
+
{props.children ?? props.label}
|
|
78
|
+
</NavLink>
|
|
79
|
+
<ul className="dropdown__menu">
|
|
80
|
+
{items.map((childItemProps, i) => (
|
|
81
|
+
<NavbarItem
|
|
82
|
+
isDropdownItem
|
|
83
|
+
onKeyDown={(e) => {
|
|
84
|
+
if (i === items.length - 1 && e.key === 'Tab') {
|
|
85
|
+
e.preventDefault();
|
|
86
|
+
setShowDropdown(false);
|
|
87
|
+
const nextNavbarItem = dropdownRef.current.nextElementSibling;
|
|
88
|
+
|
|
89
|
+
if (nextNavbarItem) {
|
|
90
|
+
nextNavbarItem.focus();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}}
|
|
94
|
+
activeClassName={dropdownLinkActiveClass}
|
|
95
|
+
{...childItemProps}
|
|
96
|
+
key={i}
|
|
97
|
+
/>
|
|
98
|
+
))}
|
|
99
|
+
</ul>
|
|
100
|
+
</div>
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function DropdownNavbarItemMobile({
|
|
105
|
+
items,
|
|
106
|
+
className,
|
|
107
|
+
position: _position,
|
|
108
|
+
// Need to destructure position from props so that it doesn't get passed on.
|
|
109
|
+
...props
|
|
110
|
+
}) {
|
|
111
|
+
const localPathname = useLocalPathname();
|
|
112
|
+
const containsActive = containsActiveItems(items, localPathname);
|
|
113
|
+
const {collapsed, toggleCollapsed, setCollapsed} = useCollapsible({
|
|
114
|
+
initialState: () => !containsActive,
|
|
115
|
+
}); // Expand/collapse if any item active after a navigation
|
|
116
|
+
|
|
117
|
+
useEffect(() => {
|
|
118
|
+
if (containsActive) {
|
|
119
|
+
setCollapsed(!containsActive);
|
|
120
|
+
}
|
|
121
|
+
}, [localPathname, containsActive, setCollapsed]);
|
|
122
|
+
return (
|
|
123
|
+
<li
|
|
124
|
+
className={clsx('menu__list-item', {
|
|
125
|
+
'menu__list-item--collapsed': collapsed,
|
|
126
|
+
})}>
|
|
127
|
+
<NavLink
|
|
128
|
+
role="button"
|
|
129
|
+
className={clsx('menu__link menu__link--sublist', className)}
|
|
130
|
+
{...props}
|
|
131
|
+
onClick={(e) => {
|
|
132
|
+
e.preventDefault();
|
|
133
|
+
toggleCollapsed();
|
|
134
|
+
}}>
|
|
135
|
+
{props.children ?? props.label}
|
|
136
|
+
</NavLink>
|
|
137
|
+
<Collapsible lazy as="ul" className="menu__list" collapsed={collapsed}>
|
|
138
|
+
{items.map((childItemProps, i) => (
|
|
139
|
+
<NavbarItem
|
|
140
|
+
mobile
|
|
141
|
+
isDropdownItem
|
|
142
|
+
onClick={props.onClick}
|
|
143
|
+
activeClassName="menu__link--active"
|
|
144
|
+
{...childItemProps}
|
|
145
|
+
key={i}
|
|
146
|
+
/>
|
|
147
|
+
))}
|
|
148
|
+
</Collapsible>
|
|
149
|
+
</li>
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function DropdownNavbarItem({mobile = false, ...props}) {
|
|
154
|
+
const Comp = mobile ? DropdownNavbarItemMobile : DropdownNavbarItemDesktop;
|
|
155
|
+
return <Comp {...props} />;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export default DropdownNavbarItem;
|
package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js}
RENAMED
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
|
-
import
|
|
8
|
+
import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
|
|
9
9
|
import IconLanguage from '@theme/IconLanguage';
|
|
10
10
|
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
11
11
|
import {useAlternatePageUtils} from '@docusaurus/theme-common';
|
|
12
|
+
import styles from './styles.module.css';
|
|
12
13
|
export default function LocaleDropdownNavbarItem({
|
|
13
14
|
mobile,
|
|
14
15
|
dropdownItemsBefore,
|
|
@@ -36,27 +37,18 @@ export default function LocaleDropdownNavbarItem({
|
|
|
36
37
|
target: '_self',
|
|
37
38
|
autoAddBaseUrl: false,
|
|
38
39
|
className: locale === currentLocale ? 'dropdown__link--active' : '',
|
|
39
|
-
style: {
|
|
40
|
-
textTransform: 'capitalize',
|
|
41
|
-
},
|
|
42
40
|
};
|
|
43
41
|
});
|
|
44
42
|
const items = [...dropdownItemsBefore, ...localeItems, ...dropdownItemsAfter]; // Mobile is handled a bit differently
|
|
45
43
|
|
|
46
44
|
const dropdownLabel = mobile ? 'Languages' : getLocaleLabel(currentLocale);
|
|
47
45
|
return (
|
|
48
|
-
<
|
|
46
|
+
<DropdownNavbarItem
|
|
49
47
|
{...props}
|
|
50
|
-
href="#"
|
|
51
48
|
mobile={mobile}
|
|
52
49
|
label={
|
|
53
50
|
<span>
|
|
54
|
-
<IconLanguage
|
|
55
|
-
style={{
|
|
56
|
-
verticalAlign: 'text-bottom',
|
|
57
|
-
marginRight: 5,
|
|
58
|
-
}}
|
|
59
|
-
/>
|
|
51
|
+
<IconLanguage className={styles.iconLanguage} />
|
|
60
52
|
<span>{dropdownLabel}</span>
|
|
61
53
|
</span>
|
|
62
54
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
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
|
+
.iconLanguage {
|
|
9
|
+
vertical-align: text-bottom;
|
|
10
|
+
margin-right: 5px;
|
|
11
|
+
}
|
|
@@ -6,36 +6,49 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
|
|
9
|
+
import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
|
|
9
10
|
import LocaleDropdownNavbarItem from '@theme/NavbarItem/LocaleDropdownNavbarItem';
|
|
10
11
|
import SearchNavbarItem from '@theme/NavbarItem/SearchNavbarItem';
|
|
11
12
|
const NavbarItemComponents = {
|
|
12
13
|
default: () => DefaultNavbarItem,
|
|
13
14
|
localeDropdown: () => LocaleDropdownNavbarItem,
|
|
14
15
|
search: () => SearchNavbarItem,
|
|
16
|
+
dropdown: () => DropdownNavbarItem,
|
|
15
17
|
// Need to lazy load these items as we don't know for sure the docs plugin is loaded
|
|
16
18
|
// See https://github.com/facebook/docusaurus/issues/3360
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
|
|
20
|
+
/* eslint-disable @typescript-eslint/no-var-requires, global-require */
|
|
21
|
+
docsVersion: () => require('@theme/NavbarItem/DocsVersionNavbarItem').default,
|
|
20
22
|
docsVersionDropdown: () =>
|
|
21
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires, global-require
|
|
22
23
|
require('@theme/NavbarItem/DocsVersionDropdownNavbarItem').default,
|
|
23
|
-
doc: () =>
|
|
24
|
-
|
|
25
|
-
require('@theme/NavbarItem/DocNavbarItem').default,
|
|
24
|
+
doc: () => require('@theme/NavbarItem/DocNavbarItem').default,
|
|
25
|
+
/* eslint-enable @typescript-eslint/no-var-requires, global-require */
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
-
const getNavbarItemComponent = (type
|
|
29
|
-
const
|
|
28
|
+
const getNavbarItemComponent = (type) => {
|
|
29
|
+
const navbarItemComponentFn = NavbarItemComponents[type];
|
|
30
30
|
|
|
31
|
-
if (!
|
|
31
|
+
if (!navbarItemComponentFn) {
|
|
32
32
|
throw new Error(`No NavbarItem component found for type "${type}".`);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
return
|
|
35
|
+
return navbarItemComponentFn();
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
+
function getComponentType(type, isDropdown) {
|
|
39
|
+
// Backward compatibility: navbar item with no type set
|
|
40
|
+
// but containing dropdown items should use the type "dropdown"
|
|
41
|
+
if (!type || type === 'default') {
|
|
42
|
+
return isDropdown ? 'dropdown' : 'default';
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return type;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export const getInfimaActiveClassName = (mobile) =>
|
|
49
|
+
mobile ? 'menu__link--active' : 'navbar__link--active';
|
|
38
50
|
export default function NavbarItem({type, ...props}) {
|
|
39
|
-
const
|
|
51
|
+
const componentType = getComponentType(type, props.items !== undefined);
|
|
52
|
+
const NavbarItemComponent = getNavbarItemComponent(componentType);
|
|
40
53
|
return <NavbarItemComponent {...props} />;
|
|
41
54
|
}
|
|
@@ -9,7 +9,7 @@ import Head from '@docusaurus/Head';
|
|
|
9
9
|
// Note: we don't couple this to Algolia/DocSearch on purpose
|
|
10
10
|
// We may want to support other search engine plugins too
|
|
11
11
|
// Search plugins should swizzle/override this comp to add their behavior
|
|
12
|
-
export default function
|
|
12
|
+
export default function SearchMetadata({locale, version, tag}) {
|
|
13
13
|
return (
|
|
14
14
|
<Head>
|
|
15
15
|
{locale && <meta name="docusaurus_locale" content={locale} />}
|