@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
@@ -5,12 +5,11 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import React, {ReactNode, useState, useCallback} from 'react';
8
+ import React, {type ReactNode, useState, useCallback} from 'react';
9
9
  import {MDXProvider} from '@mdx-js/react';
10
10
 
11
- import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
12
11
  import renderRoutes from '@docusaurus/renderRoutes';
13
- import type {PropVersionMetadata} from '@docusaurus/plugin-content-docs-types';
12
+ import type {PropVersionMetadata} from '@docusaurus/plugin-content-docs';
14
13
  import Layout from '@theme/Layout';
15
14
  import DocSidebar from '@theme/DocSidebar';
16
15
  import MDXComponents from '@theme/MDXComponents';
@@ -18,50 +17,36 @@ import NotFound from '@theme/NotFound';
18
17
  import type {DocumentRoute} from '@theme/DocItem';
19
18
  import type {Props} from '@theme/DocPage';
20
19
  import IconArrow from '@theme/IconArrow';
20
+ import BackToTopButton from '@theme/BackToTopButton';
21
21
  import {matchPath} from '@docusaurus/router';
22
22
  import {translate} from '@docusaurus/Translate';
23
23
 
24
24
  import clsx from 'clsx';
25
25
  import styles from './styles.module.css';
26
- import {ThemeClassNames, docVersionSearchTag} from '@docusaurus/theme-common';
26
+ import {
27
+ ThemeClassNames,
28
+ docVersionSearchTag,
29
+ DocsSidebarProvider,
30
+ useDocsSidebar,
31
+ DocsVersionProvider,
32
+ } from '@docusaurus/theme-common';
33
+ import Head from '@docusaurus/Head';
27
34
 
28
35
  type DocPageContentProps = {
29
36
  readonly currentDocRoute: DocumentRoute;
30
37
  readonly versionMetadata: PropVersionMetadata;
31
38
  readonly children: ReactNode;
39
+ readonly sidebarName: string | undefined;
32
40
  };
33
41
 
34
- function getSidebar({versionMetadata, currentDocRoute}) {
35
- function addTrailingSlash(str: string): string {
36
- return str.endsWith('/') ? str : `${str}/`;
37
- }
38
- function removeTrailingSlash(str: string): string {
39
- return str.endsWith('/') ? str.slice(0, -1) : str;
40
- }
41
-
42
- const {permalinkToSidebar, docsSidebars} = versionMetadata;
43
-
44
- // With/without trailingSlash, we should always be able to get the appropriate sidebar
45
- // note: docs plugin permalinks currently never have trailing slashes
46
- // trailingSlash is handled globally at the framework level, not plugin level
47
- const sidebarName =
48
- permalinkToSidebar[currentDocRoute.path] ||
49
- permalinkToSidebar[addTrailingSlash(currentDocRoute.path)] ||
50
- permalinkToSidebar[removeTrailingSlash(currentDocRoute.path)];
51
-
52
- const sidebar = docsSidebars[sidebarName];
53
- return {sidebar, sidebarName};
54
- }
55
-
56
42
  function DocPageContent({
57
43
  currentDocRoute,
58
44
  versionMetadata,
59
45
  children,
46
+ sidebarName,
60
47
  }: DocPageContentProps): JSX.Element {
61
- const {siteConfig, isClient} = useDocusaurusContext();
48
+ const sidebar = useDocsSidebar();
62
49
  const {pluginId, version} = versionMetadata;
63
- const {sidebarName, sidebar} = getSidebar({versionMetadata, currentDocRoute});
64
-
65
50
  const [hiddenSidebarContainer, setHiddenSidebarContainer] = useState(false);
66
51
  const [hiddenSidebar, setHiddenSidebar] = useState(false);
67
52
  const toggleSidebar = useCallback(() => {
@@ -69,24 +54,29 @@ function DocPageContent({
69
54
  setHiddenSidebar(false);
70
55
  }
71
56
 
72
- setHiddenSidebarContainer(!hiddenSidebarContainer);
57
+ setHiddenSidebarContainer((value) => !value);
73
58
  }, [hiddenSidebar]);
74
59
 
75
60
  return (
76
61
  <Layout
77
- key={isClient}
78
- wrapperClassName={ThemeClassNames.wrapper.docPages}
79
- pageClassName={ThemeClassNames.page.docPage}
80
- searchMetadatas={{
62
+ wrapperClassName={ThemeClassNames.wrapper.docsPages}
63
+ pageClassName={ThemeClassNames.page.docsDocPage}
64
+ searchMetadata={{
81
65
  version,
82
66
  tag: docVersionSearchTag(pluginId, version),
83
67
  }}>
84
68
  <div className={styles.docPage}>
69
+ <BackToTopButton />
70
+
85
71
  {sidebar && (
86
72
  <aside
87
- className={clsx(styles.docSidebarContainer, {
88
- [styles.docSidebarContainerHidden]: hiddenSidebarContainer,
89
- })}
73
+ className={clsx(
74
+ ThemeClassNames.docs.docSidebarContainer,
75
+ styles.docSidebarContainer,
76
+ {
77
+ [styles.docSidebarContainerHidden]: hiddenSidebarContainer,
78
+ },
79
+ )}
90
80
  onTransitionEnd={(e) => {
91
81
  if (
92
82
  !e.currentTarget.classList.contains(styles.docSidebarContainer)
@@ -106,9 +96,6 @@ function DocPageContent({
106
96
  }
107
97
  sidebar={sidebar}
108
98
  path={currentDocRoute.path}
109
- sidebarCollapsible={
110
- siteConfig.themeConfig?.sidebarCollapsible ?? true
111
- }
112
99
  onCollapse={toggleSidebar}
113
100
  isHidden={hiddenSidebar}
114
101
  />
@@ -158,7 +145,7 @@ function DocPageContent({
158
145
  );
159
146
  }
160
147
 
161
- function DocPage(props: Props): JSX.Element {
148
+ export default function DocPage(props: Props): JSX.Element {
162
149
  const {
163
150
  route: {routes: docRoutes},
164
151
  versionMetadata,
@@ -168,15 +155,32 @@ function DocPage(props: Props): JSX.Element {
168
155
  matchPath(location.pathname, docRoute),
169
156
  );
170
157
  if (!currentDocRoute) {
171
- return <NotFound {...props} />;
158
+ return <NotFound />;
172
159
  }
160
+
161
+ // For now, the sidebarName is added as route config: not ideal!
162
+ const sidebarName = currentDocRoute.sidebar;
163
+
164
+ const sidebar = sidebarName
165
+ ? versionMetadata.docsSidebars[sidebarName]
166
+ : null;
167
+
173
168
  return (
174
- <DocPageContent
175
- currentDocRoute={currentDocRoute}
176
- versionMetadata={versionMetadata}>
177
- {renderRoutes(docRoutes, {versionMetadata})}
178
- </DocPageContent>
169
+ <>
170
+ <Head>
171
+ {/* TODO we should add a core addRoute({htmlClassName}) action */}
172
+ <html className={versionMetadata.className} />
173
+ </Head>
174
+ <DocsVersionProvider version={versionMetadata}>
175
+ <DocsSidebarProvider sidebar={sidebar}>
176
+ <DocPageContent
177
+ currentDocRoute={currentDocRoute}
178
+ versionMetadata={versionMetadata}
179
+ sidebarName={sidebarName}>
180
+ {renderRoutes(docRoutes, {versionMetadata})}
181
+ </DocPageContent>
182
+ </DocsSidebarProvider>
183
+ </DocsVersionProvider>
184
+ </>
179
185
  );
180
186
  }
181
-
182
- 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
 
@@ -6,12 +6,12 @@
6
6
  */
7
7
 
8
8
  import React from 'react';
9
- import Link from '@docusaurus/Link';
10
9
  import Translate, {translate} from '@docusaurus/Translate';
10
+ import PaginatorNavLink from '@theme/PaginatorNavLink';
11
11
  import type {Props} from '@theme/DocPaginator';
12
12
 
13
- function DocPaginator(props: Props): JSX.Element {
14
- const {metadata} = props;
13
+ export default function DocPaginator(props: Props): JSX.Element {
14
+ const {previous, next} = props;
15
15
 
16
16
  return (
17
17
  <nav
@@ -22,41 +22,33 @@ function DocPaginator(props: Props): JSX.Element {
22
22
  description: 'The ARIA label for the docs pagination',
23
23
  })}>
24
24
  <div className="pagination-nav__item">
25
- {metadata.previous && (
26
- <Link
27
- className="pagination-nav__link"
28
- to={metadata.previous.permalink}>
29
- <div className="pagination-nav__sublabel">
25
+ {previous && (
26
+ <PaginatorNavLink
27
+ {...previous}
28
+ subLabel={
30
29
  <Translate
31
30
  id="theme.docs.paginator.previous"
32
31
  description="The label used to navigate to the previous doc">
33
32
  Previous
34
33
  </Translate>
35
- </div>
36
- <div className="pagination-nav__label">
37
- &laquo; {metadata.previous.title}
38
- </div>
39
- </Link>
34
+ }
35
+ />
40
36
  )}
41
37
  </div>
42
38
  <div className="pagination-nav__item pagination-nav__item--next">
43
- {metadata.next && (
44
- <Link className="pagination-nav__link" to={metadata.next.permalink}>
45
- <div className="pagination-nav__sublabel">
39
+ {next && (
40
+ <PaginatorNavLink
41
+ {...next}
42
+ subLabel={
46
43
  <Translate
47
44
  id="theme.docs.paginator.next"
48
45
  description="The label used to navigate to the next doc">
49
46
  Next
50
47
  </Translate>
51
- </div>
52
- <div className="pagination-nav__label">
53
- {metadata.next.title} &raquo;
54
- </div>
55
- </Link>
48
+ }
49
+ />
56
50
  )}
57
51
  </div>
58
52
  </nav>
59
53
  );
60
54
  }
61
-
62
- export default DocPaginator;
@@ -5,241 +5,41 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import React, {useState, useCallback, useEffect, useRef, memo} from 'react';
8
+ import React, {useState} from 'react';
9
9
  import clsx from 'clsx';
10
10
  import {
11
11
  useThemeConfig,
12
- isSamePath,
13
- usePrevious,
14
12
  useAnnouncementBar,
13
+ MobileSecondaryMenuFiller,
14
+ type MobileSecondaryMenuComponent,
15
+ ThemeClassNames,
16
+ useScrollPosition,
17
+ useWindowSize,
15
18
  } from '@docusaurus/theme-common';
16
- import useLockBodyScroll from '@theme/hooks/useLockBodyScroll';
17
- import useWindowSize, {windowSizes} from '@theme/hooks/useWindowSize';
18
- import useScrollPosition from '@theme/hooks/useScrollPosition';
19
- import Link from '@docusaurus/Link';
20
- import isInternalUrl from '@docusaurus/isInternalUrl';
21
- import type {Props} from '@theme/DocSidebar';
22
19
  import Logo from '@theme/Logo';
23
20
  import IconArrow from '@theme/IconArrow';
24
- import IconMenu from '@theme/IconMenu';
25
- import IconExternalLink from '@theme/IconExternalLink';
26
21
  import {translate} from '@docusaurus/Translate';
22
+ import DocSidebarItems from '@theme/DocSidebarItems';
23
+ import type {Props} from '@theme/DocSidebar';
27
24
 
28
25
  import styles from './styles.module.css';
29
26
 
30
- const MOBILE_TOGGLE_SIZE = 24;
31
-
32
- const isActiveSidebarItem = (item, activePath) => {
33
- if (item.type === 'link') {
34
- return isSamePath(item.href, activePath);
35
- }
36
- if (item.type === 'category') {
37
- return item.items.some((subItem) =>
38
- isActiveSidebarItem(subItem, activePath),
39
- );
40
- }
41
- return false;
42
- };
43
-
44
- // Optimize sidebar at each "level"
45
- // TODO this item should probably not receive the "activePath" props
46
- // TODO this triggers whole sidebar re-renders on navigation
47
- const DocSidebarItems = memo(function DocSidebarItems({
48
- items,
49
- ...props
50
- }: any): JSX.Element {
51
- return items.map((item, index) => (
52
- <DocSidebarItem
53
- key={index} // sidebar is static, the index does not change
54
- item={item}
55
- {...props}
56
- />
57
- ));
58
- });
59
-
60
- function DocSidebarItem(props): JSX.Element {
61
- switch (props.item.type) {
62
- case 'category':
63
- return <DocSidebarItemCategory {...props} />;
64
- case 'link':
65
- default:
66
- return <DocSidebarItemLink {...props} />;
67
- }
68
- }
69
-
70
- function DocSidebarItemCategory({
71
- item,
72
- onItemClick,
73
- collapsible,
74
- activePath,
75
- ...props
76
- }) {
77
- const {items, label} = item;
78
-
79
- const isActive = isActiveSidebarItem(item, activePath);
80
- const wasActive = usePrevious(isActive);
81
-
82
- // active categories are always initialized as expanded
83
- // the default (item.collapsed) is only used for non-active categories
84
- const [collapsed, setCollapsed] = useState(() => {
85
- if (!collapsible) {
86
- return false;
87
- }
88
- return isActive ? false : item.collapsed;
89
- });
90
-
91
- const menuListRef = useRef<HTMLUListElement>(null);
92
- const [menuListHeight, setMenuListHeight] = useState<string | undefined>(
93
- undefined,
94
- );
95
- const handleMenuListHeight = (calc = true) => {
96
- setMenuListHeight(
97
- calc ? `${menuListRef.current?.scrollHeight}px` : undefined,
98
- );
99
- };
100
-
101
- // If we navigate to a category, it should automatically expand itself
102
- useEffect(() => {
103
- const justBecameActive = isActive && !wasActive;
104
- if (justBecameActive && collapsed) {
105
- setCollapsed(false);
106
- }
107
- }, [isActive, wasActive, collapsed]);
108
-
109
- const handleItemClick = useCallback(
110
- (e) => {
111
- e.preventDefault();
27
+ function useShowAnnouncementBar() {
28
+ const {isActive} = useAnnouncementBar();
29
+ const [showAnnouncementBar, setShowAnnouncementBar] = useState(isActive);
112
30
 
113
- if (!menuListHeight) {
114
- handleMenuListHeight();
31
+ useScrollPosition(
32
+ ({scrollY}) => {
33
+ if (isActive) {
34
+ setShowAnnouncementBar(scrollY === 0);
115
35
  }
116
-
117
- setTimeout(() => setCollapsed((state) => !state), 100);
118
36
  },
119
- [menuListHeight],
120
- );
121
-
122
- if (items.length === 0) {
123
- return null;
124
- }
125
-
126
- return (
127
- <li
128
- className={clsx('menu__list-item', {
129
- 'menu__list-item--collapsed': collapsed,
130
- })}>
131
- {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
132
- <a
133
- className={clsx('menu__link', {
134
- 'menu__link--sublist': collapsible,
135
- 'menu__link--active': collapsible && isActive,
136
- [styles.menuLinkText]: !collapsible,
137
- })}
138
- onClick={collapsible ? handleItemClick : undefined}
139
- href={collapsible ? '#' : undefined}
140
- {...props}>
141
- {label}
142
- </a>
143
- <ul
144
- className="menu__list"
145
- ref={menuListRef}
146
- style={{
147
- height: menuListHeight,
148
- }}
149
- onTransitionEnd={() => {
150
- if (!collapsed) {
151
- handleMenuListHeight(false);
152
- }
153
- }}>
154
- <DocSidebarItems
155
- items={items}
156
- tabIndex={collapsed ? '-1' : '0'}
157
- onItemClick={onItemClick}
158
- collapsible={collapsible}
159
- activePath={activePath}
160
- />
161
- </ul>
162
- </li>
37
+ [isActive],
163
38
  );
39
+ return isActive && showAnnouncementBar;
164
40
  }
165
41
 
166
- function DocSidebarItemLink({
167
- item,
168
- onItemClick,
169
- activePath,
170
- collapsible: _collapsible,
171
- ...props
172
- }) {
173
- const {href, label} = item;
174
- const isActive = isActiveSidebarItem(item, activePath);
175
- return (
176
- <li className="menu__list-item" key={label}>
177
- <Link
178
- className={clsx('menu__link', {
179
- 'menu__link--active': isActive,
180
- })}
181
- to={href}
182
- {...(isInternalUrl(href) && {
183
- isNavLink: true,
184
- exact: true,
185
- onClick: onItemClick,
186
- })}
187
- {...props}>
188
- {isInternalUrl(href) ? (
189
- label
190
- ) : (
191
- <span>
192
- {label}
193
- <IconExternalLink />
194
- </span>
195
- )}
196
- </Link>
197
- </li>
198
- );
199
- }
200
-
201
- function useShowAnnouncementBar() {
202
- const {isClosed} = useAnnouncementBar();
203
- const [showAnnouncementBar, setShowAnnouncementBar] = useState(!isClosed);
204
- useScrollPosition(({scrollY}) => {
205
- if (!isClosed) {
206
- setShowAnnouncementBar(scrollY === 0);
207
- }
208
- });
209
- return showAnnouncementBar;
210
- }
211
-
212
- function useResponsiveSidebar() {
213
- const [showResponsiveSidebar, setShowResponsiveSidebar] = useState(false);
214
- useLockBodyScroll(showResponsiveSidebar);
215
-
216
- const windowSize = useWindowSize();
217
- useEffect(() => {
218
- if (windowSize === windowSizes.desktop) {
219
- setShowResponsiveSidebar(false);
220
- }
221
- }, [windowSize]);
222
-
223
- const closeResponsiveSidebar = useCallback(
224
- (e) => {
225
- e.target.blur();
226
- setShowResponsiveSidebar(false);
227
- },
228
- [setShowResponsiveSidebar],
229
- );
230
-
231
- const toggleResponsiveSidebar = useCallback(() => {
232
- setShowResponsiveSidebar((value) => !value);
233
- }, [setShowResponsiveSidebar]);
234
-
235
- return {
236
- showResponsiveSidebar,
237
- closeResponsiveSidebar,
238
- toggleResponsiveSidebar,
239
- };
240
- }
241
-
242
- function HideableSidebarButton({onClick}) {
42
+ function HideableSidebarButton({onClick}: {onClick: React.MouseEventHandler}) {
243
43
  return (
244
44
  <button
245
45
  type="button"
@@ -263,63 +63,12 @@ function HideableSidebarButton({onClick}) {
263
63
  );
264
64
  }
265
65
 
266
- function ResponsiveSidebarButton({responsiveSidebarOpened, onClick}) {
267
- return (
268
- <button
269
- aria-label={
270
- responsiveSidebarOpened
271
- ? translate({
272
- id: 'theme.docs.sidebar.responsiveCloseButtonLabel',
273
- message: 'Close menu',
274
- description:
275
- 'The ARIA label for close button of mobile doc sidebar',
276
- })
277
- : translate({
278
- id: 'theme.docs.sidebar.responsiveOpenButtonLabel',
279
- message: 'Open menu',
280
- description:
281
- 'The ARIA label for open button of mobile doc sidebar',
282
- })
283
- }
284
- aria-haspopup="true"
285
- className="button button--secondary button--sm menu__button"
286
- type="button"
287
- onClick={onClick}>
288
- {responsiveSidebarOpened ? (
289
- <span
290
- className={clsx(styles.sidebarMenuIcon, styles.sidebarMenuCloseIcon)}>
291
- &times;
292
- </span>
293
- ) : (
294
- <IconMenu
295
- className={styles.sidebarMenuIcon}
296
- height={MOBILE_TOGGLE_SIZE}
297
- width={MOBILE_TOGGLE_SIZE}
298
- />
299
- )}
300
- </button>
301
- );
302
- }
303
-
304
- function DocSidebar({
305
- path,
306
- sidebar,
307
- sidebarCollapsible = true,
308
- onCollapse,
309
- isHidden,
310
- }: Props): JSX.Element | null {
66
+ function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}: Props) {
311
67
  const showAnnouncementBar = useShowAnnouncementBar();
312
68
  const {
313
69
  navbar: {hideOnScroll},
314
70
  hideableSidebar,
315
71
  } = useThemeConfig();
316
- const {isClosed: isAnnouncementBarClosed} = useAnnouncementBar();
317
-
318
- const {
319
- showResponsiveSidebar,
320
- closeResponsiveSidebar,
321
- toggleResponsiveSidebar,
322
- } = useResponsiveSidebar();
323
72
 
324
73
  return (
325
74
  <div
@@ -329,34 +78,11 @@ function DocSidebar({
329
78
  })}>
330
79
  {hideOnScroll && <Logo tabIndex={-1} className={styles.sidebarLogo} />}
331
80
  <nav
332
- className={clsx(
333
- 'menu',
334
- 'menu--responsive',
335
- 'thin-scrollbar',
336
- styles.menu,
337
- {
338
- 'menu--show': showResponsiveSidebar,
339
- [styles.menuWithAnnouncementBar]:
340
- !isAnnouncementBarClosed && showAnnouncementBar,
341
- },
342
- )}
343
- aria-label={translate({
344
- id: 'theme.docs.sidebar.navAriaLabel',
345
- message: 'Sidebar navigation',
346
- description: 'The ARIA label for documentation menu',
81
+ className={clsx('menu thin-scrollbar', styles.menu, {
82
+ [styles.menuWithAnnouncementBar]: showAnnouncementBar,
347
83
  })}>
348
- <ResponsiveSidebarButton
349
- responsiveSidebarOpened={showResponsiveSidebar}
350
- onClick={toggleResponsiveSidebar}
351
- />
352
-
353
- <ul className="menu__list">
354
- <DocSidebarItems
355
- items={sidebar}
356
- onItemClick={closeResponsiveSidebar}
357
- collapsible={sidebarCollapsible}
358
- activePath={path}
359
- />
84
+ <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
85
+ <DocSidebarItems items={sidebar} activePath={path} level={1} />
360
86
  </ul>
361
87
  </nav>
362
88
  {hideableSidebar && <HideableSidebarButton onClick={onCollapse} />}
@@ -364,4 +90,56 @@ function DocSidebar({
364
90
  );
365
91
  }
366
92
 
367
- export default DocSidebar;
93
+ // eslint-disable-next-line react/function-component-definition
94
+ const DocSidebarMobileSecondaryMenu: MobileSecondaryMenuComponent<Props> = ({
95
+ toggleSidebar,
96
+ sidebar,
97
+ path,
98
+ }) => (
99
+ <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
100
+ <DocSidebarItems
101
+ items={sidebar}
102
+ activePath={path}
103
+ onItemClick={(item) => {
104
+ // Mobile sidebar should only be closed if the category has a link
105
+ if (item.type === 'category' && item.href) {
106
+ toggleSidebar();
107
+ }
108
+ if (item.type === 'link') {
109
+ toggleSidebar();
110
+ }
111
+ }}
112
+ level={1}
113
+ />
114
+ </ul>
115
+ );
116
+
117
+ function DocSidebarMobile(props: Props) {
118
+ return (
119
+ <MobileSecondaryMenuFiller
120
+ component={DocSidebarMobileSecondaryMenu}
121
+ props={props}
122
+ />
123
+ );
124
+ }
125
+
126
+ const DocSidebarDesktopMemo = React.memo(DocSidebarDesktop);
127
+ const DocSidebarMobileMemo = React.memo(DocSidebarMobile);
128
+
129
+ export default function DocSidebar(props: Props): JSX.Element {
130
+ const windowSize = useWindowSize();
131
+
132
+ // Desktop sidebar visible on hydration: need SSR rendering
133
+ const shouldRenderSidebarDesktop =
134
+ windowSize === 'desktop' || windowSize === 'ssr';
135
+
136
+ // Mobile sidebar not visible on hydration: can avoid SSR rendering
137
+ const shouldRenderSidebarMobile = windowSize === 'mobile';
138
+
139
+ return (
140
+ <>
141
+ {shouldRenderSidebarDesktop && <DocSidebarDesktopMemo {...props} />}
142
+ {shouldRenderSidebarMobile && <DocSidebarMobileMemo {...props} />}
143
+ </>
144
+ );
145
+ }