@seqera/docusaurus-theme-seqera 1.0.0
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 +26 -0
- package/package.json +66 -0
- package/src/getSwizzleConfig.ts +433 -0
- package/src/index.ts +154 -0
- package/src/inlineScripts.ts +95 -0
- package/src/inlineSvgSprites.ts +7 -0
- package/src/main-styles.css +322 -0
- package/src/nprogress.css +36 -0
- package/src/nprogress.ts +27 -0
- package/src/options.ts +503 -0
- package/src/prism-include-languages.ts +6 -0
- package/src/styles/api.css +42 -0
- package/src/styles/typography.css +342 -0
- package/src/theme/Admonition/Icon/Danger.tsx +15 -0
- package/src/theme/Admonition/Icon/Info.tsx +15 -0
- package/src/theme/Admonition/Icon/Note.tsx +15 -0
- package/src/theme/Admonition/Icon/Tip.tsx +15 -0
- package/src/theme/Admonition/Icon/Warning.tsx +15 -0
- package/src/theme/Admonition/Layout/index.tsx +53 -0
- package/src/theme/Admonition/Layout/styles.module.css +39 -0
- package/src/theme/Admonition/Type/Caution.tsx +34 -0
- package/src/theme/Admonition/Type/Danger.tsx +32 -0
- package/src/theme/Admonition/Type/Info.tsx +32 -0
- package/src/theme/Admonition/Type/Note.tsx +32 -0
- package/src/theme/Admonition/Type/Tip.tsx +32 -0
- package/src/theme/Admonition/Type/Warning.tsx +32 -0
- package/src/theme/Admonition/Types.tsx +33 -0
- package/src/theme/Admonition/index.tsx +23 -0
- package/src/theme/AdmonitionVersioned/AddedInVersion.tsx +14 -0
- package/src/theme/AdmonitionVersioned/AdmonitionVersioned.tsx +66 -0
- package/src/theme/AdmonitionVersioned/ChangedInVersion.tsx +14 -0
- package/src/theme/AdmonitionVersioned/DeprecatedInVersion.tsx +15 -0
- package/src/theme/AdmonitionVersioned/getStableVersion.ts +30 -0
- package/src/theme/AdmonitionVersioned/index.ts +1 -0
- package/src/theme/AdmonitionVersioned/stableVersions.ts +119 -0
- package/src/theme/AnnouncementBar/CloseButton/index.tsx +24 -0
- package/src/theme/AnnouncementBar/CloseButton/styles.module.css +6 -0
- package/src/theme/AnnouncementBar/Content/index.tsx +21 -0
- package/src/theme/AnnouncementBar/Content/styles.module.css +12 -0
- package/src/theme/AnnouncementBar/index.tsx +37 -0
- package/src/theme/AnnouncementBar/styles.module.css +57 -0
- package/src/theme/BackToTopButton/index.tsx +30 -0
- package/src/theme/BackToTopButton/styles.module.css +39 -0
- package/src/theme/Blog/Components/Author/Socials/index.tsx +75 -0
- package/src/theme/Blog/Components/Author/Socials/styles.module.css +34 -0
- package/src/theme/Blog/Components/Author/index.tsx +98 -0
- package/src/theme/Blog/Components/Author/styles.module.css +69 -0
- package/src/theme/Blog/Pages/BlogAuthorsListPage/index.tsx +57 -0
- package/src/theme/Blog/Pages/BlogAuthorsListPage/styles.module.css +6 -0
- package/src/theme/Blog/Pages/BlogAuthorsPostsPage/index.tsx +77 -0
- package/src/theme/BlogArchivePage/index.tsx +102 -0
- package/src/theme/BlogLayout/index.tsx +31 -0
- package/src/theme/BlogListPage/StructuredData/index.tsx +17 -0
- package/src/theme/BlogListPage/index.tsx +57 -0
- package/src/theme/BlogListPaginator/index.tsx +47 -0
- package/src/theme/BlogPostItem/Container/index.tsx +11 -0
- package/src/theme/BlogPostItem/Content/index.tsx +23 -0
- package/src/theme/BlogPostItem/Footer/ReadMoreLink/index.tsx +39 -0
- package/src/theme/BlogPostItem/Footer/index.tsx +85 -0
- package/src/theme/BlogPostItem/Header/Authors/index.tsx +49 -0
- package/src/theme/BlogPostItem/Header/Authors/styles.module.css +15 -0
- package/src/theme/BlogPostItem/Header/Info/index.tsx +77 -0
- package/src/theme/BlogPostItem/Header/Info/styles.module.css +5 -0
- package/src/theme/BlogPostItem/Header/Title/index.tsx +20 -0
- package/src/theme/BlogPostItem/Header/Title/styles.module.css +14 -0
- package/src/theme/BlogPostItem/Header/index.tsx +16 -0
- package/src/theme/BlogPostItem/index.tsx +27 -0
- package/src/theme/BlogPostItems/index.tsx +25 -0
- package/src/theme/BlogPostPage/Metadata/index.tsx +39 -0
- package/src/theme/BlogPostPage/StructuredData/index.tsx +16 -0
- package/src/theme/BlogPostPage/index.tsx +74 -0
- package/src/theme/BlogPostPaginator/index.tsx +46 -0
- package/src/theme/BlogSidebar/Content/index.tsx +52 -0
- package/src/theme/BlogSidebar/Desktop/index.tsx +52 -0
- package/src/theme/BlogSidebar/Desktop/styles.module.css +46 -0
- package/src/theme/BlogSidebar/Mobile/index.tsx +47 -0
- package/src/theme/BlogSidebar/Mobile/styles.module.css +5 -0
- package/src/theme/BlogSidebar/index.tsx +19 -0
- package/src/theme/BlogTagsListPage/index.tsx +33 -0
- package/src/theme/BlogTagsPostsPage/index.tsx +68 -0
- package/src/theme/CodeBlock/Buttons/Button/index.tsx +14 -0
- package/src/theme/CodeBlock/Buttons/CopyButton/index.tsx +82 -0
- package/src/theme/CodeBlock/Buttons/CopyButton/styles.module.css +42 -0
- package/src/theme/CodeBlock/Buttons/WordWrapButton/index.tsx +40 -0
- package/src/theme/CodeBlock/Buttons/WordWrapButton/styles.module.css +10 -0
- package/src/theme/CodeBlock/Buttons/index.tsx +27 -0
- package/src/theme/CodeBlock/Buttons/styles.module.css +32 -0
- package/src/theme/CodeBlock/Container/index.tsx +27 -0
- package/src/theme/CodeBlock/Container/styles.module.css +9 -0
- package/src/theme/CodeBlock/Content/Element.tsx +24 -0
- package/src/theme/CodeBlock/Content/String.tsx +37 -0
- package/src/theme/CodeBlock/Content/index.tsx +79 -0
- package/src/theme/CodeBlock/Content/styles.module.css +30 -0
- package/src/theme/CodeBlock/Layout/index.tsx +29 -0
- package/src/theme/CodeBlock/Layout/styles.module.css +22 -0
- package/src/theme/CodeBlock/Line/Token/index.tsx +13 -0
- package/src/theme/CodeBlock/Line/index.tsx +61 -0
- package/src/theme/CodeBlock/Line/styles.module.css +47 -0
- package/src/theme/CodeBlock/Title/index.tsx +10 -0
- package/src/theme/CodeBlock/index.tsx +40 -0
- package/src/theme/CodeInline/index.tsx +11 -0
- package/src/theme/ColorModeToggle/index.tsx +140 -0
- package/src/theme/ColorModeToggle/styles.module.css +35 -0
- package/src/theme/ContentVisibility/Draft/index.tsx +22 -0
- package/src/theme/ContentVisibility/Unlisted/index.tsx +37 -0
- package/src/theme/ContentVisibility/index.tsx +20 -0
- package/src/theme/Details/index.tsx +21 -0
- package/src/theme/Details/styles.module.css +8 -0
- package/src/theme/DocBreadcrumbs/Items/Home/index.tsx +29 -0
- package/src/theme/DocBreadcrumbs/Items/Home/styles.module.css +9 -0
- package/src/theme/DocBreadcrumbs/StructuredData/index.tsx +19 -0
- package/src/theme/DocBreadcrumbs/index.tsx +98 -0
- package/src/theme/DocBreadcrumbs/styles.module.css +14 -0
- package/src/theme/DocCard/index.tsx +133 -0
- package/src/theme/DocCard/styles.module.css +29 -0
- package/src/theme/DocCardList/index.tsx +43 -0
- package/src/theme/DocCardList/styles.module.css +9 -0
- package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +68 -0
- package/src/theme/DocCategoryGeneratedIndexPage/styles.module.css +13 -0
- package/src/theme/DocItem/Content/index.tsx +43 -0
- package/src/theme/DocItem/Footer/index.tsx +51 -0
- package/src/theme/DocItem/Layout/index.tsx +66 -0
- package/src/theme/DocItem/Layout/styles.module.css +12 -0
- package/src/theme/DocItem/Metadata/index.tsx +17 -0
- package/src/theme/DocItem/Paginator/index.tsx +20 -0
- package/src/theme/DocItem/TOC/Desktop/index.tsx +19 -0
- package/src/theme/DocItem/TOC/Mobile/index.tsx +22 -0
- package/src/theme/DocItem/TOC/Mobile/styles.module.css +26 -0
- package/src/theme/DocItem/index.tsx +23 -0
- package/src/theme/DocPaginator/index.tsx +46 -0
- package/src/theme/DocRoot/Layout/Main/index.tsx +31 -0
- package/src/theme/DocRoot/Layout/Main/styles.module.css +23 -0
- package/src/theme/DocRoot/Layout/Sidebar/ExpandButton/index.tsx +36 -0
- package/src/theme/DocRoot/Layout/Sidebar/ExpandButton/styles.module.css +29 -0
- package/src/theme/DocRoot/Layout/Sidebar/index.tsx +79 -0
- package/src/theme/DocRoot/Layout/Sidebar/styles.module.css +34 -0
- package/src/theme/DocRoot/Layout/index.tsx +32 -0
- package/src/theme/DocRoot/Layout/styles.module.css +11 -0
- package/src/theme/DocRoot/index.tsx +29 -0
- package/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx +34 -0
- package/src/theme/DocSidebar/Desktop/CollapseButton/styles.module.css +42 -0
- package/src/theme/DocSidebar/Desktop/Content/index.tsx +56 -0
- package/src/theme/DocSidebar/Desktop/Content/styles.module.css +18 -0
- package/src/theme/DocSidebar/Desktop/index.tsx +36 -0
- package/src/theme/DocSidebar/Desktop/styles.module.css +39 -0
- package/src/theme/DocSidebar/Mobile/index.tsx +49 -0
- package/src/theme/DocSidebar/index.tsx +25 -0
- package/src/theme/DocSidebarItem/Category/index.tsx +309 -0
- package/src/theme/DocSidebarItem/Category/styles.module.css +35 -0
- package/src/theme/DocSidebarItem/Html/index.tsx +30 -0
- package/src/theme/DocSidebarItem/Html/styles.module.css +8 -0
- package/src/theme/DocSidebarItem/Link/index.tsx +62 -0
- package/src/theme/DocSidebarItem/Link/styles.module.css +13 -0
- package/src/theme/DocSidebarItem/index.tsx +19 -0
- package/src/theme/DocSidebarItems/index.tsx +24 -0
- package/src/theme/DocTagDocListPage/index.tsx +113 -0
- package/src/theme/DocTagsListPage/index.tsx +52 -0
- package/src/theme/DocVersionBadge/index.tsx +29 -0
- package/src/theme/DocVersionBanner/index.tsx +171 -0
- package/src/theme/DocVersionRoot/index.tsx +46 -0
- package/src/theme/DocsRoot/index.tsx +17 -0
- package/src/theme/EditMetaRow/index.tsx +31 -0
- package/src/theme/EditMetaRow/styles.module.css +19 -0
- package/src/theme/EditThisPage/index.tsx +21 -0
- package/src/theme/ErrorPageContent.tsx +38 -0
- package/src/theme/Footer/Copyright/index.tsx +15 -0
- package/src/theme/Footer/Layout/index.tsx +42 -0
- package/src/theme/Footer/LinkItem/index.tsx +31 -0
- package/src/theme/Footer/Links/MultiColumn/index.tsx +53 -0
- package/src/theme/Footer/Links/Simple/index.tsx +38 -0
- package/src/theme/Footer/Links/index.tsx +16 -0
- package/src/theme/Footer/Logo/index.tsx +41 -0
- package/src/theme/Footer/Logo/styles.module.css +11 -0
- package/src/theme/Footer/index.tsx +28 -0
- package/src/theme/Heading/index.tsx +50 -0
- package/src/theme/Heading/styles.module.css +17 -0
- package/src/theme/Homepage/index.tsx +178 -0
- package/src/theme/Icon/AI/index.tsx +21 -0
- package/src/theme/Icon/AWS/index.tsx +22 -0
- package/src/theme/Icon/Arrow/index.tsx +15 -0
- package/src/theme/Icon/Azure/index.tsx +28 -0
- package/src/theme/Icon/Changelog/index.tsx +26 -0
- package/src/theme/Icon/ChatBubble/index.tsx +29 -0
- package/src/theme/Icon/ChatBubbles/index.tsx +42 -0
- package/src/theme/Icon/Close/index.tsx +21 -0
- package/src/theme/Icon/Cog/index.tsx +45 -0
- package/src/theme/Icon/Copy/index.tsx +15 -0
- package/src/theme/Icon/DarkMode/index.tsx +15 -0
- package/src/theme/Icon/Edit/index.tsx +24 -0
- package/src/theme/Icon/Edit/styles.module.css +6 -0
- package/src/theme/Icon/Envelope/index.tsx +33 -0
- package/src/theme/Icon/ExternalLink/index.tsx +30 -0
- package/src/theme/Icon/ExternalLink/styles.module.css +5 -0
- package/src/theme/Icon/Fusion/index.tsx +32 -0
- package/src/theme/Icon/GoogleCloud/index.tsx +56 -0
- package/src/theme/Icon/Home/index.tsx +15 -0
- package/src/theme/Icon/Language/index.tsx +24 -0
- package/src/theme/Icon/LightMode/index.tsx +15 -0
- package/src/theme/Icon/MCP/index.tsx +84 -0
- package/src/theme/Icon/Menu/index.tsx +29 -0
- package/src/theme/Icon/MultiQC/index.tsx +25 -0
- package/src/theme/Icon/Nextflow/index.tsx +25 -0
- package/src/theme/Icon/QuestionMark/index.tsx +46 -0
- package/src/theme/Icon/SeqeraCloud/index.tsx +35 -0
- package/src/theme/Icon/SeqeraEnterprise/index.tsx +372 -0
- package/src/theme/Icon/SeqeraLogo/index.tsx +22 -0
- package/src/theme/Icon/ServiceStatus/index.tsx +101 -0
- package/src/theme/Icon/Sidebar/index.tsx +8 -0
- package/src/theme/Icon/Socials/Bluesky/index.tsx +23 -0
- package/src/theme/Icon/Socials/Bluesky/styles.module.css +9 -0
- package/src/theme/Icon/Socials/Default/index.tsx +28 -0
- package/src/theme/Icon/Socials/Email/index.tsx +23 -0
- package/src/theme/Icon/Socials/GitHub/index.tsx +24 -0
- package/src/theme/Icon/Socials/GitHub/styles.module.css +9 -0
- package/src/theme/Icon/Socials/Instagram/index.tsx +23 -0
- package/src/theme/Icon/Socials/Instagram/styles.module.css +9 -0
- package/src/theme/Icon/Socials/LinkedIn/index.tsx +23 -0
- package/src/theme/Icon/Socials/LinkedIn/styles.module.css +9 -0
- package/src/theme/Icon/Socials/Mastodon/index.tsx +40 -0
- package/src/theme/Icon/Socials/StackOverflow/index.tsx +25 -0
- package/src/theme/Icon/Socials/Threads/index.tsx +25 -0
- package/src/theme/Icon/Socials/Threads/styles.module.css +9 -0
- package/src/theme/Icon/Socials/Twitch/index.tsx +32 -0
- package/src/theme/Icon/Socials/Twitter/index.tsx +22 -0
- package/src/theme/Icon/Socials/X/index.tsx +24 -0
- package/src/theme/Icon/Socials/X/styles.module.css +9 -0
- package/src/theme/Icon/Socials/YouTube/index.tsx +22 -0
- package/src/theme/Icon/Success/index.tsx +15 -0
- package/src/theme/Icon/SystemColorMode/index.tsx +15 -0
- package/src/theme/Icon/Wave/index.tsx +32 -0
- package/src/theme/Icon/WordWrap/index.tsx +15 -0
- package/src/theme/LastUpdated/index.tsx +91 -0
- package/src/theme/Layout/Provider/index.tsx +26 -0
- package/src/theme/Layout/index.tsx +59 -0
- package/src/theme/Layout/styles.module.css +23 -0
- package/src/theme/Logo/index.tsx +78 -0
- package/src/theme/MDXComponents/A/index.tsx +16 -0
- package/src/theme/MDXComponents/Button/index.tsx +43 -0
- package/src/theme/MDXComponents/Code.tsx +26 -0
- package/src/theme/MDXComponents/Details.tsx +26 -0
- package/src/theme/MDXComponents/Heading.tsx +9 -0
- package/src/theme/MDXComponents/Img/index.tsx +23 -0
- package/src/theme/MDXComponents/Img/styles.module.css +5 -0
- package/src/theme/MDXComponents/Li.tsx +17 -0
- package/src/theme/MDXComponents/Pre.tsx +10 -0
- package/src/theme/MDXComponents/Ul/index.tsx +25 -0
- package/src/theme/MDXComponents/Ul/styles.module.css +9 -0
- package/src/theme/MDXComponents/index.tsx +47 -0
- package/src/theme/MDXContent/index.tsx +10 -0
- package/src/theme/MDXPage/index.tsx +87 -0
- package/src/theme/MDXPage/styles.module.css +5 -0
- package/src/theme/Mermaid.tsx +11 -0
- package/src/theme/Navbar/ColorModeToggle/index.tsx +29 -0
- package/src/theme/Navbar/ColorModeToggle/styles.module.css +5 -0
- package/src/theme/Navbar/Content/index.tsx +152 -0
- package/src/theme/Navbar/Content/styles.module.css +19 -0
- package/src/theme/Navbar/Layout/index.tsx +59 -0
- package/src/theme/Navbar/Layout/styles.module.css +9 -0
- package/src/theme/Navbar/Logo/index.tsx +14 -0
- package/src/theme/Navbar/MobileSidebar/Header/index.tsx +37 -0
- package/src/theme/Navbar/MobileSidebar/Layout/index.tsx +72 -0
- package/src/theme/Navbar/MobileSidebar/Layout/styles.module.css +11 -0
- package/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx +90 -0
- package/src/theme/Navbar/MobileSidebar/SecondaryMenu/index.tsx +34 -0
- package/src/theme/Navbar/MobileSidebar/Toggle/index.tsx +25 -0
- package/src/theme/Navbar/MobileSidebar/index.tsx +28 -0
- package/src/theme/Navbar/Search/index.tsx +15 -0
- package/src/theme/Navbar/Search/styles.module.css +22 -0
- package/src/theme/Navbar/Submenu/SubmenuLinks.tsx +136 -0
- package/src/theme/Navbar/Submenu/index.tsx +84 -0
- package/src/theme/Navbar/Submenu/styles.module.css +82 -0
- package/src/theme/Navbar/index.tsx +13 -0
- package/src/theme/NavbarItem/ComponentTypes.tsx +27 -0
- package/src/theme/NavbarItem/DefaultNavbarItem/Desktop/index.tsx +29 -0
- package/src/theme/NavbarItem/DefaultNavbarItem/Mobile/index.tsx +18 -0
- package/src/theme/NavbarItem/DefaultNavbarItem/index.tsx +23 -0
- package/src/theme/NavbarItem/DocNavbarItem.tsx +38 -0
- package/src/theme/NavbarItem/DocSidebarNavbarItem.tsx +33 -0
- package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +189 -0
- package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +22 -0
- package/src/theme/NavbarItem/DropdownNavbarItem/Desktop/index.tsx +81 -0
- package/src/theme/NavbarItem/DropdownNavbarItem/Mobile/index.tsx +161 -0
- package/src/theme/NavbarItem/DropdownNavbarItem/Mobile/styles.module.css +5 -0
- package/src/theme/NavbarItem/DropdownNavbarItem/index.tsx +14 -0
- package/src/theme/NavbarItem/HtmlNavbarItem.tsx +27 -0
- package/src/theme/NavbarItem/LocaleDropdownNavbarItem/index.tsx +128 -0
- package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +6 -0
- package/src/theme/NavbarItem/NavbarNavLink.tsx +69 -0
- package/src/theme/NavbarItem/SearchNavbarItem.tsx +21 -0
- package/src/theme/NavbarItem/index.tsx +23 -0
- package/src/theme/NotFound/Content/index.tsx +34 -0
- package/src/theme/NotFound/index.tsx +22 -0
- package/src/theme/PaginatorNavLink/index.tsx +21 -0
- package/src/theme/SearchBar.tsx +8 -0
- package/src/theme/SearchMetadata/index.tsx +38 -0
- package/src/theme/SiteMetadata/index.tsx +153 -0
- package/src/theme/SkipToContent/index.tsx +9 -0
- package/src/theme/SkipToContent/styles.module.css +16 -0
- package/src/theme/TOC/index.tsx +26 -0
- package/src/theme/TOC/styles.module.css +23 -0
- package/src/theme/TOCCollapsible/CollapseButton/index.tsx +30 -0
- package/src/theme/TOCCollapsible/CollapseButton/styles.module.css +27 -0
- package/src/theme/TOCCollapsible/index.tsx +42 -0
- package/src/theme/TOCCollapsible/styles.module.css +26 -0
- package/src/theme/TOCInline/index.tsx +25 -0
- package/src/theme/TOCInline/styles.module.css +7 -0
- package/src/theme/TOCItems/Tree.tsx +40 -0
- package/src/theme/TOCItems/index.tsx +56 -0
- package/src/theme/TabItem/index.tsx +22 -0
- package/src/theme/TabItem/styles.module.css +5 -0
- package/src/theme/Tabs/index.tsx +167 -0
- package/src/theme/Tabs/styles.module.css +9 -0
- package/src/theme/Tag/index.tsx +30 -0
- package/src/theme/Tag/styles.module.css +65 -0
- package/src/theme/TagsListByLetter/index.tsx +40 -0
- package/src/theme/TagsListByLetter/styles.module.css +6 -0
- package/src/theme/TagsListInline/index.tsx +30 -0
- package/src/theme/TagsListInline/styles.module.css +10 -0
- package/src/theme/ThemeProvider/TitleFormatter/index.tsx +22 -0
- package/src/theme/ThemeProvider/index.tsx +9 -0
- package/src/theme/ThemedImage/index.tsx +21 -0
- package/src/theme/ThemedImage/styles.module.css +13 -0
- package/src/theme/pages/Home/index.tsx +19 -0
- package/src/theme/prism-include-languages.ts +39 -0
- package/src/theme-seqera.d.ts +2277 -0
- package/src/translations.ts +240 -0
- package/tailwind.config.js +7 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
5
|
+
import {useAlternatePageUtils} from '@docusaurus/theme-common/internal';
|
|
6
|
+
import {translate} from '@docusaurus/Translate';
|
|
7
|
+
import {mergeSearchStrings, useHistorySelector} from '@docusaurus/theme-common';
|
|
8
|
+
import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
|
|
9
|
+
import IconLanguage from '@theme/Icon/Language';
|
|
10
|
+
import type {LinkLikeNavbarItemProps} from '@theme/NavbarItem';
|
|
11
|
+
import type {Props} from '@theme/NavbarItem/LocaleDropdownNavbarItem';
|
|
12
|
+
|
|
13
|
+
import styles from './styles.module.css';
|
|
14
|
+
|
|
15
|
+
function useLocaleDropdownUtils() {
|
|
16
|
+
const {
|
|
17
|
+
siteConfig,
|
|
18
|
+
i18n: {localeConfigs},
|
|
19
|
+
} = useDocusaurusContext();
|
|
20
|
+
const alternatePageUtils = useAlternatePageUtils();
|
|
21
|
+
const search = useHistorySelector((history) => history.location.search);
|
|
22
|
+
const hash = useHistorySelector((history) => history.location.hash);
|
|
23
|
+
|
|
24
|
+
const getLocaleConfig = (locale: string) => {
|
|
25
|
+
const localeConfig = localeConfigs[locale];
|
|
26
|
+
if (!localeConfig) {
|
|
27
|
+
throw new Error(
|
|
28
|
+
`Docusaurus bug, no locale config found for locale=${locale}`,
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
return localeConfig;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const getBaseURLForLocale = (locale: string) => {
|
|
35
|
+
const localeConfig = getLocaleConfig(locale);
|
|
36
|
+
const isSameDomain = localeConfig.url === siteConfig.url;
|
|
37
|
+
if (isSameDomain) {
|
|
38
|
+
// Shorter paths if localized sites are hosted on the same domain
|
|
39
|
+
// This reduces HTML size a bit
|
|
40
|
+
return `pathname://${alternatePageUtils.createUrl({
|
|
41
|
+
locale,
|
|
42
|
+
fullyQualified: false,
|
|
43
|
+
})}`;
|
|
44
|
+
}
|
|
45
|
+
return alternatePageUtils.createUrl({
|
|
46
|
+
locale,
|
|
47
|
+
fullyQualified: true,
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
getURL: (locale: string, options: {queryString: string | undefined}) => {
|
|
53
|
+
// We have 2 query strings because
|
|
54
|
+
// - there's the current one
|
|
55
|
+
// - there's one user can provide through navbar config
|
|
56
|
+
// see https://github.com/facebook/docusaurus/pull/8915
|
|
57
|
+
const finalSearch = mergeSearchStrings(
|
|
58
|
+
[search, options.queryString],
|
|
59
|
+
'append',
|
|
60
|
+
);
|
|
61
|
+
return `${getBaseURLForLocale(locale)}${finalSearch}${hash}`;
|
|
62
|
+
},
|
|
63
|
+
getLabel: (locale: string) => {
|
|
64
|
+
return getLocaleConfig(locale).label;
|
|
65
|
+
},
|
|
66
|
+
getLang: (locale: string) => {
|
|
67
|
+
return getLocaleConfig(locale).htmlLang;
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export default function LocaleDropdownNavbarItem({
|
|
73
|
+
mobile,
|
|
74
|
+
dropdownItemsBefore,
|
|
75
|
+
dropdownItemsAfter,
|
|
76
|
+
queryString,
|
|
77
|
+
...props
|
|
78
|
+
}: Props): ReactNode {
|
|
79
|
+
const utils = useLocaleDropdownUtils();
|
|
80
|
+
|
|
81
|
+
const {
|
|
82
|
+
i18n: {currentLocale, locales},
|
|
83
|
+
} = useDocusaurusContext();
|
|
84
|
+
const localeItems = locales.map((locale): LinkLikeNavbarItemProps => {
|
|
85
|
+
return {
|
|
86
|
+
label: utils.getLabel(locale),
|
|
87
|
+
lang: utils.getLang(locale),
|
|
88
|
+
to: utils.getURL(locale, {queryString}),
|
|
89
|
+
target: '_self',
|
|
90
|
+
autoAddBaseUrl: false,
|
|
91
|
+
className:
|
|
92
|
+
// eslint-disable-next-line no-nested-ternary
|
|
93
|
+
locale === currentLocale
|
|
94
|
+
? // Similar idea as DefaultNavbarItem: select the right Infima active
|
|
95
|
+
// class name. This cannot be substituted with isActive, because the
|
|
96
|
+
// target URLs contain `pathname://` and therefore are not NavLinks!
|
|
97
|
+
mobile
|
|
98
|
+
? 'menu__link--active'
|
|
99
|
+
: 'dropdown__link--active'
|
|
100
|
+
: '',
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
const items = [...dropdownItemsBefore, ...localeItems, ...dropdownItemsAfter];
|
|
105
|
+
|
|
106
|
+
// Mobile is handled a bit differently
|
|
107
|
+
const dropdownLabel = mobile
|
|
108
|
+
? translate({
|
|
109
|
+
message: 'Languages',
|
|
110
|
+
id: 'theme.navbar.mobileLanguageDropdown.label',
|
|
111
|
+
description: 'The label for the mobile language switcher dropdown',
|
|
112
|
+
})
|
|
113
|
+
: utils.getLabel(currentLocale);
|
|
114
|
+
|
|
115
|
+
return (
|
|
116
|
+
<DropdownNavbarItem
|
|
117
|
+
{...props}
|
|
118
|
+
mobile={mobile}
|
|
119
|
+
label={
|
|
120
|
+
<>
|
|
121
|
+
<IconLanguage className={styles.iconLanguage} />
|
|
122
|
+
{dropdownLabel}
|
|
123
|
+
</>
|
|
124
|
+
}
|
|
125
|
+
items={items}
|
|
126
|
+
/>
|
|
127
|
+
);
|
|
128
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import Link from '@docusaurus/Link';
|
|
5
|
+
import useBaseUrl from '@docusaurus/useBaseUrl';
|
|
6
|
+
import isInternalUrl from '@docusaurus/isInternalUrl';
|
|
7
|
+
import {isRegexpStringMatch} from '@docusaurus/theme-common';
|
|
8
|
+
import IconExternalLink from '@theme/Icon/ExternalLink';
|
|
9
|
+
import type {Props} from '@theme/NavbarItem/NavbarNavLink';
|
|
10
|
+
|
|
11
|
+
export default function NavbarNavLink({
|
|
12
|
+
activeBasePath,
|
|
13
|
+
activeBaseRegex,
|
|
14
|
+
to,
|
|
15
|
+
href,
|
|
16
|
+
label,
|
|
17
|
+
html,
|
|
18
|
+
isDropdownLink,
|
|
19
|
+
prependBaseUrlToHref,
|
|
20
|
+
...props
|
|
21
|
+
}: Props): ReactNode {
|
|
22
|
+
// TODO all this seems hacky
|
|
23
|
+
// {to: 'version'} should probably be forbidden, in favor of {to: '/version'}
|
|
24
|
+
const toUrl = useBaseUrl(to);
|
|
25
|
+
const activeBaseUrl = useBaseUrl(activeBasePath);
|
|
26
|
+
const normalizedHref = useBaseUrl(href, {forcePrependBaseUrl: true});
|
|
27
|
+
const isExternalLink = label && href && !isInternalUrl(href);
|
|
28
|
+
|
|
29
|
+
// Link content is set through html XOR label
|
|
30
|
+
const linkContentProps = html
|
|
31
|
+
? {dangerouslySetInnerHTML: {__html: html}}
|
|
32
|
+
: {
|
|
33
|
+
children: (
|
|
34
|
+
<>
|
|
35
|
+
{label}
|
|
36
|
+
{isExternalLink && (
|
|
37
|
+
<IconExternalLink
|
|
38
|
+
{...(isDropdownLink && {width: 12, height: 12})}
|
|
39
|
+
/>
|
|
40
|
+
)}
|
|
41
|
+
</>
|
|
42
|
+
),
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
if (href) {
|
|
46
|
+
return (
|
|
47
|
+
<Link
|
|
48
|
+
href={prependBaseUrlToHref ? normalizedHref : href}
|
|
49
|
+
{...props}
|
|
50
|
+
{...linkContentProps}
|
|
51
|
+
/>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<Link
|
|
57
|
+
to={toUrl}
|
|
58
|
+
isNavLink
|
|
59
|
+
{...((activeBasePath || activeBaseRegex) && {
|
|
60
|
+
isActive: (_match, location) =>
|
|
61
|
+
activeBaseRegex
|
|
62
|
+
? isRegexpStringMatch(activeBaseRegex, location.pathname)
|
|
63
|
+
: location.pathname.startsWith(activeBaseUrl),
|
|
64
|
+
})}
|
|
65
|
+
{...props}
|
|
66
|
+
{...linkContentProps}
|
|
67
|
+
/>
|
|
68
|
+
);
|
|
69
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import SearchBar from '@theme/SearchBar';
|
|
5
|
+
import NavbarSearch from '@theme/Navbar/Search';
|
|
6
|
+
import type {Props} from '@theme/NavbarItem/SearchNavbarItem';
|
|
7
|
+
|
|
8
|
+
export default function SearchNavbarItem({
|
|
9
|
+
mobile,
|
|
10
|
+
className,
|
|
11
|
+
}: Props): ReactNode {
|
|
12
|
+
if (mobile) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<NavbarSearch className={className}>
|
|
18
|
+
<SearchBar />
|
|
19
|
+
</NavbarSearch>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import ComponentTypes from '@theme/NavbarItem/ComponentTypes';
|
|
5
|
+
import type {NavbarItemType, Props} from '@theme/NavbarItem';
|
|
6
|
+
|
|
7
|
+
function normalizeComponentType(type: NavbarItemType, props: object) {
|
|
8
|
+
// Backward compatibility: navbar item with no type set
|
|
9
|
+
// but containing dropdown items should use the type "dropdown"
|
|
10
|
+
if (!type || type === 'default') {
|
|
11
|
+
return 'items' in props ? 'dropdown' : 'default';
|
|
12
|
+
}
|
|
13
|
+
return type;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function NavbarItem({type, ...props}: Props): ReactNode {
|
|
17
|
+
const componentType = normalizeComponentType(type, props);
|
|
18
|
+
const NavbarItemComponent = ComponentTypes[componentType];
|
|
19
|
+
if (!NavbarItemComponent) {
|
|
20
|
+
throw new Error(`No NavbarItem component found for type "${type}".`);
|
|
21
|
+
}
|
|
22
|
+
return <NavbarItemComponent {...(props as any)} />;
|
|
23
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
import Translate from '@docusaurus/Translate';
|
|
6
|
+
import type {Props} from '@theme/NotFound/Content';
|
|
7
|
+
import Heading from '@theme/Heading';
|
|
8
|
+
|
|
9
|
+
export default function NotFoundContent({className}: Props): ReactNode {
|
|
10
|
+
return (
|
|
11
|
+
<main className={clsx('prose__wrapper container-md py-18 flex justify-center items-center', className)}>
|
|
12
|
+
<div className="">
|
|
13
|
+
<div className="">
|
|
14
|
+
<Heading as="h1" className="font-display font-semibold">
|
|
15
|
+
<Translate
|
|
16
|
+
id="theme.NotFound.title"
|
|
17
|
+
description="The title of the 404 page">
|
|
18
|
+
Page Not Found
|
|
19
|
+
</Translate>
|
|
20
|
+
</Heading>
|
|
21
|
+
<p className="max-w-md">
|
|
22
|
+
<Translate
|
|
23
|
+
id="theme.NotFound.p1"
|
|
24
|
+
description="The first paragraph of the 404 page">
|
|
25
|
+
404: Something has gone wrong with our dataflow. The page you are looking for does not exist.
|
|
26
|
+
</Translate>
|
|
27
|
+
</p>
|
|
28
|
+
<a className="btn btn-secondary shadow-none border text-black" href="/">Back to docs homepage</a>
|
|
29
|
+
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</main>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import {translate} from '@docusaurus/Translate';
|
|
5
|
+
import {PageMetadata} from '@docusaurus/theme-common';
|
|
6
|
+
import Layout from '@theme/Layout';
|
|
7
|
+
import NotFoundContent from '@theme/NotFound/Content';
|
|
8
|
+
|
|
9
|
+
export default function Index(): ReactNode {
|
|
10
|
+
const title = translate({
|
|
11
|
+
id: 'theme.NotFound.title',
|
|
12
|
+
message: 'Page Not Found',
|
|
13
|
+
});
|
|
14
|
+
return (
|
|
15
|
+
<>
|
|
16
|
+
<PageMetadata title={title} />
|
|
17
|
+
<Layout>
|
|
18
|
+
<NotFoundContent />
|
|
19
|
+
</Layout>
|
|
20
|
+
</>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
import Link from '@docusaurus/Link';
|
|
6
|
+
import type {Props} from '@theme/PaginatorNavLink';
|
|
7
|
+
|
|
8
|
+
export default function PaginatorNavLink(props: Props): ReactNode {
|
|
9
|
+
const {permalink, title, subLabel, isNext} = props;
|
|
10
|
+
return (
|
|
11
|
+
<Link
|
|
12
|
+
className={clsx(
|
|
13
|
+
'pagination-nav__link',
|
|
14
|
+
isNext ? 'pagination-nav__link--next' : 'pagination-nav__link--prev',
|
|
15
|
+
)}
|
|
16
|
+
to={permalink}>
|
|
17
|
+
{subLabel && <div className="pagination-nav__sublabel mb-1">{subLabel}</div>}
|
|
18
|
+
<div className="pagination-nav__label font-medium">{title}</div>
|
|
19
|
+
</Link>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
// By default, the classic theme does not provide any SearchBar implementation
|
|
4
|
+
// If you swizzled this, it is your responsibility to provide an implementation
|
|
5
|
+
// Tip: swizzle the SearchBar from the Algolia theme for inspiration:
|
|
6
|
+
// npm run swizzle @docusaurus/theme-search-algolia SearchBar
|
|
7
|
+
|
|
8
|
+
export {default} from '@docusaurus/Noop';
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
|
|
5
|
+
import Head from '@docusaurus/Head';
|
|
6
|
+
import type {Props} from '@theme/SearchMetadata';
|
|
7
|
+
|
|
8
|
+
// Note: we bias toward using Algolia metadata on purpose
|
|
9
|
+
// Not doing so leads to confusion in the community,
|
|
10
|
+
// as it requires to first crawl the site with the Algolia plugin enabled first
|
|
11
|
+
// - https://github.com/facebook/docusaurus/issues/6693
|
|
12
|
+
// - https://github.com/facebook/docusaurus/issues/4555
|
|
13
|
+
export default function SearchMetadata({
|
|
14
|
+
locale,
|
|
15
|
+
version,
|
|
16
|
+
tag,
|
|
17
|
+
}: Props): ReactNode {
|
|
18
|
+
// Seems safe to consider here the locale is the language, as the existing
|
|
19
|
+
// docsearch:language filter is afaik a regular string-based filter
|
|
20
|
+
const language = locale;
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<Head>
|
|
24
|
+
{/*
|
|
25
|
+
Docusaurus metadata, used by third-party search plugin
|
|
26
|
+
See https://github.com/cmfcmf/docusaurus-search-local/issues/99
|
|
27
|
+
*/}
|
|
28
|
+
{locale && <meta name="docusaurus_locale" content={locale} />}
|
|
29
|
+
{version && <meta name="docusaurus_version" content={version} />}
|
|
30
|
+
{tag && <meta name="docusaurus_tag" content={tag} />}
|
|
31
|
+
|
|
32
|
+
{/* Algolia DocSearch metadata */}
|
|
33
|
+
{language && <meta name="docsearch:language" content={language} />}
|
|
34
|
+
{version && <meta name="docsearch:version" content={version} />}
|
|
35
|
+
{tag && <meta name="docsearch:docusaurus_tag" content={tag} />}
|
|
36
|
+
</Head>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import Head from '@docusaurus/Head';
|
|
5
|
+
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
6
|
+
import useBaseUrl from '@docusaurus/useBaseUrl';
|
|
7
|
+
import {PageMetadata, useThemeConfig} from '@docusaurus/theme-common';
|
|
8
|
+
import {
|
|
9
|
+
DEFAULT_SEARCH_TAG,
|
|
10
|
+
useAlternatePageUtils,
|
|
11
|
+
keyboardFocusedClassName,
|
|
12
|
+
} from '@docusaurus/theme-common/internal';
|
|
13
|
+
import {useLocation} from '@docusaurus/router';
|
|
14
|
+
import {applyTrailingSlash} from '@docusaurus/utils-common';
|
|
15
|
+
import SearchMetadata from '@theme/SearchMetadata';
|
|
16
|
+
|
|
17
|
+
// TODO move to SiteMetadataDefaults or theme-common ?
|
|
18
|
+
// Useful for i18n/SEO
|
|
19
|
+
// See https://developers.google.com/search/docs/advanced/crawling/localized-versions
|
|
20
|
+
// See https://github.com/facebook/docusaurus/issues/3317
|
|
21
|
+
function AlternateLangHeaders(): ReactNode {
|
|
22
|
+
const {
|
|
23
|
+
i18n: {currentLocale, defaultLocale, localeConfigs},
|
|
24
|
+
} = useDocusaurusContext();
|
|
25
|
+
const alternatePageUtils = useAlternatePageUtils();
|
|
26
|
+
|
|
27
|
+
const currentHtmlLang = localeConfigs[currentLocale]!.htmlLang;
|
|
28
|
+
|
|
29
|
+
// HTML lang is a BCP 47 tag, but the Open Graph protocol requires
|
|
30
|
+
// using underscores instead of dashes.
|
|
31
|
+
// See https://ogp.me/#optional
|
|
32
|
+
// See https://en.wikipedia.org/wiki/IETF_language_tag)
|
|
33
|
+
const bcp47ToOpenGraphLocale = (code: string): string =>
|
|
34
|
+
code.replace('-', '_');
|
|
35
|
+
|
|
36
|
+
// Note: it is fine to use both "x-default" and "en" to target the same url
|
|
37
|
+
// See https://www.searchviu.com/en/multiple-hreflang-tags-one-url/
|
|
38
|
+
return (
|
|
39
|
+
<Head>
|
|
40
|
+
{Object.entries(localeConfigs).map(([locale, {htmlLang}]) => (
|
|
41
|
+
<link
|
|
42
|
+
key={locale}
|
|
43
|
+
rel="alternate"
|
|
44
|
+
href={alternatePageUtils.createUrl({
|
|
45
|
+
locale,
|
|
46
|
+
fullyQualified: true,
|
|
47
|
+
})}
|
|
48
|
+
hrefLang={htmlLang}
|
|
49
|
+
/>
|
|
50
|
+
))}
|
|
51
|
+
<link
|
|
52
|
+
rel="alternate"
|
|
53
|
+
href={alternatePageUtils.createUrl({
|
|
54
|
+
locale: defaultLocale,
|
|
55
|
+
fullyQualified: true,
|
|
56
|
+
})}
|
|
57
|
+
hrefLang="x-default"
|
|
58
|
+
/>
|
|
59
|
+
|
|
60
|
+
<meta
|
|
61
|
+
property="og:locale"
|
|
62
|
+
content={bcp47ToOpenGraphLocale(currentHtmlLang)}
|
|
63
|
+
/>
|
|
64
|
+
{Object.values(localeConfigs)
|
|
65
|
+
.filter((config) => currentHtmlLang !== config.htmlLang)
|
|
66
|
+
.map((config) => (
|
|
67
|
+
<meta
|
|
68
|
+
key={`meta-og-${config.htmlLang}`}
|
|
69
|
+
property="og:locale:alternate"
|
|
70
|
+
content={bcp47ToOpenGraphLocale(config.htmlLang)}
|
|
71
|
+
/>
|
|
72
|
+
))}
|
|
73
|
+
</Head>
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Default canonical url inferred from current page location pathname
|
|
78
|
+
function useDefaultCanonicalUrl() {
|
|
79
|
+
const {
|
|
80
|
+
siteConfig: {url: siteUrl, baseUrl, trailingSlash},
|
|
81
|
+
} = useDocusaurusContext();
|
|
82
|
+
|
|
83
|
+
// TODO using useLocation().pathname is not a super idea
|
|
84
|
+
// See https://github.com/facebook/docusaurus/issues/9170
|
|
85
|
+
const {pathname} = useLocation();
|
|
86
|
+
|
|
87
|
+
const canonicalPathname = applyTrailingSlash(useBaseUrl(pathname), {
|
|
88
|
+
trailingSlash,
|
|
89
|
+
baseUrl,
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
return siteUrl + canonicalPathname;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// TODO move to SiteMetadataDefaults or theme-common ?
|
|
96
|
+
function CanonicalUrlHeaders({permalink}: {permalink?: string}) {
|
|
97
|
+
const {
|
|
98
|
+
siteConfig: {url: siteUrl},
|
|
99
|
+
} = useDocusaurusContext();
|
|
100
|
+
const defaultCanonicalUrl = useDefaultCanonicalUrl();
|
|
101
|
+
|
|
102
|
+
const canonicalUrl = permalink
|
|
103
|
+
? `${siteUrl}${permalink}`
|
|
104
|
+
: defaultCanonicalUrl;
|
|
105
|
+
return (
|
|
106
|
+
<Head>
|
|
107
|
+
<meta property="og:url" content={canonicalUrl} />
|
|
108
|
+
<link rel="canonical" href={canonicalUrl} />
|
|
109
|
+
</Head>
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export default function SiteMetadata(): ReactNode {
|
|
114
|
+
const {
|
|
115
|
+
i18n: {currentLocale},
|
|
116
|
+
} = useDocusaurusContext();
|
|
117
|
+
|
|
118
|
+
// TODO maybe move these 2 themeConfig to siteConfig?
|
|
119
|
+
// These seems useful for other themes as well
|
|
120
|
+
const {metadata, image: defaultImage} = useThemeConfig();
|
|
121
|
+
|
|
122
|
+
return (
|
|
123
|
+
<>
|
|
124
|
+
<Head>
|
|
125
|
+
<meta name="twitter:card" content="summary_large_image" />
|
|
126
|
+
{/* The keyboard focus class name need to be applied when SSR so links
|
|
127
|
+
are outlined when JS is disabled */}
|
|
128
|
+
<body className={keyboardFocusedClassName} />
|
|
129
|
+
</Head>
|
|
130
|
+
|
|
131
|
+
{defaultImage && <PageMetadata image={defaultImage} />}
|
|
132
|
+
|
|
133
|
+
<CanonicalUrlHeaders />
|
|
134
|
+
|
|
135
|
+
<AlternateLangHeaders />
|
|
136
|
+
|
|
137
|
+
<SearchMetadata tag={DEFAULT_SEARCH_TAG} locale={currentLocale} />
|
|
138
|
+
|
|
139
|
+
{/*
|
|
140
|
+
It's important to have an additional <Head> element here, as it allows
|
|
141
|
+
react-helmet to override default metadata values set in previous <Head>
|
|
142
|
+
like "twitter:card". In same Head, the same meta would appear twice
|
|
143
|
+
instead of overriding.
|
|
144
|
+
*/}
|
|
145
|
+
<Head>
|
|
146
|
+
{/* Yes, "metadatum" is the grammatically correct term */}
|
|
147
|
+
{metadata.map((metadatum, i) => (
|
|
148
|
+
<meta key={i} {...metadatum} />
|
|
149
|
+
))}
|
|
150
|
+
</Head>
|
|
151
|
+
</>
|
|
152
|
+
);
|
|
153
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import {SkipToContentLink} from '@docusaurus/theme-common';
|
|
5
|
+
import styles from './styles.module.css';
|
|
6
|
+
|
|
7
|
+
export default function SkipToContent(): ReactNode {
|
|
8
|
+
return <SkipToContentLink className={styles.skipToContent} />;
|
|
9
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
.skipToContent {
|
|
4
|
+
position: fixed;
|
|
5
|
+
top: 1rem;
|
|
6
|
+
left: 100%;
|
|
7
|
+
z-index: calc(var(--ifm-z-index-fixed) + 1);
|
|
8
|
+
padding: calc(var(--ifm-global-spacing) / 2) var(--ifm-global-spacing);
|
|
9
|
+
color: var(--ifm-color-emphasis-900);
|
|
10
|
+
background-color: var(--ifm-background-surface-color);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.skipToContent:focus {
|
|
14
|
+
left: 1rem;
|
|
15
|
+
box-shadow: var(--ifm-global-shadow-md);
|
|
16
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
import TOCItems from '@theme/TOCItems';
|
|
6
|
+
import type {Props} from '@theme/TOC';
|
|
7
|
+
|
|
8
|
+
import styles from './styles.module.css';
|
|
9
|
+
|
|
10
|
+
// Using a custom className
|
|
11
|
+
// This prevents TOCInline/TOCCollapsible getting highlighted by mistake
|
|
12
|
+
const LINK_CLASS_NAME = 'table-of-contents__link toc-highlight';
|
|
13
|
+
const LINK_ACTIVE_CLASS_NAME = 'table-of-contents__link--active';
|
|
14
|
+
|
|
15
|
+
export default function TOC({className, ...props}: Props): ReactNode {
|
|
16
|
+
return (
|
|
17
|
+
<div className={clsx(styles.tableOfContents, 'thin-scrollbar', className)}>
|
|
18
|
+
<div className="text-[.7rem] mb-1 uppercase text-primary font-semibold">On this Page</div>
|
|
19
|
+
<TOCItems
|
|
20
|
+
{...props}
|
|
21
|
+
linkClassName={LINK_CLASS_NAME}
|
|
22
|
+
linkActiveClassName={LINK_ACTIVE_CLASS_NAME}
|
|
23
|
+
/>
|
|
24
|
+
</div>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
.tableOfContents {
|
|
9
|
+
max-height: calc(100vh - (var(--ifm-navbar-height) + 4rem));
|
|
10
|
+
overflow-y: auto;
|
|
11
|
+
position: sticky;
|
|
12
|
+
top: calc(var(--ifm-navbar-height) + 3rem);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@media (max-width: 996px) {
|
|
16
|
+
.tableOfContents {
|
|
17
|
+
display: none;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.docItemContainer {
|
|
21
|
+
padding: 0 0.3rem;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
import Translate from '@docusaurus/Translate';
|
|
6
|
+
import type {Props} from '@theme/TOCCollapsible/CollapseButton';
|
|
7
|
+
|
|
8
|
+
import styles from './styles.module.css';
|
|
9
|
+
|
|
10
|
+
export default function TOCCollapsibleCollapseButton({
|
|
11
|
+
collapsed,
|
|
12
|
+
...props
|
|
13
|
+
}: Props): ReactNode {
|
|
14
|
+
return (
|
|
15
|
+
<button
|
|
16
|
+
type="button"
|
|
17
|
+
{...props}
|
|
18
|
+
className={clsx(
|
|
19
|
+
styles.tocCollapsibleButton,
|
|
20
|
+
!collapsed && styles.tocCollapsibleButtonExpanded,
|
|
21
|
+
props.className,
|
|
22
|
+
)}>
|
|
23
|
+
<Translate
|
|
24
|
+
id="theme.TOCCollapsible.toggleButtonLabel"
|
|
25
|
+
description="The label used by the button on the collapsible TOC component">
|
|
26
|
+
On this page
|
|
27
|
+
</Translate>
|
|
28
|
+
</button>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
.tocCollapsible {
|
|
2
|
+
border-radius: none;
|
|
3
|
+
}
|
|
4
|
+
.tocCollapsibleButton {
|
|
5
|
+
font-size: inherit;
|
|
6
|
+
display: flex;
|
|
7
|
+
justify-content: space-between;
|
|
8
|
+
align-items: center;
|
|
9
|
+
padding: 0.4rem 0.8rem;
|
|
10
|
+
width: 100%;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.tocCollapsibleButton::after {
|
|
14
|
+
content: '';
|
|
15
|
+
/* background: var(--ifm-menu-link-sublist-icon) 50% 50% / 2rem 2rem no-repeat; */
|
|
16
|
+
background-image: url("data:image/svg+xml,%3Csvg width='25' height='24' viewBox='0 0 25 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.4943 10.4038L7.7174 15.1615L7.16162 14.6057L12.4943 9.29225L17.8078 14.6057L17.252 15.1615L12.4943 10.4038Z' fill='%23160F26'/%3E%3C/svg%3E%0A");
|
|
17
|
+
background-repeat: no-repeat;
|
|
18
|
+
background-size: 100%;
|
|
19
|
+
transform: rotateX(180deg);
|
|
20
|
+
filter: var(--ifm-menu-link-sublist-icon-filter);
|
|
21
|
+
height: 1.75rem;
|
|
22
|
+
width: 1.75rem;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.tocCollapsibleButtonExpanded::after {
|
|
26
|
+
/* transform: none; */
|
|
27
|
+
}
|