@docusaurus/theme-classic 2.0.0-beta.12faed89d → 2.0.0-beta.14

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 (349) hide show
  1. package/README.md +1 -1
  2. package/lib/admonitions.css +35 -0
  3. package/lib/deps.d.ts +13 -0
  4. package/lib/index.js +16 -15
  5. package/lib/prism-include-languages.js +9 -5
  6. package/{lib-next/types.d.ts → lib/theme-classic.d.ts} +338 -156
  7. package/lib/translations.js +16 -7
  8. package/lib/types.d.ts +0 -629
  9. package/lib/validateThemeConfig.js +232 -248
  10. package/lib-next/theme/Admonition/index.js +101 -0
  11. package/lib-next/theme/AnnouncementBar/index.js +7 -12
  12. package/lib-next/theme/AnnouncementBar/styles.module.css +23 -32
  13. package/lib-next/theme/BackToTopButton/index.js +131 -0
  14. package/lib-next/theme/BackToTopButton/styles.module.css +42 -0
  15. package/lib-next/theme/BlogArchivePage/index.js +80 -0
  16. package/lib-next/theme/BlogLayout/index.js +40 -0
  17. package/lib-next/theme/BlogListPage/index.js +17 -25
  18. package/lib-next/theme/BlogPostAuthor/index.js +46 -0
  19. package/{lib/theme/MDXPage → lib-next/theme/BlogPostAuthor}/styles.module.css +4 -2
  20. package/lib-next/theme/BlogPostAuthors/index.js +34 -0
  21. package/{lib/theme/IconExternalLink → lib-next/theme/BlogPostAuthors}/styles.module.css +3 -4
  22. package/lib-next/theme/BlogPostItem/index.js +79 -86
  23. package/lib-next/theme/BlogPostPage/index.js +70 -35
  24. package/lib-next/theme/BlogSidebar/index.js +11 -13
  25. package/lib-next/theme/BlogSidebar/styles.module.css +2 -2
  26. package/lib-next/theme/BlogTagsListPage/index.js +14 -55
  27. package/lib-next/theme/BlogTagsPostsPage/index.js +29 -39
  28. package/lib-next/theme/CodeBlock/index.js +23 -149
  29. package/lib-next/theme/CodeBlock/styles.module.css +12 -9
  30. package/lib-next/theme/Details/index.js +20 -0
  31. package/lib-next/theme/Details/styles.module.css +13 -0
  32. package/lib-next/theme/DocCard/index.js +80 -0
  33. package/lib-next/theme/DocCard/styles.module.css +43 -0
  34. package/lib-next/theme/DocCardList/index.js +19 -0
  35. package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +49 -0
  36. package/lib-next/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  37. package/lib-next/theme/DocItem/index.js +30 -59
  38. package/lib-next/theme/DocItem/styles.module.css +2 -11
  39. package/lib-next/theme/DocItemFooter/index.js +79 -0
  40. package/{lib/theme/DocSidebarItem → lib-next/theme/DocItemFooter}/styles.module.css +8 -5
  41. package/lib-next/theme/DocPage/index.js +46 -23
  42. package/lib-next/theme/DocPaginator/index.js +5 -33
  43. package/lib-next/theme/DocPaginatorNavLink/index.js +36 -0
  44. package/lib-next/theme/DocSidebar/index.js +37 -43
  45. package/lib-next/theme/DocSidebarItem/index.js +115 -65
  46. package/lib-next/theme/DocSidebarItem/styles.module.css +4 -0
  47. package/lib-next/theme/DocTagDocListPage/index.js +89 -0
  48. package/lib-next/theme/DocTagsListPage/index.js +38 -0
  49. package/lib-next/theme/DocVersionBadge/index.js +27 -0
  50. package/lib-next/theme/DocVersionBanner/index.js +28 -14
  51. package/lib-next/theme/EditThisPage/index.js +6 -1
  52. package/lib-next/theme/ErrorPageContent.js +35 -0
  53. package/lib-next/theme/Footer/index.js +90 -39
  54. package/lib-next/theme/Heading/index.js +24 -29
  55. package/lib-next/theme/Heading/styles.css +5 -6
  56. package/lib-next/theme/Heading/styles.module.css +9 -5
  57. package/lib-next/theme/IconArrow/index.js +2 -2
  58. package/lib-next/theme/IconClose/index.js +23 -0
  59. package/lib-next/theme/IconEdit/index.js +2 -2
  60. package/lib-next/theme/IconExternalLink/index.js +2 -2
  61. package/lib-next/theme/IconLanguage/index.js +2 -2
  62. package/lib-next/theme/IconMenu/index.js +2 -2
  63. package/lib-next/theme/LastUpdated/index.js +3 -2
  64. package/lib-next/theme/Layout/index.js +3 -1
  65. package/lib-next/theme/LayoutHead/index.js +18 -23
  66. package/lib-next/theme/LayoutProviders/index.js +8 -5
  67. package/lib-next/theme/Logo/index.js +25 -21
  68. package/lib-next/theme/MDXComponents/index.js +34 -7
  69. package/{lib/theme/hooks → lib-next/theme/MDXComponents}/styles.css +3 -2
  70. package/lib-next/theme/MDXPage/index.js +10 -2
  71. package/lib-next/theme/Navbar/index.js +62 -34
  72. package/lib-next/theme/Navbar/styles.module.css +3 -39
  73. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +45 -143
  74. package/lib-next/theme/NavbarItem/DocNavbarItem.js +7 -7
  75. package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +31 -19
  76. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +158 -0
  77. package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +4 -12
  78. package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  79. package/lib-next/theme/NavbarItem/index.js +25 -12
  80. package/lib-next/theme/{SearchMetadatas → SearchMetadata}/index.js +1 -1
  81. package/lib-next/theme/Seo/index.js +11 -7
  82. package/lib-next/theme/TOC/index.js +12 -36
  83. package/lib-next/theme/TOC/styles.module.css +1 -1
  84. package/lib-next/theme/TOCCollapsible/index.js +13 -4
  85. package/lib-next/theme/TOCCollapsible/styles.module.css +1 -0
  86. package/lib-next/theme/TOCInline/index.js +10 -28
  87. package/lib-next/theme/TOCItems/index.js +85 -0
  88. package/lib-next/theme/Tabs/__tests__/index.test.js +142 -0
  89. package/lib-next/theme/Tabs/index.js +103 -48
  90. package/lib-next/theme/Tabs/styles.module.css +0 -13
  91. package/lib-next/theme/Tag/index.js +27 -0
  92. package/lib-next/theme/Tag/styles.module.css +70 -0
  93. package/lib-next/theme/TagsListByLetter/index.js +42 -0
  94. package/lib-next/theme/TagsListByLetter/styles.module.css +11 -0
  95. package/lib-next/theme/TagsListInline/index.js +31 -0
  96. package/lib-next/theme/TagsListInline/styles.module.css +15 -0
  97. package/lib-next/theme/ThemeProvider/index.js +10 -7
  98. package/lib-next/theme/ThemedImage/index.js +5 -5
  99. package/lib-next/theme/Toggle/index.js +34 -37
  100. package/lib-next/theme/Toggle/styles.module.css +91 -3
  101. package/lib-next/theme/UserPreferencesProvider/index.js +9 -6
  102. package/lib-next/theme/hooks/useHideableNavbar.js +31 -44
  103. package/lib-next/theme/hooks/useTheme.js +4 -5
  104. package/lib-next/theme/hooks/useWindowSize.js +2 -6
  105. package/lib-next/theme/prism-include-languages.js +2 -1
  106. package/package.json +26 -24
  107. package/src/admonitions.css +35 -0
  108. package/src/deps.d.ts +13 -0
  109. package/src/index.ts +23 -20
  110. package/{lib-next/prism-include-languages.js → src/prism-include-languages.ts} +0 -0
  111. package/src/theme/Admonition/index.tsx +106 -0
  112. package/src/theme/AnnouncementBar/index.tsx +8 -12
  113. package/src/theme/AnnouncementBar/styles.module.css +23 -32
  114. package/src/theme/BackToTopButton/index.tsx +142 -0
  115. package/src/theme/BackToTopButton/styles.module.css +42 -0
  116. package/src/theme/BlogArchivePage/index.tsx +91 -0
  117. package/src/theme/BlogLayout/index.tsx +44 -0
  118. package/src/theme/BlogListPage/index.tsx +18 -25
  119. package/src/theme/BlogPostAuthor/index.tsx +49 -0
  120. package/{lib/theme/IconEdit → src/theme/BlogPostAuthor}/styles.module.css +4 -3
  121. package/src/theme/BlogPostAuthors/index.tsx +39 -0
  122. package/src/theme/BlogPostAuthors/styles.module.css +11 -0
  123. package/src/theme/BlogPostItem/index.tsx +70 -80
  124. package/src/theme/BlogPostPage/index.tsx +72 -35
  125. package/src/theme/BlogSidebar/index.tsx +11 -13
  126. package/src/theme/BlogSidebar/styles.module.css +2 -2
  127. package/src/theme/BlogTagsListPage/index.tsx +14 -57
  128. package/src/theme/BlogTagsPostsPage/index.tsx +29 -39
  129. package/src/theme/CodeBlock/index.tsx +27 -151
  130. package/src/theme/CodeBlock/styles.module.css +12 -9
  131. package/src/theme/Details/index.tsx +24 -0
  132. package/src/theme/Details/styles.module.css +13 -0
  133. package/src/theme/DocCard/index.tsx +100 -0
  134. package/src/theme/DocCard/styles.module.css +43 -0
  135. package/src/theme/DocCardList/index.tsx +27 -0
  136. package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +53 -0
  137. package/src/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  138. package/src/theme/DocItem/index.tsx +30 -60
  139. package/src/theme/DocItem/styles.module.css +2 -11
  140. package/src/theme/DocItemFooter/index.tsx +91 -0
  141. package/{lib/theme/BlogPostItem → src/theme/DocItemFooter}/styles.module.css +8 -8
  142. package/src/theme/DocPage/index.tsx +44 -22
  143. package/src/theme/DocPaginator/index.tsx +5 -33
  144. package/src/theme/DocPaginatorNavLink/index.tsx +38 -0
  145. package/src/theme/DocSidebar/index.tsx +38 -39
  146. package/src/theme/DocSidebarItem/index.tsx +108 -49
  147. package/src/theme/DocSidebarItem/styles.module.css +4 -0
  148. package/src/theme/DocTagDocListPage/index.tsx +89 -0
  149. package/src/theme/DocTagsListPage/index.tsx +41 -0
  150. package/src/theme/DocVersionBadge/index.tsx +30 -0
  151. package/src/theme/DocVersionBanner/index.tsx +48 -21
  152. package/src/theme/EditThisPage/index.tsx +6 -1
  153. package/src/theme/ErrorPageContent.tsx +41 -0
  154. package/src/theme/Footer/index.tsx +103 -42
  155. package/src/theme/Heading/index.tsx +24 -31
  156. package/src/theme/Heading/styles.css +5 -6
  157. package/src/theme/Heading/styles.module.css +9 -5
  158. package/src/theme/IconArrow/index.tsx +2 -2
  159. package/src/theme/IconClose/index.tsx +26 -0
  160. package/src/theme/IconEdit/index.tsx +2 -2
  161. package/src/theme/IconExternalLink/index.tsx +2 -5
  162. package/src/theme/IconLanguage/index.tsx +2 -6
  163. package/src/theme/IconMenu/index.tsx +3 -3
  164. package/src/theme/LastUpdated/index.tsx +3 -2
  165. package/src/theme/Layout/index.tsx +3 -1
  166. package/src/theme/LayoutHead/index.tsx +18 -17
  167. package/src/theme/LayoutProviders/index.tsx +8 -5
  168. package/src/theme/Logo/index.tsx +21 -17
  169. package/src/theme/MDXComponents/index.tsx +39 -5
  170. package/src/theme/MDXComponents/styles.css +11 -0
  171. package/src/theme/MDXPage/index.tsx +10 -2
  172. package/src/theme/Navbar/index.tsx +62 -35
  173. package/src/theme/Navbar/styles.module.css +3 -39
  174. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +42 -149
  175. package/src/theme/NavbarItem/DocNavbarItem.tsx +12 -16
  176. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +33 -21
  177. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +7 -3
  178. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +180 -0
  179. package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +8 -9
  180. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  181. package/src/theme/NavbarItem/index.tsx +41 -16
  182. package/src/theme/{SearchMetadatas → SearchMetadata}/index.tsx +2 -2
  183. package/src/theme/Seo/index.tsx +7 -4
  184. package/src/theme/TOC/index.tsx +13 -35
  185. package/src/theme/TOC/styles.module.css +1 -1
  186. package/src/theme/TOCCollapsible/index.tsx +13 -4
  187. package/src/theme/TOCCollapsible/styles.module.css +1 -0
  188. package/src/theme/TOCInline/index.tsx +13 -32
  189. package/src/theme/TOCItems/index.tsx +96 -0
  190. package/src/theme/Tabs/index.tsx +110 -54
  191. package/src/theme/Tabs/styles.module.css +0 -13
  192. package/src/theme/Tag/index.tsx +31 -0
  193. package/src/theme/Tag/styles.module.css +70 -0
  194. package/src/theme/TagsListByLetter/index.tsx +45 -0
  195. package/src/theme/TagsListByLetter/styles.module.css +11 -0
  196. package/src/theme/TagsListInline/index.tsx +35 -0
  197. package/src/theme/TagsListInline/styles.module.css +15 -0
  198. package/src/theme/ThemeProvider/index.tsx +6 -2
  199. package/src/theme/ThemedImage/index.tsx +5 -5
  200. package/src/theme/Toggle/index.tsx +36 -43
  201. package/src/theme/Toggle/styles.module.css +91 -3
  202. package/src/theme/UserPreferencesProvider/index.tsx +9 -6
  203. package/src/theme/hooks/useHideableNavbar.ts +32 -45
  204. package/src/theme/hooks/useTabGroupChoice.ts +2 -2
  205. package/src/theme/hooks/useTheme.ts +4 -5
  206. package/src/theme/hooks/useWindowSize.ts +2 -7
  207. package/src/theme/prism-include-languages.ts +3 -2
  208. package/src/theme-classic.d.ts +822 -0
  209. package/src/translations.ts +41 -23
  210. package/src/types.d.ts +0 -629
  211. package/src/{validateThemeConfig.js → validateThemeConfig.ts} +160 -100
  212. package/babel.config.js +0 -35
  213. package/codeTranslations/README.md +0 -20
  214. package/codeTranslations/ar.json +0 -56
  215. package/codeTranslations/base.json +0 -110
  216. package/codeTranslations/bn.json +0 -56
  217. package/codeTranslations/da.json +0 -56
  218. package/codeTranslations/de.json +0 -56
  219. package/codeTranslations/es.json +0 -56
  220. package/codeTranslations/fa.json +0 -56
  221. package/codeTranslations/fil.json +0 -56
  222. package/codeTranslations/fr.json +0 -56
  223. package/codeTranslations/he.json +0 -56
  224. package/codeTranslations/hi.json +0 -56
  225. package/codeTranslations/ja.json +0 -56
  226. package/codeTranslations/ko.json +0 -56
  227. package/codeTranslations/pl.json +0 -56
  228. package/codeTranslations/pt-BR.json +0 -56
  229. package/codeTranslations/pt-PT.json +0 -56
  230. package/codeTranslations/ru.json +0 -56
  231. package/codeTranslations/tr.json +0 -56
  232. package/codeTranslations/vi.json +0 -56
  233. package/codeTranslations/zh-Hans.json +0 -56
  234. package/codeTranslations/zh-Hant.json +0 -56
  235. package/lib/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  236. package/lib/__tests__/translations.test.js +0 -112
  237. package/lib/__tests__/validateThemeConfig.test.js +0 -333
  238. package/lib/theme/AnnouncementBar/index.js +0 -72
  239. package/lib/theme/AnnouncementBar/styles.module.css +0 -72
  240. package/lib/theme/BlogListPage/index.js +0 -71
  241. package/lib/theme/BlogListPaginator/index.js +0 -63
  242. package/lib/theme/BlogPostItem/index.js +0 -161
  243. package/lib/theme/BlogPostPage/index.js +0 -69
  244. package/lib/theme/BlogPostPaginator/index.js +0 -64
  245. package/lib/theme/BlogSidebar/index.js +0 -51
  246. package/lib/theme/BlogSidebar/styles.module.css +0 -44
  247. package/lib/theme/BlogTagsListPage/index.js +0 -76
  248. package/lib/theme/BlogTagsPostsPage/index.js +0 -100
  249. package/lib/theme/CodeBlock/index.js +0 -253
  250. package/lib/theme/CodeBlock/styles.module.css +0 -68
  251. package/lib/theme/DocItem/index.js +0 -138
  252. package/lib/theme/DocItem/styles.module.css +0 -31
  253. package/lib/theme/DocPage/index.js +0 -139
  254. package/lib/theme/DocPage/styles.module.css +0 -85
  255. package/lib/theme/DocPaginator/index.js +0 -63
  256. package/lib/theme/DocSidebar/index.js +0 -133
  257. package/lib/theme/DocSidebar/styles.module.css +0 -106
  258. package/lib/theme/DocSidebarItem/index.js +0 -175
  259. package/lib/theme/DocVersionBanner/index.js +0 -128
  260. package/lib/theme/EditThisPage/index.js +0 -31
  261. package/lib/theme/Footer/index.js +0 -115
  262. package/lib/theme/Footer/styles.module.css +0 -15
  263. package/lib/theme/Heading/index.js +0 -76
  264. package/lib/theme/Heading/styles.css +0 -23
  265. package/lib/theme/Heading/styles.module.css +0 -15
  266. package/lib/theme/IconArrow/index.js +0 -28
  267. package/lib/theme/IconEdit/index.js +0 -34
  268. package/lib/theme/IconExternalLink/index.js +0 -30
  269. package/lib/theme/IconLanguage/index.js +0 -29
  270. package/lib/theme/IconMenu/index.js +0 -30
  271. package/lib/theme/LastUpdated/index.js +0 -61
  272. package/lib/theme/Layout/index.js +0 -64
  273. package/lib/theme/Layout/styles.css +0 -27
  274. package/lib/theme/LayoutHead/index.js +0 -144
  275. package/lib/theme/LayoutProviders/index.js +0 -38
  276. package/lib/theme/Logo/index.js +0 -60
  277. package/lib/theme/MDXComponents/index.js +0 -65
  278. package/lib/theme/MDXPage/index.js +0 -66
  279. package/lib/theme/Navbar/index.js +0 -248
  280. package/lib/theme/Navbar/styles.module.css +0 -63
  281. package/lib/theme/NavbarItem/DefaultNavbarItem.js +0 -210
  282. package/lib/theme/NavbarItem/DocNavbarItem.js +0 -63
  283. package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +0 -76
  284. package/lib/theme/NavbarItem/DocsVersionNavbarItem.js +0 -43
  285. package/lib/theme/NavbarItem/LocaleDropdownNavbarItem.js +0 -72
  286. package/lib/theme/NavbarItem/SearchNavbarItem.js +0 -28
  287. package/lib/theme/NavbarItem/index.js +0 -54
  288. package/lib/theme/NotFound.js +0 -57
  289. package/lib/theme/SearchBar.js +0 -15
  290. package/lib/theme/SearchMetadatas/index.js +0 -33
  291. package/lib/theme/Seo/index.js +0 -49
  292. package/lib/theme/SkipToContent/index.js +0 -71
  293. package/lib/theme/SkipToContent/styles.module.css +0 -14
  294. package/lib/theme/TOC/index.js +0 -60
  295. package/lib/theme/TOC/styles.module.css +0 -23
  296. package/lib/theme/TOCCollapsible/index.js +0 -51
  297. package/lib/theme/TOCCollapsible/styles.module.css +0 -49
  298. package/lib/theme/TOCInline/index.js +0 -53
  299. package/lib/theme/TOCInline/styles.module.css +0 -12
  300. package/lib/theme/TabItem/index.js +0 -32
  301. package/lib/theme/Tabs/index.js +0 -150
  302. package/lib/theme/Tabs/styles.module.css +0 -23
  303. package/lib/theme/ThemeContext.js +0 -21
  304. package/lib/theme/ThemeProvider/index.js +0 -38
  305. package/lib/theme/ThemedImage/index.js +0 -49
  306. package/lib/theme/ThemedImage/styles.module.css +0 -18
  307. package/lib/theme/Toggle/index.js +0 -94
  308. package/lib/theme/Toggle/styles.css +0 -103
  309. package/lib/theme/Toggle/styles.module.css +0 -17
  310. package/lib/theme/UserPreferencesContext.js +0 -18
  311. package/lib/theme/UserPreferencesProvider/index.js +0 -36
  312. package/lib/theme/hooks/useContextualSearchFilters.js +0 -47
  313. package/lib/theme/hooks/useDocs.js +0 -18
  314. package/lib/theme/hooks/useHideableNavbar.js +0 -92
  315. package/lib/theme/hooks/useKeyboardNavigation.js +0 -45
  316. package/lib/theme/hooks/useLocationHash.js +0 -28
  317. package/lib/theme/hooks/useLockBodyScroll.js +0 -26
  318. package/lib/theme/hooks/usePrismTheme.js +0 -36
  319. package/lib/theme/hooks/useScrollPosition.js +0 -49
  320. package/lib/theme/hooks/useTOCHighlight.js +0 -87
  321. package/lib/theme/hooks/useTabGroupChoice.js +0 -51
  322. package/lib/theme/hooks/useTheme.js +0 -99
  323. package/lib/theme/hooks/useThemeContext.js +0 -31
  324. package/lib/theme/hooks/useUserPreferencesContext.js +0 -31
  325. package/lib/theme/hooks/useWindowSize.js +0 -73
  326. package/lib/theme/prism-include-languages.js +0 -39
  327. package/lib-next/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  328. package/lib-next/__tests__/translations.test.js +0 -128
  329. package/lib-next/__tests__/validateThemeConfig.test.js +0 -333
  330. package/lib-next/index.js +0 -221
  331. package/lib-next/theme/Toggle/styles.css +0 -103
  332. package/lib-next/theme/hooks/useContextualSearchFilters.js +0 -41
  333. package/lib-next/theme/hooks/useLocationHash.js +0 -20
  334. package/lib-next/theme/hooks/useScrollPosition.js +0 -38
  335. package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
  336. package/lib-next/translations.js +0 -145
  337. package/lib-next/validateThemeConfig.js +0 -319
  338. package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  339. package/src/__tests__/translations.test.ts +0 -116
  340. package/src/__tests__/validateThemeConfig.test.js +0 -333
  341. package/src/prism-include-languages.js +0 -11
  342. package/src/theme/Toggle/styles.css +0 -103
  343. package/src/theme/hooks/useContextualSearchFilters.ts +0 -52
  344. package/src/theme/hooks/useLocationHash.ts +0 -25
  345. package/src/theme/hooks/useScrollPosition.ts +0 -45
  346. package/src/theme/hooks/useTOCHighlight.ts +0 -98
  347. package/tsconfig.json +0 -12
  348. package/update-code-translations.js +0 -242
  349. package/update-code-translations.test.js +0 -33
@@ -5,46 +5,35 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import React, {useEffect, memo} from 'react';
8
+ import React, {useEffect, memo, useMemo} from 'react';
9
9
  import clsx from 'clsx';
10
10
  import {
11
- isSamePath,
11
+ isActiveSidebarItem,
12
12
  usePrevious,
13
13
  Collapsible,
14
14
  useCollapsible,
15
+ findFirstCategoryLink,
16
+ ThemeClassNames,
15
17
  } from '@docusaurus/theme-common';
16
18
  import Link from '@docusaurus/Link';
17
19
  import isInternalUrl from '@docusaurus/isInternalUrl';
20
+ import {translate} from '@docusaurus/Translate';
18
21
  import IconExternalLink from '@theme/IconExternalLink';
19
22
 
20
23
  import type {Props, DocSidebarItemsProps} from '@theme/DocSidebarItem';
21
24
  import type {
22
25
  PropSidebarItemCategory,
23
26
  PropSidebarItemLink,
24
- } from '@docusaurus/plugin-content-docs-types';
27
+ } from '@docusaurus/plugin-content-docs';
25
28
 
26
29
  import styles from './styles.module.css';
27
-
28
- const isActiveSidebarItem = (item: Props['item'], activePath: string) => {
29
- if (item.type === 'link') {
30
- return isSamePath(item.href, activePath);
31
- }
32
- if (item.type === 'category') {
33
- return item.items.some((subItem) =>
34
- isActiveSidebarItem(subItem, activePath),
35
- );
36
- }
37
- return false;
38
- };
30
+ import useIsBrowser from '@docusaurus/useIsBrowser';
39
31
 
40
32
  // Optimize sidebar at each "level"
41
33
  // TODO this item should probably not receive the "activePath" props
42
34
  // TODO this triggers whole sidebar re-renders on navigation
43
- export const DocSidebarItems = memo(function DocSidebarItems({
44
- items,
45
- ...props
46
- }: DocSidebarItemsProps): JSX.Element {
47
- return (
35
+ export const DocSidebarItems = memo(
36
+ ({items, ...props}: DocSidebarItemsProps): JSX.Element => (
48
37
  <>
49
38
  {items.map((item, index) => (
50
39
  <DocSidebarItem
@@ -54,8 +43,8 @@ export const DocSidebarItems = memo(function DocSidebarItems({
54
43
  />
55
44
  ))}
56
45
  </>
57
- );
58
- });
46
+ ),
47
+ );
59
48
 
60
49
  export default function DocSidebarItem({
61
50
  item,
@@ -89,17 +78,40 @@ function useAutoExpandActiveCategory({
89
78
  if (justBecameActive && collapsed) {
90
79
  setCollapsed(false);
91
80
  }
92
- }, [isActive, wasActive, collapsed]);
81
+ }, [isActive, wasActive, collapsed, setCollapsed]);
82
+ }
83
+
84
+ // When a collapsible category has no link, we still link it to its first child during SSR as a temporary fallback
85
+ // This allows to be able to navigate inside the category even when JS fails to load, is delayed or simply disabled
86
+ // React hydration becomes an optional progressive enhancement
87
+ // see https://github.com/facebookincubator/infima/issues/36#issuecomment-772543188
88
+ // see https://github.com/facebook/docusaurus/issues/3030
89
+ function useCategoryHrefWithSSRFallback(
90
+ item: PropSidebarItemCategory,
91
+ ): string | undefined {
92
+ const isBrowser = useIsBrowser();
93
+ return useMemo(() => {
94
+ if (item.href) {
95
+ return item.href;
96
+ }
97
+ // In these cases, it's not necessary to render a fallback
98
+ // We skip the "findFirstCategoryLink" computation
99
+ if (isBrowser || !item.collapsible) {
100
+ return undefined;
101
+ }
102
+ return findFirstCategoryLink(item);
103
+ }, [item, isBrowser]);
93
104
  }
94
105
 
95
106
  function DocSidebarItemCategory({
96
107
  item,
97
108
  onItemClick,
98
- collapsible = true,
99
109
  activePath,
110
+ level,
100
111
  ...props
101
112
  }: Props & {item: PropSidebarItemCategory}) {
102
- const {items, label} = item;
113
+ const {items, label, collapsible, className, href} = item;
114
+ const hrefWithSSRFallback = useCategoryHrefWithSSRFallback(item);
103
115
 
104
116
  const isActive = isActiveSidebarItem(item, activePath);
105
117
 
@@ -110,7 +122,7 @@ function DocSidebarItemCategory({
110
122
  if (!collapsible) {
111
123
  return false;
112
124
  }
113
- return isActive ? false : item.collapsed ?? true;
125
+ return isActive ? false : item.collapsed;
114
126
  },
115
127
  });
116
128
 
@@ -118,29 +130,70 @@ function DocSidebarItemCategory({
118
130
 
119
131
  return (
120
132
  <li
121
- className={clsx('menu__list-item', {
122
- 'menu__list-item--collapsed': collapsed,
123
- })}>
124
- {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
125
- <a
126
- className={clsx('menu__link', {
127
- 'menu__link--sublist': collapsible,
128
- 'menu__link--active': collapsible && isActive,
129
- [styles.menuLinkText]: !collapsible,
130
- })}
131
- onClick={collapsible ? toggleCollapsed : undefined}
132
- href={collapsible ? '#' : undefined}
133
- {...props}>
134
- {label}
135
- </a>
133
+ className={clsx(
134
+ ThemeClassNames.docs.docSidebarItemCategory,
135
+ ThemeClassNames.docs.docSidebarItemCategoryLevel(level),
136
+ 'menu__list-item',
137
+ {
138
+ 'menu__list-item--collapsed': collapsed,
139
+ },
140
+ className,
141
+ )}>
142
+ <div className="menu__list-item-collapsible">
143
+ <Link
144
+ className={clsx('menu__link', {
145
+ 'menu__link--sublist': collapsible && !href,
146
+ 'menu__link--active': isActive,
147
+ [styles.menuLinkText]: !collapsible,
148
+ [styles.hasHref]: !!hrefWithSSRFallback,
149
+ })}
150
+ onClick={
151
+ collapsible
152
+ ? (e) => {
153
+ onItemClick?.(item);
154
+ if (href) {
155
+ setCollapsed(false);
156
+ } else {
157
+ e.preventDefault();
158
+ toggleCollapsed();
159
+ }
160
+ }
161
+ : () => {
162
+ onItemClick?.(item);
163
+ }
164
+ }
165
+ href={collapsible ? hrefWithSSRFallback ?? '#' : hrefWithSSRFallback}
166
+ {...props}>
167
+ {label}
168
+ </Link>
169
+ {href && collapsible && (
170
+ <button
171
+ aria-label={translate(
172
+ {
173
+ id: 'theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel',
174
+ message: "Toggle the collapsible sidebar category '{label}'",
175
+ description:
176
+ 'The ARIA label to toggle the collapsible sidebar category',
177
+ },
178
+ {label},
179
+ )}
180
+ type="button"
181
+ className="clean-btn menu__caret"
182
+ onClick={(e) => {
183
+ e.preventDefault();
184
+ toggleCollapsed();
185
+ }}
186
+ />
187
+ )}
188
+ </div>
136
189
 
137
- <Collapsible as="ul" className="menu__list" collapsed={collapsed}>
190
+ <Collapsible lazy as="ul" className="menu__list" collapsed={collapsed}>
138
191
  <DocSidebarItems
139
192
  items={items}
140
193
  tabIndex={collapsed ? -1 : 0}
141
194
  onItemClick={onItemClick}
142
- collapsible={collapsible}
143
195
  activePath={activePath}
196
+ level={level + 1}
144
197
  />
145
198
  </Collapsible>
146
199
  </li>
@@ -151,22 +204,28 @@ function DocSidebarItemLink({
151
204
  item,
152
205
  onItemClick,
153
206
  activePath,
154
- collapsible: _collapsible,
207
+ level,
155
208
  ...props
156
209
  }: Props & {item: PropSidebarItemLink}) {
157
- const {href, label} = item;
210
+ const {href, label, className} = item;
158
211
  const isActive = isActiveSidebarItem(item, activePath);
159
212
  return (
160
- <li className="menu__list-item" key={label}>
213
+ <li
214
+ className={clsx(
215
+ ThemeClassNames.docs.docSidebarItemLink,
216
+ ThemeClassNames.docs.docSidebarItemLinkLevel(level),
217
+ 'menu__list-item',
218
+ className,
219
+ )}
220
+ key={label}>
161
221
  <Link
162
222
  className={clsx('menu__link', {
163
223
  'menu__link--active': isActive,
164
224
  })}
225
+ aria-current={isActive ? 'page' : undefined}
165
226
  to={href}
166
227
  {...(isInternalUrl(href) && {
167
- isNavLink: true,
168
- exact: true,
169
- onClick: onItemClick,
228
+ onClick: onItemClick ? () => onItemClick(item) : undefined,
170
229
  })}
171
230
  {...props}>
172
231
  {isInternalUrl(href) ? (
@@ -12,4 +12,8 @@
12
12
  .menuLinkText:hover {
13
13
  background: none;
14
14
  }
15
+
16
+ .menuLinkText.hasHref {
17
+ cursor: pointer;
18
+ }
15
19
  }
@@ -0,0 +1,89 @@
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
+
10
+ import Layout from '@theme/Layout';
11
+ import Link from '@docusaurus/Link';
12
+ import {ThemeClassNames, usePluralForm} from '@docusaurus/theme-common';
13
+ import type {PropTagDocListDoc} from '@docusaurus/plugin-content-docs';
14
+ import Translate, {translate} from '@docusaurus/Translate';
15
+ import type {Props} from '@theme/DocTagDocListPage';
16
+
17
+ // Very simple pluralization: probably good enough for now
18
+ function useNDocsTaggedPlural() {
19
+ const {selectMessage} = usePluralForm();
20
+ return (count: number) =>
21
+ selectMessage(
22
+ count,
23
+ translate(
24
+ {
25
+ id: 'theme.docs.tagDocListPageTitle.nDocsTagged',
26
+ description:
27
+ 'Pluralized label for "{count} docs tagged". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',
28
+ message: 'One doc tagged|{count} docs tagged',
29
+ },
30
+ {count},
31
+ ),
32
+ );
33
+ }
34
+
35
+ function DocItem({doc}: {doc: PropTagDocListDoc}): JSX.Element {
36
+ return (
37
+ <article className="margin-vert--lg">
38
+ <Link to={doc.permalink}>
39
+ <h2>{doc.title}</h2>
40
+ </Link>
41
+ {doc.description && <p>{doc.description}</p>}
42
+ </article>
43
+ );
44
+ }
45
+
46
+ export default function DocTagDocListPage({tag}: Props): JSX.Element {
47
+ const nDocsTaggedPlural = useNDocsTaggedPlural();
48
+ const title = translate(
49
+ {
50
+ id: 'theme.docs.tagDocListPageTitle',
51
+ description: 'The title of the page for a docs tag',
52
+ message: '{nDocsTagged} with "{tagName}"',
53
+ },
54
+ {nDocsTagged: nDocsTaggedPlural(tag.docs.length), tagName: tag.name},
55
+ );
56
+
57
+ return (
58
+ <Layout
59
+ title={title}
60
+ wrapperClassName={ThemeClassNames.wrapper.docsPages}
61
+ pageClassName={ThemeClassNames.page.docsTagDocListPage}
62
+ searchMetadata={{
63
+ // assign unique search tag to exclude this page from search results!
64
+ tag: 'doc_tag_doc_list',
65
+ }}>
66
+ <div className="container margin-vert--lg">
67
+ <div className="row">
68
+ <main className="col col--8 col--offset-2">
69
+ <header className="margin-bottom--xl">
70
+ <h1>{title}</h1>
71
+ <Link href={tag.allTagsPath}>
72
+ <Translate
73
+ id="theme.tags.tagsPageLink"
74
+ description="The label of the link targeting the tag list page">
75
+ View All Tags
76
+ </Translate>
77
+ </Link>
78
+ </header>
79
+ <section className="margin-vert--lg">
80
+ {tag.docs.map((doc) => (
81
+ <DocItem key={doc.id} doc={doc} />
82
+ ))}
83
+ </section>
84
+ </main>
85
+ </div>
86
+ </div>
87
+ </Layout>
88
+ );
89
+ }
@@ -0,0 +1,41 @@
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
+
10
+ import Layout from '@theme/Layout';
11
+ import {
12
+ ThemeClassNames,
13
+ translateTagsPageTitle,
14
+ } from '@docusaurus/theme-common';
15
+ import TagsListByLetter from '@theme/TagsListByLetter';
16
+ import type {Props} from '@theme/DocTagsListPage';
17
+
18
+ function DocTagsListPage({tags}: Props): JSX.Element {
19
+ const title = translateTagsPageTitle();
20
+ return (
21
+ <Layout
22
+ title={title}
23
+ wrapperClassName={ThemeClassNames.wrapper.docsPages}
24
+ pageClassName={ThemeClassNames.page.docsTagsListPage}
25
+ searchMetadata={{
26
+ // assign unique search tag to exclude this page from search results!
27
+ tag: 'doc_tags_list',
28
+ }}>
29
+ <div className="container margin-vert--lg">
30
+ <div className="row">
31
+ <main className="col col--8 col--offset-2">
32
+ <h1>{title}</h1>
33
+ <TagsListByLetter tags={tags} />
34
+ </main>
35
+ </div>
36
+ </div>
37
+ </Layout>
38
+ );
39
+ }
40
+
41
+ export default DocTagsListPage;
@@ -0,0 +1,30 @@
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 {ThemeClassNames, useDocsVersion} from '@docusaurus/theme-common';
10
+ import clsx from 'clsx';
11
+ import type {Props} from '@theme/DocVersionBadge';
12
+
13
+ export default function DocVersionBadge({
14
+ className,
15
+ }: Props): JSX.Element | null {
16
+ const versionMetadata = useDocsVersion();
17
+ if (versionMetadata.badge) {
18
+ return (
19
+ <span
20
+ className={clsx(
21
+ className,
22
+ ThemeClassNames.docs.docVersionBadge,
23
+ 'badge badge--secondary',
24
+ )}>
25
+ Version: {versionMetadata.label}
26
+ </span>
27
+ );
28
+ }
29
+ return null;
30
+ }
@@ -9,14 +9,27 @@ import React, {ComponentType} from 'react';
9
9
  import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
10
10
  import Link from '@docusaurus/Link';
11
11
  import Translate from '@docusaurus/Translate';
12
- import {useActivePlugin, useDocVersionSuggestions} from '@theme/hooks/useDocs';
13
- import {useDocsPreferredVersion} from '@docusaurus/theme-common';
12
+ import {
13
+ useActivePlugin,
14
+ useDocVersionSuggestions,
15
+ GlobalVersion,
16
+ } from '@theme/hooks/useDocs';
17
+ import {
18
+ ThemeClassNames,
19
+ useDocsPreferredVersion,
20
+ useDocsVersion,
21
+ } from '@docusaurus/theme-common';
14
22
 
15
23
  import type {Props} from '@theme/DocVersionBanner';
24
+ import clsx from 'clsx';
25
+ import type {
26
+ VersionBanner,
27
+ PropVersionMetadata,
28
+ } from '@docusaurus/plugin-content-docs';
16
29
 
17
30
  type BannerLabelComponentProps = {
18
31
  siteTitle: string;
19
- versionMetadata: Props['versionMetadata'];
32
+ versionMetadata: PropVersionMetadata;
20
33
  };
21
34
 
22
35
  function UnreleasedVersionLabel({
@@ -58,7 +71,7 @@ function UnmaintainedVersionLabel({
58
71
  }
59
72
 
60
73
  const BannerLabelComponents: Record<
61
- Props['versionMetadata']['banner'],
74
+ VersionBanner,
62
75
  ComponentType<BannerLabelComponentProps>
63
76
  > = {
64
77
  unreleased: UnreleasedVersionLabel,
@@ -67,7 +80,7 @@ const BannerLabelComponents: Record<
67
80
 
68
81
  function BannerLabel(props: BannerLabelComponentProps) {
69
82
  const BannerLabelComponent =
70
- BannerLabelComponents[props.versionMetadata.banner];
83
+ BannerLabelComponents[props.versionMetadata.banner!];
71
84
  return <BannerLabelComponent {...props} />;
72
85
  }
73
86
 
@@ -105,21 +118,24 @@ function LatestVersionSuggestionLabel({
105
118
  );
106
119
  }
107
120
 
108
- function DocVersionBannerEnabled({versionMetadata}: Props): JSX.Element {
121
+ function DocVersionBannerEnabled({
122
+ className,
123
+ versionMetadata,
124
+ }: Props & {
125
+ versionMetadata: PropVersionMetadata;
126
+ }): JSX.Element {
109
127
  const {
110
128
  siteConfig: {title: siteTitle},
111
129
  } = useDocusaurusContext();
112
- const {pluginId} = useActivePlugin({failfast: true});
130
+ const {pluginId} = useActivePlugin({failfast: true})!;
113
131
 
114
- const getVersionMainDoc = (version) =>
115
- version.docs.find((doc) => doc.id === version.mainDocId);
132
+ const getVersionMainDoc = (version: GlobalVersion) =>
133
+ version.docs.find((doc) => doc.id === version.mainDocId)!;
116
134
 
117
135
  const {savePreferredVersionName} = useDocsPreferredVersion(pluginId);
118
136
 
119
- const {
120
- latestDocSuggestion,
121
- latestVersionSuggestion,
122
- } = useDocVersionSuggestions(pluginId);
137
+ const {latestDocSuggestion, latestVersionSuggestion} =
138
+ useDocVersionSuggestions(pluginId);
123
139
 
124
140
  // try to link to same doc in latest version (not always possible)
125
141
  // fallback to main doc of latest version
@@ -127,7 +143,13 @@ function DocVersionBannerEnabled({versionMetadata}: Props): JSX.Element {
127
143
  latestDocSuggestion ?? getVersionMainDoc(latestVersionSuggestion);
128
144
 
129
145
  return (
130
- <div className="alert alert--warning margin-bottom--md" role="alert">
146
+ <div
147
+ className={clsx(
148
+ className,
149
+ ThemeClassNames.docs.docVersionBanner,
150
+ 'alert alert--warning margin-bottom--md',
151
+ )}
152
+ role="alert">
131
153
  <div>
132
154
  <BannerLabel siteTitle={siteTitle} versionMetadata={versionMetadata} />
133
155
  </div>
@@ -142,12 +164,17 @@ function DocVersionBannerEnabled({versionMetadata}: Props): JSX.Element {
142
164
  );
143
165
  }
144
166
 
145
- function DocVersionBanner({versionMetadata}: Props): JSX.Element {
146
- if (versionMetadata.banner === 'none') {
147
- return <></>;
148
- } else {
149
- return <DocVersionBannerEnabled versionMetadata={versionMetadata} />;
167
+ export default function DocVersionBanner({
168
+ className,
169
+ }: Props): JSX.Element | null {
170
+ const versionMetadata = useDocsVersion();
171
+ if (versionMetadata.banner) {
172
+ return (
173
+ <DocVersionBannerEnabled
174
+ className={className}
175
+ versionMetadata={versionMetadata}
176
+ />
177
+ );
150
178
  }
179
+ return null;
151
180
  }
152
-
153
- export default DocVersionBanner;
@@ -10,10 +10,15 @@ import Translate from '@docusaurus/Translate';
10
10
 
11
11
  import type {Props} from '@theme/EditThisPage';
12
12
  import IconEdit from '@theme/IconEdit';
13
+ import {ThemeClassNames} from '@docusaurus/theme-common';
13
14
 
14
15
  export default function EditThisPage({editUrl}: Props): JSX.Element {
15
16
  return (
16
- <a href={editUrl} target="_blank" rel="noreferrer noopener">
17
+ <a
18
+ href={editUrl}
19
+ target="_blank"
20
+ rel="noreferrer noopener"
21
+ className={ThemeClassNames.common.editThisPage}>
17
22
  <IconEdit />
18
23
  <Translate
19
24
  id="theme.common.editThisPage"
@@ -0,0 +1,41 @@
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 Translate from '@docusaurus/Translate';
10
+ import type {Props} from '@theme/Error';
11
+
12
+ export default function ErrorPageContent({
13
+ error,
14
+ tryAgain,
15
+ }: Props): JSX.Element {
16
+ return (
17
+ <main className="container margin-vert--xl">
18
+ <div className="row">
19
+ <div className="col col--6 col--offset-3">
20
+ <h1 className="hero__title">
21
+ <Translate
22
+ id="theme.ErrorPageContent.title"
23
+ description="The title of the fallback page when the page crashed">
24
+ This page crashed.
25
+ </Translate>
26
+ </h1>
27
+ <p>{error.message}</p>
28
+ <div>
29
+ <button type="button" onClick={tryAgain}>
30
+ <Translate
31
+ id="theme.ErrorPageContent.tryAgain"
32
+ description="The label of the button to try again when the page crashed">
33
+ Try again
34
+ </Translate>
35
+ </button>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ </main>
40
+ );
41
+ }