@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,22 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
.codeBlockContent {
|
|
4
|
+
position: relative;
|
|
5
|
+
/* rtl:ignore */
|
|
6
|
+
direction: ltr;
|
|
7
|
+
border-radius: inherit;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.codeBlockTitle {
|
|
11
|
+
border-bottom: 1px solid var(--ifm-color-emphasis-300);
|
|
12
|
+
font-size: var(--ifm-code-font-size);
|
|
13
|
+
font-weight: 500;
|
|
14
|
+
padding: 0.75rem var(--ifm-pre-padding);
|
|
15
|
+
border-top-left-radius: inherit;
|
|
16
|
+
border-top-right-radius: inherit;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.codeBlockTitle + .codeBlockContent .codeBlock {
|
|
20
|
+
border-top-left-radius: 0;
|
|
21
|
+
border-top-right-radius: 0;
|
|
22
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import type {Props} from '@theme/CodeBlock/Line/Token';
|
|
5
|
+
|
|
6
|
+
// Pass-through components that users can swizzle and customize
|
|
7
|
+
export default function CodeBlockLineToken({
|
|
8
|
+
line,
|
|
9
|
+
token,
|
|
10
|
+
...props
|
|
11
|
+
}: Props): ReactNode {
|
|
12
|
+
return <span {...props} />;
|
|
13
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
import LineToken from '@theme/CodeBlock/Line/Token';
|
|
6
|
+
import type {Props} from '@theme/CodeBlock/Line';
|
|
7
|
+
|
|
8
|
+
import styles from './styles.module.css';
|
|
9
|
+
|
|
10
|
+
type Token = Props['line'][number];
|
|
11
|
+
|
|
12
|
+
// Replaces '\n' by ''
|
|
13
|
+
// Historical code, not sure why we even need this :/
|
|
14
|
+
function fixLineBreak(line: Token[]) {
|
|
15
|
+
const singleLineBreakToken =
|
|
16
|
+
line.length === 1 && line[0]!.content === '\n' ? line[0] : undefined;
|
|
17
|
+
|
|
18
|
+
if (singleLineBreakToken) {
|
|
19
|
+
return [{...singleLineBreakToken, content: ''}];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return line;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default function CodeBlockLine({
|
|
26
|
+
line: lineProp,
|
|
27
|
+
classNames,
|
|
28
|
+
showLineNumbers,
|
|
29
|
+
getLineProps,
|
|
30
|
+
getTokenProps,
|
|
31
|
+
}: Props): ReactNode {
|
|
32
|
+
const line = fixLineBreak(lineProp);
|
|
33
|
+
|
|
34
|
+
const lineProps = getLineProps({
|
|
35
|
+
line,
|
|
36
|
+
className: clsx(classNames, showLineNumbers && styles.codeLine),
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const lineTokens = line.map((token, key) => {
|
|
40
|
+
const tokenProps = getTokenProps({token});
|
|
41
|
+
return (
|
|
42
|
+
<LineToken key={key} {...tokenProps} line={line} token={token}>
|
|
43
|
+
{tokenProps.children}
|
|
44
|
+
</LineToken>
|
|
45
|
+
);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<span {...lineProps}>
|
|
50
|
+
{showLineNumbers ? (
|
|
51
|
+
<>
|
|
52
|
+
<span className={styles.codeLineNumber} />
|
|
53
|
+
<span className={styles.codeLineContent}>{lineTokens}</span>
|
|
54
|
+
</>
|
|
55
|
+
) : (
|
|
56
|
+
lineTokens
|
|
57
|
+
)}
|
|
58
|
+
<br />
|
|
59
|
+
</span>
|
|
60
|
+
);
|
|
61
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
/* Intentionally has zero specificity, so that to be able to override
|
|
4
|
+
the background in custom CSS file due bug https://github.com/facebook/docusaurus/issues/3678 */
|
|
5
|
+
:where(:root) {
|
|
6
|
+
--docusaurus-highlighted-code-line-bg: rgb(72 77 91);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
:where([data-theme='dark']) {
|
|
10
|
+
--docusaurus-highlighted-code-line-bg: rgb(100 100 100);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
:global(.theme-code-block-highlighted-line) {
|
|
14
|
+
background-color: var(--docusaurus-highlighted-code-line-bg);
|
|
15
|
+
display: block;
|
|
16
|
+
margin: 0 calc(-1 * var(--ifm-pre-padding));
|
|
17
|
+
padding: 0 var(--ifm-pre-padding);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.codeLine {
|
|
21
|
+
display: table-row;
|
|
22
|
+
counter-increment: line-count;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.codeLineNumber {
|
|
26
|
+
display: table-cell;
|
|
27
|
+
text-align: right;
|
|
28
|
+
width: 1%;
|
|
29
|
+
position: sticky;
|
|
30
|
+
left: 0;
|
|
31
|
+
padding: 0 var(--ifm-pre-padding);
|
|
32
|
+
background: var(--ifm-pre-background);
|
|
33
|
+
overflow-wrap: normal;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.codeLineNumber::before {
|
|
37
|
+
content: counter(line-count);
|
|
38
|
+
opacity: 0.4;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
:global(.theme-code-block-highlighted-line) .codeLineNumber::before {
|
|
42
|
+
opacity: 0.8;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.codeLineContent {
|
|
46
|
+
padding-right: var(--ifm-pre-padding);
|
|
47
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import type {ReactNode} from 'react';
|
|
4
|
+
|
|
5
|
+
import type {Props} from '@theme/CodeBlock/Title';
|
|
6
|
+
|
|
7
|
+
// Just a pass-through component that users can swizzle and customize
|
|
8
|
+
export default function CodeBlockTitle({children}: Props): ReactNode {
|
|
9
|
+
return children;
|
|
10
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {isValidElement, type ReactNode} from 'react';
|
|
4
|
+
import useIsBrowser from '@docusaurus/useIsBrowser';
|
|
5
|
+
import ElementContent from '@theme/CodeBlock/Content/Element';
|
|
6
|
+
import StringContent from '@theme/CodeBlock/Content/String';
|
|
7
|
+
import type {Props} from '@theme/CodeBlock';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Best attempt to make the children a plain string so it is copyable. If there
|
|
11
|
+
* are react elements, we will not be able to copy the content, and it will
|
|
12
|
+
* return `children` as-is; otherwise, it concatenates the string children
|
|
13
|
+
* together.
|
|
14
|
+
*/
|
|
15
|
+
function maybeStringifyChildren(children: ReactNode): ReactNode {
|
|
16
|
+
if (React.Children.toArray(children).some((el) => isValidElement(el))) {
|
|
17
|
+
return children;
|
|
18
|
+
}
|
|
19
|
+
// The children is now guaranteed to be one/more plain strings
|
|
20
|
+
return Array.isArray(children) ? children.join('') : (children as string);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export default function CodeBlock({
|
|
24
|
+
children: rawChildren,
|
|
25
|
+
...props
|
|
26
|
+
}: Props): ReactNode {
|
|
27
|
+
// The Prism theme on SSR is always the default theme but the site theme can
|
|
28
|
+
// be in a different mode. React hydration doesn't update DOM styles that come
|
|
29
|
+
// from SSR. Hence force a re-render after mounting to apply the current
|
|
30
|
+
// relevant styles.
|
|
31
|
+
const isBrowser = useIsBrowser();
|
|
32
|
+
const children = maybeStringifyChildren(rawChildren);
|
|
33
|
+
const CodeBlockComp =
|
|
34
|
+
typeof children === 'string' ? StringContent : ElementContent;
|
|
35
|
+
return (
|
|
36
|
+
<CodeBlockComp key={String(isBrowser)} {...props}>
|
|
37
|
+
{children as string}
|
|
38
|
+
</CodeBlockComp>
|
|
39
|
+
);
|
|
40
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import type {Props} from '@theme/CodeInline';
|
|
5
|
+
|
|
6
|
+
// Simple component used to render inline code blocks
|
|
7
|
+
// its purpose is to be swizzled and customized
|
|
8
|
+
// MDX 1 used to have a inlineCode comp, see https://mdxjs.com/migrating/v2/
|
|
9
|
+
export default function CodeInline(props: Props): ReactNode {
|
|
10
|
+
return <code {...props} />;
|
|
11
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
import useIsBrowser from '@docusaurus/useIsBrowser';
|
|
6
|
+
import {translate} from '@docusaurus/Translate';
|
|
7
|
+
import IconLightMode from '@theme/Icon/LightMode';
|
|
8
|
+
import IconDarkMode from '@theme/Icon/DarkMode';
|
|
9
|
+
import IconSystemColorMode from '@theme/Icon/SystemColorMode';
|
|
10
|
+
import type {Props} from '@theme/ColorModeToggle';
|
|
11
|
+
import type {ColorMode} from '@docusaurus/theme-common';
|
|
12
|
+
|
|
13
|
+
import styles from './styles.module.css';
|
|
14
|
+
|
|
15
|
+
// The order of color modes is defined here, and can be customized with swizzle
|
|
16
|
+
function getNextColorMode(
|
|
17
|
+
colorMode: ColorMode | null,
|
|
18
|
+
respectPrefersColorScheme: boolean,
|
|
19
|
+
) {
|
|
20
|
+
// 2-value transition
|
|
21
|
+
if (!respectPrefersColorScheme) {
|
|
22
|
+
return colorMode === 'dark' ? 'light' : 'dark';
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// 3-value transition
|
|
26
|
+
switch (colorMode) {
|
|
27
|
+
case null:
|
|
28
|
+
return 'light';
|
|
29
|
+
case 'light':
|
|
30
|
+
return 'dark';
|
|
31
|
+
case 'dark':
|
|
32
|
+
return null;
|
|
33
|
+
default:
|
|
34
|
+
throw new Error(`unexpected color mode ${colorMode}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function getColorModeLabel(colorMode: ColorMode | null): string {
|
|
39
|
+
switch (colorMode) {
|
|
40
|
+
case null:
|
|
41
|
+
return translate({
|
|
42
|
+
message: 'system mode',
|
|
43
|
+
id: 'theme.colorToggle.ariaLabel.mode.system',
|
|
44
|
+
description: 'The name for the system color mode',
|
|
45
|
+
});
|
|
46
|
+
case 'light':
|
|
47
|
+
return translate({
|
|
48
|
+
message: 'light mode',
|
|
49
|
+
id: 'theme.colorToggle.ariaLabel.mode.light',
|
|
50
|
+
description: 'The name for the light color mode',
|
|
51
|
+
});
|
|
52
|
+
case 'dark':
|
|
53
|
+
return translate({
|
|
54
|
+
message: 'dark mode',
|
|
55
|
+
id: 'theme.colorToggle.ariaLabel.mode.dark',
|
|
56
|
+
description: 'The name for the dark color mode',
|
|
57
|
+
});
|
|
58
|
+
default:
|
|
59
|
+
throw new Error(`unexpected color mode ${colorMode}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function getColorModeAriaLabel(colorMode: ColorMode | null) {
|
|
64
|
+
return translate(
|
|
65
|
+
{
|
|
66
|
+
message: 'Switch between dark and light mode (currently {mode})',
|
|
67
|
+
id: 'theme.colorToggle.ariaLabel',
|
|
68
|
+
description: 'The ARIA label for the color mode toggle',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
mode: getColorModeLabel(colorMode),
|
|
72
|
+
},
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function CurrentColorModeIcon(): ReactNode {
|
|
77
|
+
// 3 icons are always rendered for technical reasons
|
|
78
|
+
// We use "data-theme-choice" to render the correct one
|
|
79
|
+
// This must work even before React hydrates
|
|
80
|
+
return (
|
|
81
|
+
<>
|
|
82
|
+
<IconLightMode
|
|
83
|
+
// a18y is handled at the button level,
|
|
84
|
+
// not relying on button content (svg icons)
|
|
85
|
+
aria-hidden
|
|
86
|
+
className={clsx(styles.toggleIcon, styles.lightToggleIcon)}
|
|
87
|
+
/>
|
|
88
|
+
<IconDarkMode
|
|
89
|
+
aria-hidden
|
|
90
|
+
className={clsx(styles.toggleIcon, styles.darkToggleIcon)}
|
|
91
|
+
/>
|
|
92
|
+
<IconSystemColorMode
|
|
93
|
+
aria-hidden
|
|
94
|
+
className={clsx(styles.toggleIcon, styles.systemToggleIcon)}
|
|
95
|
+
/>
|
|
96
|
+
</>
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function ColorModeToggle({
|
|
101
|
+
className,
|
|
102
|
+
buttonClassName,
|
|
103
|
+
respectPrefersColorScheme,
|
|
104
|
+
value,
|
|
105
|
+
onChange,
|
|
106
|
+
}: Props): ReactNode {
|
|
107
|
+
const isBrowser = useIsBrowser();
|
|
108
|
+
return (
|
|
109
|
+
<div className={clsx(styles.toggle, className)}>
|
|
110
|
+
<button
|
|
111
|
+
className={clsx(
|
|
112
|
+
'clean-btn',
|
|
113
|
+
styles.toggleButton,
|
|
114
|
+
!isBrowser && styles.toggleButtonDisabled,
|
|
115
|
+
buttonClassName,
|
|
116
|
+
)}
|
|
117
|
+
type="button"
|
|
118
|
+
onClick={() =>
|
|
119
|
+
onChange(getNextColorMode(value, respectPrefersColorScheme))
|
|
120
|
+
}
|
|
121
|
+
disabled={!isBrowser}
|
|
122
|
+
title={getColorModeLabel(value)}
|
|
123
|
+
aria-label={getColorModeAriaLabel(value)}
|
|
124
|
+
|
|
125
|
+
// For accessibility decisions
|
|
126
|
+
// See https://github.com/facebook/docusaurus/issues/7667#issuecomment-2724401796
|
|
127
|
+
|
|
128
|
+
// aria-live disabled on purpose - This is annoying because:
|
|
129
|
+
// - without this attribute, VoiceOver doesn't announce on button enter
|
|
130
|
+
// - with this attribute, VoiceOver announces twice on ctrl+opt+space
|
|
131
|
+
// - with this attribute, NVDA announces many times
|
|
132
|
+
// aria-live="polite"
|
|
133
|
+
>
|
|
134
|
+
<CurrentColorModeIcon />
|
|
135
|
+
</button>
|
|
136
|
+
</div>
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export default React.memo(ColorModeToggle);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
.toggle {
|
|
4
|
+
width: 2rem;
|
|
5
|
+
height: 2rem;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.toggleButton {
|
|
9
|
+
-webkit-tap-highlight-color: transparent;
|
|
10
|
+
align-items: center;
|
|
11
|
+
display: flex;
|
|
12
|
+
justify-content: center;
|
|
13
|
+
width: 100%;
|
|
14
|
+
height: 100%;
|
|
15
|
+
border-radius: 50%;
|
|
16
|
+
transition: background var(--ifm-transition-fast);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.toggleButton:hover {
|
|
20
|
+
background: var(--ifm-color-emphasis-200);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.toggleIcon {
|
|
24
|
+
display: none;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
[data-theme-choice='system'] .systemToggleIcon,
|
|
28
|
+
[data-theme-choice='light'] .lightToggleIcon,
|
|
29
|
+
[data-theme-choice='dark'] .darkToggleIcon {
|
|
30
|
+
display: initial;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.toggleButtonDisabled {
|
|
34
|
+
cursor: not-allowed;
|
|
35
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
import {
|
|
6
|
+
ThemeClassNames,
|
|
7
|
+
DraftBannerTitle,
|
|
8
|
+
DraftBannerMessage,
|
|
9
|
+
} from '@docusaurus/theme-common';
|
|
10
|
+
import Admonition from '@theme/Admonition';
|
|
11
|
+
import type {Props} from '@theme/ContentVisibility/Draft';
|
|
12
|
+
|
|
13
|
+
export default function Draft({className}: Props): ReactNode {
|
|
14
|
+
return (
|
|
15
|
+
<Admonition
|
|
16
|
+
type="caution"
|
|
17
|
+
title={<DraftBannerTitle />}
|
|
18
|
+
className={clsx(className, ThemeClassNames.common.draftBanner)}>
|
|
19
|
+
<DraftBannerMessage />
|
|
20
|
+
</Admonition>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
import {
|
|
6
|
+
ThemeClassNames,
|
|
7
|
+
UnlistedBannerTitle,
|
|
8
|
+
UnlistedBannerMessage,
|
|
9
|
+
UnlistedMetadata,
|
|
10
|
+
} from '@docusaurus/theme-common';
|
|
11
|
+
import Admonition from '@theme/Admonition';
|
|
12
|
+
import type {Props} from '@theme/ContentVisibility/Unlisted';
|
|
13
|
+
|
|
14
|
+
function UnlistedBanner({className}: Props) {
|
|
15
|
+
return (
|
|
16
|
+
<Admonition
|
|
17
|
+
type="caution"
|
|
18
|
+
title={<UnlistedBannerTitle />}
|
|
19
|
+
className={clsx(className, ThemeClassNames.common.unlistedBanner)}>
|
|
20
|
+
<UnlistedBannerMessage />
|
|
21
|
+
</Admonition>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default function Unlisted(props: Props): ReactNode {
|
|
26
|
+
return (
|
|
27
|
+
<>
|
|
28
|
+
{/*
|
|
29
|
+
Unlisted metadata declared here for simplicity.
|
|
30
|
+
Ensures we never forget to add the correct noindex metadata.
|
|
31
|
+
Also gives a central place for user to swizzle override default metadata.
|
|
32
|
+
*/}
|
|
33
|
+
<UnlistedMetadata />
|
|
34
|
+
<UnlistedBanner {...props} />
|
|
35
|
+
</>
|
|
36
|
+
);
|
|
37
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
|
|
5
|
+
import type {Props} from '@theme/ContentVisibility';
|
|
6
|
+
import Draft from '@theme/ContentVisibility/Draft';
|
|
7
|
+
import Unlisted from '@theme/ContentVisibility/Unlisted';
|
|
8
|
+
|
|
9
|
+
export default function ContentVisibility({metadata}: Props): ReactNode {
|
|
10
|
+
const {unlisted, frontMatter} = metadata;
|
|
11
|
+
// Reading draft/unlisted status from frontMatter is useful to display
|
|
12
|
+
// the banners in dev mode (in dev, metadata.unlisted is always false)
|
|
13
|
+
// See https://github.com/facebook/docusaurus/issues/8285
|
|
14
|
+
return (
|
|
15
|
+
<>
|
|
16
|
+
{(unlisted || frontMatter.unlisted) && <Unlisted />}
|
|
17
|
+
{frontMatter.draft && <Draft />}
|
|
18
|
+
</>
|
|
19
|
+
);
|
|
20
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
import {Details as DetailsGeneric} from '@docusaurus/theme-common/Details';
|
|
6
|
+
import type {Props} from '@theme/Details';
|
|
7
|
+
|
|
8
|
+
import styles from './styles.module.css';
|
|
9
|
+
|
|
10
|
+
// Should we have a custom details/summary comp in Infima instead of reusing
|
|
11
|
+
// alert classes?
|
|
12
|
+
const InfimaClasses = 'alert alert--info';
|
|
13
|
+
|
|
14
|
+
export default function Details({...props}: Props): ReactNode {
|
|
15
|
+
return (
|
|
16
|
+
<DetailsGeneric
|
|
17
|
+
{...props}
|
|
18
|
+
className={clsx(InfimaClasses, styles.details, props.className)}
|
|
19
|
+
/>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import Link from '@docusaurus/Link';
|
|
5
|
+
import useBaseUrl from '@docusaurus/useBaseUrl';
|
|
6
|
+
import {translate} from '@docusaurus/Translate';
|
|
7
|
+
import IconHome from '@theme/Icon/Home';
|
|
8
|
+
|
|
9
|
+
import styles from './styles.module.css';
|
|
10
|
+
|
|
11
|
+
export default function HomeBreadcrumbItem(): ReactNode {
|
|
12
|
+
const homeHref = useBaseUrl('/');
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<li className="breadcrumbs__item">
|
|
16
|
+
<Link
|
|
17
|
+
aria-label={translate({
|
|
18
|
+
id: 'theme.docs.breadcrumbs.home',
|
|
19
|
+
message: 'Home page',
|
|
20
|
+
description: 'The ARIA label for the home page in the breadcrumbs',
|
|
21
|
+
})}
|
|
22
|
+
className="breadcrumbs__link no-underline pr-1"
|
|
23
|
+
href={homeHref}>
|
|
24
|
+
Home
|
|
25
|
+
{/* <IconHome className={styles.breadcrumbHomeIcon} /> */}
|
|
26
|
+
</Link>
|
|
27
|
+
</li>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import Head from '@docusaurus/Head';
|
|
5
|
+
import {useBreadcrumbsStructuredData} from '@docusaurus/plugin-content-docs/client';
|
|
6
|
+
import type {Props} from '@theme/DocBreadcrumbs/StructuredData';
|
|
7
|
+
|
|
8
|
+
export default function DocBreadcrumbsStructuredData(props: Props): ReactNode {
|
|
9
|
+
const structuredData = useBreadcrumbsStructuredData({
|
|
10
|
+
breadcrumbs: props.breadcrumbs,
|
|
11
|
+
});
|
|
12
|
+
return (
|
|
13
|
+
<Head>
|
|
14
|
+
<script type="application/ld+json">
|
|
15
|
+
{JSON.stringify(structuredData)}
|
|
16
|
+
</script>
|
|
17
|
+
</Head>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import React, {type ReactNode} from 'react';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
import {ThemeClassNames} from '@docusaurus/theme-common';
|
|
6
|
+
import {useSidebarBreadcrumbs} from '@docusaurus/plugin-content-docs/client';
|
|
7
|
+
import {useHomePageRoute} from '@docusaurus/theme-common/internal';
|
|
8
|
+
import Link from '@docusaurus/Link';
|
|
9
|
+
import {translate} from '@docusaurus/Translate';
|
|
10
|
+
import HomeBreadcrumbItem from '@theme/DocBreadcrumbs/Items/Home';
|
|
11
|
+
import DocBreadcrumbsStructuredData from '@theme/DocBreadcrumbs/StructuredData';
|
|
12
|
+
|
|
13
|
+
import styles from './styles.module.css';
|
|
14
|
+
|
|
15
|
+
// TODO move to design system folder
|
|
16
|
+
function BreadcrumbsItemLink({
|
|
17
|
+
children,
|
|
18
|
+
href,
|
|
19
|
+
isLast,
|
|
20
|
+
}: {
|
|
21
|
+
children: ReactNode;
|
|
22
|
+
href: string | undefined;
|
|
23
|
+
isLast: boolean;
|
|
24
|
+
}): ReactNode {
|
|
25
|
+
const className = 'breadcrumbs__link pr-1';
|
|
26
|
+
if (isLast) {
|
|
27
|
+
return <span className={className}>{children}</span>;
|
|
28
|
+
}
|
|
29
|
+
return href ? (
|
|
30
|
+
<Link className={className} href={href}>
|
|
31
|
+
<span>{children}</span>
|
|
32
|
+
</Link>
|
|
33
|
+
) : (
|
|
34
|
+
<span className={className}>{children}</span>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// TODO move to design system folder
|
|
39
|
+
function BreadcrumbsItem({
|
|
40
|
+
children,
|
|
41
|
+
active,
|
|
42
|
+
}: {
|
|
43
|
+
children: ReactNode;
|
|
44
|
+
active?: boolean;
|
|
45
|
+
}): ReactNode {
|
|
46
|
+
return (
|
|
47
|
+
<li
|
|
48
|
+
className={clsx('breadcrumbs__item', {
|
|
49
|
+
'breadcrumbs__item--active': active,
|
|
50
|
+
})}>
|
|
51
|
+
{children}
|
|
52
|
+
</li>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export default function DocBreadcrumbs(): ReactNode {
|
|
57
|
+
const breadcrumbs = useSidebarBreadcrumbs();
|
|
58
|
+
const homePageRoute = useHomePageRoute();
|
|
59
|
+
|
|
60
|
+
if (!breadcrumbs) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return (
|
|
65
|
+
<>
|
|
66
|
+
<DocBreadcrumbsStructuredData breadcrumbs={breadcrumbs} />
|
|
67
|
+
<nav
|
|
68
|
+
className={clsx(
|
|
69
|
+
ThemeClassNames.docs.docBreadcrumbs,
|
|
70
|
+
styles.breadcrumbsContainer,
|
|
71
|
+
''
|
|
72
|
+
)}
|
|
73
|
+
aria-label={translate({
|
|
74
|
+
id: 'theme.docs.breadcrumbs.navAriaLabel',
|
|
75
|
+
message: 'Breadcrumbs',
|
|
76
|
+
description: 'The ARIA label for the breadcrumbs',
|
|
77
|
+
})}>
|
|
78
|
+
<ul className="breadcrumbs">
|
|
79
|
+
{homePageRoute && <HomeBreadcrumbItem />}
|
|
80
|
+
{breadcrumbs.map((item, idx) => {
|
|
81
|
+
const isLast = idx === breadcrumbs.length - 1;
|
|
82
|
+
const href =
|
|
83
|
+
item.type === 'category' && item.linkUnlisted
|
|
84
|
+
? undefined
|
|
85
|
+
: item.href;
|
|
86
|
+
return (
|
|
87
|
+
<BreadcrumbsItem key={idx}>
|
|
88
|
+
<BreadcrumbsItemLink href={href} isLast={isLast}>
|
|
89
|
+
{item.label}
|
|
90
|
+
</BreadcrumbsItemLink>
|
|
91
|
+
</BreadcrumbsItem>
|
|
92
|
+
);
|
|
93
|
+
})}
|
|
94
|
+
</ul>
|
|
95
|
+
</nav>
|
|
96
|
+
</>
|
|
97
|
+
);
|
|
98
|
+
}
|