@docusaurus/theme-classic 2.0.0-beta.1 → 2.0.0-beta.10

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 (367) hide show
  1. package/README.md +1 -1
  2. package/lib/__tests__/validateThemeConfig.test.js +277 -3
  3. package/lib/admonitions.css +35 -0
  4. package/lib/deps.d.ts +13 -0
  5. package/lib/index.js +41 -16
  6. package/lib/prism-include-languages.js +9 -5
  7. package/lib/theme/AnnouncementBar/index.js +10 -16
  8. package/lib/theme/AnnouncementBar/styles.module.css +25 -30
  9. package/lib/theme/BackToTopButton/index.js +140 -0
  10. package/lib/theme/BackToTopButton/styles.module.css +42 -0
  11. package/lib/theme/BlogArchivePage/index.js +89 -0
  12. package/lib/theme/BlogLayout/index.js +51 -0
  13. package/lib/theme/BlogListPage/index.js +10 -21
  14. package/lib/theme/BlogPostAuthor/index.js +51 -0
  15. package/lib/theme/BlogPostAuthor/styles.module.css +12 -0
  16. package/lib/theme/BlogPostAuthors/index.js +47 -0
  17. package/lib/theme/BlogPostAuthors/styles.module.css +11 -0
  18. package/lib/theme/BlogPostItem/index.js +58 -67
  19. package/lib/theme/BlogPostPage/index.js +37 -24
  20. package/lib/theme/BlogSidebar/index.js +5 -7
  21. package/lib/theme/BlogSidebar/styles.module.css +2 -2
  22. package/lib/theme/BlogTagsListPage/index.js +8 -44
  23. package/lib/theme/BlogTagsPostsPage/index.js +24 -38
  24. package/lib/theme/CodeBlock/index.js +18 -138
  25. package/lib/theme/CodeBlock/styles.module.css +6 -9
  26. package/lib/theme/Details/index.js +30 -0
  27. package/lib/theme/Details/styles.module.css +13 -0
  28. package/lib/theme/DocCard/index.js +84 -0
  29. package/lib/theme/DocCard/styles.module.css +43 -0
  30. package/lib/theme/DocCardList/index.js +28 -0
  31. package/lib/theme/DocCategoryGeneratedIndexPage/index.js +57 -0
  32. package/lib/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  33. package/lib/theme/DocItem/index.js +29 -46
  34. package/lib/theme/DocItem/styles.module.css +5 -9
  35. package/lib/theme/DocItemFooter/index.js +79 -0
  36. package/lib/theme/DocItemFooter/styles.module.css +18 -0
  37. package/lib/theme/DocPage/index.js +35 -52
  38. package/lib/theme/DocPage/styles.module.css +8 -23
  39. package/lib/theme/DocPaginator/index.js +6 -7
  40. package/lib/theme/DocSidebar/index.js +53 -235
  41. package/lib/theme/DocSidebar/styles.module.css +0 -18
  42. package/lib/theme/DocSidebarItem/index.js +209 -0
  43. package/lib/theme/DocSidebarItem/styles.module.css +19 -0
  44. package/lib/theme/DocTagDocListPage/index.js +89 -0
  45. package/lib/theme/DocTagsListPage/index.js +44 -0
  46. package/lib/theme/DocVersionBadge/index.js +34 -0
  47. package/lib/theme/{DocVersionSuggestions → DocVersionBanner}/index.js +39 -20
  48. package/lib/theme/EditThisPage/index.js +3 -1
  49. package/lib/theme/ErrorPageContent.js +43 -0
  50. package/lib/theme/Footer/index.js +16 -5
  51. package/lib/theme/Heading/index.js +17 -22
  52. package/lib/theme/Heading/styles.css +5 -6
  53. package/lib/theme/Heading/styles.module.css +9 -5
  54. package/lib/theme/IconArrow/index.js +2 -2
  55. package/lib/theme/IconClose/index.js +31 -0
  56. package/lib/theme/IconEdit/index.js +3 -3
  57. package/lib/theme/IconExternalLink/index.js +3 -3
  58. package/lib/theme/IconLanguage/index.js +3 -3
  59. package/lib/theme/IconMenu/index.js +3 -3
  60. package/lib/theme/LastUpdated/index.js +4 -2
  61. package/lib/theme/Layout/index.js +5 -1
  62. package/lib/theme/LayoutHead/index.js +22 -17
  63. package/lib/theme/LayoutProviders/index.js +11 -5
  64. package/lib/theme/Logo/index.js +16 -14
  65. package/lib/theme/MDXComponents/index.js +45 -4
  66. package/lib/theme/MDXComponents/styles.css +11 -0
  67. package/lib/theme/MDXPage/index.js +2 -1
  68. package/lib/theme/Navbar/index.js +162 -42
  69. package/lib/theme/Navbar/styles.module.css +10 -3
  70. package/lib/theme/NavbarItem/DefaultNavbarItem.js +27 -123
  71. package/lib/theme/NavbarItem/DocNavbarItem.js +7 -8
  72. package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +19 -12
  73. package/lib/theme/NavbarItem/DropdownNavbarItem.js +155 -0
  74. package/lib/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +6 -10
  75. package/lib/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  76. package/lib/theme/NavbarItem/index.js +31 -11
  77. package/lib/theme/{SearchMetadatas → SearchMetadata}/index.js +2 -2
  78. package/lib/theme/Seo/index.js +10 -7
  79. package/lib/theme/SkipToContent/index.js +12 -4
  80. package/lib/theme/SkipToContent/styles.module.css +1 -0
  81. package/lib/theme/TOC/index.js +9 -29
  82. package/lib/theme/TOC/styles.module.css +1 -1
  83. package/lib/theme/TOCCollapsible/index.js +53 -0
  84. package/lib/theme/TOCCollapsible/styles.module.css +50 -0
  85. package/lib/theme/TOCInline/index.js +7 -27
  86. package/lib/theme/TOCItems/index.js +78 -0
  87. package/lib/theme/Tabs/__tests__/index.test.js +123 -0
  88. package/lib/theme/Tabs/index.js +73 -50
  89. package/lib/theme/Tabs/styles.module.css +0 -13
  90. package/lib/theme/Tag/index.js +40 -0
  91. package/lib/theme/Tag/styles.module.css +70 -0
  92. package/lib/theme/TagsListByLetter/index.js +48 -0
  93. package/lib/theme/TagsListByLetter/styles.module.css +11 -0
  94. package/lib/theme/TagsListInline/index.js +44 -0
  95. package/lib/theme/TagsListInline/styles.module.css +15 -0
  96. package/lib/theme/ThemeProvider/index.js +8 -3
  97. package/lib/theme/ThemedImage/index.js +6 -7
  98. package/lib/theme/Toggle/index.js +41 -44
  99. package/lib/theme/Toggle/styles.module.css +91 -3
  100. package/lib/theme/UserPreferencesProvider/index.js +9 -12
  101. package/lib/theme/hooks/useHideableNavbar.js +14 -32
  102. package/lib/theme/hooks/useTabGroupChoice.js +2 -4
  103. package/lib/theme/hooks/useTheme.js +3 -5
  104. package/lib/theme/hooks/useWindowSize.js +33 -20
  105. package/lib/theme/prism-include-languages.js +4 -3
  106. package/lib/theme-classic.d.ts +806 -0
  107. package/lib/translations.js +4 -4
  108. package/lib/types.d.ts +0 -599
  109. package/lib/validateThemeConfig.js +230 -246
  110. package/lib-next/__tests__/validateThemeConfig.test.js +277 -3
  111. package/lib-next/admonitions.css +35 -0
  112. package/lib-next/deps.d.ts +13 -0
  113. package/lib-next/index.js +45 -13
  114. package/lib-next/prism-include-languages.js +0 -2
  115. package/lib-next/theme/AnnouncementBar/index.js +9 -18
  116. package/lib-next/theme/AnnouncementBar/styles.module.css +25 -30
  117. package/lib-next/theme/BackToTopButton/index.js +131 -0
  118. package/lib-next/theme/BackToTopButton/styles.module.css +42 -0
  119. package/lib-next/theme/BlogArchivePage/index.js +80 -0
  120. package/lib-next/theme/BlogLayout/index.js +40 -0
  121. package/lib-next/theme/BlogListPage/index.js +17 -25
  122. package/lib-next/theme/BlogPostAuthor/index.js +46 -0
  123. package/lib-next/theme/BlogPostAuthor/styles.module.css +12 -0
  124. package/lib-next/theme/BlogPostAuthors/index.js +34 -0
  125. package/lib-next/theme/BlogPostAuthors/styles.module.css +11 -0
  126. package/lib-next/theme/BlogPostItem/index.js +79 -86
  127. package/lib-next/theme/BlogPostPage/index.js +70 -35
  128. package/lib-next/theme/BlogSidebar/index.js +11 -13
  129. package/lib-next/theme/BlogSidebar/styles.module.css +2 -2
  130. package/lib-next/theme/BlogTagsListPage/index.js +14 -55
  131. package/lib-next/theme/BlogTagsPostsPage/index.js +29 -39
  132. package/lib-next/theme/CodeBlock/index.js +17 -149
  133. package/lib-next/theme/CodeBlock/styles.module.css +6 -9
  134. package/lib-next/theme/Details/index.js +20 -0
  135. package/lib-next/theme/Details/styles.module.css +13 -0
  136. package/lib-next/theme/DocCard/index.js +80 -0
  137. package/lib-next/theme/DocCard/styles.module.css +43 -0
  138. package/lib-next/theme/DocCardList/index.js +19 -0
  139. package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +49 -0
  140. package/lib-next/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  141. package/lib-next/theme/DocItem/index.js +40 -56
  142. package/lib-next/theme/DocItem/styles.module.css +5 -9
  143. package/lib-next/theme/DocItemFooter/index.js +79 -0
  144. package/lib-next/theme/DocItemFooter/styles.module.css +18 -0
  145. package/lib-next/theme/DocPage/index.js +46 -47
  146. package/lib-next/theme/DocPage/styles.module.css +8 -23
  147. package/lib-next/theme/DocPaginator/index.js +7 -11
  148. package/lib-next/theme/DocSidebar/index.js +69 -295
  149. package/lib-next/theme/DocSidebar/styles.module.css +0 -18
  150. package/lib-next/theme/DocSidebarItem/index.js +217 -0
  151. package/lib-next/theme/DocSidebarItem/styles.module.css +19 -0
  152. package/lib-next/theme/DocTagDocListPage/index.js +89 -0
  153. package/lib-next/theme/DocTagsListPage/index.js +38 -0
  154. package/lib-next/theme/DocVersionBadge/index.js +27 -0
  155. package/lib-next/theme/{DocVersionSuggestions → DocVersionBanner}/index.js +51 -36
  156. package/lib-next/theme/EditThisPage/index.js +6 -1
  157. package/lib-next/theme/ErrorPageContent.js +35 -0
  158. package/lib-next/theme/Footer/index.js +27 -5
  159. package/lib-next/theme/Heading/index.js +25 -29
  160. package/lib-next/theme/Heading/styles.css +5 -6
  161. package/lib-next/theme/Heading/styles.module.css +9 -5
  162. package/lib-next/theme/IconArrow/index.js +2 -2
  163. package/lib-next/theme/IconClose/index.js +23 -0
  164. package/lib-next/theme/IconEdit/index.js +2 -2
  165. package/lib-next/theme/IconExternalLink/index.js +2 -2
  166. package/lib-next/theme/IconLanguage/index.js +2 -2
  167. package/lib-next/theme/IconMenu/index.js +2 -2
  168. package/lib-next/theme/LastUpdated/index.js +3 -2
  169. package/lib-next/theme/Layout/index.js +3 -1
  170. package/lib-next/theme/LayoutHead/index.js +18 -23
  171. package/lib-next/theme/LayoutProviders/index.js +17 -6
  172. package/lib-next/theme/Logo/index.js +25 -21
  173. package/lib-next/theme/MDXComponents/index.js +34 -7
  174. package/lib-next/theme/MDXComponents/styles.css +11 -0
  175. package/lib-next/theme/MDXPage/index.js +10 -2
  176. package/lib-next/theme/Navbar/index.js +193 -56
  177. package/lib-next/theme/Navbar/styles.module.css +10 -3
  178. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +45 -147
  179. package/lib-next/theme/NavbarItem/DocNavbarItem.js +7 -7
  180. package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +31 -19
  181. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +159 -0
  182. package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +4 -12
  183. package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  184. package/lib-next/theme/NavbarItem/index.js +25 -12
  185. package/lib-next/theme/{SearchMetadatas → SearchMetadata}/index.js +1 -1
  186. package/lib-next/theme/Seo/index.js +11 -7
  187. package/lib-next/theme/SkipToContent/index.js +7 -8
  188. package/lib-next/theme/SkipToContent/styles.module.css +1 -0
  189. package/lib-next/theme/TOC/index.js +12 -36
  190. package/lib-next/theme/TOC/styles.module.css +1 -1
  191. package/lib-next/theme/TOCCollapsible/index.js +54 -0
  192. package/lib-next/theme/TOCCollapsible/styles.module.css +50 -0
  193. package/lib-next/theme/TOCInline/index.js +10 -28
  194. package/lib-next/theme/TOCItems/index.js +85 -0
  195. package/lib-next/theme/Tabs/__tests__/index.test.js +142 -0
  196. package/lib-next/theme/Tabs/index.js +91 -43
  197. package/lib-next/theme/Tabs/styles.module.css +0 -13
  198. package/lib-next/theme/Tag/index.js +27 -0
  199. package/lib-next/theme/Tag/styles.module.css +70 -0
  200. package/lib-next/theme/TagsListByLetter/index.js +42 -0
  201. package/lib-next/theme/TagsListByLetter/styles.module.css +11 -0
  202. package/lib-next/theme/TagsListInline/index.js +31 -0
  203. package/lib-next/theme/TagsListInline/styles.module.css +15 -0
  204. package/lib-next/theme/ThemeProvider/index.js +10 -7
  205. package/lib-next/theme/ThemedImage/index.js +7 -8
  206. package/lib-next/theme/Toggle/index.js +34 -37
  207. package/lib-next/theme/Toggle/styles.module.css +91 -3
  208. package/lib-next/theme/UserPreferencesProvider/index.js +9 -10
  209. package/lib-next/theme/hooks/useHideableNavbar.js +31 -44
  210. package/lib-next/theme/hooks/useTabGroupChoice.js +2 -4
  211. package/lib-next/theme/hooks/useTheme.js +4 -5
  212. package/lib-next/theme/hooks/useWindowSize.js +34 -20
  213. package/lib-next/theme/prism-include-languages.js +2 -1
  214. package/lib-next/theme-classic.d.ts +806 -0
  215. package/lib-next/translations.js +6 -10
  216. package/lib-next/types.d.ts +0 -599
  217. package/lib-next/validateThemeConfig.js +141 -114
  218. package/package.json +28 -25
  219. package/src/__tests__/validateThemeConfig.test.js +277 -3
  220. package/src/admonitions.css +35 -0
  221. package/src/deps.d.ts +13 -0
  222. package/src/index.ts +55 -22
  223. package/src/{prism-include-languages.js → prism-include-languages.ts} +0 -0
  224. package/src/theme/AnnouncementBar/index.tsx +10 -17
  225. package/src/theme/AnnouncementBar/styles.module.css +25 -30
  226. package/src/theme/BackToTopButton/index.tsx +142 -0
  227. package/src/theme/BackToTopButton/styles.module.css +42 -0
  228. package/src/theme/BlogArchivePage/index.tsx +91 -0
  229. package/src/theme/BlogLayout/index.tsx +44 -0
  230. package/src/theme/BlogListPage/index.tsx +18 -25
  231. package/src/theme/BlogPostAuthor/index.tsx +49 -0
  232. package/src/theme/BlogPostAuthor/styles.module.css +12 -0
  233. package/src/theme/BlogPostAuthors/index.tsx +39 -0
  234. package/src/theme/BlogPostAuthors/styles.module.css +11 -0
  235. package/src/theme/BlogPostItem/index.tsx +70 -80
  236. package/src/theme/BlogPostPage/index.tsx +72 -35
  237. package/src/theme/BlogSidebar/index.tsx +11 -13
  238. package/src/theme/BlogSidebar/styles.module.css +2 -2
  239. package/src/theme/BlogTagsListPage/index.tsx +14 -57
  240. package/src/theme/BlogTagsPostsPage/index.tsx +29 -39
  241. package/src/theme/CodeBlock/index.tsx +21 -151
  242. package/src/theme/CodeBlock/styles.module.css +6 -9
  243. package/src/theme/Details/index.tsx +24 -0
  244. package/src/theme/Details/styles.module.css +13 -0
  245. package/src/theme/DocCard/index.tsx +100 -0
  246. package/src/theme/DocCard/styles.module.css +43 -0
  247. package/src/theme/DocCardList/index.tsx +27 -0
  248. package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +53 -0
  249. package/src/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  250. package/src/theme/DocItem/index.tsx +43 -56
  251. package/src/theme/DocItem/styles.module.css +5 -9
  252. package/src/theme/DocItemFooter/index.tsx +91 -0
  253. package/src/theme/DocItemFooter/styles.module.css +18 -0
  254. package/src/theme/DocPage/index.tsx +44 -42
  255. package/src/theme/DocPage/styles.module.css +8 -23
  256. package/src/theme/DocPaginator/index.tsx +9 -13
  257. package/src/theme/DocSidebar/index.tsx +80 -307
  258. package/src/theme/DocSidebar/styles.module.css +0 -18
  259. package/src/theme/DocSidebarItem/index.tsx +242 -0
  260. package/src/theme/DocSidebarItem/styles.module.css +19 -0
  261. package/src/theme/DocTagDocListPage/index.tsx +89 -0
  262. package/src/theme/DocTagsListPage/index.tsx +41 -0
  263. package/src/theme/DocVersionBadge/index.tsx +30 -0
  264. package/src/theme/{DocVersionSuggestions → DocVersionBanner}/index.tsx +74 -44
  265. package/src/theme/EditThisPage/index.tsx +6 -1
  266. package/src/theme/ErrorPageContent.tsx +41 -0
  267. package/src/theme/Footer/index.tsx +30 -6
  268. package/src/theme/Heading/index.tsx +25 -31
  269. package/src/theme/Heading/styles.css +5 -6
  270. package/src/theme/Heading/styles.module.css +9 -5
  271. package/src/theme/IconArrow/index.tsx +2 -2
  272. package/src/theme/IconClose/index.tsx +26 -0
  273. package/src/theme/IconEdit/index.tsx +2 -2
  274. package/src/theme/IconExternalLink/index.tsx +2 -5
  275. package/src/theme/IconLanguage/index.tsx +2 -6
  276. package/src/theme/IconMenu/index.tsx +3 -3
  277. package/src/theme/LastUpdated/index.tsx +3 -2
  278. package/src/theme/Layout/index.tsx +3 -1
  279. package/src/theme/LayoutHead/index.tsx +18 -17
  280. package/src/theme/LayoutProviders/index.tsx +17 -6
  281. package/src/theme/Logo/index.tsx +21 -17
  282. package/src/theme/MDXComponents/index.tsx +39 -5
  283. package/src/theme/MDXComponents/styles.css +11 -0
  284. package/src/theme/MDXPage/index.tsx +10 -2
  285. package/src/theme/Navbar/index.tsx +203 -61
  286. package/src/theme/Navbar/styles.module.css +10 -3
  287. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +42 -154
  288. package/src/theme/NavbarItem/DocNavbarItem.tsx +12 -16
  289. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +33 -21
  290. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +7 -3
  291. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +181 -0
  292. package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +8 -9
  293. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  294. package/src/theme/NavbarItem/index.tsx +41 -16
  295. package/src/theme/{SearchMetadatas → SearchMetadata}/index.tsx +2 -2
  296. package/src/theme/Seo/index.tsx +7 -4
  297. package/src/theme/SkipToContent/index.tsx +7 -8
  298. package/src/theme/SkipToContent/styles.module.css +1 -0
  299. package/src/theme/TOC/index.tsx +12 -41
  300. package/src/theme/TOC/styles.module.css +1 -1
  301. package/src/theme/TOCCollapsible/index.tsx +58 -0
  302. package/src/theme/TOCCollapsible/styles.module.css +50 -0
  303. package/src/theme/TOCInline/index.tsx +13 -32
  304. package/src/theme/TOCItems/index.tsx +96 -0
  305. package/src/theme/Tabs/__tests__/index.test.tsx +129 -0
  306. package/src/theme/Tabs/index.tsx +93 -49
  307. package/src/theme/Tabs/styles.module.css +0 -13
  308. package/src/theme/Tag/index.tsx +31 -0
  309. package/src/theme/Tag/styles.module.css +70 -0
  310. package/src/theme/TagsListByLetter/index.tsx +45 -0
  311. package/src/theme/TagsListByLetter/styles.module.css +11 -0
  312. package/src/theme/TagsListInline/index.tsx +35 -0
  313. package/src/theme/TagsListInline/styles.module.css +15 -0
  314. package/src/theme/ThemeProvider/index.tsx +6 -2
  315. package/src/theme/ThemedImage/index.tsx +8 -8
  316. package/src/theme/Toggle/index.tsx +36 -43
  317. package/src/theme/Toggle/styles.module.css +91 -3
  318. package/src/theme/UserPreferencesProvider/index.tsx +9 -11
  319. package/src/theme/hooks/useHideableNavbar.ts +32 -45
  320. package/src/theme/hooks/useTabGroupChoice.ts +4 -4
  321. package/src/theme/hooks/useTheme.ts +4 -5
  322. package/src/theme/hooks/useWindowSize.ts +38 -20
  323. package/src/theme/prism-include-languages.ts +3 -2
  324. package/src/theme-classic.d.ts +806 -0
  325. package/src/translations.ts +8 -10
  326. package/src/types.d.ts +0 -599
  327. package/src/{validateThemeConfig.js → validateThemeConfig.ts} +151 -94
  328. package/tsconfig.json +1 -2
  329. package/codeTranslations/README.md +0 -20
  330. package/codeTranslations/ar.json +0 -57
  331. package/codeTranslations/base.json +0 -112
  332. package/codeTranslations/bn.json +0 -56
  333. package/codeTranslations/da.json +0 -57
  334. package/codeTranslations/de.json +0 -57
  335. package/codeTranslations/es.json +0 -57
  336. package/codeTranslations/fa.json +0 -57
  337. package/codeTranslations/fil.json +0 -57
  338. package/codeTranslations/fr.json +0 -57
  339. package/codeTranslations/he.json +0 -57
  340. package/codeTranslations/hi.json +0 -57
  341. package/codeTranslations/ja.json +0 -57
  342. package/codeTranslations/ko.json +0 -57
  343. package/codeTranslations/pl.json +0 -57
  344. package/codeTranslations/pt-BR.json +0 -57
  345. package/codeTranslations/pt-PT.json +0 -57
  346. package/codeTranslations/ru.json +0 -57
  347. package/codeTranslations/tr.json +0 -57
  348. package/codeTranslations/vi.json +0 -57
  349. package/codeTranslations/zh-Hans.json +0 -57
  350. package/codeTranslations/zh-Hant.json +0 -57
  351. package/lib/theme/Toggle/styles.css +0 -103
  352. package/lib/theme/hooks/useAnnouncementBar.js +0 -63
  353. package/lib/theme/hooks/useContextualSearchFilters.js +0 -47
  354. package/lib/theme/hooks/useScrollPosition.js +0 -49
  355. package/lib/theme/hooks/useTOCHighlight.js +0 -87
  356. package/lib-next/theme/Toggle/styles.css +0 -103
  357. package/lib-next/theme/hooks/useAnnouncementBar.js +0 -49
  358. package/lib-next/theme/hooks/useContextualSearchFilters.js +0 -41
  359. package/lib-next/theme/hooks/useScrollPosition.js +0 -38
  360. package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
  361. package/src/theme/Toggle/styles.css +0 -103
  362. package/src/theme/hooks/useAnnouncementBar.ts +0 -58
  363. package/src/theme/hooks/useContextualSearchFilters.ts +0 -52
  364. package/src/theme/hooks/useScrollPosition.ts +0 -45
  365. package/src/theme/hooks/useTOCHighlight.ts +0 -98
  366. package/update-code-translations.js +0 -239
  367. package/update-code-translations.test.js +0 -33
@@ -9,7 +9,7 @@ import Link from '@docusaurus/Link';
9
9
  import Translate, {translate} from '@docusaurus/Translate';
10
10
 
11
11
  function DocPaginator(props) {
12
- const {metadata} = props;
12
+ const {previous, next} = props;
13
13
  return (
14
14
  <nav
15
15
  className="pagination-nav docusaurus-mt-lg"
@@ -19,10 +19,8 @@ function DocPaginator(props) {
19
19
  description: 'The ARIA label for the docs pagination',
20
20
  })}>
21
21
  <div className="pagination-nav__item">
22
- {metadata.previous && (
23
- <Link
24
- className="pagination-nav__link"
25
- to={metadata.previous.permalink}>
22
+ {previous && (
23
+ <Link className="pagination-nav__link" to={previous.permalink}>
26
24
  <div className="pagination-nav__sublabel">
27
25
  <Translate
28
26
  id="theme.docs.paginator.previous"
@@ -31,14 +29,14 @@ function DocPaginator(props) {
31
29
  </Translate>
32
30
  </div>
33
31
  <div className="pagination-nav__label">
34
- &laquo; {metadata.previous.title}
32
+ &laquo; {previous.title}
35
33
  </div>
36
34
  </Link>
37
35
  )}
38
36
  </div>
39
37
  <div className="pagination-nav__item pagination-nav__item--next">
40
- {metadata.next && (
41
- <Link className="pagination-nav__link" to={metadata.next.permalink}>
38
+ {next && (
39
+ <Link className="pagination-nav__link" to={next.permalink}>
42
40
  <div className="pagination-nav__sublabel">
43
41
  <Translate
44
42
  id="theme.docs.paginator.next"
@@ -46,9 +44,7 @@ function DocPaginator(props) {
46
44
  Next
47
45
  </Translate>
48
46
  </div>
49
- <div className="pagination-nav__label">
50
- {metadata.next.title} &raquo;
51
- </div>
47
+ <div className="pagination-nav__label">{next.title} &raquo;</div>
52
48
  </Link>
53
49
  )}
54
50
  </div>
@@ -4,231 +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
- import {useThemeConfig, isSamePath} from '@docusaurus/theme-common';
10
- import useUserPreferencesContext from '@theme/hooks/useUserPreferencesContext';
11
- import useLockBodyScroll from '@theme/hooks/useLockBodyScroll';
12
- import useWindowSize, {windowSizes} from '@theme/hooks/useWindowSize';
13
- import useScrollPosition from '@theme/hooks/useScrollPosition';
14
- import Link from '@docusaurus/Link';
15
- import isInternalUrl from '@docusaurus/isInternalUrl';
9
+ import {
10
+ useThemeConfig,
11
+ useAnnouncementBar,
12
+ MobileSecondaryMenuFiller,
13
+ ThemeClassNames,
14
+ useScrollPosition,
15
+ } from '@docusaurus/theme-common';
16
+ import useWindowSize from '@theme/hooks/useWindowSize';
16
17
  import Logo from '@theme/Logo';
17
18
  import IconArrow from '@theme/IconArrow';
18
- import IconMenu from '@theme/IconMenu';
19
- import IconExternalLink from '@theme/IconExternalLink';
20
19
  import {translate} from '@docusaurus/Translate';
20
+ import {DocSidebarItems} from '@theme/DocSidebarItem';
21
21
  import styles from './styles.module.css';
22
- const MOBILE_TOGGLE_SIZE = 24;
23
-
24
- function usePrevious(value) {
25
- const ref = useRef(value);
26
- useEffect(() => {
27
- ref.current = value;
28
- }, [value]);
29
- return ref.current;
30
- }
31
-
32
- const isActiveSidebarItem = (item, activePath) => {
33
- if (item.type === 'link') {
34
- return isSamePath(item.href, activePath);
35
- }
36
-
37
- if (item.type === 'category') {
38
- return item.items.some((subItem) =>
39
- isActiveSidebarItem(subItem, activePath),
40
- );
41
- }
42
-
43
- return false;
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
-
48
- const DocSidebarItems = memo(function DocSidebarItems({items, ...props}) {
49
- return items.map((item, index) => (
50
- <DocSidebarItem
51
- key={index} // sidebar is static, the index does not change
52
- item={item}
53
- {...props}
54
- />
55
- ));
56
- });
57
-
58
- function DocSidebarItem(props) {
59
- switch (props.item.type) {
60
- case 'category':
61
- return <DocSidebarItemCategory {...props} />;
62
-
63
- case 'link':
64
- default:
65
- return <DocSidebarItemLink {...props} />;
66
- }
67
- }
68
-
69
- function DocSidebarItemCategory({
70
- item,
71
- onItemClick,
72
- collapsible,
73
- activePath,
74
- ...props
75
- }) {
76
- const {items, label} = item;
77
- const isActive = isActiveSidebarItem(item, activePath);
78
- const wasActive = usePrevious(isActive); // active categories are always initialized as expanded
79
- // the default (item.collapsed) is only used for non-active categories
80
-
81
- const [collapsed, setCollapsed] = useState(() => {
82
- if (!collapsible) {
83
- return false;
84
- }
85
-
86
- return isActive ? false : item.collapsed;
87
- });
88
- const menuListRef = useRef(null);
89
- const [menuListHeight, setMenuListHeight] = useState(undefined);
90
-
91
- const handleMenuListHeight = (calc = true) => {
92
- setMenuListHeight(
93
- calc ? `${menuListRef.current?.scrollHeight}px` : undefined,
94
- );
95
- }; // If we navigate to a category, it should automatically expand itself
96
-
97
- useEffect(() => {
98
- const justBecameActive = isActive && !wasActive;
99
-
100
- if (justBecameActive && collapsed) {
101
- setCollapsed(false);
102
- }
103
- }, [isActive, wasActive, collapsed]);
104
- const handleItemClick = useCallback(
105
- (e) => {
106
- e.preventDefault();
107
-
108
- if (!menuListHeight) {
109
- handleMenuListHeight();
110
- }
111
-
112
- setTimeout(() => setCollapsed((state) => !state), 100);
113
- },
114
- [menuListHeight],
115
- );
116
-
117
- if (items.length === 0) {
118
- return null;
119
- }
120
-
121
- return (
122
- <li
123
- className={clsx('menu__list-item', {
124
- 'menu__list-item--collapsed': collapsed,
125
- })}>
126
- <a
127
- className={clsx('menu__link', {
128
- 'menu__link--sublist': collapsible,
129
- 'menu__link--active': collapsible && isActive,
130
- [styles.menuLinkText]: !collapsible,
131
- })}
132
- onClick={collapsible ? handleItemClick : undefined}
133
- href={collapsible ? '#!' : undefined}
134
- {...props}>
135
- {label}
136
- </a>
137
- <ul
138
- className="menu__list"
139
- ref={menuListRef}
140
- style={{
141
- height: menuListHeight,
142
- }}
143
- onTransitionEnd={() => {
144
- if (!collapsed) {
145
- handleMenuListHeight(false);
146
- }
147
- }}>
148
- <DocSidebarItems
149
- items={items}
150
- tabIndex={collapsed ? '-1' : '0'}
151
- onItemClick={onItemClick}
152
- collapsible={collapsible}
153
- activePath={activePath}
154
- />
155
- </ul>
156
- </li>
157
- );
158
- }
159
-
160
- function DocSidebarItemLink({
161
- item,
162
- onItemClick,
163
- activePath,
164
- collapsible: _collapsible,
165
- ...props
166
- }) {
167
- const {href, label} = item;
168
- const isActive = isActiveSidebarItem(item, activePath);
169
- return (
170
- <li className="menu__list-item" key={label}>
171
- <Link
172
- className={clsx('menu__link', {
173
- 'menu__link--active': isActive,
174
- })}
175
- to={href}
176
- {...(isInternalUrl(href) && {
177
- isNavLink: true,
178
- exact: true,
179
- onClick: onItemClick,
180
- })}
181
- {...props}>
182
- {isInternalUrl(href) ? (
183
- label
184
- ) : (
185
- <span>
186
- {label}
187
- <IconExternalLink />
188
- </span>
189
- )}
190
- </Link>
191
- </li>
192
- );
193
- }
194
22
 
195
23
  function useShowAnnouncementBar() {
196
- const {isAnnouncementBarClosed} = useUserPreferencesContext();
197
- const [showAnnouncementBar, setShowAnnouncementBar] = useState(
198
- !isAnnouncementBarClosed,
199
- );
200
- useScrollPosition(({scrollY}) => {
201
- if (!isAnnouncementBarClosed) {
202
- setShowAnnouncementBar(scrollY === 0);
203
- }
204
- });
205
- return showAnnouncementBar;
206
- }
207
-
208
- function useResponsiveSidebar() {
209
- const [showResponsiveSidebar, setShowResponsiveSidebar] = useState(false);
210
- useLockBodyScroll(showResponsiveSidebar);
211
- const windowSize = useWindowSize();
212
- useEffect(() => {
213
- if (windowSize === windowSizes.desktop) {
214
- setShowResponsiveSidebar(false);
215
- }
216
- }, [windowSize]);
217
- const closeResponsiveSidebar = useCallback(
218
- (e) => {
219
- e.target.blur();
220
- setShowResponsiveSidebar(false);
24
+ const {isActive} = useAnnouncementBar();
25
+ const [showAnnouncementBar, setShowAnnouncementBar] = useState(isActive);
26
+ useScrollPosition(
27
+ ({scrollY}) => {
28
+ if (isActive) {
29
+ setShowAnnouncementBar(scrollY === 0);
30
+ }
221
31
  },
222
- [setShowResponsiveSidebar],
32
+ [isActive],
223
33
  );
224
- const toggleResponsiveSidebar = useCallback(() => {
225
- setShowResponsiveSidebar((value) => !value);
226
- }, [setShowResponsiveSidebar]);
227
- return {
228
- showResponsiveSidebar,
229
- closeResponsiveSidebar,
230
- toggleResponsiveSidebar,
231
- };
34
+ return isActive && showAnnouncementBar;
232
35
  }
233
36
 
234
37
  function HideableSidebarButton({onClick}) {
@@ -255,62 +58,12 @@ function HideableSidebarButton({onClick}) {
255
58
  );
256
59
  }
257
60
 
258
- function ResponsiveSidebarButton({responsiveSidebarOpened, onClick}) {
259
- return (
260
- <button
261
- aria-label={
262
- responsiveSidebarOpened
263
- ? translate({
264
- id: 'theme.docs.sidebar.responsiveCloseButtonLabel',
265
- message: 'Close menu',
266
- description:
267
- 'The ARIA label for close button of mobile doc sidebar',
268
- })
269
- : translate({
270
- id: 'theme.docs.sidebar.responsiveOpenButtonLabel',
271
- message: 'Open menu',
272
- description:
273
- 'The ARIA label for open button of mobile doc sidebar',
274
- })
275
- }
276
- aria-haspopup="true"
277
- className="button button--secondary button--sm menu__button"
278
- type="button"
279
- onClick={onClick}>
280
- {responsiveSidebarOpened ? (
281
- <span
282
- className={clsx(styles.sidebarMenuIcon, styles.sidebarMenuCloseIcon)}>
283
- &times;
284
- </span>
285
- ) : (
286
- <IconMenu
287
- className={styles.sidebarMenuIcon}
288
- height={MOBILE_TOGGLE_SIZE}
289
- width={MOBILE_TOGGLE_SIZE}
290
- />
291
- )}
292
- </button>
293
- );
294
- }
295
-
296
- function DocSidebar({
297
- path,
298
- sidebar,
299
- sidebarCollapsible = true,
300
- onCollapse,
301
- isHidden,
302
- }) {
61
+ function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}) {
303
62
  const showAnnouncementBar = useShowAnnouncementBar();
304
63
  const {
305
64
  navbar: {hideOnScroll},
306
65
  hideableSidebar,
307
66
  } = useThemeConfig();
308
- const {isAnnouncementBarClosed} = useUserPreferencesContext();
309
- const {
310
- showResponsiveSidebar,
311
- closeResponsiveSidebar,
312
- toggleResponsiveSidebar,
313
- } = useResponsiveSidebar();
314
67
  return (
315
68
  <div
316
69
  className={clsx(styles.sidebar, {
@@ -319,39 +72,60 @@ function DocSidebar({
319
72
  })}>
320
73
  {hideOnScroll && <Logo tabIndex={-1} className={styles.sidebarLogo} />}
321
74
  <nav
322
- className={clsx(
323
- 'menu',
324
- 'menu--responsive',
325
- 'thin-scrollbar',
326
- styles.menu,
327
- {
328
- 'menu--show': showResponsiveSidebar,
329
- [styles.menuWithAnnouncementBar]:
330
- !isAnnouncementBarClosed && showAnnouncementBar,
331
- },
332
- )}
333
- aria-label={translate({
334
- id: 'theme.docs.sidebar.navAriaLabel',
335
- message: 'Sidebar navigation',
336
- description: 'The ARIA label for documentation menu',
75
+ className={clsx('menu thin-scrollbar', styles.menu, {
76
+ [styles.menuWithAnnouncementBar]: showAnnouncementBar,
337
77
  })}>
338
- <ResponsiveSidebarButton
339
- responsiveSidebarOpened={showResponsiveSidebar}
340
- onClick={toggleResponsiveSidebar}
341
- />
342
-
343
- <ul className="menu__list">
344
- <DocSidebarItems
345
- items={sidebar}
346
- onItemClick={closeResponsiveSidebar}
347
- collapsible={sidebarCollapsible}
348
- activePath={path}
349
- />
78
+ <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
79
+ <DocSidebarItems items={sidebar} activePath={path} level={1} />
350
80
  </ul>
351
81
  </nav>
352
82
  {hideableSidebar && <HideableSidebarButton onClick={onCollapse} />}
353
83
  </div>
354
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
+ );
355
114
  }
356
115
 
357
- 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
+ }
@@ -53,14 +53,6 @@
53
53
  padding: 0.5rem;
54
54
  }
55
55
 
56
- .menuLinkText {
57
- cursor: initial;
58
- }
59
-
60
- .menuLinkText:hover {
61
- background: none;
62
- }
63
-
64
56
  .menuWithAnnouncementBar {
65
57
  margin-bottom: var(--docusaurus-announcement-bar-height);
66
58
  }
@@ -112,13 +104,3 @@
112
104
  line-height: 0.9;
113
105
  width: 24px;
114
106
  }
115
-
116
- :global(.menu__list) :global(.menu__list) {
117
- overflow-y: hidden;
118
- will-change: height;
119
- transition: height var(--ifm-transition-fast) linear;
120
- }
121
-
122
- :global(.menu__list-item--collapsed) :global(.menu__list) {
123
- height: 0 !important;
124
- }
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React, {useEffect, memo, useMemo} from 'react';
8
+ import clsx from 'clsx';
9
+ import {
10
+ isActiveSidebarItem,
11
+ usePrevious,
12
+ Collapsible,
13
+ useCollapsible,
14
+ findFirstCategoryLink,
15
+ ThemeClassNames,
16
+ } from '@docusaurus/theme-common';
17
+ import Link from '@docusaurus/Link';
18
+ import isInternalUrl from '@docusaurus/isInternalUrl';
19
+ import {translate} from '@docusaurus/Translate';
20
+ import IconExternalLink from '@theme/IconExternalLink';
21
+ import styles from './styles.module.css';
22
+ import useIsBrowser from '@docusaurus/useIsBrowser'; // Optimize sidebar at each "level"
23
+ // TODO this item should probably not receive the "activePath" props
24
+ // TODO this triggers whole sidebar re-renders on navigation
25
+
26
+ export const DocSidebarItems = memo(({items, ...props}) => (
27
+ <>
28
+ {items.map((item, index) => (
29
+ <DocSidebarItem
30
+ key={index} // sidebar is static, the index does not change
31
+ item={item}
32
+ {...props}
33
+ />
34
+ ))}
35
+ </>
36
+ ));
37
+ export default function DocSidebarItem({item, ...props}) {
38
+ switch (item.type) {
39
+ case 'category':
40
+ if (item.items.length === 0) {
41
+ return null;
42
+ }
43
+
44
+ return <DocSidebarItemCategory item={item} {...props} />;
45
+
46
+ case 'link':
47
+ default:
48
+ return <DocSidebarItemLink item={item} {...props} />;
49
+ }
50
+ } // If we navigate to a category and it becomes active, it should automatically expand itself
51
+
52
+ function useAutoExpandActiveCategory({isActive, collapsed, setCollapsed}) {
53
+ const wasActive = usePrevious(isActive);
54
+ useEffect(() => {
55
+ const justBecameActive = isActive && !wasActive;
56
+
57
+ if (justBecameActive && collapsed) {
58
+ setCollapsed(false);
59
+ }
60
+ }, [isActive, wasActive, collapsed, setCollapsed]);
61
+ } // When a collapsible category has no link, we still link it to its first child during SSR as a temporary fallback
62
+ // This allows to be able to navigate inside the category even when JS fails to load, is delayed or simply disabled
63
+ // React hydration becomes an optional progressive enhancement
64
+ // see https://github.com/facebookincubator/infima/issues/36#issuecomment-772543188
65
+ // see https://github.com/facebook/docusaurus/issues/3030
66
+
67
+ function useCategoryHrefWithSSRFallback(item) {
68
+ const isBrowser = useIsBrowser();
69
+ return useMemo(() => {
70
+ if (item.href) {
71
+ return item.href;
72
+ } // In these cases, it's not necessary to render a fallback
73
+ // We skip the "findFirstCategoryLink" computation
74
+
75
+ if (isBrowser || !item.collapsible) {
76
+ return undefined;
77
+ }
78
+
79
+ return findFirstCategoryLink(item);
80
+ }, [item, isBrowser]);
81
+ }
82
+
83
+ function DocSidebarItemCategory({
84
+ item,
85
+ onItemClick,
86
+ activePath,
87
+ level,
88
+ ...props
89
+ }) {
90
+ const {items, label, collapsible, className, href} = item;
91
+ const hrefWithSSRFallback = useCategoryHrefWithSSRFallback(item);
92
+ const isActive = isActiveSidebarItem(item, activePath);
93
+ const {collapsed, setCollapsed, toggleCollapsed} = useCollapsible({
94
+ // active categories are always initialized as expanded
95
+ // the default (item.collapsed) is only used for non-active categories
96
+ initialState: () => {
97
+ if (!collapsible) {
98
+ return false;
99
+ }
100
+
101
+ return isActive ? false : item.collapsed;
102
+ },
103
+ });
104
+ useAutoExpandActiveCategory({
105
+ isActive,
106
+ collapsed,
107
+ setCollapsed,
108
+ });
109
+ return (
110
+ <li
111
+ className={clsx(
112
+ ThemeClassNames.docs.docSidebarItemCategory,
113
+ ThemeClassNames.docs.docSidebarItemCategoryLevel(level),
114
+ 'menu__list-item',
115
+ {
116
+ 'menu__list-item--collapsed': collapsed,
117
+ },
118
+ className,
119
+ )}>
120
+ <div className="menu__list-item-collapsible">
121
+ <Link
122
+ className={clsx('menu__link', {
123
+ 'menu__link--sublist': collapsible && !href,
124
+ 'menu__link--active': isActive,
125
+ [styles.menuLinkText]: !collapsible,
126
+ [styles.hasHref]: !!hrefWithSSRFallback,
127
+ })}
128
+ onClick={
129
+ collapsible
130
+ ? (e) => {
131
+ onItemClick?.(item);
132
+
133
+ if (href) {
134
+ setCollapsed(false);
135
+ } else {
136
+ e.preventDefault();
137
+ toggleCollapsed();
138
+ }
139
+ }
140
+ : () => {
141
+ onItemClick?.(item);
142
+ }
143
+ }
144
+ href={collapsible ? hrefWithSSRFallback ?? '#' : hrefWithSSRFallback}
145
+ {...props}>
146
+ {label}
147
+ </Link>
148
+ {href && collapsible && (
149
+ <button
150
+ aria-label={translate(
151
+ {
152
+ id: 'theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel',
153
+ message: "Toggle the collapsible sidebar category '{label}'",
154
+ description:
155
+ 'The ARIA label to toggle the collapsible sidebar category',
156
+ },
157
+ {
158
+ label,
159
+ },
160
+ )}
161
+ type="button"
162
+ className="clean-btn menu__caret"
163
+ onClick={(e) => {
164
+ e.preventDefault();
165
+ toggleCollapsed();
166
+ }}
167
+ />
168
+ )}
169
+ </div>
170
+
171
+ <Collapsible lazy as="ul" className="menu__list" collapsed={collapsed}>
172
+ <DocSidebarItems
173
+ items={items}
174
+ tabIndex={collapsed ? -1 : 0}
175
+ onItemClick={onItemClick}
176
+ activePath={activePath}
177
+ level={level + 1}
178
+ />
179
+ </Collapsible>
180
+ </li>
181
+ );
182
+ }
183
+
184
+ function DocSidebarItemLink({item, onItemClick, activePath, level, ...props}) {
185
+ const {href, label, className} = item;
186
+ const isActive = isActiveSidebarItem(item, activePath);
187
+ return (
188
+ <li
189
+ className={clsx(
190
+ ThemeClassNames.docs.docSidebarItemLink,
191
+ ThemeClassNames.docs.docSidebarItemLinkLevel(level),
192
+ 'menu__list-item',
193
+ className,
194
+ )}
195
+ key={label}>
196
+ <Link
197
+ className={clsx('menu__link', {
198
+ 'menu__link--active': isActive,
199
+ })}
200
+ aria-current={isActive ? 'page' : undefined}
201
+ to={href}
202
+ {...(isInternalUrl(href) && {
203
+ onClick: onItemClick ? () => onItemClick(item) : undefined,
204
+ })}
205
+ {...props}>
206
+ {isInternalUrl(href) ? (
207
+ label
208
+ ) : (
209
+ <span>
210
+ {label}
211
+ <IconExternalLink />
212
+ </span>
213
+ )}
214
+ </Link>
215
+ </li>
216
+ );
217
+ }