@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.
- package/LICENSE.txt +6 -0
- package/README.md +292 -0
- package/lib/.tsbuildinfo-client +1 -0
- package/lib/components/badge/index.d.ts +1 -0
- package/lib/components/badge/index.js +9 -0
- package/lib/components/codesandbox_icon/codesandbox_icon.d.ts +4 -0
- package/lib/components/codesandbox_icon/codesandbox_icon.js +2 -0
- package/lib/components/codesandbox_icon/index.d.ts +1 -0
- package/lib/components/codesandbox_icon/index.js +8 -0
- package/lib/components/demo/actions_bar/actions_bar.d.ts +10 -0
- package/lib/components/demo/actions_bar/actions_bar.js +34 -0
- package/lib/components/demo/actions_bar/index.d.ts +1 -0
- package/lib/components/demo/actions_bar/index.js +8 -0
- package/lib/components/demo/code_transformer.d.ts +18 -0
- package/lib/components/demo/code_transformer.js +39 -0
- package/lib/components/demo/codesandbox/find_external_dependencies.d.ts +5 -0
- package/lib/components/demo/codesandbox/find_external_dependencies.js +30 -0
- package/lib/components/demo/codesandbox/index.d.ts +1 -0
- package/lib/components/demo/codesandbox/index.js +8 -0
- package/lib/components/demo/codesandbox/open_action.d.ts +16 -0
- package/lib/components/demo/codesandbox/open_action.js +91 -0
- package/lib/components/demo/context.d.ts +14 -0
- package/lib/components/demo/context.js +13 -0
- package/lib/components/demo/create_demo.d.ts +5 -0
- package/lib/components/demo/create_demo.js +13 -0
- package/lib/components/demo/demo.d.ts +23 -0
- package/lib/components/demo/demo.js +61 -0
- package/lib/components/demo/editor/editor.d.ts +1 -0
- package/lib/components/demo/editor/editor.js +39 -0
- package/lib/components/demo/editor/index.d.ts +1 -0
- package/lib/components/demo/editor/index.js +8 -0
- package/lib/components/demo/index.d.ts +3 -0
- package/lib/components/demo/index.js +10 -0
- package/lib/components/demo/preview/index.d.ts +1 -0
- package/lib/components/demo/preview/index.js +8 -0
- package/lib/components/demo/preview/preview.d.ts +7 -0
- package/lib/components/demo/preview/preview.js +36 -0
- package/lib/components/demo/scope.d.ts +1 -0
- package/lib/components/demo/scope.js +12 -0
- package/lib/components/demo/source/get_source_from_children.d.ts +11 -0
- package/lib/components/demo/source/get_source_from_children.js +42 -0
- package/lib/components/demo/source/index.d.ts +1 -0
- package/lib/components/demo/source/index.js +8 -0
- package/lib/components/demo/source/source.d.ts +6 -0
- package/lib/components/demo/source/source.js +25 -0
- package/lib/components/figma_embed/index.d.ts +5 -0
- package/lib/components/figma_embed/index.js +36 -0
- package/lib/components/guideline/guideline.d.ts +10 -0
- package/lib/components/guideline/guideline.js +68 -0
- package/lib/components/guideline/guideline_text.d.ts +6 -0
- package/lib/components/guideline/guideline_text.js +28 -0
- package/lib/components/guideline/index.d.ts +2 -0
- package/lib/components/guideline/index.js +9 -0
- package/lib/components/guideline/types.d.ts +1 -0
- package/lib/components/guideline/types.js +8 -0
- package/lib/components/high_contrast_mode_toggle/index.d.ts +1 -0
- package/lib/components/high_contrast_mode_toggle/index.js +15 -0
- package/lib/components/icon/index.d.ts +1 -0
- package/lib/components/icon/index.js +9 -0
- package/lib/components/index.d.ts +7 -0
- package/lib/components/index.js +14 -0
- package/lib/components/navbar_item/index.d.ts +19 -0
- package/lib/components/navbar_item/index.js +84 -0
- package/lib/components/prop_table/definition_types.d.ts +43 -0
- package/lib/components/prop_table/definition_types.js +8 -0
- package/lib/components/prop_table/extended_types.d.ts +5 -0
- package/lib/components/prop_table/extended_types.js +27 -0
- package/lib/components/prop_table/extended_types_info.d.ts +26 -0
- package/lib/components/prop_table/extended_types_info.js +34 -0
- package/lib/components/prop_table/index.d.ts +1 -0
- package/lib/components/prop_table/index.js +8 -0
- package/lib/components/prop_table/prop_table.d.ts +8 -0
- package/lib/components/prop_table/prop_table.js +115 -0
- package/lib/components/theme_context/index.d.ts +16 -0
- package/lib/components/theme_context/index.js +103 -0
- package/lib/components/theme_context/theme_overrides.d.ts +2 -0
- package/lib/components/theme_context/theme_overrides.js +12 -0
- package/lib/components/version_switcher/index.d.ts +23 -0
- package/lib/components/version_switcher/index.js +51 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +19 -0
- package/lib/index.js.map +1 -0
- package/lib/theme/Admonition/Types.d.ts +3 -0
- package/lib/theme/Admonition/Types.js +51 -0
- package/lib/theme/CodeBlock/index.d.ts +3 -0
- package/lib/theme/CodeBlock/index.js +35 -0
- package/lib/theme/ColorModeToggle/index.d.ts +10 -0
- package/lib/theme/ColorModeToggle/index.js +51 -0
- package/lib/theme/Demo/actions.d.ts +8 -0
- package/lib/theme/Demo/actions.js +8 -0
- package/lib/theme/Demo/default_scope.d.ts +3 -0
- package/lib/theme/Demo/default_scope.js +17 -0
- package/lib/theme/DocBreadcrumbs/Items/Home/index.d.ts +2 -0
- package/lib/theme/DocBreadcrumbs/Items/Home/index.js +15 -0
- package/lib/theme/DocBreadcrumbs/Items/item.styles.d.ts +5 -0
- package/lib/theme/DocBreadcrumbs/Items/item.styles.js +40 -0
- package/lib/theme/DocBreadcrumbs/index.d.ts +2 -0
- package/lib/theme/DocBreadcrumbs/index.js +63 -0
- package/lib/theme/DocItem/Content/index.d.ts +3 -0
- package/lib/theme/DocItem/Content/index.js +44 -0
- package/lib/theme/DocItem/Footer/index.d.ts +2 -0
- package/lib/theme/DocItem/Footer/index.js +17 -0
- package/lib/theme/DocItem/Layout/index.d.ts +3 -0
- package/lib/theme/DocItem/Layout/index.js +71 -0
- package/lib/theme/DocItem/Metadata/index.d.ts +2 -0
- package/lib/theme/DocItem/Metadata/index.js +7 -0
- package/lib/theme/DocItem/Paginator/index.d.ts +6 -0
- package/lib/theme/DocItem/Paginator/index.js +11 -0
- package/lib/theme/DocItem/TOC/Desktop/index.d.ts +2 -0
- package/lib/theme/DocItem/TOC/Desktop/index.js +8 -0
- package/lib/theme/DocItem/TOC/Mobile/index.d.ts +2 -0
- package/lib/theme/DocItem/TOC/Mobile/index.js +17 -0
- package/lib/theme/DocItem/index.d.ts +3 -0
- package/lib/theme/DocItem/index.js +10 -0
- package/lib/theme/DocPaginator/index.d.ts +3 -0
- package/lib/theme/DocPaginator/index.js +19 -0
- package/lib/theme/DocRoot/Layout/Main/index.d.ts +3 -0
- package/lib/theme/DocRoot/Layout/Main/index.js +35 -0
- package/lib/theme/DocRoot/Layout/Sidebar/index.d.ts +3 -0
- package/lib/theme/DocRoot/Layout/Sidebar/index.js +81 -0
- package/lib/theme/DocRoot/Layout/index.d.ts +3 -0
- package/lib/theme/DocRoot/Layout/index.js +47 -0
- package/lib/theme/DocSidebarItem/Category/index.d.ts +3 -0
- package/lib/theme/DocSidebarItem/Category/index.js +146 -0
- package/lib/theme/DocSidebarItem/Link/index.d.ts +3 -0
- package/lib/theme/DocSidebarItem/Link/index.js +39 -0
- package/lib/theme/DocSidebarItem/index.d.ts +3 -0
- package/lib/theme/DocSidebarItem/index.js +15 -0
- package/lib/theme/DocSidebarItems/index.d.ts +5 -0
- package/lib/theme/DocSidebarItems/index.js +17 -0
- package/lib/theme/EditThisPage/index.d.ts +3 -0
- package/lib/theme/EditThisPage/index.js +17 -0
- package/lib/theme/Footer/index.d.ts +2 -0
- package/lib/theme/Footer/index.js +43 -0
- package/lib/theme/Heading/index.d.ts +3 -0
- package/lib/theme/Heading/index.js +49 -0
- package/lib/theme/Logo/index.d.ts +3 -0
- package/lib/theme/Logo/index.js +80 -0
- package/lib/theme/MDXComponents/A.d.ts +6 -0
- package/lib/theme/MDXComponents/A.js +17 -0
- package/lib/theme/MDXComponents/Blockquote.d.ts +2 -0
- package/lib/theme/MDXComponents/Blockquote.js +18 -0
- package/lib/theme/MDXComponents/Code.d.ts +6 -0
- package/lib/theme/MDXComponents/Code.js +35 -0
- package/lib/theme/MDXComponents/Heading.d.ts +4 -0
- package/lib/theme/MDXComponents/Heading.js +4 -0
- package/lib/theme/MDXComponents/ListItem.d.ts +2 -0
- package/lib/theme/MDXComponents/ListItem.js +5 -0
- package/lib/theme/MDXComponents/OrderedList.d.ts +2 -0
- package/lib/theme/MDXComponents/OrderedList.js +11 -0
- package/lib/theme/MDXComponents/Paragraph.d.ts +2 -0
- package/lib/theme/MDXComponents/Paragraph.js +18 -0
- package/lib/theme/MDXComponents/Table.d.ts +2 -0
- package/lib/theme/MDXComponents/Table.js +3 -0
- package/lib/theme/MDXComponents/TableBody.d.ts +2 -0
- package/lib/theme/MDXComponents/TableBody.js +3 -0
- package/lib/theme/MDXComponents/TableDataCell.d.ts +2 -0
- package/lib/theme/MDXComponents/TableDataCell.js +3 -0
- package/lib/theme/MDXComponents/TableHeader.d.ts +2 -0
- package/lib/theme/MDXComponents/TableHeader.js +3 -0
- package/lib/theme/MDXComponents/TableHeaderCell.d.ts +2 -0
- package/lib/theme/MDXComponents/TableHeaderCell.js +3 -0
- package/lib/theme/MDXComponents/TableRow.d.ts +2 -0
- package/lib/theme/MDXComponents/TableRow.js +3 -0
- package/lib/theme/MDXComponents/UnorderedList.d.ts +2 -0
- package/lib/theme/MDXComponents/UnorderedList.js +11 -0
- package/lib/theme/MDXComponents/index.d.ts +2 -0
- package/lib/theme/MDXComponents/index.js +46 -0
- package/lib/theme/MDXContent/index.d.ts +6 -0
- package/lib/theme/MDXContent/index.js +4 -0
- package/lib/theme/Navbar/Content/index.d.ts +7 -0
- package/lib/theme/Navbar/Content/index.js +149 -0
- package/lib/theme/Navbar/Layout/index.d.ts +6 -0
- package/lib/theme/Navbar/Layout/index.js +59 -0
- package/lib/theme/Navbar/MobileSidebar/Header/index.d.ts +7 -0
- package/lib/theme/Navbar/MobileSidebar/Header/index.js +46 -0
- package/lib/theme/Navbar/MobileSidebar/Layout/index.d.ts +6 -0
- package/lib/theme/Navbar/MobileSidebar/Layout/index.js +26 -0
- package/lib/theme/Navbar/MobileSidebar/index.d.ts +7 -0
- package/lib/theme/Navbar/MobileSidebar/index.js +14 -0
- package/lib/theme/NavbarItem/DropdownNavbarItem/index.d.ts +3 -0
- package/lib/theme/NavbarItem/DropdownNavbarItem/index.js +94 -0
- package/lib/theme/NavbarItem/NavbarNavLink.d.ts +7 -0
- package/lib/theme/NavbarItem/NavbarNavLink.js +48 -0
- package/lib/theme/PaginatorNavLink/index.d.ts +3 -0
- package/lib/theme/PaginatorNavLink/index.js +43 -0
- package/lib/theme/Root.d.ts +3 -0
- package/lib/theme/Root.js +66 -0
- package/lib/theme/Root.styles.d.ts +2 -0
- package/lib/theme/Root.styles.js +111 -0
- package/lib/theme/TOCCollapsible/CollapseButton/index.d.ts +3 -0
- package/lib/theme/TOCCollapsible/CollapseButton/index.js +23 -0
- package/lib/theme/TOCItems/Tree.d.ts +5 -0
- package/lib/theme/TOCItems/Tree.js +80 -0
- package/lib/theme/infima.styles.d.ts +1 -0
- package/lib/theme/infima.styles.js +1456 -0
- package/lib/theme/reset.styles.d.ts +2 -0
- package/lib/theme/reset.styles.js +79 -0
- package/package.json +61 -0
- package/src/components/badge/index.ts +11 -0
- package/src/components/codesandbox_icon/codesandbox_icon.tsx +24 -0
- package/src/components/codesandbox_icon/index.ts +9 -0
- package/src/components/demo/actions_bar/actions_bar.tsx +95 -0
- package/src/components/demo/actions_bar/index.ts +9 -0
- package/src/components/demo/code_transformer.ts +44 -0
- package/src/components/demo/codesandbox/find_external_dependencies.ts +34 -0
- package/src/components/demo/codesandbox/index.ts +9 -0
- package/src/components/demo/codesandbox/open_action.tsx +132 -0
- package/src/components/demo/context.ts +30 -0
- package/src/components/demo/create_demo.tsx +17 -0
- package/src/components/demo/demo.tsx +143 -0
- package/src/components/demo/editor/editor.tsx +51 -0
- package/src/components/demo/editor/index.ts +9 -0
- package/src/components/demo/index.ts +11 -0
- package/src/components/demo/preview/index.ts +9 -0
- package/src/components/demo/preview/preview.tsx +77 -0
- package/src/components/demo/scope.ts +14 -0
- package/src/components/demo/source/get_source_from_children.ts +59 -0
- package/src/components/demo/source/index.ts +9 -0
- package/src/components/demo/source/source.tsx +36 -0
- package/src/components/figma_embed/index.tsx +57 -0
- package/src/components/guideline/guideline.tsx +121 -0
- package/src/components/guideline/guideline_text.tsx +51 -0
- package/src/components/guideline/index.ts +10 -0
- package/src/components/guideline/types.ts +9 -0
- package/src/components/high_contrast_mode_toggle/index.tsx +28 -0
- package/src/components/icon/index.ts +11 -0
- package/src/components/index.ts +15 -0
- package/src/components/navbar_item/index.tsx +164 -0
- package/src/components/prop_table/definition_types.ts +53 -0
- package/src/components/prop_table/extended_types.tsx +66 -0
- package/src/components/prop_table/extended_types_info.ts +35 -0
- package/src/components/prop_table/index.ts +9 -0
- package/src/components/prop_table/prop_table.tsx +235 -0
- package/src/components/theme_context/index.tsx +156 -0
- package/src/components/theme_context/theme_overrides.ts +15 -0
- package/src/components/version_switcher/index.tsx +144 -0
- package/src/index.ts +21 -0
- package/src/theme/Admonition/Types.tsx +85 -0
- package/src/theme/CodeBlock/index.tsx +57 -0
- package/src/theme/ColorModeToggle/index.tsx +93 -0
- package/src/theme/Demo/actions.tsx +20 -0
- package/src/theme/Demo/default_scope.ts +19 -0
- package/src/theme/DocBreadcrumbs/Items/Home/index.tsx +38 -0
- package/src/theme/DocBreadcrumbs/Items/item.styles.ts +43 -0
- package/src/theme/DocBreadcrumbs/index.tsx +144 -0
- package/src/theme/DocItem/Content/index.tsx +75 -0
- package/src/theme/DocItem/Footer/index.tsx +59 -0
- package/src/theme/DocItem/Layout/index.tsx +112 -0
- package/src/theme/DocItem/Metadata/index.tsx +23 -0
- package/src/theme/DocItem/Paginator/index.tsx +20 -0
- package/src/theme/DocItem/TOC/Desktop/index.tsx +24 -0
- package/src/theme/DocItem/TOC/Mobile/index.tsx +35 -0
- package/src/theme/DocItem/index.tsx +30 -0
- package/src/theme/DocPaginator/index.tsx +64 -0
- package/src/theme/DocRoot/Layout/Main/index.tsx +61 -0
- package/src/theme/DocRoot/Layout/Sidebar/index.tsx +124 -0
- package/src/theme/DocRoot/Layout/index.tsx +72 -0
- package/src/theme/DocSidebarItem/Category/index.tsx +266 -0
- package/src/theme/DocSidebarItem/Link/index.tsx +86 -0
- package/src/theme/DocSidebarItem/index.tsx +29 -0
- package/src/theme/DocSidebarItems/index.tsx +30 -0
- package/src/theme/EditThisPage/index.tsx +50 -0
- package/src/theme/Footer/index.tsx +67 -0
- package/src/theme/Heading/index.tsx +94 -0
- package/src/theme/Logo/index.tsx +146 -0
- package/src/theme/MDXComponents/A.tsx +33 -0
- package/src/theme/MDXComponents/Blockquote.tsx +35 -0
- package/src/theme/MDXComponents/Code.tsx +60 -0
- package/src/theme/MDXComponents/Heading.tsx +16 -0
- package/src/theme/MDXComponents/ListItem.tsx +20 -0
- package/src/theme/MDXComponents/OrderedList.tsx +26 -0
- package/src/theme/MDXComponents/Paragraph.tsx +33 -0
- package/src/theme/MDXComponents/Table.tsx +16 -0
- package/src/theme/MDXComponents/TableBody.tsx +16 -0
- package/src/theme/MDXComponents/TableDataCell.tsx +20 -0
- package/src/theme/MDXComponents/TableHeader.tsx +16 -0
- package/src/theme/MDXComponents/TableHeaderCell.tsx +20 -0
- package/src/theme/MDXComponents/TableRow.tsx +16 -0
- package/src/theme/MDXComponents/UnorderedList.tsx +26 -0
- package/src/theme/MDXComponents/index.ts +61 -0
- package/src/theme/MDXContent/index.tsx +22 -0
- package/src/theme/Navbar/Content/index.tsx +262 -0
- package/src/theme/Navbar/Layout/index.tsx +100 -0
- package/src/theme/Navbar/MobileSidebar/Header/index.tsx +89 -0
- package/src/theme/Navbar/MobileSidebar/Layout/index.tsx +44 -0
- package/src/theme/Navbar/MobileSidebar/index.tsx +46 -0
- package/src/theme/NavbarItem/DropdownNavbarItem/index.tsx +200 -0
- package/src/theme/NavbarItem/NavbarNavLink.tsx +141 -0
- package/src/theme/PaginatorNavLink/index.tsx +72 -0
- package/src/theme/Root.styles.ts +122 -0
- package/src/theme/Root.tsx +106 -0
- package/src/theme/TOCCollapsible/CollapseButton/index.tsx +53 -0
- package/src/theme/TOCItems/Tree.tsx +114 -0
- package/src/theme/infima.styles.ts +1458 -0
- package/src/theme/reset.styles.ts +82 -0
- 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
|
+
}
|