@elastic/eui-docusaurus-theme 2.0.0

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 (297) hide show
  1. package/LICENSE.txt +6 -0
  2. package/README.md +292 -0
  3. package/lib/.tsbuildinfo-client +1 -0
  4. package/lib/components/badge/index.d.ts +1 -0
  5. package/lib/components/badge/index.js +9 -0
  6. package/lib/components/codesandbox_icon/codesandbox_icon.d.ts +4 -0
  7. package/lib/components/codesandbox_icon/codesandbox_icon.js +2 -0
  8. package/lib/components/codesandbox_icon/index.d.ts +1 -0
  9. package/lib/components/codesandbox_icon/index.js +8 -0
  10. package/lib/components/demo/actions_bar/actions_bar.d.ts +10 -0
  11. package/lib/components/demo/actions_bar/actions_bar.js +34 -0
  12. package/lib/components/demo/actions_bar/index.d.ts +1 -0
  13. package/lib/components/demo/actions_bar/index.js +8 -0
  14. package/lib/components/demo/code_transformer.d.ts +18 -0
  15. package/lib/components/demo/code_transformer.js +39 -0
  16. package/lib/components/demo/codesandbox/find_external_dependencies.d.ts +5 -0
  17. package/lib/components/demo/codesandbox/find_external_dependencies.js +30 -0
  18. package/lib/components/demo/codesandbox/index.d.ts +1 -0
  19. package/lib/components/demo/codesandbox/index.js +8 -0
  20. package/lib/components/demo/codesandbox/open_action.d.ts +16 -0
  21. package/lib/components/demo/codesandbox/open_action.js +91 -0
  22. package/lib/components/demo/context.d.ts +14 -0
  23. package/lib/components/demo/context.js +13 -0
  24. package/lib/components/demo/create_demo.d.ts +5 -0
  25. package/lib/components/demo/create_demo.js +13 -0
  26. package/lib/components/demo/demo.d.ts +23 -0
  27. package/lib/components/demo/demo.js +61 -0
  28. package/lib/components/demo/editor/editor.d.ts +1 -0
  29. package/lib/components/demo/editor/editor.js +39 -0
  30. package/lib/components/demo/editor/index.d.ts +1 -0
  31. package/lib/components/demo/editor/index.js +8 -0
  32. package/lib/components/demo/index.d.ts +3 -0
  33. package/lib/components/demo/index.js +10 -0
  34. package/lib/components/demo/preview/index.d.ts +1 -0
  35. package/lib/components/demo/preview/index.js +8 -0
  36. package/lib/components/demo/preview/preview.d.ts +7 -0
  37. package/lib/components/demo/preview/preview.js +36 -0
  38. package/lib/components/demo/scope.d.ts +1 -0
  39. package/lib/components/demo/scope.js +12 -0
  40. package/lib/components/demo/source/get_source_from_children.d.ts +11 -0
  41. package/lib/components/demo/source/get_source_from_children.js +42 -0
  42. package/lib/components/demo/source/index.d.ts +1 -0
  43. package/lib/components/demo/source/index.js +8 -0
  44. package/lib/components/demo/source/source.d.ts +6 -0
  45. package/lib/components/demo/source/source.js +25 -0
  46. package/lib/components/figma_embed/index.d.ts +5 -0
  47. package/lib/components/figma_embed/index.js +36 -0
  48. package/lib/components/guideline/guideline.d.ts +10 -0
  49. package/lib/components/guideline/guideline.js +68 -0
  50. package/lib/components/guideline/guideline_text.d.ts +6 -0
  51. package/lib/components/guideline/guideline_text.js +28 -0
  52. package/lib/components/guideline/index.d.ts +2 -0
  53. package/lib/components/guideline/index.js +9 -0
  54. package/lib/components/guideline/types.d.ts +1 -0
  55. package/lib/components/guideline/types.js +8 -0
  56. package/lib/components/high_contrast_mode_toggle/index.d.ts +1 -0
  57. package/lib/components/high_contrast_mode_toggle/index.js +15 -0
  58. package/lib/components/icon/index.d.ts +1 -0
  59. package/lib/components/icon/index.js +9 -0
  60. package/lib/components/index.d.ts +7 -0
  61. package/lib/components/index.js +14 -0
  62. package/lib/components/navbar_item/index.d.ts +19 -0
  63. package/lib/components/navbar_item/index.js +84 -0
  64. package/lib/components/prop_table/definition_types.d.ts +43 -0
  65. package/lib/components/prop_table/definition_types.js +8 -0
  66. package/lib/components/prop_table/extended_types.d.ts +5 -0
  67. package/lib/components/prop_table/extended_types.js +27 -0
  68. package/lib/components/prop_table/extended_types_info.d.ts +26 -0
  69. package/lib/components/prop_table/extended_types_info.js +34 -0
  70. package/lib/components/prop_table/index.d.ts +1 -0
  71. package/lib/components/prop_table/index.js +8 -0
  72. package/lib/components/prop_table/prop_table.d.ts +8 -0
  73. package/lib/components/prop_table/prop_table.js +115 -0
  74. package/lib/components/theme_context/index.d.ts +16 -0
  75. package/lib/components/theme_context/index.js +103 -0
  76. package/lib/components/theme_context/theme_overrides.d.ts +2 -0
  77. package/lib/components/theme_context/theme_overrides.js +12 -0
  78. package/lib/components/version_switcher/index.d.ts +23 -0
  79. package/lib/components/version_switcher/index.js +51 -0
  80. package/lib/index.d.ts +2 -0
  81. package/lib/index.js +19 -0
  82. package/lib/index.js.map +1 -0
  83. package/lib/theme/Admonition/Types.d.ts +3 -0
  84. package/lib/theme/Admonition/Types.js +51 -0
  85. package/lib/theme/CodeBlock/index.d.ts +3 -0
  86. package/lib/theme/CodeBlock/index.js +35 -0
  87. package/lib/theme/ColorModeToggle/index.d.ts +10 -0
  88. package/lib/theme/ColorModeToggle/index.js +51 -0
  89. package/lib/theme/Demo/actions.d.ts +8 -0
  90. package/lib/theme/Demo/actions.js +8 -0
  91. package/lib/theme/Demo/default_scope.d.ts +3 -0
  92. package/lib/theme/Demo/default_scope.js +17 -0
  93. package/lib/theme/DocBreadcrumbs/Items/Home/index.d.ts +2 -0
  94. package/lib/theme/DocBreadcrumbs/Items/Home/index.js +15 -0
  95. package/lib/theme/DocBreadcrumbs/Items/item.styles.d.ts +5 -0
  96. package/lib/theme/DocBreadcrumbs/Items/item.styles.js +40 -0
  97. package/lib/theme/DocBreadcrumbs/index.d.ts +2 -0
  98. package/lib/theme/DocBreadcrumbs/index.js +63 -0
  99. package/lib/theme/DocItem/Content/index.d.ts +3 -0
  100. package/lib/theme/DocItem/Content/index.js +44 -0
  101. package/lib/theme/DocItem/Footer/index.d.ts +2 -0
  102. package/lib/theme/DocItem/Footer/index.js +17 -0
  103. package/lib/theme/DocItem/Layout/index.d.ts +3 -0
  104. package/lib/theme/DocItem/Layout/index.js +71 -0
  105. package/lib/theme/DocItem/Metadata/index.d.ts +2 -0
  106. package/lib/theme/DocItem/Metadata/index.js +7 -0
  107. package/lib/theme/DocItem/Paginator/index.d.ts +6 -0
  108. package/lib/theme/DocItem/Paginator/index.js +11 -0
  109. package/lib/theme/DocItem/TOC/Desktop/index.d.ts +2 -0
  110. package/lib/theme/DocItem/TOC/Desktop/index.js +8 -0
  111. package/lib/theme/DocItem/TOC/Mobile/index.d.ts +2 -0
  112. package/lib/theme/DocItem/TOC/Mobile/index.js +17 -0
  113. package/lib/theme/DocItem/index.d.ts +3 -0
  114. package/lib/theme/DocItem/index.js +10 -0
  115. package/lib/theme/DocPaginator/index.d.ts +3 -0
  116. package/lib/theme/DocPaginator/index.js +19 -0
  117. package/lib/theme/DocRoot/Layout/Main/index.d.ts +3 -0
  118. package/lib/theme/DocRoot/Layout/Main/index.js +35 -0
  119. package/lib/theme/DocRoot/Layout/Sidebar/index.d.ts +3 -0
  120. package/lib/theme/DocRoot/Layout/Sidebar/index.js +81 -0
  121. package/lib/theme/DocRoot/Layout/index.d.ts +3 -0
  122. package/lib/theme/DocRoot/Layout/index.js +47 -0
  123. package/lib/theme/DocSidebarItem/Category/index.d.ts +3 -0
  124. package/lib/theme/DocSidebarItem/Category/index.js +146 -0
  125. package/lib/theme/DocSidebarItem/Link/index.d.ts +3 -0
  126. package/lib/theme/DocSidebarItem/Link/index.js +39 -0
  127. package/lib/theme/DocSidebarItem/index.d.ts +3 -0
  128. package/lib/theme/DocSidebarItem/index.js +15 -0
  129. package/lib/theme/DocSidebarItems/index.d.ts +5 -0
  130. package/lib/theme/DocSidebarItems/index.js +17 -0
  131. package/lib/theme/EditThisPage/index.d.ts +3 -0
  132. package/lib/theme/EditThisPage/index.js +17 -0
  133. package/lib/theme/Footer/index.d.ts +2 -0
  134. package/lib/theme/Footer/index.js +43 -0
  135. package/lib/theme/Heading/index.d.ts +3 -0
  136. package/lib/theme/Heading/index.js +49 -0
  137. package/lib/theme/Logo/index.d.ts +3 -0
  138. package/lib/theme/Logo/index.js +80 -0
  139. package/lib/theme/MDXComponents/A.d.ts +6 -0
  140. package/lib/theme/MDXComponents/A.js +17 -0
  141. package/lib/theme/MDXComponents/Blockquote.d.ts +2 -0
  142. package/lib/theme/MDXComponents/Blockquote.js +18 -0
  143. package/lib/theme/MDXComponents/Code.d.ts +6 -0
  144. package/lib/theme/MDXComponents/Code.js +35 -0
  145. package/lib/theme/MDXComponents/Heading.d.ts +4 -0
  146. package/lib/theme/MDXComponents/Heading.js +4 -0
  147. package/lib/theme/MDXComponents/ListItem.d.ts +2 -0
  148. package/lib/theme/MDXComponents/ListItem.js +5 -0
  149. package/lib/theme/MDXComponents/OrderedList.d.ts +2 -0
  150. package/lib/theme/MDXComponents/OrderedList.js +11 -0
  151. package/lib/theme/MDXComponents/Paragraph.d.ts +2 -0
  152. package/lib/theme/MDXComponents/Paragraph.js +18 -0
  153. package/lib/theme/MDXComponents/Table.d.ts +2 -0
  154. package/lib/theme/MDXComponents/Table.js +3 -0
  155. package/lib/theme/MDXComponents/TableBody.d.ts +2 -0
  156. package/lib/theme/MDXComponents/TableBody.js +3 -0
  157. package/lib/theme/MDXComponents/TableDataCell.d.ts +2 -0
  158. package/lib/theme/MDXComponents/TableDataCell.js +3 -0
  159. package/lib/theme/MDXComponents/TableHeader.d.ts +2 -0
  160. package/lib/theme/MDXComponents/TableHeader.js +3 -0
  161. package/lib/theme/MDXComponents/TableHeaderCell.d.ts +2 -0
  162. package/lib/theme/MDXComponents/TableHeaderCell.js +3 -0
  163. package/lib/theme/MDXComponents/TableRow.d.ts +2 -0
  164. package/lib/theme/MDXComponents/TableRow.js +3 -0
  165. package/lib/theme/MDXComponents/UnorderedList.d.ts +2 -0
  166. package/lib/theme/MDXComponents/UnorderedList.js +11 -0
  167. package/lib/theme/MDXComponents/index.d.ts +2 -0
  168. package/lib/theme/MDXComponents/index.js +46 -0
  169. package/lib/theme/MDXContent/index.d.ts +6 -0
  170. package/lib/theme/MDXContent/index.js +4 -0
  171. package/lib/theme/Navbar/Content/index.d.ts +7 -0
  172. package/lib/theme/Navbar/Content/index.js +149 -0
  173. package/lib/theme/Navbar/Layout/index.d.ts +6 -0
  174. package/lib/theme/Navbar/Layout/index.js +59 -0
  175. package/lib/theme/Navbar/MobileSidebar/Header/index.d.ts +7 -0
  176. package/lib/theme/Navbar/MobileSidebar/Header/index.js +46 -0
  177. package/lib/theme/Navbar/MobileSidebar/Layout/index.d.ts +6 -0
  178. package/lib/theme/Navbar/MobileSidebar/Layout/index.js +26 -0
  179. package/lib/theme/Navbar/MobileSidebar/index.d.ts +7 -0
  180. package/lib/theme/Navbar/MobileSidebar/index.js +14 -0
  181. package/lib/theme/NavbarItem/DropdownNavbarItem/index.d.ts +3 -0
  182. package/lib/theme/NavbarItem/DropdownNavbarItem/index.js +94 -0
  183. package/lib/theme/NavbarItem/NavbarNavLink.d.ts +7 -0
  184. package/lib/theme/NavbarItem/NavbarNavLink.js +48 -0
  185. package/lib/theme/PaginatorNavLink/index.d.ts +3 -0
  186. package/lib/theme/PaginatorNavLink/index.js +43 -0
  187. package/lib/theme/Root.d.ts +3 -0
  188. package/lib/theme/Root.js +66 -0
  189. package/lib/theme/Root.styles.d.ts +2 -0
  190. package/lib/theme/Root.styles.js +111 -0
  191. package/lib/theme/TOCCollapsible/CollapseButton/index.d.ts +3 -0
  192. package/lib/theme/TOCCollapsible/CollapseButton/index.js +23 -0
  193. package/lib/theme/TOCItems/Tree.d.ts +5 -0
  194. package/lib/theme/TOCItems/Tree.js +80 -0
  195. package/lib/theme/infima.styles.d.ts +1 -0
  196. package/lib/theme/infima.styles.js +1456 -0
  197. package/lib/theme/reset.styles.d.ts +2 -0
  198. package/lib/theme/reset.styles.js +79 -0
  199. package/package.json +61 -0
  200. package/src/components/badge/index.ts +11 -0
  201. package/src/components/codesandbox_icon/codesandbox_icon.tsx +24 -0
  202. package/src/components/codesandbox_icon/index.ts +9 -0
  203. package/src/components/demo/actions_bar/actions_bar.tsx +95 -0
  204. package/src/components/demo/actions_bar/index.ts +9 -0
  205. package/src/components/demo/code_transformer.ts +44 -0
  206. package/src/components/demo/codesandbox/find_external_dependencies.ts +34 -0
  207. package/src/components/demo/codesandbox/index.ts +9 -0
  208. package/src/components/demo/codesandbox/open_action.tsx +132 -0
  209. package/src/components/demo/context.ts +30 -0
  210. package/src/components/demo/create_demo.tsx +17 -0
  211. package/src/components/demo/demo.tsx +143 -0
  212. package/src/components/demo/editor/editor.tsx +51 -0
  213. package/src/components/demo/editor/index.ts +9 -0
  214. package/src/components/demo/index.ts +11 -0
  215. package/src/components/demo/preview/index.ts +9 -0
  216. package/src/components/demo/preview/preview.tsx +77 -0
  217. package/src/components/demo/scope.ts +14 -0
  218. package/src/components/demo/source/get_source_from_children.ts +59 -0
  219. package/src/components/demo/source/index.ts +9 -0
  220. package/src/components/demo/source/source.tsx +36 -0
  221. package/src/components/figma_embed/index.tsx +57 -0
  222. package/src/components/guideline/guideline.tsx +121 -0
  223. package/src/components/guideline/guideline_text.tsx +51 -0
  224. package/src/components/guideline/index.ts +10 -0
  225. package/src/components/guideline/types.ts +9 -0
  226. package/src/components/high_contrast_mode_toggle/index.tsx +28 -0
  227. package/src/components/icon/index.ts +11 -0
  228. package/src/components/index.ts +15 -0
  229. package/src/components/navbar_item/index.tsx +164 -0
  230. package/src/components/prop_table/definition_types.ts +53 -0
  231. package/src/components/prop_table/extended_types.tsx +66 -0
  232. package/src/components/prop_table/extended_types_info.ts +35 -0
  233. package/src/components/prop_table/index.ts +9 -0
  234. package/src/components/prop_table/prop_table.tsx +235 -0
  235. package/src/components/theme_context/index.tsx +156 -0
  236. package/src/components/theme_context/theme_overrides.ts +15 -0
  237. package/src/components/version_switcher/index.tsx +144 -0
  238. package/src/index.ts +21 -0
  239. package/src/theme/Admonition/Types.tsx +85 -0
  240. package/src/theme/CodeBlock/index.tsx +57 -0
  241. package/src/theme/ColorModeToggle/index.tsx +93 -0
  242. package/src/theme/Demo/actions.tsx +20 -0
  243. package/src/theme/Demo/default_scope.ts +19 -0
  244. package/src/theme/DocBreadcrumbs/Items/Home/index.tsx +38 -0
  245. package/src/theme/DocBreadcrumbs/Items/item.styles.ts +43 -0
  246. package/src/theme/DocBreadcrumbs/index.tsx +144 -0
  247. package/src/theme/DocItem/Content/index.tsx +75 -0
  248. package/src/theme/DocItem/Footer/index.tsx +59 -0
  249. package/src/theme/DocItem/Layout/index.tsx +112 -0
  250. package/src/theme/DocItem/Metadata/index.tsx +23 -0
  251. package/src/theme/DocItem/Paginator/index.tsx +20 -0
  252. package/src/theme/DocItem/TOC/Desktop/index.tsx +24 -0
  253. package/src/theme/DocItem/TOC/Mobile/index.tsx +35 -0
  254. package/src/theme/DocItem/index.tsx +30 -0
  255. package/src/theme/DocPaginator/index.tsx +64 -0
  256. package/src/theme/DocRoot/Layout/Main/index.tsx +61 -0
  257. package/src/theme/DocRoot/Layout/Sidebar/index.tsx +124 -0
  258. package/src/theme/DocRoot/Layout/index.tsx +72 -0
  259. package/src/theme/DocSidebarItem/Category/index.tsx +266 -0
  260. package/src/theme/DocSidebarItem/Link/index.tsx +86 -0
  261. package/src/theme/DocSidebarItem/index.tsx +29 -0
  262. package/src/theme/DocSidebarItems/index.tsx +30 -0
  263. package/src/theme/EditThisPage/index.tsx +50 -0
  264. package/src/theme/Footer/index.tsx +67 -0
  265. package/src/theme/Heading/index.tsx +94 -0
  266. package/src/theme/Logo/index.tsx +146 -0
  267. package/src/theme/MDXComponents/A.tsx +33 -0
  268. package/src/theme/MDXComponents/Blockquote.tsx +35 -0
  269. package/src/theme/MDXComponents/Code.tsx +60 -0
  270. package/src/theme/MDXComponents/Heading.tsx +16 -0
  271. package/src/theme/MDXComponents/ListItem.tsx +20 -0
  272. package/src/theme/MDXComponents/OrderedList.tsx +26 -0
  273. package/src/theme/MDXComponents/Paragraph.tsx +33 -0
  274. package/src/theme/MDXComponents/Table.tsx +16 -0
  275. package/src/theme/MDXComponents/TableBody.tsx +16 -0
  276. package/src/theme/MDXComponents/TableDataCell.tsx +20 -0
  277. package/src/theme/MDXComponents/TableHeader.tsx +16 -0
  278. package/src/theme/MDXComponents/TableHeaderCell.tsx +20 -0
  279. package/src/theme/MDXComponents/TableRow.tsx +16 -0
  280. package/src/theme/MDXComponents/UnorderedList.tsx +26 -0
  281. package/src/theme/MDXComponents/index.ts +61 -0
  282. package/src/theme/MDXContent/index.tsx +22 -0
  283. package/src/theme/Navbar/Content/index.tsx +262 -0
  284. package/src/theme/Navbar/Layout/index.tsx +100 -0
  285. package/src/theme/Navbar/MobileSidebar/Header/index.tsx +89 -0
  286. package/src/theme/Navbar/MobileSidebar/Layout/index.tsx +44 -0
  287. package/src/theme/Navbar/MobileSidebar/index.tsx +46 -0
  288. package/src/theme/NavbarItem/DropdownNavbarItem/index.tsx +200 -0
  289. package/src/theme/NavbarItem/NavbarNavLink.tsx +141 -0
  290. package/src/theme/PaginatorNavLink/index.tsx +72 -0
  291. package/src/theme/Root.styles.ts +122 -0
  292. package/src/theme/Root.tsx +106 -0
  293. package/src/theme/TOCCollapsible/CollapseButton/index.tsx +53 -0
  294. package/src/theme/TOCItems/Tree.tsx +114 -0
  295. package/src/theme/infima.styles.ts +1458 -0
  296. package/src/theme/reset.styles.ts +82 -0
  297. package/src/theme/theme.d.ts +598 -0
@@ -0,0 +1,124 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
5
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
6
+ * Side Public License, v 1.
7
+ */
8
+
9
+ import React, { type ReactNode, useState, useCallback, JSX } from 'react';
10
+ import clsx from 'clsx';
11
+ import { css } from '@emotion/react';
12
+ import {
13
+ prefersReducedMotion,
14
+ ThemeClassNames,
15
+ } from '@docusaurus/theme-common';
16
+ import { useDocsSidebar } from '@docusaurus/plugin-content-docs/client';
17
+ import { useLocation } from '@docusaurus/router';
18
+ import DocSidebar from '@theme-original/DocSidebar';
19
+ import type { Props } from '@theme-original/DocRoot/Layout/Sidebar';
20
+ import ExpandButton from '@theme-original/DocRoot/Layout/Sidebar/ExpandButton';
21
+
22
+ // converted from css modules to Emotion
23
+ const styles = {
24
+ docSidebarContainer: css`
25
+ display: none;
26
+
27
+ @media (min-width: 997px) {
28
+ // ensure scrolling still works
29
+ display: flex;
30
+ width: var(--doc-sidebar-width);
31
+ margin-top: calc(-1 * var(--ifm-navbar-height));
32
+ border-right: 1px solid var(--ifm-toc-border-color);
33
+ will-change: width;
34
+ transition: width var(--ifm-transition-fast) ease;
35
+ clip-path: inset(0);
36
+ }
37
+
38
+ .theme-doc-sidebar-menu.menu__list {
39
+ padding-inline-end: var(--eui-size-s);
40
+ }
41
+ `,
42
+ docSidebarContainerHidden: css`
43
+ width: var(--doc-sidebar-hidden-width);
44
+ cursor: pointer;
45
+ `,
46
+ sidebarViewport: css`
47
+ top: 0;
48
+ position: sticky;
49
+ height: 100%;
50
+ max-height: 100vh;
51
+ `,
52
+ };
53
+
54
+ // Reset sidebar state when sidebar changes
55
+ // Use React key to unmount/remount the children
56
+ // See https://github.com/facebook/docusaurus/issues/3414
57
+ function ResetOnSidebarChange({ children }: { children: ReactNode }) {
58
+ const sidebar = useDocsSidebar();
59
+ return (
60
+ <React.Fragment key={sidebar?.name ?? 'noSidebar'}>
61
+ {children}
62
+ </React.Fragment>
63
+ );
64
+ }
65
+
66
+ export default function DocRootLayoutSidebar({
67
+ sidebar,
68
+ hiddenSidebarContainer,
69
+ setHiddenSidebarContainer,
70
+ }: Props): JSX.Element {
71
+ const { pathname } = useLocation();
72
+
73
+ const [hiddenSidebar, setHiddenSidebar] = useState(false);
74
+ const toggleSidebar = useCallback(() => {
75
+ if (hiddenSidebar) {
76
+ setHiddenSidebar(false);
77
+ }
78
+ // onTransitionEnd won't fire when sidebar animation is disabled
79
+ // fixes https://github.com/facebook/docusaurus/issues/8918
80
+ if (!hiddenSidebar && prefersReducedMotion()) {
81
+ setHiddenSidebar(true);
82
+ }
83
+ setHiddenSidebarContainer((value) => !value);
84
+ }, [setHiddenSidebarContainer, hiddenSidebar]);
85
+
86
+ return (
87
+ <aside
88
+ className={clsx(
89
+ ThemeClassNames.docs.docSidebarContainer,
90
+ styles.docSidebarContainer.name // adding the name here to preserve the functionality of the class check further down
91
+ )}
92
+ css={[
93
+ styles.docSidebarContainer,
94
+ hiddenSidebarContainer && styles.docSidebarContainerHidden,
95
+ ]}
96
+ onTransitionEnd={(e) => {
97
+ if (
98
+ !e.currentTarget.classList.contains(styles.docSidebarContainer.name!)
99
+ ) {
100
+ return;
101
+ }
102
+
103
+ if (hiddenSidebarContainer) {
104
+ setHiddenSidebar(true);
105
+ }
106
+ }}
107
+ >
108
+ <ResetOnSidebarChange>
109
+ <div
110
+ className={clsx(hiddenSidebar && 'sidebarViewportHidden')}
111
+ css={styles.sidebarViewport}
112
+ >
113
+ <DocSidebar
114
+ sidebar={sidebar}
115
+ path={pathname}
116
+ onCollapse={toggleSidebar}
117
+ isHidden={hiddenSidebar}
118
+ />
119
+ {hiddenSidebar && <ExpandButton toggleSidebar={toggleSidebar} />}
120
+ </div>
121
+ </ResetOnSidebarChange>
122
+ </aside>
123
+ );
124
+ }
@@ -0,0 +1,72 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
5
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
6
+ * Side Public License, v 1.
7
+ */
8
+
9
+ import { useEffect, useState, JSX } from 'react';
10
+ import { css } from '@emotion/react';
11
+ import { useDocsSidebar } from '@docusaurus/plugin-content-docs/client';
12
+ import useIsBrowser from '@docusaurus/useIsBrowser';
13
+ import BackToTopButton from '@theme-original/BackToTopButton';
14
+ import type { Props } from '@theme-original/DocRoot/Layout';
15
+ import DocRootLayoutSidebar from '@theme-original/DocRoot/Layout/Sidebar';
16
+
17
+ import DocRootLayoutMain from './Main';
18
+
19
+ // converted from css modules to Emotion
20
+ const styles = {
21
+ docRoot: css`
22
+ display: flex;
23
+ width: 100%;
24
+ `,
25
+ docsWrapper: css`
26
+ display: flex;
27
+ flex: 1 0 auto;
28
+ `,
29
+ };
30
+
31
+ export default function DocRootLayout({ children }: Props): JSX.Element {
32
+ const isBrowser = useIsBrowser();
33
+ const sidebar = useDocsSidebar();
34
+ const [hiddenSidebarContainer, setHiddenSidebarContainer] = useState(false);
35
+
36
+ // Replicate browser hash scroll behavior to trigger it after the MDX content
37
+ // is rendered. Timeout = 0 should do the job here just fine as the effect
38
+ // will get executed at next render cycle when all elements are (hopefully)
39
+ // already in the DOM.
40
+ useEffect(() => {
41
+ if (!isBrowser) {
42
+ return;
43
+ }
44
+
45
+ if (window.location.hash) {
46
+ setTimeout(() => {
47
+ const element = document.getElementById(
48
+ window.location.hash.substring(1)
49
+ );
50
+ element?.scrollIntoView(true);
51
+ }, 100);
52
+ }
53
+ }, [isBrowser]);
54
+
55
+ return (
56
+ <div css={styles.docsWrapper}>
57
+ <BackToTopButton />
58
+ <div css={styles.docRoot}>
59
+ {sidebar && (
60
+ <DocRootLayoutSidebar
61
+ sidebar={sidebar.items}
62
+ hiddenSidebarContainer={hiddenSidebarContainer}
63
+ setHiddenSidebarContainer={setHiddenSidebarContainer}
64
+ />
65
+ )}
66
+ <DocRootLayoutMain hiddenSidebarContainer={hiddenSidebarContainer}>
67
+ {children}
68
+ </DocRootLayoutMain>
69
+ </div>
70
+ </div>
71
+ );
72
+ }
@@ -0,0 +1,266 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
5
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
6
+ * Side Public License, v 1.
7
+ */
8
+
9
+ import { type ComponentProps, useEffect, useMemo, JSX } from 'react';
10
+ import clsx from 'clsx';
11
+ import { css, Interpolation, Theme } from '@emotion/react';
12
+ import {
13
+ ThemeClassNames,
14
+ useThemeConfig,
15
+ usePrevious,
16
+ Collapsible,
17
+ useCollapsible,
18
+ } from '@docusaurus/theme-common';
19
+ import { isSamePath } from '@docusaurus/theme-common/internal';
20
+ import {
21
+ isActiveSidebarItem,
22
+ findFirstSidebarItemLink,
23
+ useDocSidebarItemsExpandedState,
24
+ } from '@docusaurus/plugin-content-docs/client';
25
+ import Link from '@docusaurus/Link';
26
+ import { translate } from '@docusaurus/Translate';
27
+ import useIsBrowser from '@docusaurus/useIsBrowser';
28
+ import type { Props } from '@theme-original/DocSidebarItem/Category';
29
+ import { EuiIcon, useEuiMemoizedStyles, UseEuiTheme } from '@elastic/eui';
30
+
31
+ import DocSidebarItems from '../../DocSidebarItems';
32
+
33
+ const getStyles = ({ euiTheme }: UseEuiTheme) => ({
34
+ listItem: css`
35
+ --ifm-menu-color-background-hover: var(--eui-background-color-primary);
36
+ --ifm-menu-color-background-active: var(--eui-background-color-primary);
37
+
38
+ --ifm-menu-link-padding-horizontal: ${euiTheme.size.s};
39
+ --ifm-menu-link-padding-vertical: calc(${euiTheme.size.xs} + 2px);
40
+
41
+ .menu__link--sublist {
42
+ color: ${euiTheme.colors.text};
43
+ font-size: var(--eui-font-size-s);
44
+ line-height: var(--eui-line-height-s);
45
+ font-weight: ${euiTheme.font.weight.bold};
46
+ }
47
+
48
+ .menu__link--active {
49
+ border-radius: ${euiTheme.border.radius.small};
50
+ color: ${euiTheme.colors.primary};
51
+ }
52
+ `,
53
+ button: css`
54
+ padding: ${euiTheme.size.s};
55
+ `,
56
+ });
57
+
58
+ // If we navigate to a category and it becomes active, it should automatically
59
+ // expand itself
60
+ function useAutoExpandActiveCategory({
61
+ isActive,
62
+ collapsed,
63
+ updateCollapsed,
64
+ }: {
65
+ isActive: boolean;
66
+ collapsed: boolean;
67
+ updateCollapsed: (b: boolean) => void;
68
+ }) {
69
+ const wasActive = usePrevious(isActive);
70
+ useEffect(() => {
71
+ const justBecameActive = isActive && !wasActive;
72
+ if (justBecameActive && collapsed) {
73
+ updateCollapsed(false);
74
+ }
75
+ }, [isActive, wasActive, collapsed, updateCollapsed]);
76
+ }
77
+
78
+ /**
79
+ * When a collapsible category has no link, we still link it to its first child
80
+ * during SSR as a temporary fallback. This allows to be able to navigate inside
81
+ * the category even when JS fails to load, is delayed or simply disabled
82
+ * React hydration becomes an optional progressive enhancement
83
+ * see https://github.com/facebookincubator/infima/issues/36#issuecomment-772543188
84
+ * see https://github.com/facebook/docusaurus/issues/3030
85
+ */
86
+ function useCategoryHrefWithSSRFallback(
87
+ item: Props['item']
88
+ ): string | undefined {
89
+ const isBrowser = useIsBrowser();
90
+ return useMemo(() => {
91
+ if (item.href && !item.linkUnlisted) {
92
+ return item.href;
93
+ }
94
+ // In these cases, it's not necessary to render a fallback
95
+ // We skip the "findFirstCategoryLink" computation
96
+ if (isBrowser || !item.collapsible) {
97
+ return undefined;
98
+ }
99
+ return findFirstSidebarItemLink(item);
100
+ }, [item, isBrowser]);
101
+ }
102
+
103
+ function CollapseButton({
104
+ collapsed,
105
+ categoryLabel,
106
+ onClick,
107
+ ...rest
108
+ }: {
109
+ collapsed: boolean;
110
+ categoryLabel: string;
111
+ onClick: ComponentProps<'button'>['onClick'];
112
+ css?: Interpolation<Theme>;
113
+ }) {
114
+ return (
115
+ <button
116
+ aria-label={
117
+ collapsed
118
+ ? translate(
119
+ {
120
+ id: 'theme.DocSidebarItem.expandCategoryAriaLabel',
121
+ message: "Expand sidebar category '{label}'",
122
+ description: 'The ARIA label to expand the sidebar category',
123
+ },
124
+ { label: categoryLabel }
125
+ )
126
+ : translate(
127
+ {
128
+ id: 'theme.DocSidebarItem.collapseCategoryAriaLabel',
129
+ message: "Collapse sidebar category '{label}'",
130
+ description: 'The ARIA label to collapse the sidebar category',
131
+ },
132
+ { label: categoryLabel }
133
+ )
134
+ }
135
+ aria-expanded={!collapsed}
136
+ type="button"
137
+ className="clean-btn"
138
+ onClick={onClick}
139
+ {...rest}
140
+ >
141
+ <EuiIcon size="s" type={collapsed ? 'arrowRight' : 'arrowDown'} />
142
+ </button>
143
+ );
144
+ }
145
+
146
+ export default function DocSidebarItemCategory({
147
+ item,
148
+ onItemClick,
149
+ activePath,
150
+ level,
151
+ index,
152
+ ...props
153
+ }: Props): JSX.Element {
154
+ const { items, label, collapsible, className, href } = item;
155
+ const {
156
+ docs: {
157
+ sidebar: { autoCollapseCategories },
158
+ },
159
+ } = useThemeConfig();
160
+ const hrefWithSSRFallback = useCategoryHrefWithSSRFallback(item);
161
+
162
+ const isActive = isActiveSidebarItem(item, activePath);
163
+ const isCurrentPage = isSamePath(href, activePath);
164
+
165
+ const styles = useEuiMemoizedStyles(getStyles);
166
+
167
+ const { collapsed, setCollapsed } = useCollapsible({
168
+ // Active categories are always initialized as expanded. The default
169
+ // (`item.collapsed`) is only used for non-active categories.
170
+ initialState: () => {
171
+ if (!collapsible) {
172
+ return false;
173
+ }
174
+ return isActive ? false : item.collapsed;
175
+ },
176
+ });
177
+
178
+ const { expandedItem, setExpandedItem } = useDocSidebarItemsExpandedState();
179
+ // Use this instead of `setCollapsed`, because it is also reactive
180
+ const updateCollapsed = (toCollapsed: boolean = !collapsed) => {
181
+ setExpandedItem(toCollapsed ? null : index);
182
+ setCollapsed(toCollapsed);
183
+ };
184
+ useAutoExpandActiveCategory({ isActive, collapsed, updateCollapsed });
185
+ useEffect(() => {
186
+ if (
187
+ collapsible &&
188
+ expandedItem != null &&
189
+ expandedItem !== index &&
190
+ autoCollapseCategories
191
+ ) {
192
+ setCollapsed(true);
193
+ }
194
+ }, [collapsible, expandedItem, index, setCollapsed, autoCollapseCategories]);
195
+
196
+ return (
197
+ <li
198
+ className={clsx(
199
+ ThemeClassNames.docs.docSidebarItemCategory,
200
+ ThemeClassNames.docs.docSidebarItemCategoryLevel(level),
201
+ 'menu__list-item',
202
+ {
203
+ 'menu__list-item--collapsed': collapsed,
204
+ },
205
+ className
206
+ )}
207
+ css={styles.listItem}
208
+ >
209
+ <div
210
+ className={clsx('menu__list-item-collapsible', {
211
+ 'menu__list-item-collapsible--active': isCurrentPage && !collapsed,
212
+ })}
213
+ >
214
+ <Link
215
+ className={clsx('menu__link', {
216
+ 'menu__link--sublist': collapsible,
217
+ 'menu__link--active': isCurrentPage && !collapsed && isActive,
218
+ })}
219
+ onClick={
220
+ collapsible
221
+ ? (e) => {
222
+ onItemClick?.(item);
223
+ if (href) {
224
+ updateCollapsed(false);
225
+ } else {
226
+ e.preventDefault();
227
+ updateCollapsed();
228
+ }
229
+ }
230
+ : () => {
231
+ onItemClick?.(item);
232
+ }
233
+ }
234
+ aria-current={isCurrentPage ? 'page' : undefined}
235
+ role={collapsible && !href ? 'button' : undefined}
236
+ aria-expanded={collapsible && !href ? !collapsed : undefined}
237
+ href={collapsible ? hrefWithSSRFallback ?? '#' : hrefWithSSRFallback}
238
+ {...props}
239
+ >
240
+ {label}
241
+ </Link>
242
+ {collapsible && (
243
+ <CollapseButton
244
+ collapsed={collapsed}
245
+ categoryLabel={label}
246
+ onClick={(e) => {
247
+ e.preventDefault();
248
+ updateCollapsed();
249
+ }}
250
+ css={styles.button}
251
+ />
252
+ )}
253
+ </div>
254
+
255
+ <Collapsible lazy as="ul" className="menu__list" collapsed={collapsed}>
256
+ <DocSidebarItems
257
+ items={items}
258
+ tabIndex={collapsed ? -1 : 0}
259
+ onItemClick={onItemClick}
260
+ activePath={activePath}
261
+ level={level + 1}
262
+ />
263
+ </Collapsible>
264
+ </li>
265
+ );
266
+ }
@@ -0,0 +1,86 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
5
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
6
+ * Side Public License, v 1.
7
+ */
8
+
9
+ import { JSX } from 'react';
10
+ import clsx from 'clsx';
11
+ import { css } from '@emotion/react';
12
+ import { ThemeClassNames } from '@docusaurus/theme-common';
13
+ import { isActiveSidebarItem } from '@docusaurus/plugin-content-docs/client';
14
+ import Link from '@docusaurus/Link';
15
+ import isInternalUrl from '@docusaurus/isInternalUrl';
16
+ import IconExternalLink from '@theme-original/Icon/ExternalLink';
17
+ import type { Props } from '@theme-original/DocSidebarItem/Link';
18
+ import { useEuiMemoizedStyles, UseEuiTheme } from '@elastic/eui';
19
+
20
+ // converted from css modules to Emotion
21
+ const getStyles = ({ euiTheme }: UseEuiTheme) => ({
22
+ menuListItem: css`
23
+ .menu__link {
24
+ color: ${euiTheme.colors.text};
25
+ font-size: var(--eui-font-size-s);
26
+ line-height: var(--eui-line-height-s);
27
+ }
28
+
29
+ .menu__link--active {
30
+ border-radius: ${euiTheme.border.radius.small};
31
+ color: ${euiTheme.colors.primary};
32
+ font-weight: ${euiTheme.font.weight.bold};
33
+ }
34
+ `,
35
+ menuExternalLink: css`
36
+ align-items: center;
37
+ `,
38
+ });
39
+
40
+ export default function DocSidebarItemLink({
41
+ item,
42
+ onItemClick,
43
+ activePath,
44
+ level,
45
+ index,
46
+ ...props
47
+ }: Props): JSX.Element {
48
+ const { href, label, className, autoAddBaseUrl } = item;
49
+ const isActive = isActiveSidebarItem(item, activePath);
50
+ const isInternalLink = isInternalUrl(href);
51
+
52
+ const styles = useEuiMemoizedStyles(getStyles);
53
+
54
+ return (
55
+ <li
56
+ className={clsx(
57
+ ThemeClassNames.docs.docSidebarItemLink,
58
+ ThemeClassNames.docs.docSidebarItemLinkLevel(level),
59
+ 'menu__list-item',
60
+ className
61
+ )}
62
+ key={label}
63
+ css={styles.menuListItem}
64
+ >
65
+ <Link
66
+ className={clsx(
67
+ 'menu__link',
68
+ !isInternalLink && styles.menuExternalLink,
69
+ {
70
+ 'menu__link--active': isActive,
71
+ }
72
+ )}
73
+ autoAddBaseUrl={autoAddBaseUrl}
74
+ aria-current={isActive ? 'page' : undefined}
75
+ to={href}
76
+ {...(isInternalLink && {
77
+ onClick: onItemClick ? () => onItemClick(item) : undefined,
78
+ })}
79
+ {...props}
80
+ >
81
+ {label}
82
+ {!isInternalLink && <IconExternalLink />}
83
+ </Link>
84
+ </li>
85
+ );
86
+ }
@@ -0,0 +1,29 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
5
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
6
+ * Side Public License, v 1.
7
+ */
8
+
9
+ import { JSX } from 'react';
10
+ import type { Props } from '@theme-original/DocSidebarItem';
11
+ import DocSidebarItemHtml from '@theme-original/DocSidebarItem/Html';
12
+
13
+ import DocSidebarItemCategory from './Category';
14
+ import DocSidebarItemLink from './Link';
15
+
16
+ export default function DocSidebarItem({
17
+ item,
18
+ ...props
19
+ }: Props): JSX.Element | null {
20
+ switch (item.type) {
21
+ case 'category':
22
+ return <DocSidebarItemCategory item={item} {...props} />;
23
+ case 'html':
24
+ return <DocSidebarItemHtml item={item} {...props} />;
25
+ case 'link':
26
+ default:
27
+ return <DocSidebarItemLink item={item} {...props} />;
28
+ }
29
+ }
@@ -0,0 +1,30 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
5
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
6
+ * Side Public License, v 1.
7
+ */
8
+
9
+ import { memo, JSX } from 'react';
10
+ import {
11
+ DocSidebarItemsExpandedStateProvider,
12
+ useVisibleSidebarItems,
13
+ } from '@docusaurus/plugin-content-docs/client';
14
+ import type { Props } from '@theme-original/DocSidebarItems';
15
+
16
+ import DocSidebarItem from '../DocSidebarItem';
17
+
18
+ function DocSidebarItems({ items, ...props }: Props): JSX.Element {
19
+ const visibleItems = useVisibleSidebarItems(items, props.activePath);
20
+ return (
21
+ <DocSidebarItemsExpandedStateProvider>
22
+ {visibleItems.map((item, index) => (
23
+ <DocSidebarItem key={index} item={item} index={index} {...props} />
24
+ ))}
25
+ </DocSidebarItemsExpandedStateProvider>
26
+ );
27
+ }
28
+
29
+ // Optimize sidebar at each "level"
30
+ export default memo(DocSidebarItems);
@@ -0,0 +1,50 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
5
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
6
+ * Side Public License, v 1.
7
+ */
8
+
9
+ import { JSX } from 'react';
10
+ import { css } from '@emotion/react';
11
+ import Translate from '@docusaurus/Translate';
12
+ import type { Props } from '@theme-original/EditThisPage';
13
+ import {
14
+ EuiButton,
15
+ euiButtonColor,
16
+ useEuiMemoizedStyles,
17
+ UseEuiTheme,
18
+ } from '@elastic/eui';
19
+
20
+ const getStyles = (theme: UseEuiTheme) => {
21
+ const buttonColor = euiButtonColor(theme, 'primary');
22
+
23
+ return {
24
+ editPage: css`
25
+ // overriding Docusaurus link hover styles to preserve button styles
26
+ --ifm-link-hover-color: ${buttonColor.color};
27
+ `,
28
+ };
29
+ };
30
+
31
+ export default function EditThisPage({ editUrl, ...rest }: Props): JSX.Element {
32
+ const styles = useEuiMemoizedStyles(getStyles);
33
+
34
+ return (
35
+ <EuiButton
36
+ {...rest}
37
+ href={editUrl}
38
+ iconType="pencil"
39
+ color="primary"
40
+ css={styles.editPage}
41
+ >
42
+ <Translate
43
+ id="theme.common.editThisPage"
44
+ description="The link label to edit the current page"
45
+ >
46
+ Edit this page
47
+ </Translate>
48
+ </EuiButton>
49
+ );
50
+ }