@docusaurus/theme-classic 2.0.0-beta.17 → 2.0.0-beta.18

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.
Files changed (184) hide show
  1. package/lib/getSwizzleConfig.js +113 -2
  2. package/lib/index.js +7 -12
  3. package/lib/theme-classic.d.ts +286 -60
  4. package/lib/translations.js +12 -2
  5. package/lib/validateThemeConfig.js +1 -1
  6. package/lib-next/theme/BackToTopButton/index.js +1 -3
  7. package/lib-next/theme/BlogArchivePage/index.js +14 -10
  8. package/lib-next/theme/BlogListPage/index.js +34 -13
  9. package/lib-next/theme/BlogPostItem/index.js +6 -6
  10. package/lib-next/theme/BlogPostPage/index.js +56 -45
  11. package/lib-next/theme/BlogTagsListPage/index.js +16 -12
  12. package/lib-next/theme/BlogTagsPostsPage/index.js +40 -33
  13. package/lib-next/theme/CodeBlock/CopyButton/index.js +60 -0
  14. package/lib-next/theme/CodeBlock/CopyButton/styles.module.css +66 -0
  15. package/lib-next/theme/CodeBlock/index.js +4 -36
  16. package/lib-next/theme/CodeBlock/styles.module.css +2 -22
  17. package/lib-next/theme/ColorModeToggle/index.js +36 -57
  18. package/lib-next/theme/ColorModeToggle/styles.module.css +8 -24
  19. package/lib-next/theme/DocBreadcrumbs/index.js +28 -11
  20. package/lib-next/theme/DocBreadcrumbs/styles.module.css +2 -17
  21. package/lib-next/theme/DocCard/index.js +17 -15
  22. package/lib-next/theme/DocCard/styles.module.css +8 -17
  23. package/lib-next/theme/DocCardList/index.js +15 -3
  24. package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +27 -6
  25. package/lib-next/theme/DocItem/index.js +84 -66
  26. package/lib-next/theme/DocPage/index.js +88 -89
  27. package/lib-next/theme/DocPage/styles.module.css +0 -4
  28. package/lib-next/theme/DocSidebar/Desktop/CollapseButton/index.js +34 -0
  29. package/lib-next/theme/DocSidebar/Desktop/CollapseButton/styles.module.css +44 -0
  30. package/lib-next/theme/DocSidebar/Desktop/Content/index.js +46 -0
  31. package/lib-next/theme/DocSidebar/Desktop/Content/styles.module.css +17 -0
  32. package/lib-next/theme/DocSidebar/Desktop/index.js +34 -0
  33. package/lib-next/theme/DocSidebar/Desktop/styles.module.css +50 -0
  34. package/lib-next/theme/DocSidebar/Mobile/index.js +49 -0
  35. package/lib-next/theme/DocSidebar/index.js +6 -113
  36. package/lib-next/theme/DocSidebarItem/index.js +14 -13
  37. package/lib-next/theme/DocSidebarItem/styles.module.css +4 -0
  38. package/lib-next/theme/DocTagDocListPage/index.js +38 -31
  39. package/lib-next/theme/DocTagsListPage/index.js +21 -16
  40. package/lib-next/theme/Footer/Copyright/index.js +18 -0
  41. package/lib-next/theme/Footer/Layout/index.js +26 -0
  42. package/lib-next/theme/Footer/LinkItem/index.js +33 -0
  43. package/lib-next/theme/Footer/Links/MultiColumn/index.js +47 -0
  44. package/lib-next/theme/Footer/Links/Simple/index.js +41 -0
  45. package/lib-next/theme/Footer/Links/index.js +17 -0
  46. package/lib-next/theme/Footer/Logo/index.js +38 -0
  47. package/lib-next/theme/Footer/{styles.module.css → Logo/styles.module.css} +0 -0
  48. package/lib-next/theme/Footer/index.js +11 -163
  49. package/lib-next/theme/Heading/index.js +6 -4
  50. package/lib-next/theme/IconExternalLink/styles.module.css +0 -2
  51. package/lib-next/theme/Layout/index.js +15 -10
  52. package/lib-next/theme/LayoutProviders/index.js +5 -4
  53. package/lib-next/theme/MDXComponents/A.js +11 -0
  54. package/lib-next/theme/MDXComponents/Code.js +28 -0
  55. package/lib-next/theme/MDXComponents/Details.js +20 -0
  56. package/lib-next/theme/MDXComponents/Head.js +26 -0
  57. package/lib-next/theme/MDXComponents/Heading.js +11 -0
  58. package/lib-next/theme/MDXComponents/Img.js +24 -0
  59. package/lib-next/theme/MDXComponents/Img.module.css +10 -0
  60. package/lib-next/theme/MDXComponents/Pre.js +18 -0
  61. package/lib-next/theme/MDXComponents/Ul.js +23 -0
  62. package/{src/theme/MDXComponents/styles.css → lib-next/theme/MDXComponents/Ul.module.css} +1 -5
  63. package/lib-next/theme/MDXComponents/index.js +22 -71
  64. package/lib-next/theme/MDXContent/index.js +12 -0
  65. package/lib-next/theme/MDXPage/index.js +33 -28
  66. package/lib-next/theme/Navbar/ColorModeToggle/index.js +25 -0
  67. package/lib-next/theme/Navbar/Content/index.js +70 -0
  68. package/lib-next/theme/Navbar/Content/styles.module.css +15 -0
  69. package/lib-next/theme/Navbar/Layout/index.js +54 -0
  70. package/{src/theme/Navbar → lib-next/theme/Navbar/Layout}/styles.module.css +0 -13
  71. package/lib-next/theme/Navbar/Logo/index.js +17 -0
  72. package/lib-next/theme/Navbar/MobileSidebar/Header/index.js +33 -0
  73. package/lib-next/theme/Navbar/MobileSidebar/Layout/index.js +28 -0
  74. package/lib-next/theme/Navbar/MobileSidebar/PrimaryMenu/index.js +33 -0
  75. package/lib-next/theme/Navbar/MobileSidebar/SecondaryMenu/index.js +36 -0
  76. package/lib-next/theme/Navbar/MobileSidebar/Toggle/index.js +23 -0
  77. package/lib-next/theme/Navbar/MobileSidebar/index.js +31 -0
  78. package/lib-next/theme/Navbar/index.js +6 -271
  79. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +2 -6
  80. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +10 -2
  81. package/lib-next/theme/NavbarItem/NavbarNavLink.js +8 -12
  82. package/lib-next/theme/NotFound.js +38 -33
  83. package/lib-next/theme/{LayoutHead → SiteMetadata}/index.js +11 -26
  84. package/lib-next/theme/TOCCollapsible/index.js +1 -3
  85. package/lib-next/theme/Tabs/__tests__/index.test.js +5 -5
  86. package/lib-next/theme/Tabs/index.js +2 -2
  87. package/lib-next/theme/Tag/index.js +4 -4
  88. package/lib-next/theme/ThemedImage/index.js +3 -3
  89. package/package.json +17 -17
  90. package/src/getSwizzleConfig.ts +122 -1
  91. package/src/index.ts +10 -12
  92. package/src/theme/BackToTopButton/index.tsx +1 -3
  93. package/src/theme/BlogArchivePage/index.tsx +18 -17
  94. package/src/theme/BlogLayout/index.tsx +1 -1
  95. package/src/theme/BlogListPage/index.tsx +32 -13
  96. package/src/theme/BlogPostItem/index.tsx +6 -6
  97. package/src/theme/BlogPostPage/index.tsx +55 -48
  98. package/src/theme/BlogTagsListPage/index.tsx +16 -12
  99. package/src/theme/BlogTagsPostsPage/index.tsx +39 -32
  100. package/src/theme/CodeBlock/CopyButton/index.tsx +66 -0
  101. package/src/theme/CodeBlock/CopyButton/styles.module.css +66 -0
  102. package/src/theme/CodeBlock/index.tsx +6 -38
  103. package/src/theme/CodeBlock/styles.module.css +2 -22
  104. package/src/theme/ColorModeToggle/index.tsx +36 -61
  105. package/src/theme/ColorModeToggle/styles.module.css +8 -24
  106. package/src/theme/DocBreadcrumbs/index.tsx +29 -10
  107. package/src/theme/DocBreadcrumbs/styles.module.css +2 -17
  108. package/src/theme/DocCard/index.tsx +24 -17
  109. package/src/theme/DocCard/styles.module.css +8 -17
  110. package/src/theme/DocCardList/index.tsx +14 -3
  111. package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +31 -4
  112. package/src/theme/DocItem/index.tsx +71 -55
  113. package/src/theme/DocPage/index.tsx +89 -90
  114. package/src/theme/DocPage/styles.module.css +0 -4
  115. package/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx +38 -0
  116. package/src/theme/DocSidebar/Desktop/CollapseButton/styles.module.css +44 -0
  117. package/src/theme/DocSidebar/Desktop/Content/index.tsx +55 -0
  118. package/src/theme/DocSidebar/Desktop/Content/styles.module.css +17 -0
  119. package/src/theme/DocSidebar/Desktop/index.tsx +38 -0
  120. package/src/theme/DocSidebar/Desktop/styles.module.css +50 -0
  121. package/src/theme/DocSidebar/Mobile/index.tsx +54 -0
  122. package/src/theme/DocSidebar/index.tsx +6 -121
  123. package/src/theme/DocSidebarItem/index.tsx +15 -16
  124. package/src/theme/DocSidebarItem/styles.module.css +4 -0
  125. package/src/theme/DocTagDocListPage/index.tsx +38 -30
  126. package/src/theme/DocTagsListPage/index.tsx +21 -16
  127. package/src/theme/DocVersionBanner/index.tsx +3 -4
  128. package/src/theme/Footer/Copyright/index.tsx +20 -0
  129. package/src/theme/Footer/Layout/index.tsx +34 -0
  130. package/src/theme/Footer/LinkItem/index.tsx +36 -0
  131. package/src/theme/Footer/Links/MultiColumn/index.tsx +51 -0
  132. package/src/theme/Footer/Links/Simple/index.tsx +42 -0
  133. package/src/theme/Footer/Links/index.tsx +21 -0
  134. package/src/theme/Footer/Logo/index.tsx +41 -0
  135. package/src/theme/Footer/{styles.module.css → Logo/styles.module.css} +0 -0
  136. package/src/theme/Footer/index.tsx +12 -186
  137. package/src/theme/Heading/index.tsx +6 -4
  138. package/src/theme/IconExternalLink/styles.module.css +0 -2
  139. package/src/theme/Layout/index.tsx +15 -10
  140. package/src/theme/LayoutProviders/index.tsx +5 -4
  141. package/src/theme/MDXComponents/A.tsx +14 -0
  142. package/src/theme/MDXComponents/Code.tsx +37 -0
  143. package/src/theme/MDXComponents/Details.tsx +26 -0
  144. package/src/theme/MDXComponents/Head.tsx +29 -0
  145. package/src/theme/MDXComponents/Heading.tsx +14 -0
  146. package/src/theme/MDXComponents/Img.module.css +10 -0
  147. package/src/theme/MDXComponents/Img.tsx +26 -0
  148. package/src/theme/MDXComponents/Pre.tsx +22 -0
  149. package/{lib-next/theme/MDXComponents/styles.css → src/theme/MDXComponents/Ul.module.css} +1 -5
  150. package/src/theme/MDXComponents/Ul.tsx +28 -0
  151. package/src/theme/MDXComponents/index.tsx +23 -80
  152. package/src/theme/MDXContent/index.tsx +15 -0
  153. package/src/theme/MDXPage/index.tsx +33 -28
  154. package/src/theme/Navbar/ColorModeToggle/index.tsx +30 -0
  155. package/src/theme/Navbar/Content/index.tsx +81 -0
  156. package/src/theme/Navbar/Content/styles.module.css +15 -0
  157. package/src/theme/Navbar/Layout/index.tsx +57 -0
  158. package/{lib-next/theme/Navbar → src/theme/Navbar/Layout}/styles.module.css +0 -13
  159. package/src/theme/Navbar/Logo/index.tsx +19 -0
  160. package/src/theme/Navbar/MobileSidebar/Header/index.tsx +34 -0
  161. package/src/theme/Navbar/MobileSidebar/Layout/index.tsx +31 -0
  162. package/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx +38 -0
  163. package/src/theme/Navbar/MobileSidebar/SecondaryMenu/index.tsx +38 -0
  164. package/src/theme/Navbar/MobileSidebar/Toggle/index.tsx +25 -0
  165. package/src/theme/Navbar/MobileSidebar/index.tsx +33 -0
  166. package/src/theme/Navbar/index.tsx +6 -286
  167. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +2 -2
  168. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +11 -2
  169. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/index.tsx +1 -1
  170. package/src/theme/NavbarItem/NavbarNavLink.tsx +3 -7
  171. package/src/theme/NavbarItem/index.tsx +3 -4
  172. package/src/theme/NotFound.tsx +38 -33
  173. package/src/theme/{LayoutHead → SiteMetadata}/index.tsx +11 -25
  174. package/src/theme/TOCCollapsible/index.tsx +1 -3
  175. package/src/theme/Tabs/index.tsx +5 -6
  176. package/src/theme/Tag/index.tsx +4 -4
  177. package/src/theme/ThemedImage/index.tsx +4 -3
  178. package/src/theme-classic.d.ts +286 -60
  179. package/src/translations.ts +12 -6
  180. package/src/validateThemeConfig.ts +6 -6
  181. package/lib-next/theme/DocSidebar/styles.module.css +0 -107
  182. package/lib-next/theme/Seo/index.js +0 -40
  183. package/src/theme/DocSidebar/styles.module.css +0 -107
  184. package/src/theme/Seo/index.tsx +0 -49
@@ -6,13 +6,10 @@
6
6
  */
7
7
 
8
8
  import React, {type ReactNode, useState, useCallback} from 'react';
9
- import {MDXProvider} from '@mdx-js/react';
10
-
11
9
  import renderRoutes from '@docusaurus/renderRoutes';
12
10
  import type {PropVersionMetadata} from '@docusaurus/plugin-content-docs';
13
11
  import Layout from '@theme/Layout';
14
12
  import DocSidebar from '@theme/DocSidebar';
15
- import MDXComponents from '@theme/MDXComponents';
16
13
  import NotFound from '@theme/NotFound';
17
14
  import type {DocumentRoute} from '@theme/DocItem';
18
15
  import type {Props} from '@theme/DocPage';
@@ -23,14 +20,16 @@ import {translate} from '@docusaurus/Translate';
23
20
 
24
21
  import clsx from 'clsx';
25
22
  import styles from './styles.module.css';
23
+
26
24
  import {
25
+ HtmlClassNameProvider,
27
26
  ThemeClassNames,
28
27
  docVersionSearchTag,
29
28
  DocsSidebarProvider,
30
29
  useDocsSidebar,
31
30
  DocsVersionProvider,
32
31
  } from '@docusaurus/theme-common';
33
- import Head from '@docusaurus/Head';
32
+ import SearchMetadata from '@theme/SearchMetadata';
34
33
 
35
34
  type DocPageContentProps = {
36
35
  readonly currentDocRoute: DocumentRoute;
@@ -58,90 +57,89 @@ function DocPageContent({
58
57
  }, [hiddenSidebar]);
59
58
 
60
59
  return (
61
- <Layout
62
- wrapperClassName={ThemeClassNames.wrapper.docsPages}
63
- pageClassName={ThemeClassNames.page.docsDocPage}
64
- searchMetadata={{
65
- version,
66
- tag: docVersionSearchTag(pluginId, version),
67
- }}>
68
- <div className={styles.docPage}>
69
- <BackToTopButton />
60
+ <>
61
+ <SearchMetadata
62
+ version={version}
63
+ tag={docVersionSearchTag(pluginId, version)}
64
+ />
65
+ <Layout>
66
+ <div className={styles.docPage}>
67
+ <BackToTopButton />
70
68
 
71
- {sidebar && (
72
- <aside
73
- className={clsx(
74
- ThemeClassNames.docs.docSidebarContainer,
75
- styles.docSidebarContainer,
76
- {
77
- [styles.docSidebarContainerHidden]: hiddenSidebarContainer,
78
- },
79
- )}
80
- onTransitionEnd={(e) => {
81
- if (
82
- !e.currentTarget.classList.contains(styles.docSidebarContainer)
83
- ) {
84
- return;
85
- }
69
+ {sidebar && (
70
+ <aside
71
+ className={clsx(
72
+ ThemeClassNames.docs.docSidebarContainer,
73
+ styles.docSidebarContainer,
74
+ hiddenSidebarContainer && styles.docSidebarContainerHidden,
75
+ )}
76
+ onTransitionEnd={(e) => {
77
+ if (
78
+ !e.currentTarget.classList.contains(
79
+ styles.docSidebarContainer!,
80
+ )
81
+ ) {
82
+ return;
83
+ }
86
84
 
87
- if (hiddenSidebarContainer) {
88
- setHiddenSidebar(true);
89
- }
90
- }}>
91
- <DocSidebar
92
- key={
93
- // Reset sidebar state on sidebar changes
94
- // See https://github.com/facebook/docusaurus/issues/3414
95
- sidebarName
96
- }
97
- sidebar={sidebar}
98
- path={currentDocRoute.path}
99
- onCollapse={toggleSidebar}
100
- isHidden={hiddenSidebar}
101
- />
85
+ if (hiddenSidebarContainer) {
86
+ setHiddenSidebar(true);
87
+ }
88
+ }}>
89
+ <DocSidebar
90
+ key={
91
+ // Reset sidebar state on sidebar changes
92
+ // See https://github.com/facebook/docusaurus/issues/3414
93
+ sidebarName
94
+ }
95
+ sidebar={sidebar}
96
+ path={currentDocRoute.path}
97
+ onCollapse={toggleSidebar}
98
+ isHidden={hiddenSidebar}
99
+ />
102
100
 
103
- {hiddenSidebar && (
104
- <div
105
- className={styles.collapsedDocSidebar}
106
- title={translate({
107
- id: 'theme.docs.sidebar.expandButtonTitle',
108
- message: 'Expand sidebar',
109
- description:
110
- 'The ARIA label and title attribute for expand button of doc sidebar',
111
- })}
112
- aria-label={translate({
113
- id: 'theme.docs.sidebar.expandButtonAriaLabel',
114
- message: 'Expand sidebar',
115
- description:
116
- 'The ARIA label and title attribute for expand button of doc sidebar',
117
- })}
118
- tabIndex={0}
119
- role="button"
120
- onKeyDown={toggleSidebar}
121
- onClick={toggleSidebar}>
122
- <IconArrow className={styles.expandSidebarButtonIcon} />
123
- </div>
124
- )}
125
- </aside>
126
- )}
127
- <main
128
- className={clsx(styles.docMainContainer, {
129
- [styles.docMainContainerEnhanced]:
130
- hiddenSidebarContainer || !sidebar,
131
- })}>
132
- <div
101
+ {hiddenSidebar && (
102
+ <div
103
+ className={styles.collapsedDocSidebar}
104
+ title={translate({
105
+ id: 'theme.docs.sidebar.expandButtonTitle',
106
+ message: 'Expand sidebar',
107
+ description:
108
+ 'The ARIA label and title attribute for expand button of doc sidebar',
109
+ })}
110
+ aria-label={translate({
111
+ id: 'theme.docs.sidebar.expandButtonAriaLabel',
112
+ message: 'Expand sidebar',
113
+ description:
114
+ 'The ARIA label and title attribute for expand button of doc sidebar',
115
+ })}
116
+ tabIndex={0}
117
+ role="button"
118
+ onKeyDown={toggleSidebar}
119
+ onClick={toggleSidebar}>
120
+ <IconArrow className={styles.expandSidebarButtonIcon} />
121
+ </div>
122
+ )}
123
+ </aside>
124
+ )}
125
+ <main
133
126
  className={clsx(
134
- 'container padding-top--md padding-bottom--lg',
135
- styles.docItemWrapper,
136
- {
137
- [styles.docItemWrapperEnhanced]: hiddenSidebarContainer,
138
- },
127
+ styles.docMainContainer,
128
+ (hiddenSidebarContainer || !sidebar) &&
129
+ styles.docMainContainerEnhanced,
139
130
  )}>
140
- <MDXProvider components={MDXComponents}>{children}</MDXProvider>
141
- </div>
142
- </main>
143
- </div>
144
- </Layout>
131
+ <div
132
+ className={clsx(
133
+ 'container padding-top--md padding-bottom--lg',
134
+ styles.docItemWrapper,
135
+ hiddenSidebarContainer && styles.docItemWrapperEnhanced,
136
+ )}>
137
+ {children}
138
+ </div>
139
+ </main>
140
+ </div>
141
+ </Layout>
142
+ </>
145
143
  );
146
144
  }
147
145
 
@@ -166,13 +164,14 @@ export default function DocPage(props: Props): JSX.Element {
166
164
  : null;
167
165
 
168
166
  return (
169
- <>
170
- <Head>
171
- {/* TODO we should add a core addRoute({htmlClassName}) action */}
172
- <html className={versionMetadata.className} />
173
- </Head>
167
+ <HtmlClassNameProvider
168
+ className={clsx(
169
+ ThemeClassNames.wrapper.docsPages,
170
+ ThemeClassNames.page.docsDocPage,
171
+ versionMetadata.className,
172
+ )}>
174
173
  <DocsVersionProvider version={versionMetadata}>
175
- <DocsSidebarProvider sidebar={sidebar}>
174
+ <DocsSidebarProvider sidebar={sidebar ?? null}>
176
175
  <DocPageContent
177
176
  currentDocRoute={currentDocRoute}
178
177
  versionMetadata={versionMetadata}
@@ -181,6 +180,6 @@ export default function DocPage(props: Props): JSX.Element {
181
180
  </DocPageContent>
182
181
  </DocsSidebarProvider>
183
182
  </DocsVersionProvider>
184
- </>
183
+ </HtmlClassNameProvider>
185
184
  );
186
185
  }
@@ -10,10 +10,6 @@
10
10
  --doc-sidebar-hidden-width: 30px;
11
11
  }
12
12
 
13
- :global(.docs-wrapper) {
14
- display: flex;
15
- }
16
-
17
13
  .docPage,
18
14
  .docMainContainer {
19
15
  display: flex;
@@ -0,0 +1,38 @@
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 from 'react';
9
+ import clsx from 'clsx';
10
+ import IconArrow from '@theme/IconArrow';
11
+ import {translate} from '@docusaurus/Translate';
12
+ import type {Props} from '@theme/DocSidebar/Desktop/CollapseButton';
13
+
14
+ import styles from './styles.module.css';
15
+
16
+ export default function CollapseButton({onClick}: Props): JSX.Element {
17
+ return (
18
+ <button
19
+ type="button"
20
+ title={translate({
21
+ id: 'theme.docs.sidebar.collapseButtonTitle',
22
+ message: 'Collapse sidebar',
23
+ description: 'The title attribute for collapse button of doc sidebar',
24
+ })}
25
+ aria-label={translate({
26
+ id: 'theme.docs.sidebar.collapseButtonAriaLabel',
27
+ message: 'Collapse sidebar',
28
+ description: 'The title attribute for collapse button of doc sidebar',
29
+ })}
30
+ className={clsx(
31
+ 'button button--secondary button--outline',
32
+ styles.collapseSidebarButton,
33
+ )}
34
+ onClick={onClick}>
35
+ <IconArrow className={styles.collapseSidebarButtonIcon} />
36
+ </button>
37
+ );
38
+ }
@@ -0,0 +1,44 @@
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
+ :root {
9
+ --collapse-button-bg-color-dark: #2e333a;
10
+ }
11
+
12
+ @media (min-width: 997px) {
13
+ .collapseSidebarButton {
14
+ display: block !important;
15
+ background-color: var(--ifm-button-background-color);
16
+ height: 40px;
17
+ position: sticky;
18
+ bottom: 0;
19
+ border-radius: 0;
20
+ border: 1px solid var(--ifm-toc-border-color);
21
+ }
22
+
23
+ .collapseSidebarButtonIcon {
24
+ transform: rotate(180deg);
25
+ margin-top: 4px;
26
+ }
27
+
28
+ [dir='rtl'] .collapseSidebarButtonIcon {
29
+ transform: rotate(0);
30
+ }
31
+
32
+ [data-theme='dark'] .collapseSidebarButton {
33
+ background-color: var(--collapse-button-bg-color-dark);
34
+ }
35
+
36
+ [data-theme='dark'] .collapseSidebarButton:hover,
37
+ [data-theme='dark'] .collapseSidebarButton:focus {
38
+ background-color: var(--ifm-color-emphasis-200);
39
+ }
40
+ }
41
+
42
+ .collapseSidebarButton {
43
+ display: none;
44
+ }
@@ -0,0 +1,55 @@
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, {useState} from 'react';
9
+ import clsx from 'clsx';
10
+ import {
11
+ ThemeClassNames,
12
+ useAnnouncementBar,
13
+ useScrollPosition,
14
+ } from '@docusaurus/theme-common';
15
+ import DocSidebarItems from '@theme/DocSidebarItems';
16
+ import type {Props} from '@theme/DocSidebar/Desktop/Content';
17
+
18
+ import styles from './styles.module.css';
19
+
20
+ function useShowAnnouncementBar() {
21
+ const {isActive} = useAnnouncementBar();
22
+ const [showAnnouncementBar, setShowAnnouncementBar] = useState(isActive);
23
+
24
+ useScrollPosition(
25
+ ({scrollY}) => {
26
+ if (isActive) {
27
+ setShowAnnouncementBar(scrollY === 0);
28
+ }
29
+ },
30
+ [isActive],
31
+ );
32
+ return isActive && showAnnouncementBar;
33
+ }
34
+
35
+ export default function DocSidebarDesktopContent({
36
+ path,
37
+ sidebar,
38
+ className,
39
+ }: Props): JSX.Element {
40
+ const showAnnouncementBar = useShowAnnouncementBar();
41
+
42
+ return (
43
+ <nav
44
+ className={clsx(
45
+ 'menu thin-scrollbar',
46
+ styles.menu,
47
+ showAnnouncementBar && styles.menuWithAnnouncementBar,
48
+ className,
49
+ )}>
50
+ <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
51
+ <DocSidebarItems items={sidebar} activePath={path} level={1} />
52
+ </ul>
53
+ </nav>
54
+ );
55
+ }
@@ -0,0 +1,17 @@
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
+ @media (min-width: 997px) {
9
+ .menu {
10
+ flex-grow: 1;
11
+ padding: 0.5rem;
12
+ }
13
+
14
+ .menuWithAnnouncementBar {
15
+ margin-bottom: var(--docusaurus-announcement-bar-height);
16
+ }
17
+ }
@@ -0,0 +1,38 @@
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 from 'react';
9
+ import clsx from 'clsx';
10
+ import {useThemeConfig} from '@docusaurus/theme-common';
11
+ import Logo from '@theme/Logo';
12
+ import CollapseButton from '@theme/DocSidebar/Desktop/CollapseButton';
13
+ import Content from '@theme/DocSidebar/Desktop/Content';
14
+ import type {Props} from '@theme/DocSidebar/Desktop';
15
+
16
+ import styles from './styles.module.css';
17
+
18
+ function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}: Props) {
19
+ const {
20
+ navbar: {hideOnScroll},
21
+ hideableSidebar,
22
+ } = useThemeConfig();
23
+
24
+ return (
25
+ <div
26
+ className={clsx(
27
+ styles.sidebar,
28
+ hideOnScroll && styles.sidebarWithHideableNavbar,
29
+ isHidden && styles.sidebarHidden,
30
+ )}>
31
+ {hideOnScroll && <Logo tabIndex={-1} className={styles.sidebarLogo} />}
32
+ <Content path={path} sidebar={sidebar} />
33
+ {hideableSidebar && <CollapseButton onClick={onCollapse} />}
34
+ </div>
35
+ );
36
+ }
37
+
38
+ export default React.memo(DocSidebarDesktop);
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ @media (min-width: 997px) {
9
+ .sidebar {
10
+ display: flex;
11
+ flex-direction: column;
12
+ max-height: 100vh;
13
+ height: 100%;
14
+ position: sticky;
15
+ top: 0;
16
+ padding-top: var(--ifm-navbar-height);
17
+ width: var(--doc-sidebar-width);
18
+ transition: opacity 50ms ease;
19
+ }
20
+
21
+ .sidebarWithHideableNavbar {
22
+ padding-top: 0;
23
+ }
24
+
25
+ .sidebarHidden {
26
+ opacity: 0;
27
+ height: 0;
28
+ overflow: hidden;
29
+ visibility: hidden;
30
+ }
31
+
32
+ .sidebarLogo {
33
+ display: flex !important;
34
+ align-items: center;
35
+ margin: 0 var(--ifm-navbar-padding-horizontal);
36
+ min-height: var(--ifm-navbar-height);
37
+ max-height: var(--ifm-navbar-height);
38
+ color: inherit !important;
39
+ text-decoration: none !important;
40
+ }
41
+
42
+ .sidebarLogo img {
43
+ margin-right: 0.5rem;
44
+ height: 2rem;
45
+ }
46
+ }
47
+
48
+ .sidebarLogo {
49
+ display: none;
50
+ }
@@ -0,0 +1,54 @@
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 from 'react';
9
+ import clsx from 'clsx';
10
+ import {
11
+ NavbarSecondaryMenuFiller,
12
+ type NavbarSecondaryMenuComponent,
13
+ ThemeClassNames,
14
+ useNavbarMobileSidebar,
15
+ } from '@docusaurus/theme-common';
16
+ import DocSidebarItems from '@theme/DocSidebarItems';
17
+ import type {Props} from '@theme/DocSidebar/Mobile';
18
+
19
+ // eslint-disable-next-line react/function-component-definition
20
+ const DocSidebarMobileSecondaryMenu: NavbarSecondaryMenuComponent<Props> = ({
21
+ sidebar,
22
+ path,
23
+ }) => {
24
+ const mobileSidebar = useNavbarMobileSidebar();
25
+ return (
26
+ <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
27
+ <DocSidebarItems
28
+ items={sidebar}
29
+ activePath={path}
30
+ onItemClick={(item) => {
31
+ // Mobile sidebar should only be closed if the category has a link
32
+ if (item.type === 'category' && item.href) {
33
+ mobileSidebar.toggle();
34
+ }
35
+ if (item.type === 'link') {
36
+ mobileSidebar.toggle();
37
+ }
38
+ }}
39
+ level={1}
40
+ />
41
+ </ul>
42
+ );
43
+ };
44
+
45
+ function DocSidebarMobile(props: Props) {
46
+ return (
47
+ <NavbarSecondaryMenuFiller
48
+ component={DocSidebarMobileSecondaryMenu}
49
+ props={props}
50
+ />
51
+ );
52
+ }
53
+
54
+ export default React.memo(DocSidebarMobile);
@@ -5,126 +5,11 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import React, {useState} from 'react';
9
- import clsx from 'clsx';
10
- import {
11
- useThemeConfig,
12
- useAnnouncementBar,
13
- MobileSecondaryMenuFiller,
14
- type MobileSecondaryMenuComponent,
15
- ThemeClassNames,
16
- useScrollPosition,
17
- useWindowSize,
18
- } from '@docusaurus/theme-common';
19
- import Logo from '@theme/Logo';
20
- import IconArrow from '@theme/IconArrow';
21
- import {translate} from '@docusaurus/Translate';
22
- import DocSidebarItems from '@theme/DocSidebarItems';
8
+ import React from 'react';
9
+ import {useWindowSize} from '@docusaurus/theme-common';
23
10
  import type {Props} from '@theme/DocSidebar';
24
-
25
- import styles from './styles.module.css';
26
-
27
- function useShowAnnouncementBar() {
28
- const {isActive} = useAnnouncementBar();
29
- const [showAnnouncementBar, setShowAnnouncementBar] = useState(isActive);
30
-
31
- useScrollPosition(
32
- ({scrollY}) => {
33
- if (isActive) {
34
- setShowAnnouncementBar(scrollY === 0);
35
- }
36
- },
37
- [isActive],
38
- );
39
- return isActive && showAnnouncementBar;
40
- }
41
-
42
- function HideableSidebarButton({onClick}: {onClick: React.MouseEventHandler}) {
43
- return (
44
- <button
45
- type="button"
46
- title={translate({
47
- id: 'theme.docs.sidebar.collapseButtonTitle',
48
- message: 'Collapse sidebar',
49
- description: 'The title attribute for collapse button of doc sidebar',
50
- })}
51
- aria-label={translate({
52
- id: 'theme.docs.sidebar.collapseButtonAriaLabel',
53
- message: 'Collapse sidebar',
54
- description: 'The title attribute for collapse button of doc sidebar',
55
- })}
56
- className={clsx(
57
- 'button button--secondary button--outline',
58
- styles.collapseSidebarButton,
59
- )}
60
- onClick={onClick}>
61
- <IconArrow className={styles.collapseSidebarButtonIcon} />
62
- </button>
63
- );
64
- }
65
-
66
- function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}: Props) {
67
- const showAnnouncementBar = useShowAnnouncementBar();
68
- const {
69
- navbar: {hideOnScroll},
70
- hideableSidebar,
71
- } = useThemeConfig();
72
-
73
- return (
74
- <div
75
- className={clsx(styles.sidebar, {
76
- [styles.sidebarWithHideableNavbar]: hideOnScroll,
77
- [styles.sidebarHidden]: isHidden,
78
- })}>
79
- {hideOnScroll && <Logo tabIndex={-1} className={styles.sidebarLogo} />}
80
- <nav
81
- className={clsx('menu thin-scrollbar', styles.menu, {
82
- [styles.menuWithAnnouncementBar]: showAnnouncementBar,
83
- })}>
84
- <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
85
- <DocSidebarItems items={sidebar} activePath={path} level={1} />
86
- </ul>
87
- </nav>
88
- {hideableSidebar && <HideableSidebarButton onClick={onCollapse} />}
89
- </div>
90
- );
91
- }
92
-
93
- // eslint-disable-next-line react/function-component-definition
94
- const DocSidebarMobileSecondaryMenu: MobileSecondaryMenuComponent<Props> = ({
95
- toggleSidebar,
96
- sidebar,
97
- path,
98
- }) => (
99
- <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
100
- <DocSidebarItems
101
- items={sidebar}
102
- activePath={path}
103
- onItemClick={(item) => {
104
- // Mobile sidebar should only be closed if the category has a link
105
- if (item.type === 'category' && item.href) {
106
- toggleSidebar();
107
- }
108
- if (item.type === 'link') {
109
- toggleSidebar();
110
- }
111
- }}
112
- level={1}
113
- />
114
- </ul>
115
- );
116
-
117
- function DocSidebarMobile(props: Props) {
118
- return (
119
- <MobileSecondaryMenuFiller
120
- component={DocSidebarMobileSecondaryMenu}
121
- props={props}
122
- />
123
- );
124
- }
125
-
126
- const DocSidebarDesktopMemo = React.memo(DocSidebarDesktop);
127
- const DocSidebarMobileMemo = React.memo(DocSidebarMobile);
11
+ import DocSidebarDesktop from '@theme/DocSidebar/Desktop';
12
+ import DocSidebarMobile from '@theme/DocSidebar/Mobile';
128
13
 
129
14
  export default function DocSidebar(props: Props): JSX.Element {
130
15
  const windowSize = useWindowSize();
@@ -138,8 +23,8 @@ export default function DocSidebar(props: Props): JSX.Element {
138
23
 
139
24
  return (
140
25
  <>
141
- {shouldRenderSidebarDesktop && <DocSidebarDesktopMemo {...props} />}
142
- {shouldRenderSidebarMobile && <DocSidebarMobileMemo {...props} />}
26
+ {shouldRenderSidebarDesktop && <DocSidebarDesktop {...props} />}
27
+ {shouldRenderSidebarMobile && <DocSidebarMobile {...props} />}
143
28
  </>
144
29
  );
145
30
  }