@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
@@ -1,80 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import React, {useState, useRef, memo} from 'react';
8
- import {useThemeConfig} from '@docusaurus/theme-common';
9
- import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
10
- import clsx from 'clsx';
11
- import './styles.css';
12
- import styles from './styles.module.css';
13
-
14
- const Dark = ({icon, style}) => (
15
- <span className={clsx(styles.toggle, styles.dark)} style={style}>
16
- {icon}
17
- </span>
18
- );
19
-
20
- const Light = ({icon, style}) => (
21
- <span className={clsx(styles.toggle, styles.light)} style={style}>
22
- {icon}
23
- </span>
24
- ); // Based on react-toggle (https://github.com/aaronshaf/react-toggle/).
25
-
26
- const Toggle = memo(
27
- ({className, icons, checked: defaultChecked, disabled, onChange}) => {
28
- const [checked, setChecked] = useState(defaultChecked);
29
- const [focused, setFocused] = useState(false);
30
- const inputRef = useRef(null);
31
- return (
32
- <div
33
- className={clsx('react-toggle', className, {
34
- 'react-toggle--checked': checked,
35
- 'react-toggle--focus': focused,
36
- 'react-toggle--disabled': disabled,
37
- })}>
38
- <div
39
- className="react-toggle-track"
40
- role="button"
41
- tabIndex={-1}
42
- onClick={() => inputRef.current?.click()}>
43
- <div className="react-toggle-track-check">{icons.checked}</div>
44
- <div className="react-toggle-track-x">{icons.unchecked}</div>
45
- <div className="react-toggle-thumb" />
46
- </div>
47
-
48
- <input
49
- ref={inputRef}
50
- checked={checked}
51
- type="checkbox"
52
- className="react-toggle-screenreader-only"
53
- aria-label="Switch between dark and light mode"
54
- onChange={onChange}
55
- onClick={() => setChecked(!checked)}
56
- onFocus={() => setFocused(true)}
57
- onBlur={() => setFocused(false)}
58
- />
59
- </div>
60
- );
61
- },
62
- );
63
- export default function (props) {
64
- const {
65
- colorMode: {
66
- switchConfig: {darkIcon, darkIconStyle, lightIcon, lightIconStyle},
67
- },
68
- } = useThemeConfig();
69
- const {isClient} = useDocusaurusContext();
70
- return (
71
- <Toggle
72
- disabled={!isClient}
73
- icons={{
74
- checked: <Dark icon={darkIcon} style={darkIconStyle} />,
75
- unchecked: <Light icon={lightIcon} style={lightIconStyle} />,
76
- }}
77
- {...props}
78
- />
79
- );
80
- }
@@ -1,103 +0,0 @@
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
- /**
9
- * Styles for React Toggle
10
- * copied over because we want to allow user to swizzle it and modify the css
11
- * and also to make sure its compatible with our dark mode
12
- * https://github.com/aaronshaf/react-toggle/blob/master/style.css
13
- */
14
- .react-toggle {
15
- touch-action: pan-x;
16
- position: relative;
17
- cursor: pointer;
18
- user-select: none;
19
- -webkit-tap-highlight-color: transparent;
20
- }
21
-
22
- .react-toggle-screenreader-only {
23
- border: 0;
24
- clip: rect(0 0 0 0);
25
- height: 1px;
26
- margin: -1px;
27
- overflow: hidden;
28
- position: absolute;
29
- width: 1px;
30
- }
31
-
32
- .react-toggle--disabled {
33
- cursor: not-allowed;
34
- }
35
-
36
- .react-toggle-track {
37
- width: 50px;
38
- height: 24px;
39
- border-radius: 30px;
40
- background-color: #4d4d4d;
41
- transition: all 0.2s ease;
42
- }
43
-
44
- .react-toggle-track-check {
45
- position: absolute;
46
- width: 14px;
47
- height: 10px;
48
- top: 0px;
49
- bottom: 0px;
50
- margin: auto 0;
51
- left: 8px;
52
- opacity: 0;
53
- transition: opacity 0.25s ease;
54
- }
55
-
56
- [data-theme='dark'] .react-toggle .react-toggle-track-check,
57
- .react-toggle--checked .react-toggle-track-check {
58
- opacity: 1;
59
- transition: opacity 0.25s ease;
60
- }
61
-
62
- .react-toggle-track-x {
63
- position: absolute;
64
- width: 10px;
65
- height: 10px;
66
- top: 0px;
67
- bottom: 0px;
68
- margin: auto 0;
69
- right: 10px;
70
- opacity: 1;
71
- transition: opacity 0.25s ease;
72
- }
73
-
74
- [data-theme='dark'] .react-toggle .react-toggle-track-x,
75
- .react-toggle--checked .react-toggle-track-x {
76
- opacity: 0;
77
- }
78
-
79
- .react-toggle-thumb {
80
- position: absolute;
81
- top: 1px;
82
- left: 1px;
83
- width: 22px;
84
- height: 22px;
85
- border: 1px solid #4d4d4d;
86
- border-radius: 50%;
87
- background-color: #fafafa;
88
- transition: all 0.25s ease;
89
- }
90
-
91
- [data-theme='dark'] .react-toggle .react-toggle-thumb,
92
- .react-toggle--checked .react-toggle-thumb {
93
- left: 27px;
94
- }
95
-
96
- .react-toggle--focus .react-toggle-thumb,
97
- .react-toggle:hover .react-toggle-thumb {
98
- box-shadow: 0px 0px 2px 3px var(--ifm-color-primary);
99
- }
100
-
101
- .react-toggle:active:not(.react-toggle--disabled) .react-toggle-thumb {
102
- box-shadow: 0px 0px 5px 5px var(--ifm-color-primary);
103
- }
@@ -1,24 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import React from 'react';
8
- import useTabGroupChoice from '@theme/hooks/useTabGroupChoice';
9
- import UserPreferencesContext from '@theme/UserPreferencesContext';
10
-
11
- function UserPreferencesProvider(props) {
12
- const {tabGroupChoices, setTabGroupChoices} = useTabGroupChoice();
13
- return (
14
- <UserPreferencesContext.Provider
15
- value={{
16
- tabGroupChoices,
17
- setTabGroupChoices,
18
- }}>
19
- {props.children}
20
- </UserPreferencesContext.Provider>
21
- );
22
- }
23
-
24
- export default UserPreferencesProvider;
@@ -1,41 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import {useAllDocsData, useActivePluginAndVersion} from '@theme/hooks/useDocs';
8
- import {
9
- useDocsPreferredVersionByPluginId,
10
- DEFAULT_SEARCH_TAG,
11
- docVersionSearchTag,
12
- } from '@docusaurus/theme-common';
13
- import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
14
- // We may want to support multiple search engines, don't couple that to Algolia/DocSearch
15
- // Maybe users will want to use its own search engine solution
16
- export default function useContextualSearchFilters() {
17
- const {i18n} = useDocusaurusContext();
18
- const allDocsData = useAllDocsData();
19
- const activePluginAndVersion = useActivePluginAndVersion();
20
- const docsPreferredVersionByPluginId = useDocsPreferredVersionByPluginId();
21
-
22
- function getDocPluginTags(pluginId) {
23
- const activeVersion =
24
- activePluginAndVersion?.activePlugin?.pluginId === pluginId
25
- ? activePluginAndVersion.activeVersion
26
- : undefined;
27
- const preferredVersion = docsPreferredVersionByPluginId[pluginId];
28
- const latestVersion = allDocsData[pluginId].versions.find((v) => v.isLast);
29
- const version = activeVersion ?? preferredVersion ?? latestVersion;
30
- return docVersionSearchTag(pluginId, version.name);
31
- }
32
-
33
- const tags = [
34
- DEFAULT_SEARCH_TAG,
35
- ...Object.keys(allDocsData).map(getDocPluginTags),
36
- ];
37
- return {
38
- locale: i18n.currentLocale,
39
- tags,
40
- };
41
- }
@@ -1,10 +0,0 @@
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
- // Re-expose useDocs
8
- // Ensure it's always statically available even if user is not using the docs plugin
9
- // Problem reported for the blog-only mode: https://github.com/facebook/docusaurus/issues/3360
10
- export * from '@docusaurus/plugin-content-docs/lib/theme/hooks/useDocs';
@@ -1,79 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import {useState, useCallback, useEffect, useRef} from 'react';
8
- import {useLocation} from '@docusaurus/router';
9
- import useScrollPosition from '@theme/hooks/useScrollPosition';
10
- import {useLocationChange} from '@docusaurus/theme-common';
11
-
12
- const useHideableNavbar = (hideOnScroll) => {
13
- const location = useLocation();
14
- const [isNavbarVisible, setIsNavbarVisible] = useState(hideOnScroll);
15
- const isFocusedAnchor = useRef(false);
16
- const [navbarHeight, setNavbarHeight] = useState(0);
17
- const navbarRef = useCallback((node) => {
18
- if (node !== null) {
19
- setNavbarHeight(node.getBoundingClientRect().height);
20
- }
21
- }, []);
22
- useScrollPosition(
23
- ({scrollY: scrollTop}, {scrollY: lastScrollTop}) => {
24
- if (!hideOnScroll) {
25
- return;
26
- }
27
-
28
- if (scrollTop < navbarHeight) {
29
- setIsNavbarVisible(true);
30
- return;
31
- }
32
-
33
- if (isFocusedAnchor.current) {
34
- isFocusedAnchor.current = false;
35
- setIsNavbarVisible(false);
36
- return;
37
- }
38
-
39
- if (lastScrollTop && scrollTop === 0) {
40
- setIsNavbarVisible(true);
41
- }
42
-
43
- const documentHeight =
44
- document.documentElement.scrollHeight - navbarHeight;
45
- const windowHeight = window.innerHeight;
46
-
47
- if (lastScrollTop && scrollTop >= lastScrollTop) {
48
- setIsNavbarVisible(false);
49
- } else if (scrollTop + windowHeight < documentHeight) {
50
- setIsNavbarVisible(true);
51
- }
52
- },
53
- [navbarHeight, isFocusedAnchor],
54
- );
55
- useLocationChange((locationChangeEvent) => {
56
- if (!hideOnScroll || locationChangeEvent.location.hash) {
57
- return;
58
- }
59
-
60
- setIsNavbarVisible(true);
61
- });
62
- useEffect(() => {
63
- if (!hideOnScroll) {
64
- return;
65
- }
66
-
67
- if (!location.hash) {
68
- return;
69
- }
70
-
71
- isFocusedAnchor.current = true;
72
- }, [location.hash]);
73
- return {
74
- navbarRef,
75
- isNavbarVisible,
76
- };
77
- };
78
-
79
- export default useHideableNavbar;
@@ -1,35 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import {useEffect} from 'react';
8
- import './styles.css'; // This hook detect keyboard focus indicator to not show outline for mouse users
9
- // Inspired by https://hackernoon.com/removing-that-ugly-focus-ring-and-keeping-it-too-6c8727fefcd2
10
-
11
- function useKeyboardNavigation() {
12
- useEffect(() => {
13
- const keyboardFocusedClassName = 'navigation-with-keyboard';
14
-
15
- function handleOutlineStyles(e) {
16
- if (e.type === 'keydown' && e.key === 'Tab') {
17
- document.body.classList.add(keyboardFocusedClassName);
18
- }
19
-
20
- if (e.type === 'mousedown') {
21
- document.body.classList.remove(keyboardFocusedClassName);
22
- }
23
- }
24
-
25
- document.addEventListener('keydown', handleOutlineStyles);
26
- document.addEventListener('mousedown', handleOutlineStyles);
27
- return () => {
28
- document.body.classList.remove(keyboardFocusedClassName);
29
- document.removeEventListener('keydown', handleOutlineStyles);
30
- document.removeEventListener('mousedown', handleOutlineStyles);
31
- };
32
- }, []);
33
- }
34
-
35
- export default useKeyboardNavigation;
@@ -1,20 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import {useState, useEffect} from 'react';
8
-
9
- function useLocationHash(initialHash) {
10
- const [hash, setHash] = useState(initialHash);
11
- useEffect(() => {
12
- const handleHashChange = () => setHash(window.location.hash);
13
-
14
- window.addEventListener('hashchange', handleHashChange);
15
- return () => window.removeEventListener('hashchange', handleHashChange);
16
- }, []);
17
- return [hash, setHash];
18
- }
19
-
20
- export default useLocationHash;
@@ -1,18 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import {useEffect} from 'react';
8
-
9
- function useLockBodyScroll(lock = true) {
10
- useEffect(() => {
11
- document.body.style.overflow = lock ? 'hidden' : 'visible';
12
- return () => {
13
- document.body.style.overflow = 'visible';
14
- };
15
- }, [lock]);
16
- }
17
-
18
- export default useLockBodyScroll;
@@ -1,20 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import defaultTheme from 'prism-react-renderer/themes/palenight';
8
- import useThemeContext from '@theme/hooks/useThemeContext';
9
- import {useThemeConfig} from '@docusaurus/theme-common';
10
-
11
- const usePrismTheme = () => {
12
- const {prism} = useThemeConfig();
13
- const {isDarkTheme} = useThemeContext();
14
- const lightModeTheme = prism.theme || defaultTheme;
15
- const darkModeTheme = prism.darkTheme || lightModeTheme;
16
- const prismTheme = isDarkTheme ? darkModeTheme : lightModeTheme;
17
- return prismTheme;
18
- };
19
-
20
- export default usePrismTheme;
@@ -1,38 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import {useEffect, useRef} from 'react';
8
- import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
9
-
10
- const getScrollPosition = () => ({
11
- scrollX: ExecutionEnvironment.canUseDOM ? window.pageXOffset : 0,
12
- scrollY: ExecutionEnvironment.canUseDOM ? window.pageYOffset : 0,
13
- });
14
-
15
- const useScrollPosition = (effect, deps = []) => {
16
- const scrollPosition = useRef(getScrollPosition());
17
-
18
- const handleScroll = () => {
19
- const currentScrollPosition = getScrollPosition();
20
-
21
- if (effect) {
22
- effect(currentScrollPosition, scrollPosition.current);
23
- }
24
-
25
- scrollPosition.current = currentScrollPosition;
26
- };
27
-
28
- useEffect(() => {
29
- const opts = {
30
- passive: true,
31
- };
32
- handleScroll();
33
- window.addEventListener('scroll', handleScroll, opts);
34
- return () => window.removeEventListener('scroll', handleScroll, opts);
35
- }, deps);
36
- };
37
-
38
- export default useScrollPosition;
@@ -1,84 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import {useEffect, useState} from 'react';
8
-
9
- function useTOCHighlight(linkClassName, linkActiveClassName, topOffset) {
10
- const [lastActiveLink, setLastActiveLink] = useState(undefined);
11
- useEffect(() => {
12
- function setActiveLink() {
13
- function getActiveHeaderAnchor() {
14
- const headersAnchors = Array.from(
15
- document.getElementsByClassName('anchor'),
16
- );
17
- const firstAnchorUnderViewportTop = headersAnchors.find((anchor) => {
18
- const {top} = anchor.getBoundingClientRect();
19
- return top >= topOffset;
20
- });
21
-
22
- if (firstAnchorUnderViewportTop) {
23
- // If first anchor in viewport is under a certain threshold, we consider it's not the active anchor.
24
- // In such case, the active anchor is the previous one (if it exists), that may be above the viewport
25
- if (
26
- firstAnchorUnderViewportTop.getBoundingClientRect().top >= topOffset
27
- ) {
28
- const previousAnchor =
29
- headersAnchors[
30
- headersAnchors.indexOf(firstAnchorUnderViewportTop) - 1
31
- ];
32
- return previousAnchor ?? firstAnchorUnderViewportTop;
33
- } // If the anchor is at the top of the viewport, we consider it's the first anchor
34
- else {
35
- return firstAnchorUnderViewportTop;
36
- }
37
- } // no anchor under viewport top? (ie we are at the bottom of the page)
38
- else {
39
- // highlight the last anchor found
40
- return headersAnchors[headersAnchors.length - 1];
41
- }
42
- }
43
-
44
- const activeHeaderAnchor = getActiveHeaderAnchor();
45
-
46
- if (activeHeaderAnchor) {
47
- let index = 0;
48
- let itemHighlighted = false; // @ts-expect-error: Must be <a> tags.
49
-
50
- const links = document.getElementsByClassName(linkClassName);
51
-
52
- while (index < links.length && !itemHighlighted) {
53
- const link = links[index];
54
- const {href} = link;
55
- const anchorValue = decodeURIComponent(
56
- href.substring(href.indexOf('#') + 1),
57
- );
58
-
59
- if (activeHeaderAnchor.id === anchorValue) {
60
- if (lastActiveLink) {
61
- lastActiveLink.classList.remove(linkActiveClassName);
62
- }
63
-
64
- link.classList.add(linkActiveClassName);
65
- setLastActiveLink(link);
66
- itemHighlighted = true;
67
- }
68
-
69
- index += 1;
70
- }
71
- }
72
- }
73
-
74
- document.addEventListener('scroll', setActiveLink);
75
- document.addEventListener('resize', setActiveLink);
76
- setActiveLink();
77
- return () => {
78
- document.removeEventListener('scroll', setActiveLink);
79
- document.removeEventListener('resize', setActiveLink);
80
- };
81
- });
82
- }
83
-
84
- export default useTOCHighlight;
@@ -1,39 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import {useState, useCallback, useEffect} from 'react';
8
- import {createStorageSlot, listStorageKeys} from '@docusaurus/theme-common';
9
- const TAB_CHOICE_PREFIX = 'docusaurus.tab.';
10
-
11
- const useTabGroupChoice = () => {
12
- const [tabGroupChoices, setChoices] = useState({});
13
- const setChoiceSyncWithLocalStorage = useCallback((groupId, newChoice) => {
14
- createStorageSlot(`${TAB_CHOICE_PREFIX}${groupId}`).set(newChoice);
15
- }, []);
16
- useEffect(() => {
17
- try {
18
- const localStorageChoices = {};
19
- listStorageKeys().forEach((storageKey) => {
20
- if (storageKey.startsWith(TAB_CHOICE_PREFIX)) {
21
- const groupId = storageKey.substring(TAB_CHOICE_PREFIX.length);
22
- localStorageChoices[groupId] = createStorageSlot(storageKey).get();
23
- }
24
- });
25
- setChoices(localStorageChoices);
26
- } catch (err) {
27
- console.error(err);
28
- }
29
- }, []);
30
- return {
31
- tabGroupChoices,
32
- setTabGroupChoices: (groupId, newChoice) => {
33
- setChoices((oldChoices) => ({...oldChoices, [groupId]: newChoice}));
34
- setChoiceSyncWithLocalStorage(groupId, newChoice);
35
- },
36
- };
37
- };
38
-
39
- export default useTabGroupChoice;
@@ -1,82 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import {useState, useCallback, useEffect} from 'react';
8
- import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
9
- import {useThemeConfig, createStorageSlot} from '@docusaurus/theme-common';
10
- const ThemeStorage = createStorageSlot('theme');
11
- const themes = {
12
- light: 'light',
13
- dark: 'dark',
14
- };
15
-
16
- // Ensure to always return a valid theme even if input is invalid
17
- const coerceToTheme = (theme) => {
18
- return theme === themes.dark ? themes.dark : themes.light;
19
- };
20
-
21
- const getInitialTheme = (defaultMode) => {
22
- if (!ExecutionEnvironment.canUseDOM) {
23
- return coerceToTheme(defaultMode);
24
- }
25
-
26
- return coerceToTheme(document.documentElement.getAttribute('data-theme'));
27
- };
28
-
29
- const storeTheme = (newTheme) => {
30
- createStorageSlot('theme').set(coerceToTheme(newTheme));
31
- };
32
-
33
- const useTheme = () => {
34
- const {
35
- colorMode: {defaultMode, disableSwitch, respectPrefersColorScheme},
36
- } = useThemeConfig();
37
- const [theme, setTheme] = useState(getInitialTheme(defaultMode));
38
- const setLightTheme = useCallback(() => {
39
- setTheme(themes.light);
40
- storeTheme(themes.light);
41
- }, []);
42
- const setDarkTheme = useCallback(() => {
43
- setTheme(themes.dark);
44
- storeTheme(themes.dark);
45
- }, []);
46
- useEffect(() => {
47
- document.documentElement.setAttribute('data-theme', coerceToTheme(theme));
48
- }, [theme]);
49
- useEffect(() => {
50
- if (disableSwitch) {
51
- return;
52
- }
53
-
54
- try {
55
- const storedTheme = ThemeStorage.get();
56
-
57
- if (storedTheme !== null) {
58
- setTheme(coerceToTheme(storedTheme));
59
- }
60
- } catch (err) {
61
- console.error(err);
62
- }
63
- }, [setTheme]);
64
- useEffect(() => {
65
- if (disableSwitch && !respectPrefersColorScheme) {
66
- return;
67
- }
68
-
69
- window
70
- .matchMedia('(prefers-color-scheme: dark)')
71
- .addListener(({matches}) => {
72
- setTheme(matches ? themes.dark : themes.light);
73
- });
74
- }, []);
75
- return {
76
- isDarkTheme: theme === themes.dark,
77
- setLightTheme,
78
- setDarkTheme,
79
- };
80
- };
81
-
82
- export default useTheme;