@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
@@ -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
- import Toggle from '@theme/Toggle';
13
- import useThemeContext from '@theme/hooks/useThemeContext';
14
- import {useThemeConfig} from '@docusaurus/theme-common';
15
- import useHideableNavbar from '@theme/hooks/useHideableNavbar';
16
- import useLockBodyScroll from '@theme/hooks/useLockBodyScroll';
17
- import useWindowSize, {windowSizes} from '@theme/hooks/useWindowSize';
18
- import NavbarItem from '@theme/NavbarItem';
12
+ import ColorModeToggle from '@theme/ColorModeToggle';
13
+ import {
14
+ useThemeConfig,
15
+ useMobileSecondaryMenuRenderer,
16
+ usePrevious,
17
+ useHistoryPopHandler,
18
+ useHideableNavbar,
19
+ useLockBodyScroll,
20
+ useWindowSize,
21
+ useColorMode,
22
+ } from '@docusaurus/theme-common';
23
+ import {useActivePlugin} from '@docusaurus/plugin-content-docs/client';
24
+ import NavbarItem, {type 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';
59
+
60
+ const [shown, setShown] = useState(false);
52
61
 
53
- const showSidebar = useCallback(() => {
54
- setSidebarShown(true);
55
- }, [setSidebarShown]);
56
- const hideSidebar = useCallback(() => {
57
- setSidebarShown(false);
58
- }, [setSidebarShown]);
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
+ }, []);
59
77
 
60
- const onToggleChange = useCallback(
78
+ useEffect(() => {
79
+ if (windowSize === 'desktop') {
80
+ setShown(false);
81
+ }
82
+ }, [windowSize]);
83
+
84
+ return {shouldRender, toggle, shown};
85
+ }
86
+
87
+ function useColorModeToggle() {
88
+ const {
89
+ colorMode: {disableSwitch},
90
+ } = useThemeConfig();
91
+ const {isDarkTheme, setLightTheme, setDarkTheme} = useColorMode();
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);
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
+ );
66
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();
72
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
+ <ColorModeToggle
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>
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
+ export default 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,50 +270,29 @@ function Navbar(): JSX.Element {
109
270
  {rightItems.map((item, i) => (
110
271
  <NavbarItem {...item} key={i} />
111
272
  ))}
112
- {!disableColorModeSwitch && (
113
- <Toggle
114
- className={styles.displayOnlyInLargeViewport}
115
- checked={isDarkTheme}
116
- onChange={onToggleChange}
273
+ {!colorModeToggle.disabled && (
274
+ <ColorModeToggle
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
  }
157
-
158
- export default Navbar;
@@ -5,9 +5,12 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- @media screen and (max-width: 997px) {
9
- .displayOnlyInLargeViewport {
10
- display: none !important;
8
+ /*
9
+ Hide toggle in small viewports
10
+ */
11
+ @media (max-width: 996px) {
12
+ .toggle {
13
+ display: none;
11
14
  }
12
15
  }
13
16
 
@@ -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
+ }
@@ -5,234 +5,64 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import React, {useState, useRef, useEffect} from 'react';
8
+ import React from 'react';
9
9
  import clsx from 'clsx';
10
- import Link from '@docusaurus/Link';
11
- import useBaseUrl from '@docusaurus/useBaseUrl';
12
- import {useLocation} from '@docusaurus/router';
13
- import {isSamePath} from '@docusaurus/theme-common';
10
+
11
+ import NavbarNavLink from '@theme/NavbarItem/NavbarNavLink';
12
+
14
13
  import type {
15
- NavLinkProps,
16
14
  DesktopOrMobileNavBarItemProps,
17
15
  Props,
18
16
  } from '@theme/NavbarItem/DefaultNavbarItem';
19
- import IconExternalLink from '@theme/IconExternalLink';
20
- import isInternalUrl from '@docusaurus/isInternalUrl';
21
-
22
- const dropdownLinkActiveClass = 'dropdown__link--active';
23
-
24
- function NavLink({
25
- activeBasePath,
26
- activeBaseRegex,
27
- to,
28
- href,
29
- label,
30
- activeClassName = 'navbar__link--active',
31
- prependBaseUrlToHref,
32
- ...props
33
- }: NavLinkProps) {
34
- // TODO all this seems hacky
35
- // {to: 'version'} should probably be forbidden, in favor of {to: '/version'}
36
- const toUrl = useBaseUrl(to);
37
- const activeBaseUrl = useBaseUrl(activeBasePath);
38
- const normalizedHref = useBaseUrl(href, {forcePrependBaseUrl: true});
39
- const isExternalLink = label && href && !isInternalUrl(href);
40
- const isDropdownLink = activeClassName === dropdownLinkActiveClass;
41
17
 
42
- return (
43
- <Link
44
- {...(href
45
- ? {
46
- href: prependBaseUrlToHref ? normalizedHref : href,
47
- }
48
- : {
49
- isNavLink: true,
50
- activeClassName,
51
- to: toUrl,
52
- ...(activeBasePath || activeBaseRegex
53
- ? {
54
- isActive: (_match, location) =>
55
- activeBaseRegex
56
- ? new RegExp(activeBaseRegex).test(location.pathname)
57
- : location.pathname.startsWith(activeBaseUrl),
58
- }
59
- : null),
60
- })}
61
- {...props}>
62
- {isExternalLink ? (
63
- <span>
64
- {label}
65
- <IconExternalLink {...(isDropdownLink && {width: 12, height: 12})} />
66
- </span>
67
- ) : (
68
- label
69
- )}
70
- </Link>
71
- );
72
- }
18
+ import {getInfimaActiveClassName} from '@theme/NavbarItem/utils';
73
19
 
74
- function NavItemDesktop({
75
- items,
76
- position,
20
+ function DefaultNavbarItemDesktop({
77
21
  className,
22
+ isDropdownItem = false,
78
23
  ...props
79
24
  }: DesktopOrMobileNavBarItemProps) {
80
- const dropdownRef = useRef<HTMLDivElement>(null);
81
- const dropdownMenuRef = useRef<HTMLUListElement>(null);
82
- const [showDropdown, setShowDropdown] = useState(false);
83
-
84
- useEffect(() => {
85
- const handleClickOutside = (event) => {
86
- if (!dropdownRef.current || dropdownRef.current.contains(event.target)) {
87
- return;
88
- }
89
-
90
- setShowDropdown(false);
91
- };
92
-
93
- document.addEventListener('mousedown', handleClickOutside);
94
- document.addEventListener('touchstart', handleClickOutside);
95
-
96
- return () => {
97
- document.removeEventListener('mousedown', handleClickOutside);
98
- document.removeEventListener('touchstart', handleClickOutside);
99
- };
100
- }, [dropdownRef]);
101
-
102
- const navLinkClassNames = (extraClassName?: string, isDropdownItem = false) =>
103
- clsx(
104
- {
105
- 'navbar__item navbar__link': !isDropdownItem,
106
- dropdown__link: isDropdownItem,
107
- },
108
- extraClassName,
109
- );
25
+ const element = (
26
+ <NavbarNavLink
27
+ className={clsx(
28
+ isDropdownItem ? 'dropdown__link' : 'navbar__item navbar__link',
29
+ className,
30
+ )}
31
+ {...props}
32
+ />
33
+ );
110
34
 
111
- if (!items) {
112
- return <NavLink className={navLinkClassNames(className)} {...props} />;
35
+ if (isDropdownItem) {
36
+ return <li>{element}</li>;
113
37
  }
114
38
 
115
- return (
116
- <div
117
- ref={dropdownRef}
118
- className={clsx('navbar__item', 'dropdown', 'dropdown--hoverable', {
119
- 'dropdown--left': position === 'left',
120
- 'dropdown--right': position === 'right',
121
- 'dropdown--show': showDropdown,
122
- })}>
123
- <NavLink
124
- className={navLinkClassNames(className)}
125
- {...props}
126
- onClick={props.to ? undefined : (e) => e.preventDefault()}
127
- onKeyDown={(e) => {
128
- if (e.key === 'Enter') {
129
- e.preventDefault();
130
- setShowDropdown(!showDropdown);
131
- }
132
- }}>
133
- {props.children ?? props.label}
134
- </NavLink>
135
- <ul ref={dropdownMenuRef} className="dropdown__menu">
136
- {items.map(({className: childItemClassName, ...childItemProps}, i) => (
137
- <li key={i}>
138
- <NavLink
139
- onKeyDown={(e) => {
140
- if (i === items.length - 1 && e.key === 'Tab') {
141
- e.preventDefault();
142
-
143
- setShowDropdown(false);
144
-
145
- const nextNavbarItem = (dropdownRef.current as HTMLElement)
146
- .nextElementSibling;
147
-
148
- if (nextNavbarItem) {
149
- (nextNavbarItem as HTMLElement).focus();
150
- }
151
- }
152
- }}
153
- activeClassName={dropdownLinkActiveClass}
154
- className={navLinkClassNames(childItemClassName, true)}
155
- {...childItemProps}
156
- />
157
- </li>
158
- ))}
159
- </ul>
160
- </div>
161
- );
39
+ return element;
162
40
  }
163
41
 
164
- function NavItemMobile({
165
- items,
42
+ function DefaultNavbarItemMobile({
166
43
  className,
167
- position: _position, // Need to destructure position from props so that it doesn't get passed on.
44
+ isDropdownItem: _isDropdownItem,
168
45
  ...props
169
46
  }: DesktopOrMobileNavBarItemProps) {
170
- const menuListRef = useRef<HTMLUListElement>(null);
171
- const {pathname} = useLocation();
172
- const [collapsed, setCollapsed] = useState(
173
- () => !items?.some((item) => isSamePath(item.to, pathname)) ?? true,
174
- );
175
-
176
- const navLinkClassNames = (extraClassName?: string, isSubList = false) =>
177
- clsx(
178
- 'menu__link',
179
- {
180
- 'menu__link--sublist': isSubList,
181
- },
182
- extraClassName,
183
- );
184
-
185
- if (!items) {
186
- return (
187
- <li className="menu__list-item">
188
- <NavLink className={navLinkClassNames(className)} {...props} />
189
- </li>
190
- );
191
- }
192
-
193
- const menuListHeight = menuListRef.current?.scrollHeight
194
- ? `${menuListRef.current?.scrollHeight}px`
195
- : undefined;
196
-
197
47
  return (
198
- <li
199
- className={clsx('menu__list-item', {
200
- 'menu__list-item--collapsed': collapsed,
201
- })}>
202
- <NavLink
203
- role="button"
204
- className={navLinkClassNames(className, true)}
205
- {...props}
206
- onClick={(e) => {
207
- e.preventDefault();
208
- setCollapsed((state) => !state);
209
- }}>
210
- {props.children ?? props.label}
211
- </NavLink>
212
- <ul
213
- className="menu__list"
214
- ref={menuListRef}
215
- style={{
216
- height: !collapsed ? menuListHeight : undefined,
217
- }}>
218
- {items.map(({className: childItemClassName, ...childItemProps}, i) => (
219
- <li className="menu__list-item" key={i}>
220
- <NavLink
221
- activeClassName="menu__link--active"
222
- className={navLinkClassNames(childItemClassName)}
223
- {...childItemProps}
224
- onClick={props.onClick}
225
- />
226
- </li>
227
- ))}
228
- </ul>
48
+ <li className="menu__list-item">
49
+ <NavbarNavLink className={clsx('menu__link', className)} {...props} />
229
50
  </li>
230
51
  );
231
52
  }
232
53
 
233
- function DefaultNavbarItem({mobile = false, ...props}: Props): JSX.Element {
234
- const Comp = mobile ? NavItemMobile : NavItemDesktop;
235
- return <Comp {...props} />;
54
+ export default function DefaultNavbarItem({
55
+ mobile = false,
56
+ position: _position, // Need to destructure position from props so that it doesn't get passed on.
57
+ ...props
58
+ }: Props): JSX.Element {
59
+ const Comp = mobile ? DefaultNavbarItemMobile : DefaultNavbarItemDesktop;
60
+ return (
61
+ <Comp
62
+ {...props}
63
+ activeClassName={
64
+ props.activeClassName ?? getInfimaActiveClassName(mobile)
65
+ }
66
+ />
67
+ );
236
68
  }
237
-
238
- export default DefaultNavbarItem;