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

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 (350) hide show
  1. package/README.md +1 -1
  2. package/lib/__tests__/validateThemeConfig.test.js +277 -3
  3. package/lib/admonitions.css +35 -0
  4. package/lib/deps.d.ts +13 -0
  5. package/lib/index.js +16 -15
  6. package/lib/prism-include-languages.js +9 -5
  7. package/lib/theme/AnnouncementBar/index.js +8 -12
  8. package/lib/theme/AnnouncementBar/styles.module.css +23 -32
  9. package/lib/theme/BackToTopButton/index.js +140 -0
  10. package/lib/theme/BackToTopButton/styles.module.css +42 -0
  11. package/lib/theme/BlogArchivePage/index.js +89 -0
  12. package/lib/theme/BlogLayout/index.js +51 -0
  13. package/lib/theme/BlogListPage/index.js +10 -21
  14. package/lib/theme/BlogPostAuthor/index.js +51 -0
  15. package/lib/theme/BlogPostAuthor/styles.module.css +12 -0
  16. package/lib/theme/BlogPostAuthors/index.js +47 -0
  17. package/lib/theme/BlogPostAuthors/styles.module.css +11 -0
  18. package/lib/theme/BlogPostItem/index.js +58 -67
  19. package/lib/theme/BlogPostPage/index.js +37 -24
  20. package/lib/theme/BlogSidebar/index.js +5 -7
  21. package/lib/theme/BlogSidebar/styles.module.css +2 -2
  22. package/lib/theme/BlogTagsListPage/index.js +8 -44
  23. package/lib/theme/BlogTagsPostsPage/index.js +24 -38
  24. package/lib/theme/CodeBlock/index.js +18 -138
  25. package/lib/theme/CodeBlock/styles.module.css +6 -9
  26. package/lib/theme/Details/index.js +30 -0
  27. package/lib/theme/Details/styles.module.css +13 -0
  28. package/lib/theme/DocCard/index.js +84 -0
  29. package/lib/theme/DocCard/styles.module.css +43 -0
  30. package/lib/theme/DocCardList/index.js +28 -0
  31. package/lib/theme/DocCategoryGeneratedIndexPage/index.js +57 -0
  32. package/lib/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  33. package/lib/theme/DocItem/index.js +22 -48
  34. package/lib/theme/DocItem/styles.module.css +2 -11
  35. package/lib/theme/DocItemFooter/index.js +79 -0
  36. package/lib/theme/DocItemFooter/styles.module.css +18 -0
  37. package/lib/theme/DocPage/index.js +35 -20
  38. package/lib/theme/DocPaginator/index.js +6 -7
  39. package/lib/theme/DocSidebar/index.js +23 -22
  40. package/lib/theme/DocSidebarItem/index.js +84 -50
  41. package/lib/theme/DocSidebarItem/styles.module.css +4 -0
  42. package/lib/theme/DocTagDocListPage/index.js +89 -0
  43. package/lib/theme/DocTagsListPage/index.js +44 -0
  44. package/lib/theme/DocVersionBadge/index.js +34 -0
  45. package/lib/theme/DocVersionBanner/index.js +12 -10
  46. package/lib/theme/EditThisPage/index.js +3 -1
  47. package/lib/theme/ErrorPageContent.js +43 -0
  48. package/lib/theme/Footer/index.js +8 -4
  49. package/lib/theme/Heading/index.js +17 -22
  50. package/lib/theme/Heading/styles.css +5 -6
  51. package/lib/theme/Heading/styles.module.css +9 -5
  52. package/lib/theme/IconArrow/index.js +2 -2
  53. package/lib/theme/IconClose/index.js +31 -0
  54. package/lib/theme/IconEdit/index.js +3 -3
  55. package/lib/theme/IconExternalLink/index.js +3 -3
  56. package/lib/theme/IconLanguage/index.js +3 -3
  57. package/lib/theme/IconMenu/index.js +3 -3
  58. package/lib/theme/LastUpdated/index.js +4 -2
  59. package/lib/theme/Layout/index.js +5 -1
  60. package/lib/theme/LayoutHead/index.js +22 -17
  61. package/lib/theme/LayoutProviders/index.js +7 -5
  62. package/lib/theme/Logo/index.js +16 -14
  63. package/lib/theme/MDXComponents/index.js +45 -4
  64. package/lib/theme/MDXComponents/styles.css +11 -0
  65. package/lib/theme/MDXPage/index.js +2 -1
  66. package/lib/theme/Navbar/index.js +46 -27
  67. package/lib/theme/Navbar/styles.module.css +3 -39
  68. package/lib/theme/NavbarItem/DefaultNavbarItem.js +27 -124
  69. package/lib/theme/NavbarItem/DocNavbarItem.js +7 -8
  70. package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +19 -12
  71. package/lib/theme/NavbarItem/DropdownNavbarItem.js +155 -0
  72. package/lib/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +6 -10
  73. package/lib/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  74. package/lib/theme/NavbarItem/index.js +31 -11
  75. package/lib/theme/{SearchMetadatas → SearchMetadata}/index.js +2 -2
  76. package/lib/theme/Seo/index.js +10 -7
  77. package/lib/theme/TOC/index.js +9 -30
  78. package/lib/theme/TOC/styles.module.css +1 -1
  79. package/lib/theme/TOCCollapsible/index.js +7 -5
  80. package/lib/theme/TOCCollapsible/styles.module.css +1 -0
  81. package/lib/theme/TOCInline/index.js +7 -27
  82. package/lib/theme/TOCItems/index.js +78 -0
  83. package/lib/theme/Tabs/__tests__/index.test.js +123 -0
  84. package/lib/theme/Tabs/index.js +73 -50
  85. package/lib/theme/Tabs/styles.module.css +0 -13
  86. package/lib/theme/Tag/index.js +40 -0
  87. package/lib/theme/Tag/styles.module.css +70 -0
  88. package/lib/theme/TagsListByLetter/index.js +48 -0
  89. package/lib/theme/TagsListByLetter/styles.module.css +11 -0
  90. package/lib/theme/TagsListInline/index.js +44 -0
  91. package/lib/theme/TagsListInline/styles.module.css +15 -0
  92. package/lib/theme/ThemeProvider/index.js +8 -3
  93. package/lib/theme/ThemedImage/index.js +5 -7
  94. package/lib/theme/Toggle/index.js +41 -44
  95. package/lib/theme/Toggle/styles.module.css +91 -3
  96. package/lib/theme/UserPreferencesProvider/index.js +8 -3
  97. package/lib/theme/hooks/useHideableNavbar.js +14 -32
  98. package/lib/theme/hooks/useTheme.js +3 -5
  99. package/lib/theme/hooks/useWindowSize.js +2 -7
  100. package/lib/theme/prism-include-languages.js +4 -3
  101. package/lib/theme-classic.d.ts +806 -0
  102. package/lib/translations.js +4 -4
  103. package/lib/types.d.ts +0 -629
  104. package/lib/validateThemeConfig.js +230 -248
  105. package/lib-next/__tests__/validateThemeConfig.test.js +277 -3
  106. package/lib-next/admonitions.css +35 -0
  107. package/lib-next/deps.d.ts +13 -0
  108. package/lib-next/index.js +16 -10
  109. package/lib-next/prism-include-languages.js +0 -2
  110. package/lib-next/theme/AnnouncementBar/index.js +7 -12
  111. package/lib-next/theme/AnnouncementBar/styles.module.css +23 -32
  112. package/lib-next/theme/BackToTopButton/index.js +131 -0
  113. package/lib-next/theme/BackToTopButton/styles.module.css +42 -0
  114. package/lib-next/theme/BlogArchivePage/index.js +80 -0
  115. package/lib-next/theme/BlogLayout/index.js +40 -0
  116. package/lib-next/theme/BlogListPage/index.js +17 -25
  117. package/lib-next/theme/BlogPostAuthor/index.js +46 -0
  118. package/lib-next/theme/BlogPostAuthor/styles.module.css +12 -0
  119. package/lib-next/theme/BlogPostAuthors/index.js +34 -0
  120. package/lib-next/theme/BlogPostAuthors/styles.module.css +11 -0
  121. package/lib-next/theme/BlogPostItem/index.js +79 -86
  122. package/lib-next/theme/BlogPostPage/index.js +70 -35
  123. package/lib-next/theme/BlogSidebar/index.js +11 -13
  124. package/lib-next/theme/BlogSidebar/styles.module.css +2 -2
  125. package/lib-next/theme/BlogTagsListPage/index.js +14 -55
  126. package/lib-next/theme/BlogTagsPostsPage/index.js +29 -39
  127. package/lib-next/theme/CodeBlock/index.js +17 -149
  128. package/lib-next/theme/CodeBlock/styles.module.css +6 -9
  129. package/lib-next/theme/Details/index.js +20 -0
  130. package/lib-next/theme/Details/styles.module.css +13 -0
  131. package/lib-next/theme/DocCard/index.js +80 -0
  132. package/lib-next/theme/DocCard/styles.module.css +43 -0
  133. package/lib-next/theme/DocCardList/index.js +19 -0
  134. package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +49 -0
  135. package/lib-next/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  136. package/lib-next/theme/DocItem/index.js +30 -59
  137. package/lib-next/theme/DocItem/styles.module.css +2 -11
  138. package/lib-next/theme/DocItemFooter/index.js +79 -0
  139. package/lib-next/theme/DocItemFooter/styles.module.css +18 -0
  140. package/lib-next/theme/DocPage/index.js +46 -23
  141. package/lib-next/theme/DocPaginator/index.js +7 -11
  142. package/lib-next/theme/DocSidebar/index.js +37 -43
  143. package/lib-next/theme/DocSidebarItem/index.js +115 -65
  144. package/lib-next/theme/DocSidebarItem/styles.module.css +4 -0
  145. package/lib-next/theme/DocTagDocListPage/index.js +89 -0
  146. package/lib-next/theme/DocTagsListPage/index.js +38 -0
  147. package/lib-next/theme/DocVersionBadge/index.js +27 -0
  148. package/lib-next/theme/DocVersionBanner/index.js +28 -14
  149. package/lib-next/theme/EditThisPage/index.js +6 -1
  150. package/lib-next/theme/ErrorPageContent.js +35 -0
  151. package/lib-next/theme/Footer/index.js +17 -4
  152. package/lib-next/theme/Heading/index.js +25 -29
  153. package/lib-next/theme/Heading/styles.css +5 -6
  154. package/lib-next/theme/Heading/styles.module.css +9 -5
  155. package/lib-next/theme/IconArrow/index.js +2 -2
  156. package/lib-next/theme/IconClose/index.js +23 -0
  157. package/lib-next/theme/IconEdit/index.js +2 -2
  158. package/lib-next/theme/IconExternalLink/index.js +2 -2
  159. package/lib-next/theme/IconLanguage/index.js +2 -2
  160. package/lib-next/theme/IconMenu/index.js +2 -2
  161. package/lib-next/theme/LastUpdated/index.js +3 -2
  162. package/lib-next/theme/Layout/index.js +3 -1
  163. package/lib-next/theme/LayoutHead/index.js +18 -23
  164. package/lib-next/theme/LayoutProviders/index.js +8 -5
  165. package/lib-next/theme/Logo/index.js +25 -21
  166. package/lib-next/theme/MDXComponents/index.js +34 -7
  167. package/lib-next/theme/MDXComponents/styles.css +11 -0
  168. package/lib-next/theme/MDXPage/index.js +10 -2
  169. package/lib-next/theme/Navbar/index.js +62 -34
  170. package/lib-next/theme/Navbar/styles.module.css +3 -39
  171. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +45 -143
  172. package/lib-next/theme/NavbarItem/DocNavbarItem.js +7 -7
  173. package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +31 -19
  174. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +159 -0
  175. package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +4 -12
  176. package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  177. package/lib-next/theme/NavbarItem/index.js +25 -12
  178. package/lib-next/theme/{SearchMetadatas → SearchMetadata}/index.js +1 -1
  179. package/lib-next/theme/Seo/index.js +11 -7
  180. package/lib-next/theme/TOC/index.js +12 -36
  181. package/lib-next/theme/TOC/styles.module.css +1 -1
  182. package/lib-next/theme/TOCCollapsible/index.js +13 -4
  183. package/lib-next/theme/TOCCollapsible/styles.module.css +1 -0
  184. package/lib-next/theme/TOCInline/index.js +10 -28
  185. package/lib-next/theme/TOCItems/index.js +85 -0
  186. package/lib-next/theme/Tabs/__tests__/index.test.js +142 -0
  187. package/lib-next/theme/Tabs/index.js +91 -43
  188. package/lib-next/theme/Tabs/styles.module.css +0 -13
  189. package/lib-next/theme/Tag/index.js +27 -0
  190. package/lib-next/theme/Tag/styles.module.css +70 -0
  191. package/lib-next/theme/TagsListByLetter/index.js +42 -0
  192. package/lib-next/theme/TagsListByLetter/styles.module.css +11 -0
  193. package/lib-next/theme/TagsListInline/index.js +31 -0
  194. package/lib-next/theme/TagsListInline/styles.module.css +15 -0
  195. package/lib-next/theme/ThemeProvider/index.js +10 -7
  196. package/lib-next/theme/ThemedImage/index.js +5 -5
  197. package/lib-next/theme/Toggle/index.js +34 -37
  198. package/lib-next/theme/Toggle/styles.module.css +91 -3
  199. package/lib-next/theme/UserPreferencesProvider/index.js +9 -6
  200. package/lib-next/theme/hooks/useHideableNavbar.js +31 -44
  201. package/lib-next/theme/hooks/useTheme.js +4 -5
  202. package/lib-next/theme/hooks/useWindowSize.js +2 -6
  203. package/lib-next/theme/prism-include-languages.js +2 -1
  204. package/lib-next/theme-classic.d.ts +806 -0
  205. package/lib-next/translations.js +6 -10
  206. package/lib-next/types.d.ts +0 -629
  207. package/lib-next/validateThemeConfig.js +141 -116
  208. package/package.json +27 -24
  209. package/src/__tests__/validateThemeConfig.test.js +277 -3
  210. package/src/admonitions.css +35 -0
  211. package/src/deps.d.ts +13 -0
  212. package/src/index.ts +23 -17
  213. package/src/{prism-include-languages.js → prism-include-languages.ts} +0 -0
  214. package/src/theme/AnnouncementBar/index.tsx +8 -12
  215. package/src/theme/AnnouncementBar/styles.module.css +23 -32
  216. package/src/theme/BackToTopButton/index.tsx +142 -0
  217. package/src/theme/BackToTopButton/styles.module.css +42 -0
  218. package/src/theme/BlogArchivePage/index.tsx +91 -0
  219. package/src/theme/BlogLayout/index.tsx +44 -0
  220. package/src/theme/BlogListPage/index.tsx +18 -25
  221. package/src/theme/BlogPostAuthor/index.tsx +49 -0
  222. package/src/theme/BlogPostAuthor/styles.module.css +12 -0
  223. package/src/theme/BlogPostAuthors/index.tsx +39 -0
  224. package/src/theme/BlogPostAuthors/styles.module.css +11 -0
  225. package/src/theme/BlogPostItem/index.tsx +70 -80
  226. package/src/theme/BlogPostPage/index.tsx +72 -35
  227. package/src/theme/BlogSidebar/index.tsx +11 -13
  228. package/src/theme/BlogSidebar/styles.module.css +2 -2
  229. package/src/theme/BlogTagsListPage/index.tsx +14 -57
  230. package/src/theme/BlogTagsPostsPage/index.tsx +29 -39
  231. package/src/theme/CodeBlock/index.tsx +21 -151
  232. package/src/theme/CodeBlock/styles.module.css +6 -9
  233. package/src/theme/Details/index.tsx +24 -0
  234. package/src/theme/Details/styles.module.css +13 -0
  235. package/src/theme/DocCard/index.tsx +100 -0
  236. package/src/theme/DocCard/styles.module.css +43 -0
  237. package/src/theme/DocCardList/index.tsx +27 -0
  238. package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +53 -0
  239. package/src/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  240. package/src/theme/DocItem/index.tsx +30 -60
  241. package/src/theme/DocItem/styles.module.css +2 -11
  242. package/src/theme/DocItemFooter/index.tsx +91 -0
  243. package/src/theme/DocItemFooter/styles.module.css +18 -0
  244. package/src/theme/DocPage/index.tsx +44 -22
  245. package/src/theme/DocPaginator/index.tsx +9 -13
  246. package/src/theme/DocSidebar/index.tsx +38 -39
  247. package/src/theme/DocSidebarItem/index.tsx +108 -49
  248. package/src/theme/DocSidebarItem/styles.module.css +4 -0
  249. package/src/theme/DocTagDocListPage/index.tsx +89 -0
  250. package/src/theme/DocTagsListPage/index.tsx +41 -0
  251. package/src/theme/DocVersionBadge/index.tsx +30 -0
  252. package/src/theme/DocVersionBanner/index.tsx +48 -21
  253. package/src/theme/EditThisPage/index.tsx +6 -1
  254. package/src/theme/ErrorPageContent.tsx +41 -0
  255. package/src/theme/Footer/index.tsx +20 -5
  256. package/src/theme/Heading/index.tsx +25 -31
  257. package/src/theme/Heading/styles.css +5 -6
  258. package/src/theme/Heading/styles.module.css +9 -5
  259. package/src/theme/IconArrow/index.tsx +2 -2
  260. package/src/theme/IconClose/index.tsx +26 -0
  261. package/src/theme/IconEdit/index.tsx +2 -2
  262. package/src/theme/IconExternalLink/index.tsx +2 -5
  263. package/src/theme/IconLanguage/index.tsx +2 -6
  264. package/src/theme/IconMenu/index.tsx +3 -3
  265. package/src/theme/LastUpdated/index.tsx +3 -2
  266. package/src/theme/Layout/index.tsx +3 -1
  267. package/src/theme/LayoutHead/index.tsx +18 -17
  268. package/src/theme/LayoutProviders/index.tsx +8 -5
  269. package/src/theme/Logo/index.tsx +21 -17
  270. package/src/theme/MDXComponents/index.tsx +39 -5
  271. package/src/theme/MDXComponents/styles.css +11 -0
  272. package/src/theme/MDXPage/index.tsx +10 -2
  273. package/src/theme/Navbar/index.tsx +62 -35
  274. package/src/theme/Navbar/styles.module.css +3 -39
  275. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +42 -149
  276. package/src/theme/NavbarItem/DocNavbarItem.tsx +12 -16
  277. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +33 -21
  278. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +7 -3
  279. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +181 -0
  280. package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +8 -9
  281. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  282. package/src/theme/NavbarItem/index.tsx +41 -16
  283. package/src/theme/{SearchMetadatas → SearchMetadata}/index.tsx +2 -2
  284. package/src/theme/Seo/index.tsx +7 -4
  285. package/src/theme/TOC/index.tsx +13 -35
  286. package/src/theme/TOC/styles.module.css +1 -1
  287. package/src/theme/TOCCollapsible/index.tsx +13 -4
  288. package/src/theme/TOCCollapsible/styles.module.css +1 -0
  289. package/src/theme/TOCInline/index.tsx +13 -32
  290. package/src/theme/TOCItems/index.tsx +96 -0
  291. package/src/theme/Tabs/__tests__/index.test.tsx +129 -0
  292. package/src/theme/Tabs/index.tsx +93 -49
  293. package/src/theme/Tabs/styles.module.css +0 -13
  294. package/src/theme/Tag/index.tsx +31 -0
  295. package/src/theme/Tag/styles.module.css +70 -0
  296. package/src/theme/TagsListByLetter/index.tsx +45 -0
  297. package/src/theme/TagsListByLetter/styles.module.css +11 -0
  298. package/src/theme/TagsListInline/index.tsx +35 -0
  299. package/src/theme/TagsListInline/styles.module.css +15 -0
  300. package/src/theme/ThemeProvider/index.tsx +6 -2
  301. package/src/theme/ThemedImage/index.tsx +5 -5
  302. package/src/theme/Toggle/index.tsx +36 -43
  303. package/src/theme/Toggle/styles.module.css +91 -3
  304. package/src/theme/UserPreferencesProvider/index.tsx +9 -6
  305. package/src/theme/hooks/useHideableNavbar.ts +32 -45
  306. package/src/theme/hooks/useTabGroupChoice.ts +2 -2
  307. package/src/theme/hooks/useTheme.ts +4 -5
  308. package/src/theme/hooks/useWindowSize.ts +2 -7
  309. package/src/theme/prism-include-languages.ts +3 -2
  310. package/src/theme-classic.d.ts +806 -0
  311. package/src/translations.ts +8 -10
  312. package/src/types.d.ts +0 -629
  313. package/src/{validateThemeConfig.js → validateThemeConfig.ts} +151 -96
  314. package/tsconfig.json +1 -2
  315. package/codeTranslations/README.md +0 -20
  316. package/codeTranslations/ar.json +0 -56
  317. package/codeTranslations/base.json +0 -110
  318. package/codeTranslations/bn.json +0 -56
  319. package/codeTranslations/da.json +0 -56
  320. package/codeTranslations/de.json +0 -56
  321. package/codeTranslations/es.json +0 -56
  322. package/codeTranslations/fa.json +0 -56
  323. package/codeTranslations/fil.json +0 -56
  324. package/codeTranslations/fr.json +0 -56
  325. package/codeTranslations/he.json +0 -56
  326. package/codeTranslations/hi.json +0 -56
  327. package/codeTranslations/ja.json +0 -56
  328. package/codeTranslations/ko.json +0 -56
  329. package/codeTranslations/pl.json +0 -56
  330. package/codeTranslations/pt-BR.json +0 -56
  331. package/codeTranslations/pt-PT.json +0 -56
  332. package/codeTranslations/ru.json +0 -56
  333. package/codeTranslations/tr.json +0 -56
  334. package/codeTranslations/vi.json +0 -56
  335. package/codeTranslations/zh-Hans.json +0 -56
  336. package/codeTranslations/zh-Hant.json +0 -56
  337. package/lib/theme/Toggle/styles.css +0 -103
  338. package/lib/theme/hooks/useContextualSearchFilters.js +0 -47
  339. package/lib/theme/hooks/useScrollPosition.js +0 -49
  340. package/lib/theme/hooks/useTOCHighlight.js +0 -87
  341. package/lib-next/theme/Toggle/styles.css +0 -103
  342. package/lib-next/theme/hooks/useContextualSearchFilters.js +0 -41
  343. package/lib-next/theme/hooks/useScrollPosition.js +0 -38
  344. package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
  345. package/src/theme/Toggle/styles.css +0 -103
  346. package/src/theme/hooks/useContextualSearchFilters.ts +0 -52
  347. package/src/theme/hooks/useScrollPosition.ts +0 -45
  348. package/src/theme/hooks/useTOCHighlight.ts +0 -98
  349. package/update-code-translations.js +0 -242
  350. package/update-code-translations.test.js +0 -33
@@ -14,16 +14,24 @@ import {
14
14
  useThemeConfig,
15
15
  useMobileSecondaryMenuRenderer,
16
16
  usePrevious,
17
+ useHistoryPopHandler,
17
18
  } from '@docusaurus/theme-common';
18
19
  import useHideableNavbar from '@theme/hooks/useHideableNavbar';
19
20
  import useLockBodyScroll from '@theme/hooks/useLockBodyScroll';
20
21
  import useWindowSize from '@theme/hooks/useWindowSize';
22
+ import {useActivePlugin} from '@theme/hooks/useDocs';
21
23
  import NavbarItem from '@theme/NavbarItem';
22
24
  import Logo from '@theme/Logo';
23
25
  import IconMenu from '@theme/IconMenu';
26
+ import IconClose from '@theme/IconClose';
24
27
  import styles from './styles.module.css'; // retrocompatible with v1
25
28
 
26
- 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
27
35
  // if position is unspecified, fallback to right (as v1)
28
36
 
29
37
  function splitNavItemsByPosition(items) {
@@ -44,7 +52,19 @@ function useMobileSidebar() {
44
52
 
45
53
  const shouldRender = windowSize === 'mobile'; // || windowSize === 'ssr';
46
54
 
47
- const [shown, setShown] = useState(false);
55
+ const [shown, setShown] = useState(false); // Close mobile sidebar on navigation pop
56
+ // Most likely firing when using the Android back button (but not only)
57
+
58
+ useHistoryPopHandler(() => {
59
+ if (shown) {
60
+ setShown(false); // Should we prevent the navigation here?
61
+ // See https://github.com/facebook/docusaurus/pull/5462#issuecomment-911699846
62
+
63
+ return false; // prevent pop navigation
64
+ }
65
+
66
+ return undefined;
67
+ });
48
68
  const toggle = useCallback(() => {
49
69
  setShown((s) => !s);
50
70
  }, []);
@@ -81,12 +101,13 @@ function useSecondaryMenu({sidebarShown, toggleSidebar}) {
81
101
  toggleSidebar,
82
102
  });
83
103
  const previousContent = usePrevious(content);
84
- const [shown, setShown] = useState(() => {
85
- // /!\ content is set with useEffect,
86
- // so it's not available on mount anyway
87
- // "return !!content" => always returns false
88
- return false;
89
- }); // When content is become available for the first time (set in useEffect)
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)
90
111
  // we set this content to be shown!
91
112
 
92
113
  useEffect(() => {
@@ -121,9 +142,7 @@ function useSecondaryMenu({sidebarShown, toggleSidebar}) {
121
142
 
122
143
  function NavbarMobileSidebar({sidebarShown, toggleSidebar}) {
123
144
  useLockBodyScroll(sidebarShown);
124
- const {
125
- navbar: {items},
126
- } = useThemeConfig();
145
+ const items = useNavbarItems();
127
146
  const colorModeToggle = useColorModeToggle();
128
147
  const secondaryMenu = useSecondaryMenu({
129
148
  sidebarShown,
@@ -137,42 +156,49 @@ function NavbarMobileSidebar({sidebarShown, toggleSidebar}) {
137
156
  imageClassName="navbar__logo"
138
157
  titleClassName="navbar__title"
139
158
  />
140
- {!colorModeToggle.disabled && sidebarShown && (
159
+ {!colorModeToggle.disabled && (
141
160
  <Toggle
161
+ className={styles.navbarSidebarToggle}
142
162
  checked={colorModeToggle.isDarkTheme}
143
163
  onChange={colorModeToggle.toggle}
144
164
  />
145
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>
146
175
  </div>
147
176
 
148
177
  <div
149
- className={clsx('navbar-sidebar__items', styles.menuWrapper, {
150
- [styles.menuWrapperSecondaryMenuShown]: secondaryMenu.shown,
178
+ className={clsx('navbar-sidebar__items', {
179
+ 'navbar-sidebar__items--show-secondary': secondaryMenu.shown,
151
180
  })}>
152
- <div className="menu">
181
+ <div className="navbar-sidebar__item menu">
153
182
  <ul className="menu__list">
154
183
  {items.map((item, i) => (
155
- <NavbarItem
156
- mobile
157
- {...item} // TODO fix typing
158
- onClick={toggleSidebar}
159
- key={i}
160
- />
184
+ <NavbarItem mobile {...item} onClick={toggleSidebar} key={i} />
161
185
  ))}
162
186
  </ul>
163
187
  </div>
164
188
 
165
- <div className={styles.secondaryMenu}>
166
- <button
167
- type="button"
168
- className={clsx('clean-btn', styles.backButton)}
169
- onClick={secondaryMenu.hide}>
170
- <Translate
171
- id="theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel"
172
- 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)">
173
- ← Back to main menu
174
- </Translate>
175
- </button>
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
+ )}
176
202
  {secondaryMenu.content}
177
203
  </div>
178
204
  </div>
@@ -182,11 +208,13 @@ function NavbarMobileSidebar({sidebarShown, toggleSidebar}) {
182
208
 
183
209
  function Navbar() {
184
210
  const {
185
- navbar: {items, hideOnScroll, style},
211
+ navbar: {hideOnScroll, style},
186
212
  } = useThemeConfig();
187
213
  const mobileSidebar = useMobileSidebar();
188
214
  const colorModeToggle = useColorModeToggle();
215
+ const activeDocPlugin = useActivePlugin();
189
216
  const {navbarRef, isNavbarVisible} = useHideableNavbar(hideOnScroll);
217
+ const items = useNavbarItems();
190
218
  const hasSearchNavbarItem = items.some((item) => item.type === 'search');
191
219
  const {leftItems, rightItems} = splitNavItemsByPosition(items);
192
220
  return (
@@ -201,7 +229,7 @@ function Navbar() {
201
229
  })}>
202
230
  <div className="navbar__inner">
203
231
  <div className="navbar__items">
204
- {items?.length > 0 && (
232
+ {(items?.length > 0 || activeDocPlugin) && (
205
233
  <button
206
234
  aria-label="Navigation bar toggle"
207
235
  className="navbar__toggle clean-btn"
@@ -8,7 +8,7 @@
8
8
  /*
9
9
  Hide toggle in small viewports
10
10
  */
11
- @media screen and (max-width: 997px) {
11
+ @media (max-width: 996px) {
12
12
  .toggle {
13
13
  display: none;
14
14
  }
@@ -22,42 +22,6 @@ Hide toggle in small viewports
22
22
  transform: translate3d(0, calc(-100% - 2px), 0);
23
23
  }
24
24
 
25
- :global(.navbar-sidebar__items) {
26
- padding: 0;
27
- }
28
-
29
- :global(.navbar-sidebar) {
30
- overflow-x: hidden;
31
- }
32
-
33
- .menuWrapper {
34
- display: flex;
35
- width: calc(var(--ifm-navbar-sidebar-width));
36
- transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);
37
- transform: translateZ(0);
38
- }
39
-
40
- .menuWrapperSecondaryMenuShown {
41
- transform: translate3d(calc((var(--ifm-navbar-sidebar-width)) * -1), 0, 0);
42
- }
43
-
44
- .menuWrapper > div {
45
- flex-shrink: 0;
46
- width: calc(var(--ifm-navbar-sidebar-width));
47
- font-weight: var(--ifm-font-weight-semibold);
48
- padding: 0.5rem;
49
- }
50
-
51
- .backButton {
52
- width: calc(100% + 1rem);
53
- margin: 0 0 0.7rem -0.5rem;
54
- text-align: left;
55
- font-size: 15px;
56
- padding: 0.6rem 1.5rem;
57
- background: var(--ifm-menu-color-background-active);
58
- font-weight: var(--ifm-button-font-weight);
59
- }
60
-
61
- .secondaryMenu {
62
- padding-top: 0 !important;
25
+ .navbarSidebarToggle {
26
+ margin-right: 1rem;
63
27
  }
@@ -4,27 +4,22 @@
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
9
  import Link from '@docusaurus/Link';
10
10
  import useBaseUrl from '@docusaurus/useBaseUrl';
11
- import {useLocation} from '@docusaurus/router';
12
- import {
13
- isSamePath,
14
- useCollapsible,
15
- Collapsible,
16
- } from '@docusaurus/theme-common';
17
11
  import IconExternalLink from '@theme/IconExternalLink';
18
12
  import isInternalUrl from '@docusaurus/isInternalUrl';
13
+ import {isRegexpStringMatch} from '@docusaurus/theme-common';
14
+ import {getInfimaActiveClassName} from './index';
19
15
  const dropdownLinkActiveClass = 'dropdown__link--active';
20
-
21
- function NavLink({
16
+ export function NavLink({
22
17
  activeBasePath,
23
18
  activeBaseRegex,
24
19
  to,
25
20
  href,
26
21
  label,
27
- activeClassName = 'navbar__link--active',
22
+ activeClassName = '',
28
23
  prependBaseUrlToHref,
29
24
  ...props
30
25
  }) {
@@ -45,13 +40,15 @@ function NavLink({
45
40
  }
46
41
  : {
47
42
  isNavLink: true,
48
- activeClassName,
43
+ activeClassName: !props.className?.includes(activeClassName)
44
+ ? activeClassName
45
+ : '',
49
46
  to: toUrl,
50
47
  ...(activeBasePath || activeBaseRegex
51
48
  ? {
52
49
  isActive: (_match, location) =>
53
50
  activeBaseRegex
54
- ? new RegExp(activeBaseRegex).test(location.pathname)
51
+ ? isRegexpStringMatch(activeBaseRegex, location.pathname)
55
52
  : location.pathname.startsWith(activeBaseUrl),
56
53
  }
57
54
  : null),
@@ -74,150 +71,55 @@ function NavLink({
74
71
  );
75
72
  }
76
73
 
77
- function NavItemDesktop({items, position, className, ...props}) {
78
- const dropdownRef = useRef(null);
79
- const dropdownMenuRef = useRef(null);
80
- const [showDropdown, setShowDropdown] = useState(false);
81
- useEffect(() => {
82
- const handleClickOutside = (event) => {
83
- if (!dropdownRef.current || dropdownRef.current.contains(event.target)) {
84
- return;
85
- }
86
-
87
- setShowDropdown(false);
88
- };
89
-
90
- document.addEventListener('mousedown', handleClickOutside);
91
- document.addEventListener('touchstart', handleClickOutside);
92
- return () => {
93
- document.removeEventListener('mousedown', handleClickOutside);
94
- document.removeEventListener('touchstart', handleClickOutside);
95
- };
96
- }, [dropdownRef]);
97
-
98
- const navLinkClassNames = (extraClassName, isDropdownItem = false) =>
99
- clsx(
100
- {
101
- 'navbar__item navbar__link': !isDropdownItem,
102
- dropdown__link: isDropdownItem,
103
- },
104
- extraClassName,
105
- );
74
+ function DefaultNavbarItemDesktop({
75
+ className,
76
+ isDropdownItem = false,
77
+ ...props
78
+ }) {
79
+ const element = (
80
+ <NavLink
81
+ className={clsx(
82
+ isDropdownItem ? 'dropdown__link' : 'navbar__item navbar__link',
83
+ className,
84
+ )}
85
+ {...props}
86
+ />
87
+ );
106
88
 
107
- if (!items) {
108
- return <NavLink className={navLinkClassNames(className)} {...props} />;
89
+ if (isDropdownItem) {
90
+ return <li>{element}</li>;
109
91
  }
110
92
 
111
- return (
112
- <div
113
- ref={dropdownRef}
114
- className={clsx('navbar__item', 'dropdown', 'dropdown--hoverable', {
115
- 'dropdown--left': position === 'left',
116
- 'dropdown--right': position === 'right',
117
- 'dropdown--show': showDropdown,
118
- })}>
119
- <NavLink
120
- className={navLinkClassNames(className)}
121
- {...props}
122
- onClick={props.to ? undefined : (e) => e.preventDefault()}
123
- onKeyDown={(e) => {
124
- if (e.key === 'Enter') {
125
- e.preventDefault();
126
- setShowDropdown(!showDropdown);
127
- }
128
- }}>
129
- {props.children ?? props.label}
130
- </NavLink>
131
- <ul ref={dropdownMenuRef} className="dropdown__menu">
132
- {items.map(({className: childItemClassName, ...childItemProps}, i) => (
133
- <li key={i}>
134
- <NavLink
135
- onKeyDown={(e) => {
136
- if (i === items.length - 1 && e.key === 'Tab') {
137
- e.preventDefault();
138
- setShowDropdown(false);
139
- const nextNavbarItem = dropdownRef.current.nextElementSibling;
140
-
141
- if (nextNavbarItem) {
142
- nextNavbarItem.focus();
143
- }
144
- }
145
- }}
146
- activeClassName={dropdownLinkActiveClass}
147
- className={navLinkClassNames(childItemClassName, true)}
148
- {...childItemProps}
149
- />
150
- </li>
151
- ))}
152
- </ul>
153
- </div>
154
- );
93
+ return element;
155
94
  }
156
95
 
157
- function NavItemMobile({
158
- items,
96
+ function DefaultNavbarItemMobile({
159
97
  className,
160
- position: _position,
161
- // Need to destructure position from props so that it doesn't get passed on.
98
+ isDropdownItem: _isDropdownItem,
162
99
  ...props
163
100
  }) {
164
- const {pathname} = useLocation();
165
- const {collapsed, toggleCollapsed} = useCollapsible({
166
- initialState: () =>
167
- !items?.some((item) => isSamePath(item.to, pathname)) ?? true,
168
- });
169
-
170
- const navLinkClassNames = (extraClassName, isSubList = false) =>
171
- clsx(
172
- 'menu__link',
173
- {
174
- 'menu__link--sublist': isSubList,
175
- },
176
- extraClassName,
177
- );
178
-
179
- if (!items) {
180
- return (
181
- <li className="menu__list-item">
182
- <NavLink className={navLinkClassNames(className)} {...props} />
183
- </li>
184
- );
185
- }
186
-
187
101
  return (
188
- <li
189
- className={clsx('menu__list-item', {
190
- 'menu__list-item--collapsed': collapsed,
191
- })}>
192
- <NavLink
193
- role="button"
194
- className={navLinkClassNames(className, true)}
195
- {...props}
196
- onClick={(e) => {
197
- e.preventDefault();
198
- toggleCollapsed();
199
- }}>
200
- {props.children ?? props.label}
201
- </NavLink>
202
- <Collapsible as="ul" className="menu__list" collapsed={collapsed}>
203
- {items.map(({className: childItemClassName, ...childItemProps}, i) => (
204
- <li className="menu__list-item" key={i}>
205
- <NavLink
206
- activeClassName="menu__link--active"
207
- className={navLinkClassNames(childItemClassName)}
208
- {...childItemProps}
209
- onClick={props.onClick}
210
- />
211
- </li>
212
- ))}
213
- </Collapsible>
102
+ <li className="menu__list-item">
103
+ <NavLink className={clsx('menu__link', className)} {...props} />
214
104
  </li>
215
105
  );
216
106
  }
217
107
 
218
- function DefaultNavbarItem({mobile = false, ...props}) {
219
- const Comp = mobile ? NavItemMobile : NavItemDesktop;
220
- return <Comp {...props} />;
108
+ function DefaultNavbarItem({
109
+ mobile = false,
110
+ position: _position,
111
+ // Need to destructure position from props so that it doesn't get passed on.
112
+ ...props
113
+ }) {
114
+ const Comp = mobile ? DefaultNavbarItemMobile : DefaultNavbarItemDesktop;
115
+ return (
116
+ <Comp
117
+ {...props}
118
+ activeClassName={
119
+ props.activeClassName ?? getInfimaActiveClassName(mobile)
120
+ }
121
+ />
122
+ );
221
123
  }
222
124
 
223
125
  export default DefaultNavbarItem;
@@ -8,12 +8,11 @@ import React from 'react';
8
8
  import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
9
9
  import {useLatestVersion, useActiveDocContext} from '@theme/hooks/useDocs';
10
10
  import clsx from 'clsx';
11
- import {useDocsPreferredVersion} from '@docusaurus/theme-common';
12
- import {uniq} from '@docusaurus/utils-common';
11
+ import {getInfimaActiveClassName} from './index';
12
+ import {useDocsPreferredVersion, uniq} from '@docusaurus/theme-common';
13
13
 
14
14
  function getDocInVersions(versions, docId) {
15
- // vanilla-js flatten, TODO replace soon by ES flat() / flatMap()
16
- const allDocs = [].concat(...versions.map((version) => version.docs));
15
+ const allDocs = versions.flatMap((version) => version.docs);
17
16
  const doc = allDocs.find((versionDoc) => versionDoc.id === docId);
18
17
 
19
18
  if (!doc) {
@@ -29,7 +28,6 @@ Available doc ids are:\n- ${docIds}`);
29
28
 
30
29
  export default function DocNavbarItem({
31
30
  docId,
32
- activeSidebarClassName,
33
31
  label: staticLabel,
34
32
  docsPluginId,
35
33
  ...props
@@ -42,14 +40,16 @@ export default function DocNavbarItem({
42
40
  [activeVersion, preferredVersion, latestVersion].filter(Boolean),
43
41
  );
44
42
  const doc = getDocInVersions(versions, docId);
43
+ const activeDocInfimaClassName = getInfimaActiveClassName(props.mobile);
45
44
  return (
46
45
  <DefaultNavbarItem
47
46
  exact
48
47
  {...props}
49
48
  className={clsx(props.className, {
50
- [activeSidebarClassName]:
51
- activeDoc && activeDoc.sidebar === doc.sidebar,
49
+ [activeDocInfimaClassName]:
50
+ activeDoc?.sidebar && activeDoc.sidebar === doc.sidebar,
52
51
  })}
52
+ activeClassName={activeDocInfimaClassName}
53
53
  label={staticLabel ?? doc.id}
54
54
  to={doc.path}
55
55
  />
@@ -6,12 +6,14 @@
6
6
  */
7
7
  import React from 'react';
8
8
  import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
9
+ import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
9
10
  import {
10
11
  useVersions,
11
12
  useLatestVersion,
12
13
  useActiveDocContext,
13
14
  } from '@theme/hooks/useDocs';
14
15
  import {useDocsPreferredVersion} from '@docusaurus/theme-common';
16
+ import {translate} from '@docusaurus/Translate';
15
17
 
16
18
  const getVersionMainDoc = (version) =>
17
19
  version.docs.find((doc) => doc.id === version.mainDocId);
@@ -27,9 +29,8 @@ export default function DocsVersionDropdownNavbarItem({
27
29
  const activeDocContext = useActiveDocContext(docsPluginId);
28
30
  const versions = useVersions(docsPluginId);
29
31
  const latestVersion = useLatestVersion(docsPluginId);
30
- const {preferredVersion, savePreferredVersionName} = useDocsPreferredVersion(
31
- docsPluginId,
32
- );
32
+ const {preferredVersion, savePreferredVersionName} =
33
+ useDocsPreferredVersion(docsPluginId);
33
34
 
34
35
  function getItems() {
35
36
  const versionLinks = versions.map((version) => {
@@ -48,30 +49,41 @@ export default function DocsVersionDropdownNavbarItem({
48
49
  },
49
50
  };
50
51
  });
51
- const items = [
52
- ...dropdownItemsBefore,
53
- ...versionLinks,
54
- ...dropdownItemsAfter,
55
- ]; // We don't want to render a version dropdown with 0 or 1 item
56
- // If we build the site with a single docs version (onlyIncludeVersions: ['1.0.0'])
57
- // We'd rather render a button instead of a dropdown
58
-
59
- if (items.length <= 1) {
60
- return undefined;
61
- }
62
-
63
- return items;
52
+ return [...dropdownItemsBefore, ...versionLinks, ...dropdownItemsAfter];
64
53
  }
65
54
 
66
55
  const items = getItems();
67
56
  const dropdownVersion =
68
57
  activeDocContext.activeVersion ?? preferredVersion ?? latestVersion; // Mobile dropdown is handled a bit differently
69
58
 
70
- const dropdownLabel = mobile && items ? 'Versions' : dropdownVersion.label;
59
+ const dropdownLabel =
60
+ mobile && items
61
+ ? translate({
62
+ id: 'theme.navbar.mobileVersionsDropdown.label',
63
+ message: 'Versions',
64
+ description:
65
+ 'The label for the navbar versions dropdown on mobile view',
66
+ })
67
+ : dropdownVersion.label;
71
68
  const dropdownTo =
72
- mobile && items ? undefined : getVersionMainDoc(dropdownVersion).path;
69
+ mobile && items ? undefined : getVersionMainDoc(dropdownVersion).path; // We don't want to render a version dropdown with 0 or 1 item
70
+ // If we build the site with a single docs version (onlyIncludeVersions: ['1.0.0'])
71
+ // We'd rather render a button instead of a dropdown
72
+
73
+ if (items.length <= 1) {
74
+ return (
75
+ <DefaultNavbarItem
76
+ {...props}
77
+ mobile={mobile}
78
+ label={dropdownLabel}
79
+ to={dropdownTo}
80
+ isActive={dropdownActiveClassDisabled ? () => false : undefined}
81
+ />
82
+ );
83
+ }
84
+
73
85
  return (
74
- <DefaultNavbarItem
86
+ <DropdownNavbarItem
75
87
  {...props}
76
88
  mobile={mobile}
77
89
  label={dropdownLabel}