@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
@@ -0,0 +1,96 @@
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, {useMemo} from 'react';
9
+ import type {TOCItemsProps} from '@theme/TOCItems';
10
+ import {TOCItem} from '@docusaurus/types';
11
+ import {
12
+ TOCHighlightConfig,
13
+ useThemeConfig,
14
+ useTOCFilter,
15
+ useTOCHighlight,
16
+ } from '@docusaurus/theme-common';
17
+
18
+ // Recursive component rendering the toc tree
19
+ /* eslint-disable jsx-a11y/control-has-associated-label */
20
+ function TOCItemList({
21
+ toc,
22
+ className,
23
+ linkClassName,
24
+ isChild,
25
+ }: {
26
+ readonly toc: readonly TOCItem[];
27
+ readonly className: string;
28
+ readonly linkClassName: string | null;
29
+ readonly isChild?: boolean;
30
+ }): JSX.Element | null {
31
+ if (!toc.length) {
32
+ return null;
33
+ }
34
+ return (
35
+ <ul className={isChild ? undefined : className}>
36
+ {toc.map((heading) => (
37
+ <li key={heading.id}>
38
+ <a
39
+ href={`#${heading.id}`}
40
+ className={linkClassName ?? undefined}
41
+ // Developer provided the HTML, so assume it's safe.
42
+ // eslint-disable-next-line react/no-danger
43
+ dangerouslySetInnerHTML={{__html: heading.value}}
44
+ />
45
+ <TOCItemList
46
+ isChild
47
+ toc={heading.children}
48
+ className={className}
49
+ linkClassName={linkClassName}
50
+ />
51
+ </li>
52
+ ))}
53
+ </ul>
54
+ );
55
+ }
56
+
57
+ export default function TOCItems({
58
+ toc,
59
+ className = 'table-of-contents table-of-contents__left-border',
60
+ linkClassName = 'table-of-contents__link',
61
+ linkActiveClassName = undefined,
62
+ minHeadingLevel: minHeadingLevelOption,
63
+ maxHeadingLevel: maxHeadingLevelOption,
64
+ ...props
65
+ }: TOCItemsProps): JSX.Element | null {
66
+ const themeConfig = useThemeConfig();
67
+
68
+ const minHeadingLevel =
69
+ minHeadingLevelOption ?? themeConfig.tableOfContents.minHeadingLevel;
70
+ const maxHeadingLevel =
71
+ maxHeadingLevelOption ?? themeConfig.tableOfContents.maxHeadingLevel;
72
+
73
+ const tocFiltered = useTOCFilter({toc, minHeadingLevel, maxHeadingLevel});
74
+
75
+ const tocHighlightConfig: TOCHighlightConfig | undefined = useMemo(() => {
76
+ if (linkClassName && linkActiveClassName) {
77
+ return {
78
+ linkClassName,
79
+ linkActiveClassName,
80
+ minHeadingLevel,
81
+ maxHeadingLevel,
82
+ };
83
+ }
84
+ return undefined;
85
+ }, [linkClassName, linkActiveClassName, minHeadingLevel, maxHeadingLevel]);
86
+ useTOCHighlight(tocHighlightConfig);
87
+
88
+ return (
89
+ <TOCItemList
90
+ toc={tocFiltered}
91
+ className={className}
92
+ linkClassName={linkClassName}
93
+ {...props}
94
+ />
95
+ );
96
+ }
@@ -5,8 +5,16 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import React, {useState, cloneElement, Children, ReactElement} from 'react';
8
+ import React, {
9
+ useState,
10
+ cloneElement,
11
+ Children,
12
+ isValidElement,
13
+ ReactElement,
14
+ } from 'react';
15
+ import useIsBrowser from '@docusaurus/useIsBrowser';
9
16
  import useUserPreferencesContext from '@theme/hooks/useUserPreferencesContext';
17
+ import {useScrollPositionBlocker, duplicates} from '@docusaurus/theme-common';
10
18
  import type {Props} from '@theme/Tabs';
11
19
  import type {Props as TabItemProps} from '@theme/TabItem';
12
20
 
@@ -14,26 +22,72 @@ import clsx from 'clsx';
14
22
 
15
23
  import styles from './styles.module.css';
16
24
 
17
- function isInViewport(element: HTMLElement): boolean {
18
- const {top, left, bottom, right} = element.getBoundingClientRect();
19
- const {innerHeight, innerWidth} = window;
20
-
21
- return top >= 0 && right <= innerWidth && bottom <= innerHeight && left >= 0;
25
+ // A very rough duck type, but good enough to guard against mistakes while
26
+ // allowing customization
27
+ function isTabItem(comp: ReactElement): comp is ReactElement<TabItemProps> {
28
+ return typeof comp.props.value !== 'undefined';
22
29
  }
23
30
 
24
- const keys = {
25
- left: 37,
26
- right: 39,
27
- } as const;
31
+ function TabsComponent(props: Props): JSX.Element {
32
+ const {
33
+ lazy,
34
+ block,
35
+ defaultValue: defaultValueProp,
36
+ values: valuesProp,
37
+ groupId,
38
+ className,
39
+ } = props;
40
+ const children = Children.map(props.children, (child) => {
41
+ if (isValidElement(child) && isTabItem(child)) {
42
+ return child;
43
+ }
44
+ // child.type.name will give non-sensical values in prod because of
45
+ // minification, but we assume it won't throw in prod.
46
+ throw new Error(
47
+ `Docusaurus error: Bad <Tabs> child <${
48
+ // @ts-expect-error: guarding against unexpected cases
49
+ typeof child.type === 'string' ? child.type : child.type.name
50
+ }>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`,
51
+ );
52
+ });
53
+ const values =
54
+ valuesProp ??
55
+ // We only pick keys that we recognize. MDX would inject some keys by default
56
+ children.map(({props: {value, label, attributes}}) => ({
57
+ value,
58
+ label,
59
+ attributes,
60
+ }));
61
+ const dup = duplicates(values, (a, b) => a.value === b.value);
62
+ if (dup.length > 0) {
63
+ throw new Error(
64
+ `Docusaurus error: Duplicate values "${dup
65
+ .map((a) => a.value)
66
+ .join(', ')}" found in <Tabs>. Every value needs to be unique.`,
67
+ );
68
+ }
69
+ // When defaultValueProp is null, don't show a default tab
70
+ const defaultValue =
71
+ defaultValueProp === null
72
+ ? defaultValueProp
73
+ : defaultValueProp ??
74
+ children.find((child) => child.props.default)?.props.value ??
75
+ children[0]?.props.value;
76
+ if (defaultValue !== null && !values.some((a) => a.value === defaultValue)) {
77
+ throw new Error(
78
+ `Docusaurus error: The <Tabs> has a defaultValue "${defaultValue}" but none of its children has the corresponding value. Available values are: ${values
79
+ .map((a) => a.value)
80
+ .join(
81
+ ', ',
82
+ )}. If you intend to show no default tab, use defaultValue={null} instead.`,
83
+ );
84
+ }
28
85
 
29
- function Tabs(props: Props): JSX.Element {
30
- const {lazy, block, defaultValue, values, groupId, className} = props;
31
86
  const {tabGroupChoices, setTabGroupChoices} = useUserPreferencesContext();
32
87
  const [selectedValue, setSelectedValue] = useState(defaultValue);
33
- const children = Children.toArray(
34
- props.children,
35
- ) as ReactElement<TabItemProps>[];
36
88
  const tabRefs: (HTMLLIElement | null)[] = [];
89
+ const {blockElementScrollPositionUntilNextRender} =
90
+ useScrollPositionBlocker();
37
91
 
38
92
  if (groupId != null) {
39
93
  const relevantTabGroupChoice = tabGroupChoices[groupId];
@@ -49,45 +103,31 @@ function Tabs(props: Props): JSX.Element {
49
103
  const handleTabChange = (
50
104
  event: React.FocusEvent<HTMLLIElement> | React.MouseEvent<HTMLLIElement>,
51
105
  ) => {
52
- const selectedTab = event.currentTarget;
53
- const selectedTabIndex = tabRefs.indexOf(selectedTab);
54
- const selectedTabValue = values[selectedTabIndex].value;
55
-
56
- setSelectedValue(selectedTabValue);
57
-
58
- if (groupId != null) {
59
- setTabGroupChoices(groupId, selectedTabValue);
60
-
61
- setTimeout(() => {
62
- if (isInViewport(selectedTab)) {
63
- return;
64
- }
65
-
66
- selectedTab.scrollIntoView({
67
- block: 'center',
68
- behavior: 'smooth',
69
- });
70
-
71
- selectedTab.classList.add(styles.tabItemActive);
72
- setTimeout(
73
- () => selectedTab.classList.remove(styles.tabItemActive),
74
- 2000,
75
- );
76
- }, 150);
106
+ const newTab = event.currentTarget;
107
+ const newTabIndex = tabRefs.indexOf(newTab);
108
+ const newTabValue = values[newTabIndex].value;
109
+
110
+ if (newTabValue !== selectedValue) {
111
+ blockElementScrollPositionUntilNextRender(newTab);
112
+ setSelectedValue(newTabValue);
113
+
114
+ if (groupId != null) {
115
+ setTabGroupChoices(groupId, newTabValue);
116
+ }
77
117
  }
78
118
  };
79
119
 
80
- const handleKeydown = (event) => {
81
- let focusElement;
120
+ const handleKeydown = (event: React.KeyboardEvent<HTMLLIElement>) => {
121
+ let focusElement: HTMLLIElement | null = null;
82
122
 
83
- switch (event.keyCode) {
84
- case keys.right: {
85
- const nextTab = tabRefs.indexOf(event.target) + 1;
123
+ switch (event.key) {
124
+ case 'ArrowRight': {
125
+ const nextTab = tabRefs.indexOf(event.currentTarget) + 1;
86
126
  focusElement = tabRefs[nextTab] || tabRefs[0];
87
127
  break;
88
128
  }
89
- case keys.left: {
90
- const prevTab = tabRefs.indexOf(event.target) - 1;
129
+ case 'ArrowLeft': {
130
+ const prevTab = tabRefs.indexOf(event.currentTarget) - 1;
91
131
  focusElement = tabRefs[prevTab] || tabRefs[tabRefs.length - 1];
92
132
  break;
93
133
  }
@@ -110,20 +150,26 @@ function Tabs(props: Props): JSX.Element {
110
150
  },
111
151
  className,
112
152
  )}>
113
- {values.map(({value, label}) => (
153
+ {values.map(({value, label, attributes}) => (
114
154
  <li
115
155
  role="tab"
116
156
  tabIndex={selectedValue === value ? 0 : -1}
117
157
  aria-selected={selectedValue === value}
118
- className={clsx('tabs__item', styles.tabItem, {
119
- 'tabs__item--active': selectedValue === value,
120
- })}
121
158
  key={value}
122
159
  ref={(tabControl) => tabRefs.push(tabControl)}
123
160
  onKeyDown={handleKeydown}
124
161
  onFocus={handleTabChange}
125
- onClick={handleTabChange}>
126
- {label}
162
+ onClick={handleTabChange}
163
+ {...attributes}
164
+ className={clsx(
165
+ 'tabs__item',
166
+ styles.tabItem,
167
+ attributes?.className as string,
168
+ {
169
+ 'tabs__item--active': selectedValue === value,
170
+ },
171
+ )}>
172
+ {label ?? value}
127
173
  </li>
128
174
  ))}
129
175
  </ul>
@@ -149,4 +195,14 @@ function Tabs(props: Props): JSX.Element {
149
195
  );
150
196
  }
151
197
 
152
- export default Tabs;
198
+ export default function Tabs(props: Props): JSX.Element {
199
+ const isBrowser = useIsBrowser();
200
+ return (
201
+ <TabsComponent
202
+ // Remount tabs after hydration
203
+ // Temporary fix for https://github.com/facebook/docusaurus/issues/5653
204
+ key={String(isBrowser)}
205
+ {...props}
206
+ />
207
+ );
208
+ }
@@ -8,16 +8,3 @@
8
8
  .tabItem {
9
9
  margin-top: 0 !important;
10
10
  }
11
-
12
- .tabItemActive {
13
- animation: blink 0.5s ease-in-out 5;
14
- }
15
-
16
- @keyframes blink {
17
- 0% {
18
- background-color: var(--ifm-hover-overlay);
19
- }
20
- 100% {
21
- background-color: rgba(0, 0, 0, 0);
22
- }
23
- }
@@ -0,0 +1,31 @@
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 Link from '@docusaurus/Link';
11
+ import type {Props} from '@theme/Tag';
12
+
13
+ import styles from './styles.module.css';
14
+
15
+ function Tag(props: Props): JSX.Element {
16
+ const {permalink, name, count} = props;
17
+
18
+ return (
19
+ <Link
20
+ href={permalink}
21
+ className={clsx(styles.tag, {
22
+ [styles.tagRegular]: !count,
23
+ [styles.tagWithCount]: count,
24
+ })}>
25
+ {name}
26
+ {count && <span>{count}</span>}
27
+ </Link>
28
+ );
29
+ }
30
+
31
+ export default Tag;
@@ -0,0 +1,70 @@
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
+ :root {
9
+ --docusaurus-tag-list-border: var(--ifm-color-emphasis-300);
10
+ }
11
+
12
+ .tag {
13
+ border: 1px solid var(--docusaurus-tag-list-border);
14
+ transition: border var(--ifm-transition-fast);
15
+ }
16
+
17
+ .tag:hover {
18
+ --docusaurus-tag-list-border: var(--ifm-link-color);
19
+ text-decoration: none;
20
+ }
21
+
22
+ .tagRegular {
23
+ border-radius: 0.5rem;
24
+ padding: 0.3rem 0.5rem;
25
+ font-size: 90%;
26
+ }
27
+
28
+ .tagWithCount {
29
+ display: flex;
30
+ align-items: center;
31
+ position: relative;
32
+ padding: 0 0.5rem 0 1rem;
33
+ border-left: 0;
34
+ }
35
+
36
+ .tagWithCount:before,
37
+ .tagWithCount:after {
38
+ content: '';
39
+ position: absolute;
40
+ top: 50%;
41
+ border: 1px solid var(--docusaurus-tag-list-border);
42
+ transition: inherit;
43
+ }
44
+
45
+ .tagWithCount:before {
46
+ right: 100%;
47
+ transform: translate(50%, -50%) rotate(-45deg);
48
+ width: 1.18rem;
49
+ height: 1.18rem;
50
+ border-right: 0;
51
+ border-bottom: 0;
52
+ }
53
+
54
+ .tagWithCount:after {
55
+ left: 0;
56
+ transform: translateY(-50%);
57
+ width: 0.5rem;
58
+ height: 0.5rem;
59
+ border-radius: 50%;
60
+ }
61
+
62
+ .tagWithCount span {
63
+ background: var(--ifm-color-secondary);
64
+ color: var(--ifm-color-black);
65
+ font-size: 0.7rem;
66
+ line-height: 1.2;
67
+ border-radius: var(--ifm-global-radius);
68
+ padding: 0.1rem 0.4rem;
69
+ margin-left: 0.3rem;
70
+ }
@@ -0,0 +1,45 @@
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 Tag from '@theme/Tag';
10
+ import type {Props} from '@theme/TagsListByLetter';
11
+ import {listTagsByLetters, TagLetterEntry} from '@docusaurus/theme-common';
12
+
13
+ import styles from './styles.module.css';
14
+
15
+ function TagLetterEntryItem({letterEntry}: {letterEntry: TagLetterEntry}) {
16
+ return (
17
+ <article>
18
+ <h2>{letterEntry.letter}</h2>
19
+ <ul className="padding--none">
20
+ {letterEntry.tags.map((tag) => (
21
+ <li key={tag.permalink} className={styles.tag}>
22
+ <Tag {...tag} />
23
+ </li>
24
+ ))}
25
+ </ul>
26
+ <hr />
27
+ </article>
28
+ );
29
+ }
30
+
31
+ function TagsListByLetter({tags}: Props): JSX.Element {
32
+ const letterList = listTagsByLetters(tags);
33
+ return (
34
+ <section className="margin-vert--lg">
35
+ {letterList.map((letterEntry) => (
36
+ <TagLetterEntryItem
37
+ key={letterEntry.letter}
38
+ letterEntry={letterEntry}
39
+ />
40
+ ))}
41
+ </section>
42
+ );
43
+ }
44
+
45
+ export default TagsListByLetter;
@@ -0,0 +1,11 @@
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
+ .tag {
9
+ display: inline-block;
10
+ margin: 0.5rem 0.5rem 0 1rem;
11
+ }
@@ -0,0 +1,35 @@
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 Translate from '@docusaurus/Translate';
11
+ import Tag from '@theme/Tag';
12
+ import type {Props} from '@theme/TagsListInline';
13
+
14
+ import styles from './styles.module.css';
15
+
16
+ export default function TagsListInline({tags}: Props): JSX.Element {
17
+ return (
18
+ <>
19
+ <b>
20
+ <Translate
21
+ id="theme.tags.tagsListLabel"
22
+ description="The label alongside a tag list">
23
+ Tags:
24
+ </Translate>
25
+ </b>
26
+ <ul className={clsx(styles.tags, 'padding--none', 'margin-left--sm')}>
27
+ {tags.map(({label, permalink: tagPermalink}) => (
28
+ <li key={tagPermalink} className={styles.tag}>
29
+ <Tag name={label} permalink={tagPermalink} />
30
+ </li>
31
+ ))}
32
+ </ul>
33
+ </>
34
+ );
35
+ }
@@ -0,0 +1,15 @@
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
+ .tags {
9
+ display: inline;
10
+ }
11
+
12
+ .tag {
13
+ margin: 0 0.4rem 0.5rem 0;
14
+ display: inline-block;
15
+ }
@@ -5,7 +5,7 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import React from 'react';
8
+ import React, {useMemo} from 'react';
9
9
 
10
10
  import useTheme from '@theme/hooks/useTheme';
11
11
  import ThemeContext from '@theme/ThemeContext';
@@ -13,9 +13,13 @@ import type {Props} from '@theme/ThemeProvider';
13
13
 
14
14
  function ThemeProvider(props: Props): JSX.Element {
15
15
  const {isDarkTheme, setLightTheme, setDarkTheme} = useTheme();
16
+ const contextValue = useMemo(
17
+ () => ({isDarkTheme, setLightTheme, setDarkTheme}),
18
+ [isDarkTheme, setLightTheme, setDarkTheme],
19
+ );
16
20
 
17
21
  return (
18
- <ThemeContext.Provider value={{isDarkTheme, setLightTheme, setDarkTheme}}>
22
+ <ThemeContext.Provider value={contextValue}>
19
23
  {props.children}
20
24
  </ThemeContext.Provider>
21
25
  );
@@ -8,14 +8,14 @@
8
8
  import React from 'react';
9
9
  import clsx from 'clsx';
10
10
 
11
- import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
11
+ import useIsBrowser from '@docusaurus/useIsBrowser';
12
12
  import useThemeContext from '@theme/hooks/useThemeContext';
13
13
  import type {Props} from '@theme/ThemedImage';
14
14
 
15
15
  import styles from './styles.module.css';
16
16
 
17
- const ThemedImage = (props: Props): JSX.Element => {
18
- const {isClient} = useDocusaurusContext();
17
+ function ThemedImage(props: Props): JSX.Element {
18
+ const isBrowser = useIsBrowser();
19
19
  const {isDarkTheme} = useThemeContext();
20
20
  const {sources, className, alt = '', ...propsRest} = props;
21
21
 
@@ -23,7 +23,7 @@ const ThemedImage = (props: Props): JSX.Element => {
23
23
 
24
24
  const clientThemes: SourceName[] = isDarkTheme ? ['dark'] : ['light'];
25
25
 
26
- const renderedSourceNames: SourceName[] = isClient
26
+ const renderedSourceNames: SourceName[] = isBrowser
27
27
  ? clientThemes
28
28
  : // We need to render both images on the server to avoid flash
29
29
  // See https://github.com/facebook/docusaurus/pull/3730
@@ -46,6 +46,6 @@ const ThemedImage = (props: Props): JSX.Element => {
46
46
  ))}
47
47
  </>
48
48
  );
49
- };
49
+ }
50
50
 
51
51
  export default ThemedImage;