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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (367) hide show
  1. package/README.md +1 -1
  2. package/lib/__tests__/validateThemeConfig.test.js +277 -3
  3. package/lib/admonitions.css +35 -0
  4. package/lib/deps.d.ts +13 -0
  5. package/lib/index.js +41 -16
  6. package/lib/prism-include-languages.js +9 -5
  7. package/lib/theme/AnnouncementBar/index.js +10 -16
  8. package/lib/theme/AnnouncementBar/styles.module.css +25 -30
  9. package/lib/theme/BackToTopButton/index.js +140 -0
  10. package/lib/theme/BackToTopButton/styles.module.css +42 -0
  11. package/lib/theme/BlogArchivePage/index.js +89 -0
  12. package/lib/theme/BlogLayout/index.js +51 -0
  13. package/lib/theme/BlogListPage/index.js +10 -21
  14. package/lib/theme/BlogPostAuthor/index.js +51 -0
  15. package/lib/theme/BlogPostAuthor/styles.module.css +12 -0
  16. package/lib/theme/BlogPostAuthors/index.js +47 -0
  17. package/lib/theme/BlogPostAuthors/styles.module.css +11 -0
  18. package/lib/theme/BlogPostItem/index.js +58 -67
  19. package/lib/theme/BlogPostPage/index.js +37 -24
  20. package/lib/theme/BlogSidebar/index.js +5 -7
  21. package/lib/theme/BlogSidebar/styles.module.css +2 -2
  22. package/lib/theme/BlogTagsListPage/index.js +8 -44
  23. package/lib/theme/BlogTagsPostsPage/index.js +24 -38
  24. package/lib/theme/CodeBlock/index.js +18 -138
  25. package/lib/theme/CodeBlock/styles.module.css +6 -9
  26. package/lib/theme/Details/index.js +30 -0
  27. package/lib/theme/Details/styles.module.css +13 -0
  28. package/lib/theme/DocCard/index.js +84 -0
  29. package/lib/theme/DocCard/styles.module.css +43 -0
  30. package/lib/theme/DocCardList/index.js +28 -0
  31. package/lib/theme/DocCategoryGeneratedIndexPage/index.js +57 -0
  32. package/lib/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  33. package/lib/theme/DocItem/index.js +29 -46
  34. package/lib/theme/DocItem/styles.module.css +5 -9
  35. package/lib/theme/DocItemFooter/index.js +79 -0
  36. package/lib/theme/DocItemFooter/styles.module.css +18 -0
  37. package/lib/theme/DocPage/index.js +35 -52
  38. package/lib/theme/DocPage/styles.module.css +8 -23
  39. package/lib/theme/DocPaginator/index.js +6 -7
  40. package/lib/theme/DocSidebar/index.js +53 -235
  41. package/lib/theme/DocSidebar/styles.module.css +0 -18
  42. package/lib/theme/DocSidebarItem/index.js +209 -0
  43. package/lib/theme/DocSidebarItem/styles.module.css +19 -0
  44. package/lib/theme/DocTagDocListPage/index.js +89 -0
  45. package/lib/theme/DocTagsListPage/index.js +44 -0
  46. package/lib/theme/DocVersionBadge/index.js +34 -0
  47. package/lib/theme/{DocVersionSuggestions → DocVersionBanner}/index.js +39 -20
  48. package/lib/theme/EditThisPage/index.js +3 -1
  49. package/lib/theme/ErrorPageContent.js +43 -0
  50. package/lib/theme/Footer/index.js +16 -5
  51. package/lib/theme/Heading/index.js +17 -22
  52. package/lib/theme/Heading/styles.css +5 -6
  53. package/lib/theme/Heading/styles.module.css +9 -5
  54. package/lib/theme/IconArrow/index.js +2 -2
  55. package/lib/theme/IconClose/index.js +31 -0
  56. package/lib/theme/IconEdit/index.js +3 -3
  57. package/lib/theme/IconExternalLink/index.js +3 -3
  58. package/lib/theme/IconLanguage/index.js +3 -3
  59. package/lib/theme/IconMenu/index.js +3 -3
  60. package/lib/theme/LastUpdated/index.js +4 -2
  61. package/lib/theme/Layout/index.js +5 -1
  62. package/lib/theme/LayoutHead/index.js +22 -17
  63. package/lib/theme/LayoutProviders/index.js +11 -5
  64. package/lib/theme/Logo/index.js +16 -14
  65. package/lib/theme/MDXComponents/index.js +45 -4
  66. package/lib/theme/MDXComponents/styles.css +11 -0
  67. package/lib/theme/MDXPage/index.js +2 -1
  68. package/lib/theme/Navbar/index.js +162 -42
  69. package/lib/theme/Navbar/styles.module.css +10 -3
  70. package/lib/theme/NavbarItem/DefaultNavbarItem.js +27 -123
  71. package/lib/theme/NavbarItem/DocNavbarItem.js +7 -8
  72. package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +19 -12
  73. package/lib/theme/NavbarItem/DropdownNavbarItem.js +155 -0
  74. package/lib/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +6 -10
  75. package/lib/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  76. package/lib/theme/NavbarItem/index.js +31 -11
  77. package/lib/theme/{SearchMetadatas → SearchMetadata}/index.js +2 -2
  78. package/lib/theme/Seo/index.js +10 -7
  79. package/lib/theme/SkipToContent/index.js +12 -4
  80. package/lib/theme/SkipToContent/styles.module.css +1 -0
  81. package/lib/theme/TOC/index.js +9 -29
  82. package/lib/theme/TOC/styles.module.css +1 -1
  83. package/lib/theme/TOCCollapsible/index.js +53 -0
  84. package/lib/theme/TOCCollapsible/styles.module.css +50 -0
  85. package/lib/theme/TOCInline/index.js +7 -27
  86. package/lib/theme/TOCItems/index.js +78 -0
  87. package/lib/theme/Tabs/__tests__/index.test.js +123 -0
  88. package/lib/theme/Tabs/index.js +73 -50
  89. package/lib/theme/Tabs/styles.module.css +0 -13
  90. package/lib/theme/Tag/index.js +40 -0
  91. package/lib/theme/Tag/styles.module.css +70 -0
  92. package/lib/theme/TagsListByLetter/index.js +48 -0
  93. package/lib/theme/TagsListByLetter/styles.module.css +11 -0
  94. package/lib/theme/TagsListInline/index.js +44 -0
  95. package/lib/theme/TagsListInline/styles.module.css +15 -0
  96. package/lib/theme/ThemeProvider/index.js +8 -3
  97. package/lib/theme/ThemedImage/index.js +6 -7
  98. package/lib/theme/Toggle/index.js +41 -44
  99. package/lib/theme/Toggle/styles.module.css +91 -3
  100. package/lib/theme/UserPreferencesProvider/index.js +9 -12
  101. package/lib/theme/hooks/useHideableNavbar.js +14 -32
  102. package/lib/theme/hooks/useTabGroupChoice.js +2 -4
  103. package/lib/theme/hooks/useTheme.js +3 -5
  104. package/lib/theme/hooks/useWindowSize.js +33 -20
  105. package/lib/theme/prism-include-languages.js +4 -3
  106. package/lib/theme-classic.d.ts +806 -0
  107. package/lib/translations.js +4 -4
  108. package/lib/types.d.ts +0 -599
  109. package/lib/validateThemeConfig.js +230 -246
  110. package/lib-next/__tests__/validateThemeConfig.test.js +277 -3
  111. package/lib-next/admonitions.css +35 -0
  112. package/lib-next/deps.d.ts +13 -0
  113. package/lib-next/index.js +45 -13
  114. package/lib-next/prism-include-languages.js +0 -2
  115. package/lib-next/theme/AnnouncementBar/index.js +9 -18
  116. package/lib-next/theme/AnnouncementBar/styles.module.css +25 -30
  117. package/lib-next/theme/BackToTopButton/index.js +131 -0
  118. package/lib-next/theme/BackToTopButton/styles.module.css +42 -0
  119. package/lib-next/theme/BlogArchivePage/index.js +80 -0
  120. package/lib-next/theme/BlogLayout/index.js +40 -0
  121. package/lib-next/theme/BlogListPage/index.js +17 -25
  122. package/lib-next/theme/BlogPostAuthor/index.js +46 -0
  123. package/lib-next/theme/BlogPostAuthor/styles.module.css +12 -0
  124. package/lib-next/theme/BlogPostAuthors/index.js +34 -0
  125. package/lib-next/theme/BlogPostAuthors/styles.module.css +11 -0
  126. package/lib-next/theme/BlogPostItem/index.js +79 -86
  127. package/lib-next/theme/BlogPostPage/index.js +70 -35
  128. package/lib-next/theme/BlogSidebar/index.js +11 -13
  129. package/lib-next/theme/BlogSidebar/styles.module.css +2 -2
  130. package/lib-next/theme/BlogTagsListPage/index.js +14 -55
  131. package/lib-next/theme/BlogTagsPostsPage/index.js +29 -39
  132. package/lib-next/theme/CodeBlock/index.js +17 -149
  133. package/lib-next/theme/CodeBlock/styles.module.css +6 -9
  134. package/lib-next/theme/Details/index.js +20 -0
  135. package/lib-next/theme/Details/styles.module.css +13 -0
  136. package/lib-next/theme/DocCard/index.js +80 -0
  137. package/lib-next/theme/DocCard/styles.module.css +43 -0
  138. package/lib-next/theme/DocCardList/index.js +19 -0
  139. package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +49 -0
  140. package/lib-next/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  141. package/lib-next/theme/DocItem/index.js +40 -56
  142. package/lib-next/theme/DocItem/styles.module.css +5 -9
  143. package/lib-next/theme/DocItemFooter/index.js +79 -0
  144. package/lib-next/theme/DocItemFooter/styles.module.css +18 -0
  145. package/lib-next/theme/DocPage/index.js +46 -47
  146. package/lib-next/theme/DocPage/styles.module.css +8 -23
  147. package/lib-next/theme/DocPaginator/index.js +7 -11
  148. package/lib-next/theme/DocSidebar/index.js +69 -295
  149. package/lib-next/theme/DocSidebar/styles.module.css +0 -18
  150. package/lib-next/theme/DocSidebarItem/index.js +217 -0
  151. package/lib-next/theme/DocSidebarItem/styles.module.css +19 -0
  152. package/lib-next/theme/DocTagDocListPage/index.js +89 -0
  153. package/lib-next/theme/DocTagsListPage/index.js +38 -0
  154. package/lib-next/theme/DocVersionBadge/index.js +27 -0
  155. package/lib-next/theme/{DocVersionSuggestions → DocVersionBanner}/index.js +51 -36
  156. package/lib-next/theme/EditThisPage/index.js +6 -1
  157. package/lib-next/theme/ErrorPageContent.js +35 -0
  158. package/lib-next/theme/Footer/index.js +27 -5
  159. package/lib-next/theme/Heading/index.js +25 -29
  160. package/lib-next/theme/Heading/styles.css +5 -6
  161. package/lib-next/theme/Heading/styles.module.css +9 -5
  162. package/lib-next/theme/IconArrow/index.js +2 -2
  163. package/lib-next/theme/IconClose/index.js +23 -0
  164. package/lib-next/theme/IconEdit/index.js +2 -2
  165. package/lib-next/theme/IconExternalLink/index.js +2 -2
  166. package/lib-next/theme/IconLanguage/index.js +2 -2
  167. package/lib-next/theme/IconMenu/index.js +2 -2
  168. package/lib-next/theme/LastUpdated/index.js +3 -2
  169. package/lib-next/theme/Layout/index.js +3 -1
  170. package/lib-next/theme/LayoutHead/index.js +18 -23
  171. package/lib-next/theme/LayoutProviders/index.js +17 -6
  172. package/lib-next/theme/Logo/index.js +25 -21
  173. package/lib-next/theme/MDXComponents/index.js +34 -7
  174. package/lib-next/theme/MDXComponents/styles.css +11 -0
  175. package/lib-next/theme/MDXPage/index.js +10 -2
  176. package/lib-next/theme/Navbar/index.js +193 -56
  177. package/lib-next/theme/Navbar/styles.module.css +10 -3
  178. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +45 -147
  179. package/lib-next/theme/NavbarItem/DocNavbarItem.js +7 -7
  180. package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +31 -19
  181. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +159 -0
  182. package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +4 -12
  183. package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  184. package/lib-next/theme/NavbarItem/index.js +25 -12
  185. package/lib-next/theme/{SearchMetadatas → SearchMetadata}/index.js +1 -1
  186. package/lib-next/theme/Seo/index.js +11 -7
  187. package/lib-next/theme/SkipToContent/index.js +7 -8
  188. package/lib-next/theme/SkipToContent/styles.module.css +1 -0
  189. package/lib-next/theme/TOC/index.js +12 -36
  190. package/lib-next/theme/TOC/styles.module.css +1 -1
  191. package/lib-next/theme/TOCCollapsible/index.js +54 -0
  192. package/lib-next/theme/TOCCollapsible/styles.module.css +50 -0
  193. package/lib-next/theme/TOCInline/index.js +10 -28
  194. package/lib-next/theme/TOCItems/index.js +85 -0
  195. package/lib-next/theme/Tabs/__tests__/index.test.js +142 -0
  196. package/lib-next/theme/Tabs/index.js +91 -43
  197. package/lib-next/theme/Tabs/styles.module.css +0 -13
  198. package/lib-next/theme/Tag/index.js +27 -0
  199. package/lib-next/theme/Tag/styles.module.css +70 -0
  200. package/lib-next/theme/TagsListByLetter/index.js +42 -0
  201. package/lib-next/theme/TagsListByLetter/styles.module.css +11 -0
  202. package/lib-next/theme/TagsListInline/index.js +31 -0
  203. package/lib-next/theme/TagsListInline/styles.module.css +15 -0
  204. package/lib-next/theme/ThemeProvider/index.js +10 -7
  205. package/lib-next/theme/ThemedImage/index.js +7 -8
  206. package/lib-next/theme/Toggle/index.js +34 -37
  207. package/lib-next/theme/Toggle/styles.module.css +91 -3
  208. package/lib-next/theme/UserPreferencesProvider/index.js +9 -10
  209. package/lib-next/theme/hooks/useHideableNavbar.js +31 -44
  210. package/lib-next/theme/hooks/useTabGroupChoice.js +2 -4
  211. package/lib-next/theme/hooks/useTheme.js +4 -5
  212. package/lib-next/theme/hooks/useWindowSize.js +34 -20
  213. package/lib-next/theme/prism-include-languages.js +2 -1
  214. package/lib-next/theme-classic.d.ts +806 -0
  215. package/lib-next/translations.js +6 -10
  216. package/lib-next/types.d.ts +0 -599
  217. package/lib-next/validateThemeConfig.js +141 -114
  218. package/package.json +28 -25
  219. package/src/__tests__/validateThemeConfig.test.js +277 -3
  220. package/src/admonitions.css +35 -0
  221. package/src/deps.d.ts +13 -0
  222. package/src/index.ts +55 -22
  223. package/src/{prism-include-languages.js → prism-include-languages.ts} +0 -0
  224. package/src/theme/AnnouncementBar/index.tsx +10 -17
  225. package/src/theme/AnnouncementBar/styles.module.css +25 -30
  226. package/src/theme/BackToTopButton/index.tsx +142 -0
  227. package/src/theme/BackToTopButton/styles.module.css +42 -0
  228. package/src/theme/BlogArchivePage/index.tsx +91 -0
  229. package/src/theme/BlogLayout/index.tsx +44 -0
  230. package/src/theme/BlogListPage/index.tsx +18 -25
  231. package/src/theme/BlogPostAuthor/index.tsx +49 -0
  232. package/src/theme/BlogPostAuthor/styles.module.css +12 -0
  233. package/src/theme/BlogPostAuthors/index.tsx +39 -0
  234. package/src/theme/BlogPostAuthors/styles.module.css +11 -0
  235. package/src/theme/BlogPostItem/index.tsx +70 -80
  236. package/src/theme/BlogPostPage/index.tsx +72 -35
  237. package/src/theme/BlogSidebar/index.tsx +11 -13
  238. package/src/theme/BlogSidebar/styles.module.css +2 -2
  239. package/src/theme/BlogTagsListPage/index.tsx +14 -57
  240. package/src/theme/BlogTagsPostsPage/index.tsx +29 -39
  241. package/src/theme/CodeBlock/index.tsx +21 -151
  242. package/src/theme/CodeBlock/styles.module.css +6 -9
  243. package/src/theme/Details/index.tsx +24 -0
  244. package/src/theme/Details/styles.module.css +13 -0
  245. package/src/theme/DocCard/index.tsx +100 -0
  246. package/src/theme/DocCard/styles.module.css +43 -0
  247. package/src/theme/DocCardList/index.tsx +27 -0
  248. package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +53 -0
  249. package/src/theme/DocCategoryGeneratedIndexPage/styles.module.css +18 -0
  250. package/src/theme/DocItem/index.tsx +43 -56
  251. package/src/theme/DocItem/styles.module.css +5 -9
  252. package/src/theme/DocItemFooter/index.tsx +91 -0
  253. package/src/theme/DocItemFooter/styles.module.css +18 -0
  254. package/src/theme/DocPage/index.tsx +44 -42
  255. package/src/theme/DocPage/styles.module.css +8 -23
  256. package/src/theme/DocPaginator/index.tsx +9 -13
  257. package/src/theme/DocSidebar/index.tsx +80 -307
  258. package/src/theme/DocSidebar/styles.module.css +0 -18
  259. package/src/theme/DocSidebarItem/index.tsx +242 -0
  260. package/src/theme/DocSidebarItem/styles.module.css +19 -0
  261. package/src/theme/DocTagDocListPage/index.tsx +89 -0
  262. package/src/theme/DocTagsListPage/index.tsx +41 -0
  263. package/src/theme/DocVersionBadge/index.tsx +30 -0
  264. package/src/theme/{DocVersionSuggestions → DocVersionBanner}/index.tsx +74 -44
  265. package/src/theme/EditThisPage/index.tsx +6 -1
  266. package/src/theme/ErrorPageContent.tsx +41 -0
  267. package/src/theme/Footer/index.tsx +30 -6
  268. package/src/theme/Heading/index.tsx +25 -31
  269. package/src/theme/Heading/styles.css +5 -6
  270. package/src/theme/Heading/styles.module.css +9 -5
  271. package/src/theme/IconArrow/index.tsx +2 -2
  272. package/src/theme/IconClose/index.tsx +26 -0
  273. package/src/theme/IconEdit/index.tsx +2 -2
  274. package/src/theme/IconExternalLink/index.tsx +2 -5
  275. package/src/theme/IconLanguage/index.tsx +2 -6
  276. package/src/theme/IconMenu/index.tsx +3 -3
  277. package/src/theme/LastUpdated/index.tsx +3 -2
  278. package/src/theme/Layout/index.tsx +3 -1
  279. package/src/theme/LayoutHead/index.tsx +18 -17
  280. package/src/theme/LayoutProviders/index.tsx +17 -6
  281. package/src/theme/Logo/index.tsx +21 -17
  282. package/src/theme/MDXComponents/index.tsx +39 -5
  283. package/src/theme/MDXComponents/styles.css +11 -0
  284. package/src/theme/MDXPage/index.tsx +10 -2
  285. package/src/theme/Navbar/index.tsx +203 -61
  286. package/src/theme/Navbar/styles.module.css +10 -3
  287. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +42 -154
  288. package/src/theme/NavbarItem/DocNavbarItem.tsx +12 -16
  289. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +33 -21
  290. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +7 -3
  291. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +181 -0
  292. package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +8 -9
  293. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  294. package/src/theme/NavbarItem/index.tsx +41 -16
  295. package/src/theme/{SearchMetadatas → SearchMetadata}/index.tsx +2 -2
  296. package/src/theme/Seo/index.tsx +7 -4
  297. package/src/theme/SkipToContent/index.tsx +7 -8
  298. package/src/theme/SkipToContent/styles.module.css +1 -0
  299. package/src/theme/TOC/index.tsx +12 -41
  300. package/src/theme/TOC/styles.module.css +1 -1
  301. package/src/theme/TOCCollapsible/index.tsx +58 -0
  302. package/src/theme/TOCCollapsible/styles.module.css +50 -0
  303. package/src/theme/TOCInline/index.tsx +13 -32
  304. package/src/theme/TOCItems/index.tsx +96 -0
  305. package/src/theme/Tabs/__tests__/index.test.tsx +129 -0
  306. package/src/theme/Tabs/index.tsx +93 -49
  307. package/src/theme/Tabs/styles.module.css +0 -13
  308. package/src/theme/Tag/index.tsx +31 -0
  309. package/src/theme/Tag/styles.module.css +70 -0
  310. package/src/theme/TagsListByLetter/index.tsx +45 -0
  311. package/src/theme/TagsListByLetter/styles.module.css +11 -0
  312. package/src/theme/TagsListInline/index.tsx +35 -0
  313. package/src/theme/TagsListInline/styles.module.css +15 -0
  314. package/src/theme/ThemeProvider/index.tsx +6 -2
  315. package/src/theme/ThemedImage/index.tsx +8 -8
  316. package/src/theme/Toggle/index.tsx +36 -43
  317. package/src/theme/Toggle/styles.module.css +91 -3
  318. package/src/theme/UserPreferencesProvider/index.tsx +9 -11
  319. package/src/theme/hooks/useHideableNavbar.ts +32 -45
  320. package/src/theme/hooks/useTabGroupChoice.ts +4 -4
  321. package/src/theme/hooks/useTheme.ts +4 -5
  322. package/src/theme/hooks/useWindowSize.ts +38 -20
  323. package/src/theme/prism-include-languages.ts +3 -2
  324. package/src/theme-classic.d.ts +806 -0
  325. package/src/translations.ts +8 -10
  326. package/src/types.d.ts +0 -599
  327. package/src/{validateThemeConfig.js → validateThemeConfig.ts} +151 -94
  328. package/tsconfig.json +1 -2
  329. package/codeTranslations/README.md +0 -20
  330. package/codeTranslations/ar.json +0 -57
  331. package/codeTranslations/base.json +0 -112
  332. package/codeTranslations/bn.json +0 -56
  333. package/codeTranslations/da.json +0 -57
  334. package/codeTranslations/de.json +0 -57
  335. package/codeTranslations/es.json +0 -57
  336. package/codeTranslations/fa.json +0 -57
  337. package/codeTranslations/fil.json +0 -57
  338. package/codeTranslations/fr.json +0 -57
  339. package/codeTranslations/he.json +0 -57
  340. package/codeTranslations/hi.json +0 -57
  341. package/codeTranslations/ja.json +0 -57
  342. package/codeTranslations/ko.json +0 -57
  343. package/codeTranslations/pl.json +0 -57
  344. package/codeTranslations/pt-BR.json +0 -57
  345. package/codeTranslations/pt-PT.json +0 -57
  346. package/codeTranslations/ru.json +0 -57
  347. package/codeTranslations/tr.json +0 -57
  348. package/codeTranslations/vi.json +0 -57
  349. package/codeTranslations/zh-Hans.json +0 -57
  350. package/codeTranslations/zh-Hant.json +0 -57
  351. package/lib/theme/Toggle/styles.css +0 -103
  352. package/lib/theme/hooks/useAnnouncementBar.js +0 -63
  353. package/lib/theme/hooks/useContextualSearchFilters.js +0 -47
  354. package/lib/theme/hooks/useScrollPosition.js +0 -49
  355. package/lib/theme/hooks/useTOCHighlight.js +0 -87
  356. package/lib-next/theme/Toggle/styles.css +0 -103
  357. package/lib-next/theme/hooks/useAnnouncementBar.js +0 -49
  358. package/lib-next/theme/hooks/useContextualSearchFilters.js +0 -41
  359. package/lib-next/theme/hooks/useScrollPosition.js +0 -38
  360. package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
  361. package/src/theme/Toggle/styles.css +0 -103
  362. package/src/theme/hooks/useAnnouncementBar.ts +0 -58
  363. package/src/theme/hooks/useContextualSearchFilters.ts +0 -52
  364. package/src/theme/hooks/useScrollPosition.ts +0 -45
  365. package/src/theme/hooks/useTOCHighlight.ts +0 -98
  366. package/update-code-translations.js +0 -239
  367. package/update-code-translations.test.js +0 -33
@@ -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,23 +8,23 @@
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
 
22
22
  type SourceName = keyof Props['sources'];
23
23
 
24
- const renderedSourceNames: SourceName[] = isClient
25
- ? isDarkTheme
26
- ? ['dark']
27
- : ['light']
24
+ const clientThemes: SourceName[] = isDarkTheme ? ['dark'] : ['light'];
25
+
26
+ const renderedSourceNames: SourceName[] = isBrowser
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
30
30
  ['light', 'dark'];
@@ -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;
@@ -5,95 +5,88 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import React, {useState, useRef, memo, CSSProperties} from 'react';
8
+ import React, {useState, useRef, memo} from 'react';
9
9
  import type {Props} from '@theme/Toggle';
10
- import {useThemeConfig} from '@docusaurus/theme-common';
11
- import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
10
+ import {useThemeConfig, ColorModeConfig} from '@docusaurus/theme-common';
11
+ import useIsBrowser from '@docusaurus/useIsBrowser';
12
12
 
13
13
  import clsx from 'clsx';
14
- import './styles.css';
15
14
  import styles from './styles.module.css';
16
15
 
17
- interface IconProps {
18
- icon: string;
19
- style: CSSProperties;
20
- }
21
-
22
- const Dark = ({icon, style}: IconProps): JSX.Element => (
23
- <span className={clsx(styles.toggle, styles.dark)} style={style}>
24
- {icon}
25
- </span>
26
- );
27
- const Light = ({icon, style}: IconProps): JSX.Element => (
28
- <span className={clsx(styles.toggle, styles.light)} style={style}>
29
- {icon}
30
- </span>
31
- );
32
-
33
16
  // Based on react-toggle (https://github.com/aaronshaf/react-toggle/).
34
- const Toggle = memo(
17
+ const ToggleComponent = memo(
35
18
  ({
36
19
  className,
37
- icons,
20
+ switchConfig,
38
21
  checked: defaultChecked,
39
22
  disabled,
40
23
  onChange,
41
24
  }: Props & {
42
- icons: {checked: JSX.Element; unchecked: JSX.Element};
25
+ switchConfig: ColorModeConfig['switchConfig'];
43
26
  disabled: boolean;
44
27
  }): JSX.Element => {
28
+ const {darkIcon, darkIconStyle, lightIcon, lightIconStyle} = switchConfig;
45
29
  const [checked, setChecked] = useState(defaultChecked);
46
30
  const [focused, setFocused] = useState(false);
47
31
  const inputRef = useRef<HTMLInputElement>(null);
48
32
 
49
33
  return (
50
34
  <div
51
- className={clsx('react-toggle', className, {
52
- 'react-toggle--checked': checked,
53
- 'react-toggle--focus': focused,
54
- 'react-toggle--disabled': disabled,
35
+ className={clsx(styles.toggle, className, {
36
+ [styles.toggleChecked]: checked,
37
+ [styles.toggleFocused]: focused,
38
+ [styles.toggleDisabled]: disabled,
55
39
  })}>
40
+ {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}
56
41
  <div
57
- className="react-toggle-track"
42
+ className={styles.toggleTrack}
58
43
  role="button"
59
44
  tabIndex={-1}
60
45
  onClick={() => inputRef.current?.click()}>
61
- <div className="react-toggle-track-check">{icons.checked}</div>
62
- <div className="react-toggle-track-x">{icons.unchecked}</div>
63
- <div className="react-toggle-thumb" />
46
+ <div className={styles.toggleTrackCheck}>
47
+ <span className={styles.toggleIcon} style={darkIconStyle}>
48
+ {darkIcon}
49
+ </span>
50
+ </div>
51
+ <div className={styles.toggleTrackX}>
52
+ <span className={styles.toggleIcon} style={lightIconStyle}>
53
+ {lightIcon}
54
+ </span>
55
+ </div>
56
+ <div className={styles.toggleTrackThumb} />
64
57
  </div>
65
58
 
66
59
  <input
67
60
  ref={inputRef}
68
61
  checked={checked}
69
62
  type="checkbox"
70
- className="react-toggle-screenreader-only"
63
+ className={styles.toggleScreenReader}
71
64
  aria-label="Switch between dark and light mode"
72
65
  onChange={onChange}
73
66
  onClick={() => setChecked(!checked)}
74
67
  onFocus={() => setFocused(true)}
75
68
  onBlur={() => setFocused(false)}
69
+ onKeyDown={(e) => {
70
+ if (e.key === 'Enter') {
71
+ inputRef.current?.click();
72
+ }
73
+ }}
76
74
  />
77
75
  </div>
78
76
  );
79
77
  },
80
78
  );
81
79
 
82
- export default function (props: Props): JSX.Element {
80
+ export default function Toggle(props: Props): JSX.Element {
83
81
  const {
84
- colorMode: {
85
- switchConfig: {darkIcon, darkIconStyle, lightIcon, lightIconStyle},
86
- },
82
+ colorMode: {switchConfig},
87
83
  } = useThemeConfig();
88
- const {isClient} = useDocusaurusContext();
84
+ const isBrowser = useIsBrowser();
89
85
 
90
86
  return (
91
- <Toggle
92
- disabled={!isClient}
93
- icons={{
94
- checked: <Dark icon={darkIcon} style={darkIconStyle} />,
95
- unchecked: <Light icon={lightIcon} style={lightIconStyle} />,
96
- }}
87
+ <ToggleComponent
88
+ switchConfig={switchConfig}
89
+ disabled={!isBrowser}
97
90
  {...props}
98
91
  />
99
92
  );
@@ -6,12 +6,100 @@
6
6
  */
7
7
 
8
8
  .toggle {
9
+ touch-action: pan-x;
10
+ position: relative;
11
+ cursor: pointer;
12
+ user-select: none;
13
+ -webkit-tap-highlight-color: transparent;
14
+ }
15
+
16
+ .toggleScreenReader {
17
+ border: 0;
18
+ clip: rect(0 0 0 0);
19
+ height: 1px;
20
+ margin: -1px;
21
+ overflow: hidden;
22
+ position: absolute;
23
+ width: 1px;
24
+ }
25
+
26
+ .toggleDisabled {
27
+ cursor: not-allowed;
28
+ }
29
+
30
+ .toggleTrack {
31
+ width: 50px;
32
+ height: 24px;
33
+ border-radius: 30px;
34
+ background-color: #4d4d4d;
35
+ transition: all 0.2s ease;
36
+ }
37
+
38
+ .toggleTrackCheck {
39
+ position: absolute;
40
+ width: 14px;
41
+ height: 10px;
42
+ top: 0px;
43
+ bottom: 0px;
44
+ margin: auto 0;
45
+ left: 8px;
46
+ opacity: 0;
47
+ transition: opacity 0.25s ease;
48
+ }
49
+
50
+ [data-theme='dark'] .toggle .toggleTrackCheck,
51
+ .toggleChecked .toggleTrackCheck {
52
+ opacity: 1;
53
+ transition: opacity 0.25s ease;
54
+ }
55
+
56
+ .toggleTrackX {
57
+ position: absolute;
58
+ width: 10px;
59
+ height: 10px;
60
+ top: 0px;
61
+ bottom: 0px;
62
+ margin: auto 0;
63
+ right: 10px;
64
+ opacity: 1;
65
+ transition: opacity 0.25s ease;
66
+ }
67
+
68
+ [data-theme='dark'] .toggle .toggleTrackX,
69
+ .toggleChecked .toggleTrackX {
70
+ opacity: 0;
71
+ }
72
+
73
+ .toggleTrackThumb {
74
+ position: absolute;
75
+ top: 1px;
76
+ left: 1px;
77
+ width: 22px;
78
+ height: 22px;
79
+ border: 1px solid #4d4d4d;
80
+ border-radius: 50%;
81
+ background-color: #fafafa;
82
+ transition: all 0.25s ease;
83
+ }
84
+
85
+ [data-theme='dark'] .toggle .toggleTrackThumb,
86
+ .toggleChecked .toggleTrackThumb {
87
+ left: 27px;
88
+ }
89
+
90
+ .toggleFocused .toggleTrackThumb,
91
+ .toggle:hover .toggleTrackThumb {
92
+ box-shadow: 0px 0px 2px 3px var(--ifm-color-primary);
93
+ }
94
+
95
+ .toggle:active:not(.toggleDisabled) .toggleTrackThumb {
96
+ box-shadow: 0px 0px 5px 5px var(--ifm-color-primary);
97
+ }
98
+
99
+ .toggleIcon {
9
100
  align-items: center;
10
101
  display: flex;
11
102
  height: 10px;
12
103
  justify-content: center;
13
104
  width: 10px;
14
105
  }
15
- .toggle::before {
16
- position: absolute;
17
- }
@@ -5,25 +5,23 @@
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 useTabGroupChoice from '@theme/hooks/useTabGroupChoice';
11
- import useAnnouncementBar from '@theme/hooks/useAnnouncementBar';
12
11
  import UserPreferencesContext from '@theme/UserPreferencesContext';
13
12
  import type {Props} from '@theme/UserPreferencesProvider';
14
13
 
15
14
  function UserPreferencesProvider(props: Props): JSX.Element {
16
15
  const {tabGroupChoices, setTabGroupChoices} = useTabGroupChoice();
17
- const {isAnnouncementBarClosed, closeAnnouncementBar} = useAnnouncementBar();
18
-
16
+ const contextValue = useMemo(
17
+ () => ({
18
+ tabGroupChoices,
19
+ setTabGroupChoices,
20
+ }),
21
+ [tabGroupChoices, setTabGroupChoices],
22
+ );
19
23
  return (
20
- <UserPreferencesContext.Provider
21
- value={{
22
- tabGroupChoices,
23
- setTabGroupChoices,
24
- isAnnouncementBarClosed,
25
- closeAnnouncementBar,
26
- }}>
24
+ <UserPreferencesContext.Provider value={contextValue}>
27
25
  {props.children}
28
26
  </UserPreferencesContext.Provider>
29
27
  );
@@ -5,76 +5,63 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import {useState, useCallback, useEffect, useRef} from 'react';
9
- import {useLocation} from '@docusaurus/router';
10
- import useScrollPosition from '@theme/hooks/useScrollPosition';
11
- import {useChangeRoute} from '@docusaurus/theme-common';
8
+ import {useState, useCallback, useRef} from 'react';
9
+ import {useLocationChange, useScrollPosition} from '@docusaurus/theme-common';
12
10
  import type {useHideableNavbarReturns} from '@theme/hooks/useHideableNavbar';
13
11
 
14
12
  const useHideableNavbar = (hideOnScroll: boolean): useHideableNavbarReturns => {
15
- const location = useLocation();
16
13
  const [isNavbarVisible, setIsNavbarVisible] = useState(hideOnScroll);
17
14
  const isFocusedAnchor = useRef(false);
18
- const [navbarHeight, setNavbarHeight] = useState(0);
15
+ const navbarHeight = useRef(0);
19
16
  const navbarRef = useCallback((node: HTMLElement | null) => {
20
17
  if (node !== null) {
21
- setNavbarHeight(node.getBoundingClientRect().height);
18
+ navbarHeight.current = node.getBoundingClientRect().height;
22
19
  }
23
20
  }, []);
24
21
 
25
- useScrollPosition(
26
- ({scrollY: scrollTop}, {scrollY: lastScrollTop}) => {
27
- if (!hideOnScroll) {
28
- return;
29
- }
30
-
31
- if (scrollTop < navbarHeight) {
32
- setIsNavbarVisible(true);
33
- return;
34
- }
35
-
36
- if (isFocusedAnchor.current) {
37
- isFocusedAnchor.current = false;
38
- setIsNavbarVisible(false);
39
- return;
40
- }
41
-
42
- if (lastScrollTop && scrollTop === 0) {
43
- setIsNavbarVisible(true);
44
- }
22
+ useScrollPosition((currentPosition, lastPosition) => {
23
+ if (!hideOnScroll) {
24
+ return;
25
+ }
45
26
 
46
- const documentHeight =
47
- document.documentElement.scrollHeight - navbarHeight;
48
- const windowHeight = window.innerHeight;
27
+ const scrollTop = currentPosition.scrollY;
49
28
 
50
- if (lastScrollTop && scrollTop >= lastScrollTop) {
51
- setIsNavbarVisible(false);
52
- } else if (scrollTop + windowHeight < documentHeight) {
53
- setIsNavbarVisible(true);
54
- }
55
- },
56
- [navbarHeight, isFocusedAnchor],
57
- );
29
+ // It needed for mostly to handle rubber band scrolling
30
+ if (scrollTop < navbarHeight.current) {
31
+ setIsNavbarVisible(true);
32
+ return;
33
+ }
58
34
 
59
- useChangeRoute(() => {
60
- if (!hideOnScroll) {
35
+ if (isFocusedAnchor.current) {
36
+ isFocusedAnchor.current = false;
61
37
  return;
62
38
  }
63
39
 
64
- setIsNavbarVisible(true);
40
+ const lastScrollTop = lastPosition?.scrollY;
41
+ const documentHeight =
42
+ document.documentElement.scrollHeight - navbarHeight.current;
43
+ const windowHeight = window.innerHeight;
44
+
45
+ if (lastScrollTop && scrollTop >= lastScrollTop) {
46
+ setIsNavbarVisible(false);
47
+ } else if (scrollTop + windowHeight < documentHeight) {
48
+ setIsNavbarVisible(true);
49
+ }
65
50
  });
66
51
 
67
- useEffect(() => {
52
+ useLocationChange((locationChangeEvent) => {
68
53
  if (!hideOnScroll) {
69
54
  return;
70
55
  }
71
56
 
72
- if (!location.hash) {
57
+ if (locationChangeEvent.location.hash) {
58
+ isFocusedAnchor.current = true;
59
+ setIsNavbarVisible(false);
73
60
  return;
74
61
  }
75
62
 
76
- isFocusedAnchor.current = true;
77
- }, [location.hash]);
63
+ setIsNavbarVisible(true);
64
+ });
78
65
 
79
66
  return {
80
67
  navbarRef,
@@ -21,13 +21,13 @@ const useTabGroupChoice = (): useTabGroupChoiceReturns => {
21
21
 
22
22
  useEffect(() => {
23
23
  try {
24
- const localStorageChoices = {};
25
- for (const storageKey of listStorageKeys()) {
24
+ const localStorageChoices: Record<string, string> = {};
25
+ listStorageKeys().forEach((storageKey) => {
26
26
  if (storageKey.startsWith(TAB_CHOICE_PREFIX)) {
27
27
  const groupId = storageKey.substring(TAB_CHOICE_PREFIX.length);
28
- localStorageChoices[groupId] = createStorageSlot(storageKey).get();
28
+ localStorageChoices[groupId] = createStorageSlot(storageKey).get()!;
29
29
  }
30
- }
30
+ });
31
31
  setChoices(localStorageChoices);
32
32
  } catch (err) {
33
33
  console.error(err);
@@ -21,9 +21,8 @@ const themes = {
21
21
  type Themes = typeof themes[keyof typeof themes];
22
22
 
23
23
  // Ensure to always return a valid theme even if input is invalid
24
- const coerceToTheme = (theme?: string | null): Themes => {
25
- return theme === themes.dark ? themes.dark : themes.light;
26
- };
24
+ const coerceToTheme = (theme?: string | null): Themes =>
25
+ theme === themes.dark ? themes.dark : themes.light;
27
26
 
28
27
  const getInitialTheme = (defaultMode: Themes | undefined): Themes => {
29
28
  if (!ExecutionEnvironment.canUseDOM) {
@@ -68,7 +67,7 @@ const useTheme = (): useThemeReturns => {
68
67
  } catch (err) {
69
68
  console.error(err);
70
69
  }
71
- }, [setTheme]);
70
+ }, [disableSwitch, setTheme]);
72
71
 
73
72
  useEffect(() => {
74
73
  if (disableSwitch && !respectPrefersColorScheme) {
@@ -80,7 +79,7 @@ const useTheme = (): useThemeReturns => {
80
79
  .addListener(({matches}) => {
81
80
  setTheme(matches ? themes.dark : themes.light);
82
81
  });
83
- }, []);
82
+ }, [disableSwitch, respectPrefersColorScheme]);
84
83
 
85
84
  return {
86
85
  isDarkTheme: theme === themes.dark,
@@ -10,42 +10,60 @@ import {useEffect, useState} from 'react';
10
10
  import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
11
11
  import type {WindowSize} from '@theme/hooks/useWindowSize';
12
12
 
13
- const desktopThresholdWidth = 996;
14
-
15
13
  const windowSizes = {
16
14
  desktop: 'desktop',
17
15
  mobile: 'mobile',
16
+
17
+ // This "ssr" value is very important to handle hydration FOUC / layout shifts
18
+ // You have to handle server-rendering explicitly on the call-site
19
+ // On the server, you may need to render BOTH the mobile/desktop elements (and hide one of them with mediaquery)
20
+ // We don't return "undefined" on purpose, to make it more explicit
21
+ ssr: 'ssr',
18
22
  } as const;
19
23
 
20
- function useWindowSize(): WindowSize | undefined {
21
- const isClient = ExecutionEnvironment.canUseDOM;
24
+ const DesktopThresholdWidth = 996;
22
25
 
23
- function getSize() {
24
- if (!isClient) {
25
- return undefined;
26
- }
27
- return window.innerWidth > desktopThresholdWidth
28
- ? windowSizes.desktop
29
- : windowSizes.mobile;
26
+ function getWindowSize() {
27
+ if (!ExecutionEnvironment.canUseDOM) {
28
+ return windowSizes.ssr;
30
29
  }
30
+ return window.innerWidth > DesktopThresholdWidth
31
+ ? windowSizes.desktop
32
+ : windowSizes.mobile;
33
+ }
31
34
 
32
- const [windowSize, setWindowSize] = useState(getSize);
35
+ // Simulate the SSR window size in dev, so that potential hydration FOUC/layout shift problems can be seen in dev too!
36
+ const DevSimulateSSR = process.env.NODE_ENV === 'development' && true;
33
37
 
34
- useEffect(() => {
35
- if (!isClient) {
36
- return undefined;
38
+ // This hook returns an enum value on purpose!
39
+ // We don't want it to return the actual width value, for resize perf reasons
40
+ // We only want to re-render once a breakpoint is crossed
41
+ function useWindowSize(): WindowSize {
42
+ const [windowSize, setWindowSize] = useState<WindowSize>(() => {
43
+ if (DevSimulateSSR) {
44
+ return 'ssr';
37
45
  }
46
+ return getWindowSize();
47
+ });
38
48
 
39
- function handleResize() {
40
- setWindowSize(getSize());
49
+ useEffect(() => {
50
+ function updateWindowSize() {
51
+ setWindowSize(getWindowSize());
41
52
  }
42
53
 
43
- window.addEventListener('resize', handleResize);
44
- return () => window.removeEventListener('resize', handleResize);
54
+ const timeout = DevSimulateSSR
55
+ ? window.setTimeout(updateWindowSize, 1000)
56
+ : undefined;
57
+
58
+ window.addEventListener('resize', updateWindowSize);
59
+
60
+ return () => {
61
+ window.removeEventListener('resize', updateWindowSize);
62
+ clearTimeout(timeout);
63
+ };
45
64
  }, []);
46
65
 
47
66
  return windowSize;
48
67
  }
49
68
 
50
- export {windowSizes};
51
69
  export default useWindowSize;
@@ -12,12 +12,13 @@ import type * as PrismNamespace from 'prismjs';
12
12
  const prismIncludeLanguages = (PrismObject: typeof PrismNamespace): void => {
13
13
  if (ExecutionEnvironment.canUseDOM) {
14
14
  const {
15
- themeConfig: {prism: {additionalLanguages = []} = {}},
15
+ themeConfig: {prism = {}},
16
16
  } = siteConfig;
17
+ const {additionalLanguages = []} = prism as {additionalLanguages: string[]};
17
18
 
18
19
  window.Prism = PrismObject;
19
20
 
20
- additionalLanguages.forEach((lang: string) => {
21
+ additionalLanguages.forEach((lang) => {
21
22
  require(`prismjs/components/prism-${lang}`); // eslint-disable-line
22
23
  });
23
24