@docusaurus/theme-classic 2.0.0-beta.13 → 2.0.0-beta.15

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 (299) hide show
  1. package/README.md +1 -1
  2. package/lib/index.js +7 -16
  3. package/lib/theme-classic.d.ts +111 -188
  4. package/lib/translations.js +13 -4
  5. package/lib/validateThemeConfig.js +18 -4
  6. package/lib-next/theme/Admonition/index.js +101 -0
  7. package/lib-next/theme/BackToTopButton/styles.module.css +1 -1
  8. package/lib-next/theme/BlogListPaginator/index.js +12 -12
  9. package/lib-next/theme/BlogPostAuthor/index.js +1 -1
  10. package/lib-next/theme/BlogPostAuthors/index.js +12 -2
  11. package/lib-next/theme/BlogPostAuthors/styles.module.css +10 -0
  12. package/lib-next/theme/BlogPostItem/index.js +12 -15
  13. package/lib-next/theme/BlogPostPage/index.js +10 -7
  14. package/lib-next/theme/BlogPostPaginator/index.js +11 -15
  15. package/lib-next/theme/BlogSidebar/styles.module.css +2 -0
  16. package/lib-next/theme/CodeBlock/index.js +51 -10
  17. package/lib-next/theme/CodeBlock/styles.module.css +18 -7
  18. package/lib-next/theme/DocCard/styles.module.css +3 -3
  19. package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +6 -3
  20. package/lib-next/theme/DocItem/index.js +9 -6
  21. package/lib-next/theme/DocItem/styles.module.css +2 -2
  22. package/lib-next/theme/DocPage/index.js +7 -3
  23. package/lib-next/theme/DocPage/styles.module.css +1 -0
  24. package/lib-next/theme/DocPaginator/index.js +11 -13
  25. package/lib-next/theme/DocSidebar/index.js +2 -2
  26. package/lib-next/theme/DocSidebar/styles.module.css +1 -0
  27. package/lib-next/theme/DocSidebarItem/index.js +43 -21
  28. package/lib-next/theme/DocSidebarItem/styles.module.css +1 -0
  29. package/lib-next/theme/DocSidebarItems/index.js +28 -0
  30. package/{lib/theme/DocSidebarItem → lib-next/theme/DocSidebarItems}/styles.module.css +1 -0
  31. package/lib-next/theme/DocVersionBanner/index.js +4 -1
  32. package/lib-next/theme/Footer/index.js +73 -35
  33. package/lib-next/theme/Footer/styles.module.css +2 -1
  34. package/lib-next/theme/Heading/index.js +39 -43
  35. package/lib-next/theme/Heading/styles.css +1 -1
  36. package/lib-next/theme/Layout/index.js +1 -2
  37. package/lib-next/theme/LayoutHead/index.js +5 -9
  38. package/lib-next/theme/LayoutProviders/index.js +6 -6
  39. package/lib-next/theme/MDXComponents/index.js +18 -31
  40. package/lib-next/theme/MDXComponents/styles.css +4 -0
  41. package/lib-next/theme/MDXPage/index.js +3 -10
  42. package/lib-next/theme/Navbar/index.js +6 -6
  43. package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +4 -66
  44. package/lib-next/theme/NavbarItem/DocNavbarItem.js +5 -2
  45. package/lib-next/theme/NavbarItem/DocSidebarNavbarItem.js +73 -0
  46. package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +5 -3
  47. package/lib-next/theme/NavbarItem/DocsVersionNavbarItem.js +4 -1
  48. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +6 -7
  49. package/lib-next/theme/NavbarItem/NavbarNavLink.js +70 -0
  50. package/lib-next/theme/NavbarItem/index.js +1 -2
  51. package/lib-next/theme/{UserPreferencesContext.js → NavbarItem/utils.js} +3 -3
  52. package/lib-next/theme/PaginatorNavLink/index.js +20 -0
  53. package/lib-next/theme/SkipToContent/index.js +1 -1
  54. package/lib-next/theme/SkipToContent/styles.module.css +7 -0
  55. package/lib-next/theme/TOCCollapsible/styles.module.css +2 -2
  56. package/lib-next/theme/Tabs/__tests__/index.test.js +8 -6
  57. package/lib-next/theme/Tabs/index.js +20 -10
  58. package/lib-next/theme/Tag/styles.module.css +4 -4
  59. package/lib-next/theme/ThemedImage/index.js +2 -2
  60. package/lib-next/theme/Toggle/styles.module.css +16 -15
  61. package/lib-next/theme/prism-include-languages.js +10 -3
  62. package/package.json +17 -19
  63. package/src/index.ts +12 -26
  64. package/src/theme/Admonition/index.tsx +106 -0
  65. package/src/theme/BackToTopButton/styles.module.css +1 -1
  66. package/src/theme/BlogListPaginator/index.tsx +12 -12
  67. package/src/theme/BlogPostAuthor/index.tsx +1 -1
  68. package/src/theme/BlogPostAuthors/index.tsx +12 -2
  69. package/src/theme/BlogPostAuthors/styles.module.css +10 -0
  70. package/src/theme/BlogPostItem/index.tsx +13 -15
  71. package/src/theme/BlogPostPage/index.tsx +10 -7
  72. package/src/theme/BlogPostPaginator/index.tsx +11 -15
  73. package/src/theme/BlogSidebar/styles.module.css +2 -0
  74. package/src/theme/CodeBlock/index.tsx +52 -11
  75. package/src/theme/CodeBlock/styles.module.css +18 -7
  76. package/src/theme/DocCard/index.tsx +2 -2
  77. package/src/theme/DocCard/styles.module.css +3 -3
  78. package/src/theme/DocCardList/index.tsx +1 -1
  79. package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +7 -3
  80. package/src/theme/DocItem/index.tsx +9 -6
  81. package/src/theme/DocItem/styles.module.css +2 -2
  82. package/src/theme/DocItemFooter/index.tsx +1 -1
  83. package/src/theme/DocPage/index.tsx +8 -4
  84. package/src/theme/DocPage/styles.module.css +1 -0
  85. package/src/theme/DocPaginator/index.tsx +13 -15
  86. package/src/theme/DocSidebar/index.tsx +3 -3
  87. package/src/theme/DocSidebar/styles.module.css +1 -0
  88. package/src/theme/DocSidebarItem/index.tsx +34 -23
  89. package/src/theme/DocSidebarItem/styles.module.css +1 -0
  90. package/src/theme/DocSidebarItems/index.tsx +32 -0
  91. package/{lib/theme/DocItemFooter → src/theme/DocSidebarItems}/styles.module.css +10 -8
  92. package/src/theme/DocVersionBanner/index.tsx +3 -3
  93. package/src/theme/Footer/index.tsx +84 -38
  94. package/src/theme/Footer/styles.module.css +2 -1
  95. package/src/theme/Heading/index.tsx +39 -47
  96. package/src/theme/Heading/styles.css +1 -1
  97. package/src/theme/Layout/index.tsx +1 -2
  98. package/src/theme/LayoutHead/index.tsx +4 -8
  99. package/src/theme/LayoutProviders/index.tsx +6 -6
  100. package/src/theme/MDXComponents/index.tsx +26 -37
  101. package/src/theme/MDXComponents/styles.css +4 -0
  102. package/src/theme/MDXPage/index.tsx +3 -11
  103. package/src/theme/Navbar/index.tsx +7 -7
  104. package/src/theme/NavbarItem/DefaultNavbarItem.tsx +6 -62
  105. package/src/theme/NavbarItem/DocNavbarItem.tsx +8 -5
  106. package/src/theme/NavbarItem/DocSidebarNavbarItem.tsx +84 -0
  107. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +9 -6
  108. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +2 -2
  109. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +6 -7
  110. package/src/theme/NavbarItem/NavbarNavLink.tsx +68 -0
  111. package/src/theme/NavbarItem/index.tsx +3 -5
  112. package/{lib-next/theme/hooks/styles.css → src/theme/NavbarItem/utils.ts} +3 -3
  113. package/src/theme/PaginatorNavLink/index.tsx +22 -0
  114. package/src/theme/SkipToContent/index.tsx +1 -1
  115. package/src/theme/SkipToContent/styles.module.css +7 -0
  116. package/src/theme/TOCCollapsible/styles.module.css +2 -2
  117. package/src/theme/TOCItems/index.tsx +2 -2
  118. package/src/theme/Tabs/index.tsx +25 -10
  119. package/src/theme/Tag/styles.module.css +4 -4
  120. package/src/theme/TagsListByLetter/index.tsx +1 -1
  121. package/src/theme/ThemedImage/index.tsx +2 -2
  122. package/src/theme/Toggle/index.tsx +1 -1
  123. package/src/theme/Toggle/styles.module.css +16 -15
  124. package/src/theme/prism-include-languages.ts +10 -3
  125. package/src/theme-classic.d.ts +111 -188
  126. package/src/translations.ts +36 -16
  127. package/src/validateThemeConfig.ts +25 -4
  128. package/babel.config.js +0 -35
  129. package/lib/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  130. package/lib/__tests__/translations.test.js +0 -112
  131. package/lib/__tests__/validateThemeConfig.test.js +0 -607
  132. package/lib/theme/AnnouncementBar/index.js +0 -68
  133. package/lib/theme/AnnouncementBar/styles.module.css +0 -63
  134. package/lib/theme/BackToTopButton/index.js +0 -140
  135. package/lib/theme/BackToTopButton/styles.module.css +0 -42
  136. package/lib/theme/BlogArchivePage/index.js +0 -89
  137. package/lib/theme/BlogLayout/index.js +0 -51
  138. package/lib/theme/BlogListPage/index.js +0 -60
  139. package/lib/theme/BlogListPaginator/index.js +0 -63
  140. package/lib/theme/BlogPostAuthor/index.js +0 -51
  141. package/lib/theme/BlogPostAuthor/styles.module.css +0 -12
  142. package/lib/theme/BlogPostAuthors/index.js +0 -47
  143. package/lib/theme/BlogPostAuthors/styles.module.css +0 -11
  144. package/lib/theme/BlogPostItem/index.js +0 -152
  145. package/lib/theme/BlogPostItem/styles.module.css +0 -18
  146. package/lib/theme/BlogPostPage/index.js +0 -82
  147. package/lib/theme/BlogPostPaginator/index.js +0 -64
  148. package/lib/theme/BlogSidebar/index.js +0 -49
  149. package/lib/theme/BlogSidebar/styles.module.css +0 -44
  150. package/lib/theme/BlogTagsListPage/index.js +0 -40
  151. package/lib/theme/BlogTagsPostsPage/index.js +0 -86
  152. package/lib/theme/CodeBlock/index.js +0 -133
  153. package/lib/theme/CodeBlock/styles.module.css +0 -65
  154. package/lib/theme/Details/index.js +0 -30
  155. package/lib/theme/Details/styles.module.css +0 -13
  156. package/lib/theme/DocCard/index.js +0 -84
  157. package/lib/theme/DocCard/styles.module.css +0 -43
  158. package/lib/theme/DocCardList/index.js +0 -28
  159. package/lib/theme/DocCategoryGeneratedIndexPage/index.js +0 -57
  160. package/lib/theme/DocCategoryGeneratedIndexPage/styles.module.css +0 -18
  161. package/lib/theme/DocItem/index.js +0 -112
  162. package/lib/theme/DocItem/styles.module.css +0 -22
  163. package/lib/theme/DocItemFooter/index.js +0 -79
  164. package/lib/theme/DocPage/index.js +0 -154
  165. package/lib/theme/DocPage/styles.module.css +0 -85
  166. package/lib/theme/DocPaginator/index.js +0 -62
  167. package/lib/theme/DocSidebar/index.js +0 -134
  168. package/lib/theme/DocSidebar/styles.module.css +0 -106
  169. package/lib/theme/DocSidebarItem/index.js +0 -209
  170. package/lib/theme/DocTagDocListPage/index.js +0 -89
  171. package/lib/theme/DocTagsListPage/index.js +0 -44
  172. package/lib/theme/DocVersionBadge/index.js +0 -34
  173. package/lib/theme/DocVersionBanner/index.js +0 -130
  174. package/lib/theme/EditThisPage/index.js +0 -33
  175. package/lib/theme/ErrorPageContent.js +0 -43
  176. package/lib/theme/Footer/index.js +0 -119
  177. package/lib/theme/Footer/styles.module.css +0 -15
  178. package/lib/theme/Heading/index.js +0 -71
  179. package/lib/theme/Heading/styles.css +0 -22
  180. package/lib/theme/Heading/styles.module.css +0 -19
  181. package/lib/theme/IconArrow/index.js +0 -28
  182. package/lib/theme/IconClose/index.js +0 -31
  183. package/lib/theme/IconEdit/index.js +0 -34
  184. package/lib/theme/IconEdit/styles.module.css +0 -11
  185. package/lib/theme/IconExternalLink/index.js +0 -30
  186. package/lib/theme/IconExternalLink/styles.module.css +0 -12
  187. package/lib/theme/IconLanguage/index.js +0 -29
  188. package/lib/theme/IconMenu/index.js +0 -30
  189. package/lib/theme/LastUpdated/index.js +0 -63
  190. package/lib/theme/Layout/index.js +0 -68
  191. package/lib/theme/Layout/styles.css +0 -27
  192. package/lib/theme/LayoutHead/index.js +0 -149
  193. package/lib/theme/LayoutProviders/index.js +0 -40
  194. package/lib/theme/Logo/index.js +0 -62
  195. package/lib/theme/MDXComponents/index.js +0 -106
  196. package/lib/theme/MDXComponents/styles.css +0 -11
  197. package/lib/theme/MDXPage/index.js +0 -67
  198. package/lib/theme/MDXPage/styles.module.css +0 -10
  199. package/lib/theme/Navbar/index.js +0 -267
  200. package/lib/theme/Navbar/styles.module.css +0 -27
  201. package/lib/theme/NavbarItem/DefaultNavbarItem.js +0 -113
  202. package/lib/theme/NavbarItem/DocNavbarItem.js +0 -62
  203. package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +0 -83
  204. package/lib/theme/NavbarItem/DocsVersionNavbarItem.js +0 -43
  205. package/lib/theme/NavbarItem/DropdownNavbarItem.js +0 -155
  206. package/lib/theme/NavbarItem/LocaleDropdownNavbarItem/index.js +0 -68
  207. package/lib/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +0 -11
  208. package/lib/theme/NavbarItem/SearchNavbarItem.js +0 -28
  209. package/lib/theme/NavbarItem/index.js +0 -74
  210. package/lib/theme/NotFound.js +0 -57
  211. package/lib/theme/SearchBar.js +0 -15
  212. package/lib/theme/SearchMetadata/index.js +0 -33
  213. package/lib/theme/Seo/index.js +0 -52
  214. package/lib/theme/SkipToContent/index.js +0 -71
  215. package/lib/theme/SkipToContent/styles.module.css +0 -14
  216. package/lib/theme/TOC/index.js +0 -39
  217. package/lib/theme/TOC/styles.module.css +0 -23
  218. package/lib/theme/TOCCollapsible/index.js +0 -53
  219. package/lib/theme/TOCCollapsible/styles.module.css +0 -50
  220. package/lib/theme/TOCInline/index.js +0 -33
  221. package/lib/theme/TOCInline/styles.module.css +0 -12
  222. package/lib/theme/TOCItems/index.js +0 -78
  223. package/lib/theme/TabItem/index.js +0 -32
  224. package/lib/theme/Tabs/__tests__/index.test.js +0 -123
  225. package/lib/theme/Tabs/index.js +0 -173
  226. package/lib/theme/Tabs/styles.module.css +0 -10
  227. package/lib/theme/Tag/index.js +0 -40
  228. package/lib/theme/Tag/styles.module.css +0 -70
  229. package/lib/theme/TagsListByLetter/index.js +0 -48
  230. package/lib/theme/TagsListByLetter/styles.module.css +0 -11
  231. package/lib/theme/TagsListInline/index.js +0 -44
  232. package/lib/theme/TagsListInline/styles.module.css +0 -15
  233. package/lib/theme/ThemeContext.js +0 -21
  234. package/lib/theme/ThemeProvider/index.js +0 -43
  235. package/lib/theme/ThemedImage/index.js +0 -47
  236. package/lib/theme/ThemedImage/styles.module.css +0 -18
  237. package/lib/theme/Toggle/index.js +0 -91
  238. package/lib/theme/Toggle/styles.module.css +0 -105
  239. package/lib/theme/UserPreferencesContext.js +0 -18
  240. package/lib/theme/UserPreferencesProvider/index.js +0 -41
  241. package/lib/theme/hooks/styles.css +0 -10
  242. package/lib/theme/hooks/useDocs.js +0 -18
  243. package/lib/theme/hooks/useHideableNavbar.js +0 -74
  244. package/lib/theme/hooks/useKeyboardNavigation.js +0 -45
  245. package/lib/theme/hooks/useLocationHash.js +0 -28
  246. package/lib/theme/hooks/useLockBodyScroll.js +0 -26
  247. package/lib/theme/hooks/usePrismTheme.js +0 -36
  248. package/lib/theme/hooks/useTabGroupChoice.js +0 -51
  249. package/lib/theme/hooks/useTheme.js +0 -97
  250. package/lib/theme/hooks/useThemeContext.js +0 -31
  251. package/lib/theme/hooks/useUserPreferencesContext.js +0 -31
  252. package/lib/theme/hooks/useWindowSize.js +0 -68
  253. package/lib/theme/prism-include-languages.js +0 -40
  254. package/lib-next/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  255. package/lib-next/__tests__/translations.test.js +0 -128
  256. package/lib-next/__tests__/validateThemeConfig.test.js +0 -607
  257. package/lib-next/admonitions.css +0 -35
  258. package/lib-next/deps.d.ts +0 -13
  259. package/lib-next/index.js +0 -227
  260. package/lib-next/prism-include-languages.js +0 -9
  261. package/lib-next/theme/ThemeContext.js +0 -9
  262. package/lib-next/theme/ThemeProvider/index.js +0 -28
  263. package/lib-next/theme/UserPreferencesProvider/index.js +0 -27
  264. package/lib-next/theme/hooks/useDocs.js +0 -10
  265. package/lib-next/theme/hooks/useHideableNavbar.js +0 -66
  266. package/lib-next/theme/hooks/useKeyboardNavigation.js +0 -35
  267. package/lib-next/theme/hooks/useLocationHash.js +0 -20
  268. package/lib-next/theme/hooks/useLockBodyScroll.js +0 -18
  269. package/lib-next/theme/hooks/usePrismTheme.js +0 -20
  270. package/lib-next/theme/hooks/useTabGroupChoice.js +0 -39
  271. package/lib-next/theme/hooks/useTheme.js +0 -81
  272. package/lib-next/theme/hooks/useThemeContext.js +0 -22
  273. package/lib-next/theme/hooks/useUserPreferencesContext.js +0 -22
  274. package/lib-next/theme/hooks/useWindowSize.js +0 -59
  275. package/lib-next/theme-classic.d.ts +0 -806
  276. package/lib-next/translations.js +0 -141
  277. package/lib-next/types.d.ts +0 -11
  278. package/lib-next/validateThemeConfig.js +0 -344
  279. package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -116
  280. package/src/__tests__/translations.test.ts +0 -116
  281. package/src/__tests__/validateThemeConfig.test.js +0 -607
  282. package/src/theme/Tabs/__tests__/index.test.tsx +0 -129
  283. package/src/theme/ThemeContext.ts +0 -15
  284. package/src/theme/ThemeProvider/index.tsx +0 -28
  285. package/src/theme/UserPreferencesContext.ts +0 -12
  286. package/src/theme/UserPreferencesProvider/index.tsx +0 -30
  287. package/src/theme/hooks/styles.css +0 -10
  288. package/src/theme/hooks/useDocs.ts +0 -11
  289. package/src/theme/hooks/useHideableNavbar.ts +0 -72
  290. package/src/theme/hooks/useKeyboardNavigation.ts +0 -39
  291. package/src/theme/hooks/useLocationHash.ts +0 -25
  292. package/src/theme/hooks/useLockBodyScroll.ts +0 -20
  293. package/src/theme/hooks/usePrismTheme.ts +0 -22
  294. package/src/theme/hooks/useTabGroupChoice.ts +0 -46
  295. package/src/theme/hooks/useTheme.ts +0 -91
  296. package/src/theme/hooks/useThemeContext.ts +0 -23
  297. package/src/theme/hooks/useUserPreferencesContext.ts +0 -25
  298. package/src/theme/hooks/useWindowSize.ts +0 -69
  299. package/tsconfig.json +0 -11
@@ -1,129 +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
- import React from 'react';
9
- import renderer from 'react-test-renderer';
10
- import Tabs from '../index';
11
- import TabItem from '../../TabItem';
12
- import UserPreferencesProvider from '@theme/UserPreferencesProvider';
13
- import {ScrollControllerProvider} from '@docusaurus/theme-common';
14
-
15
- describe('Tabs', () => {
16
- test('Should reject bad Tabs child', () => {
17
- expect(() => {
18
- renderer.create(
19
- <Tabs>
20
- <div>Naughty</div>
21
- <TabItem value="good">Good</TabItem>
22
- </Tabs>,
23
- );
24
- }).toThrowErrorMatchingInlineSnapshot(
25
- `"Docusaurus error: Bad <Tabs> child <div>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique \\"value\\" prop."`,
26
- );
27
- });
28
- test('Should reject bad Tabs defaultValue', () => {
29
- expect(() => {
30
- renderer.create(
31
- <Tabs defaultValue="bad">
32
- <TabItem value="v1">Tab 1</TabItem>
33
- <TabItem value="v2">Tab 2</TabItem>
34
- </Tabs>,
35
- );
36
- }).toThrowErrorMatchingInlineSnapshot(
37
- `"Docusaurus error: The <Tabs> has a defaultValue \\"bad\\" but none of its children has the corresponding value. Available values are: v1, v2. If you intend to show no default tab, use defaultValue={null} instead."`,
38
- );
39
- });
40
- test('Should reject duplicate values', () => {
41
- expect(() => {
42
- renderer.create(
43
- <Tabs>
44
- <TabItem value="v1">Tab 1</TabItem>
45
- <TabItem value="v2">Tab 2</TabItem>
46
- <TabItem value="v3">Tab 3</TabItem>
47
- <TabItem value="v4">Tab 4</TabItem>
48
- <TabItem value="v1">Tab 5</TabItem>
49
- <TabItem value="v2">Tab 6</TabItem>
50
- </Tabs>,
51
- );
52
- }).toThrowErrorMatchingInlineSnapshot(
53
- `"Docusaurus error: Duplicate values \\"v1, v2\\" found in <Tabs>. Every value needs to be unique."`,
54
- );
55
- });
56
- test('Should accept valid Tabs config', () => {
57
- expect(() => {
58
- renderer.create(
59
- <ScrollControllerProvider>
60
- <UserPreferencesProvider>
61
- <Tabs>
62
- <TabItem value="v1">Tab 1</TabItem>
63
- <TabItem value="v2">Tab 2</TabItem>
64
- </Tabs>
65
- <Tabs>
66
- <TabItem value="v1">Tab 1</TabItem>
67
- <TabItem value="v2" default>
68
- Tab 2
69
- </TabItem>
70
- </Tabs>
71
- <Tabs defaultValue="v1">
72
- <TabItem value="v1" label="V1">
73
- Tab 1
74
- </TabItem>
75
- <TabItem value="v2" label="V2">
76
- Tab 2
77
- </TabItem>
78
- </Tabs>
79
- <Tabs
80
- defaultValue="v1"
81
- values={[
82
- {value: 'v1', label: 'V1'},
83
- {value: 'v2', label: 'V2'},
84
- ]}>
85
- <TabItem value="v1">Tab 1</TabItem>
86
- <TabItem value="v2">Tab 2</TabItem>
87
- </Tabs>
88
- <Tabs
89
- defaultValue={null}
90
- values={[
91
- {value: 'v1', label: 'V1'},
92
- {value: 'v2', label: 'V2'},
93
- ]}>
94
- <TabItem value="v1">Tab 1</TabItem>
95
- <TabItem value="v2">Tab 2</TabItem>
96
- </Tabs>
97
- <Tabs defaultValue={null}>
98
- <TabItem value="v1" label="V1">
99
- Tab 1
100
- </TabItem>
101
- <TabItem value="v2" label="V2">
102
- Tab 2
103
- </TabItem>
104
- </Tabs>
105
- </UserPreferencesProvider>
106
- </ScrollControllerProvider>,
107
- );
108
- }).not.toThrow(); // TODO Better Jest infrastructure to mock the Layout
109
- });
110
- // https://github.com/facebook/docusaurus/issues/5729
111
- test('Should accept dynamic Tabs with number values', () => {
112
- expect(() => {
113
- const tabs = ['Apple', 'Banana', 'Carrot'];
114
- renderer.create(
115
- <ScrollControllerProvider>
116
- <UserPreferencesProvider>
117
- <Tabs
118
- values={tabs.map((t, idx) => ({label: t, value: idx}))}
119
- defaultValue={0}>
120
- {tabs.map((t, idx) => (
121
- <TabItem value={idx}>{t}</TabItem>
122
- ))}
123
- </Tabs>
124
- </UserPreferencesProvider>
125
- </ScrollControllerProvider>,
126
- );
127
- }).not.toThrow();
128
- });
129
- });
@@ -1,15 +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
- import React from 'react';
9
- import type {ThemeContextProps} from '@theme/hooks/useThemeContext';
10
-
11
- const ThemeContext = React.createContext<ThemeContextProps | undefined>(
12
- undefined,
13
- );
14
-
15
- export default ThemeContext;
@@ -1,28 +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
- import React, {useMemo} from 'react';
9
-
10
- import useTheme from '@theme/hooks/useTheme';
11
- import ThemeContext from '@theme/ThemeContext';
12
- import type {Props} from '@theme/ThemeProvider';
13
-
14
- function ThemeProvider(props: Props): JSX.Element {
15
- const {isDarkTheme, setLightTheme, setDarkTheme} = useTheme();
16
- const contextValue = useMemo(
17
- () => ({isDarkTheme, setLightTheme, setDarkTheme}),
18
- [isDarkTheme, setLightTheme, setDarkTheme],
19
- );
20
-
21
- return (
22
- <ThemeContext.Provider value={contextValue}>
23
- {props.children}
24
- </ThemeContext.Provider>
25
- );
26
- }
27
-
28
- export default ThemeProvider;
@@ -1,12 +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
- import {createContext} from 'react';
9
-
10
- const UserPreferencesContext = createContext(undefined);
11
-
12
- export default UserPreferencesContext;
@@ -1,30 +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
- import React, {useMemo} from 'react';
9
-
10
- import useTabGroupChoice from '@theme/hooks/useTabGroupChoice';
11
- import UserPreferencesContext from '@theme/UserPreferencesContext';
12
- import type {Props} from '@theme/UserPreferencesProvider';
13
-
14
- function UserPreferencesProvider(props: Props): JSX.Element {
15
- const {tabGroupChoices, setTabGroupChoices} = useTabGroupChoice();
16
- const contextValue = useMemo(
17
- () => ({
18
- tabGroupChoices,
19
- setTabGroupChoices,
20
- }),
21
- [tabGroupChoices, setTabGroupChoices],
22
- );
23
- return (
24
- <UserPreferencesContext.Provider value={contextValue}>
25
- {props.children}
26
- </UserPreferencesContext.Provider>
27
- );
28
- }
29
-
30
- export default UserPreferencesProvider;
@@ -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
-
8
- body:not(.navigation-with-keyboard) *:not(input):focus {
9
- outline: none;
10
- }
@@ -1,11 +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
- // Re-expose useDocs
9
- // Ensure it's always statically available even if user is not using the docs plugin
10
- // Problem reported for the blog-only mode: https://github.com/facebook/docusaurus/issues/3360
11
- export * from '@docusaurus/plugin-content-docs/lib/theme/hooks/useDocs';
@@ -1,72 +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
- import {useState, useCallback, useRef} from 'react';
9
- import {useLocationChange, useScrollPosition} from '@docusaurus/theme-common';
10
- import type {useHideableNavbarReturns} from '@theme/hooks/useHideableNavbar';
11
-
12
- const useHideableNavbar = (hideOnScroll: boolean): useHideableNavbarReturns => {
13
- const [isNavbarVisible, setIsNavbarVisible] = useState(hideOnScroll);
14
- const isFocusedAnchor = useRef(false);
15
- const navbarHeight = useRef(0);
16
- const navbarRef = useCallback((node: HTMLElement | null) => {
17
- if (node !== null) {
18
- navbarHeight.current = node.getBoundingClientRect().height;
19
- }
20
- }, []);
21
-
22
- useScrollPosition((currentPosition, lastPosition) => {
23
- if (!hideOnScroll) {
24
- return;
25
- }
26
-
27
- const scrollTop = currentPosition.scrollY;
28
-
29
- // It needed for mostly to handle rubber band scrolling
30
- if (scrollTop < navbarHeight.current) {
31
- setIsNavbarVisible(true);
32
- return;
33
- }
34
-
35
- if (isFocusedAnchor.current) {
36
- isFocusedAnchor.current = false;
37
- return;
38
- }
39
-
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
- }
50
- });
51
-
52
- useLocationChange((locationChangeEvent) => {
53
- if (!hideOnScroll) {
54
- return;
55
- }
56
-
57
- if (locationChangeEvent.location.hash) {
58
- isFocusedAnchor.current = true;
59
- setIsNavbarVisible(false);
60
- return;
61
- }
62
-
63
- setIsNavbarVisible(true);
64
- });
65
-
66
- return {
67
- navbarRef,
68
- isNavbarVisible,
69
- };
70
- };
71
-
72
- export default useHideableNavbar;
@@ -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
-
8
- import {useEffect} from 'react';
9
-
10
- import './styles.css';
11
-
12
- // This hook detect keyboard focus indicator to not show outline for mouse users
13
- // Inspired by https://hackernoon.com/removing-that-ugly-focus-ring-and-keeping-it-too-6c8727fefcd2
14
- function useKeyboardNavigation(): void {
15
- useEffect(() => {
16
- const keyboardFocusedClassName = 'navigation-with-keyboard';
17
-
18
- function handleOutlineStyles(e: MouseEvent | KeyboardEvent) {
19
- if (e.type === 'keydown' && (e as KeyboardEvent).key === 'Tab') {
20
- document.body.classList.add(keyboardFocusedClassName);
21
- }
22
-
23
- if (e.type === 'mousedown') {
24
- document.body.classList.remove(keyboardFocusedClassName);
25
- }
26
- }
27
-
28
- document.addEventListener('keydown', handleOutlineStyles);
29
- document.addEventListener('mousedown', handleOutlineStyles);
30
-
31
- return () => {
32
- document.body.classList.remove(keyboardFocusedClassName);
33
- document.removeEventListener('keydown', handleOutlineStyles);
34
- document.removeEventListener('mousedown', handleOutlineStyles);
35
- };
36
- }, []);
37
- }
38
-
39
- export default useKeyboardNavigation;
@@ -1,25 +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
- import {useState, useEffect} from 'react';
9
- import type {useLocationHashReturns} from '@theme/hooks/useLocationHash';
10
-
11
- function useLocationHash(initialHash: string): useLocationHashReturns {
12
- const [hash, setHash] = useState(initialHash);
13
-
14
- useEffect(() => {
15
- const handleHashChange = () => setHash(window.location.hash);
16
-
17
- window.addEventListener('hashchange', handleHashChange);
18
-
19
- return () => window.removeEventListener('hashchange', handleHashChange);
20
- }, []);
21
-
22
- return [hash, setHash];
23
- }
24
-
25
- export default useLocationHash;
@@ -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
-
8
- import {useEffect} from 'react';
9
-
10
- function useLockBodyScroll(lock: boolean = true): void {
11
- useEffect(() => {
12
- document.body.style.overflow = lock ? 'hidden' : 'visible';
13
-
14
- return () => {
15
- document.body.style.overflow = 'visible';
16
- };
17
- }, [lock]);
18
- }
19
-
20
- export default useLockBodyScroll;
@@ -1,22 +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
- import defaultTheme from 'prism-react-renderer/themes/palenight';
9
- import useThemeContext from '@theme/hooks/useThemeContext';
10
- import {useThemeConfig} from '@docusaurus/theme-common';
11
-
12
- const usePrismTheme = (): typeof defaultTheme => {
13
- const {prism} = useThemeConfig();
14
- const {isDarkTheme} = useThemeContext();
15
- const lightModeTheme = prism.theme || defaultTheme;
16
- const darkModeTheme = prism.darkTheme || lightModeTheme;
17
- const prismTheme = isDarkTheme ? darkModeTheme : lightModeTheme;
18
-
19
- return prismTheme;
20
- };
21
-
22
- export default usePrismTheme;
@@ -1,46 +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
- import {useState, useCallback, useEffect} from 'react';
9
- import type {useTabGroupChoiceReturns} from '@theme/hooks/useTabGroupChoice';
10
- import {createStorageSlot, listStorageKeys} from '@docusaurus/theme-common';
11
-
12
- const TAB_CHOICE_PREFIX = 'docusaurus.tab.';
13
-
14
- const useTabGroupChoice = (): useTabGroupChoiceReturns => {
15
- const [tabGroupChoices, setChoices] = useState<{
16
- readonly [groupId: string]: string;
17
- }>({});
18
- const setChoiceSyncWithLocalStorage = useCallback((groupId, newChoice) => {
19
- createStorageSlot(`${TAB_CHOICE_PREFIX}${groupId}`).set(newChoice);
20
- }, []);
21
-
22
- useEffect(() => {
23
- try {
24
- const localStorageChoices: Record<string, string> = {};
25
- listStorageKeys().forEach((storageKey) => {
26
- if (storageKey.startsWith(TAB_CHOICE_PREFIX)) {
27
- const groupId = storageKey.substring(TAB_CHOICE_PREFIX.length);
28
- localStorageChoices[groupId] = createStorageSlot(storageKey).get()!;
29
- }
30
- });
31
- setChoices(localStorageChoices);
32
- } catch (err) {
33
- console.error(err);
34
- }
35
- }, []);
36
-
37
- return {
38
- tabGroupChoices,
39
- setTabGroupChoices: (groupId: string, newChoice: string) => {
40
- setChoices((oldChoices) => ({...oldChoices, [groupId]: newChoice}));
41
- setChoiceSyncWithLocalStorage(groupId, newChoice);
42
- },
43
- };
44
- };
45
-
46
- export default useTabGroupChoice;
@@ -1,91 +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
- import {useState, useCallback, useEffect} from 'react';
9
-
10
- import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
11
- import type {useThemeReturns} from '@theme/hooks/useTheme';
12
- import {useThemeConfig, createStorageSlot} from '@docusaurus/theme-common';
13
-
14
- const ThemeStorage = createStorageSlot('theme');
15
-
16
- const themes = {
17
- light: 'light',
18
- dark: 'dark',
19
- } as const;
20
-
21
- type Themes = typeof themes[keyof typeof themes];
22
-
23
- // Ensure to always return a valid theme even if input is invalid
24
- const coerceToTheme = (theme?: string | null): Themes =>
25
- theme === themes.dark ? themes.dark : themes.light;
26
-
27
- const getInitialTheme = (defaultMode: Themes | undefined): Themes => {
28
- if (!ExecutionEnvironment.canUseDOM) {
29
- return coerceToTheme(defaultMode);
30
- }
31
- return coerceToTheme(document.documentElement.getAttribute('data-theme'));
32
- };
33
-
34
- const storeTheme = (newTheme: Themes) => {
35
- createStorageSlot('theme').set(coerceToTheme(newTheme));
36
- };
37
-
38
- const useTheme = (): useThemeReturns => {
39
- const {
40
- colorMode: {defaultMode, disableSwitch, respectPrefersColorScheme},
41
- } = useThemeConfig();
42
- const [theme, setTheme] = useState(getInitialTheme(defaultMode));
43
-
44
- const setLightTheme = useCallback(() => {
45
- setTheme(themes.light);
46
- storeTheme(themes.light);
47
- }, []);
48
- const setDarkTheme = useCallback(() => {
49
- setTheme(themes.dark);
50
- storeTheme(themes.dark);
51
- }, []);
52
-
53
- useEffect(() => {
54
- document.documentElement.setAttribute('data-theme', coerceToTheme(theme));
55
- }, [theme]);
56
-
57
- useEffect(() => {
58
- if (disableSwitch) {
59
- return;
60
- }
61
-
62
- try {
63
- const storedTheme = ThemeStorage.get();
64
- if (storedTheme !== null) {
65
- setTheme(coerceToTheme(storedTheme));
66
- }
67
- } catch (err) {
68
- console.error(err);
69
- }
70
- }, [disableSwitch, setTheme]);
71
-
72
- useEffect(() => {
73
- if (disableSwitch && !respectPrefersColorScheme) {
74
- return;
75
- }
76
-
77
- window
78
- .matchMedia('(prefers-color-scheme: dark)')
79
- .addListener(({matches}) => {
80
- setTheme(matches ? themes.dark : themes.light);
81
- });
82
- }, [disableSwitch, respectPrefersColorScheme]);
83
-
84
- return {
85
- isDarkTheme: theme === themes.dark,
86
- setLightTheme,
87
- setDarkTheme,
88
- };
89
- };
90
-
91
- export default useTheme;
@@ -1,23 +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
- import {useContext} from 'react';
9
-
10
- import ThemeContext from '@theme/ThemeContext';
11
- import type {ThemeContextProps} from '@theme/hooks/useThemeContext';
12
-
13
- function useThemeContext(): ThemeContextProps {
14
- const context = useContext<ThemeContextProps | undefined>(ThemeContext);
15
- if (context == null) {
16
- throw new Error(
17
- '"useThemeContext" is used outside of "Layout" component. Please see https://docusaurus.io/docs/api/themes/configuration#usethemecontext.',
18
- );
19
- }
20
- return context;
21
- }
22
-
23
- export default useThemeContext;
@@ -1,25 +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
- import {useContext} from 'react';
9
-
10
- import UserPreferencesContext from '@theme/UserPreferencesContext';
11
- import type {UserPreferencesContextProps} from '@theme/hooks/useUserPreferencesContext';
12
-
13
- function useUserPreferencesContext(): UserPreferencesContextProps {
14
- const context = useContext<UserPreferencesContextProps | undefined>(
15
- UserPreferencesContext,
16
- );
17
- if (context == null) {
18
- throw new Error(
19
- '"useUserPreferencesContext" is used outside of "Layout" component.',
20
- );
21
- }
22
- return context;
23
- }
24
-
25
- export default useUserPreferencesContext;
@@ -1,69 +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
- import {useEffect, useState} from 'react';
9
-
10
- import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
11
- import type {WindowSize} from '@theme/hooks/useWindowSize';
12
-
13
- const windowSizes = {
14
- desktop: 'desktop',
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',
22
- } as const;
23
-
24
- const DesktopThresholdWidth = 996;
25
-
26
- function getWindowSize() {
27
- if (!ExecutionEnvironment.canUseDOM) {
28
- return windowSizes.ssr;
29
- }
30
- return window.innerWidth > DesktopThresholdWidth
31
- ? windowSizes.desktop
32
- : windowSizes.mobile;
33
- }
34
-
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;
37
-
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';
45
- }
46
- return getWindowSize();
47
- });
48
-
49
- useEffect(() => {
50
- function updateWindowSize() {
51
- setWindowSize(getWindowSize());
52
- }
53
-
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
- };
64
- }, []);
65
-
66
- return windowSize;
67
- }
68
-
69
- export default useWindowSize;