@docusaurus/theme-classic 2.0.0-beta.1decd6f80 → 2.0.0-beta.20

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 (552) hide show
  1. package/README.md +2 -2
  2. package/lib/admonitions.css +39 -0
  3. package/lib/deps.d.ts +13 -0
  4. package/lib/getSwizzleConfig.js +243 -0
  5. package/lib/index.js +65 -54
  6. package/lib/nprogress.css +41 -0
  7. package/lib/nprogress.js +46 -0
  8. package/lib/prism-include-languages.js +9 -5
  9. package/lib/theme-classic.d.ts +1279 -0
  10. package/lib/translations.js +52 -36
  11. package/lib/validateThemeConfig.js +298 -248
  12. package/lib-next/theme/Admonition/index.js +101 -0
  13. package/lib-next/theme/AnnouncementBar/index.js +10 -22
  14. package/lib-next/theme/AnnouncementBar/styles.module.css +26 -35
  15. package/lib-next/theme/BackToTopButton/index.js +33 -0
  16. package/lib-next/theme/BackToTopButton/styles.module.css +44 -0
  17. package/lib-next/theme/BlogArchivePage/index.js +84 -0
  18. package/lib-next/theme/BlogLayout/index.js +33 -0
  19. package/lib-next/theme/BlogListPage/index.js +45 -35
  20. package/lib-next/theme/BlogListPaginator/index.js +27 -33
  21. package/lib-next/theme/BlogPostAuthor/index.js +49 -0
  22. package/lib-next/theme/BlogPostAuthors/index.js +44 -0
  23. package/lib-next/theme/BlogPostAuthors/styles.module.css +21 -0
  24. package/lib-next/theme/BlogPostItem/index.js +112 -97
  25. package/lib-next/theme/BlogPostItem/styles.module.css +14 -1
  26. package/lib-next/theme/BlogPostPage/index.js +84 -41
  27. package/lib-next/theme/BlogPostPaginator/index.js +28 -38
  28. package/lib-next/theme/BlogSidebar/Desktop/index.js +41 -0
  29. package/{lib/theme/BlogSidebar → lib-next/theme/BlogSidebar/Desktop}/styles.module.css +8 -9
  30. package/lib-next/theme/BlogSidebar/Mobile/index.js +36 -0
  31. package/lib-next/theme/BlogSidebar/index.js +11 -24
  32. package/lib-next/theme/BlogTagsListPage/index.js +24 -71
  33. package/lib-next/theme/BlogTagsPostsPage/index.js +55 -62
  34. package/lib-next/theme/CodeBlock/Container/index.js +29 -0
  35. package/lib-next/theme/CodeBlock/Container/styles.module.css +14 -0
  36. package/lib-next/theme/CodeBlock/Content/Element.js +23 -0
  37. package/lib-next/theme/CodeBlock/Content/String.js +104 -0
  38. package/{src/theme/CodeBlock → lib-next/theme/CodeBlock/Content}/styles.module.css +47 -32
  39. package/lib-next/theme/CodeBlock/CopyButton/index.js +61 -0
  40. package/lib-next/theme/CodeBlock/CopyButton/styles.module.css +47 -0
  41. package/lib-next/theme/CodeBlock/Line/index.js +49 -0
  42. package/lib-next/theme/CodeBlock/Line/styles.module.css +51 -0
  43. package/lib-next/theme/CodeBlock/WordWrapButton/index.js +40 -0
  44. package/lib-next/theme/CodeBlock/WordWrapButton/styles.module.css +15 -0
  45. package/lib-next/theme/CodeBlock/index.js +28 -255
  46. package/lib-next/theme/ColorModeToggle/index.js +62 -0
  47. package/lib-next/theme/ColorModeToggle/styles.module.css +35 -0
  48. package/lib-next/theme/Details/index.js +21 -0
  49. package/lib-next/theme/Details/styles.module.css +13 -0
  50. package/lib-next/theme/DocBreadcrumbs/index.js +120 -0
  51. package/{lib/theme/Heading/styles.css → lib-next/theme/DocBreadcrumbs/styles.module.css} +9 -13
  52. package/lib-next/theme/DocCard/index.js +93 -0
  53. package/lib-next/theme/DocCard/styles.module.css +34 -0
  54. package/lib-next/theme/DocCardList/index.js +33 -0
  55. package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +75 -0
  56. package/lib-next/theme/DocCategoryGeneratedIndexPage/styles.module.css +26 -0
  57. package/lib-next/theme/DocItem/index.js +99 -86
  58. package/lib-next/theme/DocItem/styles.module.css +12 -12
  59. package/lib-next/theme/DocItemFooter/index.js +79 -0
  60. package/{lib/theme/Layout/styles.css → lib-next/theme/DocItemFooter/styles.module.css} +8 -11
  61. package/lib-next/theme/DocPage/Layout/Main/index.js +29 -0
  62. package/lib-next/theme/DocPage/Layout/Main/styles.module.css +28 -0
  63. package/lib-next/theme/DocPage/Layout/Sidebar/ExpandButton/index.js +34 -0
  64. package/lib-next/theme/DocPage/Layout/Sidebar/ExpandButton/styles.module.css +33 -0
  65. package/lib-next/theme/DocPage/Layout/Sidebar/index.js +68 -0
  66. package/lib-next/theme/DocPage/Layout/Sidebar/index.module.css +32 -0
  67. package/lib-next/theme/DocPage/Layout/index.js +34 -0
  68. package/{lib/theme/BlogPostItem/styles.module.css → lib-next/theme/DocPage/Layout/index.module.css} +5 -4
  69. package/lib-next/theme/DocPage/index.js +40 -133
  70. package/lib-next/theme/DocPaginator/index.js +29 -41
  71. package/lib-next/theme/DocSidebar/Desktop/CollapseButton/index.js +34 -0
  72. package/lib-next/theme/DocSidebar/Desktop/CollapseButton/styles.module.css +46 -0
  73. package/lib-next/theme/DocSidebar/Desktop/Content/index.js +46 -0
  74. package/lib-next/theme/DocSidebar/Desktop/Content/styles.module.css +23 -0
  75. package/lib-next/theme/DocSidebar/Desktop/index.js +36 -0
  76. package/lib-next/theme/DocSidebar/Desktop/styles.module.css +50 -0
  77. package/lib-next/theme/DocSidebar/Mobile/index.js +49 -0
  78. package/lib-next/theme/DocSidebar/index.js +13 -333
  79. package/lib-next/theme/DocSidebarItem/Category.js +197 -0
  80. package/lib-next/theme/DocSidebarItem/Html.js +27 -0
  81. package/lib-next/theme/DocSidebarItem/Html.module.css +13 -0
  82. package/lib-next/theme/DocSidebarItem/Link.js +53 -0
  83. package/lib-next/theme/DocSidebarItem/Link.module.css +10 -0
  84. package/lib-next/theme/DocSidebarItem/index.js +23 -0
  85. package/lib-next/theme/DocSidebarItems/index.js +23 -0
  86. package/lib-next/theme/DocTagDocListPage/index.js +96 -0
  87. package/lib-next/theme/DocTagsListPage/index.js +40 -0
  88. package/lib-next/theme/DocVersionBadge/index.js +34 -0
  89. package/lib-next/theme/{DocVersionSuggestions → DocVersionBanner}/index.js +55 -37
  90. package/lib-next/theme/EditThisPage/index.js +6 -1
  91. package/lib-next/theme/ErrorPageContent.js +35 -0
  92. package/lib-next/theme/Footer/Copyright/index.js +18 -0
  93. package/lib-next/theme/Footer/Layout/index.js +26 -0
  94. package/lib-next/theme/Footer/LinkItem/index.js +33 -0
  95. package/lib-next/theme/Footer/Links/MultiColumn/index.js +47 -0
  96. package/lib-next/theme/Footer/Links/Simple/index.js +41 -0
  97. package/lib-next/theme/Footer/Links/index.js +17 -0
  98. package/lib-next/theme/Footer/Logo/index.js +38 -0
  99. package/lib-next/theme/Footer/{styles.module.css → Logo/styles.module.css} +2 -1
  100. package/lib-next/theme/Footer/index.js +12 -100
  101. package/lib-next/theme/Heading/index.js +31 -38
  102. package/lib-next/theme/Heading/styles.module.css +27 -2
  103. package/lib-next/theme/IconArrow/index.js +3 -6
  104. package/lib-next/theme/IconClose/index.js +23 -0
  105. package/lib-next/theme/IconDarkMode/index.js +17 -0
  106. package/lib-next/theme/IconEdit/index.js +5 -10
  107. package/lib-next/theme/IconExternalLink/index.js +23 -0
  108. package/lib-next/theme/{LastUpdated → IconExternalLink}/styles.module.css +2 -2
  109. package/lib-next/theme/IconHome/index.js +17 -0
  110. package/lib-next/theme/IconLanguage/index.js +5 -8
  111. package/lib-next/theme/IconLightMode/index.js +17 -0
  112. package/lib-next/theme/IconMenu/index.js +8 -9
  113. package/lib-next/theme/LastUpdated/index.js +36 -39
  114. package/lib-next/theme/Layout/index.js +19 -16
  115. package/lib-next/theme/Layout/styles.css +6 -0
  116. package/lib-next/theme/LayoutProviders/index.js +22 -10
  117. package/lib-next/theme/Logo/index.js +21 -16
  118. package/lib-next/theme/{ThemeContext.js → MDXComponents/A.js} +4 -2
  119. package/lib-next/theme/MDXComponents/Code.js +28 -0
  120. package/lib-next/theme/MDXComponents/Details.js +20 -0
  121. package/lib-next/theme/MDXComponents/Head.js +26 -0
  122. package/lib-next/theme/MDXComponents/Heading.js +11 -0
  123. package/lib-next/theme/MDXComponents/Img.js +24 -0
  124. package/{lib/theme/LastUpdated/styles.module.css → lib-next/theme/MDXComponents/Img.module.css} +2 -2
  125. package/lib-next/theme/MDXComponents/Pre.js +18 -0
  126. package/lib-next/theme/MDXComponents/Ul.js +21 -0
  127. package/lib-next/theme/MDXComponents/index.js +22 -42
  128. package/lib-next/theme/MDXContent/index.js +12 -0
  129. package/lib-next/theme/MDXPage/index.js +38 -39
  130. package/{lib/theme/IconEdit → lib-next/theme/MDXPage}/styles.module.css +2 -3
  131. package/lib-next/theme/Navbar/ColorModeToggle/index.js +25 -0
  132. package/lib-next/theme/Navbar/Content/index.js +75 -0
  133. package/lib-next/theme/Navbar/Content/styles.module.css +15 -0
  134. package/lib-next/theme/Navbar/Layout/index.js +54 -0
  135. package/{src/theme/Navbar → lib-next/theme/Navbar/Layout}/styles.module.css +1 -7
  136. package/lib-next/theme/Navbar/Logo/index.js +17 -0
  137. package/lib-next/theme/Navbar/MobileSidebar/Header/index.js +33 -0
  138. package/lib-next/theme/Navbar/MobileSidebar/Layout/index.js +28 -0
  139. package/lib-next/theme/Navbar/MobileSidebar/PrimaryMenu/index.js +33 -0
  140. package/lib-next/theme/Navbar/MobileSidebar/SecondaryMenu/index.js +36 -0
  141. package/lib-next/theme/Navbar/MobileSidebar/Toggle/index.js +23 -0
  142. package/lib-next/theme/Navbar/MobileSidebar/index.js +31 -0
  143. package/lib-next/theme/Navbar/Search/index.js +11 -0
  144. package/lib-next/theme/Navbar/Search/styles.module.css +20 -0
  145. package/lib-next/theme/Navbar/index.js +7 -137
  146. package/lib-next/theme/NavbarItem/ComponentTypes.js +27 -0
  147. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +33 -186
  148. package/lib-next/theme/NavbarItem/DocNavbarItem.js +14 -14
  149. package/lib-next/theme/NavbarItem/DocSidebarNavbarItem.js +41 -0
  150. package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +55 -45
  151. package/lib-next/theme/NavbarItem/DocsVersionNavbarItem.js +2 -6
  152. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +167 -0
  153. package/lib-next/theme/NavbarItem/HtmlNavbarItem.js +30 -0
  154. package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +16 -22
  155. package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  156. package/lib-next/theme/NavbarItem/NavbarNavLink.js +84 -0
  157. package/lib-next/theme/NavbarItem/SearchNavbarItem.js +6 -1
  158. package/lib-next/theme/NavbarItem/index.js +18 -25
  159. package/lib-next/theme/NavbarItem/utils.js +10 -0
  160. package/lib-next/theme/NotFound.js +40 -34
  161. package/lib-next/theme/PaginatorNavLink/index.js +23 -0
  162. package/lib-next/theme/SearchBar.js +1 -1
  163. package/lib-next/theme/SearchMetadata/index.js +34 -0
  164. package/lib-next/theme/{LayoutHead → SiteMetadata}/index.js +31 -46
  165. package/lib-next/theme/SkipToContent/index.js +7 -32
  166. package/lib-next/theme/SkipToContent/styles.module.css +8 -3
  167. package/lib-next/theme/TOC/index.js +12 -39
  168. package/lib-next/theme/TOC/styles.module.css +2 -2
  169. package/lib-next/theme/TOCCollapsible/CollapseButton.js +29 -0
  170. package/lib-next/theme/TOCCollapsible/CollapseButton.module.css +29 -0
  171. package/lib-next/theme/TOCCollapsible/index.js +42 -0
  172. package/lib-next/theme/TOCCollapsible/index.module.css +31 -0
  173. package/lib-next/theme/TOCInline/index.js +10 -31
  174. package/lib-next/theme/TOCItems/Tree.js +40 -0
  175. package/lib-next/theme/TOCItems/index.js +54 -0
  176. package/lib-next/theme/TabItem/index.js +4 -5
  177. package/lib-next/theme/TabItem/styles.module.css +10 -0
  178. package/lib-next/theme/Tabs/__tests__/index.test.js +146 -0
  179. package/lib-next/theme/Tabs/index.js +111 -53
  180. package/lib-next/theme/Tabs/styles.module.css +4 -13
  181. package/lib-next/theme/Tag/index.js +23 -0
  182. package/lib-next/theme/Tag/styles.module.css +70 -0
  183. package/lib-next/theme/TagsListByLetter/index.js +40 -0
  184. package/lib-next/theme/TagsListByLetter/styles.module.css +11 -0
  185. package/lib-next/theme/TagsListInline/index.js +31 -0
  186. package/{lib/theme/Heading → lib-next/theme/TagsListInline}/styles.module.css +7 -2
  187. package/lib-next/theme/ThemedImage/index.js +10 -14
  188. package/lib-next/theme/ThemedImage/styles.module.css +9 -2
  189. package/lib-next/theme/prism-include-languages.js +17 -15
  190. package/package.json +37 -31
  191. package/src/admonitions.css +39 -0
  192. package/src/deps.d.ts +13 -0
  193. package/src/getSwizzleConfig.ts +252 -0
  194. package/src/index.ts +76 -75
  195. package/src/nprogress.css +41 -0
  196. package/src/nprogress.ts +31 -0
  197. package/{lib-next/prism-include-languages.js → src/prism-include-languages.ts} +0 -0
  198. package/src/theme/Admonition/index.tsx +106 -0
  199. package/src/theme/AnnouncementBar/index.tsx +11 -20
  200. package/src/theme/AnnouncementBar/styles.module.css +26 -35
  201. package/src/theme/BackToTopButton/index.tsx +34 -0
  202. package/src/theme/BackToTopButton/styles.module.css +44 -0
  203. package/src/theme/BlogArchivePage/index.tsx +92 -0
  204. package/src/theme/BlogLayout/index.tsx +38 -0
  205. package/src/theme/BlogListPage/index.tsx +45 -35
  206. package/src/theme/BlogListPaginator/index.tsx +27 -32
  207. package/src/theme/BlogPostAuthor/index.tsx +50 -0
  208. package/src/theme/BlogPostAuthors/index.tsx +49 -0
  209. package/src/theme/BlogPostAuthors/styles.module.css +21 -0
  210. package/src/theme/BlogPostItem/index.tsx +103 -93
  211. package/src/theme/BlogPostItem/styles.module.css +14 -1
  212. package/src/theme/BlogPostPage/index.tsx +84 -42
  213. package/src/theme/BlogPostPaginator/index.tsx +28 -37
  214. package/src/theme/BlogSidebar/Desktop/index.tsx +45 -0
  215. package/{lib-next/theme/BlogSidebar → src/theme/BlogSidebar/Desktop}/styles.module.css +8 -9
  216. package/src/theme/BlogSidebar/Mobile/index.tsx +38 -0
  217. package/src/theme/BlogSidebar/index.tsx +10 -24
  218. package/src/theme/BlogTagsListPage/index.tsx +24 -71
  219. package/src/theme/BlogTagsPostsPage/index.tsx +57 -65
  220. package/src/theme/CodeBlock/Container/index.tsx +35 -0
  221. package/src/theme/CodeBlock/Container/styles.module.css +14 -0
  222. package/src/theme/CodeBlock/Content/Element.tsx +30 -0
  223. package/src/theme/CodeBlock/Content/String.tsx +111 -0
  224. package/{lib/theme/CodeBlock → src/theme/CodeBlock/Content}/styles.module.css +47 -32
  225. package/src/theme/CodeBlock/CopyButton/index.tsx +67 -0
  226. package/src/theme/CodeBlock/CopyButton/styles.module.css +47 -0
  227. package/src/theme/CodeBlock/Line/index.tsx +48 -0
  228. package/src/theme/CodeBlock/Line/styles.module.css +51 -0
  229. package/src/theme/CodeBlock/WordWrapButton/index.tsx +49 -0
  230. package/src/theme/CodeBlock/WordWrapButton/styles.module.css +15 -0
  231. package/src/theme/CodeBlock/index.tsx +29 -252
  232. package/src/theme/ColorModeToggle/index.tsx +67 -0
  233. package/src/theme/ColorModeToggle/styles.module.css +35 -0
  234. package/src/theme/Details/index.tsx +25 -0
  235. package/src/theme/Details/styles.module.css +13 -0
  236. package/src/theme/DocBreadcrumbs/index.tsx +140 -0
  237. package/src/theme/{Heading/styles.css → DocBreadcrumbs/styles.module.css} +9 -13
  238. package/src/theme/DocCard/index.tsx +116 -0
  239. package/src/theme/DocCard/styles.module.css +34 -0
  240. package/src/theme/DocCardList/index.tsx +36 -0
  241. package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +86 -0
  242. package/src/theme/DocCategoryGeneratedIndexPage/styles.module.css +26 -0
  243. package/src/theme/DocItem/index.tsx +93 -79
  244. package/src/theme/DocItem/styles.module.css +12 -12
  245. package/src/theme/DocItemFooter/index.tsx +91 -0
  246. package/src/theme/DocItemFooter/styles.module.css +18 -0
  247. package/src/theme/DocPage/Layout/Main/index.tsx +37 -0
  248. package/src/theme/DocPage/Layout/Main/styles.module.css +28 -0
  249. package/src/theme/DocPage/Layout/Sidebar/ExpandButton/index.tsx +40 -0
  250. package/src/theme/DocPage/Layout/Sidebar/ExpandButton/styles.module.css +33 -0
  251. package/src/theme/DocPage/Layout/Sidebar/index.module.css +32 -0
  252. package/src/theme/DocPage/Layout/Sidebar/index.tsx +74 -0
  253. package/{lib-next/theme/hooks/styles.css → src/theme/DocPage/Layout/index.module.css} +7 -2
  254. package/src/theme/DocPage/Layout/index.tsx +39 -0
  255. package/src/theme/DocPage/index.tsx +40 -146
  256. package/src/theme/DocPaginator/index.tsx +29 -40
  257. package/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx +38 -0
  258. package/src/theme/DocSidebar/Desktop/CollapseButton/styles.module.css +46 -0
  259. package/src/theme/DocSidebar/Desktop/Content/index.tsx +55 -0
  260. package/src/theme/DocSidebar/Desktop/Content/styles.module.css +23 -0
  261. package/src/theme/DocSidebar/Desktop/index.tsx +40 -0
  262. package/src/theme/DocSidebar/Desktop/styles.module.css +50 -0
  263. package/src/theme/DocSidebar/Mobile/index.tsx +54 -0
  264. package/src/theme/DocSidebar/index.tsx +14 -343
  265. package/src/theme/DocSidebarItem/Category.tsx +210 -0
  266. package/src/theme/DocSidebarItem/Html.module.css +13 -0
  267. package/src/theme/DocSidebarItem/Html.tsx +34 -0
  268. package/src/theme/DocSidebarItem/Link.module.css +10 -0
  269. package/src/theme/DocSidebarItem/Link.tsx +58 -0
  270. package/src/theme/DocSidebarItem/index.tsx +27 -0
  271. package/src/theme/DocSidebarItems/index.tsx +27 -0
  272. package/src/theme/DocTagDocListPage/index.tsx +96 -0
  273. package/src/theme/DocTagsListPage/index.tsx +44 -0
  274. package/src/theme/DocVersionBadge/index.tsx +35 -0
  275. package/src/theme/{DocVersionSuggestions → DocVersionBanner}/index.tsx +78 -49
  276. package/src/theme/EditThisPage/index.tsx +6 -1
  277. package/src/theme/ErrorPageContent.tsx +41 -0
  278. package/src/theme/Footer/Copyright/index.tsx +20 -0
  279. package/src/theme/Footer/Layout/index.tsx +34 -0
  280. package/src/theme/Footer/LinkItem/index.tsx +36 -0
  281. package/src/theme/Footer/Links/MultiColumn/index.tsx +51 -0
  282. package/src/theme/Footer/Links/Simple/index.tsx +42 -0
  283. package/src/theme/Footer/Links/index.tsx +21 -0
  284. package/src/theme/Footer/Logo/index.tsx +41 -0
  285. package/{lib/theme/Footer → src/theme/Footer/Logo}/styles.module.css +2 -1
  286. package/src/theme/Footer/index.tsx +13 -113
  287. package/src/theme/Heading/index.tsx +33 -39
  288. package/src/theme/Heading/styles.module.css +27 -2
  289. package/src/theme/IconArrow/index.tsx +3 -5
  290. package/src/theme/IconClose/index.tsx +26 -0
  291. package/src/theme/IconDarkMode/index.tsx +20 -0
  292. package/src/theme/IconEdit/index.tsx +8 -9
  293. package/src/theme/IconExternalLink/index.tsx +30 -0
  294. package/src/theme/IconExternalLink/styles.module.css +10 -0
  295. package/src/theme/IconHome/index.tsx +20 -0
  296. package/src/theme/IconLanguage/index.tsx +6 -8
  297. package/src/theme/IconLightMode/index.tsx +20 -0
  298. package/src/theme/IconMenu/index.tsx +4 -9
  299. package/src/theme/LastUpdated/index.tsx +36 -39
  300. package/src/theme/Layout/index.tsx +19 -15
  301. package/src/theme/Layout/styles.css +6 -0
  302. package/src/theme/LayoutProviders/index.tsx +22 -10
  303. package/src/theme/Logo/index.tsx +21 -15
  304. package/src/theme/{ThemeContext.ts → MDXComponents/A.tsx} +5 -6
  305. package/src/theme/MDXComponents/Code.tsx +37 -0
  306. package/src/theme/MDXComponents/Details.tsx +25 -0
  307. package/src/theme/MDXComponents/Head.tsx +29 -0
  308. package/src/theme/MDXComponents/Heading.tsx +14 -0
  309. package/src/theme/{LastUpdated/styles.module.css → MDXComponents/Img.module.css} +2 -2
  310. package/src/theme/MDXComponents/Img.tsx +26 -0
  311. package/src/theme/MDXComponents/Pre.tsx +22 -0
  312. package/src/theme/MDXComponents/Ul.tsx +24 -0
  313. package/src/theme/MDXComponents/index.tsx +23 -42
  314. package/src/theme/MDXContent/index.tsx +15 -0
  315. package/src/theme/MDXPage/index.tsx +39 -39
  316. package/src/theme/MDXPage/styles.module.css +10 -0
  317. package/src/theme/Navbar/ColorModeToggle/index.tsx +30 -0
  318. package/src/theme/Navbar/Content/index.tsx +86 -0
  319. package/src/theme/Navbar/Content/styles.module.css +15 -0
  320. package/src/theme/Navbar/Layout/index.tsx +57 -0
  321. package/{lib-next/theme/Navbar → src/theme/Navbar/Layout}/styles.module.css +1 -7
  322. package/src/theme/Navbar/Logo/index.tsx +19 -0
  323. package/src/theme/Navbar/MobileSidebar/Header/index.tsx +34 -0
  324. package/src/theme/Navbar/MobileSidebar/Layout/index.tsx +31 -0
  325. package/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx +38 -0
  326. package/src/theme/Navbar/MobileSidebar/SecondaryMenu/index.tsx +38 -0
  327. package/src/theme/Navbar/MobileSidebar/Toggle/index.tsx +25 -0
  328. package/src/theme/Navbar/MobileSidebar/index.tsx +33 -0
  329. package/src/theme/Navbar/Search/index.tsx +15 -0
  330. package/src/theme/Navbar/Search/styles.module.css +20 -0
  331. package/src/theme/Navbar/index.tsx +7 -147
  332. package/src/theme/NavbarItem/ComponentTypes.tsx +32 -0
  333. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +37 -194
  334. package/src/theme/NavbarItem/DocNavbarItem.tsx +17 -18
  335. package/src/theme/NavbarItem/DocSidebarNavbarItem.tsx +44 -0
  336. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +60 -51
  337. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +5 -8
  338. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +193 -0
  339. package/src/theme/NavbarItem/HtmlNavbarItem.tsx +32 -0
  340. package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +19 -17
  341. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  342. package/src/theme/NavbarItem/NavbarNavLink.tsx +80 -0
  343. package/src/theme/NavbarItem/SearchNavbarItem.tsx +6 -1
  344. package/src/theme/NavbarItem/index.tsx +23 -30
  345. package/src/theme/NavbarItem/utils.ts +13 -0
  346. package/src/theme/NotFound.tsx +40 -33
  347. package/src/theme/PaginatorNavLink/index.tsx +26 -0
  348. package/src/theme/SearchBar.tsx +2 -1
  349. package/src/theme/SearchMetadata/index.tsx +43 -0
  350. package/src/theme/{LayoutHead → SiteMetadata}/index.tsx +31 -40
  351. package/src/theme/SkipToContent/index.tsx +7 -32
  352. package/src/theme/SkipToContent/styles.module.css +8 -3
  353. package/src/theme/TOC/index.tsx +13 -44
  354. package/src/theme/TOC/styles.module.css +2 -2
  355. package/src/theme/TOCCollapsible/CollapseButton.module.css +29 -0
  356. package/src/theme/TOCCollapsible/CollapseButton.tsx +35 -0
  357. package/src/theme/TOCCollapsible/index.module.css +31 -0
  358. package/src/theme/TOCCollapsible/index.tsx +45 -0
  359. package/src/theme/TOCInline/index.tsx +14 -35
  360. package/src/theme/TOCItems/Tree.tsx +46 -0
  361. package/src/theme/TOCItems/index.tsx +61 -0
  362. package/src/theme/TabItem/index.tsx +12 -4
  363. package/src/theme/TabItem/styles.module.css +10 -0
  364. package/src/theme/Tabs/index.tsx +120 -62
  365. package/src/theme/Tabs/styles.module.css +4 -13
  366. package/src/theme/Tag/index.tsx +27 -0
  367. package/src/theme/Tag/styles.module.css +70 -0
  368. package/src/theme/TagsListByLetter/index.tsx +43 -0
  369. package/src/theme/TagsListByLetter/styles.module.css +11 -0
  370. package/src/theme/TagsListInline/index.tsx +35 -0
  371. package/src/theme/TagsListInline/styles.module.css +15 -0
  372. package/src/theme/ThemedImage/index.tsx +12 -13
  373. package/src/theme/ThemedImage/styles.module.css +9 -2
  374. package/src/theme/prism-include-languages.ts +20 -15
  375. package/src/theme-classic.d.ts +1279 -0
  376. package/src/translations.ts +84 -58
  377. package/src/validateThemeConfig.ts +448 -0
  378. package/babel.config.js +0 -35
  379. package/codeTranslations/README.md +0 -20
  380. package/codeTranslations/ar.json +0 -55
  381. package/codeTranslations/base.json +0 -108
  382. package/codeTranslations/da.json +0 -55
  383. package/codeTranslations/de.json +0 -55
  384. package/codeTranslations/es.json +0 -55
  385. package/codeTranslations/fa.json +0 -55
  386. package/codeTranslations/fil.json +0 -55
  387. package/codeTranslations/fr.json +0 -55
  388. package/codeTranslations/he.json +0 -55
  389. package/codeTranslations/hi.json +0 -55
  390. package/codeTranslations/ja.json +0 -55
  391. package/codeTranslations/ko.json +0 -55
  392. package/codeTranslations/pl.json +0 -55
  393. package/codeTranslations/pt-BR.json +0 -55
  394. package/codeTranslations/pt-PT.json +0 -55
  395. package/codeTranslations/ru.json +0 -55
  396. package/codeTranslations/tr.json +0 -55
  397. package/codeTranslations/vi.json +0 -55
  398. package/codeTranslations/zh-Hans.json +0 -55
  399. package/codeTranslations/zh-Hant.json +0 -55
  400. package/lib/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  401. package/lib/__tests__/translations.test.js +0 -112
  402. package/lib/__tests__/validateThemeConfig.test.js +0 -333
  403. package/lib/theme/AnnouncementBar/index.js +0 -74
  404. package/lib/theme/AnnouncementBar/styles.module.css +0 -72
  405. package/lib/theme/BlogListPage/index.js +0 -71
  406. package/lib/theme/BlogListPaginator/index.js +0 -63
  407. package/lib/theme/BlogPostItem/index.js +0 -152
  408. package/lib/theme/BlogPostPage/index.js +0 -75
  409. package/lib/theme/BlogPostPaginator/index.js +0 -64
  410. package/lib/theme/BlogSidebar/index.js +0 -43
  411. package/lib/theme/BlogTagsListPage/index.js +0 -81
  412. package/lib/theme/BlogTagsPostsPage/index.js +0 -104
  413. package/lib/theme/CodeBlock/index.js +0 -253
  414. package/lib/theme/DocItem/index.js +0 -120
  415. package/lib/theme/DocItem/styles.module.css +0 -28
  416. package/lib/theme/DocPage/index.js +0 -141
  417. package/lib/theme/DocPage/styles.module.css +0 -98
  418. package/lib/theme/DocPaginator/index.js +0 -63
  419. package/lib/theme/DocSidebar/index.js +0 -307
  420. package/lib/theme/DocSidebar/styles.module.css +0 -138
  421. package/lib/theme/DocVersionSuggestions/index.js +0 -111
  422. package/lib/theme/EditThisPage/index.js +0 -31
  423. package/lib/theme/Footer/index.js +0 -108
  424. package/lib/theme/Heading/index.js +0 -60
  425. package/lib/theme/IconArrow/index.js +0 -28
  426. package/lib/theme/IconEdit/index.js +0 -34
  427. package/lib/theme/IconLanguage/index.js +0 -29
  428. package/lib/theme/IconMenu/index.js +0 -31
  429. package/lib/theme/LastUpdated/index.js +0 -65
  430. package/lib/theme/Layout/index.js +0 -64
  431. package/lib/theme/LayoutHead/index.js +0 -142
  432. package/lib/theme/LayoutProviders/index.js +0 -34
  433. package/lib/theme/Logo/index.js +0 -59
  434. package/lib/theme/MDXComponents/index.js +0 -65
  435. package/lib/theme/MDXPage/index.js +0 -68
  436. package/lib/theme/Navbar/index.js +0 -147
  437. package/lib/theme/Navbar/styles.module.css +0 -20
  438. package/lib/theme/NavbarItem/DefaultNavbarItem.js +0 -195
  439. package/lib/theme/NavbarItem/DocNavbarItem.js +0 -55
  440. package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +0 -75
  441. package/lib/theme/NavbarItem/DocsVersionNavbarItem.js +0 -43
  442. package/lib/theme/NavbarItem/LocaleDropdownNavbarItem.js +0 -72
  443. package/lib/theme/NavbarItem/SearchNavbarItem.js +0 -28
  444. package/lib/theme/NavbarItem/index.js +0 -54
  445. package/lib/theme/NotFound.js +0 -50
  446. package/lib/theme/SearchBar.js +0 -15
  447. package/lib/theme/SearchMetadatas/index.js +0 -33
  448. package/lib/theme/Seo/index.js +0 -50
  449. package/lib/theme/SkipToContent/index.js +0 -61
  450. package/lib/theme/SkipToContent/styles.module.css +0 -16
  451. package/lib/theme/TOC/index.js +0 -59
  452. package/lib/theme/TOC/styles.module.css +0 -23
  453. package/lib/theme/TOCInline/index.js +0 -53
  454. package/lib/theme/TOCInline/styles.module.css +0 -12
  455. package/lib/theme/TabItem/index.js +0 -32
  456. package/lib/theme/Tabs/index.js +0 -150
  457. package/lib/theme/Tabs/styles.module.css +0 -23
  458. package/lib/theme/ThemeContext.js +0 -21
  459. package/lib/theme/ThemeProvider/index.js +0 -38
  460. package/lib/theme/ThemedImage/index.js +0 -48
  461. package/lib/theme/ThemedImage/styles.module.css +0 -11
  462. package/lib/theme/Toggle/index.js +0 -106
  463. package/lib/theme/Toggle/styles.module.css +0 -114
  464. package/lib/theme/UserPreferencesContext.js +0 -18
  465. package/lib/theme/UserPreferencesProvider/index.js +0 -44
  466. package/lib/theme/hooks/styles.css +0 -10
  467. package/lib/theme/hooks/useAnnouncementBar.js +0 -63
  468. package/lib/theme/hooks/useContextualSearchFilters.js +0 -47
  469. package/lib/theme/hooks/useDocs.js +0 -18
  470. package/lib/theme/hooks/useHideableNavbar.js +0 -92
  471. package/lib/theme/hooks/useKeyboardNavigation.js +0 -45
  472. package/lib/theme/hooks/useLocationHash.js +0 -28
  473. package/lib/theme/hooks/useLockBodyScroll.js +0 -26
  474. package/lib/theme/hooks/usePrismTheme.js +0 -36
  475. package/lib/theme/hooks/useScrollPosition.js +0 -49
  476. package/lib/theme/hooks/useTOCHighlight.js +0 -87
  477. package/lib/theme/hooks/useTabGroupChoice.js +0 -53
  478. package/lib/theme/hooks/useTheme.js +0 -99
  479. package/lib/theme/hooks/useThemeContext.js +0 -31
  480. package/lib/theme/hooks/useUserPreferencesContext.js +0 -31
  481. package/lib/theme/hooks/useWindowSize.js +0 -55
  482. package/lib/theme/prism-include-languages.js +0 -39
  483. package/lib/types.d.ts +0 -600
  484. package/lib-next/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  485. package/lib-next/__tests__/translations.test.js +0 -128
  486. package/lib-next/__tests__/validateThemeConfig.test.js +0 -333
  487. package/lib-next/index.js +0 -198
  488. package/lib-next/theme/CodeBlock/styles.module.css +0 -71
  489. package/lib-next/theme/DocPage/styles.module.css +0 -98
  490. package/lib-next/theme/DocSidebar/styles.module.css +0 -138
  491. package/lib-next/theme/Heading/styles.css +0 -23
  492. package/lib-next/theme/SearchMetadatas/index.js +0 -20
  493. package/lib-next/theme/Seo/index.js +0 -37
  494. package/lib-next/theme/ThemeProvider/index.js +0 -25
  495. package/lib-next/theme/Toggle/index.js +0 -95
  496. package/lib-next/theme/Toggle/styles.module.css +0 -114
  497. package/lib-next/theme/UserPreferencesContext.js +0 -9
  498. package/lib-next/theme/UserPreferencesProvider/index.js +0 -28
  499. package/lib-next/theme/hooks/useAnnouncementBar.js +0 -49
  500. package/lib-next/theme/hooks/useContextualSearchFilters.js +0 -41
  501. package/lib-next/theme/hooks/useDocs.js +0 -10
  502. package/lib-next/theme/hooks/useHideableNavbar.js +0 -79
  503. package/lib-next/theme/hooks/useKeyboardNavigation.js +0 -35
  504. package/lib-next/theme/hooks/useLocationHash.js +0 -20
  505. package/lib-next/theme/hooks/useLockBodyScroll.js +0 -18
  506. package/lib-next/theme/hooks/usePrismTheme.js +0 -20
  507. package/lib-next/theme/hooks/useScrollPosition.js +0 -38
  508. package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
  509. package/lib-next/theme/hooks/useTabGroupChoice.js +0 -41
  510. package/lib-next/theme/hooks/useTheme.js +0 -82
  511. package/lib-next/theme/hooks/useThemeContext.js +0 -22
  512. package/lib-next/theme/hooks/useUserPreferencesContext.js +0 -22
  513. package/lib-next/theme/hooks/useWindowSize.js +0 -45
  514. package/lib-next/translations.js +0 -145
  515. package/lib-next/types.d.ts +0 -600
  516. package/lib-next/validateThemeConfig.js +0 -317
  517. package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  518. package/src/__tests__/translations.test.ts +0 -116
  519. package/src/__tests__/validateThemeConfig.test.js +0 -333
  520. package/src/prism-include-languages.js +0 -11
  521. package/src/theme/BlogSidebar/styles.module.css +0 -46
  522. package/src/theme/DocPage/styles.module.css +0 -98
  523. package/src/theme/DocSidebar/styles.module.css +0 -138
  524. package/src/theme/Footer/styles.module.css +0 -15
  525. package/src/theme/SearchMetadatas/index.tsx +0 -28
  526. package/src/theme/Seo/index.tsx +0 -47
  527. package/src/theme/ThemeProvider/index.tsx +0 -24
  528. package/src/theme/Toggle/index.tsx +0 -113
  529. package/src/theme/Toggle/styles.module.css +0 -114
  530. package/src/theme/UserPreferencesContext.ts +0 -12
  531. package/src/theme/UserPreferencesProvider/index.tsx +0 -32
  532. package/src/theme/hooks/styles.css +0 -10
  533. package/src/theme/hooks/useAnnouncementBar.ts +0 -58
  534. package/src/theme/hooks/useContextualSearchFilters.ts +0 -52
  535. package/src/theme/hooks/useDocs.ts +0 -11
  536. package/src/theme/hooks/useHideableNavbar.ts +0 -85
  537. package/src/theme/hooks/useKeyboardNavigation.ts +0 -39
  538. package/src/theme/hooks/useLocationHash.ts +0 -25
  539. package/src/theme/hooks/useLockBodyScroll.ts +0 -20
  540. package/src/theme/hooks/usePrismTheme.ts +0 -22
  541. package/src/theme/hooks/useScrollPosition.ts +0 -45
  542. package/src/theme/hooks/useTOCHighlight.ts +0 -98
  543. package/src/theme/hooks/useTabGroupChoice.ts +0 -46
  544. package/src/theme/hooks/useTheme.ts +0 -92
  545. package/src/theme/hooks/useThemeContext.ts +0 -23
  546. package/src/theme/hooks/useUserPreferencesContext.ts +0 -25
  547. package/src/theme/hooks/useWindowSize.ts +0 -51
  548. package/src/types.d.ts +0 -600
  549. package/src/validateThemeConfig.js +0 -317
  550. package/tsconfig.json +0 -12
  551. package/update-code-translations.js +0 -239
  552. package/update-code-translations.test.js +0 -33
@@ -7,41 +7,40 @@
7
7
 
8
8
  import React from 'react';
9
9
  import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
10
- import {useLatestVersion, useActiveDocContext} from '@theme/hooks/useDocs';
10
+ import {useActiveDocContext} from '@docusaurus/plugin-content-docs/client';
11
11
  import clsx from 'clsx';
12
+ import {getInfimaActiveClassName} from '@theme/NavbarItem/utils';
12
13
  import type {Props} from '@theme/NavbarItem/DocNavbarItem';
13
- import {useDocsPreferredVersion} from '@docusaurus/theme-common';
14
+ import {useLayoutDoc} from '@docusaurus/theme-common';
14
15
 
15
16
  export default function DocNavbarItem({
16
17
  docId,
17
- activeSidebarClassName,
18
18
  label: staticLabel,
19
19
  docsPluginId,
20
20
  ...props
21
- }: Props): JSX.Element {
22
- const {activeVersion, activeDoc} = useActiveDocContext(docsPluginId);
23
- const {preferredVersion} = useDocsPreferredVersion(docsPluginId);
24
- const latestVersion = useLatestVersion(docsPluginId);
21
+ }: Props): JSX.Element | null {
22
+ const {activeDoc} = useActiveDocContext(docsPluginId);
23
+ const doc = useLayoutDoc(docId, docsPluginId);
25
24
 
26
- const version = activeVersion ?? preferredVersion ?? latestVersion;
27
-
28
- const doc = version.docs.find((versionDoc) => versionDoc.id === docId);
29
- if (!doc) {
30
- const docIds = version.docs.map((versionDoc) => versionDoc.id).join('\n- ');
31
- throw new Error(
32
- `DocNavbarItem: couldn't find any doc with id=${docId} in version ${version.name}.
33
- Available docIds=\n- ${docIds}`,
34
- );
25
+ // Draft items are not displayed in the navbar.
26
+ if (doc === null) {
27
+ return null;
35
28
  }
36
29
 
30
+ const activeDocInfimaClassName = getInfimaActiveClassName(props.mobile);
31
+
37
32
  return (
38
33
  <DefaultNavbarItem
39
34
  exact
40
35
  {...props}
41
36
  className={clsx(props.className, {
42
- [activeSidebarClassName]:
43
- activeDoc && activeDoc.sidebar === doc.sidebar,
37
+ [activeDocInfimaClassName]:
38
+ // Do not make the item active if the active doc doesn't have sidebar.
39
+ // If `activeDoc === doc` react-router will make it active anyways,
40
+ // regardless of the existence of a sidebar
41
+ activeDoc?.sidebar && activeDoc.sidebar === doc.sidebar,
44
42
  })}
43
+ activeClassName={activeDocInfimaClassName}
45
44
  label={staticLabel ?? doc.id}
46
45
  to={doc.path}
47
46
  />
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import React from 'react';
9
+ import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
10
+ import {useActiveDocContext} from '@docusaurus/plugin-content-docs/client';
11
+ import clsx from 'clsx';
12
+ import {getInfimaActiveClassName} from '@theme/NavbarItem/utils';
13
+ import {useLayoutDocsSidebar} from '@docusaurus/theme-common';
14
+
15
+ import type {Props} from '@theme/NavbarItem/DocSidebarNavbarItem';
16
+
17
+ export default function DocSidebarNavbarItem({
18
+ sidebarId,
19
+ label,
20
+ docsPluginId,
21
+ ...props
22
+ }: Props): JSX.Element {
23
+ const {activeDoc} = useActiveDocContext(docsPluginId);
24
+ const sidebarLink = useLayoutDocsSidebar(sidebarId, docsPluginId).link;
25
+ if (!sidebarLink) {
26
+ throw new Error(
27
+ `DocSidebarNavbarItem: Sidebar with ID "${sidebarId}" doesn't have anything to be linked to.`,
28
+ );
29
+ }
30
+ const activeDocInfimaClassName = getInfimaActiveClassName(props.mobile);
31
+
32
+ return (
33
+ <DefaultNavbarItem
34
+ exact
35
+ {...props}
36
+ className={clsx(props.className, {
37
+ [activeDocInfimaClassName]: activeDoc?.sidebar === sidebarId,
38
+ })}
39
+ activeClassName={activeDocInfimaClassName}
40
+ label={label ?? sidebarLink.label}
41
+ to={sidebarLink.path}
42
+ />
43
+ );
44
+ }
@@ -7,16 +7,21 @@
7
7
 
8
8
  import React from 'react';
9
9
  import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
10
+ import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
10
11
  import {
11
12
  useVersions,
12
- useLatestVersion,
13
13
  useActiveDocContext,
14
- } from '@theme/hooks/useDocs';
14
+ } from '@docusaurus/plugin-content-docs/client';
15
+ import {
16
+ useDocsPreferredVersion,
17
+ useDocsVersionCandidates,
18
+ } from '@docusaurus/theme-common';
19
+ import {translate} from '@docusaurus/Translate';
20
+ import type {GlobalVersion} from '@docusaurus/plugin-content-docs/client';
15
21
  import type {Props} from '@theme/NavbarItem/DocsVersionDropdownNavbarItem';
16
- import {useDocsPreferredVersion} from '@docusaurus/theme-common';
17
22
 
18
- const getVersionMainDoc = (version) =>
19
- version.docs.find((doc) => doc.id === version.mainDocId);
23
+ const getVersionMainDoc = (version: GlobalVersion) =>
24
+ version.docs.find((doc) => doc.id === version.mainDocId)!;
20
25
 
21
26
  export default function DocsVersionDropdownNavbarItem({
22
27
  mobile,
@@ -28,62 +33,66 @@ export default function DocsVersionDropdownNavbarItem({
28
33
  }: Props): JSX.Element {
29
34
  const activeDocContext = useActiveDocContext(docsPluginId);
30
35
  const versions = useVersions(docsPluginId);
31
- const latestVersion = useLatestVersion(docsPluginId);
32
-
33
- const {preferredVersion, savePreferredVersionName} = useDocsPreferredVersion(
34
- docsPluginId,
35
- );
36
+ const {savePreferredVersionName} = useDocsPreferredVersion(docsPluginId);
37
+ const versionLinks = versions.map((version) => {
38
+ // We try to link to the same doc, in another version
39
+ // When not possible, fallback to the "main doc" of the version
40
+ const versionDoc =
41
+ activeDocContext?.alternateDocVersions[version.name] ??
42
+ getVersionMainDoc(version);
43
+ return {
44
+ isNavLink: true,
45
+ label: version.label,
46
+ to: versionDoc.path,
47
+ isActive: () => version === activeDocContext?.activeVersion,
48
+ onClick: () => savePreferredVersionName(version.name),
49
+ };
50
+ });
51
+ const items = [
52
+ ...dropdownItemsBefore,
53
+ ...versionLinks,
54
+ ...dropdownItemsAfter,
55
+ ];
36
56
 
37
- function getItems() {
38
- const versionLinks = versions.map((version) => {
39
- // We try to link to the same doc, in another version
40
- // When not possible, fallback to the "main doc" of the version
41
- const versionDoc =
42
- activeDocContext?.alternateDocVersions[version.name] ||
43
- getVersionMainDoc(version);
44
- return {
45
- isNavLink: true,
46
- label: version.label,
47
- to: versionDoc.path,
48
- isActive: () => version === activeDocContext?.activeVersion,
49
- onClick: () => {
50
- savePreferredVersionName(version.name);
51
- },
52
- };
53
- });
57
+ const dropdownVersion = useDocsVersionCandidates(docsPluginId)[0];
54
58
 
55
- const items = [
56
- ...dropdownItemsBefore,
57
- ...versionLinks,
58
- ...dropdownItemsAfter,
59
- ];
59
+ // Mobile dropdown is handled a bit differently
60
+ const dropdownLabel =
61
+ mobile && items.length > 1
62
+ ? translate({
63
+ id: 'theme.navbar.mobileVersionsDropdown.label',
64
+ message: 'Versions',
65
+ description:
66
+ 'The label for the navbar versions dropdown on mobile view',
67
+ })
68
+ : dropdownVersion.label;
69
+ const dropdownTo =
70
+ mobile && items.length > 1
71
+ ? undefined
72
+ : getVersionMainDoc(dropdownVersion).path;
60
73
 
61
- // We don't want to render a version dropdown with 0 or 1 item
62
- // If we build the site with a single docs version (onlyIncludeVersions: ['1.0.0'])
63
- // We'd rather render a button instead of a dropdown
64
- if (items.length <= 1) {
65
- return undefined;
66
- }
67
-
68
- return items;
74
+ // We don't want to render a version dropdown with 0 or 1 item. If we build
75
+ // the site with a single docs version (onlyIncludeVersions: ['1.0.0']),
76
+ // We'd rather render a button instead of a dropdown
77
+ if (items.length <= 1) {
78
+ return (
79
+ <DefaultNavbarItem
80
+ {...props}
81
+ mobile={mobile}
82
+ label={dropdownLabel}
83
+ to={dropdownTo}
84
+ isActive={dropdownActiveClassDisabled ? () => false : undefined}
85
+ />
86
+ );
69
87
  }
70
88
 
71
- const dropdownVersion =
72
- activeDocContext.activeVersion ?? preferredVersion ?? latestVersion;
73
-
74
- // Mobile is handled a bit differently
75
- const dropdownLabel = mobile ? 'Versions' : dropdownVersion.label;
76
- const dropdownTo = mobile
77
- ? undefined
78
- : getVersionMainDoc(dropdownVersion).path;
79
-
80
89
  return (
81
- <DefaultNavbarItem
90
+ <DropdownNavbarItem
82
91
  {...props}
83
92
  mobile={mobile}
84
93
  label={dropdownLabel}
85
94
  to={dropdownTo}
86
- items={getItems()}
95
+ items={items}
87
96
  isActive={dropdownActiveClassDisabled ? () => false : undefined}
88
97
  />
89
98
  );
@@ -7,12 +7,12 @@
7
7
 
8
8
  import React from 'react';
9
9
  import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
10
- import {useActiveVersion, useLatestVersion} from '@theme/hooks/useDocs';
10
+ import {useDocsVersionCandidates} from '@docusaurus/theme-common';
11
+ import type {GlobalVersion} from '@docusaurus/plugin-content-docs/client';
11
12
  import type {Props} from '@theme/NavbarItem/DocsVersionNavbarItem';
12
- import {useDocsPreferredVersion} from '@docusaurus/theme-common';
13
13
 
14
- const getVersionMainDoc = (version) =>
15
- version.docs.find((doc) => doc.id === version.mainDocId);
14
+ const getVersionMainDoc = (version: GlobalVersion) =>
15
+ version.docs.find((doc) => doc.id === version.mainDocId)!;
16
16
 
17
17
  export default function DocsVersionNavbarItem({
18
18
  label: staticLabel,
@@ -20,10 +20,7 @@ export default function DocsVersionNavbarItem({
20
20
  docsPluginId,
21
21
  ...props
22
22
  }: Props): JSX.Element {
23
- const activeVersion = useActiveVersion(docsPluginId);
24
- const {preferredVersion} = useDocsPreferredVersion(docsPluginId);
25
- const latestVersion = useLatestVersion(docsPluginId);
26
- const version = activeVersion ?? preferredVersion ?? latestVersion;
23
+ const version = useDocsVersionCandidates(docsPluginId)[0];
27
24
  const label = staticLabel ?? version.label;
28
25
  const path = staticTo ?? getVersionMainDoc(version).path;
29
26
  return <DefaultNavbarItem {...props} label={label} to={path} />;
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import React, {useState, useRef, useEffect} from 'react';
9
+ import clsx from 'clsx';
10
+ import {
11
+ isSamePath,
12
+ useCollapsible,
13
+ Collapsible,
14
+ isRegexpStringMatch,
15
+ useLocalPathname,
16
+ } from '@docusaurus/theme-common';
17
+ import type {
18
+ DesktopOrMobileNavBarItemProps,
19
+ Props,
20
+ } from '@theme/NavbarItem/DropdownNavbarItem';
21
+ import type {LinkLikeNavbarItemProps} from '@theme/NavbarItem';
22
+
23
+ import NavbarNavLink from '@theme/NavbarItem/NavbarNavLink';
24
+ import NavbarItem from '@theme/NavbarItem';
25
+
26
+ const dropdownLinkActiveClass = 'dropdown__link--active';
27
+
28
+ function isItemActive(
29
+ item: LinkLikeNavbarItemProps,
30
+ localPathname: string,
31
+ ): boolean {
32
+ if (isSamePath(item.to, localPathname)) {
33
+ return true;
34
+ }
35
+ if (isRegexpStringMatch(item.activeBaseRegex, localPathname)) {
36
+ return true;
37
+ }
38
+ if (item.activeBasePath && localPathname.startsWith(item.activeBasePath)) {
39
+ return true;
40
+ }
41
+ return false;
42
+ }
43
+
44
+ function containsActiveItems(
45
+ items: readonly LinkLikeNavbarItemProps[],
46
+ localPathname: string,
47
+ ): boolean {
48
+ return items.some((item) => isItemActive(item, localPathname));
49
+ }
50
+
51
+ function DropdownNavbarItemDesktop({
52
+ items,
53
+ position,
54
+ className,
55
+ ...props
56
+ }: DesktopOrMobileNavBarItemProps) {
57
+ const dropdownRef = useRef<HTMLDivElement>(null);
58
+ const [showDropdown, setShowDropdown] = useState(false);
59
+
60
+ useEffect(() => {
61
+ const handleClickOutside = (event: MouseEvent | TouchEvent) => {
62
+ if (
63
+ !dropdownRef.current ||
64
+ dropdownRef.current.contains(event.target as Node)
65
+ ) {
66
+ return;
67
+ }
68
+ setShowDropdown(false);
69
+ };
70
+
71
+ document.addEventListener('mousedown', handleClickOutside);
72
+ document.addEventListener('touchstart', handleClickOutside);
73
+
74
+ return () => {
75
+ document.removeEventListener('mousedown', handleClickOutside);
76
+ document.removeEventListener('touchstart', handleClickOutside);
77
+ };
78
+ }, [dropdownRef]);
79
+
80
+ return (
81
+ <div
82
+ ref={dropdownRef}
83
+ className={clsx('navbar__item', 'dropdown', 'dropdown--hoverable', {
84
+ 'dropdown--right': position === 'right',
85
+ 'dropdown--show': showDropdown,
86
+ })}>
87
+ <NavbarNavLink
88
+ aria-haspopup="true"
89
+ aria-expanded={showDropdown}
90
+ role="button"
91
+ href={props.to ? undefined : '#'}
92
+ className={clsx('navbar__link', className)}
93
+ {...props}
94
+ onClick={props.to ? undefined : (e) => e.preventDefault()}
95
+ onKeyDown={(e) => {
96
+ if (e.key === 'Enter') {
97
+ e.preventDefault();
98
+ setShowDropdown(!showDropdown);
99
+ }
100
+ }}>
101
+ {props.children ?? props.label}
102
+ </NavbarNavLink>
103
+ <ul className="dropdown__menu">
104
+ {items.map((childItemProps, i) => (
105
+ <NavbarItem
106
+ isDropdownItem
107
+ onKeyDown={(e) => {
108
+ if (i === items.length - 1 && e.key === 'Tab') {
109
+ e.preventDefault();
110
+ setShowDropdown(false);
111
+ const nextNavbarItem = dropdownRef.current!.nextElementSibling;
112
+ if (nextNavbarItem) {
113
+ const targetItem =
114
+ nextNavbarItem instanceof HTMLAnchorElement
115
+ ? nextNavbarItem
116
+ : // Next item is another dropdown; focus on the inner
117
+ // anchor element instead so there's outline
118
+ nextNavbarItem.querySelector('a');
119
+ (targetItem as HTMLElement).focus();
120
+ }
121
+ }
122
+ }}
123
+ activeClassName={dropdownLinkActiveClass}
124
+ {...childItemProps}
125
+ key={i}
126
+ />
127
+ ))}
128
+ </ul>
129
+ </div>
130
+ );
131
+ }
132
+
133
+ function DropdownNavbarItemMobile({
134
+ items,
135
+ className,
136
+ position, // Need to destructure position from props so that it doesn't get passed on.
137
+ ...props
138
+ }: DesktopOrMobileNavBarItemProps) {
139
+ const localPathname = useLocalPathname();
140
+ const containsActive = containsActiveItems(items, localPathname);
141
+
142
+ const {collapsed, toggleCollapsed, setCollapsed} = useCollapsible({
143
+ initialState: () => !containsActive,
144
+ });
145
+
146
+ // Expand/collapse if any item active after a navigation
147
+ useEffect(() => {
148
+ if (containsActive) {
149
+ setCollapsed(!containsActive);
150
+ }
151
+ }, [localPathname, containsActive, setCollapsed]);
152
+
153
+ return (
154
+ <li
155
+ className={clsx('menu__list-item', {
156
+ 'menu__list-item--collapsed': collapsed,
157
+ })}>
158
+ <NavbarNavLink
159
+ role="button"
160
+ className={clsx(
161
+ 'menu__link menu__link--sublist menu__link--sublist-caret',
162
+ className,
163
+ )}
164
+ {...props}
165
+ onClick={(e) => {
166
+ e.preventDefault();
167
+ toggleCollapsed();
168
+ }}>
169
+ {props.children ?? props.label}
170
+ </NavbarNavLink>
171
+ <Collapsible lazy as="ul" className="menu__list" collapsed={collapsed}>
172
+ {items.map((childItemProps, i) => (
173
+ <NavbarItem
174
+ mobile
175
+ isDropdownItem
176
+ onClick={props.onClick}
177
+ activeClassName="menu__link--active"
178
+ {...childItemProps}
179
+ key={i}
180
+ />
181
+ ))}
182
+ </Collapsible>
183
+ </li>
184
+ );
185
+ }
186
+
187
+ export default function DropdownNavbarItem({
188
+ mobile = false,
189
+ ...props
190
+ }: Props): JSX.Element {
191
+ const Comp = mobile ? DropdownNavbarItemMobile : DropdownNavbarItemDesktop;
192
+ return <Comp {...props} />;
193
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import React from 'react';
9
+ import clsx from 'clsx';
10
+
11
+ import type {Props} from '@theme/NavbarItem/HtmlNavbarItem';
12
+
13
+ export default function HtmlNavbarItem({
14
+ value,
15
+ className,
16
+ mobile = false,
17
+ isDropdownItem = false,
18
+ }: Props): JSX.Element {
19
+ const Comp = isDropdownItem ? 'li' : 'div';
20
+ return (
21
+ <Comp
22
+ className={clsx(
23
+ {
24
+ navbar__item: !mobile && !isDropdownItem,
25
+ 'menu__list-item': mobile,
26
+ },
27
+ className,
28
+ )}
29
+ dangerouslySetInnerHTML={{__html: value}}
30
+ />
31
+ );
32
+ }
@@ -6,11 +6,15 @@
6
6
  */
7
7
 
8
8
  import React from 'react';
9
- import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
9
+ import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
10
10
  import IconLanguage from '@theme/IconLanguage';
11
11
  import type {Props} from '@theme/NavbarItem/LocaleDropdownNavbarItem';
12
12
  import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
13
13
  import {useAlternatePageUtils} from '@docusaurus/theme-common';
14
+ import {translate} from '@docusaurus/Translate';
15
+ import type {LinkLikeNavbarItemProps} from '@theme/NavbarItem';
16
+
17
+ import styles from './styles.module.css';
14
18
 
15
19
  export default function LocaleDropdownNavbarItem({
16
20
  mobile,
@@ -23,43 +27,41 @@ export default function LocaleDropdownNavbarItem({
23
27
  } = useDocusaurusContext();
24
28
  const alternatePageUtils = useAlternatePageUtils();
25
29
 
26
- function getLocaleLabel(locale) {
27
- return localeConfigs[locale].label;
28
- }
29
-
30
- const localeItems = locales.map((locale) => {
30
+ const localeItems = locales.map((locale): LinkLikeNavbarItemProps => {
31
31
  const to = `pathname://${alternatePageUtils.createUrl({
32
32
  locale,
33
33
  fullyQualified: false,
34
34
  })}`;
35
35
  return {
36
36
  isNavLink: true,
37
- label: getLocaleLabel(locale),
37
+ label: localeConfigs[locale]!.label,
38
38
  to,
39
39
  target: '_self',
40
40
  autoAddBaseUrl: false,
41
41
  className: locale === currentLocale ? 'dropdown__link--active' : '',
42
- style: {textTransform: 'capitalize'},
43
42
  };
44
43
  });
45
44
 
46
45
  const items = [...dropdownItemsBefore, ...localeItems, ...dropdownItemsAfter];
47
46
 
48
47
  // Mobile is handled a bit differently
49
- const dropdownLabel = mobile ? 'Languages' : getLocaleLabel(currentLocale);
48
+ const dropdownLabel = mobile
49
+ ? translate({
50
+ message: 'Languages',
51
+ id: 'theme.navbar.mobileLanguageDropdown.label',
52
+ description: 'The label for the mobile language switcher dropdown',
53
+ })
54
+ : localeConfigs[currentLocale]!.label;
50
55
 
51
56
  return (
52
- <DefaultNavbarItem
57
+ <DropdownNavbarItem
53
58
  {...props}
54
- href="#"
55
59
  mobile={mobile}
56
60
  label={
57
- <span>
58
- <IconLanguage
59
- style={{verticalAlign: 'text-bottom', marginRight: 5}}
60
- />
61
- <span>{dropdownLabel}</span>
62
- </span>
61
+ <>
62
+ <IconLanguage className={styles.iconLanguage} />
63
+ {dropdownLabel}
64
+ </>
63
65
  }
64
66
  items={items}
65
67
  />
@@ -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
+ .iconLanguage {
9
+ vertical-align: text-bottom;
10
+ margin-right: 5px;
11
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import React from 'react';
9
+ import Link from '@docusaurus/Link';
10
+ import useBaseUrl from '@docusaurus/useBaseUrl';
11
+ import type {Props} from '@theme/NavbarItem/NavbarNavLink';
12
+ import IconExternalLink from '@theme/IconExternalLink';
13
+ import isInternalUrl from '@docusaurus/isInternalUrl';
14
+ import {isRegexpStringMatch} from '@docusaurus/theme-common';
15
+
16
+ const dropdownLinkActiveClass = 'dropdown__link--active';
17
+
18
+ export default function NavbarNavLink({
19
+ activeBasePath,
20
+ activeBaseRegex,
21
+ to,
22
+ href,
23
+ label,
24
+ html,
25
+ activeClassName = '',
26
+ prependBaseUrlToHref,
27
+ ...props
28
+ }: Props): JSX.Element {
29
+ // TODO all this seems hacky
30
+ // {to: 'version'} should probably be forbidden, in favor of {to: '/version'}
31
+ const toUrl = useBaseUrl(to);
32
+ const activeBaseUrl = useBaseUrl(activeBasePath);
33
+ const normalizedHref = useBaseUrl(href, {forcePrependBaseUrl: true});
34
+ const isExternalLink = label && href && !isInternalUrl(href);
35
+ const isDropdownLink = activeClassName === dropdownLinkActiveClass;
36
+
37
+ // Link content is set through html XOR label
38
+ const linkContentProps = html
39
+ ? {dangerouslySetInnerHTML: {__html: html}}
40
+ : {
41
+ children: (
42
+ <>
43
+ {label}
44
+ {isExternalLink && (
45
+ <IconExternalLink
46
+ {...(isDropdownLink && {width: 12, height: 12})}
47
+ />
48
+ )}
49
+ </>
50
+ ),
51
+ };
52
+
53
+ if (href) {
54
+ return (
55
+ <Link
56
+ href={prependBaseUrlToHref ? normalizedHref : href}
57
+ {...props}
58
+ {...linkContentProps}
59
+ />
60
+ );
61
+ }
62
+
63
+ return (
64
+ <Link
65
+ to={toUrl}
66
+ isNavLink
67
+ activeClassName={
68
+ !props.className?.includes(activeClassName) ? activeClassName : ''
69
+ }
70
+ {...((activeBasePath || activeBaseRegex) && {
71
+ isActive: (_match, location) =>
72
+ activeBaseRegex
73
+ ? isRegexpStringMatch(activeBaseRegex, location.pathname)
74
+ : location.pathname.startsWith(activeBaseUrl),
75
+ })}
76
+ {...props}
77
+ {...linkContentProps}
78
+ />
79
+ );
80
+ }
@@ -8,11 +8,16 @@
8
8
  import React from 'react';
9
9
  import type {Props} from '@theme/NavbarItem/SearchNavbarItem';
10
10
  import SearchBar from '@theme/SearchBar';
11
+ import NavbarSearch from '@theme/Navbar/Search';
11
12
 
12
13
  export default function SearchNavbarItem({mobile}: Props): JSX.Element | null {
13
14
  if (mobile) {
14
15
  return null;
15
16
  }
16
17
 
17
- return <SearchBar />;
18
+ return (
19
+ <NavbarSearch>
20
+ <SearchBar />
21
+ </NavbarSearch>
22
+ );
18
23
  }