@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,93 +5,29 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import React, {useEffect, useState, useRef} from 'react';
8
+ import React, {isValidElement, useEffect, useState} from 'react';
9
9
  import clsx from 'clsx';
10
- import Highlight, {defaultProps, Language} from 'prism-react-renderer';
10
+ import Highlight, {defaultProps, type Language} from 'prism-react-renderer';
11
11
  import copy from 'copy-text-to-clipboard';
12
- import rangeParser from 'parse-numeric-range';
13
- import usePrismTheme from '@theme/hooks/usePrismTheme';
14
- import type {Props} from '@theme/CodeBlock';
15
12
  import Translate, {translate} from '@docusaurus/Translate';
13
+ import {
14
+ useThemeConfig,
15
+ parseCodeBlockTitle,
16
+ parseLanguage,
17
+ parseLines,
18
+ ThemeClassNames,
19
+ usePrismTheme,
20
+ } from '@docusaurus/theme-common';
21
+ import type {Props} from '@theme/CodeBlock';
16
22
 
17
23
  import styles from './styles.module.css';
18
24
 
19
- import {useThemeConfig, parseCodeBlockTitle} from '@docusaurus/theme-common';
20
-
21
- const highlightLinesRangeRegex = /{([\d,-]+)}/;
22
- const getHighlightDirectiveRegex = (
23
- languages = ['js', 'jsBlock', 'jsx', 'python', 'html'],
24
- ) => {
25
- // supported types of comments
26
- const comments = {
27
- js: {
28
- start: '\\/\\/',
29
- end: '',
30
- },
31
- jsBlock: {
32
- start: '\\/\\*',
33
- end: '\\*\\/',
34
- },
35
- jsx: {
36
- start: '\\{\\s*\\/\\*',
37
- end: '\\*\\/\\s*\\}',
38
- },
39
- python: {
40
- start: '#',
41
- end: '',
42
- },
43
- html: {
44
- start: '<!--',
45
- end: '-->',
46
- },
47
- };
48
- // supported directives
49
- const directives = [
50
- 'highlight-next-line',
51
- 'highlight-start',
52
- 'highlight-end',
53
- ].join('|');
54
- // to be more reliable, the opening and closing comment must match
55
- const commentPattern = languages
56
- .map(
57
- (lang) =>
58
- `(?:${comments[lang].start}\\s*(${directives})\\s*${comments[lang].end})`,
59
- )
60
- .join('|');
61
- // white space is allowed, but otherwise it should be on it's own line
62
- return new RegExp(`^\\s*(?:${commentPattern})\\s*$`);
63
- };
64
- // select comment styles based on language
65
- const highlightDirectiveRegex = (lang) => {
66
- switch (lang) {
67
- case 'js':
68
- case 'javascript':
69
- case 'ts':
70
- case 'typescript':
71
- return getHighlightDirectiveRegex(['js', 'jsBlock']);
72
-
73
- case 'jsx':
74
- case 'tsx':
75
- return getHighlightDirectiveRegex(['js', 'jsBlock', 'jsx']);
76
-
77
- case 'html':
78
- return getHighlightDirectiveRegex(['js', 'jsBlock', 'html']);
79
-
80
- case 'python':
81
- case 'py':
82
- return getHighlightDirectiveRegex(['python']);
83
-
84
- default:
85
- // all comment types
86
- return getHighlightDirectiveRegex();
87
- }
88
- };
89
-
90
25
  export default function CodeBlock({
91
26
  children,
92
- className: languageClassName,
27
+ className: blockClassName = '',
93
28
  metastring,
94
29
  title,
30
+ language: languageProp,
95
31
  }: Props): JSX.Element {
96
32
  const {prism} = useThemeConfig();
97
33
 
@@ -108,82 +44,51 @@ export default function CodeBlock({
108
44
  setMounted(true);
109
45
  }, []);
110
46
 
111
- // TODO: the title is provided by MDX as props automatically
112
- // so we probably don't need to parse the metastring
113
- // (note: title="xyz" => title prop still has the quotes)
47
+ // We still parse the metastring in case we want to support more syntax in the
48
+ // future. Note that MDX doesn't strip quotes when parsing metastring:
49
+ // "title=\"xyz\"" => title: "\"xyz\""
114
50
  const codeBlockTitle = parseCodeBlockTitle(metastring) || title;
115
-
116
- const button = useRef(null);
117
- let highlightLines: number[] = [];
118
-
119
51
  const prismTheme = usePrismTheme();
120
52
 
121
- // In case interleaved Markdown (e.g. when using CodeBlock as standalone component).
122
- const content = Array.isArray(children) ? children.join('') : children;
123
-
124
- if (metastring && highlightLinesRangeRegex.test(metastring)) {
125
- // Tested above
126
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
127
- const highlightLinesRange = metastring.match(highlightLinesRangeRegex)![1];
128
- highlightLines = rangeParser(highlightLinesRange).filter((n) => n > 0);
129
- }
130
-
131
- let language =
132
- languageClassName &&
133
- // Force Prism's language union type to `any` because it does not contain all available languages
134
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
135
- ((languageClassName.replace(/language-/, '') as Language) as any);
136
-
137
- if (!language && prism.defaultLanguage) {
138
- language = prism.defaultLanguage;
53
+ // <pre> tags in markdown map to CodeBlocks and they may contain JSX children.
54
+ // When the children is not a simple string, we just return a styled block
55
+ // without actually highlighting.
56
+ if (React.Children.toArray(children).some((el) => isValidElement(el))) {
57
+ return (
58
+ <Highlight
59
+ {...defaultProps}
60
+ key={String(mounted)}
61
+ theme={prismTheme}
62
+ code=""
63
+ language={'text' as Language}>
64
+ {({className, style}) => (
65
+ <pre
66
+ /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */
67
+ tabIndex={0}
68
+ className={clsx(
69
+ className,
70
+ styles.codeBlockStandalone,
71
+ 'thin-scrollbar',
72
+ styles.codeBlockContainer,
73
+ blockClassName,
74
+ ThemeClassNames.common.codeBlock,
75
+ )}
76
+ style={style}>
77
+ <code className={styles.codeBlockLines}>{children}</code>
78
+ </pre>
79
+ )}
80
+ </Highlight>
81
+ );
139
82
  }
140
83
 
141
- // only declaration OR directive highlight can be used for a block
142
- let code = content.replace(/\n$/, '');
143
- if (highlightLines.length === 0 && language !== undefined) {
144
- let range = '';
145
- const directiveRegex = highlightDirectiveRegex(language);
146
- // go through line by line
147
- const lines = content.replace(/\n$/, '').split('\n');
148
- let blockStart;
149
- // loop through lines
150
- for (let index = 0; index < lines.length; ) {
151
- const line = lines[index];
152
- // adjust for 0-index
153
- const lineNumber = index + 1;
154
- const match = line.match(directiveRegex);
155
- if (match !== null) {
156
- const directive = match
157
- .slice(1)
158
- .reduce(
159
- (final: string | undefined, item) => final || item,
160
- undefined,
161
- );
162
- switch (directive) {
163
- case 'highlight-next-line':
164
- range += `${lineNumber},`;
165
- break;
166
-
167
- case 'highlight-start':
168
- blockStart = lineNumber;
169
- break;
84
+ // The children is now guaranteed to be one/more plain strings
85
+ const content = Array.isArray(children)
86
+ ? children.join('')
87
+ : (children as string);
170
88
 
171
- case 'highlight-end':
172
- range += `${blockStart}-${lineNumber - 1},`;
173
- break;
174
-
175
- default:
176
- break;
177
- }
178
- lines.splice(index, 1);
179
- } else {
180
- // lines without directives are unchanged
181
- index += 1;
182
- }
183
- }
184
- highlightLines = rangeParser(range);
185
- code = lines.join('\n');
186
- }
89
+ const language =
90
+ languageProp ?? parseLanguage(blockClassName) ?? prism.defaultLanguage;
91
+ const {highlightLines, code} = parseLines(content, metastring, language);
187
92
 
188
93
  const handleCopyCode = () => {
189
94
  copy(code);
@@ -198,9 +103,18 @@ export default function CodeBlock({
198
103
  key={String(mounted)}
199
104
  theme={prismTheme}
200
105
  code={code}
201
- language={language}>
106
+ language={(language ?? 'text') as Language}>
202
107
  {({className, style, tokens, getLineProps, getTokenProps}) => (
203
- <div className={styles.codeBlockContainer}>
108
+ <div
109
+ className={clsx(
110
+ styles.codeBlockContainer,
111
+ blockClassName,
112
+ {
113
+ [`language-${language}`]:
114
+ language && !blockClassName.includes(`language-${language}`),
115
+ },
116
+ ThemeClassNames.common.codeBlock,
117
+ )}>
204
118
  {codeBlockTitle && (
205
119
  <div style={style} className={styles.codeBlockTitle}>
206
120
  {codeBlockTitle}
@@ -210,19 +124,17 @@ export default function CodeBlock({
210
124
  <pre
211
125
  /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */
212
126
  tabIndex={0}
213
- className={clsx(className, styles.codeBlock, 'thin-scrollbar', {
214
- [styles.codeBlockWithTitle]: codeBlockTitle,
215
- })}
127
+ className={clsx(className, styles.codeBlock, 'thin-scrollbar')}
216
128
  style={style}>
217
129
  <code className={styles.codeBlockLines}>
218
130
  {tokens.map((line, i) => {
219
- if (line.length === 1 && line[0].content === '') {
220
- line[0].content = '\n'; // eslint-disable-line no-param-reassign
131
+ if (line.length === 1 && line[0].content === '\n') {
132
+ line[0].content = '';
221
133
  }
222
134
 
223
135
  const lineProps = getLineProps({line, key: i});
224
136
 
225
- if (highlightLines.includes(i + 1)) {
137
+ if (highlightLines.includes(i)) {
226
138
  lineProps.className += ' docusaurus-highlight-code-line';
227
139
  }
228
140
 
@@ -231,6 +143,7 @@ export default function CodeBlock({
231
143
  {line.map((token, key) => (
232
144
  <span key={key} {...getTokenProps({token, key})} />
233
145
  ))}
146
+ <br />
234
147
  </span>
235
148
  );
236
149
  })}
@@ -238,7 +151,6 @@ export default function CodeBlock({
238
151
  </pre>
239
152
 
240
153
  <button
241
- ref={button}
242
154
  type="button"
243
155
  aria-label={translate({
244
156
  id: 'theme.CodeBlock.copyButtonAriaLabel',
@@ -7,34 +7,43 @@
7
7
 
8
8
  .codeBlockContainer {
9
9
  margin-bottom: var(--ifm-leading);
10
+ border-radius: var(--ifm-global-radius);
11
+ box-shadow: var(--ifm-global-shadow-lw);
10
12
  }
11
13
 
12
14
  .codeBlockContent {
13
15
  position: relative;
14
- /*rtl:ignore*/
16
+ /* rtl:ignore */
15
17
  direction: ltr;
16
18
  }
17
19
 
18
20
  .codeBlockTitle {
19
- border-top-left-radius: var(--ifm-global-radius);
20
- border-top-right-radius: var(--ifm-global-radius);
21
21
  border-bottom: 1px solid var(--ifm-color-emphasis-300);
22
22
  font-size: var(--ifm-code-font-size);
23
23
  font-weight: 500;
24
24
  padding: 0.75rem var(--ifm-pre-padding);
25
+ border-top-left-radius: var(--ifm-global-radius);
26
+ border-top-right-radius: var(--ifm-global-radius);
25
27
  }
26
28
 
27
29
  .codeBlock {
30
+ margin: 0;
28
31
  padding: 0;
32
+ border-radius: var(--ifm-global-radius);
29
33
  }
30
34
 
31
- .codeBlockWithTitle {
35
+ .codeBlockTitle + .codeBlockContent .codeBlock {
32
36
  border-top-left-radius: 0;
33
37
  border-top-right-radius: 0;
34
38
  }
35
39
 
40
+ .codeBlockStandalone {
41
+ padding: 0;
42
+ border-radius: var(--ifm-global-radius);
43
+ }
44
+
36
45
  .copyButton {
37
- background: rgba(0, 0, 0, 0.3);
46
+ background: rgb(0 0 0 / 30%);
38
47
  border-radius: var(--ifm-global-radius);
39
48
  color: var(--ifm-color-white);
40
49
  opacity: 0;
@@ -46,19 +55,18 @@
46
55
  transition: opacity 200ms ease-in-out;
47
56
  }
48
57
 
49
- .codeBlockTitle:hover + .codeBlockContent .copyButton,
58
+ .copyButton:focus,
50
59
  .codeBlockContent:hover > .copyButton,
51
- .copyButton:focus {
60
+ .codeBlockTitle:hover + .codeBlockContent .copyButton {
52
61
  opacity: 1;
53
62
  }
54
63
 
55
64
  .codeBlockLines {
56
65
  font: inherit;
66
+ /* rtl:ignore */
57
67
  float: left;
58
68
  min-width: 100%;
59
69
  padding: var(--ifm-pre-padding);
60
- display: flex;
61
- flex-direction: column;
62
70
  }
63
71
 
64
72
  @media print {
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import React, {useState, useRef, useEffect} from 'react';
9
+ import type {Props} from '@theme/ColorModeToggle';
10
+ import useIsBrowser from '@docusaurus/useIsBrowser';
11
+ import {translate} from '@docusaurus/Translate';
12
+ import IconLightMode from '@theme/IconLightMode';
13
+ import IconDarkMode from '@theme/IconDarkMode';
14
+
15
+ import clsx from 'clsx';
16
+ import styles from './styles.module.css';
17
+
18
+ function ColorModeToggle({
19
+ className,
20
+ checked: defaultChecked,
21
+ onChange,
22
+ }: Props): JSX.Element {
23
+ const isBrowser = useIsBrowser();
24
+ const [checked, setChecked] = useState(defaultChecked);
25
+ const [focused, setFocused] = useState(false);
26
+ const inputRef = useRef<HTMLInputElement>(null);
27
+
28
+ useEffect(() => {
29
+ setChecked(defaultChecked);
30
+ }, [defaultChecked]);
31
+
32
+ return (
33
+ <div
34
+ className={clsx(styles.toggle, className, {
35
+ [styles.toggleChecked]: checked,
36
+ [styles.toggleFocused]: focused,
37
+ [styles.toggleDisabled]: !isBrowser,
38
+ })}>
39
+ {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}
40
+ <div
41
+ className={styles.toggleButton}
42
+ role="button"
43
+ tabIndex={-1}
44
+ onClick={() => inputRef.current?.click()}>
45
+ <IconLightMode
46
+ className={clsx(styles.toggleIcon, styles.lightToggleIcon)}
47
+ />
48
+ <IconDarkMode
49
+ className={clsx(styles.toggleIcon, styles.darkToggleIcon)}
50
+ />
51
+ </div>
52
+
53
+ <input
54
+ ref={inputRef}
55
+ checked={checked}
56
+ type="checkbox"
57
+ className={styles.toggleScreenReader}
58
+ aria-label={translate(
59
+ {
60
+ message: 'Switch between dark and light mode (currently {mode})',
61
+ id: 'theme.colorToggle.ariaLabel',
62
+ description: 'The ARIA label for the navbar color mode toggle',
63
+ },
64
+ {
65
+ mode: checked
66
+ ? translate({
67
+ message: 'dark mode',
68
+ id: 'theme.colorToggle.ariaLabel.mode.dark',
69
+ description: 'The name for the dark color mode',
70
+ })
71
+ : translate({
72
+ message: 'light mode',
73
+ id: 'theme.colorToggle.ariaLabel.mode.light',
74
+ description: 'The name for the light color mode',
75
+ }),
76
+ },
77
+ )}
78
+ onChange={onChange}
79
+ onClick={() => setChecked(!checked)}
80
+ onFocus={() => setFocused(true)}
81
+ onBlur={() => setFocused(false)}
82
+ onKeyDown={(e) => {
83
+ if (e.key === 'Enter') {
84
+ inputRef.current?.click();
85
+ }
86
+ }}
87
+ />
88
+ </div>
89
+ );
90
+ }
91
+
92
+ export default React.memo(ColorModeToggle);
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ .toggle {
9
+ position: relative;
10
+ width: 32px;
11
+ height: 32px;
12
+ }
13
+
14
+ .toggleScreenReader {
15
+ border: 0;
16
+ clip: rect(0 0 0 0);
17
+ height: 1px;
18
+ margin: -1px;
19
+ overflow: hidden;
20
+ position: absolute;
21
+ width: 1px;
22
+ }
23
+
24
+ .toggleDisabled {
25
+ cursor: not-allowed;
26
+ }
27
+
28
+ .toggleButton {
29
+ cursor: pointer;
30
+ user-select: none;
31
+ -webkit-tap-highlight-color: transparent;
32
+ align-items: center;
33
+ display: flex;
34
+ justify-content: center;
35
+ width: 100%;
36
+ height: 100%;
37
+ border-radius: 50%;
38
+ }
39
+
40
+ .toggleButton:hover {
41
+ background-color: #00000010;
42
+ }
43
+
44
+ [data-theme='dark'] .toggleButton:hover {
45
+ background-color: #ffffff20;
46
+ }
47
+
48
+ [data-theme='light'] .darkToggleIcon,
49
+ [data-theme='dark'] .lightToggleIcon {
50
+ display: none;
51
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import React from 'react';
9
+ import clsx from 'clsx';
10
+ import {Details as DetailsGeneric} from '@docusaurus/theme-common';
11
+ import type {Props} from '@theme/Details';
12
+ import styles from './styles.module.css';
13
+
14
+ // Should we have a custom details/summary comp in Infima instead of reusing
15
+ // alert classes?
16
+ const InfimaClasses = 'alert alert--info';
17
+
18
+ export default function Details({...props}: Props): JSX.Element {
19
+ return (
20
+ <DetailsGeneric
21
+ {...props}
22
+ className={clsx(InfimaClasses, styles.details, props.className)}
23
+ />
24
+ );
25
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ .details {
9
+ --docusaurus-details-decoration-color: var(--ifm-alert-border-color);
10
+ --docusaurus-details-transition: transform var(--ifm-transition-fast) ease;
11
+ margin: 0 0 var(--ifm-spacing-vertical);
12
+ border: 1px solid var(--ifm-alert-border-color);
13
+ }
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import React, {type ReactNode} from 'react';
9
+ import {
10
+ ThemeClassNames,
11
+ useSidebarBreadcrumbs,
12
+ useHomePageRoute,
13
+ } from '@docusaurus/theme-common';
14
+ import styles from './styles.module.css';
15
+ import clsx from 'clsx';
16
+ import Link from '@docusaurus/Link';
17
+ import useBaseUrl from '@docusaurus/useBaseUrl';
18
+
19
+ // TODO move to design system folder
20
+ function BreadcrumbsItemLink({
21
+ children,
22
+ href,
23
+ }: {
24
+ children: ReactNode;
25
+ href?: string;
26
+ }): JSX.Element {
27
+ const className = clsx('breadcrumbs__link', styles.breadcrumbsItemLink);
28
+ return href ? (
29
+ <Link className={className} href={href}>
30
+ {children}
31
+ </Link>
32
+ ) : (
33
+ <span className={className}>{children}</span>
34
+ );
35
+ }
36
+
37
+ // TODO move to design system folder
38
+ function BreadcrumbsItem({
39
+ children,
40
+ active,
41
+ }: {
42
+ children: ReactNode;
43
+ active?: boolean;
44
+ }): JSX.Element {
45
+ return (
46
+ <li
47
+ className={clsx('breadcrumbs__item', {
48
+ 'breadcrumbs__item--active': active,
49
+ })}>
50
+ {children}
51
+ </li>
52
+ );
53
+ }
54
+
55
+ function HomeBreadcrumbItem() {
56
+ const homeHref = useBaseUrl('/');
57
+ return (
58
+ <BreadcrumbsItem>
59
+ <BreadcrumbsItemLink href={homeHref}>🏠</BreadcrumbsItemLink>
60
+ </BreadcrumbsItem>
61
+ );
62
+ }
63
+
64
+ export default function DocBreadcrumbs(): JSX.Element | null {
65
+ const breadcrumbs = useSidebarBreadcrumbs();
66
+ const homePageRoute = useHomePageRoute();
67
+
68
+ if (!breadcrumbs) {
69
+ return null;
70
+ }
71
+
72
+ return (
73
+ <nav
74
+ className={clsx(
75
+ ThemeClassNames.docs.docBreadcrumbs,
76
+ styles.breadcrumbsContainer,
77
+ )}
78
+ aria-label="breadcrumbs">
79
+ <ul className="breadcrumbs">
80
+ {homePageRoute && <HomeBreadcrumbItem />}
81
+ {breadcrumbs.map((item, idx) => (
82
+ <BreadcrumbsItem key={idx} active={idx === breadcrumbs.length - 1}>
83
+ <BreadcrumbsItemLink href={item.href}>
84
+ {item.label}
85
+ </BreadcrumbsItemLink>
86
+ </BreadcrumbsItem>
87
+ ))}
88
+ </ul>
89
+ </nav>
90
+ );
91
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ .breadcrumbsContainer {
9
+ margin-bottom: 0.4rem;
10
+ }
11
+
12
+ .breadcrumbsItemLink {
13
+ --ifm-breadcrumb-size-multiplier: 0.7 !important;
14
+ margin-bottom: 0.4rem;
15
+ background: var(--ifm-color-gray-100);
16
+ }
17
+
18
+ html[data-theme='dark'] .breadcrumbsItemLink {
19
+ background-color: var(--ifm-color-gray-900);
20
+ }
21
+
22
+ @media (min-width: 997px) {
23
+ .breadcrumbsItemLink {
24
+ --ifm-breadcrumb-size-multiplier: 0.8;
25
+ }
26
+ }