@docusaurus/theme-classic 2.0.0-beta.0f144213d → 2.0.0-beta.11

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 (359) 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 +29 -46
  34. package/lib/theme/DocItem/styles.module.css +5 -9
  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 -54
  38. package/lib/theme/DocPage/styles.module.css +5 -0
  39. package/lib/theme/DocPaginator/index.js +6 -7
  40. package/lib/theme/DocSidebar/index.js +52 -224
  41. package/lib/theme/DocSidebar/styles.module.css +0 -18
  42. package/lib/theme/DocSidebarItem/index.js +209 -0
  43. package/lib/theme/DocSidebarItem/styles.module.css +19 -0
  44. package/lib/theme/DocTagDocListPage/index.js +89 -0
  45. package/lib/theme/DocTagsListPage/index.js +44 -0
  46. package/lib/theme/DocVersionBadge/index.js +34 -0
  47. package/lib/theme/DocVersionBanner/index.js +12 -10
  48. package/lib/theme/EditThisPage/index.js +3 -1
  49. package/lib/theme/ErrorPageContent.js +43 -0
  50. package/lib/theme/Footer/index.js +8 -4
  51. package/lib/theme/Heading/index.js +17 -22
  52. package/lib/theme/Heading/styles.css +5 -6
  53. package/lib/theme/Heading/styles.module.css +9 -5
  54. package/lib/theme/IconArrow/index.js +2 -2
  55. package/lib/theme/IconClose/index.js +31 -0
  56. package/lib/theme/IconEdit/index.js +3 -3
  57. package/lib/theme/IconExternalLink/index.js +3 -3
  58. package/lib/theme/IconLanguage/index.js +3 -3
  59. package/lib/theme/IconMenu/index.js +3 -3
  60. package/lib/theme/LastUpdated/index.js +4 -2
  61. package/lib/theme/Layout/index.js +5 -1
  62. package/lib/theme/LayoutHead/index.js +22 -17
  63. package/lib/theme/LayoutProviders/index.js +7 -3
  64. package/lib/theme/Logo/index.js +16 -14
  65. package/lib/theme/MDXComponents/index.js +45 -4
  66. package/lib/theme/MDXComponents/styles.css +11 -0
  67. package/lib/theme/MDXPage/index.js +2 -1
  68. package/lib/theme/Navbar/index.js +162 -42
  69. package/lib/theme/Navbar/styles.module.css +10 -3
  70. package/lib/theme/NavbarItem/DefaultNavbarItem.js +27 -123
  71. package/lib/theme/NavbarItem/DocNavbarItem.js +7 -8
  72. package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +19 -12
  73. package/lib/theme/NavbarItem/DropdownNavbarItem.js +155 -0
  74. package/lib/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +6 -10
  75. package/lib/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  76. package/lib/theme/NavbarItem/index.js +31 -11
  77. package/lib/theme/{SearchMetadatas → SearchMetadata}/index.js +2 -2
  78. package/lib/theme/Seo/index.js +10 -7
  79. package/lib/theme/SkipToContent/index.js +5 -2
  80. package/lib/theme/TOC/index.js +9 -29
  81. package/lib/theme/TOC/styles.module.css +1 -1
  82. package/lib/theme/TOCCollapsible/index.js +53 -0
  83. package/lib/theme/TOCCollapsible/styles.module.css +50 -0
  84. package/lib/theme/TOCInline/index.js +7 -27
  85. package/lib/theme/TOCItems/index.js +78 -0
  86. package/lib/theme/Tabs/__tests__/index.test.js +123 -0
  87. package/lib/theme/Tabs/index.js +73 -50
  88. package/lib/theme/Tabs/styles.module.css +0 -13
  89. package/lib/theme/Tag/index.js +40 -0
  90. package/lib/theme/Tag/styles.module.css +70 -0
  91. package/lib/theme/TagsListByLetter/index.js +48 -0
  92. package/lib/theme/TagsListByLetter/styles.module.css +11 -0
  93. package/lib/theme/TagsListInline/index.js +44 -0
  94. package/lib/theme/TagsListInline/styles.module.css +15 -0
  95. package/lib/theme/ThemeProvider/index.js +8 -3
  96. package/lib/theme/ThemedImage/index.js +5 -7
  97. package/lib/theme/Toggle/index.js +41 -44
  98. package/lib/theme/Toggle/styles.module.css +91 -3
  99. package/lib/theme/UserPreferencesProvider/index.js +8 -3
  100. package/lib/theme/hooks/useHideableNavbar.js +14 -32
  101. package/lib/theme/hooks/useTheme.js +3 -5
  102. package/lib/theme/hooks/useWindowSize.js +33 -20
  103. package/lib/theme/prism-include-languages.js +4 -3
  104. package/lib/theme-classic.d.ts +806 -0
  105. package/lib/translations.js +4 -4
  106. package/lib/types.d.ts +0 -587
  107. package/lib/validateThemeConfig.js +230 -246
  108. package/lib-next/__tests__/validateThemeConfig.test.js +277 -3
  109. package/lib-next/admonitions.css +35 -0
  110. package/lib-next/deps.d.ts +13 -0
  111. package/lib-next/index.js +16 -10
  112. package/lib-next/prism-include-languages.js +0 -2
  113. package/lib-next/theme/AnnouncementBar/index.js +7 -12
  114. package/lib-next/theme/AnnouncementBar/styles.module.css +23 -32
  115. package/lib-next/theme/BackToTopButton/index.js +131 -0
  116. package/lib-next/theme/BackToTopButton/styles.module.css +42 -0
  117. package/lib-next/theme/BlogArchivePage/index.js +80 -0
  118. package/lib-next/theme/BlogLayout/index.js +40 -0
  119. package/lib-next/theme/BlogListPage/index.js +17 -25
  120. package/lib-next/theme/BlogPostAuthor/index.js +46 -0
  121. package/lib-next/theme/BlogPostAuthor/styles.module.css +12 -0
  122. package/lib-next/theme/BlogPostAuthors/index.js +34 -0
  123. package/lib-next/theme/BlogPostAuthors/styles.module.css +11 -0
  124. package/lib-next/theme/BlogPostItem/index.js +79 -86
  125. package/lib-next/theme/BlogPostPage/index.js +70 -35
  126. package/lib-next/theme/BlogSidebar/index.js +11 -13
  127. package/lib-next/theme/BlogSidebar/styles.module.css +2 -2
  128. package/lib-next/theme/BlogTagsListPage/index.js +14 -55
  129. package/lib-next/theme/BlogTagsPostsPage/index.js +29 -39
  130. package/lib-next/theme/CodeBlock/index.js +17 -149
  131. package/lib-next/theme/CodeBlock/styles.module.css +6 -9
  132. package/lib-next/theme/Details/index.js +20 -0
  133. package/lib-next/theme/Details/styles.module.css +13 -0
  134. package/lib-next/theme/DocCard/index.js +80 -0
  135. package/lib-next/theme/DocCard/styles.module.css +43 -0
  136. package/lib-next/theme/DocCardList/index.js +19 -0
  137. package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +49 -0
  138. package/lib-next/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  139. package/lib-next/theme/DocItem/index.js +40 -51
  140. package/lib-next/theme/DocItem/styles.module.css +5 -9
  141. package/lib-next/theme/DocItemFooter/index.js +79 -0
  142. package/lib-next/theme/DocItemFooter/styles.module.css +18 -0
  143. package/lib-next/theme/DocPage/index.js +46 -49
  144. package/lib-next/theme/DocPage/styles.module.css +5 -0
  145. package/lib-next/theme/DocPaginator/index.js +7 -11
  146. package/lib-next/theme/DocSidebar/index.js +65 -285
  147. package/lib-next/theme/DocSidebar/styles.module.css +0 -18
  148. package/lib-next/theme/DocSidebarItem/index.js +217 -0
  149. package/lib-next/theme/DocSidebarItem/styles.module.css +19 -0
  150. package/lib-next/theme/DocTagDocListPage/index.js +89 -0
  151. package/lib-next/theme/DocTagsListPage/index.js +38 -0
  152. package/lib-next/theme/DocVersionBadge/index.js +27 -0
  153. package/lib-next/theme/DocVersionBanner/index.js +28 -14
  154. package/lib-next/theme/EditThisPage/index.js +6 -1
  155. package/lib-next/theme/ErrorPageContent.js +35 -0
  156. package/lib-next/theme/Footer/index.js +17 -4
  157. package/lib-next/theme/Heading/index.js +25 -29
  158. package/lib-next/theme/Heading/styles.css +5 -6
  159. package/lib-next/theme/Heading/styles.module.css +9 -5
  160. package/lib-next/theme/IconArrow/index.js +2 -2
  161. package/lib-next/theme/IconClose/index.js +23 -0
  162. package/lib-next/theme/IconEdit/index.js +2 -2
  163. package/lib-next/theme/IconExternalLink/index.js +2 -2
  164. package/lib-next/theme/IconLanguage/index.js +2 -2
  165. package/lib-next/theme/IconMenu/index.js +2 -2
  166. package/lib-next/theme/LastUpdated/index.js +3 -2
  167. package/lib-next/theme/Layout/index.js +3 -1
  168. package/lib-next/theme/LayoutHead/index.js +18 -23
  169. package/lib-next/theme/LayoutProviders/index.js +9 -3
  170. package/lib-next/theme/Logo/index.js +25 -21
  171. package/lib-next/theme/MDXComponents/index.js +34 -7
  172. package/lib-next/theme/MDXComponents/styles.css +11 -0
  173. package/lib-next/theme/MDXPage/index.js +10 -2
  174. package/lib-next/theme/Navbar/index.js +193 -56
  175. package/lib-next/theme/Navbar/styles.module.css +10 -3
  176. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +45 -147
  177. package/lib-next/theme/NavbarItem/DocNavbarItem.js +7 -7
  178. package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +31 -19
  179. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +159 -0
  180. package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +4 -12
  181. package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  182. package/lib-next/theme/NavbarItem/index.js +25 -12
  183. package/lib-next/theme/{SearchMetadatas → SearchMetadata}/index.js +1 -1
  184. package/lib-next/theme/Seo/index.js +11 -7
  185. package/lib-next/theme/SkipToContent/index.js +3 -2
  186. package/lib-next/theme/TOC/index.js +12 -36
  187. package/lib-next/theme/TOC/styles.module.css +1 -1
  188. package/lib-next/theme/TOCCollapsible/index.js +54 -0
  189. package/lib-next/theme/TOCCollapsible/styles.module.css +50 -0
  190. package/lib-next/theme/TOCInline/index.js +10 -28
  191. package/lib-next/theme/TOCItems/index.js +85 -0
  192. package/lib-next/theme/Tabs/__tests__/index.test.js +142 -0
  193. package/lib-next/theme/Tabs/index.js +91 -43
  194. package/lib-next/theme/Tabs/styles.module.css +0 -13
  195. package/lib-next/theme/Tag/index.js +27 -0
  196. package/lib-next/theme/Tag/styles.module.css +70 -0
  197. package/lib-next/theme/TagsListByLetter/index.js +42 -0
  198. package/lib-next/theme/TagsListByLetter/styles.module.css +11 -0
  199. package/lib-next/theme/TagsListInline/index.js +31 -0
  200. package/lib-next/theme/TagsListInline/styles.module.css +15 -0
  201. package/lib-next/theme/ThemeProvider/index.js +10 -7
  202. package/lib-next/theme/ThemedImage/index.js +5 -5
  203. package/lib-next/theme/Toggle/index.js +34 -37
  204. package/lib-next/theme/Toggle/styles.module.css +91 -3
  205. package/lib-next/theme/UserPreferencesProvider/index.js +9 -6
  206. package/lib-next/theme/hooks/useHideableNavbar.js +31 -44
  207. package/lib-next/theme/hooks/useTheme.js +4 -5
  208. package/lib-next/theme/hooks/useWindowSize.js +34 -20
  209. package/lib-next/theme/prism-include-languages.js +2 -1
  210. package/lib-next/theme-classic.d.ts +806 -0
  211. package/lib-next/translations.js +6 -10
  212. package/lib-next/types.d.ts +0 -587
  213. package/lib-next/validateThemeConfig.js +141 -114
  214. package/package.json +28 -25
  215. package/src/__tests__/validateThemeConfig.test.js +277 -3
  216. package/src/admonitions.css +35 -0
  217. package/src/deps.d.ts +13 -0
  218. package/src/index.ts +23 -17
  219. package/src/{prism-include-languages.js → prism-include-languages.ts} +0 -0
  220. package/src/theme/AnnouncementBar/index.tsx +8 -12
  221. package/src/theme/AnnouncementBar/styles.module.css +23 -32
  222. package/src/theme/BackToTopButton/index.tsx +142 -0
  223. package/src/theme/BackToTopButton/styles.module.css +42 -0
  224. package/src/theme/BlogArchivePage/index.tsx +91 -0
  225. package/src/theme/BlogLayout/index.tsx +44 -0
  226. package/src/theme/BlogListPage/index.tsx +18 -25
  227. package/src/theme/BlogPostAuthor/index.tsx +49 -0
  228. package/src/theme/BlogPostAuthor/styles.module.css +12 -0
  229. package/src/theme/BlogPostAuthors/index.tsx +39 -0
  230. package/src/theme/BlogPostAuthors/styles.module.css +11 -0
  231. package/src/theme/BlogPostItem/index.tsx +70 -80
  232. package/src/theme/BlogPostPage/index.tsx +72 -35
  233. package/src/theme/BlogSidebar/index.tsx +11 -13
  234. package/src/theme/BlogSidebar/styles.module.css +2 -2
  235. package/src/theme/BlogTagsListPage/index.tsx +14 -57
  236. package/src/theme/BlogTagsPostsPage/index.tsx +29 -39
  237. package/src/theme/CodeBlock/index.tsx +21 -151
  238. package/src/theme/CodeBlock/styles.module.css +6 -9
  239. package/src/theme/Details/index.tsx +24 -0
  240. package/src/theme/Details/styles.module.css +13 -0
  241. package/src/theme/DocCard/index.tsx +100 -0
  242. package/src/theme/DocCard/styles.module.css +43 -0
  243. package/src/theme/DocCardList/index.tsx +27 -0
  244. package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +53 -0
  245. package/src/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  246. package/src/theme/DocItem/index.tsx +43 -51
  247. package/src/theme/DocItem/styles.module.css +5 -9
  248. package/src/theme/DocItemFooter/index.tsx +91 -0
  249. package/src/theme/DocItemFooter/styles.module.css +18 -0
  250. package/src/theme/DocPage/index.tsx +44 -42
  251. package/src/theme/DocPage/styles.module.css +5 -0
  252. package/src/theme/DocPaginator/index.tsx +9 -13
  253. package/src/theme/DocSidebar/index.tsx +76 -297
  254. package/src/theme/DocSidebar/styles.module.css +0 -18
  255. package/src/theme/DocSidebarItem/index.tsx +242 -0
  256. package/src/theme/DocSidebarItem/styles.module.css +19 -0
  257. package/src/theme/DocTagDocListPage/index.tsx +89 -0
  258. package/src/theme/DocTagsListPage/index.tsx +41 -0
  259. package/src/theme/DocVersionBadge/index.tsx +30 -0
  260. package/src/theme/DocVersionBanner/index.tsx +48 -21
  261. package/src/theme/EditThisPage/index.tsx +6 -1
  262. package/src/theme/ErrorPageContent.tsx +41 -0
  263. package/src/theme/Footer/index.tsx +20 -5
  264. package/src/theme/Heading/index.tsx +25 -31
  265. package/src/theme/Heading/styles.css +5 -6
  266. package/src/theme/Heading/styles.module.css +9 -5
  267. package/src/theme/IconArrow/index.tsx +2 -2
  268. package/src/theme/IconClose/index.tsx +26 -0
  269. package/src/theme/IconEdit/index.tsx +2 -2
  270. package/src/theme/IconExternalLink/index.tsx +2 -5
  271. package/src/theme/IconLanguage/index.tsx +2 -6
  272. package/src/theme/IconMenu/index.tsx +3 -3
  273. package/src/theme/LastUpdated/index.tsx +3 -2
  274. package/src/theme/Layout/index.tsx +3 -1
  275. package/src/theme/LayoutHead/index.tsx +18 -17
  276. package/src/theme/LayoutProviders/index.tsx +9 -3
  277. package/src/theme/Logo/index.tsx +21 -17
  278. package/src/theme/MDXComponents/index.tsx +39 -5
  279. package/src/theme/MDXComponents/styles.css +11 -0
  280. package/src/theme/MDXPage/index.tsx +10 -2
  281. package/src/theme/Navbar/index.tsx +203 -61
  282. package/src/theme/Navbar/styles.module.css +10 -3
  283. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +42 -154
  284. package/src/theme/NavbarItem/DocNavbarItem.tsx +12 -16
  285. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +33 -21
  286. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +7 -3
  287. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +181 -0
  288. package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +8 -9
  289. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  290. package/src/theme/NavbarItem/index.tsx +41 -16
  291. package/src/theme/{SearchMetadatas → SearchMetadata}/index.tsx +2 -2
  292. package/src/theme/Seo/index.tsx +7 -4
  293. package/src/theme/SkipToContent/index.tsx +3 -2
  294. package/src/theme/TOC/index.tsx +12 -41
  295. package/src/theme/TOC/styles.module.css +1 -1
  296. package/src/theme/TOCCollapsible/index.tsx +58 -0
  297. package/src/theme/TOCCollapsible/styles.module.css +50 -0
  298. package/src/theme/TOCInline/index.tsx +13 -32
  299. package/src/theme/TOCItems/index.tsx +96 -0
  300. package/src/theme/Tabs/__tests__/index.test.tsx +129 -0
  301. package/src/theme/Tabs/index.tsx +93 -49
  302. package/src/theme/Tabs/styles.module.css +0 -13
  303. package/src/theme/Tag/index.tsx +31 -0
  304. package/src/theme/Tag/styles.module.css +70 -0
  305. package/src/theme/TagsListByLetter/index.tsx +45 -0
  306. package/src/theme/TagsListByLetter/styles.module.css +11 -0
  307. package/src/theme/TagsListInline/index.tsx +35 -0
  308. package/src/theme/TagsListInline/styles.module.css +15 -0
  309. package/src/theme/ThemeProvider/index.tsx +6 -2
  310. package/src/theme/ThemedImage/index.tsx +5 -5
  311. package/src/theme/Toggle/index.tsx +36 -43
  312. package/src/theme/Toggle/styles.module.css +91 -3
  313. package/src/theme/UserPreferencesProvider/index.tsx +9 -6
  314. package/src/theme/hooks/useHideableNavbar.ts +32 -45
  315. package/src/theme/hooks/useTabGroupChoice.ts +2 -2
  316. package/src/theme/hooks/useTheme.ts +4 -5
  317. package/src/theme/hooks/useWindowSize.ts +38 -20
  318. package/src/theme/prism-include-languages.ts +3 -2
  319. package/src/theme-classic.d.ts +806 -0
  320. package/src/translations.ts +8 -10
  321. package/src/types.d.ts +0 -587
  322. package/src/{validateThemeConfig.js → validateThemeConfig.ts} +151 -94
  323. package/tsconfig.json +1 -2
  324. package/codeTranslations/README.md +0 -20
  325. package/codeTranslations/ar.json +0 -57
  326. package/codeTranslations/base.json +0 -112
  327. package/codeTranslations/bn.json +0 -56
  328. package/codeTranslations/da.json +0 -57
  329. package/codeTranslations/de.json +0 -57
  330. package/codeTranslations/es.json +0 -57
  331. package/codeTranslations/fa.json +0 -57
  332. package/codeTranslations/fil.json +0 -57
  333. package/codeTranslations/fr.json +0 -57
  334. package/codeTranslations/he.json +0 -57
  335. package/codeTranslations/hi.json +0 -57
  336. package/codeTranslations/ja.json +0 -57
  337. package/codeTranslations/ko.json +0 -57
  338. package/codeTranslations/pl.json +0 -57
  339. package/codeTranslations/pt-BR.json +0 -57
  340. package/codeTranslations/pt-PT.json +0 -57
  341. package/codeTranslations/ru.json +0 -57
  342. package/codeTranslations/tr.json +0 -57
  343. package/codeTranslations/vi.json +0 -57
  344. package/codeTranslations/zh-Hans.json +0 -57
  345. package/codeTranslations/zh-Hant.json +0 -57
  346. package/lib/theme/Toggle/styles.css +0 -103
  347. package/lib/theme/hooks/useContextualSearchFilters.js +0 -47
  348. package/lib/theme/hooks/useScrollPosition.js +0 -49
  349. package/lib/theme/hooks/useTOCHighlight.js +0 -87
  350. package/lib-next/theme/Toggle/styles.css +0 -103
  351. package/lib-next/theme/hooks/useContextualSearchFilters.js +0 -41
  352. package/lib-next/theme/hooks/useScrollPosition.js +0 -38
  353. package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
  354. package/src/theme/Toggle/styles.css +0 -103
  355. package/src/theme/hooks/useContextualSearchFilters.ts +0 -52
  356. package/src/theme/hooks/useScrollPosition.ts +0 -45
  357. package/src/theme/hooks/useTOCHighlight.ts +0 -98
  358. package/update-code-translations.js +0 -240
  359. package/update-code-translations.test.js +0 -33
@@ -7,6 +7,7 @@
7
7
 
8
8
  import React from 'react';
9
9
  import clsx from 'clsx';
10
+ import ErrorBoundary from '@docusaurus/ErrorBoundary';
10
11
  import SkipToContent from '@theme/SkipToContent';
11
12
  import AnnouncementBar from '@theme/AnnouncementBar';
12
13
  import Navbar from '@theme/Navbar';
@@ -16,6 +17,7 @@ import LayoutHead from '@theme/LayoutHead';
16
17
  import type {Props} from '@theme/Layout';
17
18
  import useKeyboardNavigation from '@theme/hooks/useKeyboardNavigation';
18
19
  import {ThemeClassNames} from '@docusaurus/theme-common';
20
+ import ErrorPageContent from '@theme/ErrorPageContent';
19
21
  import './styles.css';
20
22
 
21
23
  function Layout(props: Props): JSX.Element {
@@ -39,7 +41,7 @@ function Layout(props: Props): JSX.Element {
39
41
  wrapperClassName,
40
42
  pageClassName,
41
43
  )}>
42
- {children}
44
+ <ErrorBoundary fallback={ErrorPageContent}>{children}</ErrorBoundary>
43
45
  </div>
44
46
 
45
47
  {!noFooter && <Footer />}
@@ -10,12 +10,13 @@ import Head from '@docusaurus/Head';
10
10
  import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
11
11
  import useBaseUrl from '@docusaurus/useBaseUrl';
12
12
  import type {Props} from '@theme/Layout';
13
- import SearchMetadatas from '@theme/SearchMetadatas';
13
+ import SearchMetadata from '@theme/SearchMetadata';
14
14
  import Seo from '@theme/Seo';
15
15
  import {
16
16
  DEFAULT_SEARCH_TAG,
17
17
  useTitleFormatter,
18
18
  useAlternatePageUtils,
19
+ useThemeConfig,
19
20
  } from '@docusaurus/theme-common';
20
21
  import {useLocation} from '@docusaurus/router';
21
22
 
@@ -83,13 +84,11 @@ function CanonicalUrlHeaders({permalink}: {permalink?: string}) {
83
84
 
84
85
  export default function LayoutHead(props: Props): JSX.Element {
85
86
  const {
86
- siteConfig: {
87
- favicon,
88
- themeConfig: {metadatas, image: defaultImage},
89
- },
87
+ siteConfig: {favicon},
90
88
  i18n: {currentLocale, localeConfigs},
91
89
  } = useDocusaurusContext();
92
- const {title, description, image, keywords, searchMetadatas} = props;
90
+ const {metadata, image: defaultImage} = useThemeConfig();
91
+ const {title, description, image, keywords, searchMetadata} = props;
93
92
  const faviconUrl = useBaseUrl(favicon);
94
93
  const pageTitle = useTitleFormatter(title);
95
94
 
@@ -102,36 +101,38 @@ export default function LayoutHead(props: Props): JSX.Element {
102
101
  <>
103
102
  <Head>
104
103
  <html lang={htmlLang} dir={htmlDir} />
105
- {favicon && <link rel="shortcut icon" href={faviconUrl} />}
104
+ {favicon && <link rel="icon" href={faviconUrl} />}
106
105
  <title>{pageTitle}</title>
107
106
  <meta property="og:title" content={pageTitle} />
108
- {image ||
109
- (defaultImage && (
110
- <meta name="twitter:card" content="summary_large_image" />
111
- ))}
107
+ <meta name="twitter:card" content="summary_large_image" />
112
108
  </Head>
113
109
 
114
- <Seo {...{description, keywords, image}} />
110
+ {/* image can override the default image */}
111
+ {defaultImage && <Seo image={defaultImage} />}
112
+ {image && <Seo image={image} />}
113
+
114
+ <Seo description={description} keywords={keywords} />
115
115
 
116
116
  <CanonicalUrlHeaders />
117
117
 
118
118
  <AlternateLangHeaders />
119
119
 
120
- <SearchMetadatas
120
+ <SearchMetadata
121
121
  tag={DEFAULT_SEARCH_TAG}
122
122
  locale={currentLocale}
123
- {...searchMetadatas}
123
+ {...searchMetadata}
124
124
  />
125
125
 
126
126
  <Head
127
127
  // it's important to have an additional <Head> element here,
128
128
  // as it allows react-helmet to override values set in previous <Head>
129
- // ie we can override default metadatas such as "twitter:card"
129
+ // ie we can override default metadata such as "twitter:card"
130
130
  // In same Head, the same meta would appear twice instead of overriding
131
131
  // See react-helmet doc
132
132
  >
133
- {metadatas.map((metadata, i) => (
134
- <meta key={`metadata_${i}`} {...metadata} />
133
+ {/* Yes, "metadatum" is the grammatically correct term */}
134
+ {metadata.map((metadatum, i) => (
135
+ <meta key={`metadata_${i}`} {...metadatum} />
135
136
  ))}
136
137
  </Head>
137
138
  </>
@@ -11,6 +11,8 @@ import UserPreferencesProvider from '@theme/UserPreferencesProvider';
11
11
  import {
12
12
  AnnouncementBarProvider,
13
13
  DocsPreferredVersionContextProvider,
14
+ MobileSecondaryMenuProvider,
15
+ ScrollControllerProvider,
14
16
  } from '@docusaurus/theme-common';
15
17
  import type {Props} from '@theme/LayoutProviders';
16
18
 
@@ -19,9 +21,13 @@ export default function LayoutProviders({children}: Props): JSX.Element {
19
21
  <ThemeProvider>
20
22
  <AnnouncementBarProvider>
21
23
  <UserPreferencesProvider>
22
- <DocsPreferredVersionContextProvider>
23
- {children}
24
- </DocsPreferredVersionContextProvider>
24
+ <ScrollControllerProvider>
25
+ <DocsPreferredVersionContextProvider>
26
+ <MobileSecondaryMenuProvider>
27
+ {children}
28
+ </MobileSecondaryMenuProvider>
29
+ </DocsPreferredVersionContextProvider>
30
+ </ScrollControllerProvider>
25
31
  </UserPreferencesProvider>
26
32
  </AnnouncementBarProvider>
27
33
  </ThemeProvider>
@@ -12,17 +12,15 @@ import Link from '@docusaurus/Link';
12
12
  import ThemedImage from '@theme/ThemedImage';
13
13
  import useBaseUrl from '@docusaurus/useBaseUrl';
14
14
  import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
15
+ import {useThemeConfig} from '@docusaurus/theme-common';
15
16
 
16
- const Logo = (props: Props): JSX.Element => {
17
+ function Logo(props: Props): JSX.Element {
17
18
  const {
18
- siteConfig: {
19
- title,
20
- themeConfig: {
21
- navbar: {title: navbarTitle, logo = {src: ''}},
22
- },
23
- },
24
- isClient,
19
+ siteConfig: {title},
25
20
  } = useDocusaurusContext();
21
+ const {
22
+ navbar: {title: navbarTitle, logo = {src: ''}},
23
+ } = useThemeConfig();
26
24
 
27
25
  const {imageClassName, titleClassName, ...propsRest} = props;
28
26
  const logoLink = useBaseUrl(logo.href || '/');
@@ -30,23 +28,29 @@ const Logo = (props: Props): JSX.Element => {
30
28
  light: useBaseUrl(logo.src),
31
29
  dark: useBaseUrl(logo.srcDark || logo.src),
32
30
  };
31
+ const themedImage = (
32
+ <ThemedImage
33
+ sources={sources}
34
+ height={logo.height}
35
+ width={logo.width}
36
+ alt={logo.alt || navbarTitle || title}
37
+ />
38
+ );
33
39
 
34
40
  return (
35
41
  <Link
36
42
  to={logoLink}
37
43
  {...propsRest}
38
44
  {...(logo.target && {target: logo.target})}>
39
- {logo.src && (
40
- <ThemedImage
41
- key={isClient}
42
- className={imageClassName}
43
- sources={sources}
44
- alt={logo.alt || navbarTitle || title}
45
- />
46
- )}
45
+ {logo.src &&
46
+ (imageClassName ? (
47
+ <div className={imageClassName}>{themedImage}</div>
48
+ ) : (
49
+ themedImage
50
+ ))}
47
51
  {navbarTitle != null && <b className={titleClassName}>{navbarTitle}</b>}
48
52
  </Link>
49
53
  );
50
- };
54
+ }
51
55
 
52
56
  export default Logo;
@@ -5,13 +5,33 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import React, {isValidElement} from 'react';
8
+ import React, {ComponentProps, isValidElement, ReactElement} from 'react';
9
+ import Head from '@docusaurus/Head';
9
10
  import Link from '@docusaurus/Link';
10
11
  import CodeBlock, {Props} from '@theme/CodeBlock';
11
12
  import Heading from '@theme/Heading';
13
+ import Details from '@theme/Details';
12
14
  import type {MDXComponentsObject} from '@theme/MDXComponents';
13
15
 
16
+ import './styles.css';
17
+
18
+ // MDX elements are wrapped through the MDX pragma
19
+ // In some cases (notably usage with Head/Helmet) we need to unwrap those elements.
20
+ function unwrapMDXElement(element: ReactElement) {
21
+ if (element?.props?.mdxType && element?.props?.originalType) {
22
+ const {mdxType, originalType, ...newProps} = element.props;
23
+ return React.createElement(element.props.originalType, newProps);
24
+ }
25
+ return element;
26
+ }
27
+
14
28
  const MDXComponents: MDXComponentsObject = {
29
+ head: (props) => {
30
+ const unwrappedChildren = React.Children.map(props.children, (child) =>
31
+ unwrapMDXElement(child as ReactElement),
32
+ );
33
+ return <Head {...props}>{unwrappedChildren}</Head>;
34
+ },
15
35
  code: (props) => {
16
36
  const {children} = props;
17
37
 
@@ -29,21 +49,35 @@ const MDXComponents: MDXComponentsObject = {
29
49
  },
30
50
  a: (props) => <Link {...props} />,
31
51
  pre: (props) => {
32
- const {children} = props as {children: any};
52
+ const {children} = props;
33
53
 
34
54
  // See comment for `code` above
35
- if (isValidElement(children?.props?.children)) {
36
- return children?.props.children;
55
+ if (isValidElement(children) && isValidElement(children?.props?.children)) {
56
+ return children.props.children;
37
57
  }
38
58
 
39
59
  return (
40
60
  <CodeBlock
41
61
  {...((isValidElement(children)
42
62
  ? children?.props
43
- : {children}) as Props)}
63
+ : {...props}) as Props)}
44
64
  />
45
65
  );
46
66
  },
67
+ details: (props): JSX.Element => {
68
+ const items = React.Children.toArray(props.children) as ReactElement[];
69
+ // Split summary item from the rest to pass it as a separate prop to the Detais theme component
70
+ const summary: ReactElement<ComponentProps<'summary'>> = items.find(
71
+ (item) => item?.props?.mdxType === 'summary',
72
+ )!;
73
+ const children = <>{items.filter((item) => item !== summary)}</>;
74
+
75
+ return (
76
+ <Details {...props} summary={summary}>
77
+ {children}
78
+ </Details>
79
+ );
80
+ },
47
81
  h1: Heading('h1'),
48
82
  h2: Heading('h2'),
49
83
  h3: Heading('h3'),
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ ul.contains-task-list {
9
+ padding-left: 0;
10
+ list-style: none;
11
+ }
@@ -18,7 +18,11 @@ import styles from './styles.module.css';
18
18
 
19
19
  function MDXPage(props: Props): JSX.Element {
20
20
  const {content: MDXPageContent} = props;
21
- const {frontMatter, metadata} = MDXPageContent;
21
+ const {
22
+ // TODO this frontmatter is not validated/normalized, it's the raw user-provided one. We should expose normalized one too!
23
+ frontMatter,
24
+ metadata,
25
+ } = MDXPageContent;
22
26
 
23
27
  const {
24
28
  title,
@@ -44,7 +48,11 @@ function MDXPage(props: Props): JSX.Element {
44
48
  </div>
45
49
  {!hideTableOfContents && MDXPageContent.toc && (
46
50
  <div className="col col--2">
47
- <TOC toc={MDXPageContent.toc} />
51
+ <TOC
52
+ toc={MDXPageContent.toc}
53
+ minHeadingLevel={frontMatter.toc_min_heading_level}
54
+ maxHeadingLevel={frontMatter.toc_max_heading_level}
55
+ />
48
56
  </div>
49
57
  )}
50
58
  </div>
@@ -7,26 +7,38 @@
7
7
 
8
8
  import React, {useCallback, useState, useEffect} from 'react';
9
9
  import clsx from 'clsx';
10
-
10
+ import Translate from '@docusaurus/Translate';
11
11
  import SearchBar from '@theme/SearchBar';
12
12
  import Toggle from '@theme/Toggle';
13
13
  import useThemeContext from '@theme/hooks/useThemeContext';
14
- import {useThemeConfig} from '@docusaurus/theme-common';
14
+ import {
15
+ useThemeConfig,
16
+ useMobileSecondaryMenuRenderer,
17
+ usePrevious,
18
+ useHistoryPopHandler,
19
+ } from '@docusaurus/theme-common';
15
20
  import useHideableNavbar from '@theme/hooks/useHideableNavbar';
16
21
  import useLockBodyScroll from '@theme/hooks/useLockBodyScroll';
17
- import useWindowSize, {windowSizes} from '@theme/hooks/useWindowSize';
18
- import NavbarItem from '@theme/NavbarItem';
22
+ import useWindowSize from '@theme/hooks/useWindowSize';
23
+ import {useActivePlugin} from '@theme/hooks/useDocs';
24
+ import NavbarItem, {Props as NavbarItemConfig} from '@theme/NavbarItem';
19
25
  import Logo from '@theme/Logo';
20
26
  import IconMenu from '@theme/IconMenu';
27
+ import IconClose from '@theme/IconClose';
21
28
 
22
29
  import styles from './styles.module.css';
23
30
 
24
31
  // retrocompatible with v1
25
32
  const DefaultNavItemPosition = 'right';
26
33
 
34
+ function useNavbarItems() {
35
+ // TODO temporary casting until ThemeConfig type is improved
36
+ return useThemeConfig().navbar.items as NavbarItemConfig[];
37
+ }
38
+
27
39
  // If split links by left/right
28
40
  // if position is unspecified, fallback to right (as v1)
29
- function splitNavItemsByPosition(items) {
41
+ function splitNavItemsByPosition(items: NavbarItemConfig[]) {
30
42
  const leftItems = items.filter(
31
43
  (item) => (item.position ?? DefaultNavItemPosition) === 'left',
32
44
  );
@@ -39,37 +51,186 @@ function splitNavItemsByPosition(items) {
39
51
  };
40
52
  }
41
53
 
42
- function Navbar(): JSX.Element {
43
- const {
44
- navbar: {items, hideOnScroll, style},
45
- colorMode: {disableSwitch: disableColorModeSwitch},
46
- } = useThemeConfig();
47
- const [sidebarShown, setSidebarShown] = useState(false);
48
- const {isDarkTheme, setLightTheme, setDarkTheme} = useThemeContext();
49
- const {navbarRef, isNavbarVisible} = useHideableNavbar(hideOnScroll);
54
+ function useMobileSidebar() {
55
+ const windowSize = useWindowSize();
50
56
 
51
- useLockBodyScroll(sidebarShown);
57
+ // Mobile sidebar not visible on hydration: can avoid SSR rendering
58
+ const shouldRender = windowSize === 'mobile'; // || windowSize === 'ssr';
52
59
 
53
- const showSidebar = useCallback(() => {
54
- setSidebarShown(true);
55
- }, [setSidebarShown]);
56
- const hideSidebar = useCallback(() => {
57
- setSidebarShown(false);
58
- }, [setSidebarShown]);
60
+ const [shown, setShown] = useState(false);
61
+
62
+ // Close mobile sidebar on navigation pop
63
+ // Most likely firing when using the Android back button (but not only)
64
+ useHistoryPopHandler(() => {
65
+ if (shown) {
66
+ setShown(false);
67
+ // Should we prevent the navigation here?
68
+ // See https://github.com/facebook/docusaurus/pull/5462#issuecomment-911699846
69
+ return false; // prevent pop navigation
70
+ }
71
+ return undefined;
72
+ });
73
+
74
+ const toggle = useCallback(() => {
75
+ setShown((s) => !s);
76
+ }, []);
77
+
78
+ useEffect(() => {
79
+ if (windowSize === 'desktop') {
80
+ setShown(false);
81
+ }
82
+ }, [windowSize]);
83
+
84
+ return {shouldRender, toggle, shown};
85
+ }
59
86
 
60
- const onToggleChange = useCallback(
87
+ function useColorModeToggle() {
88
+ const {
89
+ colorMode: {disableSwitch},
90
+ } = useThemeConfig();
91
+ const {isDarkTheme, setLightTheme, setDarkTheme} = useThemeContext();
92
+ const toggle = useCallback(
61
93
  (e) => (e.target.checked ? setDarkTheme() : setLightTheme()),
62
94
  [setLightTheme, setDarkTheme],
63
95
  );
96
+ return {isDarkTheme, toggle, disabled: disableSwitch};
97
+ }
64
98
 
65
- const windowSize = useWindowSize();
99
+ function useSecondaryMenu({
100
+ sidebarShown,
101
+ toggleSidebar,
102
+ }: NavbarMobileSidebarProps) {
103
+ const content = useMobileSecondaryMenuRenderer()?.({
104
+ toggleSidebar,
105
+ });
106
+ const previousContent = usePrevious(content);
66
107
 
108
+ const [shown, setShown] = useState<boolean>(
109
+ () =>
110
+ // /!\ content is set with useEffect,
111
+ // so it's not available on mount anyway
112
+ // "return !!content" => always returns false
113
+ false,
114
+ );
115
+
116
+ // When content is become available for the first time (set in useEffect)
117
+ // we set this content to be shown!
67
118
  useEffect(() => {
68
- if (windowSize === windowSizes.desktop) {
69
- setSidebarShown(false);
119
+ const contentBecameAvailable = content && !previousContent;
120
+ if (contentBecameAvailable) {
121
+ setShown(true);
70
122
  }
71
- }, [windowSize]);
123
+ }, [content, previousContent]);
124
+
125
+ const hasContent = !!content;
126
+
127
+ // On sidebar close, secondary menu is set to be shown on next re-opening
128
+ // (if any secondary menu content available)
129
+ useEffect(() => {
130
+ if (!hasContent) {
131
+ setShown(false);
132
+ return;
133
+ }
134
+ if (!sidebarShown) {
135
+ setShown(true);
136
+ }
137
+ }, [sidebarShown, hasContent]);
138
+
139
+ const hide = useCallback(() => {
140
+ setShown(false);
141
+ }, []);
142
+
143
+ return {shown, hide, content};
144
+ }
145
+
146
+ type NavbarMobileSidebarProps = {
147
+ sidebarShown: boolean;
148
+ toggleSidebar: () => void;
149
+ };
150
+
151
+ function NavbarMobileSidebar({
152
+ sidebarShown,
153
+ toggleSidebar,
154
+ }: NavbarMobileSidebarProps) {
155
+ useLockBodyScroll(sidebarShown);
156
+ const items = useNavbarItems();
157
+
158
+ const colorModeToggle = useColorModeToggle();
159
+
160
+ const secondaryMenu = useSecondaryMenu({
161
+ sidebarShown,
162
+ toggleSidebar,
163
+ });
164
+
165
+ return (
166
+ <div className="navbar-sidebar">
167
+ <div className="navbar-sidebar__brand">
168
+ <Logo
169
+ className="navbar__brand"
170
+ imageClassName="navbar__logo"
171
+ titleClassName="navbar__title"
172
+ />
173
+ {!colorModeToggle.disabled && (
174
+ <Toggle
175
+ className={styles.navbarSidebarToggle}
176
+ checked={colorModeToggle.isDarkTheme}
177
+ onChange={colorModeToggle.toggle}
178
+ />
179
+ )}
180
+ <button
181
+ type="button"
182
+ className="clean-btn navbar-sidebar__close"
183
+ onClick={toggleSidebar}>
184
+ <IconClose
185
+ color="var(--ifm-color-emphasis-600)"
186
+ className={styles.navbarSidebarCloseSvg}
187
+ />
188
+ </button>
189
+ </div>
72
190
 
191
+ <div
192
+ className={clsx('navbar-sidebar__items', {
193
+ 'navbar-sidebar__items--show-secondary': secondaryMenu.shown,
194
+ })}>
195
+ <div className="navbar-sidebar__item menu">
196
+ <ul className="menu__list">
197
+ {items.map((item, i) => (
198
+ <NavbarItem mobile {...item} onClick={toggleSidebar} key={i} />
199
+ ))}
200
+ </ul>
201
+ </div>
202
+
203
+ <div className="navbar-sidebar__item menu">
204
+ {items.length > 0 && (
205
+ <button
206
+ type="button"
207
+ className="clean-btn navbar-sidebar__back"
208
+ onClick={secondaryMenu.hide}>
209
+ <Translate
210
+ id="theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel"
211
+ 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)">
212
+ ← Back to main menu
213
+ </Translate>
214
+ </button>
215
+ )}
216
+ {secondaryMenu.content}
217
+ </div>
218
+ </div>
219
+ </div>
220
+ );
221
+ }
222
+
223
+ function Navbar(): JSX.Element {
224
+ const {
225
+ navbar: {hideOnScroll, style},
226
+ } = useThemeConfig();
227
+
228
+ const mobileSidebar = useMobileSidebar();
229
+ const colorModeToggle = useColorModeToggle();
230
+ const activeDocPlugin = useActivePlugin();
231
+ const {navbarRef, isNavbarVisible} = useHideableNavbar(hideOnScroll);
232
+
233
+ const items = useNavbarItems();
73
234
  const hasSearchNavbarItem = items.some((item) => item.type === 'search');
74
235
  const {leftItems, rightItems} = splitNavItemsByPosition(items);
75
236
 
@@ -79,20 +240,20 @@ function Navbar(): JSX.Element {
79
240
  className={clsx('navbar', 'navbar--fixed-top', {
80
241
  'navbar--dark': style === 'dark',
81
242
  'navbar--primary': style === 'primary',
82
- 'navbar-sidebar--show': sidebarShown,
243
+ 'navbar-sidebar--show': mobileSidebar.shown,
83
244
  [styles.navbarHideable]: hideOnScroll,
84
245
  [styles.navbarHidden]: hideOnScroll && !isNavbarVisible,
85
246
  })}>
86
247
  <div className="navbar__inner">
87
248
  <div className="navbar__items">
88
- {items != null && items.length !== 0 && (
249
+ {(items?.length > 0 || activeDocPlugin) && (
89
250
  <button
90
251
  aria-label="Navigation bar toggle"
91
252
  className="navbar__toggle clean-btn"
92
253
  type="button"
93
254
  tabIndex={0}
94
- onClick={showSidebar}
95
- onKeyDown={showSidebar}>
255
+ onClick={mobileSidebar.toggle}
256
+ onKeyDown={mobileSidebar.toggle}>
96
257
  <IconMenu />
97
258
  </button>
98
259
  )}
@@ -109,48 +270,29 @@ function Navbar(): JSX.Element {
109
270
  {rightItems.map((item, i) => (
110
271
  <NavbarItem {...item} key={i} />
111
272
  ))}
112
- {!disableColorModeSwitch && (
273
+ {!colorModeToggle.disabled && (
113
274
  <Toggle
114
- className={styles.displayOnlyInLargeViewport}
115
- checked={isDarkTheme}
116
- onChange={onToggleChange}
275
+ className={styles.toggle}
276
+ checked={colorModeToggle.isDarkTheme}
277
+ onChange={colorModeToggle.toggle}
117
278
  />
118
279
  )}
119
280
  {!hasSearchNavbarItem && <SearchBar />}
120
281
  </div>
121
282
  </div>
283
+
122
284
  <div
123
285
  role="presentation"
124
286
  className="navbar-sidebar__backdrop"
125
- onClick={hideSidebar}
287
+ onClick={mobileSidebar.toggle}
126
288
  />
127
- <div className="navbar-sidebar">
128
- <div className="navbar-sidebar__brand">
129
- <Logo
130
- className="navbar__brand"
131
- imageClassName="navbar__logo"
132
- titleClassName="navbar__title"
133
- onClick={hideSidebar}
134
- />
135
- {!disableColorModeSwitch && sidebarShown && (
136
- <Toggle checked={isDarkTheme} onChange={onToggleChange} />
137
- )}
138
- </div>
139
- <div className="navbar-sidebar__items">
140
- <div className="menu">
141
- <ul className="menu__list">
142
- {items.map((item, i) => (
143
- <NavbarItem
144
- mobile
145
- {...(item as any)} // TODO fix typing
146
- onClick={hideSidebar}
147
- key={i}
148
- />
149
- ))}
150
- </ul>
151
- </div>
152
- </div>
153
- </div>
289
+
290
+ {mobileSidebar.shouldRender && (
291
+ <NavbarMobileSidebar
292
+ sidebarShown={mobileSidebar.shown}
293
+ toggleSidebar={mobileSidebar.toggle}
294
+ />
295
+ )}
154
296
  </nav>
155
297
  );
156
298
  }
@@ -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
 
@@ -18,3 +21,7 @@
18
21
  .navbarHidden {
19
22
  transform: translate3d(0, calc(-100% - 2px), 0);
20
23
  }
24
+
25
+ .navbarSidebarToggle {
26
+ margin-right: 1rem;
27
+ }