@docusaurus/theme-classic 2.0.0-beta.8e9b829d9 → 2.0.0-beta.9

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 (275) hide show
  1. package/README.md +1 -1
  2. package/codeTranslations/ar.json +12 -6
  3. package/codeTranslations/base.json +12 -0
  4. package/codeTranslations/bn.json +6 -0
  5. package/codeTranslations/cs.json +62 -0
  6. package/codeTranslations/da.json +6 -0
  7. package/codeTranslations/de.json +8 -2
  8. package/codeTranslations/es.json +10 -4
  9. package/codeTranslations/fa.json +9 -3
  10. package/codeTranslations/fil.json +6 -0
  11. package/codeTranslations/fr.json +6 -0
  12. package/codeTranslations/he.json +6 -0
  13. package/codeTranslations/hi.json +6 -0
  14. package/codeTranslations/ja.json +6 -0
  15. package/codeTranslations/ko.json +6 -0
  16. package/codeTranslations/pl.json +6 -0
  17. package/codeTranslations/pt-BR.json +8 -2
  18. package/codeTranslations/pt-PT.json +6 -0
  19. package/codeTranslations/ru.json +6 -0
  20. package/codeTranslations/sr.json +62 -0
  21. package/codeTranslations/tr.json +9 -3
  22. package/codeTranslations/vi.json +10 -4
  23. package/codeTranslations/zh-Hans.json +6 -0
  24. package/codeTranslations/zh-Hant.json +6 -0
  25. package/lib/__tests__/validateThemeConfig.test.js +154 -4
  26. package/lib/index.js +2 -3
  27. package/lib/prism-include-languages.js +9 -5
  28. package/lib/theme/AnnouncementBar/index.js +8 -12
  29. package/lib/theme/AnnouncementBar/styles.module.css +23 -32
  30. package/lib/theme/BackToTopButton/index.js +27 -13
  31. package/lib/theme/BackToTopButton/styles.module.css +17 -14
  32. package/lib/theme/BlogArchivePage/index.js +89 -0
  33. package/lib/theme/BlogLayout/index.js +2 -6
  34. package/lib/theme/BlogListPage/index.js +1 -1
  35. package/lib/theme/BlogPostAuthor/index.js +51 -0
  36. package/lib/theme/BlogPostAuthor/styles.module.css +12 -0
  37. package/lib/theme/BlogPostAuthors/index.js +47 -0
  38. package/lib/theme/BlogPostAuthors/styles.module.css +11 -0
  39. package/lib/theme/BlogPostItem/index.js +58 -67
  40. package/lib/theme/BlogPostPage/index.js +33 -4
  41. package/lib/theme/BlogSidebar/styles.module.css +2 -2
  42. package/lib/theme/BlogTagsListPage/index.js +3 -28
  43. package/lib/theme/BlogTagsPostsPage/index.js +5 -8
  44. package/lib/theme/CodeBlock/index.js +44 -37
  45. package/lib/theme/CodeBlock/styles.module.css +1 -2
  46. package/lib/theme/DocItem/index.js +15 -40
  47. package/lib/theme/DocItem/styles.module.css +2 -12
  48. package/lib/theme/DocItemFooter/index.js +79 -0
  49. package/lib/theme/DocItemFooter/styles.module.css +18 -0
  50. package/lib/theme/DocPage/index.js +18 -13
  51. package/lib/theme/DocSidebar/index.js +11 -16
  52. package/lib/theme/DocSidebarItem/index.js +12 -10
  53. package/lib/theme/DocTagDocListPage/index.js +89 -0
  54. package/lib/theme/DocTagsListPage/index.js +44 -0
  55. package/lib/theme/DocVersionBanner/index.js +6 -4
  56. package/lib/theme/EditThisPage/index.js +3 -1
  57. package/lib/theme/Footer/index.js +5 -3
  58. package/lib/theme/Heading/index.js +7 -9
  59. package/lib/theme/Heading/styles.css +4 -6
  60. package/lib/theme/Heading/styles.module.css +9 -5
  61. package/lib/theme/IconClose/index.js +31 -0
  62. package/lib/theme/LastUpdated/index.js +4 -2
  63. package/lib/theme/LayoutHead/index.js +13 -11
  64. package/lib/theme/LayoutProviders/index.js +7 -5
  65. package/lib/theme/Logo/index.js +14 -12
  66. package/lib/theme/MDXComponents/index.js +27 -1
  67. package/lib/theme/MDXComponents/styles.css +11 -0
  68. package/lib/theme/MDXPage/index.js +2 -1
  69. package/lib/theme/Navbar/index.js +20 -3
  70. package/lib/theme/Navbar/styles.module.css +5 -1
  71. package/lib/theme/NavbarItem/DefaultNavbarItem.js +12 -4
  72. package/lib/theme/NavbarItem/DocNavbarItem.js +5 -3
  73. package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +7 -1
  74. package/lib/theme/NavbarItem/DropdownNavbarItem.js +3 -3
  75. package/lib/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +3 -4
  76. package/lib/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  77. package/lib/theme/NavbarItem/index.js +5 -0
  78. package/lib/theme/Seo/index.js +10 -7
  79. package/lib/theme/TOC/index.js +9 -30
  80. package/lib/theme/TOC/styles.module.css +1 -1
  81. package/lib/theme/TOCCollapsible/index.js +5 -3
  82. package/lib/theme/TOCInline/index.js +7 -27
  83. package/lib/theme/TOCItems/index.js +78 -0
  84. package/lib/theme/Tabs/__tests__/index.test.js +123 -0
  85. package/lib/theme/Tabs/index.js +73 -50
  86. package/lib/theme/Tabs/styles.module.css +0 -13
  87. package/lib/theme/Tag/index.js +40 -0
  88. package/lib/theme/Tag/styles.module.css +70 -0
  89. package/lib/theme/TagsListByLetter/index.js +48 -0
  90. package/lib/theme/TagsListByLetter/styles.module.css +11 -0
  91. package/lib/theme/TagsListInline/index.js +44 -0
  92. package/lib/theme/TagsListInline/styles.module.css +15 -0
  93. package/lib/theme/ThemedImage/index.js +3 -5
  94. package/lib/theme/Toggle/index.js +23 -18
  95. package/lib/theme/Toggle/styles.module.css +91 -0
  96. package/lib/theme/hooks/useHideableNavbar.js +14 -31
  97. package/lib/theme/hooks/useTheme.js +2 -2
  98. package/lib/theme/hooks/useWindowSize.js +2 -7
  99. package/lib/theme/prism-include-languages.js +4 -3
  100. package/lib/translations.js +4 -4
  101. package/lib/types.d.ts +216 -105
  102. package/lib/validateThemeConfig.js +215 -254
  103. package/lib-next/__tests__/validateThemeConfig.test.js +154 -4
  104. package/lib-next/index.js +1 -2
  105. package/lib-next/prism-include-languages.js +0 -2
  106. package/lib-next/theme/AnnouncementBar/index.js +7 -12
  107. package/lib-next/theme/AnnouncementBar/styles.module.css +23 -32
  108. package/lib-next/theme/BackToTopButton/index.js +37 -17
  109. package/lib-next/theme/BackToTopButton/styles.module.css +17 -14
  110. package/lib-next/theme/BlogArchivePage/index.js +80 -0
  111. package/lib-next/theme/BlogLayout/index.js +4 -7
  112. package/lib-next/theme/BlogListPage/index.js +1 -0
  113. package/lib-next/theme/BlogPostAuthor/index.js +46 -0
  114. package/lib-next/theme/BlogPostAuthor/styles.module.css +12 -0
  115. package/lib-next/theme/BlogPostAuthors/index.js +34 -0
  116. package/lib-next/theme/BlogPostAuthors/styles.module.css +11 -0
  117. package/lib-next/theme/BlogPostItem/index.js +79 -86
  118. package/lib-next/theme/BlogPostPage/index.js +55 -8
  119. package/lib-next/theme/BlogSidebar/styles.module.css +2 -2
  120. package/lib-next/theme/BlogTagsListPage/index.js +7 -39
  121. package/lib-next/theme/BlogTagsPostsPage/index.js +3 -4
  122. package/lib-next/theme/CodeBlock/index.js +53 -49
  123. package/lib-next/theme/CodeBlock/styles.module.css +1 -2
  124. package/lib-next/theme/DocItem/index.js +27 -45
  125. package/lib-next/theme/DocItem/styles.module.css +2 -12
  126. package/lib-next/theme/DocItemFooter/index.js +79 -0
  127. package/lib-next/theme/DocItemFooter/styles.module.css +18 -0
  128. package/lib-next/theme/DocPage/index.js +18 -14
  129. package/lib-next/theme/DocSidebar/index.js +18 -15
  130. package/lib-next/theme/DocSidebarItem/index.js +31 -11
  131. package/lib-next/theme/DocTagDocListPage/index.js +89 -0
  132. package/lib-next/theme/DocTagsListPage/index.js +38 -0
  133. package/lib-next/theme/DocVersionBanner/index.js +16 -9
  134. package/lib-next/theme/EditThisPage/index.js +6 -1
  135. package/lib-next/theme/Footer/index.js +14 -3
  136. package/lib-next/theme/Heading/index.js +10 -13
  137. package/lib-next/theme/Heading/styles.css +4 -6
  138. package/lib-next/theme/Heading/styles.module.css +9 -5
  139. package/lib-next/theme/IconClose/index.js +23 -0
  140. package/lib-next/theme/LastUpdated/index.js +3 -2
  141. package/lib-next/theme/LayoutHead/index.js +9 -15
  142. package/lib-next/theme/LayoutProviders/index.js +8 -5
  143. package/lib-next/theme/Logo/index.js +23 -19
  144. package/lib-next/theme/MDXComponents/index.js +20 -1
  145. package/lib-next/theme/MDXComponents/styles.css +11 -0
  146. package/lib-next/theme/MDXPage/index.js +10 -2
  147. package/lib-next/theme/Navbar/index.js +27 -3
  148. package/lib-next/theme/Navbar/styles.module.css +5 -1
  149. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +15 -4
  150. package/lib-next/theme/NavbarItem/DocNavbarItem.js +5 -3
  151. package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +12 -4
  152. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +4 -6
  153. package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +2 -6
  154. package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  155. package/lib-next/theme/NavbarItem/index.js +2 -0
  156. package/lib-next/theme/Seo/index.js +11 -7
  157. package/lib-next/theme/TOC/index.js +12 -36
  158. package/lib-next/theme/TOC/styles.module.css +1 -1
  159. package/lib-next/theme/TOCCollapsible/index.js +12 -3
  160. package/lib-next/theme/TOCInline/index.js +10 -28
  161. package/lib-next/theme/TOCItems/index.js +85 -0
  162. package/lib-next/theme/Tabs/__tests__/index.test.js +142 -0
  163. package/lib-next/theme/Tabs/index.js +91 -43
  164. package/lib-next/theme/Tabs/styles.module.css +0 -13
  165. package/lib-next/theme/Tag/index.js +27 -0
  166. package/lib-next/theme/Tag/styles.module.css +70 -0
  167. package/lib-next/theme/TagsListByLetter/index.js +42 -0
  168. package/lib-next/theme/TagsListByLetter/styles.module.css +11 -0
  169. package/lib-next/theme/TagsListInline/index.js +31 -0
  170. package/lib-next/theme/TagsListInline/styles.module.css +15 -0
  171. package/lib-next/theme/ThemedImage/index.js +3 -3
  172. package/lib-next/theme/Toggle/index.js +20 -15
  173. package/lib-next/theme/Toggle/styles.module.css +91 -0
  174. package/lib-next/theme/hooks/useHideableNavbar.js +31 -47
  175. package/lib-next/theme/hooks/useTheme.js +2 -2
  176. package/lib-next/theme/hooks/useWindowSize.js +2 -6
  177. package/lib-next/theme/prism-include-languages.js +2 -1
  178. package/lib-next/translations.js +6 -10
  179. package/lib-next/types.d.ts +216 -105
  180. package/lib-next/validateThemeConfig.js +40 -36
  181. package/package.json +23 -19
  182. package/src/__tests__/validateThemeConfig.test.js +154 -4
  183. package/src/index.ts +11 -9
  184. package/src/{prism-include-languages.js → prism-include-languages.ts} +0 -0
  185. package/src/theme/AnnouncementBar/index.tsx +8 -12
  186. package/src/theme/AnnouncementBar/styles.module.css +23 -32
  187. package/src/theme/BackToTopButton/index.tsx +39 -17
  188. package/src/theme/BackToTopButton/styles.module.css +17 -14
  189. package/src/theme/BlogArchivePage/index.tsx +91 -0
  190. package/src/theme/BlogLayout/index.tsx +4 -8
  191. package/src/theme/BlogListPage/index.tsx +1 -0
  192. package/src/theme/BlogPostAuthor/index.tsx +49 -0
  193. package/src/theme/BlogPostAuthor/styles.module.css +12 -0
  194. package/src/theme/BlogPostAuthors/index.tsx +36 -0
  195. package/src/theme/BlogPostAuthors/styles.module.css +11 -0
  196. package/src/theme/BlogPostItem/index.tsx +70 -80
  197. package/src/theme/BlogPostPage/index.tsx +57 -8
  198. package/src/theme/BlogSidebar/styles.module.css +2 -2
  199. package/src/theme/BlogTagsListPage/index.tsx +7 -41
  200. package/src/theme/BlogTagsPostsPage/index.tsx +3 -4
  201. package/src/theme/CodeBlock/index.tsx +63 -47
  202. package/src/theme/CodeBlock/styles.module.css +1 -2
  203. package/src/theme/DocItem/index.tsx +27 -46
  204. package/src/theme/DocItem/styles.module.css +2 -12
  205. package/src/theme/DocItemFooter/index.tsx +91 -0
  206. package/src/theme/DocItemFooter/styles.module.css +18 -0
  207. package/src/theme/DocPage/index.tsx +16 -12
  208. package/src/theme/DocSidebar/index.tsx +20 -16
  209. package/src/theme/DocSidebarItem/index.tsx +29 -10
  210. package/src/theme/DocTagDocListPage/index.tsx +89 -0
  211. package/src/theme/DocTagsListPage/index.tsx +41 -0
  212. package/src/theme/DocVersionBanner/index.tsx +26 -15
  213. package/src/theme/EditThisPage/index.tsx +6 -1
  214. package/src/theme/Footer/index.tsx +16 -3
  215. package/src/theme/Heading/index.tsx +10 -13
  216. package/src/theme/Heading/styles.css +4 -6
  217. package/src/theme/Heading/styles.module.css +9 -5
  218. package/src/theme/IconClose/index.tsx +26 -0
  219. package/src/theme/LastUpdated/index.tsx +3 -2
  220. package/src/theme/LayoutHead/index.tsx +9 -9
  221. package/src/theme/LayoutProviders/index.tsx +8 -5
  222. package/src/theme/Logo/index.tsx +19 -15
  223. package/src/theme/MDXComponents/index.tsx +20 -1
  224. package/src/theme/MDXComponents/styles.css +11 -0
  225. package/src/theme/MDXPage/index.tsx +10 -2
  226. package/src/theme/Navbar/index.tsx +26 -2
  227. package/src/theme/Navbar/styles.module.css +5 -1
  228. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +15 -4
  229. package/src/theme/NavbarItem/DocNavbarItem.tsx +9 -5
  230. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +15 -6
  231. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +7 -3
  232. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +4 -6
  233. package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +6 -5
  234. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  235. package/src/theme/NavbarItem/index.tsx +6 -1
  236. package/src/theme/Seo/index.tsx +7 -4
  237. package/src/theme/TOC/index.tsx +13 -38
  238. package/src/theme/TOC/styles.module.css +1 -1
  239. package/src/theme/TOCCollapsible/index.tsx +8 -2
  240. package/src/theme/TOCInline/index.tsx +13 -32
  241. package/src/theme/TOCItems/index.tsx +96 -0
  242. package/src/theme/Tabs/__tests__/index.test.tsx +129 -0
  243. package/src/theme/Tabs/index.tsx +93 -49
  244. package/src/theme/Tabs/styles.module.css +0 -13
  245. package/src/theme/Tag/index.tsx +31 -0
  246. package/src/theme/Tag/styles.module.css +70 -0
  247. package/src/theme/TagsListByLetter/index.tsx +45 -0
  248. package/src/theme/TagsListByLetter/styles.module.css +11 -0
  249. package/src/theme/TagsListInline/index.tsx +35 -0
  250. package/src/theme/TagsListInline/styles.module.css +15 -0
  251. package/src/theme/ThemedImage/index.tsx +3 -3
  252. package/src/theme/Toggle/index.tsx +20 -15
  253. package/src/theme/Toggle/styles.module.css +91 -0
  254. package/src/theme/hooks/useContextualSearchFilters.ts +1 -1
  255. package/src/theme/hooks/useHideableNavbar.ts +32 -47
  256. package/src/theme/hooks/useTabGroupChoice.ts +2 -2
  257. package/src/theme/hooks/useTheme.ts +2 -2
  258. package/src/theme/hooks/useWindowSize.ts +2 -7
  259. package/src/theme/prism-include-languages.ts +3 -2
  260. package/src/translations.ts +6 -10
  261. package/src/types.d.ts +216 -105
  262. package/src/{validateThemeConfig.js → validateThemeConfig.ts} +46 -12
  263. package/tsconfig.json +0 -1
  264. package/update-code-translations.js +5 -4
  265. package/update-code-translations.test.js +1 -1
  266. package/update.js +151 -0
  267. package/lib/theme/Toggle/styles.css +0 -103
  268. package/lib/theme/hooks/useScrollPosition.js +0 -51
  269. package/lib/theme/hooks/useTOCHighlight.js +0 -87
  270. package/lib-next/theme/Toggle/styles.css +0 -103
  271. package/lib-next/theme/hooks/useScrollPosition.js +0 -42
  272. package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
  273. package/src/theme/Toggle/styles.css +0 -103
  274. package/src/theme/hooks/useScrollPosition.ts +0 -52
  275. package/src/theme/hooks/useTOCHighlight.ts +0 -98
@@ -42,8 +42,14 @@ function FooterLink({to, href, label, prependBaseUrlToHref, ...props}) {
42
42
  );
43
43
  }
44
44
 
45
- const FooterLogo = ({sources, alt}) => (
46
- <ThemedImage className="footer__logo" alt={alt} sources={sources} />
45
+ const FooterLogo = ({sources, alt, width, height}) => (
46
+ <ThemedImage
47
+ className="footer__logo"
48
+ alt={alt}
49
+ sources={sources}
50
+ width={width}
51
+ height={height}
52
+ />
47
53
  );
48
54
 
49
55
  function Footer() {
@@ -103,7 +109,12 @@ function Footer() {
103
109
  <div className="margin-bottom--sm">
104
110
  {logo.href ? (
105
111
  <Link href={logo.href} className={styles.footerLogoLink}>
106
- <FooterLogo alt={logo.alt} sources={sources} />
112
+ <FooterLogo
113
+ alt={logo.alt}
114
+ sources={sources}
115
+ width={logo.width}
116
+ height={logo.height}
117
+ />
107
118
  </Link>
108
119
  ) : (
109
120
  <FooterLogo alt={logo.alt} sources={sources} />
@@ -4,8 +4,6 @@
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
-
8
- /* eslint-disable jsx-a11y/anchor-has-content, jsx-a11y/anchor-is-valid */
9
7
  import React from 'react';
10
8
  import clsx from 'clsx';
11
9
  import {translate} from '@docusaurus/Translate';
@@ -18,7 +16,7 @@ export const MainHeading = function MainHeading({...props}) {
18
16
  <h1
19
17
  {...props}
20
18
  id={undefined} // h1 headings do not need an id because they don't appear in the TOC
21
- className={styles.h1Heading}>
19
+ >
22
20
  {props.children}
23
21
  </h1>
24
22
  </header>
@@ -36,17 +34,16 @@ const createAnchorHeading = (Tag) =>
36
34
  }
37
35
 
38
36
  return (
39
- <Tag {...props}>
40
- <a
41
- aria-hidden="true"
42
- tabIndex={-1}
43
- className={clsx('anchor', {
44
- [styles.enhancedAnchor]: !hideOnScroll,
45
- })}
46
- id={id}
47
- />
37
+ <Tag
38
+ {...props}
39
+ className={clsx('anchor', {
40
+ [styles.anchorWithHideOnScrollNavbar]: hideOnScroll,
41
+ [styles.anchorWithStickyNavbar]: !hideOnScroll,
42
+ })}
43
+ id={id}>
48
44
  {props.children}
49
45
  <a
46
+ aria-hidden="true"
50
47
  className="hash-link"
51
48
  href={`#${id}`}
52
49
  title={translate({
@@ -54,7 +51,7 @@ const createAnchorHeading = (Tag) =>
54
51
  message: 'Direct link to heading',
55
52
  description: 'Title for link to heading',
56
53
  })}>
57
- #
54
+ &#8203;
58
55
  </a>
59
56
  </Tag>
60
57
  );
@@ -5,18 +5,16 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- .anchor {
9
- display: block;
10
- position: relative;
11
- top: -0.5rem;
12
- }
13
-
14
8
  .hash-link {
15
9
  opacity: 0;
16
10
  padding-left: 0.5rem;
17
11
  transition: opacity var(--ifm-transition-fast);
18
12
  }
19
13
 
14
+ .hash-link:before {
15
+ content: '#';
16
+ }
17
+
20
18
  .hash-link:focus,
21
19
  *:hover > .hash-link {
22
20
  opacity: 1;
@@ -5,11 +5,15 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- .enhancedAnchor {
9
- top: calc(var(--ifm-navbar-height) * -1 - 0.5rem);
8
+ /*
9
+ When the navbar is sticky, ensure that on anchor click,
10
+ the browser does not scroll that anchor behind the navbar
11
+ See https://twitter.com/JoshWComeau/status/1332015868725891076
12
+ */
13
+ .anchorWithStickyNavbar {
14
+ scroll-margin-top: calc(var(--ifm-navbar-height) + 0.5rem);
10
15
  }
11
16
 
12
- .h1Heading {
13
- font-size: 3rem;
14
- margin-bottom: calc(var(--ifm-leading-desktop) * var(--ifm-leading));
17
+ .anchorWithHideOnScrollNavbar {
18
+ scroll-margin-top: 0.5rem;
15
19
  }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React from 'react';
8
+ export default function IconClose({
9
+ width = 21,
10
+ height = 21,
11
+ color = 'currentColor',
12
+ strokeWidth = 1.2,
13
+ className,
14
+ ...restProps
15
+ }) {
16
+ return (
17
+ <svg viewBox="0 0 15 15" width={width} height={height} {...restProps}>
18
+ <g stroke={color} strokeWidth={strokeWidth}>
19
+ <path d="M.75.75l13.5 13.5M14.25.75L.75 14.25" />
20
+ </g>
21
+ </svg>
22
+ );
23
+ }
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import React from 'react';
8
8
  import Translate from '@docusaurus/Translate';
9
+ import {ThemeClassNames} from '@docusaurus/theme-common';
9
10
 
10
11
  function LastUpdatedAtDate({lastUpdatedAt, formattedLastUpdatedAt}) {
11
12
  return (
@@ -45,7 +46,7 @@ export default function LastUpdated({
45
46
  lastUpdatedBy,
46
47
  }) {
47
48
  return (
48
- <>
49
+ <span className={ThemeClassNames.common.lastUpdated}>
49
50
  <Translate
50
51
  id="theme.lastUpdated.lastUpdatedAtBy"
51
52
  description="The sentence used to display when a page has been last updated, and by who"
@@ -72,6 +73,6 @@ export default function LastUpdated({
72
73
  <small> (Simulated during dev for better perf)</small>
73
74
  </div>
74
75
  )}
75
- </>
76
+ </span>
76
77
  );
77
78
  }
@@ -14,6 +14,7 @@ import {
14
14
  DEFAULT_SEARCH_TAG,
15
15
  useTitleFormatter,
16
16
  useAlternatePageUtils,
17
+ useThemeConfig,
17
18
  } from '@docusaurus/theme-common';
18
19
  import {useLocation} from '@docusaurus/router'; // Useful for SEO
19
20
  // See https://developers.google.com/search/docs/advanced/crawling/localized-versions
@@ -77,12 +78,10 @@ function CanonicalUrlHeaders({permalink}) {
77
78
 
78
79
  export default function LayoutHead(props) {
79
80
  const {
80
- siteConfig: {
81
- favicon,
82
- themeConfig: {metadatas, image: defaultImage},
83
- },
81
+ siteConfig: {favicon},
84
82
  i18n: {currentLocale, localeConfigs},
85
83
  } = useDocusaurusContext();
84
+ const {metadatas, image: defaultImage} = useThemeConfig();
86
85
  const {title, description, image, keywords, searchMetadatas} = props;
87
86
  const faviconUrl = useBaseUrl(favicon);
88
87
  const pageTitle = useTitleFormatter(title); // See https://github.com/facebook/docusaurus/issues/3317#issuecomment-754661855
@@ -98,19 +97,14 @@ export default function LayoutHead(props) {
98
97
  {favicon && <link rel="shortcut icon" href={faviconUrl} />}
99
98
  <title>{pageTitle}</title>
100
99
  <meta property="og:title" content={pageTitle} />
101
- {image ||
102
- (defaultImage && (
103
- <meta name="twitter:card" content="summary_large_image" />
104
- ))}
100
+ <meta name="twitter:card" content="summary_large_image" />
105
101
  </Head>
106
102
 
107
- <Seo
108
- {...{
109
- description,
110
- keywords,
111
- image,
112
- }}
113
- />
103
+ {/* image can override the default image */}
104
+ {defaultImage && <Seo image={defaultImage} />}
105
+ {image && <Seo image={image} />}
106
+
107
+ <Seo description={description} keywords={keywords} />
114
108
 
115
109
  <CanonicalUrlHeaders />
116
110
 
@@ -11,17 +11,20 @@ import {
11
11
  AnnouncementBarProvider,
12
12
  DocsPreferredVersionContextProvider,
13
13
  MobileSecondaryMenuProvider,
14
+ ScrollControllerProvider,
14
15
  } from '@docusaurus/theme-common';
15
16
  export default function LayoutProviders({children}) {
16
17
  return (
17
18
  <ThemeProvider>
18
19
  <AnnouncementBarProvider>
19
20
  <UserPreferencesProvider>
20
- <DocsPreferredVersionContextProvider>
21
- <MobileSecondaryMenuProvider>
22
- {children}
23
- </MobileSecondaryMenuProvider>
24
- </DocsPreferredVersionContextProvider>
21
+ <ScrollControllerProvider>
22
+ <DocsPreferredVersionContextProvider>
23
+ <MobileSecondaryMenuProvider>
24
+ {children}
25
+ </MobileSecondaryMenuProvider>
26
+ </DocsPreferredVersionContextProvider>
27
+ </ScrollControllerProvider>
25
28
  </UserPreferencesProvider>
26
29
  </AnnouncementBarProvider>
27
30
  </ThemeProvider>
@@ -9,28 +9,34 @@ import Link from '@docusaurus/Link';
9
9
  import ThemedImage from '@theme/ThemedImage';
10
10
  import useBaseUrl from '@docusaurus/useBaseUrl';
11
11
  import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
12
+ import {useThemeConfig} from '@docusaurus/theme-common';
12
13
 
13
14
  const Logo = (props) => {
14
15
  const {
15
- siteConfig: {
16
- title,
17
- themeConfig: {
18
- navbar: {
19
- title: navbarTitle,
20
- logo = {
21
- src: '',
22
- },
23
- },
16
+ siteConfig: {title},
17
+ } = useDocusaurusContext();
18
+ const {
19
+ navbar: {
20
+ title: navbarTitle,
21
+ logo = {
22
+ src: '',
24
23
  },
25
24
  },
26
- isClient,
27
- } = useDocusaurusContext();
25
+ } = useThemeConfig();
28
26
  const {imageClassName, titleClassName, ...propsRest} = props;
29
27
  const logoLink = useBaseUrl(logo.href || '/');
30
28
  const sources = {
31
29
  light: useBaseUrl(logo.src),
32
30
  dark: useBaseUrl(logo.srcDark || logo.src),
33
31
  };
32
+ const themedImage = (
33
+ <ThemedImage
34
+ sources={sources}
35
+ height={logo.height}
36
+ width={logo.width}
37
+ alt={logo.alt || navbarTitle || title}
38
+ />
39
+ );
34
40
  return (
35
41
  <Link
36
42
  to={logoLink}
@@ -38,14 +44,12 @@ const Logo = (props) => {
38
44
  {...(logo.target && {
39
45
  target: logo.target,
40
46
  })}>
41
- {logo.src && (
42
- <ThemedImage
43
- key={isClient}
44
- className={imageClassName}
45
- sources={sources}
46
- alt={logo.alt || navbarTitle || title}
47
- />
48
- )}
47
+ {logo.src &&
48
+ (imageClassName ? (
49
+ <div className={imageClassName}>{themedImage}</div>
50
+ ) : (
51
+ <>{themedImage}</>
52
+ ))}
49
53
  {navbarTitle != null && <b className={titleClassName}>{navbarTitle}</b>}
50
54
  </Link>
51
55
  );
@@ -5,11 +5,30 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import React, {isValidElement} from 'react';
8
+ import Head from '@docusaurus/Head';
8
9
  import Link from '@docusaurus/Link';
9
10
  import CodeBlock from '@theme/CodeBlock';
10
11
  import Heading from '@theme/Heading';
11
12
  import Details from '@theme/Details';
13
+ import './styles.css'; // MDX elements are wrapped through the MDX pragma
14
+ // In some cases (notably usage with Head/Helmet) we need to unwrap those elements.
15
+
16
+ function unwrapMDXElement(element) {
17
+ if (element?.props?.mdxType && element?.props?.originalType) {
18
+ const {mdxType, originalType, ...newProps} = element.props;
19
+ return React.createElement(element.props.originalType, newProps);
20
+ }
21
+
22
+ return element;
23
+ }
24
+
12
25
  const MDXComponents = {
26
+ head: (props) => {
27
+ const unwrappedChildren = React.Children.map(props.children, (child) =>
28
+ unwrapMDXElement(child),
29
+ );
30
+ return <Head {...props}>{unwrappedChildren}</Head>;
31
+ },
13
32
  code: (props) => {
14
33
  const {children} = props; // For retrocompatibility purposes (pretty rare use case)
15
34
  // See https://github.com/facebook/docusaurus/pull/1584
@@ -29,7 +48,7 @@ const MDXComponents = {
29
48
  const {children} = props; // See comment for `code` above
30
49
 
31
50
  if (isValidElement(children) && isValidElement(children?.props?.children)) {
32
- return children?.props.children;
51
+ return children.props.children;
33
52
  }
34
53
 
35
54
  return (
@@ -0,0 +1,11 @@
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
+ ul.contains-task-list {
9
+ padding-left: 0;
10
+ list-style: none;
11
+ }
@@ -15,7 +15,11 @@ import styles from './styles.module.css';
15
15
 
16
16
  function MDXPage(props) {
17
17
  const {content: MDXPageContent} = props;
18
- const {frontMatter, metadata} = MDXPageContent;
18
+ const {
19
+ // TODO this frontmatter is not validated/normalized, it's the raw user-provided one. We should expose normalized one too!
20
+ frontMatter,
21
+ metadata,
22
+ } = MDXPageContent;
19
23
  const {
20
24
  title,
21
25
  description,
@@ -39,7 +43,11 @@ function MDXPage(props) {
39
43
  </div>
40
44
  {!hideTableOfContents && MDXPageContent.toc && (
41
45
  <div className="col col--2">
42
- <TOC toc={MDXPageContent.toc} />
46
+ <TOC
47
+ toc={MDXPageContent.toc}
48
+ minHeadingLevel={frontMatter.toc_min_heading_level}
49
+ maxHeadingLevel={frontMatter.toc_max_heading_level}
50
+ />
43
51
  </div>
44
52
  )}
45
53
  </div>
@@ -14,6 +14,7 @@ import {
14
14
  useThemeConfig,
15
15
  useMobileSecondaryMenuRenderer,
16
16
  usePrevious,
17
+ useHistoryPopHandler,
17
18
  } from '@docusaurus/theme-common';
18
19
  import useHideableNavbar from '@theme/hooks/useHideableNavbar';
19
20
  import useLockBodyScroll from '@theme/hooks/useLockBodyScroll';
@@ -22,6 +23,7 @@ import {useActivePlugin} from '@theme/hooks/useDocs';
22
23
  import NavbarItem from '@theme/NavbarItem';
23
24
  import Logo from '@theme/Logo';
24
25
  import IconMenu from '@theme/IconMenu';
26
+ import IconClose from '@theme/IconClose';
25
27
  import styles from './styles.module.css'; // retrocompatible with v1
26
28
 
27
29
  const DefaultNavItemPosition = 'right';
@@ -50,7 +52,19 @@ function useMobileSidebar() {
50
52
 
51
53
  const shouldRender = windowSize === 'mobile'; // || windowSize === 'ssr';
52
54
 
53
- const [shown, setShown] = useState(false);
55
+ const [shown, setShown] = useState(false); // Close mobile sidebar on navigation pop
56
+ // Most likely firing when using the Android back button (but not only)
57
+
58
+ useHistoryPopHandler(() => {
59
+ if (shown) {
60
+ setShown(false); // Should we prevent the navigation here?
61
+ // See https://github.com/facebook/docusaurus/pull/5462#issuecomment-911699846
62
+
63
+ return false; // prevent pop navigation
64
+ }
65
+
66
+ return undefined;
67
+ });
54
68
  const toggle = useCallback(() => {
55
69
  setShown((s) => !s);
56
70
  }, []);
@@ -141,12 +155,22 @@ function NavbarMobileSidebar({sidebarShown, toggleSidebar}) {
141
155
  imageClassName="navbar__logo"
142
156
  titleClassName="navbar__title"
143
157
  />
144
- {!colorModeToggle.disabled && sidebarShown && (
158
+ {!colorModeToggle.disabled && (
145
159
  <Toggle
160
+ className={styles.navbarSidebarToggle}
146
161
  checked={colorModeToggle.isDarkTheme}
147
162
  onChange={colorModeToggle.toggle}
148
163
  />
149
164
  )}
165
+ <button
166
+ type="button"
167
+ className="clean-btn navbar-sidebar__close"
168
+ onClick={toggleSidebar}>
169
+ <IconClose
170
+ color="var(--ifm-color-emphasis-600)"
171
+ className={styles.navbarSidebarCloseSvg}
172
+ />
173
+ </button>
150
174
  </div>
151
175
 
152
176
  <div
@@ -161,7 +185,7 @@ function NavbarMobileSidebar({sidebarShown, toggleSidebar}) {
161
185
  </ul>
162
186
  </div>
163
187
 
164
- <div className="navbar-sidebar__item navbar-sidebar__item--secondary menu">
188
+ <div className="navbar-sidebar__item menu">
165
189
  {items.length > 0 && (
166
190
  <button
167
191
  type="button"
@@ -8,7 +8,7 @@
8
8
  /*
9
9
  Hide toggle in small viewports
10
10
  */
11
- @media screen and (max-width: 997px) {
11
+ @media (max-width: 996px) {
12
12
  .toggle {
13
13
  display: none;
14
14
  }
@@ -21,3 +21,7 @@ Hide toggle in small viewports
21
21
  .navbarHidden {
22
22
  transform: translate3d(0, calc(-100% - 2px), 0);
23
23
  }
24
+
25
+ .navbarSidebarToggle {
26
+ margin-right: 1rem;
27
+ }
@@ -10,6 +10,8 @@ import Link from '@docusaurus/Link';
10
10
  import useBaseUrl from '@docusaurus/useBaseUrl';
11
11
  import IconExternalLink from '@theme/IconExternalLink';
12
12
  import isInternalUrl from '@docusaurus/isInternalUrl';
13
+ import {isRegexpStringMatch} from '@docusaurus/theme-common';
14
+ import {getInfimaActiveClassName} from './index';
13
15
  const dropdownLinkActiveClass = 'dropdown__link--active';
14
16
  export function NavLink({
15
17
  activeBasePath,
@@ -17,7 +19,7 @@ export function NavLink({
17
19
  to,
18
20
  href,
19
21
  label,
20
- activeClassName = 'navbar__link--active',
22
+ activeClassName = '',
21
23
  prependBaseUrlToHref,
22
24
  ...props
23
25
  }) {
@@ -38,13 +40,15 @@ export function NavLink({
38
40
  }
39
41
  : {
40
42
  isNavLink: true,
41
- activeClassName,
43
+ activeClassName: !props.className?.includes(activeClassName)
44
+ ? activeClassName
45
+ : '',
42
46
  to: toUrl,
43
47
  ...(activeBasePath || activeBaseRegex
44
48
  ? {
45
49
  isActive: (_match, location) =>
46
50
  activeBaseRegex
47
- ? new RegExp(activeBaseRegex).test(location.pathname)
51
+ ? isRegexpStringMatch(activeBaseRegex, location.pathname)
48
52
  : location.pathname.startsWith(activeBaseUrl),
49
53
  }
50
54
  : null),
@@ -108,7 +112,14 @@ function DefaultNavbarItem({
108
112
  ...props
109
113
  }) {
110
114
  const Comp = mobile ? DefaultNavbarItemMobile : DefaultNavbarItemDesktop;
111
- return <Comp {...props} />;
115
+ return (
116
+ <Comp
117
+ {...props}
118
+ activeClassName={
119
+ props.activeClassName ?? getInfimaActiveClassName(mobile)
120
+ }
121
+ />
122
+ );
112
123
  }
113
124
 
114
125
  export default DefaultNavbarItem;
@@ -8,6 +8,7 @@ import React from 'react';
8
8
  import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
9
9
  import {useLatestVersion, useActiveDocContext} from '@theme/hooks/useDocs';
10
10
  import clsx from 'clsx';
11
+ import {getInfimaActiveClassName} from './index';
11
12
  import {useDocsPreferredVersion} from '@docusaurus/theme-common';
12
13
  import {uniq} from '@docusaurus/utils-common';
13
14
 
@@ -28,7 +29,6 @@ Available doc ids are:\n- ${docIds}`);
28
29
 
29
30
  export default function DocNavbarItem({
30
31
  docId,
31
- activeSidebarClassName,
32
32
  label: staticLabel,
33
33
  docsPluginId,
34
34
  ...props
@@ -41,14 +41,16 @@ export default function DocNavbarItem({
41
41
  [activeVersion, preferredVersion, latestVersion].filter(Boolean),
42
42
  );
43
43
  const doc = getDocInVersions(versions, docId);
44
+ const activeDocInfimaClassName = getInfimaActiveClassName(props.mobile);
44
45
  return (
45
46
  <DefaultNavbarItem
46
47
  exact
47
48
  {...props}
48
49
  className={clsx(props.className, {
49
- [activeSidebarClassName]:
50
- activeDoc && activeDoc.sidebar === doc.sidebar,
50
+ [activeDocInfimaClassName]:
51
+ activeDoc?.sidebar && activeDoc.sidebar === doc.sidebar,
51
52
  })}
53
+ activeClassName={activeDocInfimaClassName}
52
54
  label={staticLabel ?? doc.id}
53
55
  to={doc.path}
54
56
  />
@@ -13,6 +13,7 @@ import {
13
13
  useActiveDocContext,
14
14
  } from '@theme/hooks/useDocs';
15
15
  import {useDocsPreferredVersion} from '@docusaurus/theme-common';
16
+ import {translate} from '@docusaurus/Translate';
16
17
 
17
18
  const getVersionMainDoc = (version) =>
18
19
  version.docs.find((doc) => doc.id === version.mainDocId);
@@ -28,9 +29,8 @@ export default function DocsVersionDropdownNavbarItem({
28
29
  const activeDocContext = useActiveDocContext(docsPluginId);
29
30
  const versions = useVersions(docsPluginId);
30
31
  const latestVersion = useLatestVersion(docsPluginId);
31
- const {preferredVersion, savePreferredVersionName} = useDocsPreferredVersion(
32
- docsPluginId,
33
- );
32
+ const {preferredVersion, savePreferredVersionName} =
33
+ useDocsPreferredVersion(docsPluginId);
34
34
 
35
35
  function getItems() {
36
36
  const versionLinks = versions.map((version) => {
@@ -56,7 +56,15 @@ export default function DocsVersionDropdownNavbarItem({
56
56
  const dropdownVersion =
57
57
  activeDocContext.activeVersion ?? preferredVersion ?? latestVersion; // Mobile dropdown is handled a bit differently
58
58
 
59
- const dropdownLabel = mobile && items ? 'Versions' : dropdownVersion.label;
59
+ const dropdownLabel =
60
+ mobile && items
61
+ ? translate({
62
+ id: 'theme.navbar.mobileVersionsDropdown.label',
63
+ message: 'Versions',
64
+ description:
65
+ 'The label for the navbar versions dropdown on mobile view',
66
+ })
67
+ : dropdownVersion.label;
60
68
  const dropdownTo =
61
69
  mobile && items ? undefined : getVersionMainDoc(dropdownVersion).path; // We don't want to render a version dropdown with 0 or 1 item
62
70
  // If we build the site with a single docs version (onlyIncludeVersions: ['1.0.0'])
@@ -10,6 +10,7 @@ import {
10
10
  isSamePath,
11
11
  useCollapsible,
12
12
  Collapsible,
13
+ isRegexpStringMatch,
13
14
  useLocalPathname,
14
15
  } from '@docusaurus/theme-common';
15
16
  import {NavLink} from '@theme/NavbarItem/DefaultNavbarItem';
@@ -21,10 +22,7 @@ function isItemActive(item, localPathname) {
21
22
  return true;
22
23
  }
23
24
 
24
- if (
25
- item.activeBaseRegex &&
26
- new RegExp(item.activeBaseRegex).test(localPathname)
27
- ) {
25
+ if (isRegexpStringMatch(item.activeBaseRegex, localPathname)) {
28
26
  return true;
29
27
  }
30
28
 
@@ -67,7 +65,7 @@ function DropdownNavbarItemDesktop({items, position, className, ...props}) {
67
65
  'dropdown--show': showDropdown,
68
66
  })}>
69
67
  <NavLink
70
- className={clsx('navbar__item navbar__link', className)}
68
+ className={clsx('navbar__link', className)}
71
69
  {...props}
72
70
  onClick={props.to ? undefined : (e) => e.preventDefault()}
73
71
  onKeyDown={(e) => {
@@ -120,7 +118,7 @@ function DropdownNavbarItemMobile({
120
118
  if (containsActive) {
121
119
  setCollapsed(!containsActive);
122
120
  }
123
- }, [localPathname, containsActive]);
121
+ }, [localPathname, containsActive, setCollapsed]);
124
122
  return (
125
123
  <li
126
124
  className={clsx('menu__list-item', {
@@ -9,6 +9,7 @@ import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
9
9
  import IconLanguage from '@theme/IconLanguage';
10
10
  import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
11
11
  import {useAlternatePageUtils} from '@docusaurus/theme-common';
12
+ import styles from './styles.module.css';
12
13
  export default function LocaleDropdownNavbarItem({
13
14
  mobile,
14
15
  dropdownItemsBefore,
@@ -51,12 +52,7 @@ export default function LocaleDropdownNavbarItem({
51
52
  mobile={mobile}
52
53
  label={
53
54
  <span>
54
- <IconLanguage
55
- style={{
56
- verticalAlign: 'text-bottom',
57
- marginRight: 5,
58
- }}
59
- />
55
+ <IconLanguage className={styles.iconLanguage} />
60
56
  <span>{dropdownLabel}</span>
61
57
  </span>
62
58
  }