@docusaurus/theme-classic 2.0.0-beta.14 → 2.0.0-beta.15
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/index.js +7 -16
- package/lib/theme-classic.d.ts +89 -182
- package/lib/validateThemeConfig.js +13 -1
- package/lib-next/theme/BackToTopButton/styles.module.css +1 -1
- package/lib-next/theme/BlogListPaginator/index.js +12 -12
- package/lib-next/theme/BlogPostAuthor/index.js +1 -1
- package/lib-next/theme/BlogPostAuthors/index.js +12 -2
- package/lib-next/theme/BlogPostAuthors/styles.module.css +10 -0
- package/lib-next/theme/BlogPostItem/index.js +12 -15
- package/lib-next/theme/BlogPostPage/index.js +10 -7
- package/lib-next/theme/BlogPostPaginator/index.js +11 -15
- package/lib-next/theme/BlogSidebar/styles.module.css +2 -0
- package/lib-next/theme/CodeBlock/index.js +44 -9
- package/lib-next/theme/CodeBlock/styles.module.css +12 -7
- package/lib-next/theme/DocCard/styles.module.css +3 -3
- package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +6 -3
- package/lib-next/theme/DocItem/index.js +9 -6
- package/lib-next/theme/DocItem/styles.module.css +2 -2
- package/lib-next/theme/DocPage/index.js +7 -3
- package/lib-next/theme/DocPage/styles.module.css +1 -0
- package/lib-next/theme/DocPaginator/index.js +26 -4
- package/lib-next/theme/DocSidebar/index.js +2 -2
- package/lib-next/theme/DocSidebar/styles.module.css +1 -0
- package/lib-next/theme/DocSidebarItem/index.js +43 -21
- package/lib-next/theme/DocSidebarItem/styles.module.css +1 -0
- package/lib-next/theme/DocSidebarItems/index.js +28 -0
- package/{src/theme/hooks/styles.css → lib-next/theme/DocSidebarItems/styles.module.css} +12 -2
- package/lib-next/theme/DocVersionBanner/index.js +4 -1
- package/lib-next/theme/Footer/styles.module.css +2 -1
- package/lib-next/theme/Heading/index.js +39 -42
- package/lib-next/theme/Heading/styles.css +1 -1
- package/lib-next/theme/Layout/index.js +1 -2
- package/lib-next/theme/LayoutHead/index.js +5 -9
- package/lib-next/theme/LayoutProviders/index.js +6 -6
- package/lib-next/theme/MDXComponents/index.js +18 -31
- package/lib-next/theme/MDXComponents/styles.css +4 -0
- package/lib-next/theme/MDXPage/index.js +3 -10
- package/lib-next/theme/Navbar/index.js +6 -6
- package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +4 -66
- package/lib-next/theme/NavbarItem/DocNavbarItem.js +5 -2
- package/lib-next/theme/NavbarItem/DocSidebarNavbarItem.js +73 -0
- package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +5 -3
- package/lib-next/theme/NavbarItem/DocsVersionNavbarItem.js +4 -1
- package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +5 -5
- package/lib-next/theme/NavbarItem/NavbarNavLink.js +70 -0
- package/lib-next/theme/NavbarItem/index.js +1 -2
- package/lib-next/theme/{hooks/styles.css → NavbarItem/utils.js} +3 -4
- package/lib-next/theme/PaginatorNavLink/index.js +20 -0
- package/lib-next/theme/SkipToContent/index.js +1 -1
- package/lib-next/theme/SkipToContent/styles.module.css +7 -0
- package/lib-next/theme/TOCCollapsible/styles.module.css +2 -2
- package/lib-next/theme/Tabs/__tests__/index.test.js +8 -6
- package/lib-next/theme/Tabs/index.js +6 -3
- package/lib-next/theme/Tag/styles.module.css +4 -4
- package/lib-next/theme/ThemedImage/index.js +2 -2
- package/lib-next/theme/Toggle/styles.module.css +16 -15
- package/lib-next/theme/prism-include-languages.js +10 -3
- package/package.json +16 -17
- package/src/index.ts +10 -21
- package/src/theme/Admonition/index.tsx +1 -1
- package/src/theme/BackToTopButton/styles.module.css +1 -1
- package/src/theme/BlogListPaginator/index.tsx +12 -12
- package/src/theme/BlogPostAuthor/index.tsx +1 -1
- package/src/theme/BlogPostAuthors/index.tsx +12 -2
- package/src/theme/BlogPostAuthors/styles.module.css +10 -0
- package/src/theme/BlogPostItem/index.tsx +13 -15
- package/src/theme/BlogPostPage/index.tsx +10 -7
- package/src/theme/BlogPostPaginator/index.tsx +11 -15
- package/src/theme/BlogSidebar/styles.module.css +2 -0
- package/src/theme/CodeBlock/index.tsx +45 -10
- package/src/theme/CodeBlock/styles.module.css +12 -7
- package/src/theme/DocCard/index.tsx +2 -2
- package/src/theme/DocCard/styles.module.css +3 -3
- package/src/theme/DocCardList/index.tsx +1 -1
- package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +7 -3
- package/src/theme/DocItem/index.tsx +9 -6
- package/src/theme/DocItem/styles.module.css +2 -2
- package/src/theme/DocItemFooter/index.tsx +1 -1
- package/src/theme/DocPage/index.tsx +8 -4
- package/src/theme/DocPage/styles.module.css +1 -0
- package/src/theme/DocPaginator/index.tsx +26 -4
- package/src/theme/DocSidebar/index.tsx +3 -3
- package/src/theme/DocSidebar/styles.module.css +1 -0
- package/src/theme/DocSidebarItem/index.tsx +34 -23
- package/src/theme/DocSidebarItem/styles.module.css +1 -0
- package/src/theme/DocSidebarItems/index.tsx +32 -0
- package/src/theme/{UserPreferencesContext.ts → DocSidebarItems/styles.module.css} +11 -3
- package/src/theme/DocVersionBanner/index.tsx +3 -3
- package/src/theme/Footer/index.tsx +4 -4
- package/src/theme/Footer/styles.module.css +2 -1
- package/src/theme/Heading/index.tsx +39 -46
- package/src/theme/Heading/styles.css +1 -1
- package/src/theme/Layout/index.tsx +1 -2
- package/src/theme/LayoutHead/index.tsx +4 -8
- package/src/theme/LayoutProviders/index.tsx +6 -6
- package/src/theme/MDXComponents/index.tsx +26 -37
- package/src/theme/MDXComponents/styles.css +4 -0
- package/src/theme/MDXPage/index.tsx +3 -11
- package/src/theme/Navbar/index.tsx +7 -7
- package/src/theme/NavbarItem/DefaultNavbarItem.tsx +6 -62
- package/src/theme/NavbarItem/DocNavbarItem.tsx +8 -5
- package/src/theme/NavbarItem/DocSidebarNavbarItem.tsx +84 -0
- package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +9 -6
- package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +2 -2
- package/src/theme/NavbarItem/DropdownNavbarItem.tsx +5 -5
- package/src/theme/NavbarItem/NavbarNavLink.tsx +68 -0
- package/src/theme/NavbarItem/index.tsx +3 -5
- package/{lib-next/theme/UserPreferencesContext.js → src/theme/NavbarItem/utils.ts} +4 -3
- package/src/theme/PaginatorNavLink/index.tsx +22 -0
- package/src/theme/SkipToContent/index.tsx +1 -1
- package/src/theme/SkipToContent/styles.module.css +7 -0
- package/src/theme/TOCCollapsible/styles.module.css +2 -2
- package/src/theme/TOCItems/index.tsx +2 -2
- package/src/theme/Tabs/index.tsx +7 -4
- package/src/theme/Tag/styles.module.css +4 -4
- package/src/theme/TagsListByLetter/index.tsx +1 -1
- package/src/theme/ThemedImage/index.tsx +2 -2
- package/src/theme/Toggle/index.tsx +1 -1
- package/src/theme/Toggle/styles.module.css +16 -15
- package/src/theme/prism-include-languages.ts +10 -3
- package/src/theme-classic.d.ts +89 -182
- package/src/translations.ts +2 -2
- package/src/validateThemeConfig.ts +16 -0
- package/lib-next/theme/DocPaginatorNavLink/index.js +0 -36
- package/lib-next/theme/ThemeContext.js +0 -9
- package/lib-next/theme/ThemeProvider/index.js +0 -28
- package/lib-next/theme/UserPreferencesProvider/index.js +0 -27
- package/lib-next/theme/hooks/useDocs.js +0 -10
- package/lib-next/theme/hooks/useHideableNavbar.js +0 -66
- package/lib-next/theme/hooks/useKeyboardNavigation.js +0 -35
- package/lib-next/theme/hooks/useLockBodyScroll.js +0 -18
- package/lib-next/theme/hooks/usePrismTheme.js +0 -20
- package/lib-next/theme/hooks/useTabGroupChoice.js +0 -39
- package/lib-next/theme/hooks/useTheme.js +0 -81
- package/lib-next/theme/hooks/useThemeContext.js +0 -22
- package/lib-next/theme/hooks/useUserPreferencesContext.js +0 -22
- package/lib-next/theme/hooks/useWindowSize.js +0 -59
- package/src/theme/DocPaginatorNavLink/index.tsx +0 -38
- package/src/theme/ThemeContext.ts +0 -15
- package/src/theme/ThemeProvider/index.tsx +0 -28
- package/src/theme/UserPreferencesProvider/index.tsx +0 -30
- package/src/theme/hooks/useDocs.ts +0 -11
- package/src/theme/hooks/useHideableNavbar.ts +0 -72
- package/src/theme/hooks/useKeyboardNavigation.ts +0 -39
- package/src/theme/hooks/useLockBodyScroll.ts +0 -20
- package/src/theme/hooks/usePrismTheme.ts +0 -22
- package/src/theme/hooks/useTabGroupChoice.ts +0 -46
- package/src/theme/hooks/useTheme.ts +0 -91
- package/src/theme/hooks/useThemeContext.ts +0 -23
- package/src/theme/hooks/useUserPreferencesContext.ts +0 -25
- package/src/theme/hooks/useWindowSize.ts +0 -69
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import React, {useEffect,
|
|
8
|
+
import React, {useEffect, useMemo} from 'react';
|
|
9
9
|
import clsx from 'clsx';
|
|
10
10
|
import {
|
|
11
11
|
isActiveSidebarItem,
|
|
@@ -14,13 +14,16 @@ import {
|
|
|
14
14
|
useCollapsible,
|
|
15
15
|
findFirstCategoryLink,
|
|
16
16
|
ThemeClassNames,
|
|
17
|
+
useThemeConfig,
|
|
18
|
+
useDocSidebarItemsExpandedState,
|
|
17
19
|
} from '@docusaurus/theme-common';
|
|
18
20
|
import Link from '@docusaurus/Link';
|
|
19
21
|
import isInternalUrl from '@docusaurus/isInternalUrl';
|
|
20
22
|
import {translate} from '@docusaurus/Translate';
|
|
21
23
|
import IconExternalLink from '@theme/IconExternalLink';
|
|
22
24
|
|
|
23
|
-
import
|
|
25
|
+
import DocSidebarItems from '@theme/DocSidebarItems';
|
|
26
|
+
import type {Props} from '@theme/DocSidebarItem';
|
|
24
27
|
import type {
|
|
25
28
|
PropSidebarItemCategory,
|
|
26
29
|
PropSidebarItemLink,
|
|
@@ -29,23 +32,6 @@ import type {
|
|
|
29
32
|
import styles from './styles.module.css';
|
|
30
33
|
import useIsBrowser from '@docusaurus/useIsBrowser';
|
|
31
34
|
|
|
32
|
-
// Optimize sidebar at each "level"
|
|
33
|
-
// TODO this item should probably not receive the "activePath" props
|
|
34
|
-
// TODO this triggers whole sidebar re-renders on navigation
|
|
35
|
-
export const DocSidebarItems = memo(
|
|
36
|
-
({items, ...props}: DocSidebarItemsProps): JSX.Element => (
|
|
37
|
-
<>
|
|
38
|
-
{items.map((item, index) => (
|
|
39
|
-
<DocSidebarItem
|
|
40
|
-
key={index} // sidebar is static, the index does not change
|
|
41
|
-
item={item}
|
|
42
|
-
{...props}
|
|
43
|
-
/>
|
|
44
|
-
))}
|
|
45
|
-
</>
|
|
46
|
-
),
|
|
47
|
-
);
|
|
48
|
-
|
|
49
35
|
export default function DocSidebarItem({
|
|
50
36
|
item,
|
|
51
37
|
...props
|
|
@@ -108,6 +94,7 @@ function DocSidebarItemCategory({
|
|
|
108
94
|
onItemClick,
|
|
109
95
|
activePath,
|
|
110
96
|
level,
|
|
97
|
+
index,
|
|
111
98
|
...props
|
|
112
99
|
}: Props & {item: PropSidebarItemCategory}) {
|
|
113
100
|
const {items, label, collapsible, className, href} = item;
|
|
@@ -115,7 +102,7 @@ function DocSidebarItemCategory({
|
|
|
115
102
|
|
|
116
103
|
const isActive = isActiveSidebarItem(item, activePath);
|
|
117
104
|
|
|
118
|
-
const {collapsed, setCollapsed
|
|
105
|
+
const {collapsed, setCollapsed} = useCollapsible({
|
|
119
106
|
// active categories are always initialized as expanded
|
|
120
107
|
// the default (item.collapsed) is only used for non-active categories
|
|
121
108
|
initialState: () => {
|
|
@@ -127,6 +114,28 @@ function DocSidebarItemCategory({
|
|
|
127
114
|
});
|
|
128
115
|
|
|
129
116
|
useAutoExpandActiveCategory({isActive, collapsed, setCollapsed});
|
|
117
|
+
const {expandedItem, setExpandedItem} = useDocSidebarItemsExpandedState();
|
|
118
|
+
function updateCollapsed(toCollapsed: boolean = !collapsed) {
|
|
119
|
+
setExpandedItem(toCollapsed ? null : index);
|
|
120
|
+
setCollapsed(toCollapsed);
|
|
121
|
+
}
|
|
122
|
+
const {autoCollapseSidebarCategories} = useThemeConfig();
|
|
123
|
+
useEffect(() => {
|
|
124
|
+
if (
|
|
125
|
+
collapsible &&
|
|
126
|
+
expandedItem &&
|
|
127
|
+
expandedItem !== index &&
|
|
128
|
+
autoCollapseSidebarCategories
|
|
129
|
+
) {
|
|
130
|
+
setCollapsed(true);
|
|
131
|
+
}
|
|
132
|
+
}, [
|
|
133
|
+
collapsible,
|
|
134
|
+
expandedItem,
|
|
135
|
+
index,
|
|
136
|
+
setCollapsed,
|
|
137
|
+
autoCollapseSidebarCategories,
|
|
138
|
+
]);
|
|
130
139
|
|
|
131
140
|
return (
|
|
132
141
|
<li
|
|
@@ -152,16 +161,17 @@ function DocSidebarItemCategory({
|
|
|
152
161
|
? (e) => {
|
|
153
162
|
onItemClick?.(item);
|
|
154
163
|
if (href) {
|
|
155
|
-
|
|
164
|
+
updateCollapsed(false);
|
|
156
165
|
} else {
|
|
157
166
|
e.preventDefault();
|
|
158
|
-
|
|
167
|
+
updateCollapsed();
|
|
159
168
|
}
|
|
160
169
|
}
|
|
161
170
|
: () => {
|
|
162
171
|
onItemClick?.(item);
|
|
163
172
|
}
|
|
164
173
|
}
|
|
174
|
+
aria-current={isActive ? 'page' : undefined}
|
|
165
175
|
href={collapsible ? hrefWithSSRFallback ?? '#' : hrefWithSSRFallback}
|
|
166
176
|
{...props}>
|
|
167
177
|
{label}
|
|
@@ -181,7 +191,7 @@ function DocSidebarItemCategory({
|
|
|
181
191
|
className="clean-btn menu__caret"
|
|
182
192
|
onClick={(e) => {
|
|
183
193
|
e.preventDefault();
|
|
184
|
-
|
|
194
|
+
updateCollapsed();
|
|
185
195
|
}}
|
|
186
196
|
/>
|
|
187
197
|
)}
|
|
@@ -205,6 +215,7 @@ function DocSidebarItemLink({
|
|
|
205
215
|
onItemClick,
|
|
206
216
|
activePath,
|
|
207
217
|
level,
|
|
218
|
+
index,
|
|
208
219
|
...props
|
|
209
220
|
}: Props & {item: PropSidebarItemLink}) {
|
|
210
221
|
const {href, label, className} = item;
|
|
@@ -0,0 +1,32 @@
|
|
|
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
|
+
import React, {memo} from 'react';
|
|
9
|
+
import DocSidebarItem from '@theme/DocSidebarItem';
|
|
10
|
+
import {DocSidebarItemsExpandedStateProvider} from '@docusaurus/theme-common';
|
|
11
|
+
|
|
12
|
+
import type {Props} from '@theme/DocSidebarItems';
|
|
13
|
+
|
|
14
|
+
// TODO this item should probably not receive the "activePath" props
|
|
15
|
+
// TODO this triggers whole sidebar re-renders on navigation
|
|
16
|
+
function DocSidebarItems({items, ...props}: Props): JSX.Element {
|
|
17
|
+
return (
|
|
18
|
+
<DocSidebarItemsExpandedStateProvider>
|
|
19
|
+
{items.map((item, index) => (
|
|
20
|
+
<DocSidebarItem
|
|
21
|
+
key={index} // sidebar is static, the index does not change
|
|
22
|
+
item={item}
|
|
23
|
+
index={index}
|
|
24
|
+
{...props}
|
|
25
|
+
/>
|
|
26
|
+
))}
|
|
27
|
+
</DocSidebarItemsExpandedStateProvider>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Optimize sidebar at each "level"
|
|
32
|
+
export default memo(DocSidebarItems);
|
|
@@ -5,8 +5,16 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
@media (min-width: 997px) {
|
|
9
|
+
.menuLinkText {
|
|
10
|
+
cursor: initial;
|
|
11
|
+
}
|
|
9
12
|
|
|
10
|
-
|
|
13
|
+
.menuLinkText:hover {
|
|
14
|
+
background: none;
|
|
15
|
+
}
|
|
11
16
|
|
|
12
|
-
|
|
17
|
+
.menuLinkText.hasHref {
|
|
18
|
+
cursor: pointer;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -5,15 +5,15 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import React, {ComponentType} from 'react';
|
|
8
|
+
import React, {type ComponentType} from 'react';
|
|
9
9
|
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
10
10
|
import Link from '@docusaurus/Link';
|
|
11
11
|
import Translate from '@docusaurus/Translate';
|
|
12
12
|
import {
|
|
13
13
|
useActivePlugin,
|
|
14
14
|
useDocVersionSuggestions,
|
|
15
|
-
GlobalVersion,
|
|
16
|
-
} from '@
|
|
15
|
+
type GlobalVersion,
|
|
16
|
+
} from '@docusaurus/plugin-content-docs/client';
|
|
17
17
|
import {
|
|
18
18
|
ThemeClassNames,
|
|
19
19
|
useDocsPreferredVersion,
|
|
@@ -10,15 +10,15 @@ import clsx from 'clsx';
|
|
|
10
10
|
|
|
11
11
|
import Link from '@docusaurus/Link';
|
|
12
12
|
import {
|
|
13
|
-
FooterLinkItem,
|
|
13
|
+
type FooterLinkItem,
|
|
14
14
|
useThemeConfig,
|
|
15
|
-
MultiColumnFooter,
|
|
16
|
-
SimpleFooter,
|
|
15
|
+
type MultiColumnFooter,
|
|
16
|
+
type SimpleFooter,
|
|
17
17
|
} from '@docusaurus/theme-common';
|
|
18
18
|
import useBaseUrl from '@docusaurus/useBaseUrl';
|
|
19
19
|
import isInternalUrl from '@docusaurus/isInternalUrl';
|
|
20
20
|
import styles from './styles.module.css';
|
|
21
|
-
import ThemedImage, {Props as ThemedImageProps} from '@theme/ThemedImage';
|
|
21
|
+
import ThemedImage, {type Props as ThemedImageProps} from '@theme/ThemedImage';
|
|
22
22
|
import IconExternalLink from '@theme/IconExternalLink';
|
|
23
23
|
|
|
24
24
|
function FooterLink({
|
|
@@ -7,62 +7,55 @@
|
|
|
7
7
|
|
|
8
8
|
import React from 'react';
|
|
9
9
|
import clsx from 'clsx';
|
|
10
|
-
import type {
|
|
10
|
+
import type {Props} from '@theme/Heading';
|
|
11
11
|
import {translate} from '@docusaurus/Translate';
|
|
12
12
|
import {useThemeConfig} from '@docusaurus/theme-common';
|
|
13
13
|
|
|
14
14
|
import './styles.css';
|
|
15
15
|
import styles from './styles.module.css';
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
function AnchorHeading({as: As, id, ...props}: Props) {
|
|
18
|
+
const {
|
|
19
|
+
navbar: {hideOnScroll},
|
|
20
|
+
} = useThemeConfig();
|
|
18
21
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
if (!id) {
|
|
23
|
+
return <As {...props} />;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<As
|
|
23
28
|
{...props}
|
|
24
|
-
|
|
25
|
-
|
|
29
|
+
className={clsx('anchor', {
|
|
30
|
+
[styles.anchorWithHideOnScrollNavbar]: hideOnScroll,
|
|
31
|
+
[styles.anchorWithStickyNavbar]: !hideOnScroll,
|
|
32
|
+
})}
|
|
33
|
+
id={id}>
|
|
26
34
|
{props.children}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
<a
|
|
36
|
+
className="hash-link"
|
|
37
|
+
href={`#${id}`}
|
|
38
|
+
title={translate({
|
|
39
|
+
id: 'theme.common.headingLinkTitle',
|
|
40
|
+
message: 'Direct link to heading',
|
|
41
|
+
description: 'Title for link to heading',
|
|
42
|
+
})}>
|
|
43
|
+
​
|
|
44
|
+
</a>
|
|
45
|
+
</As>
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export default function Heading({as, ...props}: Props): JSX.Element {
|
|
50
|
+
if (as === 'h1') {
|
|
42
51
|
return (
|
|
43
|
-
<
|
|
52
|
+
<h1
|
|
44
53
|
{...props}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
[styles.anchorWithStickyNavbar]: !hideOnScroll,
|
|
48
|
-
})}
|
|
49
|
-
id={id}>
|
|
54
|
+
id={undefined} // h1 headings do not need an id because they don't appear in the TOC
|
|
55
|
+
>
|
|
50
56
|
{props.children}
|
|
51
|
-
|
|
52
|
-
className="hash-link"
|
|
53
|
-
href={`#${id}`}
|
|
54
|
-
title={translate({
|
|
55
|
-
id: 'theme.common.headingLinkTitle',
|
|
56
|
-
message: 'Direct link to heading',
|
|
57
|
-
description: 'Title for link to heading',
|
|
58
|
-
})}>
|
|
59
|
-
​
|
|
60
|
-
</a>
|
|
61
|
-
</Tag>
|
|
57
|
+
</h1>
|
|
62
58
|
);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
headingType === 'h1' ? MainHeading : createAnchorHeading(headingType);
|
|
67
|
-
|
|
68
|
-
export default Heading;
|
|
59
|
+
}
|
|
60
|
+
return <AnchorHeading as={as} {...props} />;
|
|
61
|
+
}
|
|
@@ -15,8 +15,7 @@ import Footer from '@theme/Footer';
|
|
|
15
15
|
import LayoutProviders from '@theme/LayoutProviders';
|
|
16
16
|
import LayoutHead from '@theme/LayoutHead';
|
|
17
17
|
import type {Props} from '@theme/Layout';
|
|
18
|
-
import useKeyboardNavigation from '@theme
|
|
19
|
-
import {ThemeClassNames} from '@docusaurus/theme-common';
|
|
18
|
+
import {ThemeClassNames, useKeyboardNavigation} from '@docusaurus/theme-common';
|
|
20
19
|
import ErrorPageContent from '@theme/ErrorPageContent';
|
|
21
20
|
import './styles.css';
|
|
22
21
|
|
|
@@ -25,7 +25,7 @@ import {useLocation} from '@docusaurus/router';
|
|
|
25
25
|
// See https://github.com/facebook/docusaurus/issues/3317
|
|
26
26
|
function AlternateLangHeaders(): JSX.Element {
|
|
27
27
|
const {
|
|
28
|
-
i18n: {defaultLocale,
|
|
28
|
+
i18n: {defaultLocale, localeConfigs},
|
|
29
29
|
} = useDocusaurusContext();
|
|
30
30
|
const alternatePageUtils = useAlternatePageUtils();
|
|
31
31
|
|
|
@@ -33,7 +33,7 @@ function AlternateLangHeaders(): JSX.Element {
|
|
|
33
33
|
// See https://www.searchviu.com/en/multiple-hreflang-tags-one-url/
|
|
34
34
|
return (
|
|
35
35
|
<Head>
|
|
36
|
-
{
|
|
36
|
+
{Object.entries(localeConfigs).map(([locale, {htmlLang}]) => (
|
|
37
37
|
<link
|
|
38
38
|
key={locale}
|
|
39
39
|
rel="alternate"
|
|
@@ -41,7 +41,7 @@ function AlternateLangHeaders(): JSX.Element {
|
|
|
41
41
|
locale,
|
|
42
42
|
fullyQualified: true,
|
|
43
43
|
})}
|
|
44
|
-
hrefLang={
|
|
44
|
+
hrefLang={htmlLang}
|
|
45
45
|
/>
|
|
46
46
|
))}
|
|
47
47
|
<link
|
|
@@ -91,11 +91,7 @@ export default function LayoutHead(props: Props): JSX.Element {
|
|
|
91
91
|
const {title, description, image, keywords, searchMetadata} = props;
|
|
92
92
|
const faviconUrl = useBaseUrl(favicon);
|
|
93
93
|
const pageTitle = useTitleFormatter(title);
|
|
94
|
-
|
|
95
|
-
// See https://github.com/facebook/docusaurus/issues/3317#issuecomment-754661855
|
|
96
|
-
// const htmlLang = currentLocale.split('-')[0];
|
|
97
|
-
const htmlLang = currentLocale; // should we allow the user to override htmlLang with localeConfig?
|
|
98
|
-
const htmlDir = localeConfigs[currentLocale].direction;
|
|
94
|
+
const {htmlLang, direction: htmlDir} = localeConfigs[currentLocale];
|
|
99
95
|
|
|
100
96
|
return (
|
|
101
97
|
<>
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import React from 'react';
|
|
9
|
-
import ThemeProvider from '@theme/ThemeProvider';
|
|
10
|
-
import UserPreferencesProvider from '@theme/UserPreferencesProvider';
|
|
11
9
|
import {
|
|
10
|
+
ColorModeProvider,
|
|
11
|
+
TabGroupChoiceProvider,
|
|
12
12
|
AnnouncementBarProvider,
|
|
13
13
|
DocsPreferredVersionContextProvider,
|
|
14
14
|
MobileSecondaryMenuProvider,
|
|
@@ -18,9 +18,9 @@ import type {Props} from '@theme/LayoutProviders';
|
|
|
18
18
|
|
|
19
19
|
export default function LayoutProviders({children}: Props): JSX.Element {
|
|
20
20
|
return (
|
|
21
|
-
<
|
|
21
|
+
<ColorModeProvider>
|
|
22
22
|
<AnnouncementBarProvider>
|
|
23
|
-
<
|
|
23
|
+
<TabGroupChoiceProvider>
|
|
24
24
|
<ScrollControllerProvider>
|
|
25
25
|
<DocsPreferredVersionContextProvider>
|
|
26
26
|
<MobileSecondaryMenuProvider>
|
|
@@ -28,8 +28,8 @@ export default function LayoutProviders({children}: Props): JSX.Element {
|
|
|
28
28
|
</MobileSecondaryMenuProvider>
|
|
29
29
|
</DocsPreferredVersionContextProvider>
|
|
30
30
|
</ScrollControllerProvider>
|
|
31
|
-
</
|
|
31
|
+
</TabGroupChoiceProvider>
|
|
32
32
|
</AnnouncementBarProvider>
|
|
33
|
-
</
|
|
33
|
+
</ColorModeProvider>
|
|
34
34
|
);
|
|
35
35
|
}
|
|
@@ -5,10 +5,14 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import React, {
|
|
8
|
+
import React, {
|
|
9
|
+
type ComponentProps,
|
|
10
|
+
isValidElement,
|
|
11
|
+
type ReactElement,
|
|
12
|
+
} from 'react';
|
|
9
13
|
import Head from '@docusaurus/Head';
|
|
10
14
|
import Link from '@docusaurus/Link';
|
|
11
|
-
import CodeBlock
|
|
15
|
+
import CodeBlock from '@theme/CodeBlock';
|
|
12
16
|
import Heading from '@theme/Heading';
|
|
13
17
|
import Details from '@theme/Details';
|
|
14
18
|
import type {MDXComponentsObject} from '@theme/MDXComponents';
|
|
@@ -33,40 +37,25 @@ const MDXComponents: MDXComponentsObject = {
|
|
|
33
37
|
return <Head {...props}>{unwrappedChildren}</Head>;
|
|
34
38
|
},
|
|
35
39
|
code: (props) => {
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
// For retrocompatibility purposes (pretty rare use case)
|
|
39
|
-
// See https://github.com/facebook/docusaurus/pull/1584
|
|
40
|
-
if (isValidElement(children)) {
|
|
41
|
-
return children;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return !children.includes('\n') ? (
|
|
45
|
-
<code {...props} />
|
|
46
|
-
) : (
|
|
47
|
-
<CodeBlock {...props} />
|
|
40
|
+
const shouldBeInline = React.Children.toArray(props.children).every(
|
|
41
|
+
(el) => typeof el === 'string' && !el.includes('\n'),
|
|
48
42
|
);
|
|
49
|
-
},
|
|
50
|
-
a: (props) => <Link {...props} />,
|
|
51
|
-
pre: (props) => {
|
|
52
|
-
const {children} = props;
|
|
53
43
|
|
|
54
|
-
|
|
55
|
-
if (isValidElement(children) && isValidElement(children?.props?.children)) {
|
|
56
|
-
return children.props.children;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return (
|
|
60
|
-
<CodeBlock
|
|
61
|
-
{...((isValidElement(children)
|
|
62
|
-
? children?.props
|
|
63
|
-
: {...props}) as Props)}
|
|
64
|
-
/>
|
|
65
|
-
);
|
|
44
|
+
return shouldBeInline ? <code {...props} /> : <CodeBlock {...props} />;
|
|
66
45
|
},
|
|
46
|
+
a: (props) => <Link {...props} />,
|
|
47
|
+
pre: (props) => (
|
|
48
|
+
<CodeBlock
|
|
49
|
+
// If this pre is created by a ``` fenced codeblock, unwrap the children
|
|
50
|
+
{...(isValidElement(props.children) &&
|
|
51
|
+
props.children.props.originalType === 'code'
|
|
52
|
+
? props.children?.props
|
|
53
|
+
: {...props})}
|
|
54
|
+
/>
|
|
55
|
+
),
|
|
67
56
|
details: (props): JSX.Element => {
|
|
68
57
|
const items = React.Children.toArray(props.children) as ReactElement[];
|
|
69
|
-
// Split summary item from the rest to pass it as a separate prop to the
|
|
58
|
+
// Split summary item from the rest to pass it as a separate prop to the Details theme component
|
|
70
59
|
const summary: ReactElement<ComponentProps<'summary'>> = items.find(
|
|
71
60
|
(item) => item?.props?.mdxType === 'summary',
|
|
72
61
|
)!;
|
|
@@ -78,12 +67,12 @@ const MDXComponents: MDXComponentsObject = {
|
|
|
78
67
|
</Details>
|
|
79
68
|
);
|
|
80
69
|
},
|
|
81
|
-
h1: Heading
|
|
82
|
-
h2: Heading
|
|
83
|
-
h3: Heading
|
|
84
|
-
h4: Heading
|
|
85
|
-
h5: Heading
|
|
86
|
-
h6: Heading
|
|
70
|
+
h1: (props) => <Heading as="h1" {...props} />,
|
|
71
|
+
h2: (props) => <Heading as="h2" {...props} />,
|
|
72
|
+
h3: (props) => <Heading as="h3" {...props} />,
|
|
73
|
+
h4: (props) => <Heading as="h4" {...props} />,
|
|
74
|
+
h5: (props) => <Heading as="h5" {...props} />,
|
|
75
|
+
h6: (props) => <Heading as="h6" {...props} />,
|
|
87
76
|
};
|
|
88
77
|
|
|
89
78
|
export default MDXComponents;
|
|
@@ -19,18 +19,10 @@ import styles from './styles.module.css';
|
|
|
19
19
|
function MDXPage(props: Props): JSX.Element {
|
|
20
20
|
const {content: MDXPageContent} = props;
|
|
21
21
|
const {
|
|
22
|
-
|
|
23
|
-
frontMatter,
|
|
24
|
-
metadata,
|
|
22
|
+
metadata: {title, description, permalink, frontMatter},
|
|
25
23
|
} = MDXPageContent;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
title,
|
|
29
|
-
description,
|
|
30
|
-
wrapperClassName,
|
|
31
|
-
hide_table_of_contents: hideTableOfContents,
|
|
32
|
-
} = frontMatter;
|
|
33
|
-
const {permalink} = metadata;
|
|
24
|
+
const {wrapperClassName, hide_table_of_contents: hideTableOfContents} =
|
|
25
|
+
frontMatter;
|
|
34
26
|
|
|
35
27
|
return (
|
|
36
28
|
<Layout
|
|
@@ -10,18 +10,18 @@ import clsx from 'clsx';
|
|
|
10
10
|
import Translate from '@docusaurus/Translate';
|
|
11
11
|
import SearchBar from '@theme/SearchBar';
|
|
12
12
|
import Toggle from '@theme/Toggle';
|
|
13
|
-
import useThemeContext from '@theme/hooks/useThemeContext';
|
|
14
13
|
import {
|
|
15
14
|
useThemeConfig,
|
|
16
15
|
useMobileSecondaryMenuRenderer,
|
|
17
16
|
usePrevious,
|
|
18
17
|
useHistoryPopHandler,
|
|
18
|
+
useHideableNavbar,
|
|
19
|
+
useLockBodyScroll,
|
|
20
|
+
useWindowSize,
|
|
21
|
+
useColorMode,
|
|
19
22
|
} from '@docusaurus/theme-common';
|
|
20
|
-
import
|
|
21
|
-
import
|
|
22
|
-
import useWindowSize from '@theme/hooks/useWindowSize';
|
|
23
|
-
import {useActivePlugin} from '@theme/hooks/useDocs';
|
|
24
|
-
import NavbarItem, {Props as NavbarItemConfig} from '@theme/NavbarItem';
|
|
23
|
+
import {useActivePlugin} from '@docusaurus/plugin-content-docs/client';
|
|
24
|
+
import NavbarItem, {type Props as NavbarItemConfig} from '@theme/NavbarItem';
|
|
25
25
|
import Logo from '@theme/Logo';
|
|
26
26
|
import IconMenu from '@theme/IconMenu';
|
|
27
27
|
import IconClose from '@theme/IconClose';
|
|
@@ -88,7 +88,7 @@ function useColorModeToggle() {
|
|
|
88
88
|
const {
|
|
89
89
|
colorMode: {disableSwitch},
|
|
90
90
|
} = useThemeConfig();
|
|
91
|
-
const {isDarkTheme, setLightTheme, setDarkTheme} =
|
|
91
|
+
const {isDarkTheme, setLightTheme, setDarkTheme} = useColorMode();
|
|
92
92
|
const toggle = useCallback(
|
|
93
93
|
(e) => (e.target.checked ? setDarkTheme() : setLightTheme()),
|
|
94
94
|
[setLightTheme, setDarkTheme],
|