@docusaurus/theme-classic 2.0.0-beta.1 → 2.0.0-beta.10
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 +41 -16
- package/lib/prism-include-languages.js +9 -5
- package/lib/theme/AnnouncementBar/index.js +10 -16
- package/lib/theme/AnnouncementBar/styles.module.css +25 -30
- 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 +29 -46
- package/lib/theme/DocItem/styles.module.css +5 -9
- package/lib/theme/DocItemFooter/index.js +79 -0
- package/lib/theme/DocItemFooter/styles.module.css +18 -0
- package/lib/theme/DocPage/index.js +35 -52
- package/lib/theme/DocPage/styles.module.css +8 -23
- package/lib/theme/DocPaginator/index.js +6 -7
- package/lib/theme/DocSidebar/index.js +53 -235
- package/lib/theme/DocSidebar/styles.module.css +0 -18
- package/lib/theme/DocSidebarItem/index.js +209 -0
- package/lib/theme/DocSidebarItem/styles.module.css +19 -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/{DocVersionSuggestions → DocVersionBanner}/index.js +39 -20
- package/lib/theme/EditThisPage/index.js +3 -1
- package/lib/theme/ErrorPageContent.js +43 -0
- package/lib/theme/Footer/index.js +16 -5
- 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 +11 -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 +162 -42
- package/lib/theme/Navbar/styles.module.css +10 -3
- package/lib/theme/NavbarItem/DefaultNavbarItem.js +27 -123
- 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/SkipToContent/index.js +12 -4
- package/lib/theme/SkipToContent/styles.module.css +1 -0
- package/lib/theme/TOC/index.js +9 -29
- package/lib/theme/TOC/styles.module.css +1 -1
- package/lib/theme/TOCCollapsible/index.js +53 -0
- package/lib/theme/TOCCollapsible/styles.module.css +50 -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 +6 -7
- package/lib/theme/Toggle/index.js +41 -44
- package/lib/theme/Toggle/styles.module.css +91 -3
- package/lib/theme/UserPreferencesProvider/index.js +9 -12
- package/lib/theme/hooks/useHideableNavbar.js +14 -32
- package/lib/theme/hooks/useTabGroupChoice.js +2 -4
- package/lib/theme/hooks/useTheme.js +3 -5
- package/lib/theme/hooks/useWindowSize.js +33 -20
- 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 -599
- package/lib/validateThemeConfig.js +230 -246
- 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 +45 -13
- package/lib-next/prism-include-languages.js +0 -2
- package/lib-next/theme/AnnouncementBar/index.js +9 -18
- package/lib-next/theme/AnnouncementBar/styles.module.css +25 -30
- 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 +40 -56
- package/lib-next/theme/DocItem/styles.module.css +5 -9
- 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 -47
- package/lib-next/theme/DocPage/styles.module.css +8 -23
- package/lib-next/theme/DocPaginator/index.js +7 -11
- package/lib-next/theme/DocSidebar/index.js +69 -295
- package/lib-next/theme/DocSidebar/styles.module.css +0 -18
- package/lib-next/theme/DocSidebarItem/index.js +217 -0
- package/lib-next/theme/DocSidebarItem/styles.module.css +19 -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/{DocVersionSuggestions → DocVersionBanner}/index.js +51 -36
- package/lib-next/theme/EditThisPage/index.js +6 -1
- package/lib-next/theme/ErrorPageContent.js +35 -0
- package/lib-next/theme/Footer/index.js +27 -5
- 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 +17 -6
- 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 +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 +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/SkipToContent/index.js +7 -8
- package/lib-next/theme/SkipToContent/styles.module.css +1 -0
- 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 +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 +7 -8
- 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 -10
- package/lib-next/theme/hooks/useHideableNavbar.js +31 -44
- package/lib-next/theme/hooks/useTabGroupChoice.js +2 -4
- 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/lib-next/theme-classic.d.ts +806 -0
- package/lib-next/translations.js +6 -10
- package/lib-next/types.d.ts +0 -599
- package/lib-next/validateThemeConfig.js +141 -114
- package/package.json +28 -25
- 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 +55 -22
- package/src/{prism-include-languages.js → prism-include-languages.ts} +0 -0
- package/src/theme/AnnouncementBar/index.tsx +10 -17
- package/src/theme/AnnouncementBar/styles.module.css +25 -30
- 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 +43 -56
- package/src/theme/DocItem/styles.module.css +5 -9
- package/src/theme/DocItemFooter/index.tsx +91 -0
- package/src/theme/DocItemFooter/styles.module.css +18 -0
- package/src/theme/DocPage/index.tsx +44 -42
- package/src/theme/DocPage/styles.module.css +8 -23
- package/src/theme/DocPaginator/index.tsx +9 -13
- package/src/theme/DocSidebar/index.tsx +80 -307
- package/src/theme/DocSidebar/styles.module.css +0 -18
- package/src/theme/DocSidebarItem/index.tsx +242 -0
- package/src/theme/DocSidebarItem/styles.module.css +19 -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/{DocVersionSuggestions → DocVersionBanner}/index.tsx +74 -44
- package/src/theme/EditThisPage/index.tsx +6 -1
- package/src/theme/ErrorPageContent.tsx +41 -0
- package/src/theme/Footer/index.tsx +30 -6
- 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 +17 -6
- 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 +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/SkipToContent/index.tsx +7 -8
- package/src/theme/SkipToContent/styles.module.css +1 -0
- 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/__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 +8 -8
- package/src/theme/Toggle/index.tsx +36 -43
- package/src/theme/Toggle/styles.module.css +91 -3
- package/src/theme/UserPreferencesProvider/index.tsx +9 -11
- package/src/theme/hooks/useHideableNavbar.ts +32 -45
- package/src/theme/hooks/useTabGroupChoice.ts +4 -4
- 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 +806 -0
- package/src/translations.ts +8 -10
- package/src/types.d.ts +0 -599
- package/src/{validateThemeConfig.js → validateThemeConfig.ts} +151 -94
- package/tsconfig.json +1 -2
- 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/theme/Toggle/styles.css +0 -103
- package/lib/theme/hooks/useAnnouncementBar.js +0 -63
- 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/useAnnouncementBar.js +0 -49
- 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/useAnnouncementBar.ts +0 -58
- 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 -239
- package/update-code-translations.test.js +0 -33
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import Translate from '@docusaurus/Translate';
|
|
9
|
+
import {ThemeClassNames} from '@docusaurus/theme-common';
|
|
9
10
|
|
|
10
11
|
function LastUpdatedAtDate({lastUpdatedAt, formattedLastUpdatedAt}) {
|
|
11
12
|
return (
|
|
@@ -45,7 +46,7 @@ export default function LastUpdated({
|
|
|
45
46
|
lastUpdatedBy,
|
|
46
47
|
}) {
|
|
47
48
|
return (
|
|
48
|
-
|
|
49
|
+
<span className={ThemeClassNames.common.lastUpdated}>
|
|
49
50
|
<Translate
|
|
50
51
|
id="theme.lastUpdated.lastUpdatedAtBy"
|
|
51
52
|
description="The sentence used to display when a page has been last updated, and by who"
|
|
@@ -72,6 +73,6 @@ export default function LastUpdated({
|
|
|
72
73
|
<small> (Simulated during dev for better perf)</small>
|
|
73
74
|
</div>
|
|
74
75
|
)}
|
|
75
|
-
|
|
76
|
+
</span>
|
|
76
77
|
);
|
|
77
78
|
}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import clsx from 'clsx';
|
|
9
|
+
import ErrorBoundary from '@docusaurus/ErrorBoundary';
|
|
9
10
|
import SkipToContent from '@theme/SkipToContent';
|
|
10
11
|
import AnnouncementBar from '@theme/AnnouncementBar';
|
|
11
12
|
import Navbar from '@theme/Navbar';
|
|
@@ -14,6 +15,7 @@ import LayoutProviders from '@theme/LayoutProviders';
|
|
|
14
15
|
import LayoutHead from '@theme/LayoutHead';
|
|
15
16
|
import useKeyboardNavigation from '@theme/hooks/useKeyboardNavigation';
|
|
16
17
|
import {ThemeClassNames} from '@docusaurus/theme-common';
|
|
18
|
+
import ErrorPageContent from '@theme/ErrorPageContent';
|
|
17
19
|
import './styles.css';
|
|
18
20
|
|
|
19
21
|
function Layout(props) {
|
|
@@ -35,7 +37,7 @@ function Layout(props) {
|
|
|
35
37
|
wrapperClassName,
|
|
36
38
|
pageClassName,
|
|
37
39
|
)}>
|
|
38
|
-
{children}
|
|
40
|
+
<ErrorBoundary fallback={ErrorPageContent}>{children}</ErrorBoundary>
|
|
39
41
|
</div>
|
|
40
42
|
|
|
41
43
|
{!noFooter && <Footer />}
|
|
@@ -8,12 +8,13 @@ import React from 'react';
|
|
|
8
8
|
import Head from '@docusaurus/Head';
|
|
9
9
|
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
10
10
|
import useBaseUrl from '@docusaurus/useBaseUrl';
|
|
11
|
-
import
|
|
11
|
+
import SearchMetadata from '@theme/SearchMetadata';
|
|
12
12
|
import Seo from '@theme/Seo';
|
|
13
13
|
import {
|
|
14
14
|
DEFAULT_SEARCH_TAG,
|
|
15
15
|
useTitleFormatter,
|
|
16
16
|
useAlternatePageUtils,
|
|
17
|
+
useThemeConfig,
|
|
17
18
|
} from '@docusaurus/theme-common';
|
|
18
19
|
import {useLocation} from '@docusaurus/router'; // Useful for SEO
|
|
19
20
|
// See https://developers.google.com/search/docs/advanced/crawling/localized-versions
|
|
@@ -77,13 +78,11 @@ function CanonicalUrlHeaders({permalink}) {
|
|
|
77
78
|
|
|
78
79
|
export default function LayoutHead(props) {
|
|
79
80
|
const {
|
|
80
|
-
siteConfig: {
|
|
81
|
-
favicon,
|
|
82
|
-
themeConfig: {metadatas, image: defaultImage},
|
|
83
|
-
},
|
|
81
|
+
siteConfig: {favicon},
|
|
84
82
|
i18n: {currentLocale, localeConfigs},
|
|
85
83
|
} = useDocusaurusContext();
|
|
86
|
-
const {
|
|
84
|
+
const {metadata, image: defaultImage} = useThemeConfig();
|
|
85
|
+
const {title, description, image, keywords, searchMetadata} = props;
|
|
87
86
|
const faviconUrl = useBaseUrl(favicon);
|
|
88
87
|
const pageTitle = useTitleFormatter(title); // See https://github.com/facebook/docusaurus/issues/3317#issuecomment-754661855
|
|
89
88
|
// const htmlLang = currentLocale.split('-')[0];
|
|
@@ -95,41 +94,37 @@ export default function LayoutHead(props) {
|
|
|
95
94
|
<>
|
|
96
95
|
<Head>
|
|
97
96
|
<html lang={htmlLang} dir={htmlDir} />
|
|
98
|
-
{favicon && <link rel="
|
|
97
|
+
{favicon && <link rel="icon" href={faviconUrl} />}
|
|
99
98
|
<title>{pageTitle}</title>
|
|
100
99
|
<meta property="og:title" content={pageTitle} />
|
|
101
|
-
|
|
102
|
-
(defaultImage && (
|
|
103
|
-
<meta name="twitter:card" content="summary_large_image" />
|
|
104
|
-
))}
|
|
100
|
+
<meta name="twitter:card" content="summary_large_image" />
|
|
105
101
|
</Head>
|
|
106
102
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}}
|
|
113
|
-
/>
|
|
103
|
+
{/* image can override the default image */}
|
|
104
|
+
{defaultImage && <Seo image={defaultImage} />}
|
|
105
|
+
{image && <Seo image={image} />}
|
|
106
|
+
|
|
107
|
+
<Seo description={description} keywords={keywords} />
|
|
114
108
|
|
|
115
109
|
<CanonicalUrlHeaders />
|
|
116
110
|
|
|
117
111
|
<AlternateLangHeaders />
|
|
118
112
|
|
|
119
|
-
<
|
|
113
|
+
<SearchMetadata
|
|
120
114
|
tag={DEFAULT_SEARCH_TAG}
|
|
121
115
|
locale={currentLocale}
|
|
122
|
-
{...
|
|
116
|
+
{...searchMetadata}
|
|
123
117
|
/>
|
|
124
118
|
|
|
125
119
|
<Head // it's important to have an additional <Head> element here,
|
|
126
120
|
// as it allows react-helmet to override values set in previous <Head>
|
|
127
|
-
// ie we can override default
|
|
121
|
+
// ie we can override default metadata such as "twitter:card"
|
|
128
122
|
// In same Head, the same meta would appear twice instead of overriding
|
|
129
123
|
// See react-helmet doc
|
|
130
124
|
>
|
|
131
|
-
{
|
|
132
|
-
|
|
125
|
+
{/* Yes, "metadatum" is the grammatically correct term */}
|
|
126
|
+
{metadata.map((metadatum, i) => (
|
|
127
|
+
<meta key={`metadata_${i}`} {...metadatum} />
|
|
133
128
|
))}
|
|
134
129
|
</Head>
|
|
135
130
|
</>
|
|
@@ -7,15 +7,26 @@
|
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import ThemeProvider from '@theme/ThemeProvider';
|
|
9
9
|
import UserPreferencesProvider from '@theme/UserPreferencesProvider';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
AnnouncementBarProvider,
|
|
12
|
+
DocsPreferredVersionContextProvider,
|
|
13
|
+
MobileSecondaryMenuProvider,
|
|
14
|
+
ScrollControllerProvider,
|
|
15
|
+
} from '@docusaurus/theme-common';
|
|
11
16
|
export default function LayoutProviders({children}) {
|
|
12
17
|
return (
|
|
13
18
|
<ThemeProvider>
|
|
14
|
-
<
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
<AnnouncementBarProvider>
|
|
20
|
+
<UserPreferencesProvider>
|
|
21
|
+
<ScrollControllerProvider>
|
|
22
|
+
<DocsPreferredVersionContextProvider>
|
|
23
|
+
<MobileSecondaryMenuProvider>
|
|
24
|
+
{children}
|
|
25
|
+
</MobileSecondaryMenuProvider>
|
|
26
|
+
</DocsPreferredVersionContextProvider>
|
|
27
|
+
</ScrollControllerProvider>
|
|
28
|
+
</UserPreferencesProvider>
|
|
29
|
+
</AnnouncementBarProvider>
|
|
19
30
|
</ThemeProvider>
|
|
20
31
|
);
|
|
21
32
|
}
|
|
@@ -9,28 +9,34 @@ import Link from '@docusaurus/Link';
|
|
|
9
9
|
import ThemedImage from '@theme/ThemedImage';
|
|
10
10
|
import useBaseUrl from '@docusaurus/useBaseUrl';
|
|
11
11
|
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
12
|
+
import {useThemeConfig} from '@docusaurus/theme-common';
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
function Logo(props) {
|
|
14
15
|
const {
|
|
15
|
-
siteConfig: {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
},
|
|
23
|
-
},
|
|
16
|
+
siteConfig: {title},
|
|
17
|
+
} = useDocusaurusContext();
|
|
18
|
+
const {
|
|
19
|
+
navbar: {
|
|
20
|
+
title: navbarTitle,
|
|
21
|
+
logo = {
|
|
22
|
+
src: '',
|
|
24
23
|
},
|
|
25
24
|
},
|
|
26
|
-
|
|
27
|
-
} = useDocusaurusContext();
|
|
25
|
+
} = useThemeConfig();
|
|
28
26
|
const {imageClassName, titleClassName, ...propsRest} = props;
|
|
29
27
|
const logoLink = useBaseUrl(logo.href || '/');
|
|
30
28
|
const sources = {
|
|
31
29
|
light: useBaseUrl(logo.src),
|
|
32
30
|
dark: useBaseUrl(logo.srcDark || logo.src),
|
|
33
31
|
};
|
|
32
|
+
const themedImage = (
|
|
33
|
+
<ThemedImage
|
|
34
|
+
sources={sources}
|
|
35
|
+
height={logo.height}
|
|
36
|
+
width={logo.width}
|
|
37
|
+
alt={logo.alt || navbarTitle || title}
|
|
38
|
+
/>
|
|
39
|
+
);
|
|
34
40
|
return (
|
|
35
41
|
<Link
|
|
36
42
|
to={logoLink}
|
|
@@ -38,17 +44,15 @@ const Logo = (props) => {
|
|
|
38
44
|
{...(logo.target && {
|
|
39
45
|
target: logo.target,
|
|
40
46
|
})}>
|
|
41
|
-
{logo.src &&
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
/>
|
|
48
|
-
)}
|
|
47
|
+
{logo.src &&
|
|
48
|
+
(imageClassName ? (
|
|
49
|
+
<div className={imageClassName}>{themedImage}</div>
|
|
50
|
+
) : (
|
|
51
|
+
themedImage
|
|
52
|
+
))}
|
|
49
53
|
{navbarTitle != null && <b className={titleClassName}>{navbarTitle}</b>}
|
|
50
54
|
</Link>
|
|
51
55
|
);
|
|
52
|
-
}
|
|
56
|
+
}
|
|
53
57
|
|
|
54
58
|
export default Logo;
|
|
@@ -5,10 +5,30 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
import React, {isValidElement} from 'react';
|
|
8
|
+
import Head from '@docusaurus/Head';
|
|
8
9
|
import Link from '@docusaurus/Link';
|
|
9
10
|
import CodeBlock from '@theme/CodeBlock';
|
|
10
11
|
import Heading from '@theme/Heading';
|
|
12
|
+
import Details from '@theme/Details';
|
|
13
|
+
import './styles.css'; // MDX elements are wrapped through the MDX pragma
|
|
14
|
+
// In some cases (notably usage with Head/Helmet) we need to unwrap those elements.
|
|
15
|
+
|
|
16
|
+
function unwrapMDXElement(element) {
|
|
17
|
+
if (element?.props?.mdxType && element?.props?.originalType) {
|
|
18
|
+
const {mdxType, originalType, ...newProps} = element.props;
|
|
19
|
+
return React.createElement(element.props.originalType, newProps);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return element;
|
|
23
|
+
}
|
|
24
|
+
|
|
11
25
|
const MDXComponents = {
|
|
26
|
+
head: (props) => {
|
|
27
|
+
const unwrappedChildren = React.Children.map(props.children, (child) =>
|
|
28
|
+
unwrapMDXElement(child),
|
|
29
|
+
);
|
|
30
|
+
return <Head {...props}>{unwrappedChildren}</Head>;
|
|
31
|
+
},
|
|
12
32
|
code: (props) => {
|
|
13
33
|
const {children} = props; // For retrocompatibility purposes (pretty rare use case)
|
|
14
34
|
// See https://github.com/facebook/docusaurus/pull/1584
|
|
@@ -27,20 +47,27 @@ const MDXComponents = {
|
|
|
27
47
|
pre: (props) => {
|
|
28
48
|
const {children} = props; // See comment for `code` above
|
|
29
49
|
|
|
30
|
-
if (isValidElement(children?.props?.children)) {
|
|
31
|
-
return children
|
|
50
|
+
if (isValidElement(children) && isValidElement(children?.props?.children)) {
|
|
51
|
+
return children.props.children;
|
|
32
52
|
}
|
|
33
53
|
|
|
34
54
|
return (
|
|
35
55
|
<CodeBlock
|
|
36
|
-
{...(isValidElement(children)
|
|
37
|
-
? children?.props
|
|
38
|
-
: {
|
|
39
|
-
children,
|
|
40
|
-
})}
|
|
56
|
+
{...(isValidElement(children) ? children?.props : {...props})}
|
|
41
57
|
/>
|
|
42
58
|
);
|
|
43
59
|
},
|
|
60
|
+
details: (props) => {
|
|
61
|
+
const items = React.Children.toArray(props.children); // Split summary item from the rest to pass it as a separate prop to the Detais theme component
|
|
62
|
+
|
|
63
|
+
const summary = items.find((item) => item?.props?.mdxType === 'summary');
|
|
64
|
+
const children = <>{items.filter((item) => item !== summary)}</>;
|
|
65
|
+
return (
|
|
66
|
+
<Details {...props} summary={summary}>
|
|
67
|
+
{children}
|
|
68
|
+
</Details>
|
|
69
|
+
);
|
|
70
|
+
},
|
|
44
71
|
h1: Heading('h1'),
|
|
45
72
|
h2: Heading('h2'),
|
|
46
73
|
h3: Heading('h3'),
|
|
@@ -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
|
+
ul.contains-task-list {
|
|
9
|
+
padding-left: 0;
|
|
10
|
+
list-style: none;
|
|
11
|
+
}
|
|
@@ -15,7 +15,11 @@ import styles from './styles.module.css';
|
|
|
15
15
|
|
|
16
16
|
function MDXPage(props) {
|
|
17
17
|
const {content: MDXPageContent} = props;
|
|
18
|
-
const {
|
|
18
|
+
const {
|
|
19
|
+
// TODO this frontmatter is not validated/normalized, it's the raw user-provided one. We should expose normalized one too!
|
|
20
|
+
frontMatter,
|
|
21
|
+
metadata,
|
|
22
|
+
} = MDXPageContent;
|
|
19
23
|
const {
|
|
20
24
|
title,
|
|
21
25
|
description,
|
|
@@ -39,7 +43,11 @@ function MDXPage(props) {
|
|
|
39
43
|
</div>
|
|
40
44
|
{!hideTableOfContents && MDXPageContent.toc && (
|
|
41
45
|
<div className="col col--2">
|
|
42
|
-
<TOC
|
|
46
|
+
<TOC
|
|
47
|
+
toc={MDXPageContent.toc}
|
|
48
|
+
minHeadingLevel={frontMatter.toc_min_heading_level}
|
|
49
|
+
maxHeadingLevel={frontMatter.toc_max_heading_level}
|
|
50
|
+
/>
|
|
43
51
|
</div>
|
|
44
52
|
)}
|
|
45
53
|
</div>
|
|
@@ -6,19 +6,32 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React, {useCallback, useState, useEffect} from 'react';
|
|
8
8
|
import clsx from 'clsx';
|
|
9
|
+
import Translate from '@docusaurus/Translate';
|
|
9
10
|
import SearchBar from '@theme/SearchBar';
|
|
10
11
|
import Toggle from '@theme/Toggle';
|
|
11
12
|
import useThemeContext from '@theme/hooks/useThemeContext';
|
|
12
|
-
import {
|
|
13
|
+
import {
|
|
14
|
+
useThemeConfig,
|
|
15
|
+
useMobileSecondaryMenuRenderer,
|
|
16
|
+
usePrevious,
|
|
17
|
+
useHistoryPopHandler,
|
|
18
|
+
} from '@docusaurus/theme-common';
|
|
13
19
|
import useHideableNavbar from '@theme/hooks/useHideableNavbar';
|
|
14
20
|
import useLockBodyScroll from '@theme/hooks/useLockBodyScroll';
|
|
15
|
-
import useWindowSize
|
|
21
|
+
import useWindowSize from '@theme/hooks/useWindowSize';
|
|
22
|
+
import {useActivePlugin} from '@theme/hooks/useDocs';
|
|
16
23
|
import NavbarItem from '@theme/NavbarItem';
|
|
17
24
|
import Logo from '@theme/Logo';
|
|
18
25
|
import IconMenu from '@theme/IconMenu';
|
|
26
|
+
import IconClose from '@theme/IconClose';
|
|
19
27
|
import styles from './styles.module.css'; // retrocompatible with v1
|
|
20
28
|
|
|
21
|
-
const DefaultNavItemPosition = 'right';
|
|
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
|
|
22
35
|
// if position is unspecified, fallback to right (as v1)
|
|
23
36
|
|
|
24
37
|
function splitNavItemsByPosition(items) {
|
|
@@ -34,31 +47,174 @@ function splitNavItemsByPosition(items) {
|
|
|
34
47
|
};
|
|
35
48
|
}
|
|
36
49
|
|
|
37
|
-
function
|
|
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() {
|
|
38
84
|
const {
|
|
39
|
-
|
|
40
|
-
colorMode: {disableSwitch: disableColorModeSwitch},
|
|
85
|
+
colorMode: {disableSwitch},
|
|
41
86
|
} = useThemeConfig();
|
|
42
|
-
const [sidebarShown, setSidebarShown] = useState(false);
|
|
43
87
|
const {isDarkTheme, setLightTheme, setDarkTheme} = useThemeContext();
|
|
44
|
-
const
|
|
45
|
-
useLockBodyScroll(sidebarShown);
|
|
46
|
-
const showSidebar = useCallback(() => {
|
|
47
|
-
setSidebarShown(true);
|
|
48
|
-
}, [setSidebarShown]);
|
|
49
|
-
const hideSidebar = useCallback(() => {
|
|
50
|
-
setSidebarShown(false);
|
|
51
|
-
}, [setSidebarShown]);
|
|
52
|
-
const onToggleChange = useCallback(
|
|
88
|
+
const toggle = useCallback(
|
|
53
89
|
(e) => (e.target.checked ? setDarkTheme() : setLightTheme()),
|
|
54
90
|
[setLightTheme, setDarkTheme],
|
|
55
91
|
);
|
|
56
|
-
|
|
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
|
+
|
|
57
113
|
useEffect(() => {
|
|
58
|
-
|
|
59
|
-
|
|
114
|
+
const contentBecameAvailable = content && !previousContent;
|
|
115
|
+
|
|
116
|
+
if (contentBecameAvailable) {
|
|
117
|
+
setShown(true);
|
|
60
118
|
}
|
|
61
|
-
}, [
|
|
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
|
+
|
|
209
|
+
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();
|
|
62
218
|
const hasSearchNavbarItem = items.some((item) => item.type === 'search');
|
|
63
219
|
const {leftItems, rightItems} = splitNavItemsByPosition(items);
|
|
64
220
|
return (
|
|
@@ -67,20 +223,20 @@ function Navbar() {
|
|
|
67
223
|
className={clsx('navbar', 'navbar--fixed-top', {
|
|
68
224
|
'navbar--dark': style === 'dark',
|
|
69
225
|
'navbar--primary': style === 'primary',
|
|
70
|
-
'navbar-sidebar--show':
|
|
226
|
+
'navbar-sidebar--show': mobileSidebar.shown,
|
|
71
227
|
[styles.navbarHideable]: hideOnScroll,
|
|
72
228
|
[styles.navbarHidden]: hideOnScroll && !isNavbarVisible,
|
|
73
229
|
})}>
|
|
74
230
|
<div className="navbar__inner">
|
|
75
231
|
<div className="navbar__items">
|
|
76
|
-
{items
|
|
232
|
+
{(items?.length > 0 || activeDocPlugin) && (
|
|
77
233
|
<button
|
|
78
234
|
aria-label="Navigation bar toggle"
|
|
79
235
|
className="navbar__toggle clean-btn"
|
|
80
236
|
type="button"
|
|
81
237
|
tabIndex={0}
|
|
82
|
-
onClick={
|
|
83
|
-
onKeyDown={
|
|
238
|
+
onClick={mobileSidebar.toggle}
|
|
239
|
+
onKeyDown={mobileSidebar.toggle}>
|
|
84
240
|
<IconMenu />
|
|
85
241
|
</button>
|
|
86
242
|
)}
|
|
@@ -97,48 +253,29 @@ function Navbar() {
|
|
|
97
253
|
{rightItems.map((item, i) => (
|
|
98
254
|
<NavbarItem {...item} key={i} />
|
|
99
255
|
))}
|
|
100
|
-
{!
|
|
256
|
+
{!colorModeToggle.disabled && (
|
|
101
257
|
<Toggle
|
|
102
|
-
className={styles.
|
|
103
|
-
checked={isDarkTheme}
|
|
104
|
-
onChange={
|
|
258
|
+
className={styles.toggle}
|
|
259
|
+
checked={colorModeToggle.isDarkTheme}
|
|
260
|
+
onChange={colorModeToggle.toggle}
|
|
105
261
|
/>
|
|
106
262
|
)}
|
|
107
263
|
{!hasSearchNavbarItem && <SearchBar />}
|
|
108
264
|
</div>
|
|
109
265
|
</div>
|
|
266
|
+
|
|
110
267
|
<div
|
|
111
268
|
role="presentation"
|
|
112
269
|
className="navbar-sidebar__backdrop"
|
|
113
|
-
onClick={
|
|
270
|
+
onClick={mobileSidebar.toggle}
|
|
114
271
|
/>
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
/>
|
|
123
|
-
{!disableColorModeSwitch && sidebarShown && (
|
|
124
|
-
<Toggle checked={isDarkTheme} onChange={onToggleChange} />
|
|
125
|
-
)}
|
|
126
|
-
</div>
|
|
127
|
-
<div className="navbar-sidebar__items">
|
|
128
|
-
<div className="menu">
|
|
129
|
-
<ul className="menu__list">
|
|
130
|
-
{items.map((item, i) => (
|
|
131
|
-
<NavbarItem
|
|
132
|
-
mobile
|
|
133
|
-
{...item} // TODO fix typing
|
|
134
|
-
onClick={hideSidebar}
|
|
135
|
-
key={i}
|
|
136
|
-
/>
|
|
137
|
-
))}
|
|
138
|
-
</ul>
|
|
139
|
-
</div>
|
|
140
|
-
</div>
|
|
141
|
-
</div>
|
|
272
|
+
|
|
273
|
+
{mobileSidebar.shouldRender && (
|
|
274
|
+
<NavbarMobileSidebar
|
|
275
|
+
sidebarShown={mobileSidebar.shown}
|
|
276
|
+
toggleSidebar={mobileSidebar.toggle}
|
|
277
|
+
/>
|
|
278
|
+
)}
|
|
142
279
|
</nav>
|
|
143
280
|
);
|
|
144
281
|
}
|
|
@@ -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
|
+
}
|