@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
@@ -5,11 +5,9 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import React, {useState, useCallback} from 'react';
8
- import {MDXProvider} from '@mdx-js/react';
9
8
  import renderRoutes from '@docusaurus/renderRoutes';
10
9
  import Layout from '@theme/Layout';
11
10
  import DocSidebar from '@theme/DocSidebar';
12
- import MDXComponents from '@theme/MDXComponents';
13
11
  import NotFound from '@theme/NotFound';
14
12
  import IconArrow from '@theme/IconArrow';
15
13
  import BackToTopButton from '@theme/BackToTopButton';
@@ -18,13 +16,14 @@ import {translate} from '@docusaurus/Translate';
18
16
  import clsx from 'clsx';
19
17
  import styles from './styles.module.css';
20
18
  import {
19
+ HtmlClassNameProvider,
21
20
  ThemeClassNames,
22
21
  docVersionSearchTag,
23
22
  DocsSidebarProvider,
24
23
  useDocsSidebar,
25
24
  DocsVersionProvider,
26
25
  } from '@docusaurus/theme-common';
27
- import Head from '@docusaurus/Head';
26
+ import SearchMetadata from '@theme/SearchMetadata';
28
27
 
29
28
  function DocPageContent({
30
29
  currentDocRoute,
@@ -44,90 +43,89 @@ function DocPageContent({
44
43
  setHiddenSidebarContainer((value) => !value);
45
44
  }, [hiddenSidebar]);
46
45
  return (
47
- <Layout
48
- wrapperClassName={ThemeClassNames.wrapper.docsPages}
49
- pageClassName={ThemeClassNames.page.docsDocPage}
50
- searchMetadata={{
51
- version,
52
- tag: docVersionSearchTag(pluginId, version),
53
- }}>
54
- <div className={styles.docPage}>
55
- <BackToTopButton />
46
+ <>
47
+ <SearchMetadata
48
+ version={version}
49
+ tag={docVersionSearchTag(pluginId, version)}
50
+ />
51
+ <Layout>
52
+ <div className={styles.docPage}>
53
+ <BackToTopButton />
56
54
 
57
- {sidebar && (
58
- <aside
59
- className={clsx(
60
- ThemeClassNames.docs.docSidebarContainer,
61
- styles.docSidebarContainer,
62
- {
63
- [styles.docSidebarContainerHidden]: hiddenSidebarContainer,
64
- },
65
- )}
66
- onTransitionEnd={(e) => {
67
- if (
68
- !e.currentTarget.classList.contains(styles.docSidebarContainer)
69
- ) {
70
- return;
71
- }
55
+ {sidebar && (
56
+ <aside
57
+ className={clsx(
58
+ ThemeClassNames.docs.docSidebarContainer,
59
+ styles.docSidebarContainer,
60
+ hiddenSidebarContainer && styles.docSidebarContainerHidden,
61
+ )}
62
+ onTransitionEnd={(e) => {
63
+ if (
64
+ !e.currentTarget.classList.contains(
65
+ styles.docSidebarContainer,
66
+ )
67
+ ) {
68
+ return;
69
+ }
72
70
 
73
- if (hiddenSidebarContainer) {
74
- setHiddenSidebar(true);
75
- }
76
- }}>
77
- <DocSidebar
78
- key={
79
- // Reset sidebar state on sidebar changes
80
- // See https://github.com/facebook/docusaurus/issues/3414
81
- sidebarName
82
- }
83
- sidebar={sidebar}
84
- path={currentDocRoute.path}
85
- onCollapse={toggleSidebar}
86
- isHidden={hiddenSidebar}
87
- />
71
+ if (hiddenSidebarContainer) {
72
+ setHiddenSidebar(true);
73
+ }
74
+ }}>
75
+ <DocSidebar
76
+ key={
77
+ // Reset sidebar state on sidebar changes
78
+ // See https://github.com/facebook/docusaurus/issues/3414
79
+ sidebarName
80
+ }
81
+ sidebar={sidebar}
82
+ path={currentDocRoute.path}
83
+ onCollapse={toggleSidebar}
84
+ isHidden={hiddenSidebar}
85
+ />
88
86
 
89
- {hiddenSidebar && (
90
- <div
91
- className={styles.collapsedDocSidebar}
92
- title={translate({
93
- id: 'theme.docs.sidebar.expandButtonTitle',
94
- message: 'Expand sidebar',
95
- description:
96
- 'The ARIA label and title attribute for expand button of doc sidebar',
97
- })}
98
- aria-label={translate({
99
- id: 'theme.docs.sidebar.expandButtonAriaLabel',
100
- message: 'Expand sidebar',
101
- description:
102
- 'The ARIA label and title attribute for expand button of doc sidebar',
103
- })}
104
- tabIndex={0}
105
- role="button"
106
- onKeyDown={toggleSidebar}
107
- onClick={toggleSidebar}>
108
- <IconArrow className={styles.expandSidebarButtonIcon} />
109
- </div>
110
- )}
111
- </aside>
112
- )}
113
- <main
114
- className={clsx(styles.docMainContainer, {
115
- [styles.docMainContainerEnhanced]:
116
- hiddenSidebarContainer || !sidebar,
117
- })}>
118
- <div
87
+ {hiddenSidebar && (
88
+ <div
89
+ className={styles.collapsedDocSidebar}
90
+ title={translate({
91
+ id: 'theme.docs.sidebar.expandButtonTitle',
92
+ message: 'Expand sidebar',
93
+ description:
94
+ 'The ARIA label and title attribute for expand button of doc sidebar',
95
+ })}
96
+ aria-label={translate({
97
+ id: 'theme.docs.sidebar.expandButtonAriaLabel',
98
+ message: 'Expand sidebar',
99
+ description:
100
+ 'The ARIA label and title attribute for expand button of doc sidebar',
101
+ })}
102
+ tabIndex={0}
103
+ role="button"
104
+ onKeyDown={toggleSidebar}
105
+ onClick={toggleSidebar}>
106
+ <IconArrow className={styles.expandSidebarButtonIcon} />
107
+ </div>
108
+ )}
109
+ </aside>
110
+ )}
111
+ <main
119
112
  className={clsx(
120
- 'container padding-top--md padding-bottom--lg',
121
- styles.docItemWrapper,
122
- {
123
- [styles.docItemWrapperEnhanced]: hiddenSidebarContainer,
124
- },
113
+ styles.docMainContainer,
114
+ (hiddenSidebarContainer || !sidebar) &&
115
+ styles.docMainContainerEnhanced,
125
116
  )}>
126
- <MDXProvider components={MDXComponents}>{children}</MDXProvider>
127
- </div>
128
- </main>
129
- </div>
130
- </Layout>
117
+ <div
118
+ className={clsx(
119
+ 'container padding-top--md padding-bottom--lg',
120
+ styles.docItemWrapper,
121
+ hiddenSidebarContainer && styles.docItemWrapperEnhanced,
122
+ )}>
123
+ {children}
124
+ </div>
125
+ </main>
126
+ </div>
127
+ </Layout>
128
+ </>
131
129
  );
132
130
  }
133
131
 
@@ -150,13 +148,14 @@ export default function DocPage(props) {
150
148
  ? versionMetadata.docsSidebars[sidebarName]
151
149
  : null;
152
150
  return (
153
- <>
154
- <Head>
155
- {/* TODO we should add a core addRoute({htmlClassName}) action */}
156
- <html className={versionMetadata.className} />
157
- </Head>
151
+ <HtmlClassNameProvider
152
+ className={clsx(
153
+ ThemeClassNames.wrapper.docsPages,
154
+ ThemeClassNames.page.docsDocPage,
155
+ versionMetadata.className,
156
+ )}>
158
157
  <DocsVersionProvider version={versionMetadata}>
159
- <DocsSidebarProvider sidebar={sidebar}>
158
+ <DocsSidebarProvider sidebar={sidebar ?? null}>
160
159
  <DocPageContent
161
160
  currentDocRoute={currentDocRoute}
162
161
  versionMetadata={versionMetadata}
@@ -167,6 +166,6 @@ export default function DocPage(props) {
167
166
  </DocPageContent>
168
167
  </DocsSidebarProvider>
169
168
  </DocsVersionProvider>
170
- </>
169
+ </HtmlClassNameProvider>
171
170
  );
172
171
  }
@@ -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,34 @@
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
+ import React from 'react';
8
+ import clsx from 'clsx';
9
+ import IconArrow from '@theme/IconArrow';
10
+ import {translate} from '@docusaurus/Translate';
11
+ import styles from './styles.module.css';
12
+ export default function CollapseButton({onClick}) {
13
+ return (
14
+ <button
15
+ type="button"
16
+ title={translate({
17
+ id: 'theme.docs.sidebar.collapseButtonTitle',
18
+ message: 'Collapse sidebar',
19
+ description: 'The title attribute for collapse button of doc sidebar',
20
+ })}
21
+ aria-label={translate({
22
+ id: 'theme.docs.sidebar.collapseButtonAriaLabel',
23
+ message: 'Collapse sidebar',
24
+ description: 'The title attribute for collapse button of doc sidebar',
25
+ })}
26
+ className={clsx(
27
+ 'button button--secondary button--outline',
28
+ styles.collapseSidebarButton,
29
+ )}
30
+ onClick={onClick}>
31
+ <IconArrow className={styles.collapseSidebarButtonIcon} />
32
+ </button>
33
+ );
34
+ }
@@ -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,46 @@
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
+ import React, {useState} from 'react';
8
+ import clsx from 'clsx';
9
+ import {
10
+ ThemeClassNames,
11
+ useAnnouncementBar,
12
+ useScrollPosition,
13
+ } from '@docusaurus/theme-common';
14
+ import DocSidebarItems from '@theme/DocSidebarItems';
15
+ import styles from './styles.module.css';
16
+
17
+ function useShowAnnouncementBar() {
18
+ const {isActive} = useAnnouncementBar();
19
+ const [showAnnouncementBar, setShowAnnouncementBar] = useState(isActive);
20
+ useScrollPosition(
21
+ ({scrollY}) => {
22
+ if (isActive) {
23
+ setShowAnnouncementBar(scrollY === 0);
24
+ }
25
+ },
26
+ [isActive],
27
+ );
28
+ return isActive && showAnnouncementBar;
29
+ }
30
+
31
+ export default function DocSidebarDesktopContent({path, sidebar, className}) {
32
+ const showAnnouncementBar = useShowAnnouncementBar();
33
+ return (
34
+ <nav
35
+ className={clsx(
36
+ 'menu thin-scrollbar',
37
+ styles.menu,
38
+ showAnnouncementBar && styles.menuWithAnnouncementBar,
39
+ className,
40
+ )}>
41
+ <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
42
+ <DocSidebarItems items={sidebar} activePath={path} level={1} />
43
+ </ul>
44
+ </nav>
45
+ );
46
+ }
@@ -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,34 @@
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
+ import React from 'react';
8
+ import clsx from 'clsx';
9
+ import {useThemeConfig} from '@docusaurus/theme-common';
10
+ import Logo from '@theme/Logo';
11
+ import CollapseButton from '@theme/DocSidebar/Desktop/CollapseButton';
12
+ import Content from '@theme/DocSidebar/Desktop/Content';
13
+ import styles from './styles.module.css';
14
+
15
+ function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}) {
16
+ const {
17
+ navbar: {hideOnScroll},
18
+ hideableSidebar,
19
+ } = useThemeConfig();
20
+ return (
21
+ <div
22
+ className={clsx(
23
+ styles.sidebar,
24
+ hideOnScroll && styles.sidebarWithHideableNavbar,
25
+ isHidden && styles.sidebarHidden,
26
+ )}>
27
+ {hideOnScroll && <Logo tabIndex={-1} className={styles.sidebarLogo} />}
28
+ <Content path={path} sidebar={sidebar} />
29
+ {hideableSidebar && <CollapseButton onClick={onCollapse} />}
30
+ </div>
31
+ );
32
+ }
33
+
34
+ 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,49 @@
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
+ import React from 'react';
8
+ import clsx from 'clsx';
9
+ import {
10
+ NavbarSecondaryMenuFiller,
11
+ ThemeClassNames,
12
+ useNavbarMobileSidebar,
13
+ } from '@docusaurus/theme-common';
14
+ import DocSidebarItems from '@theme/DocSidebarItems';
15
+
16
+ // eslint-disable-next-line react/function-component-definition
17
+ const DocSidebarMobileSecondaryMenu = ({sidebar, path}) => {
18
+ const mobileSidebar = useNavbarMobileSidebar();
19
+ return (
20
+ <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
21
+ <DocSidebarItems
22
+ items={sidebar}
23
+ activePath={path}
24
+ onItemClick={(item) => {
25
+ // Mobile sidebar should only be closed if the category has a link
26
+ if (item.type === 'category' && item.href) {
27
+ mobileSidebar.toggle();
28
+ }
29
+
30
+ if (item.type === 'link') {
31
+ mobileSidebar.toggle();
32
+ }
33
+ }}
34
+ level={1}
35
+ />
36
+ </ul>
37
+ );
38
+ };
39
+
40
+ function DocSidebarMobile(props) {
41
+ return (
42
+ <NavbarSecondaryMenuFiller
43
+ component={DocSidebarMobileSecondaryMenu}
44
+ props={props}
45
+ />
46
+ );
47
+ }
48
+
49
+ export default React.memo(DocSidebarMobile);
@@ -4,117 +4,10 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import React, {useState} from 'react';
8
- import clsx from 'clsx';
9
- import {
10
- useThemeConfig,
11
- useAnnouncementBar,
12
- MobileSecondaryMenuFiller,
13
- ThemeClassNames,
14
- useScrollPosition,
15
- useWindowSize,
16
- } from '@docusaurus/theme-common';
17
- import Logo from '@theme/Logo';
18
- import IconArrow from '@theme/IconArrow';
19
- import {translate} from '@docusaurus/Translate';
20
- import DocSidebarItems from '@theme/DocSidebarItems';
21
- import styles from './styles.module.css';
22
-
23
- function useShowAnnouncementBar() {
24
- const {isActive} = useAnnouncementBar();
25
- const [showAnnouncementBar, setShowAnnouncementBar] = useState(isActive);
26
- useScrollPosition(
27
- ({scrollY}) => {
28
- if (isActive) {
29
- setShowAnnouncementBar(scrollY === 0);
30
- }
31
- },
32
- [isActive],
33
- );
34
- return isActive && showAnnouncementBar;
35
- }
36
-
37
- function HideableSidebarButton({onClick}) {
38
- return (
39
- <button
40
- type="button"
41
- title={translate({
42
- id: 'theme.docs.sidebar.collapseButtonTitle',
43
- message: 'Collapse sidebar',
44
- description: 'The title attribute for collapse button of doc sidebar',
45
- })}
46
- aria-label={translate({
47
- id: 'theme.docs.sidebar.collapseButtonAriaLabel',
48
- message: 'Collapse sidebar',
49
- description: 'The title attribute for collapse button of doc sidebar',
50
- })}
51
- className={clsx(
52
- 'button button--secondary button--outline',
53
- styles.collapseSidebarButton,
54
- )}
55
- onClick={onClick}>
56
- <IconArrow className={styles.collapseSidebarButtonIcon} />
57
- </button>
58
- );
59
- }
60
-
61
- function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}) {
62
- const showAnnouncementBar = useShowAnnouncementBar();
63
- const {
64
- navbar: {hideOnScroll},
65
- hideableSidebar,
66
- } = useThemeConfig();
67
- return (
68
- <div
69
- className={clsx(styles.sidebar, {
70
- [styles.sidebarWithHideableNavbar]: hideOnScroll,
71
- [styles.sidebarHidden]: isHidden,
72
- })}>
73
- {hideOnScroll && <Logo tabIndex={-1} className={styles.sidebarLogo} />}
74
- <nav
75
- className={clsx('menu thin-scrollbar', styles.menu, {
76
- [styles.menuWithAnnouncementBar]: showAnnouncementBar,
77
- })}>
78
- <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
79
- <DocSidebarItems items={sidebar} activePath={path} level={1} />
80
- </ul>
81
- </nav>
82
- {hideableSidebar && <HideableSidebarButton onClick={onCollapse} />}
83
- </div>
84
- );
85
- } // eslint-disable-next-line react/function-component-definition
86
-
87
- const DocSidebarMobileSecondaryMenu = ({toggleSidebar, sidebar, path}) => (
88
- <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
89
- <DocSidebarItems
90
- items={sidebar}
91
- activePath={path}
92
- onItemClick={(item) => {
93
- // Mobile sidebar should only be closed if the category has a link
94
- if (item.type === 'category' && item.href) {
95
- toggleSidebar();
96
- }
97
-
98
- if (item.type === 'link') {
99
- toggleSidebar();
100
- }
101
- }}
102
- level={1}
103
- />
104
- </ul>
105
- );
106
-
107
- function DocSidebarMobile(props) {
108
- return (
109
- <MobileSecondaryMenuFiller
110
- component={DocSidebarMobileSecondaryMenu}
111
- props={props}
112
- />
113
- );
114
- }
115
-
116
- const DocSidebarDesktopMemo = React.memo(DocSidebarDesktop);
117
- const DocSidebarMobileMemo = React.memo(DocSidebarMobile);
7
+ import React from 'react';
8
+ import {useWindowSize} from '@docusaurus/theme-common';
9
+ import DocSidebarDesktop from '@theme/DocSidebar/Desktop';
10
+ import DocSidebarMobile from '@theme/DocSidebar/Mobile';
118
11
  export default function DocSidebar(props) {
119
12
  const windowSize = useWindowSize(); // Desktop sidebar visible on hydration: need SSR rendering
120
13
 
@@ -124,8 +17,8 @@ export default function DocSidebar(props) {
124
17
  const shouldRenderSidebarMobile = windowSize === 'mobile';
125
18
  return (
126
19
  <>
127
- {shouldRenderSidebarDesktop && <DocSidebarDesktopMemo {...props} />}
128
- {shouldRenderSidebarMobile && <DocSidebarMobileMemo {...props} />}
20
+ {shouldRenderSidebarDesktop && <DocSidebarDesktop {...props} />}
21
+ {shouldRenderSidebarMobile && <DocSidebarMobile {...props} />}
129
22
  </>
130
23
  );
131
24
  }