@docusaurus/theme-classic 2.0.0-beta.15a2b59f9 → 2.0.0-beta.17

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-next/theme/Toggle/styles.module.css → lib/deps.d.ts} +5 -9
  4. package/lib/getSwizzleConfig.js +125 -0
  5. package/lib/index.js +36 -41
  6. package/lib/prism-include-languages.js +9 -5
  7. package/lib/theme-classic.d.ts +771 -0
  8. package/lib/translations.js +40 -34
  9. package/lib/types.d.ts +0 -587
  10. package/lib/validateThemeConfig.js +242 -250
  11. package/lib-next/theme/Admonition/index.js +101 -0
  12. package/lib-next/theme/AnnouncementBar/index.js +8 -16
  13. package/lib-next/theme/AnnouncementBar/styles.module.css +23 -32
  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 +52 -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/{src/theme/Toggle → lib-next/theme/BlogPostAuthors}/styles.module.css +11 -7
  24. package/lib-next/theme/BlogPostItem/index.js +94 -96
  25. package/lib-next/theme/BlogPostPage/index.js +75 -39
  26. package/lib-next/theme/BlogPostPaginator/index.js +12 -19
  27. package/lib-next/theme/BlogSidebar/index.js +11 -13
  28. package/lib-next/theme/BlogSidebar/styles.module.css +4 -2
  29. package/lib-next/theme/BlogTagsListPage/index.js +15 -59
  30. package/lib-next/theme/BlogTagsPostsPage/index.js +33 -41
  31. package/lib-next/theme/CodeBlock/index.js +64 -154
  32. package/lib-next/theme/CodeBlock/styles.module.css +17 -9
  33. package/lib-next/theme/ColorModeToggle/index.js +83 -0
  34. package/lib-next/theme/ColorModeToggle/styles.module.css +51 -0
  35. package/lib-next/theme/Details/index.js +21 -0
  36. package/lib-next/theme/Details/styles.module.css +13 -0
  37. package/lib-next/theme/DocBreadcrumbs/index.js +76 -0
  38. package/lib-next/theme/DocBreadcrumbs/styles.module.css +26 -0
  39. package/lib-next/theme/DocCard/index.js +91 -0
  40. package/lib-next/theme/DocCard/styles.module.css +43 -0
  41. package/lib-next/theme/DocCardList/index.js +19 -0
  42. package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +54 -0
  43. package/lib-next/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  44. package/lib-next/theme/DocItem/index.js +53 -58
  45. package/lib-next/theme/DocItem/styles.module.css +6 -10
  46. package/lib-next/theme/DocItemFooter/index.js +79 -0
  47. package/{lib/theme/DocItem → lib-next/theme/DocItemFooter}/styles.module.css +1 -9
  48. package/lib-next/theme/DocPage/index.js +54 -55
  49. package/lib-next/theme/DocPage/styles.module.css +9 -3
  50. package/lib-next/theme/DocPaginator/index.js +15 -24
  51. package/lib-next/theme/DocSidebar/index.js +65 -286
  52. package/lib-next/theme/DocSidebar/styles.module.css +5 -22
  53. package/lib-next/theme/DocSidebarItem/index.js +264 -0
  54. package/{lib/theme/BlogPostItem → lib-next/theme/DocSidebarItem}/styles.module.css +5 -10
  55. package/lib-next/theme/DocSidebarItems/index.js +28 -0
  56. package/lib-next/theme/DocTagDocListPage/index.js +89 -0
  57. package/lib-next/theme/DocTagsListPage/index.js +35 -0
  58. package/lib-next/theme/DocVersionBadge/index.js +34 -0
  59. package/lib-next/theme/DocVersionBanner/index.js +32 -15
  60. package/lib-next/theme/EditThisPage/index.js +6 -1
  61. package/lib-next/theme/ErrorPageContent.js +35 -0
  62. package/lib-next/theme/Footer/index.js +95 -40
  63. package/lib-next/theme/Footer/styles.module.css +2 -1
  64. package/lib-next/theme/Heading/index.js +39 -48
  65. package/lib-next/theme/Heading/styles.module.css +25 -5
  66. package/lib-next/theme/IconArrow/index.js +2 -5
  67. package/lib-next/theme/IconClose/index.js +23 -0
  68. package/lib-next/theme/IconDarkMode/index.js +17 -0
  69. package/lib-next/theme/IconEdit/index.js +2 -5
  70. package/lib-next/theme/IconExternalLink/index.js +2 -5
  71. package/lib-next/theme/IconLanguage/index.js +5 -8
  72. package/lib-next/theme/IconLightMode/index.js +17 -0
  73. package/lib-next/theme/IconMenu/index.js +7 -5
  74. package/lib-next/theme/LastUpdated/index.js +3 -2
  75. package/lib-next/theme/Layout/index.js +5 -7
  76. package/lib-next/theme/LayoutHead/index.js +27 -32
  77. package/lib-next/theme/LayoutProviders/index.js +15 -9
  78. package/lib-next/theme/Logo/index.js +25 -24
  79. package/lib-next/theme/MDXComponents/index.js +59 -30
  80. package/{src/theme/hooks → lib-next/theme/MDXComponents}/styles.css +7 -2
  81. package/lib-next/theme/MDXPage/index.js +10 -12
  82. package/lib-next/theme/Navbar/index.js +199 -64
  83. package/lib-next/theme/Navbar/styles.module.css +10 -3
  84. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +35 -201
  85. package/lib-next/theme/NavbarItem/DocNavbarItem.js +11 -8
  86. package/lib-next/theme/NavbarItem/DocSidebarNavbarItem.js +73 -0
  87. package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +34 -20
  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/theme/hooks/styles.css → lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css} +3 -2
  92. package/lib-next/theme/NavbarItem/NavbarNavLink.js +70 -0
  93. package/lib-next/theme/NavbarItem/index.js +26 -14
  94. package/lib-next/theme/{UserPreferencesContext.js → NavbarItem/utils.js} +3 -3
  95. package/lib-next/theme/NotFound.js +1 -4
  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 +34 -0
  99. package/lib-next/theme/Seo/index.js +11 -7
  100. package/lib-next/theme/SkipToContent/index.js +3 -5
  101. package/lib-next/theme/SkipToContent/styles.module.css +7 -0
  102. package/lib-next/theme/TOC/index.js +12 -39
  103. package/lib-next/theme/TOC/styles.module.css +1 -1
  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/{hooks/styles.css → TagsListByLetter/styles.module.css} +3 -2
  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 +7 -10
  119. package/lib-next/theme/ThemedImage/styles.module.css +2 -2
  120. package/lib-next/theme/prism-include-languages.js +17 -15
  121. package/package.json +31 -31
  122. package/src/admonitions.css +35 -0
  123. package/src/deps.d.ts +13 -0
  124. package/src/getSwizzleConfig.ts +123 -0
  125. package/src/index.ts +39 -61
  126. package/{lib-next/prism-include-languages.js → src/prism-include-languages.ts} +0 -0
  127. package/src/theme/Admonition/index.tsx +106 -0
  128. package/src/theme/AnnouncementBar/index.tsx +9 -15
  129. package/src/theme/AnnouncementBar/styles.module.css +23 -32
  130. package/src/theme/BackToTopButton/index.tsx +143 -0
  131. package/src/theme/BackToTopButton/styles.module.css +44 -0
  132. package/src/theme/BlogArchivePage/index.tsx +91 -0
  133. package/src/theme/BlogLayout/index.tsx +42 -0
  134. package/src/theme/BlogListPage/index.tsx +19 -28
  135. package/src/theme/BlogListPaginator/index.tsx +13 -15
  136. package/src/theme/BlogPostAuthor/index.tsx +54 -0
  137. package/{lib/theme/MDXPage → src/theme/BlogPostAuthor}/styles.module.css +4 -2
  138. package/src/theme/BlogPostAuthors/index.tsx +49 -0
  139. package/src/theme/BlogPostAuthors/styles.module.css +21 -0
  140. package/src/theme/BlogPostItem/index.tsx +84 -90
  141. package/src/theme/BlogPostPage/index.tsx +77 -38
  142. package/src/theme/BlogPostPaginator/index.tsx +12 -18
  143. package/src/theme/BlogSidebar/index.tsx +11 -13
  144. package/src/theme/BlogSidebar/styles.module.css +4 -2
  145. package/src/theme/BlogTagsListPage/index.tsx +15 -60
  146. package/src/theme/BlogTagsPostsPage/index.tsx +32 -40
  147. package/src/theme/CodeBlock/index.tsx +68 -156
  148. package/src/theme/CodeBlock/styles.module.css +17 -9
  149. package/src/theme/ColorModeToggle/index.tsx +92 -0
  150. package/src/theme/ColorModeToggle/styles.module.css +51 -0
  151. package/src/theme/Details/index.tsx +25 -0
  152. package/src/theme/Details/styles.module.css +13 -0
  153. package/src/theme/DocBreadcrumbs/index.tsx +91 -0
  154. package/src/theme/DocBreadcrumbs/styles.module.css +26 -0
  155. package/src/theme/DocCard/index.tsx +109 -0
  156. package/src/theme/DocCard/styles.module.css +43 -0
  157. package/src/theme/DocCardList/index.tsx +27 -0
  158. package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +59 -0
  159. package/src/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  160. package/src/theme/DocItem/index.tsx +56 -58
  161. package/src/theme/DocItem/styles.module.css +6 -10
  162. package/src/theme/DocItemFooter/index.tsx +91 -0
  163. package/{lib/theme/Toggle → src/theme/DocItemFooter}/styles.module.css +9 -8
  164. package/src/theme/DocPage/index.tsx +53 -49
  165. package/src/theme/DocPage/styles.module.css +9 -3
  166. package/src/theme/DocPaginator/index.tsx +15 -23
  167. package/src/theme/DocSidebar/index.tsx +76 -298
  168. package/src/theme/DocSidebar/styles.module.css +5 -22
  169. package/src/theme/DocSidebarItem/index.tsx +283 -0
  170. package/src/theme/DocSidebarItem/styles.module.css +13 -0
  171. package/src/theme/DocSidebarItems/index.tsx +32 -0
  172. package/src/theme/DocTagDocListPage/index.tsx +89 -0
  173. package/src/theme/DocTagsListPage/index.tsx +39 -0
  174. package/src/theme/DocVersionBadge/index.tsx +35 -0
  175. package/src/theme/DocVersionBanner/index.tsx +49 -22
  176. package/src/theme/EditThisPage/index.tsx +6 -1
  177. package/src/theme/ErrorPageContent.tsx +41 -0
  178. package/src/theme/Footer/index.tsx +109 -44
  179. package/src/theme/Footer/styles.module.css +2 -1
  180. package/src/theme/Heading/index.tsx +38 -53
  181. package/src/theme/Heading/styles.module.css +25 -5
  182. package/src/theme/IconArrow/index.tsx +2 -4
  183. package/src/theme/IconClose/index.tsx +26 -0
  184. package/src/theme/IconDarkMode/index.tsx +20 -0
  185. package/src/theme/IconEdit/index.tsx +5 -4
  186. package/src/theme/IconExternalLink/index.tsx +3 -5
  187. package/src/theme/IconLanguage/index.tsx +6 -8
  188. package/src/theme/IconLightMode/index.tsx +20 -0
  189. package/src/theme/IconMenu/index.tsx +3 -5
  190. package/src/theme/LastUpdated/index.tsx +3 -2
  191. package/src/theme/Layout/index.tsx +5 -6
  192. package/src/theme/LayoutHead/index.tsx +26 -25
  193. package/src/theme/LayoutProviders/index.tsx +15 -9
  194. package/src/theme/Logo/index.tsx +21 -19
  195. package/src/theme/MDXComponents/index.tsx +70 -32
  196. package/{lib/theme/IconExternalLink/styles.module.css → src/theme/MDXComponents/styles.css} +7 -4
  197. package/src/theme/MDXPage/index.tsx +10 -12
  198. package/src/theme/Navbar/index.tsx +208 -68
  199. package/src/theme/Navbar/styles.module.css +10 -3
  200. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +37 -207
  201. package/src/theme/NavbarItem/DocNavbarItem.tsx +17 -18
  202. package/src/theme/NavbarItem/DocSidebarNavbarItem.tsx +84 -0
  203. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +39 -24
  204. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +7 -3
  205. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +181 -0
  206. package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +16 -10
  207. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  208. package/src/theme/NavbarItem/NavbarNavLink.tsx +68 -0
  209. package/src/theme/NavbarItem/index.tsx +41 -18
  210. package/src/theme/NavbarItem/utils.ts +10 -0
  211. package/src/theme/NotFound.tsx +1 -3
  212. package/src/theme/PaginatorNavLink/index.tsx +20 -0
  213. package/src/theme/SearchBar.tsx +2 -1
  214. package/src/theme/SearchMetadata/index.tsx +43 -0
  215. package/src/theme/Seo/index.tsx +7 -4
  216. package/src/theme/SkipToContent/index.tsx +3 -5
  217. package/src/theme/SkipToContent/styles.module.css +7 -0
  218. package/src/theme/TOC/index.tsx +13 -44
  219. package/src/theme/TOC/styles.module.css +1 -1
  220. package/src/theme/TOCCollapsible/index.tsx +58 -0
  221. package/src/theme/TOCCollapsible/styles.module.css +50 -0
  222. package/src/theme/TOCInline/index.tsx +14 -35
  223. package/src/theme/TOCItems/index.tsx +100 -0
  224. package/src/theme/TabItem/index.tsx +5 -3
  225. package/src/theme/Tabs/index.tsx +115 -56
  226. package/src/theme/Tabs/styles.module.css +0 -13
  227. package/src/theme/Tag/index.tsx +29 -0
  228. package/src/theme/Tag/styles.module.css +70 -0
  229. package/src/theme/TagsListByLetter/index.tsx +43 -0
  230. package/src/theme/TagsListByLetter/styles.module.css +11 -0
  231. package/src/theme/TagsListInline/index.tsx +35 -0
  232. package/src/theme/TagsListInline/styles.module.css +15 -0
  233. package/src/theme/ThemedImage/index.tsx +7 -9
  234. package/src/theme/ThemedImage/styles.module.css +2 -2
  235. package/src/theme/prism-include-languages.ts +20 -15
  236. package/src/theme-classic.d.ts +771 -0
  237. package/src/translations.ts +74 -54
  238. package/src/types.d.ts +0 -587
  239. package/src/validateThemeConfig.ts +381 -0
  240. package/babel.config.js +0 -35
  241. package/codeTranslations/README.md +0 -20
  242. package/codeTranslations/ar.json +0 -57
  243. package/codeTranslations/base.json +0 -112
  244. package/codeTranslations/bn.json +0 -56
  245. package/codeTranslations/da.json +0 -57
  246. package/codeTranslations/de.json +0 -57
  247. package/codeTranslations/es.json +0 -57
  248. package/codeTranslations/fa.json +0 -57
  249. package/codeTranslations/fil.json +0 -57
  250. package/codeTranslations/fr.json +0 -57
  251. package/codeTranslations/he.json +0 -57
  252. package/codeTranslations/hi.json +0 -57
  253. package/codeTranslations/ja.json +0 -57
  254. package/codeTranslations/ko.json +0 -57
  255. package/codeTranslations/pl.json +0 -57
  256. package/codeTranslations/pt-BR.json +0 -57
  257. package/codeTranslations/pt-PT.json +0 -57
  258. package/codeTranslations/ru.json +0 -57
  259. package/codeTranslations/tr.json +0 -57
  260. package/codeTranslations/vi.json +0 -57
  261. package/codeTranslations/zh-Hans.json +0 -57
  262. package/codeTranslations/zh-Hant.json +0 -57
  263. package/lib/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  264. package/lib/__tests__/translations.test.js +0 -112
  265. package/lib/__tests__/validateThemeConfig.test.js +0 -333
  266. package/lib/theme/AnnouncementBar/index.js +0 -72
  267. package/lib/theme/AnnouncementBar/styles.module.css +0 -72
  268. package/lib/theme/BlogListPage/index.js +0 -71
  269. package/lib/theme/BlogListPaginator/index.js +0 -63
  270. package/lib/theme/BlogPostItem/index.js +0 -161
  271. package/lib/theme/BlogPostPage/index.js +0 -69
  272. package/lib/theme/BlogPostPaginator/index.js +0 -64
  273. package/lib/theme/BlogSidebar/index.js +0 -51
  274. package/lib/theme/BlogSidebar/styles.module.css +0 -44
  275. package/lib/theme/BlogTagsListPage/index.js +0 -76
  276. package/lib/theme/BlogTagsPostsPage/index.js +0 -100
  277. package/lib/theme/CodeBlock/index.js +0 -253
  278. package/lib/theme/CodeBlock/styles.module.css +0 -68
  279. package/lib/theme/DocItem/index.js +0 -129
  280. package/lib/theme/DocPage/index.js +0 -173
  281. package/lib/theme/DocPage/styles.module.css +0 -80
  282. package/lib/theme/DocPaginator/index.js +0 -63
  283. package/lib/theme/DocSidebar/index.js +0 -309
  284. package/lib/theme/DocSidebar/styles.module.css +0 -124
  285. package/lib/theme/DocVersionBanner/index.js +0 -128
  286. package/lib/theme/EditThisPage/index.js +0 -31
  287. package/lib/theme/Footer/index.js +0 -115
  288. package/lib/theme/Footer/styles.module.css +0 -15
  289. package/lib/theme/Heading/index.js +0 -76
  290. package/lib/theme/Heading/styles.css +0 -23
  291. package/lib/theme/Heading/styles.module.css +0 -15
  292. package/lib/theme/IconArrow/index.js +0 -28
  293. package/lib/theme/IconEdit/index.js +0 -34
  294. package/lib/theme/IconExternalLink/index.js +0 -30
  295. package/lib/theme/IconLanguage/index.js +0 -29
  296. package/lib/theme/IconMenu/index.js +0 -30
  297. package/lib/theme/LastUpdated/index.js +0 -61
  298. package/lib/theme/Layout/index.js +0 -64
  299. package/lib/theme/Layout/styles.css +0 -27
  300. package/lib/theme/LayoutHead/index.js +0 -144
  301. package/lib/theme/LayoutProviders/index.js +0 -36
  302. package/lib/theme/Logo/index.js +0 -60
  303. package/lib/theme/MDXComponents/index.js +0 -65
  304. package/lib/theme/MDXPage/index.js +0 -66
  305. package/lib/theme/Navbar/index.js +0 -147
  306. package/lib/theme/Navbar/styles.module.css +0 -20
  307. package/lib/theme/NavbarItem/DefaultNavbarItem.js +0 -209
  308. package/lib/theme/NavbarItem/DocNavbarItem.js +0 -63
  309. package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +0 -76
  310. package/lib/theme/NavbarItem/DocsVersionNavbarItem.js +0 -43
  311. package/lib/theme/NavbarItem/LocaleDropdownNavbarItem.js +0 -72
  312. package/lib/theme/NavbarItem/SearchNavbarItem.js +0 -28
  313. package/lib/theme/NavbarItem/index.js +0 -54
  314. package/lib/theme/NotFound.js +0 -57
  315. package/lib/theme/SearchBar.js +0 -15
  316. package/lib/theme/SearchMetadatas/index.js +0 -33
  317. package/lib/theme/Seo/index.js +0 -49
  318. package/lib/theme/SkipToContent/index.js +0 -71
  319. package/lib/theme/SkipToContent/styles.module.css +0 -14
  320. package/lib/theme/TOC/index.js +0 -59
  321. package/lib/theme/TOC/styles.module.css +0 -23
  322. package/lib/theme/TOCInline/index.js +0 -53
  323. package/lib/theme/TOCInline/styles.module.css +0 -12
  324. package/lib/theme/TabItem/index.js +0 -32
  325. package/lib/theme/Tabs/index.js +0 -150
  326. package/lib/theme/Tabs/styles.module.css +0 -23
  327. package/lib/theme/ThemeContext.js +0 -21
  328. package/lib/theme/ThemeProvider/index.js +0 -38
  329. package/lib/theme/ThemedImage/index.js +0 -49
  330. package/lib/theme/ThemedImage/styles.module.css +0 -18
  331. package/lib/theme/Toggle/index.js +0 -94
  332. package/lib/theme/Toggle/styles.css +0 -103
  333. package/lib/theme/UserPreferencesContext.js +0 -18
  334. package/lib/theme/UserPreferencesProvider/index.js +0 -36
  335. package/lib/theme/hooks/useContextualSearchFilters.js +0 -47
  336. package/lib/theme/hooks/useDocs.js +0 -18
  337. package/lib/theme/hooks/useHideableNavbar.js +0 -92
  338. package/lib/theme/hooks/useKeyboardNavigation.js +0 -45
  339. package/lib/theme/hooks/useLocationHash.js +0 -28
  340. package/lib/theme/hooks/useLockBodyScroll.js +0 -26
  341. package/lib/theme/hooks/usePrismTheme.js +0 -36
  342. package/lib/theme/hooks/useScrollPosition.js +0 -49
  343. package/lib/theme/hooks/useTOCHighlight.js +0 -87
  344. package/lib/theme/hooks/useTabGroupChoice.js +0 -51
  345. package/lib/theme/hooks/useTheme.js +0 -99
  346. package/lib/theme/hooks/useThemeContext.js +0 -31
  347. package/lib/theme/hooks/useUserPreferencesContext.js +0 -31
  348. package/lib/theme/hooks/useWindowSize.js +0 -55
  349. package/lib/theme/prism-include-languages.js +0 -39
  350. package/lib-next/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  351. package/lib-next/__tests__/translations.test.js +0 -128
  352. package/lib-next/__tests__/validateThemeConfig.test.js +0 -333
  353. package/lib-next/index.js +0 -221
  354. package/lib-next/theme/Heading/styles.css +0 -23
  355. package/lib-next/theme/SearchMetadatas/index.js +0 -20
  356. package/lib-next/theme/ThemeContext.js +0 -9
  357. package/lib-next/theme/ThemeProvider/index.js +0 -25
  358. package/lib-next/theme/Toggle/index.js +0 -80
  359. package/lib-next/theme/Toggle/styles.css +0 -103
  360. package/lib-next/theme/UserPreferencesProvider/index.js +0 -24
  361. package/lib-next/theme/hooks/useContextualSearchFilters.js +0 -41
  362. package/lib-next/theme/hooks/useDocs.js +0 -10
  363. package/lib-next/theme/hooks/useHideableNavbar.js +0 -79
  364. package/lib-next/theme/hooks/useKeyboardNavigation.js +0 -35
  365. package/lib-next/theme/hooks/useLocationHash.js +0 -20
  366. package/lib-next/theme/hooks/useLockBodyScroll.js +0 -18
  367. package/lib-next/theme/hooks/usePrismTheme.js +0 -20
  368. package/lib-next/theme/hooks/useScrollPosition.js +0 -38
  369. package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
  370. package/lib-next/theme/hooks/useTabGroupChoice.js +0 -39
  371. package/lib-next/theme/hooks/useTheme.js +0 -82
  372. package/lib-next/theme/hooks/useThemeContext.js +0 -22
  373. package/lib-next/theme/hooks/useUserPreferencesContext.js +0 -22
  374. package/lib-next/theme/hooks/useWindowSize.js +0 -45
  375. package/lib-next/translations.js +0 -145
  376. package/lib-next/types.d.ts +0 -598
  377. package/lib-next/validateThemeConfig.js +0 -317
  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/Toggle/index.tsx +0 -100
  387. package/src/theme/Toggle/styles.css +0 -103
  388. package/src/theme/UserPreferencesContext.ts +0 -12
  389. package/src/theme/UserPreferencesProvider/index.tsx +0 -27
  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 -240
  407. package/update-code-translations.test.js +0 -33
@@ -6,50 +6,34 @@
6
6
  */
7
7
  import React, {useState, useCallback} from 'react';
8
8
  import {MDXProvider} from '@mdx-js/react';
9
- import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
10
9
  import renderRoutes from '@docusaurus/renderRoutes';
11
10
  import Layout from '@theme/Layout';
12
11
  import DocSidebar from '@theme/DocSidebar';
13
12
  import MDXComponents from '@theme/MDXComponents';
14
13
  import NotFound from '@theme/NotFound';
15
14
  import IconArrow from '@theme/IconArrow';
15
+ import BackToTopButton from '@theme/BackToTopButton';
16
16
  import {matchPath} from '@docusaurus/router';
17
17
  import {translate} from '@docusaurus/Translate';
18
18
  import clsx from 'clsx';
19
19
  import styles from './styles.module.css';
20
- import {ThemeClassNames, docVersionSearchTag} from '@docusaurus/theme-common';
20
+ import {
21
+ ThemeClassNames,
22
+ docVersionSearchTag,
23
+ DocsSidebarProvider,
24
+ useDocsSidebar,
25
+ DocsVersionProvider,
26
+ } from '@docusaurus/theme-common';
27
+ import Head from '@docusaurus/Head';
21
28
 
22
- function getSidebar({versionMetadata, currentDocRoute}) {
23
- function addTrailingSlash(str) {
24
- return str.endsWith('/') ? str : `${str}/`;
25
- }
26
-
27
- function removeTrailingSlash(str) {
28
- return str.endsWith('/') ? str.slice(0, -1) : str;
29
- }
30
-
31
- const {permalinkToSidebar, docsSidebars} = versionMetadata; // With/without trailingSlash, we should always be able to get the appropriate sidebar
32
- // note: docs plugin permalinks currently never have trailing slashes
33
- // trailingSlash is handled globally at the framework level, not plugin level
34
-
35
- const sidebarName =
36
- permalinkToSidebar[currentDocRoute.path] ||
37
- permalinkToSidebar[addTrailingSlash(currentDocRoute.path)] ||
38
- permalinkToSidebar[removeTrailingSlash(currentDocRoute.path)];
39
- const sidebar = docsSidebars[sidebarName];
40
- return {
41
- sidebar,
42
- sidebarName,
43
- };
44
- }
45
-
46
- function DocPageContent({currentDocRoute, versionMetadata, children}) {
47
- const {siteConfig, isClient} = useDocusaurusContext();
29
+ function DocPageContent({
30
+ currentDocRoute,
31
+ versionMetadata,
32
+ children,
33
+ sidebarName,
34
+ }) {
35
+ const sidebar = useDocsSidebar();
48
36
  const {pluginId, version} = versionMetadata;
49
- const {sidebarName, sidebar} = getSidebar({
50
- versionMetadata,
51
- currentDocRoute,
52
- });
53
37
  const [hiddenSidebarContainer, setHiddenSidebarContainer] = useState(false);
54
38
  const [hiddenSidebar, setHiddenSidebar] = useState(false);
55
39
  const toggleSidebar = useCallback(() => {
@@ -57,23 +41,28 @@ function DocPageContent({currentDocRoute, versionMetadata, children}) {
57
41
  setHiddenSidebar(false);
58
42
  }
59
43
 
60
- setHiddenSidebarContainer(!hiddenSidebarContainer);
44
+ setHiddenSidebarContainer((value) => !value);
61
45
  }, [hiddenSidebar]);
62
46
  return (
63
47
  <Layout
64
- key={isClient}
65
- wrapperClassName={ThemeClassNames.wrapper.docPages}
66
- pageClassName={ThemeClassNames.page.docPage}
67
- searchMetadatas={{
48
+ wrapperClassName={ThemeClassNames.wrapper.docsPages}
49
+ pageClassName={ThemeClassNames.page.docsDocPage}
50
+ searchMetadata={{
68
51
  version,
69
52
  tag: docVersionSearchTag(pluginId, version),
70
53
  }}>
71
54
  <div className={styles.docPage}>
55
+ <BackToTopButton />
56
+
72
57
  {sidebar && (
73
58
  <aside
74
- className={clsx(styles.docSidebarContainer, {
75
- [styles.docSidebarContainerHidden]: hiddenSidebarContainer,
76
- })}
59
+ className={clsx(
60
+ ThemeClassNames.docs.docSidebarContainer,
61
+ styles.docSidebarContainer,
62
+ {
63
+ [styles.docSidebarContainerHidden]: hiddenSidebarContainer,
64
+ },
65
+ )}
77
66
  onTransitionEnd={(e) => {
78
67
  if (
79
68
  !e.currentTarget.classList.contains(styles.docSidebarContainer)
@@ -93,9 +82,6 @@ function DocPageContent({currentDocRoute, versionMetadata, children}) {
93
82
  }
94
83
  sidebar={sidebar}
95
84
  path={currentDocRoute.path}
96
- sidebarCollapsible={
97
- siteConfig.themeConfig?.sidebarCollapsible ?? true
98
- }
99
85
  onCollapse={toggleSidebar}
100
86
  isHidden={hiddenSidebar}
101
87
  />
@@ -145,7 +131,7 @@ function DocPageContent({currentDocRoute, versionMetadata, children}) {
145
131
  );
146
132
  }
147
133
 
148
- function DocPage(props) {
134
+ export default function DocPage(props) {
149
135
  const {
150
136
  route: {routes: docRoutes},
151
137
  versionMetadata,
@@ -156,18 +142,31 @@ function DocPage(props) {
156
142
  );
157
143
 
158
144
  if (!currentDocRoute) {
159
- return <NotFound {...props} />;
160
- }
145
+ return <NotFound />;
146
+ } // For now, the sidebarName is added as route config: not ideal!
161
147
 
148
+ const sidebarName = currentDocRoute.sidebar;
149
+ const sidebar = sidebarName
150
+ ? versionMetadata.docsSidebars[sidebarName]
151
+ : null;
162
152
  return (
163
- <DocPageContent
164
- currentDocRoute={currentDocRoute}
165
- versionMetadata={versionMetadata}>
166
- {renderRoutes(docRoutes, {
167
- versionMetadata,
168
- })}
169
- </DocPageContent>
153
+ <>
154
+ <Head>
155
+ {/* TODO we should add a core addRoute({htmlClassName}) action */}
156
+ <html className={versionMetadata.className} />
157
+ </Head>
158
+ <DocsVersionProvider version={versionMetadata}>
159
+ <DocsSidebarProvider sidebar={sidebar}>
160
+ <DocPageContent
161
+ currentDocRoute={currentDocRoute}
162
+ versionMetadata={versionMetadata}
163
+ sidebarName={sidebarName}>
164
+ {renderRoutes(docRoutes, {
165
+ versionMetadata,
166
+ })}
167
+ </DocPageContent>
168
+ </DocsSidebarProvider>
169
+ </DocsVersionProvider>
170
+ </>
170
171
  );
171
172
  }
172
-
173
- export default DocPage;
@@ -20,6 +20,10 @@
20
20
  width: 100%;
21
21
  }
22
22
 
23
+ .docSidebarContainer {
24
+ display: none;
25
+ }
26
+
23
27
  @media (min-width: 997px) {
24
28
  .docMainContainer {
25
29
  flex-grow: 1;
@@ -31,6 +35,7 @@
31
35
  }
32
36
 
33
37
  .docSidebarContainer {
38
+ display: block;
34
39
  width: var(--doc-sidebar-width);
35
40
  margin-top: calc(-1 * var(--ifm-navbar-height));
36
41
  border-right: 1px solid var(--ifm-toc-border-color);
@@ -63,12 +68,13 @@
63
68
  .expandSidebarButtonIcon {
64
69
  transform: rotate(0);
65
70
  }
66
- html[dir='rtl'] .expandSidebarButtonIcon {
71
+
72
+ [dir='rtl'] .expandSidebarButtonIcon {
67
73
  transform: rotate(180deg);
68
74
  }
69
75
 
70
- html[data-theme='dark'] .collapsedDocSidebar:hover,
71
- html[data-theme='dark'] .collapsedDocSidebar:focus {
76
+ [data-theme='dark'] .collapsedDocSidebar:hover,
77
+ [data-theme='dark'] .collapsedDocSidebar:focus {
72
78
  background-color: var(--collapse-button-bg-color-dark);
73
79
  }
74
80
 
@@ -5,11 +5,10 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import React from 'react';
8
- import Link from '@docusaurus/Link';
9
8
  import Translate, {translate} from '@docusaurus/Translate';
10
-
11
- function DocPaginator(props) {
12
- const {metadata} = props;
9
+ import PaginatorNavLink from '@theme/PaginatorNavLink';
10
+ export default function DocPaginator(props) {
11
+ const {previous, next} = props;
13
12
  return (
14
13
  <nav
15
14
  className="pagination-nav docusaurus-mt-lg"
@@ -19,41 +18,33 @@ function DocPaginator(props) {
19
18
  description: 'The ARIA label for the docs pagination',
20
19
  })}>
21
20
  <div className="pagination-nav__item">
22
- {metadata.previous && (
23
- <Link
24
- className="pagination-nav__link"
25
- to={metadata.previous.permalink}>
26
- <div className="pagination-nav__sublabel">
21
+ {previous && (
22
+ <PaginatorNavLink
23
+ {...previous}
24
+ subLabel={
27
25
  <Translate
28
26
  id="theme.docs.paginator.previous"
29
27
  description="The label used to navigate to the previous doc">
30
28
  Previous
31
29
  </Translate>
32
- </div>
33
- <div className="pagination-nav__label">
34
- &laquo; {metadata.previous.title}
35
- </div>
36
- </Link>
30
+ }
31
+ />
37
32
  )}
38
33
  </div>
39
34
  <div className="pagination-nav__item pagination-nav__item--next">
40
- {metadata.next && (
41
- <Link className="pagination-nav__link" to={metadata.next.permalink}>
42
- <div className="pagination-nav__sublabel">
35
+ {next && (
36
+ <PaginatorNavLink
37
+ {...next}
38
+ subLabel={
43
39
  <Translate
44
40
  id="theme.docs.paginator.next"
45
41
  description="The label used to navigate to the next doc">
46
42
  Next
47
43
  </Translate>
48
- </div>
49
- <div className="pagination-nav__label">
50
- {metadata.next.title} &raquo;
51
- </div>
52
- </Link>
44
+ }
45
+ />
53
46
  )}
54
47
  </div>
55
48
  </nav>
56
49
  );
57
50
  }
58
-
59
- export default DocPaginator;
@@ -4,226 +4,34 @@
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, useCallback, useEffect, useRef, memo} from 'react';
7
+ import React, {useState} from 'react';
8
8
  import clsx from 'clsx';
9
9
  import {
10
10
  useThemeConfig,
11
- isSamePath,
12
- usePrevious,
13
11
  useAnnouncementBar,
12
+ MobileSecondaryMenuFiller,
13
+ ThemeClassNames,
14
+ useScrollPosition,
15
+ useWindowSize,
14
16
  } from '@docusaurus/theme-common';
15
- import useLockBodyScroll from '@theme/hooks/useLockBodyScroll';
16
- import useWindowSize, {windowSizes} from '@theme/hooks/useWindowSize';
17
- import useScrollPosition from '@theme/hooks/useScrollPosition';
18
- import Link from '@docusaurus/Link';
19
- import isInternalUrl from '@docusaurus/isInternalUrl';
20
17
  import Logo from '@theme/Logo';
21
18
  import IconArrow from '@theme/IconArrow';
22
- import IconMenu from '@theme/IconMenu';
23
- import IconExternalLink from '@theme/IconExternalLink';
24
19
  import {translate} from '@docusaurus/Translate';
20
+ import DocSidebarItems from '@theme/DocSidebarItems';
25
21
  import styles from './styles.module.css';
26
- const MOBILE_TOGGLE_SIZE = 24;
27
-
28
- const isActiveSidebarItem = (item, activePath) => {
29
- if (item.type === 'link') {
30
- return isSamePath(item.href, activePath);
31
- }
32
-
33
- if (item.type === 'category') {
34
- return item.items.some((subItem) =>
35
- isActiveSidebarItem(subItem, activePath),
36
- );
37
- }
38
-
39
- return false;
40
- }; // Optimize sidebar at each "level"
41
- // TODO this item should probably not receive the "activePath" props
42
- // TODO this triggers whole sidebar re-renders on navigation
43
-
44
- const DocSidebarItems = memo(function DocSidebarItems({items, ...props}) {
45
- return items.map((item, index) => (
46
- <DocSidebarItem
47
- key={index} // sidebar is static, the index does not change
48
- item={item}
49
- {...props}
50
- />
51
- ));
52
- });
53
-
54
- function DocSidebarItem(props) {
55
- switch (props.item.type) {
56
- case 'category':
57
- return <DocSidebarItemCategory {...props} />;
58
-
59
- case 'link':
60
- default:
61
- return <DocSidebarItemLink {...props} />;
62
- }
63
- }
64
-
65
- function DocSidebarItemCategory({
66
- item,
67
- onItemClick,
68
- collapsible,
69
- activePath,
70
- ...props
71
- }) {
72
- const {items, label} = item;
73
- const isActive = isActiveSidebarItem(item, activePath);
74
- const wasActive = usePrevious(isActive); // active categories are always initialized as expanded
75
- // the default (item.collapsed) is only used for non-active categories
76
-
77
- const [collapsed, setCollapsed] = useState(() => {
78
- if (!collapsible) {
79
- return false;
80
- }
81
-
82
- return isActive ? false : item.collapsed;
83
- });
84
- const menuListRef = useRef(null);
85
- const [menuListHeight, setMenuListHeight] = useState(undefined);
86
-
87
- const handleMenuListHeight = (calc = true) => {
88
- setMenuListHeight(
89
- calc ? `${menuListRef.current?.scrollHeight}px` : undefined,
90
- );
91
- }; // If we navigate to a category, it should automatically expand itself
92
-
93
- useEffect(() => {
94
- const justBecameActive = isActive && !wasActive;
95
-
96
- if (justBecameActive && collapsed) {
97
- setCollapsed(false);
98
- }
99
- }, [isActive, wasActive, collapsed]);
100
- const handleItemClick = useCallback(
101
- (e) => {
102
- e.preventDefault();
103
-
104
- if (!menuListHeight) {
105
- handleMenuListHeight();
106
- }
107
-
108
- setTimeout(() => setCollapsed((state) => !state), 100);
109
- },
110
- [menuListHeight],
111
- );
112
-
113
- if (items.length === 0) {
114
- return null;
115
- }
116
-
117
- return (
118
- <li
119
- className={clsx('menu__list-item', {
120
- 'menu__list-item--collapsed': collapsed,
121
- })}>
122
- {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
123
- <a
124
- className={clsx('menu__link', {
125
- 'menu__link--sublist': collapsible,
126
- 'menu__link--active': collapsible && isActive,
127
- [styles.menuLinkText]: !collapsible,
128
- })}
129
- onClick={collapsible ? handleItemClick : undefined}
130
- href={collapsible ? '#' : undefined}
131
- {...props}>
132
- {label}
133
- </a>
134
- <ul
135
- className="menu__list"
136
- ref={menuListRef}
137
- style={{
138
- height: menuListHeight,
139
- }}
140
- onTransitionEnd={() => {
141
- if (!collapsed) {
142
- handleMenuListHeight(false);
143
- }
144
- }}>
145
- <DocSidebarItems
146
- items={items}
147
- tabIndex={collapsed ? '-1' : '0'}
148
- onItemClick={onItemClick}
149
- collapsible={collapsible}
150
- activePath={activePath}
151
- />
152
- </ul>
153
- </li>
154
- );
155
- }
156
-
157
- function DocSidebarItemLink({
158
- item,
159
- onItemClick,
160
- activePath,
161
- collapsible: _collapsible,
162
- ...props
163
- }) {
164
- const {href, label} = item;
165
- const isActive = isActiveSidebarItem(item, activePath);
166
- return (
167
- <li className="menu__list-item" key={label}>
168
- <Link
169
- className={clsx('menu__link', {
170
- 'menu__link--active': isActive,
171
- })}
172
- to={href}
173
- {...(isInternalUrl(href) && {
174
- isNavLink: true,
175
- exact: true,
176
- onClick: onItemClick,
177
- })}
178
- {...props}>
179
- {isInternalUrl(href) ? (
180
- label
181
- ) : (
182
- <span>
183
- {label}
184
- <IconExternalLink />
185
- </span>
186
- )}
187
- </Link>
188
- </li>
189
- );
190
- }
191
22
 
192
23
  function useShowAnnouncementBar() {
193
- const {isClosed} = useAnnouncementBar();
194
- const [showAnnouncementBar, setShowAnnouncementBar] = useState(!isClosed);
195
- useScrollPosition(({scrollY}) => {
196
- if (!isClosed) {
197
- setShowAnnouncementBar(scrollY === 0);
198
- }
199
- });
200
- return showAnnouncementBar;
201
- }
202
-
203
- function useResponsiveSidebar() {
204
- const [showResponsiveSidebar, setShowResponsiveSidebar] = useState(false);
205
- useLockBodyScroll(showResponsiveSidebar);
206
- const windowSize = useWindowSize();
207
- useEffect(() => {
208
- if (windowSize === windowSizes.desktop) {
209
- setShowResponsiveSidebar(false);
210
- }
211
- }, [windowSize]);
212
- const closeResponsiveSidebar = useCallback(
213
- (e) => {
214
- e.target.blur();
215
- setShowResponsiveSidebar(false);
24
+ const {isActive} = useAnnouncementBar();
25
+ const [showAnnouncementBar, setShowAnnouncementBar] = useState(isActive);
26
+ useScrollPosition(
27
+ ({scrollY}) => {
28
+ if (isActive) {
29
+ setShowAnnouncementBar(scrollY === 0);
30
+ }
216
31
  },
217
- [setShowResponsiveSidebar],
32
+ [isActive],
218
33
  );
219
- const toggleResponsiveSidebar = useCallback(() => {
220
- setShowResponsiveSidebar((value) => !value);
221
- }, [setShowResponsiveSidebar]);
222
- return {
223
- showResponsiveSidebar,
224
- closeResponsiveSidebar,
225
- toggleResponsiveSidebar,
226
- };
34
+ return isActive && showAnnouncementBar;
227
35
  }
228
36
 
229
37
  function HideableSidebarButton({onClick}) {
@@ -250,62 +58,12 @@ function HideableSidebarButton({onClick}) {
250
58
  );
251
59
  }
252
60
 
253
- function ResponsiveSidebarButton({responsiveSidebarOpened, onClick}) {
254
- return (
255
- <button
256
- aria-label={
257
- responsiveSidebarOpened
258
- ? translate({
259
- id: 'theme.docs.sidebar.responsiveCloseButtonLabel',
260
- message: 'Close menu',
261
- description:
262
- 'The ARIA label for close button of mobile doc sidebar',
263
- })
264
- : translate({
265
- id: 'theme.docs.sidebar.responsiveOpenButtonLabel',
266
- message: 'Open menu',
267
- description:
268
- 'The ARIA label for open button of mobile doc sidebar',
269
- })
270
- }
271
- aria-haspopup="true"
272
- className="button button--secondary button--sm menu__button"
273
- type="button"
274
- onClick={onClick}>
275
- {responsiveSidebarOpened ? (
276
- <span
277
- className={clsx(styles.sidebarMenuIcon, styles.sidebarMenuCloseIcon)}>
278
- &times;
279
- </span>
280
- ) : (
281
- <IconMenu
282
- className={styles.sidebarMenuIcon}
283
- height={MOBILE_TOGGLE_SIZE}
284
- width={MOBILE_TOGGLE_SIZE}
285
- />
286
- )}
287
- </button>
288
- );
289
- }
290
-
291
- function DocSidebar({
292
- path,
293
- sidebar,
294
- sidebarCollapsible = true,
295
- onCollapse,
296
- isHidden,
297
- }) {
61
+ function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}) {
298
62
  const showAnnouncementBar = useShowAnnouncementBar();
299
63
  const {
300
64
  navbar: {hideOnScroll},
301
65
  hideableSidebar,
302
66
  } = useThemeConfig();
303
- const {isClosed: isAnnouncementBarClosed} = useAnnouncementBar();
304
- const {
305
- showResponsiveSidebar,
306
- closeResponsiveSidebar,
307
- toggleResponsiveSidebar,
308
- } = useResponsiveSidebar();
309
67
  return (
310
68
  <div
311
69
  className={clsx(styles.sidebar, {
@@ -314,39 +72,60 @@ function DocSidebar({
314
72
  })}>
315
73
  {hideOnScroll && <Logo tabIndex={-1} className={styles.sidebarLogo} />}
316
74
  <nav
317
- className={clsx(
318
- 'menu',
319
- 'menu--responsive',
320
- 'thin-scrollbar',
321
- styles.menu,
322
- {
323
- 'menu--show': showResponsiveSidebar,
324
- [styles.menuWithAnnouncementBar]:
325
- !isAnnouncementBarClosed && showAnnouncementBar,
326
- },
327
- )}
328
- aria-label={translate({
329
- id: 'theme.docs.sidebar.navAriaLabel',
330
- message: 'Sidebar navigation',
331
- description: 'The ARIA label for documentation menu',
75
+ className={clsx('menu thin-scrollbar', styles.menu, {
76
+ [styles.menuWithAnnouncementBar]: showAnnouncementBar,
332
77
  })}>
333
- <ResponsiveSidebarButton
334
- responsiveSidebarOpened={showResponsiveSidebar}
335
- onClick={toggleResponsiveSidebar}
336
- />
337
-
338
- <ul className="menu__list">
339
- <DocSidebarItems
340
- items={sidebar}
341
- onItemClick={closeResponsiveSidebar}
342
- collapsible={sidebarCollapsible}
343
- activePath={path}
344
- />
78
+ <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
79
+ <DocSidebarItems items={sidebar} activePath={path} level={1} />
345
80
  </ul>
346
81
  </nav>
347
82
  {hideableSidebar && <HideableSidebarButton onClick={onCollapse} />}
348
83
  </div>
349
84
  );
85
+ } // eslint-disable-next-line react/function-component-definition
86
+
87
+ const DocSidebarMobileSecondaryMenu = ({toggleSidebar, sidebar, path}) => (
88
+ <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
89
+ <DocSidebarItems
90
+ items={sidebar}
91
+ activePath={path}
92
+ onItemClick={(item) => {
93
+ // Mobile sidebar should only be closed if the category has a link
94
+ if (item.type === 'category' && item.href) {
95
+ toggleSidebar();
96
+ }
97
+
98
+ if (item.type === 'link') {
99
+ toggleSidebar();
100
+ }
101
+ }}
102
+ level={1}
103
+ />
104
+ </ul>
105
+ );
106
+
107
+ function DocSidebarMobile(props) {
108
+ return (
109
+ <MobileSecondaryMenuFiller
110
+ component={DocSidebarMobileSecondaryMenu}
111
+ props={props}
112
+ />
113
+ );
350
114
  }
351
115
 
352
- export default DocSidebar;
116
+ const DocSidebarDesktopMemo = React.memo(DocSidebarDesktop);
117
+ const DocSidebarMobileMemo = React.memo(DocSidebarMobile);
118
+ export default function DocSidebar(props) {
119
+ const windowSize = useWindowSize(); // Desktop sidebar visible on hydration: need SSR rendering
120
+
121
+ const shouldRenderSidebarDesktop =
122
+ windowSize === 'desktop' || windowSize === 'ssr'; // Mobile sidebar not visible on hydration: can avoid SSR rendering
123
+
124
+ const shouldRenderSidebarMobile = windowSize === 'mobile';
125
+ return (
126
+ <>
127
+ {shouldRenderSidebarDesktop && <DocSidebarDesktopMemo {...props} />}
128
+ {shouldRenderSidebarMobile && <DocSidebarMobileMemo {...props} />}
129
+ </>
130
+ );
131
+ }