@docusaurus/theme-classic 2.0.0-beta.15d451942 → 2.0.0-beta.16

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 (407) hide show
  1. package/README.md +2 -2
  2. package/lib/admonitions.css +35 -0
  3. package/lib/deps.d.ts +13 -0
  4. package/lib/getSwizzleConfig.js +102 -0
  5. package/lib/index.js +59 -43
  6. package/lib/prism-include-languages.js +9 -5
  7. package/lib/theme-classic.d.ts +755 -0
  8. package/lib/translations.js +40 -34
  9. package/lib/types.d.ts +0 -589
  10. package/lib/validateThemeConfig.js +247 -246
  11. package/lib-next/theme/Admonition/index.js +101 -0
  12. package/lib-next/theme/AnnouncementBar/index.js +10 -22
  13. package/lib-next/theme/AnnouncementBar/styles.module.css +26 -35
  14. package/lib-next/theme/BackToTopButton/index.js +131 -0
  15. package/lib-next/theme/BackToTopButton/styles.module.css +44 -0
  16. package/lib-next/theme/BlogArchivePage/index.js +80 -0
  17. package/lib-next/theme/BlogLayout/index.js +37 -0
  18. package/lib-next/theme/BlogListPage/index.js +18 -29
  19. package/lib-next/theme/BlogListPaginator/index.js +13 -16
  20. package/lib-next/theme/BlogPostAuthor/index.js +40 -0
  21. package/{lib/theme/IconEdit → lib-next/theme/BlogPostAuthor}/styles.module.css +4 -3
  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 +110 -95
  25. package/lib-next/theme/BlogPostItem/styles.module.css +5 -1
  26. package/lib-next/theme/BlogPostPage/index.js +75 -43
  27. package/lib-next/theme/BlogPostPaginator/index.js +13 -20
  28. package/lib-next/theme/BlogSidebar/index.js +23 -16
  29. package/lib-next/theme/BlogSidebar/styles.module.css +8 -8
  30. package/lib-next/theme/BlogTagsListPage/index.js +16 -66
  31. package/lib-next/theme/BlogTagsPostsPage/index.js +47 -59
  32. package/lib-next/theme/CodeBlock/index.js +73 -162
  33. package/lib-next/theme/CodeBlock/styles.module.css +18 -13
  34. package/lib-next/theme/Details/index.js +21 -0
  35. package/lib-next/theme/Details/styles.module.css +13 -0
  36. package/lib-next/theme/DocBreadcrumbs/index.js +76 -0
  37. package/lib-next/theme/DocBreadcrumbs/styles.module.css +26 -0
  38. package/lib-next/theme/DocCard/index.js +91 -0
  39. package/lib-next/theme/DocCard/styles.module.css +43 -0
  40. package/lib-next/theme/DocCardList/index.js +19 -0
  41. package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +54 -0
  42. package/lib-next/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  43. package/lib-next/theme/DocItem/index.js +64 -69
  44. package/lib-next/theme/DocItem/styles.module.css +7 -13
  45. package/lib-next/theme/DocItemFooter/index.js +79 -0
  46. package/{lib/theme/Layout/styles.css → lib-next/theme/DocItemFooter/styles.module.css} +8 -11
  47. package/lib-next/theme/DocPage/index.js +59 -33
  48. package/lib-next/theme/DocPage/styles.module.css +14 -26
  49. package/lib-next/theme/DocPaginator/index.js +16 -25
  50. package/lib-next/theme/DocSidebar/index.js +72 -285
  51. package/lib-next/theme/DocSidebar/styles.module.css +5 -36
  52. package/lib-next/theme/DocSidebarItem/index.js +264 -0
  53. package/lib-next/theme/DocSidebarItem/styles.module.css +13 -0
  54. package/lib-next/theme/DocSidebarItems/index.js +28 -0
  55. package/lib-next/theme/DocTagDocListPage/index.js +89 -0
  56. package/lib-next/theme/DocTagsListPage/index.js +35 -0
  57. package/lib-next/theme/DocVersionBadge/index.js +34 -0
  58. package/lib-next/theme/{DocVersionSuggestions → DocVersionBanner}/index.js +54 -36
  59. package/lib-next/theme/EditThisPage/index.js +6 -1
  60. package/lib-next/theme/ErrorPageContent.js +35 -0
  61. package/lib-next/theme/Footer/index.js +105 -41
  62. package/lib-next/theme/Footer/styles.module.css +2 -1
  63. package/lib-next/theme/Heading/index.js +40 -33
  64. package/lib-next/theme/Heading/styles.module.css +27 -2
  65. package/lib-next/theme/IconArrow/index.js +3 -6
  66. package/lib-next/theme/IconClose/index.js +23 -0
  67. package/lib-next/theme/IconEdit/index.js +5 -10
  68. package/lib-next/theme/IconExternalLink/index.js +23 -0
  69. package/{lib/theme/BlogPostItem → lib-next/theme/IconExternalLink}/styles.module.css +4 -6
  70. package/lib-next/theme/IconLanguage/index.js +3 -6
  71. package/lib-next/theme/IconMenu/index.js +8 -9
  72. package/lib-next/theme/LastUpdated/index.js +35 -39
  73. package/lib-next/theme/Layout/index.js +5 -7
  74. package/lib-next/theme/Layout/styles.css +6 -0
  75. package/lib-next/theme/LayoutHead/index.js +27 -32
  76. package/lib-next/theme/LayoutProviders/index.js +21 -10
  77. package/lib-next/theme/Logo/index.js +21 -16
  78. package/lib-next/theme/MDXComponents/index.js +45 -30
  79. package/lib-next/theme/{hooks → MDXComponents}/styles.css +7 -2
  80. package/lib-next/theme/MDXPage/index.js +22 -28
  81. package/{lib/theme/LastUpdated → lib-next/theme/MDXPage}/styles.module.css +2 -2
  82. package/lib-next/theme/Navbar/index.js +199 -64
  83. package/lib-next/theme/Navbar/styles.module.css +11 -4
  84. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +36 -185
  85. package/lib-next/theme/NavbarItem/DocNavbarItem.js +31 -14
  86. package/lib-next/theme/NavbarItem/DocSidebarNavbarItem.js +73 -0
  87. package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +38 -24
  88. package/lib-next/theme/NavbarItem/DocsVersionNavbarItem.js +4 -1
  89. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +156 -0
  90. package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +12 -13
  91. package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  92. package/lib-next/theme/NavbarItem/NavbarNavLink.js +70 -0
  93. package/lib-next/theme/NavbarItem/index.js +27 -15
  94. package/lib-next/theme/{UserPreferencesContext.js → NavbarItem/utils.js} +3 -3
  95. package/lib-next/theme/NotFound.js +7 -6
  96. package/lib-next/theme/PaginatorNavLink/index.js +17 -0
  97. package/lib-next/theme/SearchBar.js +1 -1
  98. package/lib-next/theme/SearchMetadata/index.js +25 -0
  99. package/lib-next/theme/Seo/index.js +11 -7
  100. package/lib-next/theme/SkipToContent/index.js +9 -8
  101. package/lib-next/theme/SkipToContent/styles.module.css +8 -3
  102. package/lib-next/theme/TOC/index.js +12 -39
  103. package/lib-next/theme/TOC/styles.module.css +2 -2
  104. package/lib-next/theme/TOCCollapsible/index.js +54 -0
  105. package/lib-next/theme/TOCCollapsible/styles.module.css +50 -0
  106. package/lib-next/theme/TOCInline/index.js +10 -31
  107. package/lib-next/theme/TOCItems/index.js +85 -0
  108. package/lib-next/theme/TabItem/index.js +1 -4
  109. package/lib-next/theme/Tabs/__tests__/index.test.js +146 -0
  110. package/lib-next/theme/Tabs/index.js +108 -50
  111. package/lib-next/theme/Tabs/styles.module.css +0 -13
  112. package/lib-next/theme/Tag/index.js +24 -0
  113. package/lib-next/theme/Tag/styles.module.css +70 -0
  114. package/lib-next/theme/TagsListByLetter/index.js +40 -0
  115. package/lib-next/theme/TagsListByLetter/styles.module.css +11 -0
  116. package/lib-next/theme/TagsListInline/index.js +31 -0
  117. package/lib-next/theme/TagsListInline/styles.module.css +15 -0
  118. package/lib-next/theme/ThemedImage/index.js +9 -13
  119. package/lib-next/theme/ThemedImage/styles.module.css +9 -2
  120. package/lib-next/theme/Toggle/index.js +65 -60
  121. package/lib-next/theme/Toggle/styles.module.css +30 -38
  122. package/lib-next/theme/prism-include-languages.js +17 -15
  123. package/package.json +31 -30
  124. package/src/admonitions.css +35 -0
  125. package/src/deps.d.ts +13 -0
  126. package/src/getSwizzleConfig.ts +101 -0
  127. package/src/index.ts +68 -66
  128. package/{lib-next/prism-include-languages.js → src/prism-include-languages.ts} +0 -0
  129. package/src/theme/Admonition/index.tsx +106 -0
  130. package/src/theme/AnnouncementBar/index.tsx +11 -20
  131. package/src/theme/AnnouncementBar/styles.module.css +26 -35
  132. package/src/theme/BackToTopButton/index.tsx +143 -0
  133. package/src/theme/BackToTopButton/styles.module.css +44 -0
  134. package/src/theme/BlogArchivePage/index.tsx +91 -0
  135. package/src/theme/BlogLayout/index.tsx +42 -0
  136. package/src/theme/BlogListPage/index.tsx +19 -28
  137. package/src/theme/BlogListPaginator/index.tsx +13 -15
  138. package/src/theme/BlogPostAuthor/index.tsx +44 -0
  139. package/src/theme/{LastUpdated → BlogPostAuthor}/styles.module.css +4 -2
  140. package/src/theme/BlogPostAuthors/index.tsx +49 -0
  141. package/src/theme/BlogPostAuthors/styles.module.css +21 -0
  142. package/src/theme/BlogPostItem/index.tsx +101 -91
  143. package/src/theme/BlogPostItem/styles.module.css +5 -1
  144. package/src/theme/BlogPostPage/index.tsx +77 -42
  145. package/src/theme/BlogPostPaginator/index.tsx +13 -19
  146. package/src/theme/BlogSidebar/index.tsx +23 -16
  147. package/src/theme/BlogSidebar/styles.module.css +8 -8
  148. package/src/theme/BlogTagsListPage/index.tsx +16 -66
  149. package/src/theme/BlogTagsPostsPage/index.tsx +43 -61
  150. package/src/theme/CodeBlock/index.tsx +77 -164
  151. package/src/theme/CodeBlock/styles.module.css +18 -13
  152. package/src/theme/Details/index.tsx +25 -0
  153. package/src/theme/Details/styles.module.css +13 -0
  154. package/src/theme/DocBreadcrumbs/index.tsx +91 -0
  155. package/src/theme/DocBreadcrumbs/styles.module.css +26 -0
  156. package/src/theme/DocCard/index.tsx +109 -0
  157. package/src/theme/DocCard/styles.module.css +43 -0
  158. package/src/theme/DocCardList/index.tsx +27 -0
  159. package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +59 -0
  160. package/src/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  161. package/src/theme/DocItem/index.tsx +66 -68
  162. package/src/theme/DocItem/styles.module.css +7 -13
  163. package/src/theme/DocItemFooter/index.tsx +91 -0
  164. package/src/theme/DocItemFooter/styles.module.css +18 -0
  165. package/src/theme/DocPage/index.tsx +58 -34
  166. package/src/theme/DocPage/styles.module.css +14 -26
  167. package/src/theme/DocPaginator/index.tsx +16 -24
  168. package/src/theme/DocSidebar/index.tsx +83 -297
  169. package/src/theme/DocSidebar/styles.module.css +5 -36
  170. package/src/theme/DocSidebarItem/index.tsx +283 -0
  171. package/src/theme/DocSidebarItem/styles.module.css +13 -0
  172. package/src/theme/DocSidebarItems/index.tsx +32 -0
  173. package/src/theme/DocTagDocListPage/index.tsx +89 -0
  174. package/src/theme/DocTagsListPage/index.tsx +39 -0
  175. package/src/theme/DocVersionBadge/index.tsx +35 -0
  176. package/src/theme/{DocVersionSuggestions → DocVersionBanner}/index.tsx +77 -47
  177. package/src/theme/EditThisPage/index.tsx +6 -1
  178. package/src/theme/ErrorPageContent.tsx +41 -0
  179. package/src/theme/Footer/index.tsx +119 -45
  180. package/src/theme/Footer/styles.module.css +2 -1
  181. package/src/theme/Heading/index.tsx +41 -35
  182. package/src/theme/Heading/styles.module.css +27 -2
  183. package/src/theme/IconArrow/index.tsx +3 -5
  184. package/src/theme/IconClose/index.tsx +26 -0
  185. package/src/theme/IconEdit/index.tsx +8 -9
  186. package/src/theme/IconExternalLink/index.tsx +30 -0
  187. package/{lib/theme/Heading → src/theme/IconExternalLink}/styles.module.css +4 -2
  188. package/src/theme/IconLanguage/index.tsx +4 -6
  189. package/src/theme/IconMenu/index.tsx +4 -9
  190. package/src/theme/LastUpdated/index.tsx +35 -39
  191. package/src/theme/Layout/index.tsx +5 -6
  192. package/src/theme/Layout/styles.css +6 -0
  193. package/src/theme/LayoutHead/index.tsx +26 -25
  194. package/src/theme/LayoutProviders/index.tsx +21 -10
  195. package/src/theme/Logo/index.tsx +21 -15
  196. package/src/theme/MDXComponents/index.tsx +56 -32
  197. package/{lib/theme/hooks → src/theme/MDXComponents}/styles.css +7 -2
  198. package/src/theme/MDXPage/index.tsx +23 -28
  199. package/{lib-next/theme/LastUpdated → src/theme/MDXPage}/styles.module.css +2 -2
  200. package/src/theme/Navbar/index.tsx +208 -68
  201. package/src/theme/Navbar/styles.module.css +11 -4
  202. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +37 -194
  203. package/src/theme/NavbarItem/DocNavbarItem.tsx +33 -15
  204. package/src/theme/NavbarItem/DocSidebarNavbarItem.tsx +84 -0
  205. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +44 -28
  206. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +7 -3
  207. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +181 -0
  208. package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +16 -10
  209. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  210. package/src/theme/NavbarItem/NavbarNavLink.tsx +68 -0
  211. package/src/theme/NavbarItem/index.tsx +42 -19
  212. package/src/theme/NavbarItem/utils.ts +10 -0
  213. package/src/theme/NotFound.tsx +7 -5
  214. package/src/theme/PaginatorNavLink/index.tsx +20 -0
  215. package/src/theme/SearchBar.tsx +2 -1
  216. package/src/theme/SearchMetadata/index.tsx +34 -0
  217. package/src/theme/Seo/index.tsx +7 -4
  218. package/src/theme/SkipToContent/index.tsx +9 -8
  219. package/src/theme/SkipToContent/styles.module.css +8 -3
  220. package/src/theme/TOC/index.tsx +13 -44
  221. package/src/theme/TOC/styles.module.css +2 -2
  222. package/src/theme/TOCCollapsible/index.tsx +58 -0
  223. package/src/theme/TOCCollapsible/styles.module.css +50 -0
  224. package/src/theme/TOCInline/index.tsx +14 -35
  225. package/src/theme/TOCItems/index.tsx +100 -0
  226. package/src/theme/TabItem/index.tsx +5 -3
  227. package/src/theme/Tabs/index.tsx +115 -56
  228. package/src/theme/Tabs/styles.module.css +0 -13
  229. package/src/theme/Tag/index.tsx +29 -0
  230. package/src/theme/Tag/styles.module.css +70 -0
  231. package/src/theme/TagsListByLetter/index.tsx +43 -0
  232. package/src/theme/TagsListByLetter/styles.module.css +11 -0
  233. package/src/theme/TagsListInline/index.tsx +35 -0
  234. package/src/theme/TagsListInline/styles.module.css +15 -0
  235. package/src/theme/ThemedImage/index.tsx +10 -12
  236. package/src/theme/ThemedImage/styles.module.css +9 -2
  237. package/src/theme/Toggle/index.tsx +66 -62
  238. package/src/theme/Toggle/styles.module.css +30 -38
  239. package/src/theme/prism-include-languages.ts +20 -15
  240. package/src/theme-classic.d.ts +755 -0
  241. package/src/translations.ts +74 -54
  242. package/src/types.d.ts +0 -589
  243. package/{lib-next/validateThemeConfig.js → src/validateThemeConfig.ts} +184 -104
  244. package/babel.config.js +0 -35
  245. package/codeTranslations/README.md +0 -20
  246. package/codeTranslations/ar.json +0 -55
  247. package/codeTranslations/base.json +0 -108
  248. package/codeTranslations/da.json +0 -55
  249. package/codeTranslations/de.json +0 -55
  250. package/codeTranslations/es.json +0 -55
  251. package/codeTranslations/fa.json +0 -55
  252. package/codeTranslations/fil.json +0 -55
  253. package/codeTranslations/fr.json +0 -55
  254. package/codeTranslations/he.json +0 -55
  255. package/codeTranslations/hi.json +0 -55
  256. package/codeTranslations/ja.json +0 -55
  257. package/codeTranslations/ko.json +0 -55
  258. package/codeTranslations/pl.json +0 -55
  259. package/codeTranslations/pt-BR.json +0 -55
  260. package/codeTranslations/pt-PT.json +0 -55
  261. package/codeTranslations/ru.json +0 -55
  262. package/codeTranslations/tr.json +0 -55
  263. package/codeTranslations/vi.json +0 -55
  264. package/codeTranslations/zh-Hans.json +0 -55
  265. package/codeTranslations/zh-Hant.json +0 -55
  266. package/lib/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  267. package/lib/__tests__/translations.test.js +0 -112
  268. package/lib/__tests__/validateThemeConfig.test.js +0 -333
  269. package/lib/theme/AnnouncementBar/index.js +0 -74
  270. package/lib/theme/AnnouncementBar/styles.module.css +0 -72
  271. package/lib/theme/BlogListPage/index.js +0 -71
  272. package/lib/theme/BlogListPaginator/index.js +0 -63
  273. package/lib/theme/BlogPostItem/index.js +0 -152
  274. package/lib/theme/BlogPostPage/index.js +0 -75
  275. package/lib/theme/BlogPostPaginator/index.js +0 -64
  276. package/lib/theme/BlogSidebar/index.js +0 -43
  277. package/lib/theme/BlogSidebar/styles.module.css +0 -46
  278. package/lib/theme/BlogTagsListPage/index.js +0 -81
  279. package/lib/theme/BlogTagsPostsPage/index.js +0 -104
  280. package/lib/theme/CodeBlock/index.js +0 -253
  281. package/lib/theme/CodeBlock/styles.module.css +0 -71
  282. package/lib/theme/DocItem/index.js +0 -120
  283. package/lib/theme/DocItem/styles.module.css +0 -28
  284. package/lib/theme/DocPage/index.js +0 -141
  285. package/lib/theme/DocPage/styles.module.css +0 -98
  286. package/lib/theme/DocPaginator/index.js +0 -63
  287. package/lib/theme/DocSidebar/index.js +0 -307
  288. package/lib/theme/DocSidebar/styles.module.css +0 -138
  289. package/lib/theme/DocVersionSuggestions/index.js +0 -111
  290. package/lib/theme/EditThisPage/index.js +0 -31
  291. package/lib/theme/Footer/index.js +0 -108
  292. package/lib/theme/Footer/styles.module.css +0 -15
  293. package/lib/theme/Heading/index.js +0 -60
  294. package/lib/theme/Heading/styles.css +0 -23
  295. package/lib/theme/IconArrow/index.js +0 -28
  296. package/lib/theme/IconEdit/index.js +0 -34
  297. package/lib/theme/IconLanguage/index.js +0 -29
  298. package/lib/theme/IconMenu/index.js +0 -31
  299. package/lib/theme/LastUpdated/index.js +0 -65
  300. package/lib/theme/Layout/index.js +0 -64
  301. package/lib/theme/LayoutHead/index.js +0 -144
  302. package/lib/theme/LayoutProviders/index.js +0 -34
  303. package/lib/theme/Logo/index.js +0 -59
  304. package/lib/theme/MDXComponents/index.js +0 -65
  305. package/lib/theme/MDXPage/index.js +0 -68
  306. package/lib/theme/Navbar/index.js +0 -147
  307. package/lib/theme/Navbar/styles.module.css +0 -20
  308. package/lib/theme/NavbarItem/DefaultNavbarItem.js +0 -195
  309. package/lib/theme/NavbarItem/DocNavbarItem.js +0 -55
  310. package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +0 -75
  311. package/lib/theme/NavbarItem/DocsVersionNavbarItem.js +0 -43
  312. package/lib/theme/NavbarItem/LocaleDropdownNavbarItem.js +0 -72
  313. package/lib/theme/NavbarItem/SearchNavbarItem.js +0 -28
  314. package/lib/theme/NavbarItem/index.js +0 -54
  315. package/lib/theme/NotFound.js +0 -50
  316. package/lib/theme/SearchBar.js +0 -15
  317. package/lib/theme/SearchMetadatas/index.js +0 -33
  318. package/lib/theme/Seo/index.js +0 -49
  319. package/lib/theme/SkipToContent/index.js +0 -61
  320. package/lib/theme/SkipToContent/styles.module.css +0 -16
  321. package/lib/theme/TOC/index.js +0 -59
  322. package/lib/theme/TOC/styles.module.css +0 -23
  323. package/lib/theme/TOCInline/index.js +0 -53
  324. package/lib/theme/TOCInline/styles.module.css +0 -12
  325. package/lib/theme/TabItem/index.js +0 -32
  326. package/lib/theme/Tabs/index.js +0 -150
  327. package/lib/theme/Tabs/styles.module.css +0 -23
  328. package/lib/theme/ThemeContext.js +0 -21
  329. package/lib/theme/ThemeProvider/index.js +0 -38
  330. package/lib/theme/ThemedImage/index.js +0 -48
  331. package/lib/theme/ThemedImage/styles.module.css +0 -11
  332. package/lib/theme/Toggle/index.js +0 -106
  333. package/lib/theme/Toggle/styles.module.css +0 -114
  334. package/lib/theme/UserPreferencesContext.js +0 -18
  335. package/lib/theme/UserPreferencesProvider/index.js +0 -44
  336. package/lib/theme/hooks/useAnnouncementBar.js +0 -63
  337. package/lib/theme/hooks/useContextualSearchFilters.js +0 -47
  338. package/lib/theme/hooks/useDocs.js +0 -18
  339. package/lib/theme/hooks/useHideableNavbar.js +0 -92
  340. package/lib/theme/hooks/useKeyboardNavigation.js +0 -45
  341. package/lib/theme/hooks/useLocationHash.js +0 -28
  342. package/lib/theme/hooks/useLockBodyScroll.js +0 -26
  343. package/lib/theme/hooks/usePrismTheme.js +0 -36
  344. package/lib/theme/hooks/useScrollPosition.js +0 -49
  345. package/lib/theme/hooks/useTOCHighlight.js +0 -87
  346. package/lib/theme/hooks/useTabGroupChoice.js +0 -53
  347. package/lib/theme/hooks/useTheme.js +0 -99
  348. package/lib/theme/hooks/useThemeContext.js +0 -31
  349. package/lib/theme/hooks/useUserPreferencesContext.js +0 -31
  350. package/lib/theme/hooks/useWindowSize.js +0 -55
  351. package/lib/theme/prism-include-languages.js +0 -39
  352. package/lib-next/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  353. package/lib-next/__tests__/translations.test.js +0 -128
  354. package/lib-next/__tests__/validateThemeConfig.test.js +0 -333
  355. package/lib-next/index.js +0 -198
  356. package/lib-next/theme/Heading/styles.css +0 -23
  357. package/lib-next/theme/SearchMetadatas/index.js +0 -20
  358. package/lib-next/theme/ThemeContext.js +0 -9
  359. package/lib-next/theme/ThemeProvider/index.js +0 -25
  360. package/lib-next/theme/UserPreferencesProvider/index.js +0 -28
  361. package/lib-next/theme/hooks/useAnnouncementBar.js +0 -49
  362. package/lib-next/theme/hooks/useContextualSearchFilters.js +0 -41
  363. package/lib-next/theme/hooks/useDocs.js +0 -10
  364. package/lib-next/theme/hooks/useHideableNavbar.js +0 -79
  365. package/lib-next/theme/hooks/useKeyboardNavigation.js +0 -35
  366. package/lib-next/theme/hooks/useLocationHash.js +0 -20
  367. package/lib-next/theme/hooks/useLockBodyScroll.js +0 -18
  368. package/lib-next/theme/hooks/usePrismTheme.js +0 -20
  369. package/lib-next/theme/hooks/useScrollPosition.js +0 -38
  370. package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
  371. package/lib-next/theme/hooks/useTabGroupChoice.js +0 -41
  372. package/lib-next/theme/hooks/useTheme.js +0 -82
  373. package/lib-next/theme/hooks/useThemeContext.js +0 -22
  374. package/lib-next/theme/hooks/useUserPreferencesContext.js +0 -22
  375. package/lib-next/theme/hooks/useWindowSize.js +0 -45
  376. package/lib-next/translations.js +0 -145
  377. package/lib-next/types.d.ts +0 -600
  378. package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  379. package/src/__tests__/translations.test.ts +0 -116
  380. package/src/__tests__/validateThemeConfig.test.js +0 -333
  381. package/src/prism-include-languages.js +0 -11
  382. package/src/theme/Heading/styles.css +0 -23
  383. package/src/theme/SearchMetadatas/index.tsx +0 -28
  384. package/src/theme/ThemeContext.ts +0 -15
  385. package/src/theme/ThemeProvider/index.tsx +0 -24
  386. package/src/theme/UserPreferencesContext.ts +0 -12
  387. package/src/theme/UserPreferencesProvider/index.tsx +0 -32
  388. package/src/theme/hooks/styles.css +0 -10
  389. package/src/theme/hooks/useAnnouncementBar.ts +0 -58
  390. package/src/theme/hooks/useContextualSearchFilters.ts +0 -52
  391. package/src/theme/hooks/useDocs.ts +0 -11
  392. package/src/theme/hooks/useHideableNavbar.ts +0 -85
  393. package/src/theme/hooks/useKeyboardNavigation.ts +0 -39
  394. package/src/theme/hooks/useLocationHash.ts +0 -25
  395. package/src/theme/hooks/useLockBodyScroll.ts +0 -20
  396. package/src/theme/hooks/usePrismTheme.ts +0 -22
  397. package/src/theme/hooks/useScrollPosition.ts +0 -45
  398. package/src/theme/hooks/useTOCHighlight.ts +0 -98
  399. package/src/theme/hooks/useTabGroupChoice.ts +0 -46
  400. package/src/theme/hooks/useTheme.ts +0 -92
  401. package/src/theme/hooks/useThemeContext.ts +0 -23
  402. package/src/theme/hooks/useUserPreferencesContext.ts +0 -25
  403. package/src/theme/hooks/useWindowSize.ts +0 -51
  404. package/src/validateThemeConfig.js +0 -317
  405. package/tsconfig.json +0 -12
  406. package/update-code-translations.js +0 -239
  407. package/update-code-translations.test.js +0 -33
@@ -6,19 +6,32 @@
6
6
  */
7
7
  import React, {useCallback, useState, useEffect} from 'react';
8
8
  import clsx from 'clsx';
9
+ import Translate from '@docusaurus/Translate';
9
10
  import SearchBar from '@theme/SearchBar';
10
11
  import Toggle from '@theme/Toggle';
11
- import useThemeContext from '@theme/hooks/useThemeContext';
12
- import {useThemeConfig} from '@docusaurus/theme-common';
13
- import useHideableNavbar from '@theme/hooks/useHideableNavbar';
14
- import useLockBodyScroll from '@theme/hooks/useLockBodyScroll';
15
- import useWindowSize, {windowSizes} from '@theme/hooks/useWindowSize';
12
+ import {
13
+ useThemeConfig,
14
+ useMobileSecondaryMenuRenderer,
15
+ usePrevious,
16
+ useHistoryPopHandler,
17
+ useHideableNavbar,
18
+ useLockBodyScroll,
19
+ useWindowSize,
20
+ useColorMode,
21
+ } from '@docusaurus/theme-common';
22
+ import {useActivePlugin} from '@docusaurus/plugin-content-docs/client';
16
23
  import NavbarItem from '@theme/NavbarItem';
17
24
  import Logo from '@theme/Logo';
18
25
  import IconMenu from '@theme/IconMenu';
26
+ import IconClose from '@theme/IconClose';
19
27
  import styles from './styles.module.css'; // retrocompatible with v1
20
28
 
21
- const DefaultNavItemPosition = 'right'; // If split links by left/right
29
+ const DefaultNavItemPosition = 'right';
30
+
31
+ function useNavbarItems() {
32
+ // TODO temporary casting until ThemeConfig type is improved
33
+ return useThemeConfig().navbar.items;
34
+ } // If split links by left/right
22
35
  // if position is unspecified, fallback to right (as v1)
23
36
 
24
37
  function splitNavItemsByPosition(items) {
@@ -34,31 +47,174 @@ function splitNavItemsByPosition(items) {
34
47
  };
35
48
  }
36
49
 
37
- function Navbar() {
50
+ function useMobileSidebar() {
51
+ const windowSize = useWindowSize(); // Mobile sidebar not visible on hydration: can avoid SSR rendering
52
+
53
+ const shouldRender = windowSize === 'mobile'; // || windowSize === 'ssr';
54
+
55
+ const [shown, setShown] = useState(false); // Close mobile sidebar on navigation pop
56
+ // Most likely firing when using the Android back button (but not only)
57
+
58
+ useHistoryPopHandler(() => {
59
+ if (shown) {
60
+ setShown(false); // Should we prevent the navigation here?
61
+ // See https://github.com/facebook/docusaurus/pull/5462#issuecomment-911699846
62
+
63
+ return false; // prevent pop navigation
64
+ }
65
+
66
+ return undefined;
67
+ });
68
+ const toggle = useCallback(() => {
69
+ setShown((s) => !s);
70
+ }, []);
71
+ useEffect(() => {
72
+ if (windowSize === 'desktop') {
73
+ setShown(false);
74
+ }
75
+ }, [windowSize]);
76
+ return {
77
+ shouldRender,
78
+ toggle,
79
+ shown,
80
+ };
81
+ }
82
+
83
+ function useColorModeToggle() {
38
84
  const {
39
- navbar: {items, hideOnScroll, style},
40
- colorMode: {disableSwitch: disableColorModeSwitch},
85
+ colorMode: {disableSwitch},
41
86
  } = useThemeConfig();
42
- const [sidebarShown, setSidebarShown] = useState(false);
43
- const {isDarkTheme, setLightTheme, setDarkTheme} = useThemeContext();
44
- const {navbarRef, isNavbarVisible} = useHideableNavbar(hideOnScroll);
45
- useLockBodyScroll(sidebarShown);
46
- const showSidebar = useCallback(() => {
47
- setSidebarShown(true);
48
- }, [setSidebarShown]);
49
- const hideSidebar = useCallback(() => {
50
- setSidebarShown(false);
51
- }, [setSidebarShown]);
52
- const onToggleChange = useCallback(
87
+ const {isDarkTheme, setLightTheme, setDarkTheme} = useColorMode();
88
+ const toggle = useCallback(
53
89
  (e) => (e.target.checked ? setDarkTheme() : setLightTheme()),
54
90
  [setLightTheme, setDarkTheme],
55
91
  );
56
- const windowSize = useWindowSize();
92
+ return {
93
+ isDarkTheme,
94
+ toggle,
95
+ disabled: disableSwitch,
96
+ };
97
+ }
98
+
99
+ function useSecondaryMenu({sidebarShown, toggleSidebar}) {
100
+ const content = useMobileSecondaryMenuRenderer()?.({
101
+ toggleSidebar,
102
+ });
103
+ const previousContent = usePrevious(content);
104
+ const [shown, setShown] = useState(
105
+ () =>
106
+ // /!\ content is set with useEffect,
107
+ // so it's not available on mount anyway
108
+ // "return !!content" => always returns false
109
+ false,
110
+ ); // When content is become available for the first time (set in useEffect)
111
+ // we set this content to be shown!
112
+
57
113
  useEffect(() => {
58
- if (windowSize === windowSizes.desktop) {
59
- setSidebarShown(false);
114
+ const contentBecameAvailable = content && !previousContent;
115
+
116
+ if (contentBecameAvailable) {
117
+ setShown(true);
60
118
  }
61
- }, [windowSize]);
119
+ }, [content, previousContent]);
120
+ const hasContent = !!content; // On sidebar close, secondary menu is set to be shown on next re-opening
121
+ // (if any secondary menu content available)
122
+
123
+ useEffect(() => {
124
+ if (!hasContent) {
125
+ setShown(false);
126
+ return;
127
+ }
128
+
129
+ if (!sidebarShown) {
130
+ setShown(true);
131
+ }
132
+ }, [sidebarShown, hasContent]);
133
+ const hide = useCallback(() => {
134
+ setShown(false);
135
+ }, []);
136
+ return {
137
+ shown,
138
+ hide,
139
+ content,
140
+ };
141
+ }
142
+
143
+ function NavbarMobileSidebar({sidebarShown, toggleSidebar}) {
144
+ useLockBodyScroll(sidebarShown);
145
+ const items = useNavbarItems();
146
+ const colorModeToggle = useColorModeToggle();
147
+ const secondaryMenu = useSecondaryMenu({
148
+ sidebarShown,
149
+ toggleSidebar,
150
+ });
151
+ return (
152
+ <div className="navbar-sidebar">
153
+ <div className="navbar-sidebar__brand">
154
+ <Logo
155
+ className="navbar__brand"
156
+ imageClassName="navbar__logo"
157
+ titleClassName="navbar__title"
158
+ />
159
+ {!colorModeToggle.disabled && (
160
+ <Toggle
161
+ className={styles.navbarSidebarToggle}
162
+ checked={colorModeToggle.isDarkTheme}
163
+ onChange={colorModeToggle.toggle}
164
+ />
165
+ )}
166
+ <button
167
+ type="button"
168
+ className="clean-btn navbar-sidebar__close"
169
+ onClick={toggleSidebar}>
170
+ <IconClose
171
+ color="var(--ifm-color-emphasis-600)"
172
+ className={styles.navbarSidebarCloseSvg}
173
+ />
174
+ </button>
175
+ </div>
176
+
177
+ <div
178
+ className={clsx('navbar-sidebar__items', {
179
+ 'navbar-sidebar__items--show-secondary': secondaryMenu.shown,
180
+ })}>
181
+ <div className="navbar-sidebar__item menu">
182
+ <ul className="menu__list">
183
+ {items.map((item, i) => (
184
+ <NavbarItem mobile {...item} onClick={toggleSidebar} key={i} />
185
+ ))}
186
+ </ul>
187
+ </div>
188
+
189
+ <div className="navbar-sidebar__item menu">
190
+ {items.length > 0 && (
191
+ <button
192
+ type="button"
193
+ className="clean-btn navbar-sidebar__back"
194
+ onClick={secondaryMenu.hide}>
195
+ <Translate
196
+ id="theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel"
197
+ description="The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)">
198
+ ← Back to main menu
199
+ </Translate>
200
+ </button>
201
+ )}
202
+ {secondaryMenu.content}
203
+ </div>
204
+ </div>
205
+ </div>
206
+ );
207
+ }
208
+
209
+ export default function Navbar() {
210
+ const {
211
+ navbar: {hideOnScroll, style},
212
+ } = useThemeConfig();
213
+ const mobileSidebar = useMobileSidebar();
214
+ const colorModeToggle = useColorModeToggle();
215
+ const activeDocPlugin = useActivePlugin();
216
+ const {navbarRef, isNavbarVisible} = useHideableNavbar(hideOnScroll);
217
+ const items = useNavbarItems();
62
218
  const hasSearchNavbarItem = items.some((item) => item.type === 'search');
63
219
  const {leftItems, rightItems} = splitNavItemsByPosition(items);
64
220
  return (
@@ -67,27 +223,27 @@ function Navbar() {
67
223
  className={clsx('navbar', 'navbar--fixed-top', {
68
224
  'navbar--dark': style === 'dark',
69
225
  'navbar--primary': style === 'primary',
70
- 'navbar-sidebar--show': sidebarShown,
226
+ 'navbar-sidebar--show': mobileSidebar.shown,
71
227
  [styles.navbarHideable]: hideOnScroll,
72
228
  [styles.navbarHidden]: hideOnScroll && !isNavbarVisible,
73
229
  })}>
74
230
  <div className="navbar__inner">
75
231
  <div className="navbar__items">
76
- {items != null && items.length !== 0 && (
232
+ {(items?.length > 0 || activeDocPlugin) && (
77
233
  <button
78
234
  aria-label="Navigation bar toggle"
79
- className="navbar__toggle"
235
+ className="navbar__toggle clean-btn"
80
236
  type="button"
81
237
  tabIndex={0}
82
- onClick={showSidebar}
83
- onKeyDown={showSidebar}>
238
+ onClick={mobileSidebar.toggle}
239
+ onKeyDown={mobileSidebar.toggle}>
84
240
  <IconMenu />
85
241
  </button>
86
242
  )}
87
243
  <Logo
88
244
  className="navbar__brand"
89
245
  imageClassName="navbar__logo"
90
- titleClassName={clsx('navbar__title')}
246
+ titleClassName="navbar__title"
91
247
  />
92
248
  {leftItems.map((item, i) => (
93
249
  <NavbarItem {...item} key={i} />
@@ -97,50 +253,29 @@ function Navbar() {
97
253
  {rightItems.map((item, i) => (
98
254
  <NavbarItem {...item} key={i} />
99
255
  ))}
100
- {!disableColorModeSwitch && (
256
+ {!colorModeToggle.disabled && (
101
257
  <Toggle
102
- className={styles.displayOnlyInLargeViewport}
103
- checked={isDarkTheme}
104
- onChange={onToggleChange}
258
+ className={styles.toggle}
259
+ checked={colorModeToggle.isDarkTheme}
260
+ onChange={colorModeToggle.toggle}
105
261
  />
106
262
  )}
107
263
  {!hasSearchNavbarItem && <SearchBar />}
108
264
  </div>
109
265
  </div>
266
+
110
267
  <div
111
268
  role="presentation"
112
269
  className="navbar-sidebar__backdrop"
113
- onClick={hideSidebar}
270
+ onClick={mobileSidebar.toggle}
114
271
  />
115
- <div className="navbar-sidebar">
116
- <div className="navbar-sidebar__brand">
117
- <Logo
118
- className="navbar__brand"
119
- imageClassName="navbar__logo"
120
- titleClassName="navbar__title"
121
- onClick={hideSidebar}
122
- />
123
- {!disableColorModeSwitch && sidebarShown && (
124
- <Toggle checked={isDarkTheme} onChange={onToggleChange} />
125
- )}
126
- </div>
127
- <div className="navbar-sidebar__items">
128
- <div className="menu">
129
- <ul className="menu__list">
130
- {items.map((item, i) => (
131
- <NavbarItem
132
- mobile
133
- {...item} // TODO fix typing
134
- onClick={hideSidebar}
135
- key={i}
136
- />
137
- ))}
138
- </ul>
139
- </div>
140
- </div>
141
- </div>
272
+
273
+ {mobileSidebar.shouldRender && (
274
+ <NavbarMobileSidebar
275
+ sidebarShown={mobileSidebar.shown}
276
+ toggleSidebar={mobileSidebar.toggle}
277
+ />
278
+ )}
142
279
  </nav>
143
280
  );
144
281
  }
145
-
146
- export default Navbar;
@@ -5,9 +5,12 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- @media screen and (max-width: 997px) {
9
- .displayOnlyInLargeViewport {
10
- display: none !important;
8
+ /*
9
+ Hide toggle in small viewports
10
+ */
11
+ @media (max-width: 996px) {
12
+ .toggle {
13
+ display: none;
11
14
  }
12
15
  }
13
16
 
@@ -16,5 +19,9 @@
16
19
  }
17
20
 
18
21
  .navbarHidden {
19
- transform: translate3d(0, calc(var(--ifm-navbar-height) * -1), 0);
22
+ transform: translate3d(0, calc(-100% - 2px), 0);
23
+ }
24
+
25
+ .navbarSidebarToggle {
26
+ margin-right: 1rem;
20
27
  }
@@ -4,207 +4,58 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import React, {useState, useRef, useEffect} from 'react';
7
+ import React from 'react';
8
8
  import clsx from 'clsx';
9
- import Link from '@docusaurus/Link';
10
- import useBaseUrl from '@docusaurus/useBaseUrl';
11
- import {useLocation} from '@docusaurus/router';
12
- import {isSamePath} from '@docusaurus/theme-common';
9
+ import NavbarNavLink from '@theme/NavbarItem/NavbarNavLink';
10
+ import {getInfimaActiveClassName} from '@theme/NavbarItem/utils';
13
11
 
14
- function NavLink({
15
- activeBasePath,
16
- activeBaseRegex,
17
- to,
18
- href,
19
- label,
20
- activeClassName = 'navbar__link--active',
21
- prependBaseUrlToHref,
12
+ function DefaultNavbarItemDesktop({
13
+ className,
14
+ isDropdownItem = false,
22
15
  ...props
23
16
  }) {
24
- // TODO all this seems hacky
25
- // {to: 'version'} should probably be forbidden, in favor of {to: '/version'}
26
- const toUrl = useBaseUrl(to);
27
- const activeBaseUrl = useBaseUrl(activeBasePath);
28
- const normalizedHref = useBaseUrl(href, {
29
- forcePrependBaseUrl: true,
30
- });
31
- return (
32
- <Link
33
- {...(href
34
- ? {
35
- href: prependBaseUrlToHref ? normalizedHref : href,
36
- }
37
- : {
38
- isNavLink: true,
39
- activeClassName,
40
- to: toUrl,
41
- ...(activeBasePath || activeBaseRegex
42
- ? {
43
- isActive: (_match, location) =>
44
- activeBaseRegex
45
- ? new RegExp(activeBaseRegex).test(location.pathname)
46
- : location.pathname.startsWith(activeBaseUrl),
47
- }
48
- : null),
49
- })}
50
- {...props}>
51
- {label}
52
- </Link>
17
+ const element = (
18
+ <NavbarNavLink
19
+ className={clsx(
20
+ isDropdownItem ? 'dropdown__link' : 'navbar__item navbar__link',
21
+ className,
22
+ )}
23
+ {...props}
24
+ />
53
25
  );
54
- }
55
-
56
- function NavItemDesktop({items, position, className, ...props}) {
57
- const dropdownRef = useRef(null);
58
- const dropdownMenuRef = useRef(null);
59
- const [showDropdown, setShowDropdown] = useState(false);
60
- useEffect(() => {
61
- const handleClickOutside = (event) => {
62
- if (!dropdownRef.current || dropdownRef.current.contains(event.target)) {
63
- return;
64
- }
65
-
66
- setShowDropdown(false);
67
- };
68
-
69
- document.addEventListener('mousedown', handleClickOutside);
70
- document.addEventListener('touchstart', handleClickOutside);
71
- return () => {
72
- document.removeEventListener('mousedown', handleClickOutside);
73
- document.removeEventListener('touchstart', handleClickOutside);
74
- };
75
- }, [dropdownRef]);
76
26
 
77
- const navLinkClassNames = (extraClassName, isDropdownItem = false) =>
78
- clsx(
79
- {
80
- 'navbar__item navbar__link': !isDropdownItem,
81
- dropdown__link: isDropdownItem,
82
- },
83
- extraClassName,
84
- );
85
-
86
- if (!items) {
87
- return <NavLink className={navLinkClassNames(className)} {...props} />;
27
+ if (isDropdownItem) {
28
+ return <li>{element}</li>;
88
29
  }
89
30
 
90
- return (
91
- <div
92
- ref={dropdownRef}
93
- className={clsx('navbar__item', 'dropdown', 'dropdown--hoverable', {
94
- 'dropdown--left': position === 'left',
95
- 'dropdown--right': position === 'right',
96
- 'dropdown--show': showDropdown,
97
- })}>
98
- <NavLink
99
- className={navLinkClassNames(className)}
100
- {...props}
101
- onClick={props.to ? undefined : (e) => e.preventDefault()}
102
- onKeyDown={(e) => {
103
- if (e.key === 'Enter') {
104
- e.preventDefault();
105
- setShowDropdown(!showDropdown);
106
- }
107
- }}>
108
- {props.children ?? props.label}
109
- </NavLink>
110
- <ul ref={dropdownMenuRef} className="dropdown__menu">
111
- {items.map(({className: childItemClassName, ...childItemProps}, i) => (
112
- <li key={i}>
113
- <NavLink
114
- onKeyDown={(e) => {
115
- if (i === items.length - 1 && e.key === 'Tab') {
116
- e.preventDefault();
117
- setShowDropdown(false);
118
- const nextNavbarItem = dropdownRef.current.nextElementSibling;
119
-
120
- if (nextNavbarItem) {
121
- nextNavbarItem.focus();
122
- }
123
- }
124
- }}
125
- activeClassName="dropdown__link--active"
126
- className={navLinkClassNames(childItemClassName, true)}
127
- {...childItemProps}
128
- />
129
- </li>
130
- ))}
131
- </ul>
132
- </div>
133
- );
31
+ return element;
134
32
  }
135
33
 
136
- function NavItemMobile({
137
- items,
34
+ function DefaultNavbarItemMobile({
138
35
  className,
139
- position: _position,
140
- // Need to destructure position from props so that it doesn't get passed on.
36
+ isDropdownItem: _isDropdownItem,
141
37
  ...props
142
38
  }) {
143
- const menuListRef = useRef(null);
144
- const {pathname} = useLocation();
145
- const [collapsed, setCollapsed] = useState(
146
- () => !items?.some((item) => isSamePath(item.to, pathname)) ?? true,
147
- );
148
-
149
- const navLinkClassNames = (extraClassName, isSubList = false) =>
150
- clsx(
151
- 'menu__link',
152
- {
153
- 'menu__link--sublist': isSubList,
154
- },
155
- extraClassName,
156
- );
157
-
158
- if (!items) {
159
- return (
160
- <li className="menu__list-item">
161
- <NavLink className={navLinkClassNames(className)} {...props} />
162
- </li>
163
- );
164
- }
165
-
166
- const menuListHeight = menuListRef.current?.scrollHeight
167
- ? `${menuListRef.current?.scrollHeight}px`
168
- : undefined;
169
39
  return (
170
- <li
171
- className={clsx('menu__list-item', {
172
- 'menu__list-item--collapsed': collapsed,
173
- })}>
174
- <NavLink
175
- role="button"
176
- className={navLinkClassNames(className, true)}
177
- {...props}
178
- onClick={(e) => {
179
- e.preventDefault();
180
- setCollapsed((state) => !state);
181
- }}>
182
- {props.children ?? props.label}
183
- </NavLink>
184
- <ul
185
- className="menu__list"
186
- ref={menuListRef}
187
- style={{
188
- height: !collapsed ? menuListHeight : undefined,
189
- }}>
190
- {items.map(({className: childItemClassName, ...childItemProps}, i) => (
191
- <li className="menu__list-item" key={i}>
192
- <NavLink
193
- activeClassName="menu__link--active"
194
- className={navLinkClassNames(childItemClassName)}
195
- {...childItemProps}
196
- onClick={props.onClick}
197
- />
198
- </li>
199
- ))}
200
- </ul>
40
+ <li className="menu__list-item">
41
+ <NavbarNavLink className={clsx('menu__link', className)} {...props} />
201
42
  </li>
202
43
  );
203
44
  }
204
45
 
205
- function DefaultNavbarItem({mobile = false, ...props}) {
206
- const Comp = mobile ? NavItemMobile : NavItemDesktop;
207
- return <Comp {...props} />;
46
+ export default function DefaultNavbarItem({
47
+ mobile = false,
48
+ position: _position,
49
+ // Need to destructure position from props so that it doesn't get passed on.
50
+ ...props
51
+ }) {
52
+ const Comp = mobile ? DefaultNavbarItemMobile : DefaultNavbarItemDesktop;
53
+ return (
54
+ <Comp
55
+ {...props}
56
+ activeClassName={
57
+ props.activeClassName ?? getInfimaActiveClassName(mobile)
58
+ }
59
+ />
60
+ );
208
61
  }
209
-
210
- export default DefaultNavbarItem;
@@ -6,36 +6,53 @@
6
6
  */
7
7
  import React from 'react';
8
8
  import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
9
- import {useLatestVersion, useActiveDocContext} from '@theme/hooks/useDocs';
9
+ import {
10
+ useLatestVersion,
11
+ useActiveDocContext,
12
+ } from '@docusaurus/plugin-content-docs/client';
10
13
  import clsx from 'clsx';
11
- import {useDocsPreferredVersion} from '@docusaurus/theme-common';
14
+ import {getInfimaActiveClassName} from '@theme/NavbarItem/utils';
15
+ import {useDocsPreferredVersion, uniq} from '@docusaurus/theme-common';
16
+
17
+ function getDocInVersions(versions, docId) {
18
+ const allDocs = versions.flatMap((version) => version.docs);
19
+ const doc = allDocs.find((versionDoc) => versionDoc.id === docId);
20
+
21
+ if (!doc) {
22
+ const docIds = allDocs.map((versionDoc) => versionDoc.id).join('\n- ');
23
+ throw new Error(`DocNavbarItem: couldn't find any doc with id "${docId}" in version${
24
+ versions.length ? 's' : ''
25
+ } ${versions.map((version) => version.name).join(', ')}".
26
+ Available doc ids are:\n- ${docIds}`);
27
+ }
28
+
29
+ return doc;
30
+ }
31
+
12
32
  export default function DocNavbarItem({
13
33
  docId,
14
- activeSidebarClassName,
15
34
  label: staticLabel,
16
35
  docsPluginId,
17
36
  ...props
18
37
  }) {
19
38
  const {activeVersion, activeDoc} = useActiveDocContext(docsPluginId);
20
39
  const {preferredVersion} = useDocsPreferredVersion(docsPluginId);
21
- const latestVersion = useLatestVersion(docsPluginId);
22
- const version = activeVersion ?? preferredVersion ?? latestVersion;
23
- const doc = version.docs.find((versionDoc) => versionDoc.id === docId);
24
-
25
- if (!doc) {
26
- const docIds = version.docs.map((versionDoc) => versionDoc.id).join('\n- ');
27
- throw new Error(`DocNavbarItem: couldn't find any doc with id=${docId} in version ${version.name}.
28
- Available docIds=\n- ${docIds}`);
29
- }
40
+ const latestVersion = useLatestVersion(docsPluginId); // Versions used to look for the doc to link to, ordered + no duplicate
30
41
 
42
+ const versions = uniq(
43
+ [activeVersion, preferredVersion, latestVersion].filter(Boolean),
44
+ );
45
+ const doc = getDocInVersions(versions, docId);
46
+ const activeDocInfimaClassName = getInfimaActiveClassName(props.mobile);
31
47
  return (
32
48
  <DefaultNavbarItem
33
49
  exact
34
50
  {...props}
35
51
  className={clsx(props.className, {
36
- [activeSidebarClassName]:
37
- activeDoc && activeDoc.sidebar === doc.sidebar,
52
+ [activeDocInfimaClassName]:
53
+ activeDoc?.sidebar && activeDoc.sidebar === doc.sidebar,
38
54
  })}
55
+ activeClassName={activeDocInfimaClassName}
39
56
  label={staticLabel ?? doc.id}
40
57
  to={doc.path}
41
58
  />