@docusaurus/theme-classic 2.0.0-beta.18 → 2.0.0-beta.19

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 (204) hide show
  1. package/lib/admonitions.css +4 -0
  2. package/lib/default.css +3038 -0
  3. package/lib/getSwizzleConfig.js +9 -2
  4. package/lib/index.js +4 -4
  5. package/lib/nprogress.css +41 -0
  6. package/lib/nprogress.js +46 -0
  7. package/lib/theme-classic.d.ts +315 -33
  8. package/lib/validateThemeConfig.js +72 -14
  9. package/lib-next/theme/BackToTopButton/index.js +6 -102
  10. package/lib-next/theme/BlogLayout/index.js +1 -5
  11. package/lib-next/theme/BlogListPaginator/index.js +25 -28
  12. package/lib-next/theme/BlogPostAuthor/index.js +3 -6
  13. package/lib-next/theme/BlogPostItem/styles.module.css +9 -0
  14. package/lib-next/theme/BlogPostPaginator/index.js +25 -28
  15. package/lib-next/theme/BlogSidebar/Desktop/index.js +41 -0
  16. package/lib-next/theme/BlogSidebar/{styles.module.css → Desktop/styles.module.css} +1 -2
  17. package/lib-next/theme/BlogSidebar/Mobile/index.js +36 -0
  18. package/lib-next/theme/BlogSidebar/index.js +11 -31
  19. package/lib-next/theme/BlogTagsListPage/index.js +2 -3
  20. package/lib-next/theme/BlogTagsPostsPage/index.js +4 -6
  21. package/lib-next/theme/CodeBlock/Container/index.js +29 -0
  22. package/lib-next/theme/CodeBlock/Container/styles.module.css +14 -0
  23. package/lib-next/theme/CodeBlock/Content/Element.js +23 -0
  24. package/lib-next/theme/CodeBlock/Content/String.js +104 -0
  25. package/{src/theme/CodeBlock → lib-next/theme/CodeBlock/Content}/styles.module.css +39 -9
  26. package/lib-next/theme/CodeBlock/CopyButton/index.js +3 -2
  27. package/lib-next/theme/CodeBlock/CopyButton/styles.module.css +0 -19
  28. package/lib-next/theme/CodeBlock/Line/index.js +49 -0
  29. package/lib-next/theme/CodeBlock/Line/styles.module.css +51 -0
  30. package/lib-next/theme/CodeBlock/WordWrapButton/index.js +40 -0
  31. package/lib-next/theme/CodeBlock/WordWrapButton/styles.module.css +15 -0
  32. package/lib-next/theme/CodeBlock/index.js +27 -133
  33. package/lib-next/theme/Details/index.js +1 -1
  34. package/lib-next/theme/DocBreadcrumbs/index.js +50 -23
  35. package/lib-next/theme/DocBreadcrumbs/styles.module.css +8 -0
  36. package/lib-next/theme/DocCardList/index.js +6 -4
  37. package/lib-next/theme/DocCategoryGeneratedIndexPage/index.js +3 -3
  38. package/lib-next/theme/DocCategoryGeneratedIndexPage/styles.module.css +8 -0
  39. package/lib-next/theme/DocItem/index.js +1 -1
  40. package/lib-next/theme/DocItem/styles.module.css +6 -0
  41. package/lib-next/theme/DocPage/Layout/Main/index.js +29 -0
  42. package/lib-next/theme/DocPage/Layout/Main/styles.module.css +28 -0
  43. package/lib-next/theme/DocPage/Layout/Sidebar/ExpandButton/index.js +34 -0
  44. package/lib-next/theme/DocPage/Layout/Sidebar/ExpandButton/styles.module.css +33 -0
  45. package/lib-next/theme/DocPage/Layout/Sidebar/index.js +68 -0
  46. package/lib-next/theme/DocPage/Layout/Sidebar/index.module.css +32 -0
  47. package/lib-next/theme/DocPage/Layout/index.js +34 -0
  48. package/lib-next/theme/{BlogPostAuthor/styles.module.css → DocPage/Layout/index.module.css} +6 -3
  49. package/lib-next/theme/DocPage/index.js +28 -146
  50. package/lib-next/theme/DocPaginator/index.js +25 -28
  51. package/lib-next/theme/DocSidebar/Desktop/CollapseButton/styles.module.css +11 -9
  52. package/lib-next/theme/DocSidebar/Desktop/Content/styles.module.css +6 -0
  53. package/lib-next/theme/DocSidebar/Desktop/index.js +4 -2
  54. package/lib-next/theme/DocSidebarItem/Category.js +197 -0
  55. package/lib-next/theme/DocSidebarItem/Html.js +27 -0
  56. package/{src/theme/DocSidebarItem/styles.module.css → lib-next/theme/DocSidebarItem/Html.module.css} +0 -4
  57. package/lib-next/theme/DocSidebarItem/Link.js +53 -0
  58. package/{src/theme/MDXComponents/Ul.module.css → lib-next/theme/DocSidebarItem/Link.module.css} +2 -3
  59. package/lib-next/theme/DocSidebarItem/index.js +4 -246
  60. package/lib-next/theme/DocSidebarItems/index.js +1 -6
  61. package/lib-next/theme/DocTagDocListPage/index.js +3 -3
  62. package/lib-next/theme/DocVersionBanner/index.js +2 -2
  63. package/lib-next/theme/Footer/Links/MultiColumn/index.js +1 -1
  64. package/lib-next/theme/Heading/index.js +4 -20
  65. package/lib-next/theme/IconHome/index.js +17 -0
  66. package/lib-next/theme/LastUpdated/index.js +1 -0
  67. package/lib-next/theme/Layout/index.js +1 -1
  68. package/lib-next/theme/MDXComponents/Ul.js +2 -4
  69. package/lib-next/theme/Navbar/Content/index.js +6 -1
  70. package/lib-next/theme/Navbar/Logo/index.js +1 -1
  71. package/lib-next/theme/Navbar/Search/index.js +11 -0
  72. package/lib-next/theme/Navbar/Search/styles.module.css +20 -0
  73. package/lib-next/theme/NavbarItem/ComponentTypes.js +27 -0
  74. package/lib-next/theme/NavbarItem/DocNavbarItem.js +11 -28
  75. package/lib-next/theme/NavbarItem/DocSidebarNavbarItem.js +10 -42
  76. package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +25 -29
  77. package/lib-next/theme/NavbarItem/DocsVersionNavbarItem.js +2 -9
  78. package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +4 -1
  79. package/lib-next/theme/NavbarItem/HtmlNavbarItem.js +30 -0
  80. package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/index.js +5 -10
  81. package/lib-next/theme/NavbarItem/NavbarNavLink.js +49 -31
  82. package/lib-next/theme/NavbarItem/SearchNavbarItem.js +6 -1
  83. package/lib-next/theme/NavbarItem/index.js +4 -23
  84. package/lib-next/theme/NavbarItem/utils.js +2 -1
  85. package/lib-next/theme/PaginatorNavLink/index.js +8 -2
  86. package/lib-next/theme/SiteMetadata/index.js +8 -7
  87. package/lib-next/theme/SkipToContent/index.js +3 -29
  88. package/lib-next/theme/TOCCollapsible/CollapseButton.js +29 -0
  89. package/{src/theme/TOCCollapsible/styles.module.css → lib-next/theme/TOCCollapsible/CollapseButton.module.css} +1 -22
  90. package/lib-next/theme/TOCCollapsible/index.js +3 -13
  91. package/lib-next/theme/TOCCollapsible/index.module.css +31 -0
  92. package/lib-next/theme/TOCItems/Tree.js +40 -0
  93. package/lib-next/theme/TOCItems/index.js +3 -34
  94. package/lib-next/theme/TabItem/index.js +3 -1
  95. package/lib-next/theme/{MDXComponents/Ul.module.css → TabItem/styles.module.css} +2 -3
  96. package/lib-next/theme/Tabs/__tests__/index.test.js +3 -3
  97. package/lib-next/theme/Tabs/index.js +3 -3
  98. package/lib-next/theme/Tabs/styles.module.css +4 -0
  99. package/lib-next/theme/Tag/index.js +2 -3
  100. package/lib-next/theme/TagsListInline/index.js +1 -1
  101. package/package.json +23 -18
  102. package/src/admonitions.css +4 -0
  103. package/src/getSwizzleConfig.ts +10 -2
  104. package/src/index.ts +4 -3
  105. package/src/nprogress.css +41 -0
  106. package/src/nprogress.ts +31 -0
  107. package/src/theme/BackToTopButton/index.tsx +5 -112
  108. package/src/theme/BlogLayout/index.tsx +1 -5
  109. package/src/theme/BlogListPaginator/index.tsx +25 -28
  110. package/src/theme/BlogPostAuthor/index.tsx +3 -7
  111. package/src/theme/BlogPostItem/styles.module.css +9 -0
  112. package/src/theme/BlogPostPaginator/index.tsx +25 -28
  113. package/src/theme/BlogSidebar/Desktop/index.tsx +45 -0
  114. package/src/theme/BlogSidebar/{styles.module.css → Desktop/styles.module.css} +1 -2
  115. package/src/theme/BlogSidebar/Mobile/index.tsx +38 -0
  116. package/src/theme/BlogSidebar/index.tsx +10 -31
  117. package/src/theme/BlogTagsListPage/index.tsx +2 -3
  118. package/src/theme/BlogTagsPostsPage/index.tsx +8 -5
  119. package/src/theme/CodeBlock/Container/index.tsx +35 -0
  120. package/src/theme/CodeBlock/Container/styles.module.css +14 -0
  121. package/src/theme/CodeBlock/Content/Element.tsx +30 -0
  122. package/src/theme/CodeBlock/Content/String.tsx +111 -0
  123. package/{lib-next/theme/CodeBlock → src/theme/CodeBlock/Content}/styles.module.css +39 -9
  124. package/src/theme/CodeBlock/CopyButton/index.tsx +3 -2
  125. package/src/theme/CodeBlock/CopyButton/styles.module.css +0 -19
  126. package/src/theme/CodeBlock/Line/index.tsx +48 -0
  127. package/src/theme/CodeBlock/Line/styles.module.css +51 -0
  128. package/src/theme/CodeBlock/WordWrapButton/index.tsx +49 -0
  129. package/src/theme/CodeBlock/WordWrapButton/styles.module.css +15 -0
  130. package/src/theme/CodeBlock/index.tsx +29 -133
  131. package/src/theme/Details/index.tsx +1 -1
  132. package/src/theme/DocBreadcrumbs/index.tsx +50 -20
  133. package/src/theme/DocBreadcrumbs/styles.module.css +8 -0
  134. package/src/theme/DocCardList/index.tsx +5 -7
  135. package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +3 -3
  136. package/src/theme/DocCategoryGeneratedIndexPage/styles.module.css +8 -0
  137. package/src/theme/DocItem/index.tsx +1 -1
  138. package/src/theme/DocItem/styles.module.css +6 -0
  139. package/src/theme/DocPage/Layout/Main/index.tsx +37 -0
  140. package/src/theme/DocPage/Layout/Main/styles.module.css +28 -0
  141. package/src/theme/DocPage/Layout/Sidebar/ExpandButton/index.tsx +40 -0
  142. package/src/theme/DocPage/Layout/Sidebar/ExpandButton/styles.module.css +33 -0
  143. package/src/theme/DocPage/Layout/Sidebar/index.module.css +32 -0
  144. package/src/theme/DocPage/Layout/Sidebar/index.tsx +74 -0
  145. package/src/theme/{BlogPostAuthor/styles.module.css → DocPage/Layout/index.module.css} +6 -3
  146. package/src/theme/DocPage/Layout/index.tsx +39 -0
  147. package/src/theme/DocPage/index.tsx +28 -157
  148. package/src/theme/DocPaginator/index.tsx +25 -28
  149. package/src/theme/DocSidebar/Desktop/CollapseButton/styles.module.css +11 -9
  150. package/src/theme/DocSidebar/Desktop/Content/styles.module.css +6 -0
  151. package/src/theme/DocSidebar/Desktop/index.tsx +4 -2
  152. package/src/theme/DocSidebarItem/Category.tsx +210 -0
  153. package/{lib-next/theme/DocSidebarItem/styles.module.css → src/theme/DocSidebarItem/Html.module.css} +0 -4
  154. package/src/theme/DocSidebarItem/Html.tsx +34 -0
  155. package/src/theme/DocSidebarItem/Link.module.css +10 -0
  156. package/src/theme/DocSidebarItem/Link.tsx +58 -0
  157. package/src/theme/DocSidebarItem/index.tsx +4 -259
  158. package/src/theme/DocSidebarItems/index.tsx +1 -6
  159. package/src/theme/DocTagDocListPage/index.tsx +3 -4
  160. package/src/theme/DocVersionBanner/index.tsx +2 -2
  161. package/src/theme/Footer/Links/MultiColumn/index.tsx +1 -1
  162. package/src/theme/Heading/index.tsx +4 -18
  163. package/src/theme/IconHome/index.tsx +20 -0
  164. package/src/theme/LastUpdated/index.tsx +1 -0
  165. package/src/theme/Layout/index.tsx +1 -1
  166. package/src/theme/MDXComponents/Details.tsx +2 -3
  167. package/src/theme/MDXComponents/Ul.tsx +2 -6
  168. package/src/theme/Navbar/Content/index.tsx +6 -1
  169. package/src/theme/Navbar/Logo/index.tsx +1 -1
  170. package/src/theme/Navbar/Search/index.tsx +15 -0
  171. package/src/theme/Navbar/Search/styles.module.css +20 -0
  172. package/src/theme/NavbarItem/ComponentTypes.tsx +32 -0
  173. package/src/theme/NavbarItem/DocNavbarItem.tsx +13 -32
  174. package/src/theme/NavbarItem/DocSidebarNavbarItem.tsx +9 -49
  175. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +26 -33
  176. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +3 -10
  177. package/src/theme/NavbarItem/DropdownNavbarItem.tsx +4 -1
  178. package/src/theme/NavbarItem/HtmlNavbarItem.tsx +32 -0
  179. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/index.tsx +5 -9
  180. package/src/theme/NavbarItem/NavbarNavLink.tsx +41 -25
  181. package/src/theme/NavbarItem/SearchNavbarItem.tsx +6 -1
  182. package/src/theme/NavbarItem/index.tsx +9 -38
  183. package/src/theme/NavbarItem/utils.ts +5 -2
  184. package/src/theme/PaginatorNavLink/index.tsx +8 -2
  185. package/src/theme/SiteMetadata/index.tsx +8 -8
  186. package/src/theme/SkipToContent/index.tsx +3 -29
  187. package/{lib-next/theme/TOCCollapsible/styles.module.css → src/theme/TOCCollapsible/CollapseButton.module.css} +1 -22
  188. package/src/theme/TOCCollapsible/CollapseButton.tsx +35 -0
  189. package/src/theme/TOCCollapsible/index.module.css +31 -0
  190. package/src/theme/TOCCollapsible/index.tsx +3 -14
  191. package/src/theme/TOCItems/Tree.tsx +46 -0
  192. package/src/theme/TOCItems/index.tsx +2 -41
  193. package/src/theme/TabItem/index.tsx +7 -1
  194. package/src/theme/TabItem/styles.module.css +10 -0
  195. package/src/theme/Tabs/index.tsx +3 -3
  196. package/src/theme/Tabs/styles.module.css +4 -0
  197. package/src/theme/Tag/index.tsx +2 -4
  198. package/src/theme/TagsListInline/index.tsx +1 -1
  199. package/src/theme-classic.d.ts +315 -33
  200. package/src/validateThemeConfig.ts +80 -13
  201. package/lib/types.d.ts +0 -11
  202. package/lib-next/theme/DocPage/styles.module.css +0 -82
  203. package/src/theme/DocPage/styles.module.css +0 -82
  204. package/src/types.d.ts +0 -11
@@ -9,10 +9,12 @@ import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
9
9
  import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
10
10
  import {
11
11
  useVersions,
12
- useLatestVersion,
13
12
  useActiveDocContext,
14
13
  } from '@docusaurus/plugin-content-docs/client';
15
- import {useDocsPreferredVersion} from '@docusaurus/theme-common';
14
+ import {
15
+ useDocsPreferredVersion,
16
+ useDocsVersionCandidates,
17
+ } from '@docusaurus/theme-common';
16
18
  import {translate} from '@docusaurus/Translate';
17
19
 
18
20
  const getVersionMainDoc = (version) =>
@@ -28,33 +30,27 @@ export default function DocsVersionDropdownNavbarItem({
28
30
  }) {
29
31
  const activeDocContext = useActiveDocContext(docsPluginId);
30
32
  const versions = useVersions(docsPluginId);
31
- const latestVersion = useLatestVersion(docsPluginId);
32
- const {preferredVersion, savePreferredVersionName} =
33
- useDocsPreferredVersion(docsPluginId);
34
-
35
- function getItems() {
36
- const versionLinks = versions.map((version) => {
37
- // We try to link to the same doc, in another version
38
- // When not possible, fallback to the "main doc" of the version
39
- const versionDoc =
40
- activeDocContext?.alternateDocVersions[version.name] ||
41
- getVersionMainDoc(version);
42
- return {
43
- isNavLink: true,
44
- label: version.label,
45
- to: versionDoc.path,
46
- isActive: () => version === activeDocContext?.activeVersion,
47
- onClick: () => {
48
- savePreferredVersionName(version.name);
49
- },
50
- };
51
- });
52
- return [...dropdownItemsBefore, ...versionLinks, ...dropdownItemsAfter];
53
- }
54
-
55
- const items = getItems();
56
- const dropdownVersion =
57
- activeDocContext.activeVersion ?? preferredVersion ?? latestVersion; // Mobile dropdown is handled a bit differently
33
+ const {savePreferredVersionName} = useDocsPreferredVersion(docsPluginId);
34
+ const versionLinks = versions.map((version) => {
35
+ // We try to link to the same doc, in another version
36
+ // When not possible, fallback to the "main doc" of the version
37
+ const versionDoc =
38
+ activeDocContext?.alternateDocVersions[version.name] ??
39
+ getVersionMainDoc(version);
40
+ return {
41
+ isNavLink: true,
42
+ label: version.label,
43
+ to: versionDoc.path,
44
+ isActive: () => version === activeDocContext?.activeVersion,
45
+ onClick: () => savePreferredVersionName(version.name),
46
+ };
47
+ });
48
+ const items = [
49
+ ...dropdownItemsBefore,
50
+ ...versionLinks,
51
+ ...dropdownItemsAfter,
52
+ ];
53
+ const dropdownVersion = useDocsVersionCandidates(docsPluginId)[0]; // Mobile dropdown is handled a bit differently
58
54
 
59
55
  const dropdownLabel =
60
56
  mobile && items.length > 1
@@ -6,11 +6,7 @@
6
6
  */
7
7
  import React from 'react';
8
8
  import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
9
- import {
10
- useActiveVersion,
11
- useLatestVersion,
12
- } from '@docusaurus/plugin-content-docs/client';
13
- import {useDocsPreferredVersion} from '@docusaurus/theme-common';
9
+ import {useDocsVersionCandidates} from '@docusaurus/theme-common';
14
10
 
15
11
  const getVersionMainDoc = (version) =>
16
12
  version.docs.find((doc) => doc.id === version.mainDocId);
@@ -21,10 +17,7 @@ export default function DocsVersionNavbarItem({
21
17
  docsPluginId,
22
18
  ...props
23
19
  }) {
24
- const activeVersion = useActiveVersion(docsPluginId);
25
- const {preferredVersion} = useDocsPreferredVersion(docsPluginId);
26
- const latestVersion = useLatestVersion(docsPluginId);
27
- const version = activeVersion ?? preferredVersion ?? latestVersion;
20
+ const version = useDocsVersionCandidates(docsPluginId)[0];
28
21
  const label = staticLabel ?? version.label;
29
22
  const path = staticTo ?? getVersionMainDoc(version).path;
30
23
  return <DefaultNavbarItem {...props} label={label} to={path} />;
@@ -134,7 +134,10 @@ function DropdownNavbarItemMobile({
134
134
  })}>
135
135
  <NavbarNavLink
136
136
  role="button"
137
- className={clsx('menu__link menu__link--sublist', className)}
137
+ className={clsx(
138
+ 'menu__link menu__link--sublist menu__link--sublist-caret',
139
+ className,
140
+ )}
138
141
  {...props}
139
142
  onClick={(e) => {
140
143
  e.preventDefault();
@@ -0,0 +1,30 @@
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
+ export default function HtmlNavbarItem({
10
+ value,
11
+ className,
12
+ mobile = false,
13
+ isDropdownItem = false,
14
+ }) {
15
+ const Comp = isDropdownItem ? 'li' : 'div';
16
+ return (
17
+ <Comp
18
+ className={clsx(
19
+ {
20
+ navbar__item: !mobile && !isDropdownItem,
21
+ 'menu__list-item': mobile,
22
+ },
23
+ className,
24
+ )}
25
+ dangerouslySetInnerHTML={{
26
+ __html: value,
27
+ }}
28
+ />
29
+ );
30
+ }
@@ -21,11 +21,6 @@ export default function LocaleDropdownNavbarItem({
21
21
  i18n: {currentLocale, locales, localeConfigs},
22
22
  } = useDocusaurusContext();
23
23
  const alternatePageUtils = useAlternatePageUtils();
24
-
25
- function getLocaleLabel(locale) {
26
- return localeConfigs[locale].label;
27
- }
28
-
29
24
  const localeItems = locales.map((locale) => {
30
25
  const to = `pathname://${alternatePageUtils.createUrl({
31
26
  locale,
@@ -33,7 +28,7 @@ export default function LocaleDropdownNavbarItem({
33
28
  })}`;
34
29
  return {
35
30
  isNavLink: true,
36
- label: getLocaleLabel(locale),
31
+ label: localeConfigs[locale].label,
37
32
  to,
38
33
  target: '_self',
39
34
  autoAddBaseUrl: false,
@@ -48,16 +43,16 @@ export default function LocaleDropdownNavbarItem({
48
43
  id: 'theme.navbar.mobileLanguageDropdown.label',
49
44
  description: 'The label for the mobile language switcher dropdown',
50
45
  })
51
- : getLocaleLabel(currentLocale);
46
+ : localeConfigs[currentLocale].label;
52
47
  return (
53
48
  <DropdownNavbarItem
54
49
  {...props}
55
50
  mobile={mobile}
56
51
  label={
57
- <span>
52
+ <>
58
53
  <IconLanguage className={styles.iconLanguage} />
59
- <span>{dropdownLabel}</span>
60
- </span>
54
+ {dropdownLabel}
55
+ </>
61
56
  }
62
57
  items={items}
63
58
  />
@@ -17,6 +17,7 @@ export default function NavbarNavLink({
17
17
  to,
18
18
  href,
19
19
  label,
20
+ html,
20
21
  activeClassName = '',
21
22
  prependBaseUrlToHref,
22
23
  ...props
@@ -29,38 +30,55 @@ export default function NavbarNavLink({
29
30
  forcePrependBaseUrl: true,
30
31
  });
31
32
  const isExternalLink = label && href && !isInternalUrl(href);
32
- const isDropdownLink = activeClassName === dropdownLinkActiveClass;
33
+ const isDropdownLink = activeClassName === dropdownLinkActiveClass; // Link content is set through html XOR label
34
+
35
+ const linkContentProps = html
36
+ ? {
37
+ dangerouslySetInnerHTML: {
38
+ __html: html,
39
+ },
40
+ }
41
+ : {
42
+ children: (
43
+ <>
44
+ {label}
45
+ {isExternalLink && (
46
+ <IconExternalLink
47
+ {...(isDropdownLink && {
48
+ width: 12,
49
+ height: 12,
50
+ })}
51
+ />
52
+ )}
53
+ </>
54
+ ),
55
+ };
56
+
57
+ if (href) {
58
+ return (
59
+ <Link
60
+ href={prependBaseUrlToHref ? normalizedHref : href}
61
+ {...props}
62
+ {...linkContentProps}
63
+ />
64
+ );
65
+ }
66
+
33
67
  return (
34
68
  <Link
35
- {...(href
36
- ? {
37
- href: prependBaseUrlToHref ? normalizedHref : href,
38
- }
39
- : {
40
- isNavLink: true,
41
- activeClassName: !props.className?.includes(activeClassName)
42
- ? activeClassName
43
- : '',
44
- to: toUrl,
45
- ...(activeBasePath || activeBaseRegex
46
- ? {
47
- isActive: (_match, location) =>
48
- activeBaseRegex
49
- ? isRegexpStringMatch(activeBaseRegex, location.pathname)
50
- : location.pathname.startsWith(activeBaseUrl),
51
- }
52
- : null),
53
- })}
54
- {...props}>
55
- {label}
56
- {isExternalLink && (
57
- <IconExternalLink
58
- {...(isDropdownLink && {
59
- width: 12,
60
- height: 12,
61
- })}
62
- />
63
- )}
64
- </Link>
69
+ to={toUrl}
70
+ isNavLink
71
+ activeClassName={
72
+ !props.className?.includes(activeClassName) ? activeClassName : ''
73
+ }
74
+ {...((activeBasePath || activeBaseRegex) && {
75
+ isActive: (_match, location) =>
76
+ activeBaseRegex
77
+ ? isRegexpStringMatch(activeBaseRegex, location.pathname)
78
+ : location.pathname.startsWith(activeBaseUrl),
79
+ })}
80
+ {...props}
81
+ {...linkContentProps}
82
+ />
65
83
  );
66
84
  }
@@ -6,10 +6,15 @@
6
6
  */
7
7
  import React from 'react';
8
8
  import SearchBar from '@theme/SearchBar';
9
+ import NavbarSearch from '@theme/Navbar/Search';
9
10
  export default function SearchNavbarItem({mobile}) {
10
11
  if (mobile) {
11
12
  return null;
12
13
  }
13
14
 
14
- return <SearchBar />;
15
+ return (
16
+ <NavbarSearch>
17
+ <SearchBar />
18
+ </NavbarSearch>
19
+ );
15
20
  }
@@ -5,35 +5,16 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import React from 'react';
8
- import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
9
- import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
10
- import LocaleDropdownNavbarItem from '@theme/NavbarItem/LocaleDropdownNavbarItem';
11
- import SearchNavbarItem from '@theme/NavbarItem/SearchNavbarItem';
12
- const NavbarItemComponents = {
13
- default: () => DefaultNavbarItem,
14
- localeDropdown: () => LocaleDropdownNavbarItem,
15
- search: () => SearchNavbarItem,
16
- dropdown: () => DropdownNavbarItem,
17
- // Need to lazy load these items as we don't know for sure the docs plugin is
18
- // loaded. See https://github.com/facebook/docusaurus/issues/3360
19
-
20
- /* eslint-disable @typescript-eslint/no-var-requires, global-require */
21
- docsVersion: () => require('@theme/NavbarItem/DocsVersionNavbarItem').default,
22
- docsVersionDropdown: () =>
23
- require('@theme/NavbarItem/DocsVersionDropdownNavbarItem').default,
24
- doc: () => require('@theme/NavbarItem/DocNavbarItem').default,
25
- docSidebar: () => require('@theme/NavbarItem/DocSidebarNavbarItem').default,
26
- /* eslint-enable @typescript-eslint/no-var-requires, global-require */
27
- };
8
+ import ComponentTypes from '@theme/NavbarItem/ComponentTypes';
28
9
 
29
10
  const getNavbarItemComponent = (type) => {
30
- const navbarItemComponentFn = NavbarItemComponents[type];
11
+ const component = ComponentTypes[type];
31
12
 
32
- if (!navbarItemComponentFn) {
13
+ if (!component) {
33
14
  throw new Error(`No NavbarItem component found for type "${type}".`);
34
15
  }
35
16
 
36
- return navbarItemComponentFn();
17
+ return component;
37
18
  };
38
19
 
39
20
  function getComponentType(type, isDropdown) {
@@ -4,6 +4,7 @@
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
- // eslint-disable-next-line import/no-named-export
7
+
8
+ /* eslint-disable import/no-named-export */
8
9
  export const getInfimaActiveClassName = (mobile) =>
9
10
  mobile ? 'menu__link--active' : 'navbar__link--active';
@@ -5,11 +5,17 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import React from 'react';
8
+ import clsx from 'clsx';
8
9
  import Link from '@docusaurus/Link';
9
10
  export default function PaginatorNavLink(props) {
10
- const {permalink, title, subLabel} = props;
11
+ const {permalink, title, subLabel, isNext} = props;
11
12
  return (
12
- <Link className="pagination-nav__link" to={permalink}>
13
+ <Link
14
+ className={clsx(
15
+ 'pagination-nav__link',
16
+ isNext ? 'pagination-nav__link--next' : 'pagination-nav__link--prev',
17
+ )}
18
+ to={permalink}>
13
19
  {subLabel && <div className="pagination-nav__sublabel">{subLabel}</div>}
14
20
  <div className="pagination-nav__label">{title}</div>
15
21
  </Link>
@@ -101,15 +101,16 @@ export default function SiteMetadata() {
101
101
 
102
102
  <SearchMetadata tag={DEFAULT_SEARCH_TAG} locale={currentLocale} />
103
103
 
104
- <Head // it's important to have an additional <Head> element here,
105
- // as it allows react-helmet to override values set in previous <Head>
106
- // ie we can override default metadata such as "twitter:card"
107
- // In same Head, the same meta would appear twice instead of overriding
108
- // See react-helmet doc
109
- >
104
+ {/*
105
+ It's important to have an additional <Head> element here, as it allows
106
+ react-helmet to override default metadata values set in previous <Head>
107
+ like "twitter:card". In same Head, the same meta would appear twice
108
+ instead of overriding.
109
+ */}
110
+ <Head>
110
111
  {/* Yes, "metadatum" is the grammatically correct term */}
111
112
  {metadata.map((metadatum, i) => (
112
- <meta key={`metadata_${i}`} {...metadatum} />
113
+ <meta key={i} {...metadatum} />
113
114
  ))}
114
115
  </Head>
115
116
  </>
@@ -4,38 +4,12 @@
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 React, {useRef} from 'react';
8
- import {useHistory} from '@docusaurus/router';
7
+ import React from 'react';
9
8
  import Translate from '@docusaurus/Translate';
10
- import {useLocationChange} from '@docusaurus/theme-common';
9
+ import {useSkipToContent} from '@docusaurus/theme-common';
11
10
  import styles from './styles.module.css';
12
-
13
- function programmaticFocus(el) {
14
- el.setAttribute('tabindex', '-1');
15
- el.focus();
16
- el.removeAttribute('tabindex');
17
- }
18
-
19
11
  export default function SkipToContent() {
20
- const containerRef = useRef(null);
21
- const {action} = useHistory();
22
-
23
- const handleSkip = (e) => {
24
- e.preventDefault();
25
- const targetElement =
26
- document.querySelector('main:first-of-type') ||
27
- document.querySelector('.main-wrapper');
28
-
29
- if (targetElement) {
30
- programmaticFocus(targetElement);
31
- }
32
- };
33
-
34
- useLocationChange(({location}) => {
35
- if (containerRef.current && !location.hash && action === 'PUSH') {
36
- programmaticFocus(containerRef.current);
37
- }
38
- });
12
+ const {containerRef, handleSkip} = useSkipToContent();
39
13
  return (
40
14
  <div ref={containerRef} role="region">
41
15
  {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
@@ -0,0 +1,29 @@
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 styles from './CollapseButton.module.css';
11
+ export default function TOCCollapsibleCollapseButton({collapsed, ...props}) {
12
+ return (
13
+ <button
14
+ type="button"
15
+ {...props}
16
+ className={clsx(
17
+ 'clean-btn',
18
+ styles.tocCollapsibleButton,
19
+ !collapsed && styles.tocCollapsibleButtonExpanded,
20
+ props.className,
21
+ )}>
22
+ <Translate
23
+ id="theme.TOCCollapsible.toggleButtonLabel"
24
+ description="The label used by the button on the collapsible TOC component">
25
+ On this page
26
+ </Translate>
27
+ </button>
28
+ );
29
+ }
@@ -5,12 +5,6 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- .tocCollapsible {
9
- background-color: var(--ifm-menu-color-background-active);
10
- border-radius: var(--ifm-global-radius);
11
- margin: 1rem 0;
12
- }
13
-
14
8
  .tocCollapsibleButton {
15
9
  font-size: inherit;
16
10
  display: flex;
@@ -30,21 +24,6 @@
30
24
  transition: transform var(--ifm-transition-fast);
31
25
  }
32
26
 
33
- .tocCollapsibleContent > ul {
34
- border-left: none;
35
- border-top: 1px solid var(--ifm-color-emphasis-300);
36
- padding: 0.2rem 0;
37
- font-size: 15px;
38
- }
39
-
40
- .tocCollapsibleContent ul li {
41
- margin: 0.4rem 0.8rem;
42
- }
43
-
44
- .tocCollapsibleContent a {
45
- display: block;
46
- }
47
-
48
- .tocCollapsibleExpanded .tocCollapsibleButton::after {
27
+ .tocCollapsibleButtonExpanded::after {
49
28
  transform: none;
50
29
  }
@@ -6,10 +6,10 @@
6
6
  */
7
7
  import React from 'react';
8
8
  import clsx from 'clsx';
9
- import Translate from '@docusaurus/Translate';
10
9
  import {useCollapsible, Collapsible} from '@docusaurus/theme-common';
11
- import styles from './styles.module.css';
10
+ import styles from './index.module.css';
12
11
  import TOCItems from '@theme/TOCItems';
12
+ import CollapseButton from '@theme/TOCCollapsible/CollapseButton';
13
13
  export default function TOCCollapsible({
14
14
  toc,
15
15
  className,
@@ -26,17 +26,7 @@ export default function TOCCollapsible({
26
26
  !collapsed && styles.tocCollapsibleExpanded,
27
27
  className,
28
28
  )}>
29
- <button
30
- type="button"
31
- className={clsx('clean-btn', styles.tocCollapsibleButton)}
32
- onClick={toggleCollapsed}>
33
- <Translate
34
- id="theme.TOCCollapsible.toggleButtonLabel"
35
- description="The label used by the button on the collapsible TOC component">
36
- On this page
37
- </Translate>
38
- </button>
39
-
29
+ <CollapseButton collapsed={collapsed} onClick={toggleCollapsed} />
40
30
  <Collapsible
41
31
  lazy
42
32
  className={styles.tocCollapsibleContent}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ .tocCollapsible {
9
+ background-color: var(--ifm-menu-color-background-active);
10
+ border-radius: var(--ifm-global-radius);
11
+ margin: 1rem 0;
12
+ }
13
+
14
+ .tocCollapsibleContent > ul {
15
+ border-left: none;
16
+ border-top: 1px solid var(--ifm-color-emphasis-300);
17
+ padding: 0.2rem 0;
18
+ font-size: 15px;
19
+ }
20
+
21
+ .tocCollapsibleContent ul li {
22
+ margin: 0.4rem 0.8rem;
23
+ }
24
+
25
+ .tocCollapsibleContent a {
26
+ display: block;
27
+ }
28
+
29
+ .tocCollapsibleExpanded {
30
+ transform: none;
31
+ }
@@ -0,0 +1,40 @@
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
+
9
+ // Recursive component rendering the toc tree
10
+ function TOCItemTree({toc, className, linkClassName, isChild}) {
11
+ if (!toc.length) {
12
+ return null;
13
+ }
14
+
15
+ return (
16
+ <ul className={isChild ? undefined : className}>
17
+ {toc.map((heading) => (
18
+ <li key={heading.id}>
19
+ {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}
20
+ <a
21
+ href={`#${heading.id}`}
22
+ className={linkClassName ?? undefined} // Developer provided the HTML, so assume it's safe.
23
+ // eslint-disable-next-line react/no-danger
24
+ dangerouslySetInnerHTML={{
25
+ __html: heading.value,
26
+ }}
27
+ />
28
+ <TOCItemTree
29
+ isChild
30
+ toc={heading.children}
31
+ className={className}
32
+ linkClassName={linkClassName}
33
+ />
34
+ </li>
35
+ ))}
36
+ </ul>
37
+ );
38
+ } // Memo only the tree root is enough
39
+
40
+ export default React.memo(TOCItemTree);
@@ -5,43 +5,12 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import React, {useMemo} from 'react';
8
+ import TOCItemTree from '@theme/TOCItems/Tree';
8
9
  import {
9
10
  useThemeConfig,
10
11
  useTOCHighlight,
11
12
  useFilteredAndTreeifiedTOC,
12
- } from '@docusaurus/theme-common'; // Recursive component rendering the toc tree
13
-
14
- /* eslint-disable jsx-a11y/control-has-associated-label */
15
-
16
- function TOCItemList({toc, className, linkClassName, isChild}) {
17
- if (!toc.length) {
18
- return null;
19
- }
20
-
21
- return (
22
- <ul className={isChild ? undefined : className}>
23
- {toc.map((heading) => (
24
- <li key={heading.id}>
25
- <a
26
- href={`#${heading.id}`}
27
- className={linkClassName ?? undefined} // Developer provided the HTML, so assume it's safe.
28
- // eslint-disable-next-line react/no-danger
29
- dangerouslySetInnerHTML={{
30
- __html: heading.value,
31
- }}
32
- />
33
- <TOCItemList
34
- isChild
35
- toc={heading.children}
36
- className={className}
37
- linkClassName={linkClassName}
38
- />
39
- </li>
40
- ))}
41
- </ul>
42
- );
43
- }
44
-
13
+ } from '@docusaurus/theme-common';
45
14
  export default function TOCItems({
46
15
  toc,
47
16
  className = 'table-of-contents table-of-contents__left-border',
@@ -75,7 +44,7 @@ export default function TOCItems({
75
44
  }, [linkClassName, linkActiveClassName, minHeadingLevel, maxHeadingLevel]);
76
45
  useTOCHighlight(tocHighlightConfig);
77
46
  return (
78
- <TOCItemList
47
+ <TOCItemTree
79
48
  toc={tocTree}
80
49
  className={className}
81
50
  linkClassName={linkClassName}