@docusaurus/theme-classic 2.0.0-beta.8e9b829d9 → 2.0.0-beta.9

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 (275) hide show
  1. package/README.md +1 -1
  2. package/codeTranslations/ar.json +12 -6
  3. package/codeTranslations/base.json +12 -0
  4. package/codeTranslations/bn.json +6 -0
  5. package/codeTranslations/cs.json +62 -0
  6. package/codeTranslations/da.json +6 -0
  7. package/codeTranslations/de.json +8 -2
  8. package/codeTranslations/es.json +10 -4
  9. package/codeTranslations/fa.json +9 -3
  10. package/codeTranslations/fil.json +6 -0
  11. package/codeTranslations/fr.json +6 -0
  12. package/codeTranslations/he.json +6 -0
  13. package/codeTranslations/hi.json +6 -0
  14. package/codeTranslations/ja.json +6 -0
  15. package/codeTranslations/ko.json +6 -0
  16. package/codeTranslations/pl.json +6 -0
  17. package/codeTranslations/pt-BR.json +8 -2
  18. package/codeTranslations/pt-PT.json +6 -0
  19. package/codeTranslations/ru.json +6 -0
  20. package/codeTranslations/sr.json +62 -0
  21. package/codeTranslations/tr.json +9 -3
  22. package/codeTranslations/vi.json +10 -4
  23. package/codeTranslations/zh-Hans.json +6 -0
  24. package/codeTranslations/zh-Hant.json +6 -0
  25. package/lib/__tests__/validateThemeConfig.test.js +154 -4
  26. package/lib/index.js +2 -3
  27. package/lib/prism-include-languages.js +9 -5
  28. package/lib/theme/AnnouncementBar/index.js +8 -12
  29. package/lib/theme/AnnouncementBar/styles.module.css +23 -32
  30. package/lib/theme/BackToTopButton/index.js +27 -13
  31. package/lib/theme/BackToTopButton/styles.module.css +17 -14
  32. package/lib/theme/BlogArchivePage/index.js +89 -0
  33. package/lib/theme/BlogLayout/index.js +2 -6
  34. package/lib/theme/BlogListPage/index.js +1 -1
  35. package/lib/theme/BlogPostAuthor/index.js +51 -0
  36. package/lib/theme/BlogPostAuthor/styles.module.css +12 -0
  37. package/lib/theme/BlogPostAuthors/index.js +47 -0
  38. package/lib/theme/BlogPostAuthors/styles.module.css +11 -0
  39. package/lib/theme/BlogPostItem/index.js +58 -67
  40. package/lib/theme/BlogPostPage/index.js +33 -4
  41. package/lib/theme/BlogSidebar/styles.module.css +2 -2
  42. package/lib/theme/BlogTagsListPage/index.js +3 -28
  43. package/lib/theme/BlogTagsPostsPage/index.js +5 -8
  44. package/lib/theme/CodeBlock/index.js +44 -37
  45. package/lib/theme/CodeBlock/styles.module.css +1 -2
  46. package/lib/theme/DocItem/index.js +15 -40
  47. package/lib/theme/DocItem/styles.module.css +2 -12
  48. package/lib/theme/DocItemFooter/index.js +79 -0
  49. package/lib/theme/DocItemFooter/styles.module.css +18 -0
  50. package/lib/theme/DocPage/index.js +18 -13
  51. package/lib/theme/DocSidebar/index.js +11 -16
  52. package/lib/theme/DocSidebarItem/index.js +12 -10
  53. package/lib/theme/DocTagDocListPage/index.js +89 -0
  54. package/lib/theme/DocTagsListPage/index.js +44 -0
  55. package/lib/theme/DocVersionBanner/index.js +6 -4
  56. package/lib/theme/EditThisPage/index.js +3 -1
  57. package/lib/theme/Footer/index.js +5 -3
  58. package/lib/theme/Heading/index.js +7 -9
  59. package/lib/theme/Heading/styles.css +4 -6
  60. package/lib/theme/Heading/styles.module.css +9 -5
  61. package/lib/theme/IconClose/index.js +31 -0
  62. package/lib/theme/LastUpdated/index.js +4 -2
  63. package/lib/theme/LayoutHead/index.js +13 -11
  64. package/lib/theme/LayoutProviders/index.js +7 -5
  65. package/lib/theme/Logo/index.js +14 -12
  66. package/lib/theme/MDXComponents/index.js +27 -1
  67. package/lib/theme/MDXComponents/styles.css +11 -0
  68. package/lib/theme/MDXPage/index.js +2 -1
  69. package/lib/theme/Navbar/index.js +20 -3
  70. package/lib/theme/Navbar/styles.module.css +5 -1
  71. package/lib/theme/NavbarItem/DefaultNavbarItem.js +12 -4
  72. package/lib/theme/NavbarItem/DocNavbarItem.js +5 -3
  73. package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +7 -1
  74. package/lib/theme/NavbarItem/DropdownNavbarItem.js +3 -3
  75. package/lib/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +3 -4
  76. package/lib/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  77. package/lib/theme/NavbarItem/index.js +5 -0
  78. package/lib/theme/Seo/index.js +10 -7
  79. package/lib/theme/TOC/index.js +9 -30
  80. package/lib/theme/TOC/styles.module.css +1 -1
  81. package/lib/theme/TOCCollapsible/index.js +5 -3
  82. package/lib/theme/TOCInline/index.js +7 -27
  83. package/lib/theme/TOCItems/index.js +78 -0
  84. package/lib/theme/Tabs/__tests__/index.test.js +123 -0
  85. package/lib/theme/Tabs/index.js +73 -50
  86. package/lib/theme/Tabs/styles.module.css +0 -13
  87. package/lib/theme/Tag/index.js +40 -0
  88. package/lib/theme/Tag/styles.module.css +70 -0
  89. package/lib/theme/TagsListByLetter/index.js +48 -0
  90. package/lib/theme/TagsListByLetter/styles.module.css +11 -0
  91. package/lib/theme/TagsListInline/index.js +44 -0
  92. package/lib/theme/TagsListInline/styles.module.css +15 -0
  93. package/lib/theme/ThemedImage/index.js +3 -5
  94. package/lib/theme/Toggle/index.js +23 -18
  95. package/lib/theme/Toggle/styles.module.css +91 -0
  96. package/lib/theme/hooks/useHideableNavbar.js +14 -31
  97. package/lib/theme/hooks/useTheme.js +2 -2
  98. package/lib/theme/hooks/useWindowSize.js +2 -7
  99. package/lib/theme/prism-include-languages.js +4 -3
  100. package/lib/translations.js +4 -4
  101. package/lib/types.d.ts +216 -105
  102. package/lib/validateThemeConfig.js +215 -254
  103. package/lib-next/__tests__/validateThemeConfig.test.js +154 -4
  104. package/lib-next/index.js +1 -2
  105. package/lib-next/prism-include-languages.js +0 -2
  106. package/lib-next/theme/AnnouncementBar/index.js +7 -12
  107. package/lib-next/theme/AnnouncementBar/styles.module.css +23 -32
  108. package/lib-next/theme/BackToTopButton/index.js +37 -17
  109. package/lib-next/theme/BackToTopButton/styles.module.css +17 -14
  110. package/lib-next/theme/BlogArchivePage/index.js +80 -0
  111. package/lib-next/theme/BlogLayout/index.js +4 -7
  112. package/lib-next/theme/BlogListPage/index.js +1 -0
  113. package/lib-next/theme/BlogPostAuthor/index.js +46 -0
  114. package/lib-next/theme/BlogPostAuthor/styles.module.css +12 -0
  115. package/lib-next/theme/BlogPostAuthors/index.js +34 -0
  116. package/lib-next/theme/BlogPostAuthors/styles.module.css +11 -0
  117. package/lib-next/theme/BlogPostItem/index.js +79 -86
  118. package/lib-next/theme/BlogPostPage/index.js +55 -8
  119. package/lib-next/theme/BlogSidebar/styles.module.css +2 -2
  120. package/lib-next/theme/BlogTagsListPage/index.js +7 -39
  121. package/lib-next/theme/BlogTagsPostsPage/index.js +3 -4
  122. package/lib-next/theme/CodeBlock/index.js +53 -49
  123. package/lib-next/theme/CodeBlock/styles.module.css +1 -2
  124. package/lib-next/theme/DocItem/index.js +27 -45
  125. package/lib-next/theme/DocItem/styles.module.css +2 -12
  126. package/lib-next/theme/DocItemFooter/index.js +79 -0
  127. package/lib-next/theme/DocItemFooter/styles.module.css +18 -0
  128. package/lib-next/theme/DocPage/index.js +18 -14
  129. package/lib-next/theme/DocSidebar/index.js +18 -15
  130. package/lib-next/theme/DocSidebarItem/index.js +31 -11
  131. package/lib-next/theme/DocTagDocListPage/index.js +89 -0
  132. package/lib-next/theme/DocTagsListPage/index.js +38 -0
  133. package/lib-next/theme/DocVersionBanner/index.js +16 -9
  134. package/lib-next/theme/EditThisPage/index.js +6 -1
  135. package/lib-next/theme/Footer/index.js +14 -3
  136. package/lib-next/theme/Heading/index.js +10 -13
  137. package/lib-next/theme/Heading/styles.css +4 -6
  138. package/lib-next/theme/Heading/styles.module.css +9 -5
  139. package/lib-next/theme/IconClose/index.js +23 -0
  140. package/lib-next/theme/LastUpdated/index.js +3 -2
  141. package/lib-next/theme/LayoutHead/index.js +9 -15
  142. package/lib-next/theme/LayoutProviders/index.js +8 -5
  143. package/lib-next/theme/Logo/index.js +23 -19
  144. package/lib-next/theme/MDXComponents/index.js +20 -1
  145. package/lib-next/theme/MDXComponents/styles.css +11 -0
  146. package/lib-next/theme/MDXPage/index.js +10 -2
  147. package/lib-next/theme/Navbar/index.js +27 -3
  148. package/lib-next/theme/Navbar/styles.module.css +5 -1
  149. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +15 -4
  150. package/lib-next/theme/NavbarItem/DocNavbarItem.js +5 -3
  151. package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +12 -4
  152. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +4 -6
  153. package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +2 -6
  154. package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  155. package/lib-next/theme/NavbarItem/index.js +2 -0
  156. package/lib-next/theme/Seo/index.js +11 -7
  157. package/lib-next/theme/TOC/index.js +12 -36
  158. package/lib-next/theme/TOC/styles.module.css +1 -1
  159. package/lib-next/theme/TOCCollapsible/index.js +12 -3
  160. package/lib-next/theme/TOCInline/index.js +10 -28
  161. package/lib-next/theme/TOCItems/index.js +85 -0
  162. package/lib-next/theme/Tabs/__tests__/index.test.js +142 -0
  163. package/lib-next/theme/Tabs/index.js +91 -43
  164. package/lib-next/theme/Tabs/styles.module.css +0 -13
  165. package/lib-next/theme/Tag/index.js +27 -0
  166. package/lib-next/theme/Tag/styles.module.css +70 -0
  167. package/lib-next/theme/TagsListByLetter/index.js +42 -0
  168. package/lib-next/theme/TagsListByLetter/styles.module.css +11 -0
  169. package/lib-next/theme/TagsListInline/index.js +31 -0
  170. package/lib-next/theme/TagsListInline/styles.module.css +15 -0
  171. package/lib-next/theme/ThemedImage/index.js +3 -3
  172. package/lib-next/theme/Toggle/index.js +20 -15
  173. package/lib-next/theme/Toggle/styles.module.css +91 -0
  174. package/lib-next/theme/hooks/useHideableNavbar.js +31 -47
  175. package/lib-next/theme/hooks/useTheme.js +2 -2
  176. package/lib-next/theme/hooks/useWindowSize.js +2 -6
  177. package/lib-next/theme/prism-include-languages.js +2 -1
  178. package/lib-next/translations.js +6 -10
  179. package/lib-next/types.d.ts +216 -105
  180. package/lib-next/validateThemeConfig.js +40 -36
  181. package/package.json +23 -19
  182. package/src/__tests__/validateThemeConfig.test.js +154 -4
  183. package/src/index.ts +11 -9
  184. package/src/{prism-include-languages.js → prism-include-languages.ts} +0 -0
  185. package/src/theme/AnnouncementBar/index.tsx +8 -12
  186. package/src/theme/AnnouncementBar/styles.module.css +23 -32
  187. package/src/theme/BackToTopButton/index.tsx +39 -17
  188. package/src/theme/BackToTopButton/styles.module.css +17 -14
  189. package/src/theme/BlogArchivePage/index.tsx +91 -0
  190. package/src/theme/BlogLayout/index.tsx +4 -8
  191. package/src/theme/BlogListPage/index.tsx +1 -0
  192. package/src/theme/BlogPostAuthor/index.tsx +49 -0
  193. package/src/theme/BlogPostAuthor/styles.module.css +12 -0
  194. package/src/theme/BlogPostAuthors/index.tsx +36 -0
  195. package/src/theme/BlogPostAuthors/styles.module.css +11 -0
  196. package/src/theme/BlogPostItem/index.tsx +70 -80
  197. package/src/theme/BlogPostPage/index.tsx +57 -8
  198. package/src/theme/BlogSidebar/styles.module.css +2 -2
  199. package/src/theme/BlogTagsListPage/index.tsx +7 -41
  200. package/src/theme/BlogTagsPostsPage/index.tsx +3 -4
  201. package/src/theme/CodeBlock/index.tsx +63 -47
  202. package/src/theme/CodeBlock/styles.module.css +1 -2
  203. package/src/theme/DocItem/index.tsx +27 -46
  204. package/src/theme/DocItem/styles.module.css +2 -12
  205. package/src/theme/DocItemFooter/index.tsx +91 -0
  206. package/src/theme/DocItemFooter/styles.module.css +18 -0
  207. package/src/theme/DocPage/index.tsx +16 -12
  208. package/src/theme/DocSidebar/index.tsx +20 -16
  209. package/src/theme/DocSidebarItem/index.tsx +29 -10
  210. package/src/theme/DocTagDocListPage/index.tsx +89 -0
  211. package/src/theme/DocTagsListPage/index.tsx +41 -0
  212. package/src/theme/DocVersionBanner/index.tsx +26 -15
  213. package/src/theme/EditThisPage/index.tsx +6 -1
  214. package/src/theme/Footer/index.tsx +16 -3
  215. package/src/theme/Heading/index.tsx +10 -13
  216. package/src/theme/Heading/styles.css +4 -6
  217. package/src/theme/Heading/styles.module.css +9 -5
  218. package/src/theme/IconClose/index.tsx +26 -0
  219. package/src/theme/LastUpdated/index.tsx +3 -2
  220. package/src/theme/LayoutHead/index.tsx +9 -9
  221. package/src/theme/LayoutProviders/index.tsx +8 -5
  222. package/src/theme/Logo/index.tsx +19 -15
  223. package/src/theme/MDXComponents/index.tsx +20 -1
  224. package/src/theme/MDXComponents/styles.css +11 -0
  225. package/src/theme/MDXPage/index.tsx +10 -2
  226. package/src/theme/Navbar/index.tsx +26 -2
  227. package/src/theme/Navbar/styles.module.css +5 -1
  228. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +15 -4
  229. package/src/theme/NavbarItem/DocNavbarItem.tsx +9 -5
  230. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +15 -6
  231. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +7 -3
  232. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +4 -6
  233. package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +6 -5
  234. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
  235. package/src/theme/NavbarItem/index.tsx +6 -1
  236. package/src/theme/Seo/index.tsx +7 -4
  237. package/src/theme/TOC/index.tsx +13 -38
  238. package/src/theme/TOC/styles.module.css +1 -1
  239. package/src/theme/TOCCollapsible/index.tsx +8 -2
  240. package/src/theme/TOCInline/index.tsx +13 -32
  241. package/src/theme/TOCItems/index.tsx +96 -0
  242. package/src/theme/Tabs/__tests__/index.test.tsx +129 -0
  243. package/src/theme/Tabs/index.tsx +93 -49
  244. package/src/theme/Tabs/styles.module.css +0 -13
  245. package/src/theme/Tag/index.tsx +31 -0
  246. package/src/theme/Tag/styles.module.css +70 -0
  247. package/src/theme/TagsListByLetter/index.tsx +45 -0
  248. package/src/theme/TagsListByLetter/styles.module.css +11 -0
  249. package/src/theme/TagsListInline/index.tsx +35 -0
  250. package/src/theme/TagsListInline/styles.module.css +15 -0
  251. package/src/theme/ThemedImage/index.tsx +3 -3
  252. package/src/theme/Toggle/index.tsx +20 -15
  253. package/src/theme/Toggle/styles.module.css +91 -0
  254. package/src/theme/hooks/useContextualSearchFilters.ts +1 -1
  255. package/src/theme/hooks/useHideableNavbar.ts +32 -47
  256. package/src/theme/hooks/useTabGroupChoice.ts +2 -2
  257. package/src/theme/hooks/useTheme.ts +2 -2
  258. package/src/theme/hooks/useWindowSize.ts +2 -7
  259. package/src/theme/prism-include-languages.ts +3 -2
  260. package/src/translations.ts +6 -10
  261. package/src/types.d.ts +216 -105
  262. package/src/{validateThemeConfig.js → validateThemeConfig.ts} +46 -12
  263. package/tsconfig.json +0 -1
  264. package/update-code-translations.js +5 -4
  265. package/update-code-translations.test.js +1 -1
  266. package/update.js +151 -0
  267. package/lib/theme/Toggle/styles.css +0 -103
  268. package/lib/theme/hooks/useScrollPosition.js +0 -51
  269. package/lib/theme/hooks/useTOCHighlight.js +0 -87
  270. package/lib-next/theme/Toggle/styles.css +0 -103
  271. package/lib-next/theme/hooks/useScrollPosition.js +0 -42
  272. package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
  273. package/src/theme/Toggle/styles.css +0 -103
  274. package/src/theme/hooks/useScrollPosition.ts +0 -52
  275. package/src/theme/hooks/useTOCHighlight.ts +0 -98
@@ -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,42 @@
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 Tag from '@theme/Tag';
9
+ import {listTagsByLetters} from '@docusaurus/theme-common';
10
+ import styles from './styles.module.css';
11
+
12
+ function TagLetterEntryItem({letterEntry}) {
13
+ return (
14
+ <article>
15
+ <h2>{letterEntry.letter}</h2>
16
+ <ul className="padding--none">
17
+ {letterEntry.tags.map((tag) => (
18
+ <li key={tag.permalink} className={styles.tag}>
19
+ <Tag {...tag} />
20
+ </li>
21
+ ))}
22
+ </ul>
23
+ <hr />
24
+ </article>
25
+ );
26
+ }
27
+
28
+ function TagsListByLetter({tags}) {
29
+ const letterList = listTagsByLetters(tags);
30
+ return (
31
+ <section className="margin-vert--lg">
32
+ {letterList.map((letterEntry) => (
33
+ <TagLetterEntryItem
34
+ key={letterEntry.letter}
35
+ letterEntry={letterEntry}
36
+ />
37
+ ))}
38
+ </section>
39
+ );
40
+ }
41
+
42
+ 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,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
+ import React from 'react';
8
+ import clsx from 'clsx';
9
+ import Translate from '@docusaurus/Translate';
10
+ import Tag from '@theme/Tag';
11
+ import styles from './styles.module.css';
12
+ export default function TagsListInline({tags}) {
13
+ return (
14
+ <>
15
+ <b>
16
+ <Translate
17
+ id="theme.tags.tagsListLabel"
18
+ description="The label alongside a tag list">
19
+ Tags:
20
+ </Translate>
21
+ </b>
22
+ <ul className={clsx(styles.tags, 'padding--none', 'margin-left--sm')}>
23
+ {tags.map(({label, permalink: tagPermalink}) => (
24
+ <li key={tagPermalink} className={styles.tag}>
25
+ <Tag name={label} permalink={tagPermalink} />
26
+ </li>
27
+ ))}
28
+ </ul>
29
+ </>
30
+ );
31
+ }
@@ -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
+ }
@@ -6,16 +6,16 @@
6
6
  */
7
7
  import React from 'react';
8
8
  import clsx from 'clsx';
9
- import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
9
+ import useIsBrowser from '@docusaurus/useIsBrowser';
10
10
  import useThemeContext from '@theme/hooks/useThemeContext';
11
11
  import styles from './styles.module.css';
12
12
 
13
13
  const ThemedImage = (props) => {
14
- const {isClient} = useDocusaurusContext();
14
+ const isBrowser = useIsBrowser();
15
15
  const {isDarkTheme} = useThemeContext();
16
16
  const {sources, className, alt = '', ...propsRest} = props;
17
17
  const clientThemes = isDarkTheme ? ['dark'] : ['light'];
18
- const renderedSourceNames = isClient
18
+ const renderedSourceNames = isBrowser
19
19
  ? clientThemes // We need to render both images on the server to avoid flash
20
20
  : // See https://github.com/facebook/docusaurus/pull/3730
21
21
  ['light', 'dark'];
@@ -6,19 +6,18 @@
6
6
  */
7
7
  import React, {useState, useRef, memo} from 'react';
8
8
  import {useThemeConfig} from '@docusaurus/theme-common';
9
- import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
9
+ import useIsBrowser from '@docusaurus/useIsBrowser';
10
10
  import clsx from 'clsx';
11
- import './styles.css';
12
11
  import styles from './styles.module.css';
13
12
 
14
13
  const Dark = ({icon, style}) => (
15
- <span className={clsx(styles.toggle, styles.dark)} style={style}>
14
+ <span className={clsx(styles.toggleIcon, styles.dark)} style={style}>
16
15
  {icon}
17
16
  </span>
18
17
  );
19
18
 
20
19
  const Light = ({icon, style}) => (
21
- <span className={clsx(styles.toggle, styles.light)} style={style}>
20
+ <span className={clsx(styles.toggleIcon, styles.light)} style={style}>
22
21
  {icon}
23
22
  </span>
24
23
  ); // Based on react-toggle (https://github.com/aaronshaf/react-toggle/).
@@ -30,31 +29,37 @@ const Toggle = memo(
30
29
  const inputRef = useRef(null);
31
30
  return (
32
31
  <div
33
- className={clsx('react-toggle', className, {
34
- 'react-toggle--checked': checked,
35
- 'react-toggle--focus': focused,
36
- 'react-toggle--disabled': disabled,
32
+ className={clsx(styles.toggle, className, {
33
+ [styles.toggleChecked]: checked,
34
+ [styles.toggleFocused]: focused,
35
+ [styles.toggleDisabled]: disabled,
37
36
  })}>
37
+ {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}
38
38
  <div
39
- className="react-toggle-track"
39
+ className={styles.toggleTrack}
40
40
  role="button"
41
41
  tabIndex={-1}
42
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" />
43
+ <div className={styles.toggleTrackCheck}>{icons.checked}</div>
44
+ <div className={styles.toggleTrackX}>{icons.unchecked}</div>
45
+ <div className={styles.toggleTrackThumb} />
46
46
  </div>
47
47
 
48
48
  <input
49
49
  ref={inputRef}
50
50
  checked={checked}
51
51
  type="checkbox"
52
- className="react-toggle-screenreader-only"
52
+ className={styles.toggleScreenReader}
53
53
  aria-label="Switch between dark and light mode"
54
54
  onChange={onChange}
55
55
  onClick={() => setChecked(!checked)}
56
56
  onFocus={() => setFocused(true)}
57
57
  onBlur={() => setFocused(false)}
58
+ onKeyDown={(e) => {
59
+ if (e.key === 'Enter') {
60
+ inputRef.current?.click();
61
+ }
62
+ }}
58
63
  />
59
64
  </div>
60
65
  );
@@ -66,10 +71,10 @@ export default function (props) {
66
71
  switchConfig: {darkIcon, darkIconStyle, lightIcon, lightIconStyle},
67
72
  },
68
73
  } = useThemeConfig();
69
- const {isClient} = useDocusaurusContext();
74
+ const isBrowser = useIsBrowser();
70
75
  return (
71
76
  <Toggle
72
- disabled={!isClient}
77
+ disabled={!isBrowser}
73
78
  icons={{
74
79
  checked: <Dark icon={darkIcon} style={darkIconStyle} />,
75
80
  unchecked: <Light icon={lightIcon} style={lightIconStyle} />,
@@ -6,6 +6,97 @@
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;
@@ -4,75 +4,59 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
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';
7
+ import {useState, useCallback, useRef} from 'react';
8
+ import {useLocationChange, useScrollPosition} from '@docusaurus/theme-common';
11
9
 
12
10
  const useHideableNavbar = (hideOnScroll) => {
13
- const location = useLocation();
14
11
  const [isNavbarVisible, setIsNavbarVisible] = useState(hideOnScroll);
15
12
  const isFocusedAnchor = useRef(false);
16
- const [navbarHeight, setNavbarHeight] = useState(0);
13
+ const navbarHeight = useRef(0);
17
14
  const navbarRef = useCallback((node) => {
18
15
  if (node !== null) {
19
- setNavbarHeight(node.getBoundingClientRect().height);
16
+ navbarHeight.current = node.getBoundingClientRect().height;
20
17
  }
21
18
  }, []);
22
- useScrollPosition(
23
- (currentPosition, lastPosition) => {
24
- const scrollTop = currentPosition.scrollY;
25
- const lastScrollTop = lastPosition?.scrollY;
26
-
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
- }
19
+ useScrollPosition((currentPosition, lastPosition) => {
20
+ if (!hideOnScroll) {
21
+ return;
22
+ }
41
23
 
42
- if (lastScrollTop && scrollTop === 0) {
43
- setIsNavbarVisible(true);
44
- }
24
+ const scrollTop = currentPosition.scrollY; // It needed for mostly to handle rubber band scrolling
45
25
 
46
- const documentHeight =
47
- document.documentElement.scrollHeight - navbarHeight;
48
- const windowHeight = window.innerHeight;
26
+ if (scrollTop < navbarHeight.current) {
27
+ setIsNavbarVisible(true);
28
+ return;
29
+ }
49
30
 
50
- if (lastScrollTop && scrollTop >= lastScrollTop) {
51
- setIsNavbarVisible(false);
52
- } else if (scrollTop + windowHeight < documentHeight) {
53
- setIsNavbarVisible(true);
54
- }
55
- },
56
- [navbarHeight, isFocusedAnchor],
57
- );
58
- useLocationChange((locationChangeEvent) => {
59
- if (!hideOnScroll || locationChangeEvent.location.hash) {
31
+ if (isFocusedAnchor.current) {
32
+ isFocusedAnchor.current = false;
60
33
  return;
61
34
  }
62
35
 
63
- setIsNavbarVisible(true);
36
+ const lastScrollTop = lastPosition?.scrollY;
37
+ const documentHeight =
38
+ document.documentElement.scrollHeight - navbarHeight.current;
39
+ const windowHeight = window.innerHeight;
40
+
41
+ if (lastScrollTop && scrollTop >= lastScrollTop) {
42
+ setIsNavbarVisible(false);
43
+ } else if (scrollTop + windowHeight < documentHeight) {
44
+ setIsNavbarVisible(true);
45
+ }
64
46
  });
65
- useEffect(() => {
47
+ useLocationChange((locationChangeEvent) => {
66
48
  if (!hideOnScroll) {
67
49
  return;
68
50
  }
69
51
 
70
- if (!location.hash) {
52
+ if (locationChangeEvent.location.hash) {
53
+ isFocusedAnchor.current = true;
54
+ setIsNavbarVisible(false);
71
55
  return;
72
56
  }
73
57
 
74
- isFocusedAnchor.current = true;
75
- }, [location.hash]);
58
+ setIsNavbarVisible(true);
59
+ });
76
60
  return {
77
61
  navbarRef,
78
62
  isNavbarVisible,
@@ -60,7 +60,7 @@ const useTheme = () => {
60
60
  } catch (err) {
61
61
  console.error(err);
62
62
  }
63
- }, [setTheme]);
63
+ }, [disableSwitch, setTheme]);
64
64
  useEffect(() => {
65
65
  if (disableSwitch && !respectPrefersColorScheme) {
66
66
  return;
@@ -71,7 +71,7 @@ const useTheme = () => {
71
71
  .addListener(({matches}) => {
72
72
  setTheme(matches ? themes.dark : themes.light);
73
73
  });
74
- }, []);
74
+ }, [disableSwitch, respectPrefersColorScheme]);
75
75
  return {
76
76
  isDarkTheme: theme === themes.dark,
77
77
  setLightTheme,
@@ -40,16 +40,12 @@ function useWindowSize() {
40
40
  return getWindowSize();
41
41
  });
42
42
  useEffect(() => {
43
- if (!ExecutionEnvironment.canUseDOM) {
44
- return undefined;
45
- }
46
-
47
43
  function updateWindowSize() {
48
44
  setWindowSize(getWindowSize());
49
- } // @ts-expect-error: annoying TS setTimeout typing...
45
+ }
50
46
 
51
47
  const timeout = DevSimulateSSR
52
- ? setTimeout(updateWindowSize, 1000)
48
+ ? window.setTimeout(updateWindowSize, 1000)
53
49
  : undefined;
54
50
  window.addEventListener('resize', updateWindowSize);
55
51
  return () => {
@@ -10,8 +10,9 @@ import siteConfig from '@generated/docusaurus.config';
10
10
  const prismIncludeLanguages = (PrismObject) => {
11
11
  if (ExecutionEnvironment.canUseDOM) {
12
12
  const {
13
- themeConfig: {prism: {additionalLanguages = []} = {}},
13
+ themeConfig: {prism = {}},
14
14
  } = siteConfig;
15
+ const {additionalLanguages = []} = prism;
15
16
  window.Prism = PrismObject;
16
17
  additionalLanguages.forEach((lang) => {
17
18
  require(`prismjs/components/prism-${lang}`); // eslint-disable-line
@@ -4,18 +4,16 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import {keyBy, chain, flatten} from 'lodash';
7
+ import {keyBy, chain} from 'lodash';
8
8
  import {mergeTranslations} from '@docusaurus/utils';
9
9
 
10
10
  function getNavbarTranslationFile(navbar) {
11
11
  // TODO handle properly all the navbar item types here!
12
12
  function flattenNavbarItems(items) {
13
- const subItems = flatten(
14
- items.map((item) => {
15
- const allSubItems = flatten([item.items ?? []]);
16
- return flattenNavbarItems(allSubItems);
17
- }),
18
- );
13
+ const subItems = items.flatMap((item) => {
14
+ const allSubItems = [item.items ?? []].flat();
15
+ return flattenNavbarItems(allSubItems);
16
+ });
19
17
  return [...items, ...subItems];
20
18
  }
21
19
 
@@ -76,9 +74,7 @@ function getFooterTranslationFile(footer) {
76
74
  }))
77
75
  .value();
78
76
  const footerLinkLabels = chain(
79
- flatten(footer.links.map((link) => link.items)).filter(
80
- (link) => !!link.label,
81
- ),
77
+ footer.links.flatMap((link) => link.items).filter((link) => !!link.label),
82
78
  )
83
79
  .keyBy((linkItem) => `link.item.label.${linkItem.label}`)
84
80
  .mapValues((linkItem) => ({