@docusaurus/theme-classic 2.0.0-beta.8bda3b2db → 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 (310) hide show
  1. package/README.md +1 -1
  2. package/codeTranslations/ar.json +12 -7
  3. package/codeTranslations/base.json +17 -7
  4. package/codeTranslations/bn.json +11 -5
  5. package/codeTranslations/cs.json +62 -0
  6. package/codeTranslations/da.json +8 -3
  7. package/codeTranslations/de.json +8 -3
  8. package/codeTranslations/es.json +15 -10
  9. package/codeTranslations/fa.json +31 -26
  10. package/codeTranslations/fil.json +8 -3
  11. package/codeTranslations/fr.json +8 -3
  12. package/codeTranslations/he.json +9 -4
  13. package/codeTranslations/hi.json +9 -4
  14. package/codeTranslations/ja.json +8 -3
  15. package/codeTranslations/ko.json +8 -3
  16. package/codeTranslations/pl.json +8 -3
  17. package/codeTranslations/pt-BR.json +16 -11
  18. package/codeTranslations/pt-PT.json +8 -3
  19. package/codeTranslations/ru.json +10 -5
  20. package/codeTranslations/sr.json +62 -0
  21. package/codeTranslations/tr.json +9 -4
  22. package/codeTranslations/vi.json +10 -5
  23. package/codeTranslations/zh-Hans.json +9 -4
  24. package/codeTranslations/zh-Hant.json +9 -4
  25. package/lib/__tests__/validateThemeConfig.test.js +277 -3
  26. package/lib/admonitions.css +35 -0
  27. package/lib/index.js +31 -8
  28. package/lib/prism-include-languages.js +9 -5
  29. package/lib/theme/AnnouncementBar/index.js +10 -16
  30. package/lib/theme/AnnouncementBar/styles.module.css +25 -30
  31. package/lib/theme/BackToTopButton/index.js +140 -0
  32. package/lib/theme/BackToTopButton/styles.module.css +42 -0
  33. package/lib/theme/BlogArchivePage/index.js +89 -0
  34. package/lib/theme/BlogLayout/index.js +51 -0
  35. package/lib/theme/BlogListPage/index.js +10 -21
  36. package/lib/theme/BlogPostAuthor/index.js +51 -0
  37. package/lib/theme/BlogPostAuthor/styles.module.css +12 -0
  38. package/lib/theme/BlogPostAuthors/index.js +47 -0
  39. package/lib/theme/BlogPostAuthors/styles.module.css +11 -0
  40. package/lib/theme/BlogPostItem/index.js +58 -67
  41. package/lib/theme/BlogPostPage/index.js +37 -24
  42. package/lib/theme/BlogSidebar/styles.module.css +2 -2
  43. package/lib/theme/BlogTagsListPage/index.js +8 -44
  44. package/lib/theme/BlogTagsPostsPage/index.js +24 -38
  45. package/lib/theme/CodeBlock/index.js +45 -41
  46. package/lib/theme/CodeBlock/styles.module.css +6 -9
  47. package/lib/theme/Details/index.js +30 -0
  48. package/lib/theme/Details/styles.module.css +13 -0
  49. package/lib/theme/DocItem/index.js +29 -45
  50. package/lib/theme/DocItem/styles.module.css +5 -9
  51. package/lib/theme/DocItemFooter/index.js +79 -0
  52. package/lib/theme/DocItemFooter/styles.module.css +18 -0
  53. package/lib/theme/DocPage/index.js +25 -49
  54. package/lib/theme/DocPage/styles.module.css +8 -23
  55. package/lib/theme/DocSidebar/index.js +45 -227
  56. package/lib/theme/DocSidebar/styles.module.css +0 -18
  57. package/lib/theme/DocSidebarItem/index.js +177 -0
  58. package/lib/theme/DocSidebarItem/styles.module.css +15 -0
  59. package/lib/theme/DocTagDocListPage/index.js +89 -0
  60. package/lib/theme/DocTagsListPage/index.js +44 -0
  61. package/lib/theme/{DocVersionSuggestions → DocVersionBanner}/index.js +37 -18
  62. package/lib/theme/EditThisPage/index.js +3 -1
  63. package/lib/theme/Footer/index.js +13 -4
  64. package/lib/theme/Heading/index.js +7 -9
  65. package/lib/theme/Heading/styles.css +4 -6
  66. package/lib/theme/Heading/styles.module.css +9 -5
  67. package/lib/theme/IconClose/index.js +31 -0
  68. package/lib/theme/LastUpdated/index.js +4 -2
  69. package/lib/theme/LayoutHead/index.js +13 -11
  70. package/lib/theme/LayoutProviders/index.js +11 -5
  71. package/lib/theme/Logo/index.js +14 -12
  72. package/lib/theme/MDXComponents/index.js +45 -4
  73. package/lib/theme/MDXComponents/styles.css +11 -0
  74. package/lib/theme/MDXPage/index.js +2 -1
  75. package/lib/theme/Navbar/index.js +164 -42
  76. package/lib/theme/Navbar/styles.module.css +10 -3
  77. package/lib/theme/NavbarItem/DefaultNavbarItem.js +27 -123
  78. package/lib/theme/NavbarItem/DocNavbarItem.js +6 -5
  79. package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +19 -12
  80. package/lib/theme/NavbarItem/DropdownNavbarItem.js +155 -0
  81. package/lib/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +5 -6
  82. package/lib/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  83. package/lib/theme/NavbarItem/index.js +31 -11
  84. package/lib/theme/Seo/index.js +10 -7
  85. package/lib/theme/SkipToContent/index.js +9 -3
  86. package/lib/theme/SkipToContent/styles.module.css +1 -0
  87. package/lib/theme/TOC/index.js +9 -29
  88. package/lib/theme/TOC/styles.module.css +1 -1
  89. package/lib/theme/TOCCollapsible/index.js +53 -0
  90. package/lib/theme/TOCCollapsible/styles.module.css +50 -0
  91. package/lib/theme/TOCInline/index.js +7 -27
  92. package/lib/theme/TOCItems/index.js +78 -0
  93. package/lib/theme/Tabs/__tests__/index.test.js +123 -0
  94. package/lib/theme/Tabs/index.js +73 -50
  95. package/lib/theme/Tabs/styles.module.css +0 -13
  96. package/lib/theme/Tag/index.js +40 -0
  97. package/lib/theme/Tag/styles.module.css +70 -0
  98. package/lib/theme/TagsListByLetter/index.js +48 -0
  99. package/lib/theme/TagsListByLetter/styles.module.css +11 -0
  100. package/lib/theme/TagsListInline/index.js +44 -0
  101. package/lib/theme/TagsListInline/styles.module.css +15 -0
  102. package/lib/theme/ThemedImage/index.js +4 -5
  103. package/lib/theme/Toggle/index.js +23 -18
  104. package/lib/theme/Toggle/styles.module.css +91 -0
  105. package/lib/theme/UserPreferencesProvider/index.js +1 -9
  106. package/lib/theme/hooks/useHideableNavbar.js +14 -32
  107. package/lib/theme/hooks/useTabGroupChoice.js +2 -4
  108. package/lib/theme/hooks/useTheme.js +2 -2
  109. package/lib/theme/hooks/useWindowSize.js +33 -20
  110. package/lib/theme/prism-include-languages.js +4 -3
  111. package/lib/translations.js +4 -4
  112. package/lib/types.d.ts +338 -138
  113. package/lib/validateThemeConfig.js +226 -245
  114. package/lib-next/__tests__/validateThemeConfig.test.js +277 -3
  115. package/lib-next/admonitions.css +35 -0
  116. package/lib-next/index.js +33 -7
  117. package/lib-next/prism-include-languages.js +0 -2
  118. package/lib-next/theme/AnnouncementBar/index.js +9 -18
  119. package/lib-next/theme/AnnouncementBar/styles.module.css +25 -30
  120. package/lib-next/theme/BackToTopButton/index.js +131 -0
  121. package/lib-next/theme/BackToTopButton/styles.module.css +42 -0
  122. package/lib-next/theme/BlogArchivePage/index.js +80 -0
  123. package/lib-next/theme/BlogLayout/index.js +40 -0
  124. package/lib-next/theme/BlogListPage/index.js +16 -24
  125. package/lib-next/theme/BlogPostAuthor/index.js +46 -0
  126. package/lib-next/theme/BlogPostAuthor/styles.module.css +12 -0
  127. package/lib-next/theme/BlogPostAuthors/index.js +34 -0
  128. package/lib-next/theme/BlogPostAuthors/styles.module.css +11 -0
  129. package/lib-next/theme/BlogPostItem/index.js +79 -86
  130. package/lib-next/theme/BlogPostPage/index.js +70 -35
  131. package/lib-next/theme/BlogSidebar/styles.module.css +2 -2
  132. package/lib-next/theme/BlogTagsListPage/index.js +13 -54
  133. package/lib-next/theme/BlogTagsPostsPage/index.js +28 -38
  134. package/lib-next/theme/CodeBlock/index.js +54 -53
  135. package/lib-next/theme/CodeBlock/styles.module.css +6 -9
  136. package/lib-next/theme/Details/index.js +20 -0
  137. package/lib-next/theme/Details/styles.module.css +13 -0
  138. package/lib-next/theme/DocItem/index.js +46 -55
  139. package/lib-next/theme/DocItem/styles.module.css +5 -9
  140. package/lib-next/theme/DocItemFooter/index.js +79 -0
  141. package/lib-next/theme/DocItemFooter/styles.module.css +18 -0
  142. package/lib-next/theme/DocPage/index.js +25 -43
  143. package/lib-next/theme/DocPage/styles.module.css +8 -23
  144. package/lib-next/theme/DocSidebar/index.js +59 -288
  145. package/lib-next/theme/DocSidebar/styles.module.css +0 -18
  146. package/lib-next/theme/DocSidebarItem/index.js +181 -0
  147. package/lib-next/theme/DocSidebarItem/styles.module.css +15 -0
  148. package/lib-next/theme/DocTagDocListPage/index.js +89 -0
  149. package/lib-next/theme/DocTagsListPage/index.js +38 -0
  150. package/lib-next/theme/{DocVersionSuggestions → DocVersionBanner}/index.js +44 -36
  151. package/lib-next/theme/EditThisPage/index.js +6 -1
  152. package/lib-next/theme/Footer/index.js +24 -4
  153. package/lib-next/theme/Heading/index.js +10 -13
  154. package/lib-next/theme/Heading/styles.css +4 -6
  155. package/lib-next/theme/Heading/styles.module.css +9 -5
  156. package/lib-next/theme/IconClose/index.js +23 -0
  157. package/lib-next/theme/LastUpdated/index.js +3 -2
  158. package/lib-next/theme/LayoutHead/index.js +9 -15
  159. package/lib-next/theme/LayoutProviders/index.js +17 -6
  160. package/lib-next/theme/Logo/index.js +23 -19
  161. package/lib-next/theme/MDXComponents/index.js +34 -7
  162. package/lib-next/theme/MDXComponents/styles.css +11 -0
  163. package/lib-next/theme/MDXPage/index.js +10 -2
  164. package/lib-next/theme/Navbar/index.js +192 -56
  165. package/lib-next/theme/Navbar/styles.module.css +10 -3
  166. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +45 -147
  167. package/lib-next/theme/NavbarItem/DocNavbarItem.js +6 -5
  168. package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +31 -19
  169. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +158 -0
  170. package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +4 -8
  171. package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  172. package/lib-next/theme/NavbarItem/index.js +25 -12
  173. package/lib-next/theme/Seo/index.js +11 -7
  174. package/lib-next/theme/SkipToContent/index.js +5 -6
  175. package/lib-next/theme/SkipToContent/styles.module.css +1 -0
  176. package/lib-next/theme/TOC/index.js +12 -36
  177. package/lib-next/theme/TOC/styles.module.css +1 -1
  178. package/lib-next/theme/TOCCollapsible/index.js +54 -0
  179. package/lib-next/theme/TOCCollapsible/styles.module.css +50 -0
  180. package/lib-next/theme/TOCInline/index.js +10 -28
  181. package/lib-next/theme/TOCItems/index.js +85 -0
  182. package/lib-next/theme/Tabs/__tests__/index.test.js +142 -0
  183. package/lib-next/theme/Tabs/index.js +91 -43
  184. package/lib-next/theme/Tabs/styles.module.css +0 -13
  185. package/lib-next/theme/Tag/index.js +27 -0
  186. package/lib-next/theme/Tag/styles.module.css +70 -0
  187. package/lib-next/theme/TagsListByLetter/index.js +42 -0
  188. package/lib-next/theme/TagsListByLetter/styles.module.css +11 -0
  189. package/lib-next/theme/TagsListInline/index.js +31 -0
  190. package/lib-next/theme/TagsListInline/styles.module.css +15 -0
  191. package/lib-next/theme/ThemedImage/index.js +5 -6
  192. package/lib-next/theme/Toggle/index.js +20 -15
  193. package/lib-next/theme/Toggle/styles.module.css +91 -0
  194. package/lib-next/theme/UserPreferencesProvider/index.js +0 -4
  195. package/lib-next/theme/hooks/useHideableNavbar.js +31 -44
  196. package/lib-next/theme/hooks/useTabGroupChoice.js +2 -4
  197. package/lib-next/theme/hooks/useTheme.js +2 -2
  198. package/lib-next/theme/hooks/useWindowSize.js +34 -20
  199. package/lib-next/theme/prism-include-languages.js +2 -1
  200. package/lib-next/translations.js +6 -10
  201. package/lib-next/types.d.ts +338 -138
  202. package/lib-next/validateThemeConfig.js +134 -110
  203. package/package.json +24 -19
  204. package/src/__tests__/validateThemeConfig.test.js +277 -3
  205. package/src/admonitions.css +35 -0
  206. package/src/index.ts +44 -14
  207. package/src/{prism-include-languages.js → prism-include-languages.ts} +0 -0
  208. package/src/theme/AnnouncementBar/index.tsx +10 -17
  209. package/src/theme/AnnouncementBar/styles.module.css +25 -30
  210. package/src/theme/BackToTopButton/index.tsx +142 -0
  211. package/src/theme/BackToTopButton/styles.module.css +42 -0
  212. package/src/theme/BlogArchivePage/index.tsx +91 -0
  213. package/src/theme/BlogLayout/index.tsx +44 -0
  214. package/src/theme/BlogListPage/index.tsx +17 -24
  215. package/src/theme/BlogPostAuthor/index.tsx +49 -0
  216. package/src/theme/BlogPostAuthor/styles.module.css +12 -0
  217. package/src/theme/BlogPostAuthors/index.tsx +36 -0
  218. package/src/theme/BlogPostAuthors/styles.module.css +11 -0
  219. package/src/theme/BlogPostItem/index.tsx +70 -80
  220. package/src/theme/BlogPostPage/index.tsx +72 -35
  221. package/src/theme/BlogSidebar/styles.module.css +2 -2
  222. package/src/theme/BlogTagsListPage/index.tsx +13 -56
  223. package/src/theme/BlogTagsPostsPage/index.tsx +28 -38
  224. package/src/theme/CodeBlock/index.tsx +70 -55
  225. package/src/theme/CodeBlock/styles.module.css +6 -9
  226. package/src/theme/Details/index.tsx +24 -0
  227. package/src/theme/Details/styles.module.css +13 -0
  228. package/src/theme/DocItem/index.tsx +49 -55
  229. package/src/theme/DocItem/styles.module.css +5 -9
  230. package/src/theme/DocItemFooter/index.tsx +91 -0
  231. package/src/theme/DocItemFooter/styles.module.css +18 -0
  232. package/src/theme/DocPage/index.tsx +24 -38
  233. package/src/theme/DocPage/styles.module.css +8 -23
  234. package/src/theme/DocSidebar/index.tsx +70 -300
  235. package/src/theme/DocSidebar/styles.module.css +0 -18
  236. package/src/theme/DocSidebarItem/index.tsx +206 -0
  237. package/src/theme/DocSidebarItem/styles.module.css +15 -0
  238. package/src/theme/DocTagDocListPage/index.tsx +89 -0
  239. package/src/theme/DocTagsListPage/index.tsx +41 -0
  240. package/src/theme/{DocVersionSuggestions → DocVersionBanner}/index.tsx +58 -44
  241. package/src/theme/EditThisPage/index.tsx +6 -1
  242. package/src/theme/Footer/index.tsx +26 -4
  243. package/src/theme/Heading/index.tsx +10 -13
  244. package/src/theme/Heading/styles.css +4 -6
  245. package/src/theme/Heading/styles.module.css +9 -5
  246. package/src/theme/IconClose/index.tsx +26 -0
  247. package/src/theme/LastUpdated/index.tsx +3 -2
  248. package/src/theme/LayoutHead/index.tsx +9 -9
  249. package/src/theme/LayoutProviders/index.tsx +17 -6
  250. package/src/theme/Logo/index.tsx +19 -15
  251. package/src/theme/MDXComponents/index.tsx +39 -5
  252. package/src/theme/MDXComponents/styles.css +11 -0
  253. package/src/theme/MDXPage/index.tsx +10 -2
  254. package/src/theme/Navbar/index.tsx +202 -61
  255. package/src/theme/Navbar/styles.module.css +10 -3
  256. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +42 -154
  257. package/src/theme/NavbarItem/DocNavbarItem.tsx +11 -14
  258. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +33 -21
  259. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +7 -3
  260. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +180 -0
  261. package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +8 -7
  262. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  263. package/src/theme/NavbarItem/index.tsx +41 -16
  264. package/src/theme/Seo/index.tsx +7 -4
  265. package/src/theme/SkipToContent/index.tsx +5 -6
  266. package/src/theme/SkipToContent/styles.module.css +1 -0
  267. package/src/theme/TOC/index.tsx +12 -41
  268. package/src/theme/TOC/styles.module.css +1 -1
  269. package/src/theme/TOCCollapsible/index.tsx +58 -0
  270. package/src/theme/TOCCollapsible/styles.module.css +50 -0
  271. package/src/theme/TOCInline/index.tsx +13 -32
  272. package/src/theme/TOCItems/index.tsx +96 -0
  273. package/src/theme/Tabs/__tests__/index.test.tsx +129 -0
  274. package/src/theme/Tabs/index.tsx +93 -49
  275. package/src/theme/Tabs/styles.module.css +0 -13
  276. package/src/theme/Tag/index.tsx +31 -0
  277. package/src/theme/Tag/styles.module.css +70 -0
  278. package/src/theme/TagsListByLetter/index.tsx +45 -0
  279. package/src/theme/TagsListByLetter/styles.module.css +11 -0
  280. package/src/theme/TagsListInline/index.tsx +35 -0
  281. package/src/theme/TagsListInline/styles.module.css +15 -0
  282. package/src/theme/ThemedImage/index.tsx +6 -6
  283. package/src/theme/Toggle/index.tsx +20 -15
  284. package/src/theme/Toggle/styles.module.css +91 -0
  285. package/src/theme/UserPreferencesProvider/index.tsx +0 -5
  286. package/src/theme/hooks/useContextualSearchFilters.ts +1 -1
  287. package/src/theme/hooks/useHideableNavbar.ts +32 -45
  288. package/src/theme/hooks/useTabGroupChoice.ts +4 -4
  289. package/src/theme/hooks/useTheme.ts +2 -2
  290. package/src/theme/hooks/useWindowSize.ts +38 -20
  291. package/src/theme/prism-include-languages.ts +3 -2
  292. package/src/translations.ts +6 -10
  293. package/src/types.d.ts +338 -138
  294. package/src/{validateThemeConfig.js → validateThemeConfig.ts} +144 -90
  295. package/tsconfig.json +1 -2
  296. package/update-code-translations.js +10 -6
  297. package/update-code-translations.test.js +1 -1
  298. package/update.js +151 -0
  299. package/lib/theme/Toggle/styles.css +0 -103
  300. package/lib/theme/hooks/useAnnouncementBar.js +0 -63
  301. package/lib/theme/hooks/useScrollPosition.js +0 -49
  302. package/lib/theme/hooks/useTOCHighlight.js +0 -87
  303. package/lib-next/theme/Toggle/styles.css +0 -103
  304. package/lib-next/theme/hooks/useAnnouncementBar.js +0 -49
  305. package/lib-next/theme/hooks/useScrollPosition.js +0 -38
  306. package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
  307. package/src/theme/Toggle/styles.css +0 -103
  308. package/src/theme/hooks/useAnnouncementBar.ts +0 -58
  309. package/src/theme/hooks/useScrollPosition.ts +0 -45
  310. package/src/theme/hooks/useTOCHighlight.ts +0 -98
@@ -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
+ import React from 'react';
8
+ import Layout from '@theme/Layout';
9
+ import {
10
+ ThemeClassNames,
11
+ translateTagsPageTitle,
12
+ } from '@docusaurus/theme-common';
13
+ import TagsListByLetter from '@theme/TagsListByLetter';
14
+
15
+ function DocTagsListPage({tags}) {
16
+ const title = translateTagsPageTitle();
17
+ return (
18
+ <Layout
19
+ title={title}
20
+ wrapperClassName={ThemeClassNames.wrapper.docsPages}
21
+ pageClassName={ThemeClassNames.page.docsTagsListPage}
22
+ searchMetadatas={{
23
+ // assign unique search tag to exclude this page from search results!
24
+ tag: 'doc_tags_list',
25
+ }}>
26
+ <div className="container margin-vert--lg">
27
+ <div className="row">
28
+ <main className="col col--8 col--offset-2">
29
+ <h1>{title}</h1>
30
+ <TagsListByLetter tags={tags} />
31
+ </main>
32
+ </div>
33
+ </div>
34
+ </Layout>
35
+ );
36
+ }
37
+
38
+ export default DocTagsListPage;
@@ -8,21 +8,21 @@ import React from 'react';
8
8
  import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
9
9
  import Link from '@docusaurus/Link';
10
10
  import Translate from '@docusaurus/Translate';
11
+ import {useActivePlugin, useDocVersionSuggestions} from '@theme/hooks/useDocs';
11
12
  import {
12
- useActivePlugin,
13
- useActiveVersion,
14
- useDocVersionSuggestions,
15
- } from '@theme/hooks/useDocs';
16
- import {useDocsPreferredVersion} from '@docusaurus/theme-common';
13
+ ThemeClassNames,
14
+ useDocsPreferredVersion,
15
+ } from '@docusaurus/theme-common';
16
+ import clsx from 'clsx';
17
17
 
18
- function UnreleasedVersionLabel({siteTitle, versionLabel}) {
18
+ function UnreleasedVersionLabel({siteTitle, versionMetadata}) {
19
19
  return (
20
20
  <Translate
21
21
  id="theme.docs.versions.unreleasedVersionLabel"
22
22
  description="The label used to tell the user that he's browsing an unreleased doc version"
23
23
  values={{
24
24
  siteTitle,
25
- versionLabel: <b>{versionLabel}</b>,
25
+ versionLabel: <b>{versionMetadata.label}</b>,
26
26
  }}>
27
27
  {
28
28
  'This is unreleased documentation for {siteTitle} {versionLabel} version.'
@@ -31,14 +31,14 @@ function UnreleasedVersionLabel({siteTitle, versionLabel}) {
31
31
  );
32
32
  }
33
33
 
34
- function UnmaintainedVersionLabel({siteTitle, versionLabel}) {
34
+ function UnmaintainedVersionLabel({siteTitle, versionMetadata}) {
35
35
  return (
36
36
  <Translate
37
37
  id="theme.docs.versions.unmaintainedVersionLabel"
38
38
  description="The label used to tell the user that he's browsing an unmaintained doc version"
39
39
  values={{
40
40
  siteTitle,
41
- versionLabel: <b>{versionLabel}</b>,
41
+ versionLabel: <b>{versionMetadata.label}</b>,
42
42
  }}>
43
43
  {
44
44
  'This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.'
@@ -47,11 +47,22 @@ function UnmaintainedVersionLabel({siteTitle, versionLabel}) {
47
47
  );
48
48
  }
49
49
 
50
+ const BannerLabelComponents = {
51
+ unreleased: UnreleasedVersionLabel,
52
+ unmaintained: UnmaintainedVersionLabel,
53
+ };
54
+
55
+ function BannerLabel(props) {
56
+ const BannerLabelComponent =
57
+ BannerLabelComponents[props.versionMetadata.banner];
58
+ return <BannerLabelComponent {...props} />;
59
+ }
60
+
50
61
  function LatestVersionSuggestionLabel({versionLabel, to, onClick}) {
51
62
  return (
52
63
  <Translate
53
64
  id="theme.docs.versions.latestVersionSuggestionLabel"
54
- description="The label userd to tell the user that he's browsing an unmaintained doc version"
65
+ description="The label used to tell the user to check the latest version"
55
66
  values={{
56
67
  versionLabel,
57
68
  latestVersionLink: (
@@ -73,44 +84,33 @@ function LatestVersionSuggestionLabel({versionLabel, to, onClick}) {
73
84
  );
74
85
  }
75
86
 
76
- const getVersionMainDoc = (version) =>
77
- version.docs.find((doc) => doc.id === version.mainDocId);
78
-
79
- function DocVersionSuggestions() {
87
+ function DocVersionBannerEnabled({versionMetadata}) {
80
88
  const {
81
89
  siteConfig: {title: siteTitle},
82
90
  } = useDocusaurusContext();
83
91
  const {pluginId} = useActivePlugin({
84
92
  failfast: true,
85
93
  });
86
- const {savePreferredVersionName} = useDocsPreferredVersion(pluginId);
87
- const activeVersion = useActiveVersion(pluginId);
88
- const {
89
- latestDocSuggestion,
90
- latestVersionSuggestion,
91
- } = useDocVersionSuggestions(pluginId); // No suggestion to be made
92
94
 
93
- if (!latestVersionSuggestion) {
94
- return <></>;
95
- } // try to link to same doc in latest version (not always possible)
95
+ const getVersionMainDoc = (version) =>
96
+ version.docs.find((doc) => doc.id === version.mainDocId);
97
+
98
+ const {savePreferredVersionName} = useDocsPreferredVersion(pluginId);
99
+ const {latestDocSuggestion, latestVersionSuggestion} =
100
+ useDocVersionSuggestions(pluginId); // try to link to same doc in latest version (not always possible)
96
101
  // fallback to main doc of latest version
97
102
 
98
103
  const latestVersionSuggestedDoc =
99
104
  latestDocSuggestion ?? getVersionMainDoc(latestVersionSuggestion);
100
105
  return (
101
- <div className="alert alert--warning margin-bottom--md" role="alert">
106
+ <div
107
+ className={clsx(
108
+ ThemeClassNames.docs.docVersionBanner,
109
+ 'alert alert--warning margin-bottom--md',
110
+ )}
111
+ role="alert">
102
112
  <div>
103
- {activeVersion.name === 'current' ? (
104
- <UnreleasedVersionLabel
105
- siteTitle={siteTitle}
106
- versionLabel={activeVersion.label}
107
- />
108
- ) : (
109
- <UnmaintainedVersionLabel
110
- siteTitle={siteTitle}
111
- versionLabel={activeVersion.label}
112
- />
113
- )}
113
+ <BannerLabel siteTitle={siteTitle} versionMetadata={versionMetadata} />
114
114
  </div>
115
115
  <div className="margin-top--md">
116
116
  <LatestVersionSuggestionLabel
@@ -123,4 +123,12 @@ function DocVersionSuggestions() {
123
123
  );
124
124
  }
125
125
 
126
- export default DocVersionSuggestions;
126
+ function DocVersionBanner({versionMetadata}) {
127
+ if (versionMetadata.banner) {
128
+ return <DocVersionBannerEnabled versionMetadata={versionMetadata} />;
129
+ }
130
+
131
+ return <></>;
132
+ }
133
+
134
+ export default DocVersionBanner;
@@ -7,9 +7,14 @@
7
7
  import React from 'react';
8
8
  import Translate from '@docusaurus/Translate';
9
9
  import IconEdit from '@theme/IconEdit';
10
+ import {ThemeClassNames} from '@docusaurus/theme-common';
10
11
  export default function EditThisPage({editUrl}) {
11
12
  return (
12
- <a href={editUrl} target="_blank" rel="noreferrer noopener">
13
+ <a
14
+ href={editUrl}
15
+ target="_blank"
16
+ rel="noreferrer noopener"
17
+ className={ThemeClassNames.common.editThisPage}>
13
18
  <IconEdit />
14
19
  <Translate
15
20
  id="theme.common.editThisPage"
@@ -9,8 +9,10 @@ import clsx from 'clsx';
9
9
  import Link from '@docusaurus/Link';
10
10
  import {useThemeConfig} from '@docusaurus/theme-common';
11
11
  import useBaseUrl from '@docusaurus/useBaseUrl';
12
+ import isInternalUrl from '@docusaurus/isInternalUrl';
12
13
  import styles from './styles.module.css';
13
14
  import ThemedImage from '@theme/ThemedImage';
15
+ import IconExternalLink from '@theme/IconExternalLink';
14
16
 
15
17
  function FooterLink({to, href, label, prependBaseUrlToHref, ...props}) {
16
18
  const toUrl = useBaseUrl(to);
@@ -28,13 +30,26 @@ function FooterLink({to, href, label, prependBaseUrlToHref, ...props}) {
28
30
  to: toUrl,
29
31
  })}
30
32
  {...props}>
31
- {label}
33
+ {href && !isInternalUrl(href) ? (
34
+ <span>
35
+ {label}
36
+ <IconExternalLink />
37
+ </span>
38
+ ) : (
39
+ label
40
+ )}
32
41
  </Link>
33
42
  );
34
43
  }
35
44
 
36
- const FooterLogo = ({sources, alt}) => (
37
- <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
+ />
38
53
  );
39
54
 
40
55
  function Footer() {
@@ -94,7 +109,12 @@ function Footer() {
94
109
  <div className="margin-bottom--sm">
95
110
  {logo.href ? (
96
111
  <Link href={logo.href} className={styles.footerLogoLink}>
97
- <FooterLogo alt={logo.alt} sources={sources} />
112
+ <FooterLogo
113
+ alt={logo.alt}
114
+ sources={sources}
115
+ width={logo.width}
116
+ height={logo.height}
117
+ />
98
118
  </Link>
99
119
  ) : (
100
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
 
@@ -7,15 +7,26 @@
7
7
  import React from 'react';
8
8
  import ThemeProvider from '@theme/ThemeProvider';
9
9
  import UserPreferencesProvider from '@theme/UserPreferencesProvider';
10
- import {DocsPreferredVersionContextProvider} from '@docusaurus/theme-common';
10
+ import {
11
+ AnnouncementBarProvider,
12
+ DocsPreferredVersionContextProvider,
13
+ MobileSecondaryMenuProvider,
14
+ ScrollControllerProvider,
15
+ } from '@docusaurus/theme-common';
11
16
  export default function LayoutProviders({children}) {
12
17
  return (
13
18
  <ThemeProvider>
14
- <UserPreferencesProvider>
15
- <DocsPreferredVersionContextProvider>
16
- {children}
17
- </DocsPreferredVersionContextProvider>
18
- </UserPreferencesProvider>
19
+ <AnnouncementBarProvider>
20
+ <UserPreferencesProvider>
21
+ <ScrollControllerProvider>
22
+ <DocsPreferredVersionContextProvider>
23
+ <MobileSecondaryMenuProvider>
24
+ {children}
25
+ </MobileSecondaryMenuProvider>
26
+ </DocsPreferredVersionContextProvider>
27
+ </ScrollControllerProvider>
28
+ </UserPreferencesProvider>
29
+ </AnnouncementBarProvider>
19
30
  </ThemeProvider>
20
31
  );
21
32
  }
@@ -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,10 +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';
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
+
11
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
+ },
12
32
  code: (props) => {
13
33
  const {children} = props; // For retrocompatibility purposes (pretty rare use case)
14
34
  // See https://github.com/facebook/docusaurus/pull/1584
@@ -27,20 +47,27 @@ const MDXComponents = {
27
47
  pre: (props) => {
28
48
  const {children} = props; // See comment for `code` above
29
49
 
30
- if (isValidElement(children?.props?.children)) {
31
- return children?.props.children;
50
+ if (isValidElement(children) && isValidElement(children?.props?.children)) {
51
+ return children.props.children;
32
52
  }
33
53
 
34
54
  return (
35
55
  <CodeBlock
36
- {...(isValidElement(children)
37
- ? children?.props
38
- : {
39
- children,
40
- })}
56
+ {...(isValidElement(children) ? children?.props : {...props})}
41
57
  />
42
58
  );
43
59
  },
60
+ details: (props) => {
61
+ const items = React.Children.toArray(props.children); // Split summary item from the rest to pass it as a separate prop to the Detais theme component
62
+
63
+ const summary = items.find((item) => item?.props?.mdxType === 'summary');
64
+ const children = <>{items.filter((item) => item !== summary)}</>;
65
+ return (
66
+ <Details {...props} summary={summary}>
67
+ {children}
68
+ </Details>
69
+ );
70
+ },
44
71
  h1: Heading('h1'),
45
72
  h2: Heading('h2'),
46
73
  h3: Heading('h3'),
@@ -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>