@docusaurus/theme-common 2.0.0-beta.16 → 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 (279) hide show
  1. package/Details.d.ts +14 -0
  2. package/lib/components/Collapsible/index.d.ts +32 -4
  3. package/lib/components/Collapsible/index.d.ts.map +1 -1
  4. package/lib/components/Collapsible/index.js +18 -10
  5. package/lib/components/Collapsible/index.js.map +1 -1
  6. package/lib/components/Details/index.d.ts +6 -1
  7. package/lib/components/Details/index.d.ts.map +1 -1
  8. package/lib/components/Details/index.js +11 -6
  9. package/lib/components/Details/index.js.map +1 -1
  10. package/lib/components/Details/styles.module.css +4 -0
  11. package/lib/{utils/announcementBarUtils.d.ts → contexts/announcementBar.d.ts} +7 -3
  12. package/lib/contexts/announcementBar.d.ts.map +1 -0
  13. package/lib/{utils/announcementBarUtils.js → contexts/announcementBar.js} +15 -14
  14. package/lib/contexts/announcementBar.js.map +1 -0
  15. package/lib/contexts/colorMode.d.ts +27 -0
  16. package/lib/contexts/colorMode.d.ts.map +1 -0
  17. package/lib/contexts/colorMode.js +132 -0
  18. package/lib/contexts/colorMode.js.map +1 -0
  19. package/lib/contexts/docSidebarItemsExpandedState.d.ts +31 -0
  20. package/lib/contexts/docSidebarItemsExpandedState.d.ts.map +1 -0
  21. package/lib/{utils → contexts}/docSidebarItemsExpandedState.js +10 -4
  22. package/lib/contexts/docSidebarItemsExpandedState.js.map +1 -0
  23. package/lib/contexts/docsPreferredVersion.d.ts +31 -0
  24. package/lib/contexts/docsPreferredVersion.d.ts.map +1 -0
  25. package/lib/contexts/docsPreferredVersion.js +128 -0
  26. package/lib/contexts/docsPreferredVersion.js.map +1 -0
  27. package/lib/contexts/docsSidebar.d.ts +26 -0
  28. package/lib/contexts/docsSidebar.d.ts.map +1 -0
  29. package/lib/contexts/docsSidebar.js +30 -0
  30. package/lib/contexts/docsSidebar.js.map +1 -0
  31. package/lib/contexts/docsVersion.d.ts +20 -0
  32. package/lib/contexts/docsVersion.d.ts.map +1 -0
  33. package/lib/contexts/docsVersion.js +26 -0
  34. package/lib/contexts/docsVersion.js.map +1 -0
  35. package/lib/contexts/navbarMobileSidebar.d.ts +31 -0
  36. package/lib/contexts/navbarMobileSidebar.d.ts.map +1 -0
  37. package/lib/contexts/navbarMobileSidebar.js +56 -0
  38. package/lib/contexts/navbarMobileSidebar.js.map +1 -0
  39. package/lib/contexts/navbarSecondaryMenu/content.d.ts +37 -0
  40. package/lib/contexts/navbarSecondaryMenu/content.d.ts.map +1 -0
  41. package/lib/contexts/navbarSecondaryMenu/content.js +56 -0
  42. package/lib/contexts/navbarSecondaryMenu/content.js.map +1 -0
  43. package/lib/contexts/navbarSecondaryMenu/display.d.ts +24 -0
  44. package/lib/contexts/navbarSecondaryMenu/display.d.ts.map +1 -0
  45. package/lib/contexts/navbarSecondaryMenu/display.js +62 -0
  46. package/lib/contexts/navbarSecondaryMenu/display.js.map +1 -0
  47. package/lib/{utils/tabGroupChoiceUtils.d.ts → contexts/tabGroupChoice.d.ts} +5 -3
  48. package/lib/contexts/tabGroupChoice.d.ts.map +1 -0
  49. package/lib/{utils/tabGroupChoiceUtils.js → contexts/tabGroupChoice.js} +15 -20
  50. package/lib/contexts/tabGroupChoice.js.map +1 -0
  51. package/lib/hooks/useBackToTopButton.d.ts +27 -0
  52. package/lib/hooks/useBackToTopButton.d.ts.map +1 -0
  53. package/lib/hooks/useBackToTopButton.js +50 -0
  54. package/lib/hooks/useBackToTopButton.js.map +1 -0
  55. package/lib/hooks/useCodeWordWrap.d.ts +14 -0
  56. package/lib/hooks/useCodeWordWrap.d.ts.map +1 -0
  57. package/lib/hooks/useCodeWordWrap.js +41 -0
  58. package/lib/hooks/useCodeWordWrap.js.map +1 -0
  59. package/lib/hooks/useHideableNavbar.d.ts +7 -3
  60. package/lib/hooks/useHideableNavbar.d.ts.map +1 -1
  61. package/lib/hooks/useHideableNavbar.js +10 -9
  62. package/lib/hooks/useHideableNavbar.js.map +1 -1
  63. package/lib/hooks/useKeyboardNavigation.d.ts +11 -1
  64. package/lib/hooks/useKeyboardNavigation.d.ts.map +1 -1
  65. package/lib/hooks/useKeyboardNavigation.js +11 -3
  66. package/lib/hooks/useKeyboardNavigation.js.map +1 -1
  67. package/lib/hooks/useLockBodyScroll.d.ts +5 -1
  68. package/lib/hooks/useLockBodyScroll.d.ts.map +1 -1
  69. package/lib/hooks/useLockBodyScroll.js +5 -1
  70. package/lib/hooks/useLockBodyScroll.js.map +1 -1
  71. package/lib/hooks/usePrismTheme.d.ts +6 -2
  72. package/lib/hooks/usePrismTheme.d.ts.map +1 -1
  73. package/lib/hooks/usePrismTheme.js +9 -6
  74. package/lib/hooks/usePrismTheme.js.map +1 -1
  75. package/lib/hooks/useSearchPage.d.ts +15 -4
  76. package/lib/hooks/useSearchPage.d.ts.map +1 -1
  77. package/lib/hooks/useSearchPage.js +4 -4
  78. package/lib/hooks/useSearchPage.js.map +1 -1
  79. package/lib/hooks/useSkipToContent.d.ts +25 -0
  80. package/lib/hooks/useSkipToContent.d.ts.map +1 -0
  81. package/lib/hooks/useSkipToContent.js +35 -0
  82. package/lib/hooks/useSkipToContent.js.map +1 -0
  83. package/lib/hooks/useTOCHighlight.d.ts +25 -0
  84. package/lib/hooks/useTOCHighlight.d.ts.map +1 -0
  85. package/lib/{utils → hooks}/useTOCHighlight.js +18 -16
  86. package/lib/hooks/useTOCHighlight.js.map +1 -0
  87. package/lib/hooks/useWindowSize.d.ts +14 -1
  88. package/lib/hooks/useWindowSize.d.ts.map +1 -1
  89. package/lib/hooks/useWindowSize.js +14 -11
  90. package/lib/hooks/useWindowSize.js.map +1 -1
  91. package/lib/index.d.ts +31 -32
  92. package/lib/index.d.ts.map +1 -1
  93. package/lib/index.js +31 -26
  94. package/lib/index.js.map +1 -1
  95. package/lib/utils/ThemeClassNames.d.ts +7 -0
  96. package/lib/utils/ThemeClassNames.d.ts.map +1 -1
  97. package/lib/utils/ThemeClassNames.js +7 -4
  98. package/lib/utils/ThemeClassNames.js.map +1 -1
  99. package/lib/utils/codeBlockUtils.d.ts +57 -4
  100. package/lib/utils/codeBlockUtils.d.ts.map +1 -1
  101. package/lib/utils/codeBlockUtils.js +111 -80
  102. package/lib/utils/codeBlockUtils.js.map +1 -1
  103. package/lib/utils/docsUtils.d.ts +83 -18
  104. package/lib/utils/docsUtils.d.ts.map +1 -1
  105. package/lib/utils/docsUtils.js +143 -62
  106. package/lib/utils/docsUtils.js.map +1 -1
  107. package/lib/utils/footerUtils.d.ts +13 -0
  108. package/lib/utils/footerUtils.d.ts.map +1 -0
  109. package/lib/utils/footerUtils.js +14 -0
  110. package/lib/utils/footerUtils.js.map +1 -0
  111. package/lib/utils/generalUtils.d.ts +4 -1
  112. package/lib/utils/generalUtils.d.ts.map +1 -1
  113. package/lib/utils/generalUtils.js +6 -3
  114. package/lib/utils/generalUtils.js.map +1 -1
  115. package/lib/utils/historyUtils.d.ts +1 -7
  116. package/lib/utils/historyUtils.d.ts.map +1 -1
  117. package/lib/utils/historyUtils.js +10 -13
  118. package/lib/utils/historyUtils.js.map +1 -1
  119. package/lib/utils/jsUtils.d.ts +1 -1
  120. package/lib/utils/jsUtils.js +1 -1
  121. package/lib/utils/metadataUtils.d.ts +38 -0
  122. package/lib/utils/metadataUtils.d.ts.map +1 -0
  123. package/lib/utils/metadataUtils.js +61 -0
  124. package/lib/utils/metadataUtils.js.map +1 -0
  125. package/lib/utils/navbarUtils.d.ts +21 -0
  126. package/lib/utils/navbarUtils.d.ts.map +1 -0
  127. package/lib/utils/navbarUtils.js +32 -0
  128. package/lib/utils/navbarUtils.js.map +1 -0
  129. package/lib/utils/reactUtils.d.ts +21 -7
  130. package/lib/utils/reactUtils.d.ts.map +1 -1
  131. package/lib/utils/reactUtils.js +34 -6
  132. package/lib/utils/reactUtils.js.map +1 -1
  133. package/lib/utils/regexpUtils.d.ts +2 -1
  134. package/lib/utils/regexpUtils.d.ts.map +1 -1
  135. package/lib/utils/regexpUtils.js +2 -1
  136. package/lib/utils/regexpUtils.js.map +1 -1
  137. package/lib/utils/routesUtils.d.ts +19 -4
  138. package/lib/utils/routesUtils.d.ts.map +1 -1
  139. package/lib/utils/routesUtils.js +40 -19
  140. package/lib/utils/routesUtils.js.map +1 -1
  141. package/lib/utils/scrollUtils.d.ts +55 -25
  142. package/lib/utils/scrollUtils.d.ts.map +1 -1
  143. package/lib/utils/scrollUtils.js +85 -21
  144. package/lib/utils/scrollUtils.js.map +1 -1
  145. package/lib/utils/searchUtils.d.ts +12 -0
  146. package/lib/utils/searchUtils.d.ts.map +1 -1
  147. package/lib/utils/searchUtils.js +36 -0
  148. package/lib/utils/searchUtils.js.map +1 -1
  149. package/lib/utils/storageUtils.d.ts +12 -9
  150. package/lib/utils/storageUtils.d.ts.map +1 -1
  151. package/lib/utils/storageUtils.js +21 -13
  152. package/lib/utils/storageUtils.js.map +1 -1
  153. package/lib/utils/tagsUtils.d.ts +7 -8
  154. package/lib/utils/tagsUtils.d.ts.map +1 -1
  155. package/lib/utils/tagsUtils.js +8 -6
  156. package/lib/utils/tagsUtils.js.map +1 -1
  157. package/lib/utils/tocUtils.d.ts +17 -1
  158. package/lib/utils/tocUtils.d.ts.map +1 -1
  159. package/lib/utils/tocUtils.js +20 -9
  160. package/lib/utils/tocUtils.js.map +1 -1
  161. package/lib/utils/useAlternatePageUtils.d.ts +20 -1
  162. package/lib/utils/useAlternatePageUtils.d.ts.map +1 -1
  163. package/lib/utils/useAlternatePageUtils.js +6 -3
  164. package/lib/utils/useAlternatePageUtils.js.map +1 -1
  165. package/lib/utils/useLocalPathname.d.ts +5 -0
  166. package/lib/utils/useLocalPathname.d.ts.map +1 -1
  167. package/lib/utils/useLocalPathname.js +6 -4
  168. package/lib/utils/useLocalPathname.js.map +1 -1
  169. package/lib/utils/useLocationChange.d.ts +7 -5
  170. package/lib/utils/useLocationChange.d.ts.map +1 -1
  171. package/lib/utils/useLocationChange.js +6 -2
  172. package/lib/utils/useLocationChange.js.map +1 -1
  173. package/lib/utils/usePluralForm.d.ts +11 -0
  174. package/lib/utils/usePluralForm.d.ts.map +1 -1
  175. package/lib/utils/usePluralForm.js +19 -24
  176. package/lib/utils/usePluralForm.js.map +1 -1
  177. package/lib/utils/useThemeConfig.d.ts +28 -22
  178. package/lib/utils/useThemeConfig.d.ts.map +1 -1
  179. package/lib/utils/useThemeConfig.js +3 -0
  180. package/lib/utils/useThemeConfig.js.map +1 -1
  181. package/package.json +18 -11
  182. package/src/components/Collapsible/index.tsx +42 -24
  183. package/src/components/Details/index.tsx +15 -8
  184. package/src/components/Details/styles.module.css +4 -0
  185. package/src/{utils/announcementBarUtils.tsx → contexts/announcementBar.tsx} +20 -22
  186. package/src/contexts/colorMode.tsx +199 -0
  187. package/src/contexts/docSidebarItemsExpandedState.tsx +55 -0
  188. package/src/contexts/docsPreferredVersion.tsx +253 -0
  189. package/src/contexts/docsSidebar.tsx +50 -0
  190. package/src/contexts/docsVersion.tsx +36 -0
  191. package/src/contexts/navbarMobileSidebar.tsx +99 -0
  192. package/src/contexts/navbarSecondaryMenu/content.tsx +110 -0
  193. package/src/contexts/navbarSecondaryMenu/display.tsx +102 -0
  194. package/src/{utils/tabGroupChoiceUtils.tsx → contexts/tabGroupChoice.tsx} +28 -33
  195. package/src/hooks/useBackToTopButton.ts +73 -0
  196. package/src/hooks/useCodeWordWrap.ts +56 -0
  197. package/src/hooks/useHideableNavbar.ts +12 -14
  198. package/src/hooks/useKeyboardNavigation.ts +11 -3
  199. package/src/hooks/useLockBodyScroll.ts +5 -2
  200. package/src/hooks/usePrismTheme.ts +10 -6
  201. package/src/hooks/useSearchPage.ts +18 -5
  202. package/src/hooks/useSkipToContent.ts +58 -0
  203. package/src/{utils → hooks}/useTOCHighlight.ts +24 -15
  204. package/src/hooks/useWindowSize.ts +14 -12
  205. package/src/index.ts +77 -57
  206. package/src/utils/ThemeClassNames.ts +10 -6
  207. package/src/utils/codeBlockUtils.ts +178 -92
  208. package/src/utils/docsUtils.tsx +205 -101
  209. package/src/utils/footerUtils.ts +18 -0
  210. package/src/utils/generalUtils.ts +6 -3
  211. package/src/utils/historyUtils.ts +11 -17
  212. package/src/utils/jsUtils.ts +1 -1
  213. package/src/utils/metadataUtils.tsx +115 -0
  214. package/src/utils/navbarUtils.tsx +45 -0
  215. package/src/utils/reactUtils.tsx +40 -7
  216. package/src/utils/regexpUtils.ts +2 -1
  217. package/src/utils/routesUtils.ts +58 -22
  218. package/src/utils/scrollUtils.tsx +120 -49
  219. package/src/utils/searchUtils.ts +51 -0
  220. package/src/utils/storageUtils.ts +23 -15
  221. package/src/utils/tagsUtils.ts +12 -10
  222. package/src/utils/tocUtils.ts +22 -11
  223. package/src/utils/useAlternatePageUtils.ts +17 -5
  224. package/src/utils/useLocalPathname.ts +6 -4
  225. package/src/utils/useLocationChange.ts +12 -10
  226. package/src/utils/usePluralForm.ts +27 -24
  227. package/src/utils/useThemeConfig.ts +23 -22
  228. package/yarn-error.log +20199 -0
  229. package/lib/utils/announcementBarUtils.d.ts.map +0 -1
  230. package/lib/utils/announcementBarUtils.js.map +0 -1
  231. package/lib/utils/colorModeUtils.d.ts +0 -18
  232. package/lib/utils/colorModeUtils.d.ts.map +0 -1
  233. package/lib/utils/colorModeUtils.js +0 -106
  234. package/lib/utils/colorModeUtils.js.map +0 -1
  235. package/lib/utils/docSidebarItemsExpandedState.d.ts +0 -17
  236. package/lib/utils/docSidebarItemsExpandedState.d.ts.map +0 -1
  237. package/lib/utils/docSidebarItemsExpandedState.js.map +0 -1
  238. package/lib/utils/docsPreferredVersion/DocsPreferredVersionProvider.d.ts +0 -22
  239. package/lib/utils/docsPreferredVersion/DocsPreferredVersionProvider.d.ts.map +0 -1
  240. package/lib/utils/docsPreferredVersion/DocsPreferredVersionProvider.js +0 -91
  241. package/lib/utils/docsPreferredVersion/DocsPreferredVersionProvider.js.map +0 -1
  242. package/lib/utils/docsPreferredVersion/DocsPreferredVersionStorage.d.ts +0 -14
  243. package/lib/utils/docsPreferredVersion/DocsPreferredVersionStorage.d.ts.map +0 -1
  244. package/lib/utils/docsPreferredVersion/DocsPreferredVersionStorage.js +0 -19
  245. package/lib/utils/docsPreferredVersion/DocsPreferredVersionStorage.js.map +0 -1
  246. package/lib/utils/docsPreferredVersion/useDocsPreferredVersion.d.ts +0 -14
  247. package/lib/utils/docsPreferredVersion/useDocsPreferredVersion.d.ts.map +0 -1
  248. package/lib/utils/docsPreferredVersion/useDocsPreferredVersion.js +0 -41
  249. package/lib/utils/docsPreferredVersion/useDocsPreferredVersion.js.map +0 -1
  250. package/lib/utils/mobileSecondaryMenu.d.ts +0 -21
  251. package/lib/utils/mobileSecondaryMenu.d.ts.map +0 -1
  252. package/lib/utils/mobileSecondaryMenu.js +0 -50
  253. package/lib/utils/mobileSecondaryMenu.js.map +0 -1
  254. package/lib/utils/pathUtils.d.ts +0 -8
  255. package/lib/utils/pathUtils.d.ts.map +0 -1
  256. package/lib/utils/pathUtils.js +0 -17
  257. package/lib/utils/pathUtils.js.map +0 -1
  258. package/lib/utils/tabGroupChoiceUtils.d.ts.map +0 -1
  259. package/lib/utils/tabGroupChoiceUtils.js.map +0 -1
  260. package/lib/utils/useContextualSearchFilters.d.ts +0 -12
  261. package/lib/utils/useContextualSearchFilters.d.ts.map +0 -1
  262. package/lib/utils/useContextualSearchFilters.js +0 -37
  263. package/lib/utils/useContextualSearchFilters.js.map +0 -1
  264. package/lib/utils/usePrevious.d.ts +0 -8
  265. package/lib/utils/usePrevious.d.ts.map +0 -1
  266. package/lib/utils/usePrevious.js +0 -16
  267. package/lib/utils/usePrevious.js.map +0 -1
  268. package/lib/utils/useTOCHighlight.d.ts +0 -14
  269. package/lib/utils/useTOCHighlight.d.ts.map +0 -1
  270. package/lib/utils/useTOCHighlight.js.map +0 -1
  271. package/src/utils/colorModeUtils.tsx +0 -156
  272. package/src/utils/docSidebarItemsExpandedState.tsx +0 -41
  273. package/src/utils/docsPreferredVersion/DocsPreferredVersionProvider.tsx +0 -167
  274. package/src/utils/docsPreferredVersion/DocsPreferredVersionStorage.ts +0 -33
  275. package/src/utils/docsPreferredVersion/useDocsPreferredVersion.ts +0 -70
  276. package/src/utils/mobileSecondaryMenu.tsx +0 -115
  277. package/src/utils/pathUtils.ts +0 -19
  278. package/src/utils/useContextualSearchFilters.ts +0 -53
  279. package/src/utils/usePrevious.ts +0 -19
@@ -4,26 +4,17 @@
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, { createContext, useContext } from 'react';
8
- import { useActivePlugin, useAllDocsData, } from '@docusaurus/plugin-content-docs/client';
9
- import { isSamePath } from './pathUtils';
10
- import { useLocation } from '@docusaurus/router';
7
+ import { useMemo } from 'react';
8
+ import { useAllDocsData, useActivePlugin, useActiveDocContext, useLatestVersion, } from '@docusaurus/plugin-content-docs/client';
9
+ import { useDocsPreferredVersion } from '../contexts/docsPreferredVersion';
10
+ import { useDocsVersion } from '../contexts/docsVersion';
11
+ import { useDocsSidebar } from '../contexts/docsSidebar';
12
+ import { uniq } from './jsUtils';
13
+ import { isSamePath } from './routesUtils';
14
+ import { matchPath, useLocation } from '@docusaurus/router';
15
+ import renderRoutes from '@docusaurus/renderRoutes';
11
16
  // TODO not ideal, see also "useDocs"
12
17
  export const isDocsPluginEnabled = !!useAllDocsData;
13
- // Using a Symbol because null is a valid context value (a doc with no sidebar)
14
- // Inspired by https://github.com/jamiebuilds/unstated-next/blob/master/src/unstated-next.tsx
15
- const EmptyContextValue = Symbol('EmptyContext');
16
- const DocsVersionContext = createContext(EmptyContextValue);
17
- export function DocsVersionProvider({ children, version, }) {
18
- return (React.createElement(DocsVersionContext.Provider, { value: version }, children));
19
- }
20
- export function useDocsVersion() {
21
- const version = useContext(DocsVersionContext);
22
- if (version === EmptyContextValue) {
23
- throw new Error('This hook requires usage of <DocsVersionProvider>');
24
- }
25
- return version;
26
- }
27
18
  export function useDocById(id) {
28
19
  const version = useDocsVersion();
29
20
  if (!id) {
@@ -35,19 +26,9 @@ export function useDocById(id) {
35
26
  }
36
27
  return doc;
37
28
  }
38
- const DocsSidebarContext = createContext(EmptyContextValue);
39
- export function DocsSidebarProvider({ children, sidebar, }) {
40
- return (React.createElement(DocsSidebarContext.Provider, { value: sidebar }, children));
41
- }
42
- export function useDocsSidebar() {
43
- const sidebar = useContext(DocsSidebarContext);
44
- if (sidebar === EmptyContextValue) {
45
- throw new Error('This hook requires usage of <DocsSidebarProvider>');
46
- }
47
- return sidebar;
48
- }
49
- // Use the components props and the sidebar in context
50
- // to get back the related sidebar category that we want to render
29
+ /**
30
+ * Pure function, similar to `Array#find`, but works on the sidebar tree.
31
+ */
51
32
  export function findSidebarCategory(sidebar, predicate) {
52
33
  for (const item of sidebar) {
53
34
  if (item.type === 'category') {
@@ -62,7 +43,10 @@ export function findSidebarCategory(sidebar, predicate) {
62
43
  }
63
44
  return undefined;
64
45
  }
65
- // If a category card has no link => link to the first subItem having a link
46
+ /**
47
+ * Best effort to assign a link to a sidebar category. If the category doesn't
48
+ * have a link itself, we link to the first sub item with a link.
49
+ */
66
50
  export function findFirstCategoryLink(item) {
67
51
  if (item.href) {
68
52
  return item.href;
@@ -77,68 +61,165 @@ export function findFirstCategoryLink(item) {
77
61
  return categoryLink;
78
62
  }
79
63
  }
80
- else if (subItem.type === 'html') {
81
- // skip
82
- }
83
- else {
84
- throw new Error(`Unexpected category item type for ${JSON.stringify(subItem)}`);
85
- }
64
+ // Could be "html" items
86
65
  }
87
66
  return undefined;
88
67
  }
68
+ /**
69
+ * Gets the category associated with the current location. Should only be used
70
+ * on category index pages.
71
+ */
89
72
  export function useCurrentSidebarCategory() {
90
73
  const { pathname } = useLocation();
91
74
  const sidebar = useDocsSidebar();
92
75
  if (!sidebar) {
93
76
  throw new Error('Unexpected: cant find current sidebar in context');
94
77
  }
95
- const category = findSidebarCategory(sidebar, (item) => isSamePath(item.href, pathname));
78
+ const category = findSidebarCategory(sidebar.items, (item) => isSamePath(item.href, pathname));
96
79
  if (!category) {
97
- throw new Error(`Unexpected: sidebar category could not be found for pathname='${pathname}'.
98
- Hook useCurrentSidebarCategory() should only be used on Category pages`);
80
+ throw new Error(`${pathname} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);
99
81
  }
100
82
  return category;
101
83
  }
102
- function containsActiveSidebarItem(items, activePath) {
103
- return items.some((subItem) => isActiveSidebarItem(subItem, activePath));
104
- }
84
+ const isActive = (testedPath, activePath) => typeof testedPath !== 'undefined' && isSamePath(testedPath, activePath);
85
+ const containsActiveSidebarItem = (items, activePath) => items.some((subItem) => isActiveSidebarItem(subItem, activePath));
86
+ /**
87
+ * Checks if a sidebar item should be active, based on the active path.
88
+ */
105
89
  export function isActiveSidebarItem(item, activePath) {
106
- const isActive = (testedPath) => typeof testedPath !== 'undefined' && isSamePath(testedPath, activePath);
107
90
  if (item.type === 'link') {
108
- return isActive(item.href);
91
+ return isActive(item.href, activePath);
109
92
  }
110
93
  if (item.type === 'category') {
111
- return (isActive(item.href) || containsActiveSidebarItem(item.items, activePath));
94
+ return (isActive(item.href, activePath) ||
95
+ containsActiveSidebarItem(item.items, activePath));
112
96
  }
113
97
  return false;
114
98
  }
115
- export function getBreadcrumbs({ sidebar, pathname, }) {
99
+ /**
100
+ * Gets the breadcrumbs of the current doc page, based on its sidebar location.
101
+ * Returns `null` if there's no sidebar or breadcrumbs are disabled.
102
+ */
103
+ export function useSidebarBreadcrumbs() {
104
+ const sidebar = useDocsSidebar();
105
+ const { pathname } = useLocation();
106
+ const breadcrumbsOption = useActivePlugin()?.pluginData.breadcrumbs;
107
+ if (breadcrumbsOption === false || !sidebar) {
108
+ return null;
109
+ }
116
110
  const breadcrumbs = [];
117
111
  function extract(items) {
118
112
  for (const item of items) {
119
- if (item.type === 'category' &&
120
- (isSamePath(item.href, pathname) || extract(item.items))) {
121
- breadcrumbs.push(item);
122
- return true;
123
- }
124
- else if (item.type === 'link' && isSamePath(item.href, pathname)) {
113
+ if ((item.type === 'category' &&
114
+ (isSamePath(item.href, pathname) || extract(item.items))) ||
115
+ (item.type === 'link' && isSamePath(item.href, pathname))) {
125
116
  breadcrumbs.push(item);
126
117
  return true;
127
118
  }
128
119
  }
129
120
  return false;
130
121
  }
131
- extract(sidebar);
122
+ extract(sidebar.items);
132
123
  return breadcrumbs.reverse();
133
124
  }
134
- export function useSidebarBreadcrumbs() {
135
- var _a;
136
- const sidebar = useDocsSidebar();
137
- const { pathname } = useLocation();
138
- const breadcrumbsOption = (_a = useActivePlugin()) === null || _a === void 0 ? void 0 : _a.pluginData.breadcrumbs;
139
- if (breadcrumbsOption === false || !sidebar) {
125
+ /**
126
+ * "Version candidates" are mostly useful for the layout components, which must
127
+ * be able to work on all pages. For example, if a user has `{ type: "doc",
128
+ * docId: "intro" }` as a navbar item, which version does that refer to? We
129
+ * believe that it could refer to at most three version candidates:
130
+ *
131
+ * 1. The **active version**, the one that the user is currently browsing. See
132
+ * {@link useActiveDocContext}.
133
+ * 2. The **preferred version**, the one that the user last visited. See
134
+ * {@link useDocsPreferredVersion}.
135
+ * 3. The **latest version**, the "default". See {@link useLatestVersion}.
136
+ *
137
+ * @param docsPluginId The plugin ID to get versions from.
138
+ * @returns An array of 1~3 versions with priorities defined above, guaranteed
139
+ * to be unique and non-sparse. Will be memoized, hence stable for deps array.
140
+ */
141
+ export function useDocsVersionCandidates(docsPluginId) {
142
+ const { activeVersion } = useActiveDocContext(docsPluginId);
143
+ const { preferredVersion } = useDocsPreferredVersion(docsPluginId);
144
+ const latestVersion = useLatestVersion(docsPluginId);
145
+ return useMemo(() => uniq([activeVersion, preferredVersion, latestVersion].filter(Boolean)), [activeVersion, preferredVersion, latestVersion]);
146
+ }
147
+ /**
148
+ * The layout components, like navbar items, must be able to work on all pages,
149
+ * even on non-doc ones where there's no version context, so a sidebar ID could
150
+ * be ambiguous. This hook would always return a sidebar to be linked to. See
151
+ * also {@link useDocsVersionCandidates} for how this selection is done.
152
+ *
153
+ * @throws This hook throws if a sidebar with said ID is not found.
154
+ */
155
+ export function useLayoutDocsSidebar(sidebarId, docsPluginId) {
156
+ const versions = useDocsVersionCandidates(docsPluginId);
157
+ return useMemo(() => {
158
+ const allSidebars = versions.flatMap((version) => version.sidebars ? Object.entries(version.sidebars) : []);
159
+ const sidebarEntry = allSidebars.find((sidebar) => sidebar[0] === sidebarId);
160
+ if (!sidebarEntry) {
161
+ throw new Error(`Can't find any sidebar with id "${sidebarId}" in version${versions.length > 1 ? 's' : ''} ${versions.map((version) => version.name).join(', ')}".
162
+ Available sidebar ids are:
163
+ - ${Object.keys(allSidebars).join('\n- ')}`);
164
+ }
165
+ return sidebarEntry[1];
166
+ }, [sidebarId, versions]);
167
+ }
168
+ /**
169
+ * The layout components, like navbar items, must be able to work on all pages,
170
+ * even on non-doc ones where there's no version context, so a doc ID could be
171
+ * ambiguous. This hook would always return a doc to be linked to. See also
172
+ * {@link useDocsVersionCandidates} for how this selection is done.
173
+ *
174
+ * @throws This hook throws if a doc with said ID is not found.
175
+ */
176
+ export function useLayoutDoc(docId, docsPluginId) {
177
+ const versions = useDocsVersionCandidates(docsPluginId);
178
+ return useMemo(() => {
179
+ const allDocs = versions.flatMap((version) => version.docs);
180
+ const doc = allDocs.find((versionDoc) => versionDoc.id === docId);
181
+ if (!doc) {
182
+ const isDraft = versions
183
+ .flatMap((version) => version.draftIds)
184
+ .includes(docId);
185
+ // Drafts should be silently filtered instead of throwing
186
+ if (isDraft) {
187
+ return null;
188
+ }
189
+ throw new Error(`DocNavbarItem: couldn't find any doc with id "${docId}" in version${versions.length > 1 ? 's' : ''} ${versions.map((version) => version.name).join(', ')}".
190
+ Available doc ids are:
191
+ - ${uniq(allDocs.map((versionDoc) => versionDoc.id)).join('\n- ')}`);
192
+ }
193
+ return doc;
194
+ }, [docId, versions]);
195
+ }
196
+ // TODO later read version/route directly from context
197
+ /**
198
+ * The docs plugin creates nested routes, with the top-level route providing the
199
+ * version metadata, and the subroutes creating individual doc pages. This hook
200
+ * will match the current location against all known sub-routes.
201
+ *
202
+ * @param props The props received by `@theme/DocPage`
203
+ * @returns The data of the relevant document at the current location, or `null`
204
+ * if no document associated with the current location can be found.
205
+ */
206
+ export function useDocRouteMetadata({ route, versionMetadata, }) {
207
+ const location = useLocation();
208
+ const docRoutes = route.routes;
209
+ const currentDocRoute = docRoutes.find((docRoute) => matchPath(location.pathname, docRoute));
210
+ if (!currentDocRoute) {
140
211
  return null;
141
212
  }
142
- return getBreadcrumbs({ sidebar, pathname });
213
+ // For now, the sidebarName is added as route config: not ideal!
214
+ const sidebarName = currentDocRoute.sidebar;
215
+ const sidebarItems = sidebarName
216
+ ? versionMetadata.docsSidebars[sidebarName]
217
+ : undefined;
218
+ const docElement = renderRoutes(docRoutes, { versionMetadata });
219
+ return {
220
+ docElement,
221
+ sidebarName,
222
+ sidebarItems,
223
+ };
143
224
  }
144
225
  //# sourceMappingURL=docsUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"docsUtils.js","sourceRoot":"","sources":["../../src/utils/docsUtils.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,EAAC,aAAa,EAAkB,UAAU,EAAC,MAAM,OAAO,CAAC;AACvE,OAAO,EACL,eAAe,EACf,cAAc,GACf,MAAM,wCAAwC,CAAC;AAShD,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AACvC,OAAO,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAE/C,qCAAqC;AACrC,MAAM,CAAC,MAAM,mBAAmB,GAAY,CAAC,CAAC,cAAc,CAAC;AAE7D,+EAA+E;AAC/E,6FAA6F;AAC7F,MAAM,iBAAiB,GAAkB,MAAM,CAAC,cAAc,CAAC,CAAC;AAEhE,MAAM,kBAAkB,GAAG,aAAa,CAEtC,iBAAiB,CAAC,CAAC;AAErB,MAAM,UAAU,mBAAmB,CAAC,EAClC,QAAQ,EACR,OAAO,GAIR;IACC,OAAO,CACL,oBAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,IACxC,QAAQ,CACmB,CAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,iBAAiB,EAAE;QACjC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;KACtE;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAID,MAAM,UAAU,UAAU,CAAC,EAAsB;IAC/C,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,IAAI,CAAC,EAAE,EAAE;QACP,OAAO,SAAS,CAAC;KAClB;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;KACrD;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,kBAAkB,GAAG,aAAa,CAEtC,iBAAiB,CAAC,CAAC;AAErB,MAAM,UAAU,mBAAmB,CAAC,EAClC,QAAQ,EACR,OAAO,GAIR;IACC,OAAO,CACL,oBAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,IACxC,QAAQ,CACmB,CAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,iBAAiB,EAAE;QACjC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;KACtE;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,sDAAsD;AACtD,kEAAkE;AAClE,MAAM,UAAU,mBAAmB,CACjC,OAAoB,EACpB,SAAyD;IAEzD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;YAC5B,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;gBACnB,OAAO,IAAI,CAAC;aACb;YACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC3D,IAAI,OAAO,EAAE;gBACX,OAAO,OAAO,CAAC;aAChB;SACF;KACF;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB,CACnC,IAA6B;IAE7B,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE;QAChC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;YAC3B,OAAO,OAAO,CAAC,IAAI,CAAC;SACrB;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;YACtC,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,YAAY,EAAE;gBAChB,OAAO,YAAY,CAAC;aACrB;SACF;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;YAClC,OAAO;SACR;aAAM;YACL,MAAM,IAAI,KAAK,CACb,qCAAqC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAC/D,CAAC;SACH;KACF;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,MAAM,EAAC,QAAQ,EAAC,GAAG,WAAW,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;KACrE;IACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CACrD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAChC,CAAC;IACF,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,IAAI,KAAK,CACb,iEAAiE,QAAQ;uEACR,CAClE,CAAC;KACH;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,yBAAyB,CAChC,KAAwB,EACxB,UAAkB;IAElB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAqB,EACrB,UAAkB;IAElB,MAAM,QAAQ,GAAG,CAAC,UAA8B,EAAE,EAAE,CAClD,OAAO,UAAU,KAAK,WAAW,IAAI,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAE1E,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;QACxB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC5B;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;QAC5B,OAAO,CACL,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CACzE,CAAC;KACH;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,GAIT;IACC,MAAM,WAAW,GAAiC,EAAE,CAAC;IAErD,SAAS,OAAO,CAAC,KAAkB;QACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IACE,IAAI,CAAC,IAAI,KAAK,UAAU;gBACxB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EACxD;gBACA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,IAAI,CAAC;aACb;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;gBAClE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,IAAI,CAAC;aACb;SACF;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjB,OAAO,WAAW,CAAC,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,qBAAqB;;IACnC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,EAAC,QAAQ,EAAC,GAAG,WAAW,EAAE,CAAC;IACjC,MAAM,iBAAiB,GAAG,MAAA,eAAe,EAAE,0CAAE,UAAU,CAAC,WAAW,CAAC;IAEpE,IAAI,iBAAiB,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE;QAC3C,OAAO,IAAI,CAAC;KACb;IAED,OAAO,cAAc,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAC,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"docsUtils.js","sourceRoot":"","sources":["../../src/utils/docsUtils.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
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 type { MultiColumnFooter, SimpleFooter } from './useThemeConfig';
8
+ /**
9
+ * A rough duck-typing about whether the `footer.links` is intended to be multi-
10
+ * column.
11
+ */
12
+ export declare function isMultiColumnFooterLinks(links: MultiColumnFooter['links'] | SimpleFooter['links']): links is MultiColumnFooter['links'];
13
+ //# sourceMappingURL=footerUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footerUtils.d.ts","sourceRoot":"","sources":["../../src/utils/footerUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAE,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAEtE;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,GACxD,KAAK,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAErC"}
@@ -0,0 +1,14 @@
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
+ * A rough duck-typing about whether the `footer.links` is intended to be multi-
9
+ * column.
10
+ */
11
+ export function isMultiColumnFooterLinks(links) {
12
+ return 'title' in links[0];
13
+ }
14
+ //# sourceMappingURL=footerUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footerUtils.js","sourceRoot":"","sources":["../../src/utils/footerUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAAyD;IAEzD,OAAO,OAAO,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC;AAC9B,CAAC"}
@@ -4,5 +4,8 @@
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
- export declare const useTitleFormatter: (title?: string | undefined) => string;
7
+ /**
8
+ * Formats the page's title based on relevant site config and other contexts.
9
+ */
10
+ export declare function useTitleFormatter(title?: string | undefined): string;
8
11
  //# sourceMappingURL=generalUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../src/utils/generalUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,eAAO,MAAM,iBAAiB,WAAY,MAAM,GAAG,SAAS,KAAG,MAM9D,CAAC"}
1
+ {"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../src/utils/generalUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMpE"}
@@ -5,11 +5,14 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
8
- export const useTitleFormatter = (title) => {
8
+ /**
9
+ * Formats the page's title based on relevant site config and other contexts.
10
+ */
11
+ export function useTitleFormatter(title) {
9
12
  const { siteConfig } = useDocusaurusContext();
10
13
  const { title: siteTitle, titleDelimiter } = siteConfig;
11
- return title && title.trim().length
14
+ return title?.trim().length
12
15
  ? `${title.trim()} ${titleDelimiter} ${siteTitle}`
13
16
  : siteTitle;
14
- };
17
+ }
15
18
  //# sourceMappingURL=generalUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generalUtils.js","sourceRoot":"","sources":["../../src/utils/generalUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,oBAAoB,MAAM,kCAAkC,CAAC;AAEpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAA0B,EAAU,EAAE;IACtE,MAAM,EAAC,UAAU,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAC5C,MAAM,EAAC,KAAK,EAAE,SAAS,EAAE,cAAc,EAAC,GAAG,UAAU,CAAC;IACtD,OAAO,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM;QACjC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,cAAc,IAAI,SAAS,EAAE;QAClD,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC,CAAC"}
1
+ {"version":3,"file":"generalUtils.js","sourceRoot":"","sources":["../../src/utils/generalUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,oBAAoB,MAAM,kCAAkC,CAAC;AAEpE;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA0B;IAC1D,MAAM,EAAC,UAAU,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAC5C,MAAM,EAAC,KAAK,EAAE,SAAS,EAAE,cAAc,EAAC,GAAG,UAAU,CAAC;IACtD,OAAO,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM;QACzB,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,cAAc,IAAI,SAAS,EAAE;QAClD,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
@@ -6,15 +6,9 @@
6
6
  */
7
7
  import type { Location, Action } from 'history';
8
8
  declare type HistoryBlockHandler = (location: Location, action: Action) => void | false;
9
- /**
10
- * Permits to register a handler that will be called on history actions (pop,
11
- * push, replace) If the handler returns false, the navigation transition will
12
- * be blocked/cancelled
13
- */
14
- export declare function useHistoryActionHandler(handler: HistoryBlockHandler): void;
15
9
  /**
16
10
  * Permits to register a handler that will be called on history pop navigation
17
- * (backward/forward) If the handler returns false, the backward/forward
11
+ * (backward/forward). If the handler returns `false`, the backward/forward
18
12
  * transition will be blocked. Unfortunately there's no good way to detect the
19
13
  * "direction" (backward/forward) of the POP event.
20
14
  */
@@ -1 +1 @@
1
- {"version":3,"file":"historyUtils.d.ts","sourceRoot":"","sources":["../../src/utils/historyUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAC,QAAQ,EAAE,MAAM,EAAC,MAAM,SAAS,CAAC;AAE9C,aAAK,mBAAmB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,KAAK,CAAC;AAEhF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAe1E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CASvE"}
1
+ {"version":3,"file":"historyUtils.d.ts","sourceRoot":"","sources":["../../src/utils/historyUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAC,QAAQ,EAAE,MAAM,EAAC,MAAM,SAAS,CAAC;AAE9C,aAAK,mBAAmB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,KAAK,CAAC;AAiBhF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CASvE"}
@@ -4,34 +4,31 @@
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 { useEffect, useRef } from 'react';
7
+ import { useEffect } from 'react';
8
8
  import { useHistory } from '@docusaurus/router';
9
+ import { useDynamicCallback } from './reactUtils';
9
10
  /**
10
11
  * Permits to register a handler that will be called on history actions (pop,
11
- * push, replace) If the handler returns false, the navigation transition will
12
- * be blocked/cancelled
12
+ * push, replace). If the handler returns `false`, the navigation transition
13
+ * will be blocked/cancelled.
13
14
  */
14
- export function useHistoryActionHandler(handler) {
15
+ function useHistoryActionHandler(handler) {
15
16
  const { block } = useHistory();
16
- // Avoid stale closure issues without triggering useless re-renders
17
- const lastHandlerRef = useRef(handler);
18
- useEffect(() => {
19
- lastHandlerRef.current = handler;
20
- }, [handler]);
21
- useEffect(() =>
17
+ const stableHandler = useDynamicCallback(handler);
18
+ useEffect(
22
19
  // See https://github.com/remix-run/history/blob/main/docs/blocking-transitions.md
23
- block((location, action) => lastHandlerRef.current(location, action)), [block, lastHandlerRef]);
20
+ () => block((location, action) => stableHandler(location, action)), [block, stableHandler]);
24
21
  }
25
22
  /**
26
23
  * Permits to register a handler that will be called on history pop navigation
27
- * (backward/forward) If the handler returns false, the backward/forward
24
+ * (backward/forward). If the handler returns `false`, the backward/forward
28
25
  * transition will be blocked. Unfortunately there's no good way to detect the
29
26
  * "direction" (backward/forward) of the POP event.
30
27
  */
31
28
  export function useHistoryPopHandler(handler) {
32
29
  useHistoryActionHandler((location, action) => {
33
30
  if (action === 'POP') {
34
- // Eventually block navigation if handler returns false
31
+ // Maybe block navigation if handler returns false
35
32
  return handler(location, action);
36
33
  }
37
34
  // Don't block other navigation actions
@@ -1 +1 @@
1
- {"version":3,"file":"historyUtils.js","sourceRoot":"","sources":["../../src/utils/historyUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,SAAS,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AACxC,OAAO,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAK9C;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAA4B;IAClE,MAAM,EAAC,KAAK,EAAC,GAAG,UAAU,EAAE,CAAC;IAE7B,mEAAmE;IACnE,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC;IACnC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,SAAS,CACP,GAAG,EAAE;IACH,kFAAkF;IAClF,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EACvE,CAAC,KAAK,EAAE,cAAc,CAAC,CACxB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA4B;IAC/D,uBAAuB,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,MAAM,KAAK,KAAK,EAAE;YACpB,uDAAuD;YACvD,OAAO,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;SAClC;QACD,uCAAuC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"historyUtils.js","sourceRoot":"","sources":["../../src/utils/historyUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAChC,OAAO,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAC,kBAAkB,EAAC,MAAM,cAAc,CAAC;AAKhD;;;;GAIG;AACH,SAAS,uBAAuB,CAAC,OAA4B;IAC3D,MAAM,EAAC,KAAK,EAAC,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAClD,SAAS;IACP,kFAAkF;IAClF,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAClE,CAAC,KAAK,EAAE,aAAa,CAAC,CACvB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA4B;IAC/D,uBAAuB,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,MAAM,KAAK,KAAK,EAAE;YACpB,kDAAkD;YAClD,OAAO,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;SAClC;QACD,uCAAuC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -15,7 +15,7 @@
15
15
  */
16
16
  export declare function duplicates<T>(arr: readonly T[], comparator?: (a: T, b: T) => boolean): T[];
17
17
  /**
18
- * Remove duplicate array items (similar to _.uniq)
18
+ * Remove duplicate array items (similar to `_.uniq`)
19
19
  * @param arr The array.
20
20
  * @returns An array with duplicate elements removed by reference comparison.
21
21
  */
@@ -18,7 +18,7 @@ export function duplicates(arr, comparator = (a, b) => a === b) {
18
18
  return arr.filter((v, vIndex) => arr.findIndex((u) => comparator(u, v)) !== vIndex);
19
19
  }
20
20
  /**
21
- * Remove duplicate array items (similar to _.uniq)
21
+ * Remove duplicate array items (similar to `_.uniq`)
22
22
  * @param arr The array.
23
23
  * @returns An array with duplicate elements removed by reference comparison.
24
24
  */
@@ -0,0 +1,38 @@
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 { type ReactNode } from 'react';
8
+ declare type PageMetadataProps = {
9
+ readonly title?: string;
10
+ readonly description?: string;
11
+ readonly keywords?: readonly string[] | string;
12
+ readonly image?: string;
13
+ readonly children?: ReactNode;
14
+ };
15
+ /**
16
+ * Helper component to manipulate page metadata and override site defaults.
17
+ * Works in the same way as Helmet.
18
+ */
19
+ export declare function PageMetadata({ title, description, keywords, image, children, }: PageMetadataProps): JSX.Element;
20
+ /**
21
+ * Every layer of this provider will append a class name to the HTML element.
22
+ * There's no consumer for this hook: it's side-effect-only. This wrapper is
23
+ * necessary because Helmet does not "merge" classes.
24
+ * @see https://github.com/staylor/react-helmet-async/issues/161
25
+ */
26
+ export declare function HtmlClassNameProvider({ className: classNameProp, children, }: {
27
+ className: string;
28
+ children: ReactNode;
29
+ }): JSX.Element;
30
+ /**
31
+ * A very thin wrapper around `HtmlClassNameProvider` that adds the plugin ID +
32
+ * name to the HTML class name.
33
+ */
34
+ export declare function PluginHtmlClassNameProvider({ children, }: {
35
+ children: ReactNode;
36
+ }): JSX.Element;
37
+ export {};
38
+ //# sourceMappingURL=metadataUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadataUtils.d.ts","sourceRoot":"","sources":["../../src/utils/metadataUtils.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAc,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAO5C,aAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CA6BjC;AAID;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EAAE,aAAa,EACxB,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,GAAG,CAAC,OAAO,CAWd;AASD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,GAAG,CAAC,OAAO,CASd"}
@@ -0,0 +1,61 @@
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 Head from '@docusaurus/Head';
9
+ import clsx from 'clsx';
10
+ import useRouteContext from '@docusaurus/useRouteContext';
11
+ import { useBaseUrlUtils } from '@docusaurus/useBaseUrl';
12
+ import { useTitleFormatter } from './generalUtils';
13
+ /**
14
+ * Helper component to manipulate page metadata and override site defaults.
15
+ * Works in the same way as Helmet.
16
+ */
17
+ export function PageMetadata({ title, description, keywords, image, children, }) {
18
+ const pageTitle = useTitleFormatter(title);
19
+ const { withBaseUrl } = useBaseUrlUtils();
20
+ const pageImage = image ? withBaseUrl(image, { absolute: true }) : undefined;
21
+ return (React.createElement(Head, null,
22
+ title && React.createElement("title", null, pageTitle),
23
+ title && React.createElement("meta", { property: "og:title", content: pageTitle }),
24
+ description && React.createElement("meta", { name: "description", content: description }),
25
+ description && React.createElement("meta", { property: "og:description", content: description }),
26
+ keywords && (React.createElement("meta", { name: "keywords", content:
27
+ // https://github.com/microsoft/TypeScript/issues/17002
28
+ (Array.isArray(keywords) ? keywords.join(',') : keywords) })),
29
+ pageImage && React.createElement("meta", { property: "og:image", content: pageImage }),
30
+ pageImage && React.createElement("meta", { name: "twitter:image", content: pageImage }),
31
+ children));
32
+ }
33
+ const HtmlClassNameContext = React.createContext(undefined);
34
+ /**
35
+ * Every layer of this provider will append a class name to the HTML element.
36
+ * There's no consumer for this hook: it's side-effect-only. This wrapper is
37
+ * necessary because Helmet does not "merge" classes.
38
+ * @see https://github.com/staylor/react-helmet-async/issues/161
39
+ */
40
+ export function HtmlClassNameProvider({ className: classNameProp, children, }) {
41
+ const classNameContext = React.useContext(HtmlClassNameContext);
42
+ const className = clsx(classNameContext, classNameProp);
43
+ return (React.createElement(HtmlClassNameContext.Provider, { value: className },
44
+ React.createElement(Head, null,
45
+ React.createElement("html", { className: className })),
46
+ children));
47
+ }
48
+ function pluginNameToClassName(pluginName) {
49
+ return `plugin-${pluginName.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi, '')}`;
50
+ }
51
+ /**
52
+ * A very thin wrapper around `HtmlClassNameProvider` that adds the plugin ID +
53
+ * name to the HTML class name.
54
+ */
55
+ export function PluginHtmlClassNameProvider({ children, }) {
56
+ const routeContext = useRouteContext();
57
+ const nameClass = pluginNameToClassName(routeContext.plugin.name);
58
+ const idClass = `plugin-id-${routeContext.plugin.id}`;
59
+ return (React.createElement(HtmlClassNameProvider, { className: clsx(nameClass, idClass) }, children));
60
+ }
61
+ //# sourceMappingURL=metadataUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadataUtils.js","sourceRoot":"","sources":["../../src/utils/metadataUtils.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAuB,MAAM,OAAO,CAAC;AAC5C,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,eAAe,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAC,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AAUjD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,KAAK,EACL,QAAQ,GACU;IAClB,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,EAAC,WAAW,EAAC,GAAG,eAAe,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3E,OAAO,CACL,oBAAC,IAAI;QACF,KAAK,IAAI,mCAAQ,SAAS,CAAS;QACnC,KAAK,IAAI,8BAAM,QAAQ,EAAC,UAAU,EAAC,OAAO,EAAE,SAAS,GAAI;QAEzD,WAAW,IAAI,8BAAM,IAAI,EAAC,aAAa,EAAC,OAAO,EAAE,WAAW,GAAI;QAChE,WAAW,IAAI,8BAAM,QAAQ,EAAC,gBAAgB,EAAC,OAAO,EAAE,WAAW,GAAI;QAEvE,QAAQ,IAAI,CACX,8BACE,IAAI,EAAC,UAAU,EACf,OAAO;YACL,uDAAuD;YACvD,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAW,GAErE,CACH;QAEA,SAAS,IAAI,8BAAM,QAAQ,EAAC,UAAU,EAAC,OAAO,EAAE,SAAS,GAAI;QAC7D,SAAS,IAAI,8BAAM,IAAI,EAAC,eAAe,EAAC,OAAO,EAAE,SAAS,GAAI;QAE9D,QAAQ,CACJ,CACR,CAAC;AACJ,CAAC;AAED,MAAM,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAqB,SAAS,CAAC,CAAC;AAEhF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,EACpC,SAAS,EAAE,aAAa,EACxB,QAAQ,GAIT;IACC,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IACxD,OAAO,CACL,oBAAC,oBAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,SAAS;QAC7C,oBAAC,IAAI;YACH,8BAAM,SAAS,EAAE,SAAS,GAAI,CACzB;QACN,QAAQ,CACqB,CACjC,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAkB;IAC/C,OAAO,UAAU,UAAU,CAAC,OAAO,CACjC,6CAA6C,EAC7C,EAAE,CACH,EAAE,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,EAC1C,QAAQ,GAGT;IACC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,qBAAqB,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,aAAa,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;IACtD,OAAO,CACL,oBAAC,qBAAqB,IAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,IACvD,QAAQ,CACa,CACzB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
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 { type ReactNode } from 'react';
8
+ /**
9
+ * Split links by left/right. If position is unspecified, fallback to right.
10
+ */
11
+ export declare function splitNavbarItems<T extends {
12
+ position?: 'left' | 'right';
13
+ }>(items: T[]): [leftItems: T[], rightItems: T[]];
14
+ /**
15
+ * Composes multiple navbar state providers that are mutually dependent and
16
+ * hence can't be re-ordered.
17
+ */
18
+ export declare function NavbarProvider({ children }: {
19
+ children: ReactNode;
20
+ }): JSX.Element;
21
+ //# sourceMappingURL=navbarUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navbarUtils.d.ts","sourceRoot":"","sources":["../../src/utils/navbarUtils.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAc,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAO5C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAC,EACtE,KAAK,EAAE,CAAC,EAAE,GACT,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CASnC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAC,QAAQ,EAAC,EAAE;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAC,GAAG,GAAG,CAAC,OAAO,CAU7E"}