@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
|
@@ -7,7 +7,7 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _router = require("@docusaurus/router");
|
|
11
11
|
|
|
12
12
|
var _Translate = _interopRequireDefault(require("@docusaurus/Translate"));
|
|
13
13
|
|
|
@@ -35,6 +35,9 @@ function programmaticFocus(el) {
|
|
|
35
35
|
|
|
36
36
|
function SkipToContent() {
|
|
37
37
|
const containerRef = (0, _react.useRef)(null);
|
|
38
|
+
const {
|
|
39
|
+
action
|
|
40
|
+
} = (0, _router.useHistory)();
|
|
38
41
|
|
|
39
42
|
const handleSkip = e => {
|
|
40
43
|
e.preventDefault();
|
|
@@ -45,13 +48,18 @@ function SkipToContent() {
|
|
|
45
48
|
}
|
|
46
49
|
};
|
|
47
50
|
|
|
48
|
-
(0, _themeCommon.
|
|
49
|
-
|
|
51
|
+
(0, _themeCommon.useLocationChange)(({
|
|
52
|
+
location
|
|
53
|
+
}) => {
|
|
54
|
+
if (containerRef.current && !location.hash && action === 'PUSH') {
|
|
50
55
|
programmaticFocus(containerRef.current);
|
|
51
56
|
}
|
|
52
57
|
});
|
|
53
58
|
return <div ref={containerRef}>
|
|
54
|
-
|
|
59
|
+
{
|
|
60
|
+
/* eslint-disable-next-line jsx-a11y/anchor-is-valid */
|
|
61
|
+
}
|
|
62
|
+
<a href="#" className={_stylesModule.default.skipToContent} onClick={handleSkip}>
|
|
55
63
|
<_Translate.default id="theme.common.skipToMainContent" description="The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation">
|
|
56
64
|
Skip to main content
|
|
57
65
|
</_Translate.default>
|
package/lib/theme/TOC/index.js
CHANGED
|
@@ -9,7 +9,7 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
9
9
|
|
|
10
10
|
var _clsx = _interopRequireDefault(require("clsx"));
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _TOCItems = _interopRequireDefault(require("@theme/TOCItems"));
|
|
13
13
|
|
|
14
14
|
var _stylesModule = _interopRequireDefault(require("./styles.module.css"));
|
|
15
15
|
|
|
@@ -21,37 +21,17 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
21
21
|
* This source code is licensed under the MIT license found in the
|
|
22
22
|
* LICENSE file in the root directory of this source tree.
|
|
23
23
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
function Headings({
|
|
30
|
-
toc,
|
|
31
|
-
isChild
|
|
32
|
-
}) {
|
|
33
|
-
if (!toc.length) {
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return <ul className={isChild ? '' : 'table-of-contents table-of-contents__left-border'}>
|
|
38
|
-
{toc.map(heading => <li key={heading.id}>
|
|
39
|
-
<a href={`#${heading.id}`} className={LINK_CLASS_NAME} // Developer provided the HTML, so assume it's safe.
|
|
40
|
-
// eslint-disable-next-line react/no-danger
|
|
41
|
-
dangerouslySetInnerHTML={{
|
|
42
|
-
__html: heading.value
|
|
43
|
-
}} />
|
|
44
|
-
<Headings isChild toc={heading.children} />
|
|
45
|
-
</li>)}
|
|
46
|
-
</ul>;
|
|
47
|
-
}
|
|
24
|
+
// Using a custom className
|
|
25
|
+
// This prevents TOC highlighting to highlight TOCInline/TOCCollapsible by mistake
|
|
26
|
+
const LINK_CLASS_NAME = 'table-of-contents__link toc-highlight';
|
|
27
|
+
const LINK_ACTIVE_CLASS_NAME = 'table-of-contents__link--active';
|
|
48
28
|
|
|
49
29
|
function TOC({
|
|
50
|
-
|
|
30
|
+
className,
|
|
31
|
+
...props
|
|
51
32
|
}) {
|
|
52
|
-
(0,
|
|
53
|
-
|
|
54
|
-
<Headings toc={toc} />
|
|
33
|
+
return <div className={(0, _clsx.default)(_stylesModule.default.tableOfContents, 'thin-scrollbar', className)}>
|
|
34
|
+
<_TOCItems.default {...props} linkClassName={LINK_CLASS_NAME} linkActiveClassName={LINK_ACTIVE_CLASS_NAME} />
|
|
55
35
|
</div>;
|
|
56
36
|
}
|
|
57
37
|
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = TOCCollapsible;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _clsx = _interopRequireDefault(require("clsx"));
|
|
11
|
+
|
|
12
|
+
var _Translate = _interopRequireDefault(require("@docusaurus/Translate"));
|
|
13
|
+
|
|
14
|
+
var _themeCommon = require("@docusaurus/theme-common");
|
|
15
|
+
|
|
16
|
+
var _stylesModule = _interopRequireDefault(require("./styles.module.css"));
|
|
17
|
+
|
|
18
|
+
var _TOCItems = _interopRequireDefault(require("@theme/TOCItems"));
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
24
|
+
*
|
|
25
|
+
* This source code is licensed under the MIT license found in the
|
|
26
|
+
* LICENSE file in the root directory of this source tree.
|
|
27
|
+
*/
|
|
28
|
+
function TOCCollapsible({
|
|
29
|
+
toc,
|
|
30
|
+
className,
|
|
31
|
+
minHeadingLevel,
|
|
32
|
+
maxHeadingLevel
|
|
33
|
+
}) {
|
|
34
|
+
const {
|
|
35
|
+
collapsed,
|
|
36
|
+
toggleCollapsed
|
|
37
|
+
} = (0, _themeCommon.useCollapsible)({
|
|
38
|
+
initialState: true
|
|
39
|
+
});
|
|
40
|
+
return <div className={(0, _clsx.default)(_stylesModule.default.tocCollapsible, {
|
|
41
|
+
[_stylesModule.default.tocCollapsibleExpanded]: !collapsed
|
|
42
|
+
}, className)}>
|
|
43
|
+
<button type="button" className={(0, _clsx.default)('clean-btn', _stylesModule.default.tocCollapsibleButton)} onClick={toggleCollapsed}>
|
|
44
|
+
<_Translate.default id="theme.TOCCollapsible.toggleButtonLabel" description="The label used by the button on the collapsible TOC component">
|
|
45
|
+
On this page
|
|
46
|
+
</_Translate.default>
|
|
47
|
+
</button>
|
|
48
|
+
|
|
49
|
+
<_themeCommon.Collapsible lazy className={_stylesModule.default.tocCollapsibleContent} collapsed={collapsed}>
|
|
50
|
+
<_TOCItems.default toc={toc} minHeadingLevel={minHeadingLevel} maxHeadingLevel={maxHeadingLevel} />
|
|
51
|
+
</_themeCommon.Collapsible>
|
|
52
|
+
</div>;
|
|
53
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
.tocCollapsible {
|
|
9
|
+
background-color: var(--ifm-menu-color-background-active);
|
|
10
|
+
border-radius: var(--ifm-global-radius);
|
|
11
|
+
margin: 1rem 0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.tocCollapsibleButton {
|
|
15
|
+
font-size: inherit;
|
|
16
|
+
display: flex;
|
|
17
|
+
justify-content: space-between;
|
|
18
|
+
align-items: center;
|
|
19
|
+
padding: 0.4rem 0.8rem;
|
|
20
|
+
width: 100%;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.tocCollapsibleButton:after {
|
|
24
|
+
content: '';
|
|
25
|
+
background: var(--ifm-menu-link-sublist-icon) 50% 50% / 2rem 2rem no-repeat;
|
|
26
|
+
filter: var(--ifm-menu-link-sublist-icon-filter);
|
|
27
|
+
height: 1.25rem;
|
|
28
|
+
width: 1.25rem;
|
|
29
|
+
transform: rotate(180deg);
|
|
30
|
+
transition: transform var(--ifm-transition-fast);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.tocCollapsibleContent > ul {
|
|
34
|
+
border-left: none;
|
|
35
|
+
border-top: 1px solid var(--ifm-color-emphasis-300);
|
|
36
|
+
padding: 0.2rem 0;
|
|
37
|
+
font-size: 15px;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.tocCollapsibleContent ul li {
|
|
41
|
+
margin: 0.4rem 0.8rem;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.tocCollapsibleContent a {
|
|
45
|
+
display: block;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.tocCollapsibleExpanded .tocCollapsibleButton:after {
|
|
49
|
+
transform: none;
|
|
50
|
+
}
|
|
@@ -7,10 +7,10 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
9
|
|
|
10
|
-
var _clsx = _interopRequireDefault(require("clsx"));
|
|
11
|
-
|
|
12
10
|
var _stylesModule = _interopRequireDefault(require("./styles.module.css"));
|
|
13
11
|
|
|
12
|
+
var _TOCItems = _interopRequireDefault(require("@theme/TOCItems"));
|
|
13
|
+
|
|
14
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
15
|
|
|
16
16
|
/**
|
|
@@ -19,33 +19,13 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
19
19
|
* This source code is licensed under the MIT license found in the
|
|
20
20
|
* LICENSE file in the root directory of this source tree.
|
|
21
21
|
*/
|
|
22
|
-
|
|
23
|
-
/* eslint-disable jsx-a11y/control-has-associated-label */
|
|
24
|
-
function HeadingsInline({
|
|
25
|
-
toc,
|
|
26
|
-
isChild
|
|
27
|
-
}) {
|
|
28
|
-
if (!toc.length) {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return <ul className={isChild ? '' : 'table-of-contents'}>
|
|
33
|
-
{toc.map(heading => <li key={heading.id}>
|
|
34
|
-
<a href={`#${heading.id}`} // Developer provided the HTML, so assume it's safe.
|
|
35
|
-
// eslint-disable-next-line react/no-danger
|
|
36
|
-
dangerouslySetInnerHTML={{
|
|
37
|
-
__html: heading.value
|
|
38
|
-
}} />
|
|
39
|
-
<HeadingsInline isChild toc={heading.children} />
|
|
40
|
-
</li>)}
|
|
41
|
-
</ul>;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
22
|
function TOCInline({
|
|
45
|
-
toc
|
|
23
|
+
toc,
|
|
24
|
+
minHeadingLevel,
|
|
25
|
+
maxHeadingLevel
|
|
46
26
|
}) {
|
|
47
|
-
return <div className={
|
|
48
|
-
<
|
|
27
|
+
return <div className={_stylesModule.default.tableOfContentsInline}>
|
|
28
|
+
<_TOCItems.default toc={toc} minHeadingLevel={minHeadingLevel} maxHeadingLevel={maxHeadingLevel} className="table-of-contents" linkClassName={null} />
|
|
49
29
|
</div>;
|
|
50
30
|
}
|
|
51
31
|
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = TOCItems;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _themeCommon = require("@docusaurus/theme-common");
|
|
11
|
+
|
|
12
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
13
|
+
|
|
14
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
18
|
+
*
|
|
19
|
+
* This source code is licensed under the MIT license found in the
|
|
20
|
+
* LICENSE file in the root directory of this source tree.
|
|
21
|
+
*/
|
|
22
|
+
// Recursive component rendering the toc tree
|
|
23
|
+
|
|
24
|
+
/* eslint-disable jsx-a11y/control-has-associated-label */
|
|
25
|
+
function TOCItemList({
|
|
26
|
+
toc,
|
|
27
|
+
className,
|
|
28
|
+
linkClassName,
|
|
29
|
+
isChild
|
|
30
|
+
}) {
|
|
31
|
+
if (!toc.length) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return <ul className={isChild ? undefined : className}>
|
|
36
|
+
{toc.map(heading => <li key={heading.id}>
|
|
37
|
+
<a href={`#${heading.id}`} className={linkClassName !== null && linkClassName !== void 0 ? linkClassName : undefined} // Developer provided the HTML, so assume it's safe.
|
|
38
|
+
// eslint-disable-next-line react/no-danger
|
|
39
|
+
dangerouslySetInnerHTML={{
|
|
40
|
+
__html: heading.value
|
|
41
|
+
}} />
|
|
42
|
+
<TOCItemList isChild toc={heading.children} className={className} linkClassName={linkClassName} />
|
|
43
|
+
</li>)}
|
|
44
|
+
</ul>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function TOCItems({
|
|
48
|
+
toc,
|
|
49
|
+
className = 'table-of-contents table-of-contents__left-border',
|
|
50
|
+
linkClassName = 'table-of-contents__link',
|
|
51
|
+
linkActiveClassName = undefined,
|
|
52
|
+
minHeadingLevel: minHeadingLevelOption,
|
|
53
|
+
maxHeadingLevel: maxHeadingLevelOption,
|
|
54
|
+
...props
|
|
55
|
+
}) {
|
|
56
|
+
const themeConfig = (0, _themeCommon.useThemeConfig)();
|
|
57
|
+
const minHeadingLevel = minHeadingLevelOption !== null && minHeadingLevelOption !== void 0 ? minHeadingLevelOption : themeConfig.tableOfContents.minHeadingLevel;
|
|
58
|
+
const maxHeadingLevel = maxHeadingLevelOption !== null && maxHeadingLevelOption !== void 0 ? maxHeadingLevelOption : themeConfig.tableOfContents.maxHeadingLevel;
|
|
59
|
+
const tocFiltered = (0, _themeCommon.useTOCFilter)({
|
|
60
|
+
toc,
|
|
61
|
+
minHeadingLevel,
|
|
62
|
+
maxHeadingLevel
|
|
63
|
+
});
|
|
64
|
+
const tocHighlightConfig = (0, _react.useMemo)(() => {
|
|
65
|
+
if (linkClassName && linkActiveClassName) {
|
|
66
|
+
return {
|
|
67
|
+
linkClassName,
|
|
68
|
+
linkActiveClassName,
|
|
69
|
+
minHeadingLevel,
|
|
70
|
+
maxHeadingLevel
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return undefined;
|
|
75
|
+
}, [linkClassName, linkActiveClassName, minHeadingLevel, maxHeadingLevel]);
|
|
76
|
+
(0, _themeCommon.useTOCHighlight)(tocHighlightConfig);
|
|
77
|
+
return <TOCItemList toc={tocFiltered} className={className} linkClassName={linkClassName} {...props} />;
|
|
78
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = _interopRequireDefault(require("react"));
|
|
4
|
+
|
|
5
|
+
var _reactTestRenderer = _interopRequireDefault(require("react-test-renderer"));
|
|
6
|
+
|
|
7
|
+
var _index = _interopRequireDefault(require("../index"));
|
|
8
|
+
|
|
9
|
+
var _TabItem = _interopRequireDefault(require("../../TabItem"));
|
|
10
|
+
|
|
11
|
+
var _UserPreferencesProvider = _interopRequireDefault(require("@theme/UserPreferencesProvider"));
|
|
12
|
+
|
|
13
|
+
var _themeCommon = require("@docusaurus/theme-common");
|
|
14
|
+
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
19
|
+
*
|
|
20
|
+
* This source code is licensed under the MIT license found in the
|
|
21
|
+
* LICENSE file in the root directory of this source tree.
|
|
22
|
+
*/
|
|
23
|
+
describe('Tabs', () => {
|
|
24
|
+
test('Should reject bad Tabs child', () => {
|
|
25
|
+
expect(() => {
|
|
26
|
+
_reactTestRenderer.default.create(<_index.default>
|
|
27
|
+
<div>Naughty</div>
|
|
28
|
+
<_TabItem.default value="good">Good</_TabItem.default>
|
|
29
|
+
</_index.default>);
|
|
30
|
+
}).toThrowErrorMatchingInlineSnapshot(`"Docusaurus error: Bad <Tabs> child <div>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique \\"value\\" prop."`);
|
|
31
|
+
});
|
|
32
|
+
test('Should reject bad Tabs defaultValue', () => {
|
|
33
|
+
expect(() => {
|
|
34
|
+
_reactTestRenderer.default.create(<_index.default defaultValue="bad">
|
|
35
|
+
<_TabItem.default value="v1">Tab 1</_TabItem.default>
|
|
36
|
+
<_TabItem.default value="v2">Tab 2</_TabItem.default>
|
|
37
|
+
</_index.default>);
|
|
38
|
+
}).toThrowErrorMatchingInlineSnapshot(`"Docusaurus error: The <Tabs> has a defaultValue \\"bad\\" but none of its children has the corresponding value. Available values are: v1, v2. If you intend to show no default tab, use defaultValue={null} instead."`);
|
|
39
|
+
});
|
|
40
|
+
test('Should reject duplicate values', () => {
|
|
41
|
+
expect(() => {
|
|
42
|
+
_reactTestRenderer.default.create(<_index.default>
|
|
43
|
+
<_TabItem.default value="v1">Tab 1</_TabItem.default>
|
|
44
|
+
<_TabItem.default value="v2">Tab 2</_TabItem.default>
|
|
45
|
+
<_TabItem.default value="v3">Tab 3</_TabItem.default>
|
|
46
|
+
<_TabItem.default value="v4">Tab 4</_TabItem.default>
|
|
47
|
+
<_TabItem.default value="v1">Tab 5</_TabItem.default>
|
|
48
|
+
<_TabItem.default value="v2">Tab 6</_TabItem.default>
|
|
49
|
+
</_index.default>);
|
|
50
|
+
}).toThrowErrorMatchingInlineSnapshot(`"Docusaurus error: Duplicate values \\"v1, v2\\" found in <Tabs>. Every value needs to be unique."`);
|
|
51
|
+
});
|
|
52
|
+
test('Should accept valid Tabs config', () => {
|
|
53
|
+
expect(() => {
|
|
54
|
+
_reactTestRenderer.default.create(<_themeCommon.ScrollControllerProvider>
|
|
55
|
+
<_UserPreferencesProvider.default>
|
|
56
|
+
<_index.default>
|
|
57
|
+
<_TabItem.default value="v1">Tab 1</_TabItem.default>
|
|
58
|
+
<_TabItem.default value="v2">Tab 2</_TabItem.default>
|
|
59
|
+
</_index.default>
|
|
60
|
+
<_index.default>
|
|
61
|
+
<_TabItem.default value="v1">Tab 1</_TabItem.default>
|
|
62
|
+
<_TabItem.default value="v2" default>
|
|
63
|
+
Tab 2
|
|
64
|
+
</_TabItem.default>
|
|
65
|
+
</_index.default>
|
|
66
|
+
<_index.default defaultValue="v1">
|
|
67
|
+
<_TabItem.default value="v1" label="V1">
|
|
68
|
+
Tab 1
|
|
69
|
+
</_TabItem.default>
|
|
70
|
+
<_TabItem.default value="v2" label="V2">
|
|
71
|
+
Tab 2
|
|
72
|
+
</_TabItem.default>
|
|
73
|
+
</_index.default>
|
|
74
|
+
<_index.default defaultValue="v1" values={[{
|
|
75
|
+
value: 'v1',
|
|
76
|
+
label: 'V1'
|
|
77
|
+
}, {
|
|
78
|
+
value: 'v2',
|
|
79
|
+
label: 'V2'
|
|
80
|
+
}]}>
|
|
81
|
+
<_TabItem.default value="v1">Tab 1</_TabItem.default>
|
|
82
|
+
<_TabItem.default value="v2">Tab 2</_TabItem.default>
|
|
83
|
+
</_index.default>
|
|
84
|
+
<_index.default defaultValue={null} values={[{
|
|
85
|
+
value: 'v1',
|
|
86
|
+
label: 'V1'
|
|
87
|
+
}, {
|
|
88
|
+
value: 'v2',
|
|
89
|
+
label: 'V2'
|
|
90
|
+
}]}>
|
|
91
|
+
<_TabItem.default value="v1">Tab 1</_TabItem.default>
|
|
92
|
+
<_TabItem.default value="v2">Tab 2</_TabItem.default>
|
|
93
|
+
</_index.default>
|
|
94
|
+
<_index.default defaultValue={null}>
|
|
95
|
+
<_TabItem.default value="v1" label="V1">
|
|
96
|
+
Tab 1
|
|
97
|
+
</_TabItem.default>
|
|
98
|
+
<_TabItem.default value="v2" label="V2">
|
|
99
|
+
Tab 2
|
|
100
|
+
</_TabItem.default>
|
|
101
|
+
</_index.default>
|
|
102
|
+
</_UserPreferencesProvider.default>
|
|
103
|
+
</_themeCommon.ScrollControllerProvider>);
|
|
104
|
+
}).not.toThrow(); // TODO Better Jest infrastructure to mock the Layout
|
|
105
|
+
}); // https://github.com/facebook/docusaurus/issues/5729
|
|
106
|
+
|
|
107
|
+
test('Should accept dynamic Tabs with number values', () => {
|
|
108
|
+
expect(() => {
|
|
109
|
+
const tabs = ['Apple', 'Banana', 'Carrot'];
|
|
110
|
+
|
|
111
|
+
_reactTestRenderer.default.create(<_themeCommon.ScrollControllerProvider>
|
|
112
|
+
<_UserPreferencesProvider.default>
|
|
113
|
+
<_index.default values={tabs.map((t, idx) => ({
|
|
114
|
+
label: t,
|
|
115
|
+
value: idx
|
|
116
|
+
}))} defaultValue={0}>
|
|
117
|
+
{tabs.map((t, idx) => <_TabItem.default value={idx}>{t}</_TabItem.default>)}
|
|
118
|
+
</_index.default>
|
|
119
|
+
</_UserPreferencesProvider.default>
|
|
120
|
+
</_themeCommon.ScrollControllerProvider>);
|
|
121
|
+
}).not.toThrow();
|
|
122
|
+
});
|
|
123
|
+
});
|
package/lib/theme/Tabs/index.js
CHANGED
|
@@ -3,12 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default =
|
|
6
|
+
exports.default = Tabs;
|
|
7
7
|
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
|
|
10
|
+
var _useIsBrowser = _interopRequireDefault(require("@docusaurus/useIsBrowser"));
|
|
11
|
+
|
|
10
12
|
var _useUserPreferencesContext = _interopRequireDefault(require("@theme/hooks/useUserPreferencesContext"));
|
|
11
13
|
|
|
14
|
+
var _themeCommon = require("@docusaurus/theme-common");
|
|
15
|
+
|
|
12
16
|
var _clsx = _interopRequireDefault(require("clsx"));
|
|
13
17
|
|
|
14
18
|
var _stylesModule = _interopRequireDefault(require("./styles.module.css"));
|
|
@@ -25,43 +29,66 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
25
29
|
* This source code is licensed under the MIT license found in the
|
|
26
30
|
* LICENSE file in the root directory of this source tree.
|
|
27
31
|
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
bottom,
|
|
33
|
-
right
|
|
34
|
-
} = element.getBoundingClientRect();
|
|
35
|
-
const {
|
|
36
|
-
innerHeight,
|
|
37
|
-
innerWidth
|
|
38
|
-
} = window;
|
|
39
|
-
return top >= 0 && right <= innerWidth && bottom <= innerHeight && left >= 0;
|
|
32
|
+
// A very rough duck type, but good enough to guard against mistakes while
|
|
33
|
+
// allowing customization
|
|
34
|
+
function isTabItem(comp) {
|
|
35
|
+
return typeof comp.props.value !== 'undefined';
|
|
40
36
|
}
|
|
41
37
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
right: 39
|
|
45
|
-
};
|
|
38
|
+
function TabsComponent(props) {
|
|
39
|
+
var _ref, _children$find, _children$;
|
|
46
40
|
|
|
47
|
-
function Tabs(props) {
|
|
48
41
|
const {
|
|
49
42
|
lazy,
|
|
50
43
|
block,
|
|
51
|
-
defaultValue,
|
|
52
|
-
values,
|
|
44
|
+
defaultValue: defaultValueProp,
|
|
45
|
+
values: valuesProp,
|
|
53
46
|
groupId,
|
|
54
47
|
className
|
|
55
48
|
} = props;
|
|
49
|
+
|
|
50
|
+
const children = _react.Children.map(props.children, child => {
|
|
51
|
+
if ((0, _react.isValidElement)(child) && isTabItem(child)) {
|
|
52
|
+
return child;
|
|
53
|
+
} // child.type.name will give non-sensical values in prod because of
|
|
54
|
+
// minification, but we assume it won't throw in prod.
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
throw new Error(`Docusaurus error: Bad <Tabs> child <${// @ts-expect-error: guarding against unexpected cases
|
|
58
|
+
typeof child.type === 'string' ? child.type : child.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
const values = valuesProp !== null && valuesProp !== void 0 ? valuesProp : children.map(({
|
|
62
|
+
props: {
|
|
63
|
+
value,
|
|
64
|
+
label
|
|
65
|
+
}
|
|
66
|
+
}) => ({
|
|
67
|
+
value,
|
|
68
|
+
label
|
|
69
|
+
}));
|
|
70
|
+
const dup = (0, _themeCommon.duplicates)(values, (a, b) => a.value === b.value);
|
|
71
|
+
|
|
72
|
+
if (dup.length > 0) {
|
|
73
|
+
throw new Error(`Docusaurus error: Duplicate values "${dup.map(a => a.value).join(', ')}" found in <Tabs>. Every value needs to be unique.`);
|
|
74
|
+
} // When defaultValueProp is null, don't show a default tab
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
const defaultValue = defaultValueProp === null ? defaultValueProp : (_ref = defaultValueProp !== null && defaultValueProp !== void 0 ? defaultValueProp : (_children$find = children.find(child => child.props.default)) === null || _children$find === void 0 ? void 0 : _children$find.props.value) !== null && _ref !== void 0 ? _ref : (_children$ = children[0]) === null || _children$ === void 0 ? void 0 : _children$.props.value;
|
|
78
|
+
|
|
79
|
+
if (defaultValue !== null && !values.some(a => a.value === defaultValue)) {
|
|
80
|
+
throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${defaultValue}" but none of its children has the corresponding value. Available values are: ${values.map(a => a.value).join(', ')}. If you intend to show no default tab, use defaultValue={null} instead.`);
|
|
81
|
+
}
|
|
82
|
+
|
|
56
83
|
const {
|
|
57
84
|
tabGroupChoices,
|
|
58
85
|
setTabGroupChoices
|
|
59
86
|
} = (0, _useUserPreferencesContext.default)();
|
|
60
87
|
const [selectedValue, setSelectedValue] = (0, _react.useState)(defaultValue);
|
|
61
|
-
|
|
62
|
-
const children = _react.Children.toArray(props.children);
|
|
63
|
-
|
|
64
88
|
const tabRefs = [];
|
|
89
|
+
const {
|
|
90
|
+
blockElementScrollPositionUntilNextRender
|
|
91
|
+
} = (0, _themeCommon.useScrollPositionBlocker)();
|
|
65
92
|
|
|
66
93
|
if (groupId != null) {
|
|
67
94
|
const relevantTabGroupChoice = tabGroupChoices[groupId];
|
|
@@ -72,44 +99,36 @@ function Tabs(props) {
|
|
|
72
99
|
}
|
|
73
100
|
|
|
74
101
|
const handleTabChange = event => {
|
|
75
|
-
const
|
|
76
|
-
const
|
|
77
|
-
const
|
|
78
|
-
setSelectedValue(selectedTabValue);
|
|
79
|
-
|
|
80
|
-
if (groupId != null) {
|
|
81
|
-
setTabGroupChoices(groupId, selectedTabValue);
|
|
82
|
-
setTimeout(() => {
|
|
83
|
-
if (isInViewport(selectedTab)) {
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
102
|
+
const newTab = event.currentTarget;
|
|
103
|
+
const newTabIndex = tabRefs.indexOf(newTab);
|
|
104
|
+
const newTabValue = values[newTabIndex].value;
|
|
86
105
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
106
|
+
if (newTabValue !== selectedValue) {
|
|
107
|
+
blockElementScrollPositionUntilNextRender(newTab);
|
|
108
|
+
setSelectedValue(newTabValue);
|
|
109
|
+
|
|
110
|
+
if (groupId != null) {
|
|
111
|
+
setTabGroupChoices(groupId, newTabValue);
|
|
112
|
+
}
|
|
94
113
|
}
|
|
95
114
|
};
|
|
96
115
|
|
|
97
116
|
const handleKeydown = event => {
|
|
98
117
|
var _focusElement;
|
|
99
118
|
|
|
100
|
-
let focusElement;
|
|
119
|
+
let focusElement = null;
|
|
101
120
|
|
|
102
|
-
switch (event.
|
|
103
|
-
case
|
|
121
|
+
switch (event.key) {
|
|
122
|
+
case 'ArrowRight':
|
|
104
123
|
{
|
|
105
|
-
const nextTab = tabRefs.indexOf(event.
|
|
124
|
+
const nextTab = tabRefs.indexOf(event.currentTarget) + 1;
|
|
106
125
|
focusElement = tabRefs[nextTab] || tabRefs[0];
|
|
107
126
|
break;
|
|
108
127
|
}
|
|
109
128
|
|
|
110
|
-
case
|
|
129
|
+
case 'ArrowLeft':
|
|
111
130
|
{
|
|
112
|
-
const prevTab = tabRefs.indexOf(event.
|
|
131
|
+
const prevTab = tabRefs.indexOf(event.currentTarget) - 1;
|
|
113
132
|
focusElement = tabRefs[prevTab] || tabRefs[tabRefs.length - 1];
|
|
114
133
|
break;
|
|
115
134
|
}
|
|
@@ -131,7 +150,7 @@ function Tabs(props) {
|
|
|
131
150
|
}) => <li role="tab" tabIndex={selectedValue === value ? 0 : -1} aria-selected={selectedValue === value} className={(0, _clsx.default)('tabs__item', _stylesModule.default.tabItem, {
|
|
132
151
|
'tabs__item--active': selectedValue === value
|
|
133
152
|
})} key={value} ref={tabControl => tabRefs.push(tabControl)} onKeyDown={handleKeydown} onFocus={handleTabChange} onClick={handleTabChange}>
|
|
134
|
-
{label}
|
|
153
|
+
{label !== null && label !== void 0 ? label : value}
|
|
135
154
|
</li>)}
|
|
136
155
|
</ul>
|
|
137
156
|
|
|
@@ -146,5 +165,9 @@ function Tabs(props) {
|
|
|
146
165
|
</div>;
|
|
147
166
|
}
|
|
148
167
|
|
|
149
|
-
|
|
150
|
-
|
|
168
|
+
function Tabs(props) {
|
|
169
|
+
const isBrowser = (0, _useIsBrowser.default)();
|
|
170
|
+
return <TabsComponent // Remount tabs after hydration
|
|
171
|
+
// Temporary fix for https://github.com/facebook/docusaurus/issues/5653
|
|
172
|
+
key={String(isBrowser)} {...props} />;
|
|
173
|
+
}
|
|
@@ -8,16 +8,3 @@
|
|
|
8
8
|
.tabItem {
|
|
9
9
|
margin-top: 0 !important;
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
.tabItemActive {
|
|
13
|
-
animation: blink 0.5s ease-in-out 5;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
@keyframes blink {
|
|
17
|
-
0% {
|
|
18
|
-
background-color: var(--ifm-hover-overlay);
|
|
19
|
-
}
|
|
20
|
-
100% {
|
|
21
|
-
background-color: rgba(0, 0, 0, 0);
|
|
22
|
-
}
|
|
23
|
-
}
|