@docusaurus/theme-classic 2.0.0-beta.12faed89d → 2.0.0-beta.14

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 (349) hide show
  1. package/README.md +1 -1
  2. package/lib/admonitions.css +35 -0
  3. package/lib/deps.d.ts +13 -0
  4. package/lib/index.js +16 -15
  5. package/lib/prism-include-languages.js +9 -5
  6. package/{lib-next/types.d.ts → lib/theme-classic.d.ts} +338 -156
  7. package/lib/translations.js +16 -7
  8. package/lib/types.d.ts +0 -629
  9. package/lib/validateThemeConfig.js +232 -248
  10. package/lib-next/theme/Admonition/index.js +101 -0
  11. package/lib-next/theme/AnnouncementBar/index.js +7 -12
  12. package/lib-next/theme/AnnouncementBar/styles.module.css +23 -32
  13. package/lib-next/theme/BackToTopButton/index.js +131 -0
  14. package/lib-next/theme/BackToTopButton/styles.module.css +42 -0
  15. package/lib-next/theme/BlogArchivePage/index.js +80 -0
  16. package/lib-next/theme/BlogLayout/index.js +40 -0
  17. package/lib-next/theme/BlogListPage/index.js +17 -25
  18. package/lib-next/theme/BlogPostAuthor/index.js +46 -0
  19. package/{lib/theme/MDXPage → lib-next/theme/BlogPostAuthor}/styles.module.css +4 -2
  20. package/lib-next/theme/BlogPostAuthors/index.js +34 -0
  21. package/{lib/theme/IconExternalLink → lib-next/theme/BlogPostAuthors}/styles.module.css +3 -4
  22. package/lib-next/theme/BlogPostItem/index.js +79 -86
  23. package/lib-next/theme/BlogPostPage/index.js +70 -35
  24. package/lib-next/theme/BlogSidebar/index.js +11 -13
  25. package/lib-next/theme/BlogSidebar/styles.module.css +2 -2
  26. package/lib-next/theme/BlogTagsListPage/index.js +14 -55
  27. package/lib-next/theme/BlogTagsPostsPage/index.js +29 -39
  28. package/lib-next/theme/CodeBlock/index.js +23 -149
  29. package/lib-next/theme/CodeBlock/styles.module.css +12 -9
  30. package/lib-next/theme/Details/index.js +20 -0
  31. package/lib-next/theme/Details/styles.module.css +13 -0
  32. package/lib-next/theme/DocCard/index.js +80 -0
  33. package/lib-next/theme/DocCard/styles.module.css +43 -0
  34. package/lib-next/theme/DocCardList/index.js +19 -0
  35. package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +49 -0
  36. package/lib-next/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  37. package/lib-next/theme/DocItem/index.js +30 -59
  38. package/lib-next/theme/DocItem/styles.module.css +2 -11
  39. package/lib-next/theme/DocItemFooter/index.js +79 -0
  40. package/{lib/theme/DocSidebarItem → lib-next/theme/DocItemFooter}/styles.module.css +8 -5
  41. package/lib-next/theme/DocPage/index.js +46 -23
  42. package/lib-next/theme/DocPaginator/index.js +5 -33
  43. package/lib-next/theme/DocPaginatorNavLink/index.js +36 -0
  44. package/lib-next/theme/DocSidebar/index.js +37 -43
  45. package/lib-next/theme/DocSidebarItem/index.js +115 -65
  46. package/lib-next/theme/DocSidebarItem/styles.module.css +4 -0
  47. package/lib-next/theme/DocTagDocListPage/index.js +89 -0
  48. package/lib-next/theme/DocTagsListPage/index.js +38 -0
  49. package/lib-next/theme/DocVersionBadge/index.js +27 -0
  50. package/lib-next/theme/DocVersionBanner/index.js +28 -14
  51. package/lib-next/theme/EditThisPage/index.js +6 -1
  52. package/lib-next/theme/ErrorPageContent.js +35 -0
  53. package/lib-next/theme/Footer/index.js +90 -39
  54. package/lib-next/theme/Heading/index.js +24 -29
  55. package/lib-next/theme/Heading/styles.css +5 -6
  56. package/lib-next/theme/Heading/styles.module.css +9 -5
  57. package/lib-next/theme/IconArrow/index.js +2 -2
  58. package/lib-next/theme/IconClose/index.js +23 -0
  59. package/lib-next/theme/IconEdit/index.js +2 -2
  60. package/lib-next/theme/IconExternalLink/index.js +2 -2
  61. package/lib-next/theme/IconLanguage/index.js +2 -2
  62. package/lib-next/theme/IconMenu/index.js +2 -2
  63. package/lib-next/theme/LastUpdated/index.js +3 -2
  64. package/lib-next/theme/Layout/index.js +3 -1
  65. package/lib-next/theme/LayoutHead/index.js +18 -23
  66. package/lib-next/theme/LayoutProviders/index.js +8 -5
  67. package/lib-next/theme/Logo/index.js +25 -21
  68. package/lib-next/theme/MDXComponents/index.js +34 -7
  69. package/{lib/theme/hooks → lib-next/theme/MDXComponents}/styles.css +3 -2
  70. package/lib-next/theme/MDXPage/index.js +10 -2
  71. package/lib-next/theme/Navbar/index.js +62 -34
  72. package/lib-next/theme/Navbar/styles.module.css +3 -39
  73. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +45 -143
  74. package/lib-next/theme/NavbarItem/DocNavbarItem.js +7 -7
  75. package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +31 -19
  76. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +158 -0
  77. package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +4 -12
  78. package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  79. package/lib-next/theme/NavbarItem/index.js +25 -12
  80. package/lib-next/theme/{SearchMetadatas → SearchMetadata}/index.js +1 -1
  81. package/lib-next/theme/Seo/index.js +11 -7
  82. package/lib-next/theme/TOC/index.js +12 -36
  83. package/lib-next/theme/TOC/styles.module.css +1 -1
  84. package/lib-next/theme/TOCCollapsible/index.js +13 -4
  85. package/lib-next/theme/TOCCollapsible/styles.module.css +1 -0
  86. package/lib-next/theme/TOCInline/index.js +10 -28
  87. package/lib-next/theme/TOCItems/index.js +85 -0
  88. package/lib-next/theme/Tabs/__tests__/index.test.js +142 -0
  89. package/lib-next/theme/Tabs/index.js +103 -48
  90. package/lib-next/theme/Tabs/styles.module.css +0 -13
  91. package/lib-next/theme/Tag/index.js +27 -0
  92. package/lib-next/theme/Tag/styles.module.css +70 -0
  93. package/lib-next/theme/TagsListByLetter/index.js +42 -0
  94. package/lib-next/theme/TagsListByLetter/styles.module.css +11 -0
  95. package/lib-next/theme/TagsListInline/index.js +31 -0
  96. package/lib-next/theme/TagsListInline/styles.module.css +15 -0
  97. package/lib-next/theme/ThemeProvider/index.js +10 -7
  98. package/lib-next/theme/ThemedImage/index.js +5 -5
  99. package/lib-next/theme/Toggle/index.js +34 -37
  100. package/lib-next/theme/Toggle/styles.module.css +91 -3
  101. package/lib-next/theme/UserPreferencesProvider/index.js +9 -6
  102. package/lib-next/theme/hooks/useHideableNavbar.js +31 -44
  103. package/lib-next/theme/hooks/useTheme.js +4 -5
  104. package/lib-next/theme/hooks/useWindowSize.js +2 -6
  105. package/lib-next/theme/prism-include-languages.js +2 -1
  106. package/package.json +26 -24
  107. package/src/admonitions.css +35 -0
  108. package/src/deps.d.ts +13 -0
  109. package/src/index.ts +23 -20
  110. package/{lib-next/prism-include-languages.js → src/prism-include-languages.ts} +0 -0
  111. package/src/theme/Admonition/index.tsx +106 -0
  112. package/src/theme/AnnouncementBar/index.tsx +8 -12
  113. package/src/theme/AnnouncementBar/styles.module.css +23 -32
  114. package/src/theme/BackToTopButton/index.tsx +142 -0
  115. package/src/theme/BackToTopButton/styles.module.css +42 -0
  116. package/src/theme/BlogArchivePage/index.tsx +91 -0
  117. package/src/theme/BlogLayout/index.tsx +44 -0
  118. package/src/theme/BlogListPage/index.tsx +18 -25
  119. package/src/theme/BlogPostAuthor/index.tsx +49 -0
  120. package/{lib/theme/IconEdit → src/theme/BlogPostAuthor}/styles.module.css +4 -3
  121. package/src/theme/BlogPostAuthors/index.tsx +39 -0
  122. package/src/theme/BlogPostAuthors/styles.module.css +11 -0
  123. package/src/theme/BlogPostItem/index.tsx +70 -80
  124. package/src/theme/BlogPostPage/index.tsx +72 -35
  125. package/src/theme/BlogSidebar/index.tsx +11 -13
  126. package/src/theme/BlogSidebar/styles.module.css +2 -2
  127. package/src/theme/BlogTagsListPage/index.tsx +14 -57
  128. package/src/theme/BlogTagsPostsPage/index.tsx +29 -39
  129. package/src/theme/CodeBlock/index.tsx +27 -151
  130. package/src/theme/CodeBlock/styles.module.css +12 -9
  131. package/src/theme/Details/index.tsx +24 -0
  132. package/src/theme/Details/styles.module.css +13 -0
  133. package/src/theme/DocCard/index.tsx +100 -0
  134. package/src/theme/DocCard/styles.module.css +43 -0
  135. package/src/theme/DocCardList/index.tsx +27 -0
  136. package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +53 -0
  137. package/src/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  138. package/src/theme/DocItem/index.tsx +30 -60
  139. package/src/theme/DocItem/styles.module.css +2 -11
  140. package/src/theme/DocItemFooter/index.tsx +91 -0
  141. package/{lib/theme/BlogPostItem → src/theme/DocItemFooter}/styles.module.css +8 -8
  142. package/src/theme/DocPage/index.tsx +44 -22
  143. package/src/theme/DocPaginator/index.tsx +5 -33
  144. package/src/theme/DocPaginatorNavLink/index.tsx +38 -0
  145. package/src/theme/DocSidebar/index.tsx +38 -39
  146. package/src/theme/DocSidebarItem/index.tsx +108 -49
  147. package/src/theme/DocSidebarItem/styles.module.css +4 -0
  148. package/src/theme/DocTagDocListPage/index.tsx +89 -0
  149. package/src/theme/DocTagsListPage/index.tsx +41 -0
  150. package/src/theme/DocVersionBadge/index.tsx +30 -0
  151. package/src/theme/DocVersionBanner/index.tsx +48 -21
  152. package/src/theme/EditThisPage/index.tsx +6 -1
  153. package/src/theme/ErrorPageContent.tsx +41 -0
  154. package/src/theme/Footer/index.tsx +103 -42
  155. package/src/theme/Heading/index.tsx +24 -31
  156. package/src/theme/Heading/styles.css +5 -6
  157. package/src/theme/Heading/styles.module.css +9 -5
  158. package/src/theme/IconArrow/index.tsx +2 -2
  159. package/src/theme/IconClose/index.tsx +26 -0
  160. package/src/theme/IconEdit/index.tsx +2 -2
  161. package/src/theme/IconExternalLink/index.tsx +2 -5
  162. package/src/theme/IconLanguage/index.tsx +2 -6
  163. package/src/theme/IconMenu/index.tsx +3 -3
  164. package/src/theme/LastUpdated/index.tsx +3 -2
  165. package/src/theme/Layout/index.tsx +3 -1
  166. package/src/theme/LayoutHead/index.tsx +18 -17
  167. package/src/theme/LayoutProviders/index.tsx +8 -5
  168. package/src/theme/Logo/index.tsx +21 -17
  169. package/src/theme/MDXComponents/index.tsx +39 -5
  170. package/src/theme/MDXComponents/styles.css +11 -0
  171. package/src/theme/MDXPage/index.tsx +10 -2
  172. package/src/theme/Navbar/index.tsx +62 -35
  173. package/src/theme/Navbar/styles.module.css +3 -39
  174. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +42 -149
  175. package/src/theme/NavbarItem/DocNavbarItem.tsx +12 -16
  176. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +33 -21
  177. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +7 -3
  178. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +180 -0
  179. package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +8 -9
  180. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  181. package/src/theme/NavbarItem/index.tsx +41 -16
  182. package/src/theme/{SearchMetadatas → SearchMetadata}/index.tsx +2 -2
  183. package/src/theme/Seo/index.tsx +7 -4
  184. package/src/theme/TOC/index.tsx +13 -35
  185. package/src/theme/TOC/styles.module.css +1 -1
  186. package/src/theme/TOCCollapsible/index.tsx +13 -4
  187. package/src/theme/TOCCollapsible/styles.module.css +1 -0
  188. package/src/theme/TOCInline/index.tsx +13 -32
  189. package/src/theme/TOCItems/index.tsx +96 -0
  190. package/src/theme/Tabs/index.tsx +110 -54
  191. package/src/theme/Tabs/styles.module.css +0 -13
  192. package/src/theme/Tag/index.tsx +31 -0
  193. package/src/theme/Tag/styles.module.css +70 -0
  194. package/src/theme/TagsListByLetter/index.tsx +45 -0
  195. package/src/theme/TagsListByLetter/styles.module.css +11 -0
  196. package/src/theme/TagsListInline/index.tsx +35 -0
  197. package/src/theme/TagsListInline/styles.module.css +15 -0
  198. package/src/theme/ThemeProvider/index.tsx +6 -2
  199. package/src/theme/ThemedImage/index.tsx +5 -5
  200. package/src/theme/Toggle/index.tsx +36 -43
  201. package/src/theme/Toggle/styles.module.css +91 -3
  202. package/src/theme/UserPreferencesProvider/index.tsx +9 -6
  203. package/src/theme/hooks/useHideableNavbar.ts +32 -45
  204. package/src/theme/hooks/useTabGroupChoice.ts +2 -2
  205. package/src/theme/hooks/useTheme.ts +4 -5
  206. package/src/theme/hooks/useWindowSize.ts +2 -7
  207. package/src/theme/prism-include-languages.ts +3 -2
  208. package/src/theme-classic.d.ts +822 -0
  209. package/src/translations.ts +41 -23
  210. package/src/types.d.ts +0 -629
  211. package/src/{validateThemeConfig.js → validateThemeConfig.ts} +160 -100
  212. package/babel.config.js +0 -35
  213. package/codeTranslations/README.md +0 -20
  214. package/codeTranslations/ar.json +0 -56
  215. package/codeTranslations/base.json +0 -110
  216. package/codeTranslations/bn.json +0 -56
  217. package/codeTranslations/da.json +0 -56
  218. package/codeTranslations/de.json +0 -56
  219. package/codeTranslations/es.json +0 -56
  220. package/codeTranslations/fa.json +0 -56
  221. package/codeTranslations/fil.json +0 -56
  222. package/codeTranslations/fr.json +0 -56
  223. package/codeTranslations/he.json +0 -56
  224. package/codeTranslations/hi.json +0 -56
  225. package/codeTranslations/ja.json +0 -56
  226. package/codeTranslations/ko.json +0 -56
  227. package/codeTranslations/pl.json +0 -56
  228. package/codeTranslations/pt-BR.json +0 -56
  229. package/codeTranslations/pt-PT.json +0 -56
  230. package/codeTranslations/ru.json +0 -56
  231. package/codeTranslations/tr.json +0 -56
  232. package/codeTranslations/vi.json +0 -56
  233. package/codeTranslations/zh-Hans.json +0 -56
  234. package/codeTranslations/zh-Hant.json +0 -56
  235. package/lib/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  236. package/lib/__tests__/translations.test.js +0 -112
  237. package/lib/__tests__/validateThemeConfig.test.js +0 -333
  238. package/lib/theme/AnnouncementBar/index.js +0 -72
  239. package/lib/theme/AnnouncementBar/styles.module.css +0 -72
  240. package/lib/theme/BlogListPage/index.js +0 -71
  241. package/lib/theme/BlogListPaginator/index.js +0 -63
  242. package/lib/theme/BlogPostItem/index.js +0 -161
  243. package/lib/theme/BlogPostPage/index.js +0 -69
  244. package/lib/theme/BlogPostPaginator/index.js +0 -64
  245. package/lib/theme/BlogSidebar/index.js +0 -51
  246. package/lib/theme/BlogSidebar/styles.module.css +0 -44
  247. package/lib/theme/BlogTagsListPage/index.js +0 -76
  248. package/lib/theme/BlogTagsPostsPage/index.js +0 -100
  249. package/lib/theme/CodeBlock/index.js +0 -253
  250. package/lib/theme/CodeBlock/styles.module.css +0 -68
  251. package/lib/theme/DocItem/index.js +0 -138
  252. package/lib/theme/DocItem/styles.module.css +0 -31
  253. package/lib/theme/DocPage/index.js +0 -139
  254. package/lib/theme/DocPage/styles.module.css +0 -85
  255. package/lib/theme/DocPaginator/index.js +0 -63
  256. package/lib/theme/DocSidebar/index.js +0 -133
  257. package/lib/theme/DocSidebar/styles.module.css +0 -106
  258. package/lib/theme/DocSidebarItem/index.js +0 -175
  259. package/lib/theme/DocVersionBanner/index.js +0 -128
  260. package/lib/theme/EditThisPage/index.js +0 -31
  261. package/lib/theme/Footer/index.js +0 -115
  262. package/lib/theme/Footer/styles.module.css +0 -15
  263. package/lib/theme/Heading/index.js +0 -76
  264. package/lib/theme/Heading/styles.css +0 -23
  265. package/lib/theme/Heading/styles.module.css +0 -15
  266. package/lib/theme/IconArrow/index.js +0 -28
  267. package/lib/theme/IconEdit/index.js +0 -34
  268. package/lib/theme/IconExternalLink/index.js +0 -30
  269. package/lib/theme/IconLanguage/index.js +0 -29
  270. package/lib/theme/IconMenu/index.js +0 -30
  271. package/lib/theme/LastUpdated/index.js +0 -61
  272. package/lib/theme/Layout/index.js +0 -64
  273. package/lib/theme/Layout/styles.css +0 -27
  274. package/lib/theme/LayoutHead/index.js +0 -144
  275. package/lib/theme/LayoutProviders/index.js +0 -38
  276. package/lib/theme/Logo/index.js +0 -60
  277. package/lib/theme/MDXComponents/index.js +0 -65
  278. package/lib/theme/MDXPage/index.js +0 -66
  279. package/lib/theme/Navbar/index.js +0 -248
  280. package/lib/theme/Navbar/styles.module.css +0 -63
  281. package/lib/theme/NavbarItem/DefaultNavbarItem.js +0 -210
  282. package/lib/theme/NavbarItem/DocNavbarItem.js +0 -63
  283. package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +0 -76
  284. package/lib/theme/NavbarItem/DocsVersionNavbarItem.js +0 -43
  285. package/lib/theme/NavbarItem/LocaleDropdownNavbarItem.js +0 -72
  286. package/lib/theme/NavbarItem/SearchNavbarItem.js +0 -28
  287. package/lib/theme/NavbarItem/index.js +0 -54
  288. package/lib/theme/NotFound.js +0 -57
  289. package/lib/theme/SearchBar.js +0 -15
  290. package/lib/theme/SearchMetadatas/index.js +0 -33
  291. package/lib/theme/Seo/index.js +0 -49
  292. package/lib/theme/SkipToContent/index.js +0 -71
  293. package/lib/theme/SkipToContent/styles.module.css +0 -14
  294. package/lib/theme/TOC/index.js +0 -60
  295. package/lib/theme/TOC/styles.module.css +0 -23
  296. package/lib/theme/TOCCollapsible/index.js +0 -51
  297. package/lib/theme/TOCCollapsible/styles.module.css +0 -49
  298. package/lib/theme/TOCInline/index.js +0 -53
  299. package/lib/theme/TOCInline/styles.module.css +0 -12
  300. package/lib/theme/TabItem/index.js +0 -32
  301. package/lib/theme/Tabs/index.js +0 -150
  302. package/lib/theme/Tabs/styles.module.css +0 -23
  303. package/lib/theme/ThemeContext.js +0 -21
  304. package/lib/theme/ThemeProvider/index.js +0 -38
  305. package/lib/theme/ThemedImage/index.js +0 -49
  306. package/lib/theme/ThemedImage/styles.module.css +0 -18
  307. package/lib/theme/Toggle/index.js +0 -94
  308. package/lib/theme/Toggle/styles.css +0 -103
  309. package/lib/theme/Toggle/styles.module.css +0 -17
  310. package/lib/theme/UserPreferencesContext.js +0 -18
  311. package/lib/theme/UserPreferencesProvider/index.js +0 -36
  312. package/lib/theme/hooks/useContextualSearchFilters.js +0 -47
  313. package/lib/theme/hooks/useDocs.js +0 -18
  314. package/lib/theme/hooks/useHideableNavbar.js +0 -92
  315. package/lib/theme/hooks/useKeyboardNavigation.js +0 -45
  316. package/lib/theme/hooks/useLocationHash.js +0 -28
  317. package/lib/theme/hooks/useLockBodyScroll.js +0 -26
  318. package/lib/theme/hooks/usePrismTheme.js +0 -36
  319. package/lib/theme/hooks/useScrollPosition.js +0 -49
  320. package/lib/theme/hooks/useTOCHighlight.js +0 -87
  321. package/lib/theme/hooks/useTabGroupChoice.js +0 -51
  322. package/lib/theme/hooks/useTheme.js +0 -99
  323. package/lib/theme/hooks/useThemeContext.js +0 -31
  324. package/lib/theme/hooks/useUserPreferencesContext.js +0 -31
  325. package/lib/theme/hooks/useWindowSize.js +0 -73
  326. package/lib/theme/prism-include-languages.js +0 -39
  327. package/lib-next/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  328. package/lib-next/__tests__/translations.test.js +0 -128
  329. package/lib-next/__tests__/validateThemeConfig.test.js +0 -333
  330. package/lib-next/index.js +0 -221
  331. package/lib-next/theme/Toggle/styles.css +0 -103
  332. package/lib-next/theme/hooks/useContextualSearchFilters.js +0 -41
  333. package/lib-next/theme/hooks/useLocationHash.js +0 -20
  334. package/lib-next/theme/hooks/useScrollPosition.js +0 -38
  335. package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
  336. package/lib-next/translations.js +0 -145
  337. package/lib-next/validateThemeConfig.js +0 -319
  338. package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  339. package/src/__tests__/translations.test.ts +0 -116
  340. package/src/__tests__/validateThemeConfig.test.js +0 -333
  341. package/src/prism-include-languages.js +0 -11
  342. package/src/theme/Toggle/styles.css +0 -103
  343. package/src/theme/hooks/useContextualSearchFilters.ts +0 -52
  344. package/src/theme/hooks/useLocationHash.ts +0 -25
  345. package/src/theme/hooks/useScrollPosition.ts +0 -45
  346. package/src/theme/hooks/useTOCHighlight.ts +0 -98
  347. package/tsconfig.json +0 -12
  348. package/update-code-translations.js +0 -242
  349. package/update-code-translations.test.js +0 -33
@@ -42,9 +42,77 @@ 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} />
47
- );
45
+ function FooterLogo({sources, alt, width, height}) {
46
+ return (
47
+ <ThemedImage
48
+ className="footer__logo"
49
+ alt={alt}
50
+ sources={sources}
51
+ width={width}
52
+ height={height}
53
+ />
54
+ );
55
+ }
56
+
57
+ function MultiColumnLinks({links}) {
58
+ return (
59
+ <>
60
+ {links.map((linkItem, i) => (
61
+ <div key={i} className="col footer__col">
62
+ <div className="footer__title">{linkItem.title}</div>
63
+ <ul className="footer__items">
64
+ {linkItem.items.map((item, key) =>
65
+ item.html ? (
66
+ <li
67
+ key={key}
68
+ className="footer__item" // Developer provided the HTML, so assume it's safe.
69
+ // eslint-disable-next-line react/no-danger
70
+ dangerouslySetInnerHTML={{
71
+ __html: item.html,
72
+ }}
73
+ />
74
+ ) : (
75
+ <li key={item.href || item.to} className="footer__item">
76
+ <FooterLink {...item} />
77
+ </li>
78
+ ),
79
+ )}
80
+ </ul>
81
+ </div>
82
+ ))}
83
+ </>
84
+ );
85
+ }
86
+
87
+ function SimpleLinks({links}) {
88
+ return (
89
+ <div className="footer__links">
90
+ {links.map((item, key) => (
91
+ <>
92
+ {item.html ? (
93
+ <span
94
+ key={key}
95
+ className="footer__link-item" // Developer provided the HTML, so assume it's safe.
96
+ // eslint-disable-next-line react/no-danger
97
+ dangerouslySetInnerHTML={{
98
+ __html: item.html,
99
+ }}
100
+ />
101
+ ) : (
102
+ <FooterLink {...item} />
103
+ )}
104
+ {links.length !== key + 1 && (
105
+ <span className="footer__link-separator">·</span>
106
+ )}
107
+ </>
108
+ ))}
109
+ </div>
110
+ );
111
+ }
112
+
113
+ function isMultiColumnFooterLinks(links) {
114
+ return 'title' in links[0];
115
+ }
48
116
 
49
117
  function Footer() {
50
118
  const {footer} = useThemeConfig();
@@ -63,47 +131,30 @@ function Footer() {
63
131
  className={clsx('footer', {
64
132
  'footer--dark': footer.style === 'dark',
65
133
  })}>
66
- <div className="container">
67
- {links && links.length > 0 && (
68
- <div className="row footer__links">
69
- {links.map((linkItem, i) => (
70
- <div key={i} className="col footer__col">
71
- {linkItem.title != null ? (
72
- <div className="footer__title">{linkItem.title}</div>
73
- ) : null}
74
- {linkItem.items != null &&
75
- Array.isArray(linkItem.items) &&
76
- linkItem.items.length > 0 ? (
77
- <ul className="footer__items">
78
- {linkItem.items.map((item, key) =>
79
- item.html ? (
80
- <li
81
- key={key}
82
- className="footer__item" // Developer provided the HTML, so assume it's safe.
83
- // eslint-disable-next-line react/no-danger
84
- dangerouslySetInnerHTML={{
85
- __html: item.html,
86
- }}
87
- />
88
- ) : (
89
- <li key={item.href || item.to} className="footer__item">
90
- <FooterLink {...item} />
91
- </li>
92
- ),
93
- )}
94
- </ul>
95
- ) : null}
96
- </div>
97
- ))}
98
- </div>
99
- )}
134
+ <div className="container container-fluid">
135
+ {links &&
136
+ links.length > 0 &&
137
+ (isMultiColumnFooterLinks(links) ? (
138
+ <div className="row footer__links">
139
+ <MultiColumnLinks links={links} />
140
+ </div>
141
+ ) : (
142
+ <div className="footer__links text--center">
143
+ <SimpleLinks links={links} />
144
+ </div>
145
+ ))}
100
146
  {(logo || copyright) && (
101
147
  <div className="footer__bottom text--center">
102
148
  {logo && (logo.src || logo.srcDark) && (
103
149
  <div className="margin-bottom--sm">
104
150
  {logo.href ? (
105
151
  <Link href={logo.href} className={styles.footerLogoLink}>
106
- <FooterLogo alt={logo.alt} sources={sources} />
152
+ <FooterLogo
153
+ alt={logo.alt}
154
+ sources={sources}
155
+ width={logo.width}
156
+ height={logo.height}
157
+ />
107
158
  </Link>
108
159
  ) : (
109
160
  <FooterLogo alt={logo.alt} sources={sources} />
@@ -126,4 +177,4 @@ function Footer() {
126
177
  );
127
178
  }
128
179
 
129
- export default Footer;
180
+ export default React.memo(Footer);
@@ -4,29 +4,27 @@
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';
12
10
  import {useThemeConfig} from '@docusaurus/theme-common';
13
11
  import './styles.css';
14
12
  import styles from './styles.module.css';
15
- export const MainHeading = function MainHeading({...props}) {
16
- return (
17
- <header>
18
- <h1
19
- {...props}
20
- id={undefined} // h1 headings do not need an id because they don't appear in the TOC
21
- className={styles.h1Heading}>
22
- {props.children}
23
- </h1>
24
- </header>
25
- );
26
- };
13
+ // eslint-disable-next-line react/function-component-definition
14
+ export const MainHeading = ({...props}) => (
15
+ <header>
16
+ <h1
17
+ {...props}
18
+ id={undefined} // h1 headings do not need an id because they don't appear in the TOC
19
+ >
20
+ {props.children}
21
+ </h1>
22
+ </header>
23
+ );
27
24
 
28
- const createAnchorHeading = (Tag) =>
29
- function TargetComponent({id, ...props}) {
25
+ const createAnchorHeading =
26
+ (Tag) =>
27
+ ({id, ...props}) => {
30
28
  const {
31
29
  navbar: {hideOnScroll},
32
30
  } = useThemeConfig();
@@ -36,15 +34,13 @@ 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
50
46
  className="hash-link"
@@ -54,14 +50,13 @@ const createAnchorHeading = (Tag) =>
54
50
  message: 'Direct link to heading',
55
51
  description: 'Title for link to heading',
56
52
  })}>
57
- #
53
+ &#8203;
58
54
  </a>
59
55
  </Tag>
60
56
  );
61
57
  };
62
58
 
63
- const Heading = (headingType) => {
64
- return headingType === 'h1' ? MainHeading : createAnchorHeading(headingType);
65
- };
59
+ const Heading = (headingType) =>
60
+ headingType === 'h1' ? MainHeading : createAnchorHeading(headingType);
66
61
 
67
62
  export default Heading;
@@ -5,16 +5,15 @@
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);
12
+ user-select: none;
13
+ }
14
+
15
+ .hash-link:before {
16
+ content: '#';
18
17
  }
19
18
 
20
19
  .hash-link:focus,
@@ -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
  }
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import React from 'react';
8
8
 
9
- const IconArrow = (props) => {
9
+ function IconArrow(props) {
10
10
  return (
11
11
  <svg width="20" height="20" aria-hidden="true" {...props}>
12
12
  <g fill="#7a7a7a">
@@ -15,6 +15,6 @@ const IconArrow = (props) => {
15
15
  </g>
16
16
  </svg>
17
17
  );
18
- };
18
+ }
19
19
 
20
20
  export default IconArrow;
@@ -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
+ }
@@ -8,7 +8,7 @@ import React from 'react';
8
8
  import clsx from 'clsx';
9
9
  import styles from './styles.module.css';
10
10
 
11
- const IconEdit = ({className, ...restProps}) => {
11
+ function IconEdit({className, ...restProps}) {
12
12
  return (
13
13
  <svg
14
14
  fill="currentColor"
@@ -23,6 +23,6 @@ const IconEdit = ({className, ...restProps}) => {
23
23
  </g>
24
24
  </svg>
25
25
  );
26
- };
26
+ }
27
27
 
28
28
  export default IconEdit;
@@ -7,7 +7,7 @@
7
7
  import React from 'react';
8
8
  import styles from './styles.module.css';
9
9
 
10
- const IconExternalLink = ({width = 13.5, height = 13.5}) => {
10
+ function IconExternalLink({width = 13.5, height = 13.5}) {
11
11
  return (
12
12
  <svg
13
13
  width={width}
@@ -21,6 +21,6 @@ const IconExternalLink = ({width = 13.5, height = 13.5}) => {
21
21
  />
22
22
  </svg>
23
23
  );
24
- };
24
+ }
25
25
 
26
26
  export default IconExternalLink;
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import React from 'react';
8
8
 
9
- const IconLanguage = ({width = 20, height = 20, ...props}) => {
9
+ function IconLanguage({width = 20, height = 20, ...props}) {
10
10
  return (
11
11
  <svg
12
12
  viewBox="0 0 20 20"
@@ -20,6 +20,6 @@ const IconLanguage = ({width = 20, height = 20, ...props}) => {
20
20
  />
21
21
  </svg>
22
22
  );
23
- };
23
+ }
24
24
 
25
25
  export default IconLanguage;
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import React from 'react';
8
8
 
9
- const IconMenu = ({width = 30, height = 30, className, ...restProps}) => {
9
+ function IconMenu({width = 30, height = 30, className, ...restProps}) {
10
10
  return (
11
11
  <svg
12
12
  className={className}
@@ -24,6 +24,6 @@ const IconMenu = ({width = 30, height = 30, className, ...restProps}) => {
24
24
  />
25
25
  </svg>
26
26
  );
27
- };
27
+ }
28
28
 
29
29
  export default IconMenu;
@@ -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
  }
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import React from 'react';
8
8
  import clsx from 'clsx';
9
+ import ErrorBoundary from '@docusaurus/ErrorBoundary';
9
10
  import SkipToContent from '@theme/SkipToContent';
10
11
  import AnnouncementBar from '@theme/AnnouncementBar';
11
12
  import Navbar from '@theme/Navbar';
@@ -14,6 +15,7 @@ import LayoutProviders from '@theme/LayoutProviders';
14
15
  import LayoutHead from '@theme/LayoutHead';
15
16
  import useKeyboardNavigation from '@theme/hooks/useKeyboardNavigation';
16
17
  import {ThemeClassNames} from '@docusaurus/theme-common';
18
+ import ErrorPageContent from '@theme/ErrorPageContent';
17
19
  import './styles.css';
18
20
 
19
21
  function Layout(props) {
@@ -35,7 +37,7 @@ function Layout(props) {
35
37
  wrapperClassName,
36
38
  pageClassName,
37
39
  )}>
38
- {children}
40
+ <ErrorBoundary fallback={ErrorPageContent}>{children}</ErrorBoundary>
39
41
  </div>
40
42
 
41
43
  {!noFooter && <Footer />}
@@ -8,12 +8,13 @@ import React from 'react';
8
8
  import Head from '@docusaurus/Head';
9
9
  import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
10
10
  import useBaseUrl from '@docusaurus/useBaseUrl';
11
- import SearchMetadatas from '@theme/SearchMetadatas';
11
+ import SearchMetadata from '@theme/SearchMetadata';
12
12
  import Seo from '@theme/Seo';
13
13
  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,13 +78,11 @@ 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();
86
- const {title, description, image, keywords, searchMetadatas} = props;
84
+ const {metadata, image: defaultImage} = useThemeConfig();
85
+ const {title, description, image, keywords, searchMetadata} = props;
87
86
  const faviconUrl = useBaseUrl(favicon);
88
87
  const pageTitle = useTitleFormatter(title); // See https://github.com/facebook/docusaurus/issues/3317#issuecomment-754661855
89
88
  // const htmlLang = currentLocale.split('-')[0];
@@ -95,41 +94,37 @@ export default function LayoutHead(props) {
95
94
  <>
96
95
  <Head>
97
96
  <html lang={htmlLang} dir={htmlDir} />
98
- {favicon && <link rel="shortcut icon" href={faviconUrl} />}
97
+ {favicon && <link rel="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
 
117
111
  <AlternateLangHeaders />
118
112
 
119
- <SearchMetadatas
113
+ <SearchMetadata
120
114
  tag={DEFAULT_SEARCH_TAG}
121
115
  locale={currentLocale}
122
- {...searchMetadatas}
116
+ {...searchMetadata}
123
117
  />
124
118
 
125
119
  <Head // it's important to have an additional <Head> element here,
126
120
  // as it allows react-helmet to override values set in previous <Head>
127
- // ie we can override default metadatas such as "twitter:card"
121
+ // ie we can override default metadata such as "twitter:card"
128
122
  // In same Head, the same meta would appear twice instead of overriding
129
123
  // See react-helmet doc
130
124
  >
131
- {metadatas.map((metadata, i) => (
132
- <meta key={`metadata_${i}`} {...metadata} />
125
+ {/* Yes, "metadatum" is the grammatically correct term */}
126
+ {metadata.map((metadatum, i) => (
127
+ <meta key={`metadata_${i}`} {...metadatum} />
133
128
  ))}
134
129
  </Head>
135
130
  </>
@@ -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
- const Logo = (props) => {
14
+ function 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,17 +44,15 @@ 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
  );
52
- };
56
+ }
53
57
 
54
58
  export default Logo;