@redocly/theme 0.15.1 → 0.17.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/lib/I18n/LanguagePicker.js +2 -1
- package/lib/components/Breadcrumbs/Breadcrumb.js +0 -1
- package/lib/components/Breadcrumbs/Breadcrumbs.js +6 -0
- package/lib/components/Cards/Card.d.ts +1 -0
- package/lib/components/Cards/Card.js +1 -1
- package/lib/components/Cards/CardsBlock.d.ts +1 -3
- package/lib/components/Cards/CardsBlock.js +2 -1
- package/lib/components/Catalog/Catalog.js +1 -1
- package/lib/components/CodeBlock/CodeBlock.d.ts +1 -3
- package/lib/components/CodeBlock/CodeBlock.js +2 -1
- package/lib/components/CodeSample/CodeSample.d.ts +2 -1
- package/lib/components/CodeSample/CodeSample.js +3 -2
- package/lib/components/ColorModeSwitcher/ColorModeSwitcher.d.ts +5 -1
- package/lib/components/ColorModeSwitcher/ColorModeSwitcher.js +3 -2
- package/lib/components/Feedback/Comment.d.ts +1 -1
- package/lib/components/Feedback/Comment.js +3 -3
- package/lib/components/Feedback/Rating.d.ts +1 -1
- package/lib/components/Feedback/Rating.js +2 -2
- package/lib/components/Feedback/Reasons.d.ts +1 -1
- package/lib/components/Feedback/Reasons.js +2 -2
- package/lib/components/Feedback/ReportDialog.js +1 -1
- package/lib/components/Feedback/Sentiment.d.ts +1 -1
- package/lib/components/Feedback/Sentiment.js +2 -2
- package/lib/components/Feedback/types.d.ts +5 -0
- package/lib/components/Footer/CustomFooter.d.ts +2 -1
- package/lib/components/Footer/CustomFooter.js +2 -2
- package/lib/components/Footer/CustomFooterNavItem.d.ts +2 -1
- package/lib/components/Footer/CustomFooterNavItem.js +2 -2
- package/lib/components/Footer/Footer.d.ts +2 -1
- package/lib/components/Footer/Footer.js +2 -2
- package/lib/components/Footer/FooterColumn.d.ts +2 -1
- package/lib/components/Footer/FooterColumn.js +2 -2
- package/lib/components/Footer/FooterColumns.d.ts +2 -1
- package/lib/components/Footer/FooterColumns.js +2 -2
- package/lib/components/Footer/FooterCopyright.d.ts +2 -1
- package/lib/components/Footer/FooterCopyright.js +2 -2
- package/lib/components/JsonViewer/JsonViewer.d.ts +1 -3
- package/lib/components/LastUpdated/LastUpdated.d.ts +1 -0
- package/lib/components/LastUpdated/LastUpdated.js +1 -1
- package/lib/components/Markdown/ContainerWrapper.d.ts +1 -3
- package/lib/components/Markdown/ContainerWrapper.js +2 -1
- package/lib/components/Markdown/Heading.d.ts +2 -1
- package/lib/components/Markdown/Heading.js +2 -2
- package/lib/components/Markdown/MarkdownLayout.d.ts +2 -1
- package/lib/components/Markdown/MarkdownLayout.js +2 -2
- package/lib/components/Markdown/MarkdownWrapper.d.ts +1 -3
- package/lib/components/Markdown/MarkdownWrapper.js +2 -1
- package/lib/components/Markdown/Mermaid.d.ts +2 -1
- package/lib/components/Markdown/Mermaid.js +3 -2
- package/lib/components/Markdown/PageWrapper.d.ts +1 -3
- package/lib/components/Markdown/PageWrapper.js +2 -1
- package/lib/components/Markdown/Sup.d.ts +3 -1
- package/lib/components/Markdown/Sup.js +2 -2
- package/lib/components/Menu/Menu.d.ts +3 -1
- package/lib/components/Menu/Menu.js +6 -4
- package/lib/components/Menu/MenuContainer.d.ts +1 -0
- package/lib/components/Menu/MenuContainer.js +2 -1
- package/lib/components/Menu/MenuGroup.d.ts +2 -1
- package/lib/components/Menu/MenuGroup.js +3 -3
- package/lib/components/Menu/MenuItem.d.ts +1 -1
- package/lib/components/Menu/MenuItem.js +19 -3
- package/lib/components/Menu/MenuItemLabel.d.ts +1 -3
- package/lib/components/Menu/MenuItemLabel.js +18 -9
- package/lib/components/Menu/MenuItemSwitch.js +4 -2
- package/lib/components/Menu/MenuLink.d.ts +1 -3
- package/lib/components/Menu/MenuLink.js +2 -1
- package/lib/components/Menu/MenuLinkItem.d.ts +1 -1
- package/lib/components/Menu/MenuLinkItem.js +2 -2
- package/lib/components/Menu/MobileMenu.d.ts +11 -0
- package/lib/components/Menu/MobileMenu.js +179 -0
- package/lib/components/Menu/MobileMenuGroup.d.ts +9 -0
- package/lib/components/Menu/MobileMenuGroup.js +53 -0
- package/lib/components/Menu/index.d.ts +1 -0
- package/lib/components/Menu/index.js +1 -0
- package/lib/components/Navbar/BurgerButton.d.ts +5 -0
- package/lib/components/Navbar/BurgerButton.js +29 -0
- package/lib/components/Navbar/MobileUserProfile.d.ts +2 -0
- package/lib/components/Navbar/MobileUserProfile.js +78 -0
- package/lib/components/Navbar/Navbar.d.ts +1 -0
- package/lib/components/Navbar/Navbar.js +29 -9
- package/lib/components/Navbar/NavbarDropdown.d.ts +2 -1
- package/lib/components/Navbar/NavbarDropdown.js +2 -2
- package/lib/components/Navbar/NavbarMenu.d.ts +2 -1
- package/lib/components/Navbar/NavbarMenu.js +2 -2
- package/lib/components/NavbarLogo/NavbarLogo.d.ts +2 -1
- package/lib/components/NavbarLogo/NavbarLogo.js +2 -2
- package/lib/components/OpenApiDocs/DevOnboardingTryItSecurity.d.ts +1 -1
- package/lib/components/OpenApiDocs/DevOnboardingTryItSecurity.js +1 -1
- package/lib/components/PageNavigation/NextButton.d.ts +2 -1
- package/lib/components/PageNavigation/NextButton.js +2 -2
- package/lib/components/PageNavigation/PageNavigation.d.ts +2 -1
- package/lib/components/PageNavigation/PageNavigation.js +2 -2
- package/lib/components/PageNavigation/PreviousButton.d.ts +2 -1
- package/lib/components/PageNavigation/PreviousButton.js +2 -2
- package/lib/components/Panel/PanelBody.d.ts +1 -3
- package/lib/components/Panel/PanelBody.js +2 -1
- package/lib/components/Panel/PanelHeader.d.ts +1 -3
- package/lib/components/Panel/PanelHeader.js +2 -1
- package/lib/components/Panel/PanelHeaderTitle.d.ts +1 -3
- package/lib/components/Panel/PanelHeaderTitle.js +2 -1
- package/lib/components/Profile/Profile.d.ts +6 -0
- package/lib/components/Profile/Profile.js +7 -7
- package/lib/components/Profile/types.d.ts +1 -0
- package/lib/components/SamplesPanelControls/SamplesPanelControls.d.ts +2 -6
- package/lib/components/SamplesPanelControls/SamplesPanelControls.js +2 -1
- package/lib/components/Search/CancelSearch.d.ts +2 -1
- package/lib/components/Search/CancelSearch.js +2 -2
- package/lib/components/Search/ClearIcon.d.ts +1 -3
- package/lib/components/Search/ClearIcon.js +2 -1
- package/lib/components/Search/ClockBackwardsIcon.d.ts +1 -4
- package/lib/components/Search/Input.d.ts +1 -3
- package/lib/components/Search/Input.js +2 -1
- package/lib/components/Search/InputWrapper.d.ts +2 -1
- package/lib/components/Search/InputWrapper.js +2 -2
- package/lib/components/Search/MobileSearchTrigger.d.ts +2 -1
- package/lib/components/Search/MobileSearchTrigger.js +6 -5
- package/lib/components/Search/Popover.d.ts +1 -3
- package/lib/components/Search/Popover.js +3 -2
- package/lib/components/Search/RecentSearches.d.ts +2 -1
- package/lib/components/Search/RecentSearches.js +3 -3
- package/lib/components/Search/Search.d.ts +3 -1
- package/lib/components/Search/Search.js +2 -2
- package/lib/components/Search/SearchDialog.d.ts +2 -1
- package/lib/components/Search/SearchDialog.js +4 -3
- package/lib/components/Search/SearchIcon.d.ts +1 -3
- package/lib/components/Search/SearchIcon.js +2 -1
- package/lib/components/Search/SearchItem.d.ts +2 -1
- package/lib/components/Search/SearchItem.js +3 -3
- package/lib/components/Search/SearchTrigger.d.ts +2 -1
- package/lib/components/Search/SearchTrigger.js +2 -2
- package/lib/components/Search/Shortcut.d.ts +2 -1
- package/lib/components/Search/Shortcut.js +2 -2
- package/lib/components/Search/ShortcutKey.d.ts +1 -0
- package/lib/components/Search/ShortcutKey.js +1 -1
- package/lib/components/Search/SidebarSearch.d.ts +1 -3
- package/lib/components/Search/SidebarSearch.js +2 -1
- package/lib/components/Search/SuggestedPages.d.ts +3 -1
- package/lib/components/Search/SuggestedPages.js +2 -2
- package/lib/components/Separator/Separator.d.ts +1 -1
- package/lib/components/Separator/Separator.js +2 -2
- package/lib/components/Separator/SeparatorItem.d.ts +1 -5
- package/lib/components/Separator/SeparatorItem.js +7 -2
- package/lib/components/Separator/SeparatorLine.d.ts +1 -3
- package/lib/components/Separator/SeparatorLine.js +2 -1
- package/lib/components/Sidebar/ApiCallItem.d.ts +1 -1
- package/lib/components/Sidebar/ApiCallItem.js +10 -3
- package/lib/components/Sidebar/BackButton.d.ts +2 -1
- package/lib/components/Sidebar/BackButton.js +2 -2
- package/lib/components/Sidebar/Drilldown.d.ts +2 -1
- package/lib/components/Sidebar/Drilldown.js +2 -2
- package/lib/components/Sidebar/DrilldownMenu.d.ts +1 -1
- package/lib/components/Sidebar/DrilldownMenu.js +3 -3
- package/lib/components/Sidebar/DrilldownMenuItem.d.ts +1 -1
- package/lib/components/Sidebar/DrilldownMenuItem.js +2 -2
- package/lib/components/Sidebar/HeaderWrapper.d.ts +1 -3
- package/lib/components/Sidebar/HeaderWrapper.js +2 -1
- package/lib/components/Sidebar/MobileSidebarButton.d.ts +1 -3
- package/lib/components/Sidebar/MobileSidebarButton.js +3 -2
- package/lib/components/Sidebar/Sidebar.d.ts +1 -3
- package/lib/components/Sidebar/Sidebar.js +2 -1
- package/lib/components/Sidebar/SidebarLayout.d.ts +2 -1
- package/lib/components/Sidebar/SidebarLayout.js +2 -4
- package/lib/components/Sidebar/types.d.ts +3 -0
- package/lib/components/SidebarActions/SidebarActions.d.ts +2 -1
- package/lib/components/SidebarActions/SidebarActions.js +2 -2
- package/lib/components/SidebarLogo/SidebarLogo.d.ts +2 -1
- package/lib/components/SidebarLogo/SidebarLogo.js +2 -2
- package/lib/components/TableOfContent/TableOfContent.d.ts +1 -0
- package/lib/components/TableOfContent/TableOfContent.js +2 -2
- package/lib/components/Tags/Tags.d.ts +2 -1
- package/lib/components/Tags/Tags.js +2 -2
- package/lib/components/Tiles/TileHeader.d.ts +1 -3
- package/lib/components/Tiles/TileHeader.js +2 -1
- package/lib/components/Tiles/TileText.d.ts +1 -3
- package/lib/components/Tiles/TileText.js +2 -1
- package/lib/components/Typography/CompactTypography.d.ts +1 -3
- package/lib/components/Typography/Emphasis.d.ts +1 -3
- package/lib/components/Typography/Emphasis.js +2 -1
- package/lib/components/Typography/H1.d.ts +1 -3
- package/lib/components/Typography/H1.js +2 -1
- package/lib/components/Typography/H2.d.ts +1 -3
- package/lib/components/Typography/H2.js +2 -1
- package/lib/components/Typography/H3.d.ts +1 -3
- package/lib/components/Typography/H3.js +2 -1
- package/lib/components/Typography/SectionHeader.d.ts +1 -3
- package/lib/components/Typography/SectionHeader.js +2 -1
- package/lib/components/Typography/Typography.d.ts +1 -3
- package/lib/components/Typography/Typography.js +2 -1
- package/lib/config.d.ts +496 -1
- package/lib/config.js +134 -1
- package/lib/globalStyle.js +62 -2
- package/lib/hooks/useMobileMenu.js +7 -1
- package/lib/icons/BurgerIcon/BurgerIcon.d.ts +5 -0
- package/lib/icons/BurgerIcon/BurgerIcon.js +15 -0
- package/lib/icons/BurgerIcon/index.d.ts +1 -0
- package/lib/icons/BurgerIcon/index.js +6 -0
- package/lib/icons/CloseIcon/CloseIcon.d.ts +5 -0
- package/lib/icons/CloseIcon/CloseIcon.js +16 -0
- package/lib/icons/CloseIcon/index.d.ts +1 -0
- package/lib/icons/CloseIcon/index.js +6 -0
- package/lib/icons/ColorModeIcon/ColorModeIcon.js +5 -1
- package/lib/icons/ExpandIcon/ExpandIcon.d.ts +8 -0
- package/lib/icons/ExpandIcon/ExpandIcon.js +31 -0
- package/lib/icons/ExpandIcon/index.d.ts +1 -0
- package/lib/icons/ExpandIcon/index.js +6 -0
- package/lib/icons/LogoutIcon/LogoutIcon.d.ts +5 -0
- package/lib/icons/LogoutIcon/LogoutIcon.js +17 -0
- package/lib/icons/LogoutIcon/index.d.ts +1 -0
- package/lib/icons/LogoutIcon/index.js +6 -0
- package/lib/icons/index.d.ts +4 -0
- package/lib/icons/index.js +4 -0
- package/lib/mocks/Sidebar/useSidebarItems.d.ts +3 -0
- package/lib/mocks/Sidebar/useSidebarItems.js +8 -0
- package/lib/mocks/hooks/index.d.ts +4 -1
- package/lib/mocks/hooks/index.js +16 -1
- package/lib/mocks/media-css.d.ts +5 -0
- package/lib/mocks/media-css.js +5 -0
- package/lib/ui/Dropdown.js +1 -1
- package/lib/ui/darkColors.js +11 -3
- package/package.json +5 -4
- package/src/I18n/LanguagePicker.tsx +2 -1
- package/src/components/Breadcrumbs/Breadcrumb.tsx +0 -1
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +6 -0
- package/src/components/Cards/Card.tsx +2 -1
- package/src/components/Cards/CardsBlock.tsx +2 -1
- package/src/components/Catalog/Catalog.tsx +1 -1
- package/src/components/CodeBlock/CodeBlock.ts +2 -1
- package/src/components/CodeSample/CodeSample.tsx +4 -1
- package/src/components/ColorModeSwitcher/ColorModeSwitcher.tsx +7 -1
- package/src/components/Feedback/Comment.tsx +3 -3
- package/src/components/Feedback/Rating.tsx +2 -2
- package/src/components/Feedback/Reasons.tsx +6 -2
- package/src/components/Feedback/ReportDialog.tsx +1 -1
- package/src/components/Feedback/Sentiment.tsx +2 -2
- package/src/components/Feedback/types.ts +5 -0
- package/src/components/Footer/CustomFooter.tsx +3 -2
- package/src/components/Footer/CustomFooterNavItem.tsx +3 -2
- package/src/components/Footer/Footer.tsx +3 -1
- package/src/components/Footer/FooterColumn.tsx +3 -2
- package/src/components/Footer/FooterColumns.tsx +3 -2
- package/src/components/Footer/FooterCopyright.tsx +6 -1
- package/src/components/LastUpdated/LastUpdated.tsx +2 -0
- package/src/components/Markdown/ContainerWrapper.tsx +2 -1
- package/src/components/Markdown/Heading.tsx +3 -1
- package/src/components/Markdown/MarkdownLayout.tsx +3 -1
- package/src/components/Markdown/MarkdownWrapper.tsx +2 -1
- package/src/components/Markdown/Mermaid.tsx +5 -1
- package/src/components/Markdown/PageWrapper.tsx +2 -1
- package/src/components/Markdown/Sup.tsx +9 -2
- package/src/components/Menu/Menu.tsx +16 -5
- package/src/components/Menu/MenuContainer.tsx +3 -1
- package/src/components/Menu/MenuGroup.tsx +4 -5
- package/src/components/Menu/MenuItem.tsx +22 -4
- package/src/components/Menu/MenuItemLabel.tsx +19 -10
- package/src/components/Menu/MenuItemSwitch.tsx +7 -5
- package/src/components/Menu/MenuLink.tsx +2 -1
- package/src/components/Menu/MenuLinkItem.tsx +2 -1
- package/src/components/Menu/MobileMenu.tsx +209 -0
- package/src/components/Menu/MobileMenuGroup.tsx +73 -0
- package/src/components/Menu/index.ts +1 -0
- package/src/components/Navbar/BurgerButton.tsx +34 -0
- package/src/components/Navbar/MobileUserProfile.tsx +90 -0
- package/src/components/Navbar/Navbar.tsx +43 -14
- package/src/components/Navbar/NavbarDropdown.tsx +3 -2
- package/src/components/Navbar/NavbarMenu.tsx +8 -2
- package/src/components/NavbarLogo/NavbarLogo.tsx +11 -3
- package/src/components/OpenApiDocs/DevOnboardingTryItSecurity.tsx +2 -4
- package/src/components/PageNavigation/NextButton.tsx +3 -1
- package/src/components/PageNavigation/PageNavigation.tsx +10 -2
- package/src/components/PageNavigation/PreviousButton.tsx +3 -1
- package/src/components/Panel/PanelBody.ts +2 -1
- package/src/components/Panel/PanelHeader.ts +2 -1
- package/src/components/Panel/PanelHeaderTitle.ts +2 -1
- package/src/components/Profile/Profile.tsx +2 -2
- package/src/components/Profile/types.ts +1 -0
- package/src/components/SamplesPanelControls/SamplesPanelControls.ts +6 -3
- package/src/components/Search/CancelSearch.tsx +8 -2
- package/src/components/Search/ClearIcon.tsx +2 -1
- package/src/components/Search/ClockBackwardsIcon.tsx +1 -1
- package/src/components/Search/Input.tsx +2 -1
- package/src/components/Search/InputWrapper.tsx +3 -1
- package/src/components/Search/MobileSearchTrigger.tsx +16 -5
- package/src/components/Search/Popover.tsx +3 -2
- package/src/components/Search/RecentSearches.tsx +9 -3
- package/src/components/Search/Search.tsx +2 -2
- package/src/components/Search/SearchDialog.tsx +10 -3
- package/src/components/Search/SearchIcon.tsx +2 -1
- package/src/components/Search/SearchItem.tsx +4 -1
- package/src/components/Search/SearchTrigger.tsx +8 -2
- package/src/components/Search/Shortcut.tsx +3 -1
- package/src/components/Search/ShortcutKey.tsx +2 -1
- package/src/components/Search/SidebarSearch.tsx +2 -1
- package/src/components/Search/SuggestedPages.tsx +2 -2
- package/src/components/Separator/Separator.tsx +2 -2
- package/src/components/Separator/SeparatorItem.tsx +11 -4
- package/src/components/Separator/SeparatorLine.tsx +2 -1
- package/src/components/Sidebar/ApiCallItem.tsx +12 -4
- package/src/components/Sidebar/BackButton.tsx +3 -1
- package/src/components/Sidebar/Drilldown.tsx +3 -1
- package/src/components/Sidebar/DrilldownMenu.tsx +3 -2
- package/src/components/Sidebar/DrilldownMenuItem.tsx +2 -2
- package/src/components/Sidebar/HeaderWrapper.tsx +2 -1
- package/src/components/Sidebar/MobileSidebarButton.tsx +3 -2
- package/src/components/Sidebar/Sidebar.tsx +2 -1
- package/src/components/Sidebar/SidebarLayout.tsx +3 -4
- package/src/components/Sidebar/types.ts +3 -0
- package/src/components/SidebarActions/SidebarActions.tsx +3 -0
- package/src/components/SidebarLogo/SidebarLogo.tsx +3 -0
- package/src/components/TableOfContent/TableOfContent.tsx +3 -2
- package/src/components/Tags/Tags.tsx +2 -2
- package/src/components/Tiles/TileHeader.ts +2 -1
- package/src/components/Tiles/TileText.tsx +2 -1
- package/src/components/Typography/Emphasis.ts +2 -1
- package/src/components/Typography/H1.ts +2 -1
- package/src/components/Typography/H2.ts +2 -1
- package/src/components/Typography/H3.ts +2 -1
- package/src/components/Typography/SectionHeader.ts +2 -1
- package/src/components/Typography/Typography.ts +2 -1
- package/src/config.ts +150 -1
- package/src/globalStyle.ts +66 -3
- package/src/hooks/useMobileMenu.ts +5 -1
- package/src/icons/BurgerIcon/BurgerIcon.tsx +12 -0
- package/src/icons/BurgerIcon/index.ts +1 -0
- package/src/icons/CloseIcon/CloseIcon.tsx +13 -0
- package/src/icons/CloseIcon/index.ts +1 -0
- package/src/icons/ColorModeIcon/ColorModeIcon.tsx +5 -1
- package/src/icons/ExpandIcon/ExpandIcon.tsx +46 -0
- package/src/icons/ExpandIcon/index.ts +1 -0
- package/src/icons/LogoutIcon/LogoutIcon.tsx +20 -0
- package/src/icons/LogoutIcon/index.ts +1 -0
- package/src/icons/index.ts +4 -0
- package/src/mocks/Sidebar/useSidebarItems.tsx +7 -0
- package/src/mocks/hooks/index.ts +16 -1
- package/src/mocks/media-css.ts +1 -0
- package/src/ui/Dropdown.tsx +1 -1
- package/src/ui/darkColors.tsx +11 -3
- package/lib/components/Navbar/MobileNavbarDropdown.d.ts +0 -8
- package/lib/components/Navbar/MobileNavbarDropdown.js +0 -30
- package/lib/components/Navbar/MobileNavbarItem.d.ts +0 -15
- package/lib/components/Navbar/MobileNavbarItem.js +0 -110
- package/lib/components/Navbar/MobileNavbarMenu.d.ts +0 -6
- package/lib/components/Navbar/MobileNavbarMenu.js +0 -92
- package/lib/components/Navbar/MobileNavbarMenuButton.d.ts +0 -4
- package/lib/components/Navbar/MobileNavbarMenuButton.js +0 -18
- package/src/components/Navbar/MobileNavbarDropdown.tsx +0 -37
- package/src/components/Navbar/MobileNavbarItem.tsx +0 -121
- package/src/components/Navbar/MobileNavbarMenu.tsx +0 -111
- package/src/components/Navbar/MobileNavbarMenuButton.tsx +0 -13
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { useLocation } from 'react-router-dom';
|
|
3
|
+
import styled from 'styled-components';
|
|
4
|
+
|
|
5
|
+
import { DropdownWrapper } from '@theme/components/Navbar/NavbarDropdown';
|
|
6
|
+
import { isPrimitive, isEmptyArray, withPathPrefix } from '@theme/utils';
|
|
7
|
+
import type { ResolvedNavItem } from '@theme/types/portal';
|
|
8
|
+
import { Menu, MenuItemLabel } from '@theme/components/Menu/index';
|
|
9
|
+
import type { ItemState } from '@portal/Sidebar/types';
|
|
10
|
+
import { MobileUserProfile } from '@theme/components/Navbar/MobileUserProfile';
|
|
11
|
+
import { getPathnameForLocale } from '@portal/utils';
|
|
12
|
+
import { useI18nConfig, useTranslate } from '@portal/hooks';
|
|
13
|
+
import { ExpandIcon } from '@theme/icons';
|
|
14
|
+
|
|
15
|
+
interface MobileMenuProps {
|
|
16
|
+
navItems: ResolvedNavItem[];
|
|
17
|
+
sidebarItems: ItemState[];
|
|
18
|
+
className?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
enum MenuLevel {
|
|
22
|
+
NAVBAR = 'NAVBAR',
|
|
23
|
+
SIDEBAR = 'SIDEBAR',
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function MobileMenu({
|
|
27
|
+
navItems,
|
|
28
|
+
sidebarItems,
|
|
29
|
+
className,
|
|
30
|
+
}: MobileMenuProps): JSX.Element | null {
|
|
31
|
+
const [menuLevel, setMenuLevel] = useState(
|
|
32
|
+
sidebarItems.length ? MenuLevel.SIDEBAR : MenuLevel.NAVBAR,
|
|
33
|
+
);
|
|
34
|
+
const { pathname, hash } = useLocation();
|
|
35
|
+
const pathHash = pathname + hash;
|
|
36
|
+
const { defaultLocale, currentLocale, locales } = useI18nConfig();
|
|
37
|
+
const { translate } = useTranslate();
|
|
38
|
+
|
|
39
|
+
if (isPrimitive(navItems) || isEmptyArray(navItems)) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const isItemActive = (item: ResolvedNavItem): boolean => {
|
|
44
|
+
return (
|
|
45
|
+
pathHash ===
|
|
46
|
+
withPathPrefix(getPathnameForLocale(item.link || '/', defaultLocale, currentLocale, locales))
|
|
47
|
+
);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const mapNavbarItems = (items: ResolvedNavItem[]): ItemState[] => {
|
|
51
|
+
return items.map(
|
|
52
|
+
(navItem) =>
|
|
53
|
+
({
|
|
54
|
+
...navItem,
|
|
55
|
+
...(navItem.items && { items: mapNavbarItems(navItem.items) }),
|
|
56
|
+
...('link' in navItem && { link: navItem.link || '/' }),
|
|
57
|
+
active: 'link' in navItem && isItemActive(navItem),
|
|
58
|
+
hasActiveSubItem: !!navItem.items?.find(isItemActive),
|
|
59
|
+
} as ItemState),
|
|
60
|
+
);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
let menuItems: ItemState[];
|
|
64
|
+
switch (menuLevel) {
|
|
65
|
+
case MenuLevel.SIDEBAR:
|
|
66
|
+
menuItems = sidebarItems;
|
|
67
|
+
break;
|
|
68
|
+
default:
|
|
69
|
+
menuItems = mapNavbarItems(navItems);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const isMenuButtonVisible = menuLevel === MenuLevel.SIDEBAR;
|
|
73
|
+
const isPreviousButtonVisible = menuLevel === MenuLevel.NAVBAR && !!sidebarItems.length;
|
|
74
|
+
const isButtonsSectionVisible = isMenuButtonVisible || isPreviousButtonVisible;
|
|
75
|
+
|
|
76
|
+
const translationKeys = {
|
|
77
|
+
mainMenu: 'theme.mobileMenu.mainMenu',
|
|
78
|
+
previous: 'theme.mobileMenu.previous',
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
return (
|
|
82
|
+
<MobileMenuWrapper data-component-name="Menu/MobileMenu" className={className}>
|
|
83
|
+
<ScrollableArea>
|
|
84
|
+
{isButtonsSectionVisible && (
|
|
85
|
+
<ButtonsSection alignRight={isPreviousButtonVisible}>
|
|
86
|
+
{isMenuButtonVisible && (
|
|
87
|
+
<ControlButton
|
|
88
|
+
data-component-name="Menu/ControlButton"
|
|
89
|
+
onClick={() => setMenuLevel(MenuLevel.NAVBAR)}
|
|
90
|
+
>
|
|
91
|
+
<ExpandIcon direction="left" />
|
|
92
|
+
<ControlButtonLabel paddingDirection="left">
|
|
93
|
+
{translate(translationKeys.mainMenu, 'Main Menu')}
|
|
94
|
+
</ControlButtonLabel>
|
|
95
|
+
</ControlButton>
|
|
96
|
+
)}
|
|
97
|
+
{isPreviousButtonVisible && (
|
|
98
|
+
<ControlButton
|
|
99
|
+
data-component-name="Menu/ControlButton"
|
|
100
|
+
onClick={() => setMenuLevel(MenuLevel.SIDEBAR)}
|
|
101
|
+
>
|
|
102
|
+
<ControlButtonLabel paddingDirection="right">
|
|
103
|
+
{translate(translationKeys.previous, 'Previous')}
|
|
104
|
+
</ControlButtonLabel>
|
|
105
|
+
<ExpandIcon direction="right" />
|
|
106
|
+
</ControlButton>
|
|
107
|
+
)}
|
|
108
|
+
</ButtonsSection>
|
|
109
|
+
)}
|
|
110
|
+
<MenuWrapper>
|
|
111
|
+
<Menu items={menuItems} isMobile />
|
|
112
|
+
</MenuWrapper>
|
|
113
|
+
</ScrollableArea>
|
|
114
|
+
<MobileUserProfile />
|
|
115
|
+
</MobileMenuWrapper>
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const MobileMenuWrapper = styled.div`
|
|
120
|
+
height: 100%;
|
|
121
|
+
width: 100%;
|
|
122
|
+
position: fixed;
|
|
123
|
+
z-index: var(--z-index-raised);
|
|
124
|
+
left: 0;
|
|
125
|
+
top: var(--navbar-height);
|
|
126
|
+
overflow-x: hidden;
|
|
127
|
+
transition: 0.5s;
|
|
128
|
+
display: flex;
|
|
129
|
+
flex-direction: column;
|
|
130
|
+
background: var(--mobile-menu-background);
|
|
131
|
+
|
|
132
|
+
${({ theme }) => theme.mediaQueries.medium} {
|
|
133
|
+
display: none;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
${DropdownWrapper} {
|
|
137
|
+
& > div {
|
|
138
|
+
text-align: center;
|
|
139
|
+
padding: 10px 0;
|
|
140
|
+
cursor: pointer;
|
|
141
|
+
a {
|
|
142
|
+
color: var(--navbar-text-color);
|
|
143
|
+
text-decoration: none;
|
|
144
|
+
}
|
|
145
|
+
:hover {
|
|
146
|
+
text-decoration: underline;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
`;
|
|
151
|
+
|
|
152
|
+
const ButtonsSection = styled.div<{ alignRight: boolean }>`
|
|
153
|
+
align-items: center;
|
|
154
|
+
display: flex;
|
|
155
|
+
justify-content: space-between;
|
|
156
|
+
${({ alignRight }) => alignRight && 'justify-content: flex-end'};
|
|
157
|
+
`;
|
|
158
|
+
|
|
159
|
+
const ScrollableArea = styled.div`
|
|
160
|
+
padding-top: var(--mobile-menu-padding-top);
|
|
161
|
+
flex: 1;
|
|
162
|
+
overflow-y: scroll;
|
|
163
|
+
margin-bottom: 140px;
|
|
164
|
+
`;
|
|
165
|
+
|
|
166
|
+
const MenuWrapper = styled.div`
|
|
167
|
+
margin: 0 var(--mobile-menu-horizontal-margin);
|
|
168
|
+
margin-top: var(--mobile-menu-items-margin-top);
|
|
169
|
+
line-height: 22px;
|
|
170
|
+
background: var(--mobile-menu-background);
|
|
171
|
+
|
|
172
|
+
${MenuItemLabel} {
|
|
173
|
+
margin: 0;
|
|
174
|
+
border-radius: var(--mobile-menu-item-radius);
|
|
175
|
+
padding-left: var(--sidebar-item-padding-horizontal);
|
|
176
|
+
}
|
|
177
|
+
`;
|
|
178
|
+
|
|
179
|
+
export const ControlButton = styled.li`
|
|
180
|
+
display: inline-block;
|
|
181
|
+
padding: var(--mobile-menu-control-button-padding-vertical)
|
|
182
|
+
var(--mobile-menu-control-button-padding-horizontal);
|
|
183
|
+
margin: var(--mobile-menu-control-button-margin-vertical)
|
|
184
|
+
var(--mobile-menu-control-button-margin-horizontal);
|
|
185
|
+
text-align: center;
|
|
186
|
+
font-size: var(--mobile-menu-control-button-font-size);
|
|
187
|
+
line-height: 22px;
|
|
188
|
+
font-weight: var(--mobile-menu-control-button-weight);
|
|
189
|
+
color: var(--mobile-menu-control-button-color);
|
|
190
|
+
cursor: pointer;
|
|
191
|
+
|
|
192
|
+
svg {
|
|
193
|
+
fill: var(--mobile-menu-control-button-color);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
&:hover {
|
|
197
|
+
color: var(--mobile-menu-control-button-hover-color);
|
|
198
|
+
|
|
199
|
+
svg {
|
|
200
|
+
fill: var(--mobile-menu-control-button-hover-color);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
`;
|
|
204
|
+
|
|
205
|
+
const ControlButtonLabel = styled.span<{ paddingDirection: 'right' | 'left' }>`
|
|
206
|
+
vertical-align: middle;
|
|
207
|
+
${({ paddingDirection }) => paddingDirection === 'left' && 'padding-left: 8px'};
|
|
208
|
+
${({ paddingDirection }) => paddingDirection === 'right' && 'padding-right: 8px'};
|
|
209
|
+
`;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
|
|
4
|
+
import { MenuLinkItem } from '@theme/components/Menu/MenuLinkItem';
|
|
5
|
+
import { MenuItemLabel } from '@theme/components/Menu/MenuItemLabel';
|
|
6
|
+
import { SeparatorLine } from '@theme/components/Separator/SeparatorLine';
|
|
7
|
+
import type { ItemState } from '@theme/components/Sidebar/types';
|
|
8
|
+
import { useTranslate } from '@portal/hooks';
|
|
9
|
+
import { ExpandIcon } from '@theme/icons';
|
|
10
|
+
|
|
11
|
+
interface MenuGroupProps {
|
|
12
|
+
item: ItemState;
|
|
13
|
+
isExpanded: boolean;
|
|
14
|
+
toggleExpanded: () => void;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function MobileMenuGroup({
|
|
18
|
+
item,
|
|
19
|
+
isExpanded,
|
|
20
|
+
toggleExpanded,
|
|
21
|
+
children,
|
|
22
|
+
}: React.PropsWithChildren<MenuGroupProps>): JSX.Element {
|
|
23
|
+
const { translate } = useTranslate();
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<Wrapper data-component-name="Menu/MobileMenuGroup">
|
|
27
|
+
<MenuLinkItem item={item}>
|
|
28
|
+
<MenuGroupLabel onClick={toggleExpanded} active={item.active} expanded={isExpanded}>
|
|
29
|
+
<LabelContainer>
|
|
30
|
+
<Label>{translate(item.labelTranslationKey, item.label)}</Label>
|
|
31
|
+
</LabelContainer>
|
|
32
|
+
{!!item.items.length && <ExpandIcon direction={isExpanded ? 'down' : 'right'} />}
|
|
33
|
+
</MenuGroupLabel>
|
|
34
|
+
</MenuLinkItem>
|
|
35
|
+
<MenuWrapper isExpanded={isExpanded}>{children}</MenuWrapper>
|
|
36
|
+
{item.separatorLine ? <SeparatorLine /> : null}
|
|
37
|
+
</Wrapper>
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const LabelContainer = styled.div`
|
|
42
|
+
display: flex;
|
|
43
|
+
`;
|
|
44
|
+
|
|
45
|
+
const Label = styled.div``;
|
|
46
|
+
|
|
47
|
+
const Wrapper = styled.div``;
|
|
48
|
+
|
|
49
|
+
const MenuWrapper = styled.div<{ isExpanded?: boolean }>`
|
|
50
|
+
padding-left: var(--mobile-menu-item-nested-offset);
|
|
51
|
+
overflow: hidden;
|
|
52
|
+
${(props) => !props.isExpanded && 'max-height: 0'}
|
|
53
|
+
`;
|
|
54
|
+
|
|
55
|
+
const MenuGroupLabel = styled(MenuItemLabel)<{ active?: boolean; expanded?: boolean }>`
|
|
56
|
+
color: var(--mobile-menu-item-text-color);
|
|
57
|
+
background: var(--mobile-menu-background);
|
|
58
|
+
display: flex;
|
|
59
|
+
justify-content: space-between;
|
|
60
|
+
|
|
61
|
+
${({ active }) =>
|
|
62
|
+
active &&
|
|
63
|
+
`
|
|
64
|
+
color: var(--mobile-menu-item-active-text-color);
|
|
65
|
+
background-color: var(--mobile-menu-item-active-color);
|
|
66
|
+
`}
|
|
67
|
+
|
|
68
|
+
${({ expanded }) =>
|
|
69
|
+
expanded &&
|
|
70
|
+
`
|
|
71
|
+
color: var(--mobile-menu-item-active-text-color);
|
|
72
|
+
`}
|
|
73
|
+
`;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
|
|
4
|
+
import { BurgerIcon, CloseIcon } from '@theme/icons';
|
|
5
|
+
|
|
6
|
+
export function BurgerButton({
|
|
7
|
+
isOpen,
|
|
8
|
+
onClick,
|
|
9
|
+
}: {
|
|
10
|
+
isOpen: boolean;
|
|
11
|
+
onClick: () => void;
|
|
12
|
+
}): JSX.Element | null {
|
|
13
|
+
return (
|
|
14
|
+
<Wrapper data-component-name="BurgerButton/BurgerButton" onClick={onClick}>
|
|
15
|
+
{isOpen ? <CloseIcon /> : <BurgerIcon />}
|
|
16
|
+
</Wrapper>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const Wrapper = styled.div`
|
|
21
|
+
display: flex;
|
|
22
|
+
align-items: center;
|
|
23
|
+
cursor: pointer;
|
|
24
|
+
user-select: none;
|
|
25
|
+
fill: var(--navbar-text-color);
|
|
26
|
+
|
|
27
|
+
* {
|
|
28
|
+
margin: var(--mobile-menu-burger-button-margin);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
${({ theme }) => theme.mediaQueries.medium} {
|
|
32
|
+
display: none;
|
|
33
|
+
}
|
|
34
|
+
`;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
|
|
4
|
+
import { useProfileProps } from '@portal/Profile/useProfileProps';
|
|
5
|
+
import { LogoutIcon } from '@theme/icons/LogoutIcon';
|
|
6
|
+
import { AvatarWrapper, ProfileWrapper, Profile } from '@theme/components/Profile/Profile';
|
|
7
|
+
import { useThemeConfig } from '@theme/hooks/useThemeConfig';
|
|
8
|
+
import { useTranslate } from '@portal/hooks';
|
|
9
|
+
|
|
10
|
+
export function MobileUserProfile(): JSX.Element {
|
|
11
|
+
const { userProfile } = useThemeConfig();
|
|
12
|
+
const { userData, handleLogout, loginUrl } = useProfileProps();
|
|
13
|
+
const { translate } = useTranslate();
|
|
14
|
+
const translationKeys = {
|
|
15
|
+
login: 'theme.profile.login',
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
if (!userData?.isAuthenticated) {
|
|
19
|
+
return (
|
|
20
|
+
<MobileProfileWrapper data-component-name="Navbar/MobileUserProfile">
|
|
21
|
+
<LoginButton href={loginUrl} data-cy="login-btn">
|
|
22
|
+
{translate(translationKeys.login, userProfile?.loginLabel || 'Login')}
|
|
23
|
+
</LoginButton>
|
|
24
|
+
</MobileProfileWrapper>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<MobileProfileWrapper data-component-name="Navbar/MobileUserProfile">
|
|
30
|
+
<UserDataWrapper>
|
|
31
|
+
<ProfilePicture>
|
|
32
|
+
<Profile name={userData.name} imageUrl={userData.picture} />
|
|
33
|
+
</ProfilePicture>
|
|
34
|
+
<UserName>{userData.name}</UserName>
|
|
35
|
+
</UserDataWrapper>
|
|
36
|
+
<LogoutButton onClick={() => handleLogout()}>
|
|
37
|
+
<LogoutIcon />
|
|
38
|
+
</LogoutButton>
|
|
39
|
+
</MobileProfileWrapper>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
const LoginButton = styled.a`
|
|
43
|
+
background: var(--mobile-menu-login-button-background);
|
|
44
|
+
border-radius: 6px;
|
|
45
|
+
width: 100%;
|
|
46
|
+
margin: 0;
|
|
47
|
+
padding: 5px 0;
|
|
48
|
+
color: var(--mobile-menu-login-button-color);
|
|
49
|
+
font-size: 14px;
|
|
50
|
+
text-align: center;
|
|
51
|
+
line-height: 22px;
|
|
52
|
+
cursor: pointer;
|
|
53
|
+
text-decoration: none;
|
|
54
|
+
`;
|
|
55
|
+
|
|
56
|
+
const MobileProfileWrapper = styled.div`
|
|
57
|
+
display: flex;
|
|
58
|
+
justify-content: space-between;
|
|
59
|
+
align-items: center;
|
|
60
|
+
width: 100%;
|
|
61
|
+
position: fixed;
|
|
62
|
+
bottom: 0;
|
|
63
|
+
padding: 18px 16px;
|
|
64
|
+
border-top: 1px solid var(--mobile-menu-profile-border-color);
|
|
65
|
+
background: var(--mobile-menu-profile-background);
|
|
66
|
+
`;
|
|
67
|
+
|
|
68
|
+
const UserDataWrapper = styled.div`
|
|
69
|
+
display: flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
`;
|
|
72
|
+
|
|
73
|
+
const ProfilePicture = styled.div`
|
|
74
|
+
margin-right: 16px;
|
|
75
|
+
|
|
76
|
+
${AvatarWrapper} {
|
|
77
|
+
margin: 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
${ProfileWrapper} {
|
|
81
|
+
padding: 0;
|
|
82
|
+
}
|
|
83
|
+
`;
|
|
84
|
+
|
|
85
|
+
const UserName = styled.div``;
|
|
86
|
+
|
|
87
|
+
const LogoutButton = styled.div`
|
|
88
|
+
cursor: pointer;
|
|
89
|
+
user-select: none;
|
|
90
|
+
`;
|
|
@@ -4,17 +4,19 @@ import styled, { createGlobalStyle } from 'styled-components';
|
|
|
4
4
|
import { NavbarMenu } from '@theme/components/Navbar';
|
|
5
5
|
import { useMobileMenu } from '@theme/hooks/useMobileMenu';
|
|
6
6
|
import { isEmptyArray, isPrimitive } from '@theme/utils';
|
|
7
|
-
import { MobileNavbarMenuButton } from '@theme/components/Navbar/MobileNavbarMenuButton';
|
|
8
7
|
import type { NavbarLogoProps } from '@theme/components/NavbarLogo';
|
|
9
8
|
import { NavbarLogo } from '@theme/components/NavbarLogo';
|
|
10
|
-
import {
|
|
9
|
+
import { MobileMenu } from '@theme/components/Menu/MobileMenu';
|
|
11
10
|
import { ColorModeSwitcher } from '@theme/components/ColorModeSwitcher/ColorModeSwitcher';
|
|
12
11
|
import { useThemeConfig } from '@theme/hooks/useThemeConfig';
|
|
13
12
|
import { Search } from '@theme/components/Search/Search';
|
|
14
13
|
import { AuthUserProfile } from '@theme/components/Profile/AuthUserProfile';
|
|
15
|
-
import type { LogoConfig, ResolvedConfigLinks } from '@theme/types/portal';
|
|
16
|
-
import { useI18n } from '@portal/hooks';
|
|
17
|
-
import {
|
|
14
|
+
import type { LogoConfig, ResolvedConfigLinks, ResolvedNavItem } from '@theme/types/portal';
|
|
15
|
+
import { useI18n, usePageVersions } from '@portal/hooks';
|
|
16
|
+
import { BurgerButton } from '@theme/components/Navbar/BurgerButton';
|
|
17
|
+
import { useSidebarItems } from '@portal/Sidebar/useSidebarItems';
|
|
18
|
+
|
|
19
|
+
import { LanguagePicker } from '../../I18n/LanguagePicker';
|
|
18
20
|
|
|
19
21
|
const EmptyNavbarHack = createGlobalStyle`
|
|
20
22
|
:root {
|
|
@@ -74,9 +76,14 @@ interface NavbarPresentationalProps extends NavbarLogoProps {
|
|
|
74
76
|
menu: ResolvedConfigLinks;
|
|
75
77
|
hideUserProfile: boolean | string | undefined;
|
|
76
78
|
changeLanguage: (value: string) => void;
|
|
79
|
+
className?: string;
|
|
77
80
|
}
|
|
78
81
|
|
|
79
82
|
export function NavbarPresentational(props: NavbarPresentationalProps): JSX.Element | null {
|
|
83
|
+
const { versions = [] } = usePageVersions() || {};
|
|
84
|
+
const activeVersion = versions.find((version) => version?.active);
|
|
85
|
+
const sidebarItems = useSidebarItems(activeVersion);
|
|
86
|
+
|
|
80
87
|
const {
|
|
81
88
|
menuItemsExist,
|
|
82
89
|
closeMobileMenu,
|
|
@@ -87,26 +94,48 @@ export function NavbarPresentational(props: NavbarPresentationalProps): JSX.Elem
|
|
|
87
94
|
menu,
|
|
88
95
|
hideUserProfile,
|
|
89
96
|
changeLanguage,
|
|
97
|
+
className,
|
|
90
98
|
} = props;
|
|
91
99
|
return (
|
|
92
|
-
<NavbarContainer data-component-name="Navbar/Navbar">
|
|
93
|
-
{
|
|
94
|
-
|
|
95
|
-
{isOpen && (
|
|
96
|
-
<MobileNavbarMenu closeMenu={closeMobileMenu} menuItems={menu as ResolvedConfigLinks} />
|
|
97
|
-
)}
|
|
100
|
+
<NavbarContainer data-component-name="Navbar/Navbar" className={className}>
|
|
101
|
+
{isOpen && <MobileMenu navItems={menu as ResolvedNavItem[]} sidebarItems={sidebarItems} />}
|
|
98
102
|
<NavbarRow>
|
|
103
|
+
{menuItemsExist && (
|
|
104
|
+
<BurgerButton onClick={isOpen ? closeMobileMenu : openMobileMenu} isOpen={isOpen} />
|
|
105
|
+
)}
|
|
99
106
|
<NavbarLogo logo={logo} />
|
|
100
107
|
<NavbarMenu menuItems={menu as ResolvedConfigLinks} />
|
|
101
108
|
{hideSearch ? null : <Search />}
|
|
102
109
|
<LanguagePicker onChangeLanguage={changeLanguage} />
|
|
103
|
-
{hideUserProfile ? null :
|
|
104
|
-
|
|
110
|
+
{hideUserProfile ? null : (
|
|
111
|
+
<AuthUserProfileWrapper>
|
|
112
|
+
<AuthUserProfile />
|
|
113
|
+
</AuthUserProfileWrapper>
|
|
114
|
+
)}
|
|
115
|
+
<ColorModeSwitcherWrapper isVisible={isOpen}>
|
|
116
|
+
<ColorModeSwitcher />
|
|
117
|
+
</ColorModeSwitcherWrapper>
|
|
105
118
|
</NavbarRow>
|
|
106
119
|
</NavbarContainer>
|
|
107
120
|
);
|
|
108
121
|
}
|
|
109
122
|
|
|
123
|
+
const ColorModeSwitcherWrapper = styled.div<{ isVisible: boolean }>`
|
|
124
|
+
display: ${({ isVisible }) => (isVisible ? 'block' : 'none')};
|
|
125
|
+
|
|
126
|
+
${({ theme }) => theme.mediaQueries.medium} {
|
|
127
|
+
display: block;
|
|
128
|
+
}
|
|
129
|
+
`;
|
|
130
|
+
|
|
131
|
+
const AuthUserProfileWrapper = styled.div`
|
|
132
|
+
display: none;
|
|
133
|
+
|
|
134
|
+
${({ theme }) => theme.mediaQueries.medium} {
|
|
135
|
+
display: block;
|
|
136
|
+
}
|
|
137
|
+
`;
|
|
138
|
+
|
|
110
139
|
export const NavbarContainer = styled.nav`
|
|
111
140
|
--text-color: var(--navbar-text-color);
|
|
112
141
|
|
|
@@ -119,7 +148,7 @@ export const NavbarContainer = styled.nav`
|
|
|
119
148
|
font-size: 0.875rem;
|
|
120
149
|
position: sticky;
|
|
121
150
|
top: 0;
|
|
122
|
-
z-index:
|
|
151
|
+
z-index: var(--z-index-raised);
|
|
123
152
|
padding: var(--navbar-item-padding-vertical) var(--navbar-item-padding-horizontal);
|
|
124
153
|
background: var(--navbar-background-color);
|
|
125
154
|
font-family: var(--navbar-item-font-family);
|
|
@@ -7,12 +7,13 @@ import { useTranslate } from '@portal/hooks';
|
|
|
7
7
|
|
|
8
8
|
interface NavbarDropdownProps {
|
|
9
9
|
items: ResolvedNavLinkItem[];
|
|
10
|
+
className?: string;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
|
-
export function NavbarDropdown({ items }: NavbarDropdownProps): JSX.Element {
|
|
13
|
+
export function NavbarDropdown({ items, className }: NavbarDropdownProps): JSX.Element {
|
|
13
14
|
const { translate } = useTranslate();
|
|
14
15
|
return (
|
|
15
|
-
<DropdownWrapper data-component-name="Navbar/NavbarDropdown">
|
|
16
|
+
<DropdownWrapper data-component-name="Navbar/NavbarDropdown" className={className}>
|
|
16
17
|
{items.map((item, index) => (
|
|
17
18
|
<div key={`${item.label}_${index}`}>
|
|
18
19
|
<Link to={item.link}>{translate(item.labelTranslationKey, item.label)}</Link>
|
|
@@ -5,13 +5,19 @@ import { NavbarItem } from '@theme/components/Navbar/NavbarItem';
|
|
|
5
5
|
import { isPrimitive } from '@theme/utils';
|
|
6
6
|
import type { ResolvedConfigLinks, ResolvedNavItem } from '@theme/types/portal';
|
|
7
7
|
|
|
8
|
-
export function NavbarMenu({
|
|
8
|
+
export function NavbarMenu({
|
|
9
|
+
menuItems,
|
|
10
|
+
className,
|
|
11
|
+
}: {
|
|
12
|
+
menuItems: ResolvedConfigLinks;
|
|
13
|
+
className?: string;
|
|
14
|
+
}): JSX.Element | null {
|
|
9
15
|
if (isPrimitive(menuItems)) {
|
|
10
16
|
return null;
|
|
11
17
|
}
|
|
12
18
|
|
|
13
19
|
return (
|
|
14
|
-
<NavItemsContainer data-component-name="Navbar/NavbarMenu">
|
|
20
|
+
<NavItemsContainer data-component-name="Navbar/NavbarMenu" className={className}>
|
|
15
21
|
{(menuItems as ResolvedNavItem[]).map((navItem, index) => {
|
|
16
22
|
return (
|
|
17
23
|
<NavbarItem key={`${navItem.label}_${index}`} data-cy={navItem.label} navItem={navItem} />
|
|
@@ -4,14 +4,22 @@ import styled from 'styled-components';
|
|
|
4
4
|
import { Link } from '@portal/Link';
|
|
5
5
|
import type { LogoConfig } from '@theme/types/portal';
|
|
6
6
|
|
|
7
|
-
export type NavbarLogoProps = {
|
|
7
|
+
export type NavbarLogoProps = {
|
|
8
|
+
logo: Pick<LogoConfig, 'image' | 'link' | 'altText'>;
|
|
9
|
+
className?: string;
|
|
10
|
+
};
|
|
8
11
|
|
|
9
|
-
export function NavbarLogo({ logo }: NavbarLogoProps): JSX.Element | null {
|
|
12
|
+
export function NavbarLogo({ logo, className }: NavbarLogoProps): JSX.Element | null {
|
|
10
13
|
if (!logo.image) {
|
|
11
14
|
return null;
|
|
12
15
|
}
|
|
13
16
|
const img = (
|
|
14
|
-
<NavLogo
|
|
17
|
+
<NavLogo
|
|
18
|
+
className={className}
|
|
19
|
+
src={logo.image}
|
|
20
|
+
alt={logo.altText}
|
|
21
|
+
data-component-name="NavbarLogo/NavbarLogo"
|
|
22
|
+
/>
|
|
15
23
|
);
|
|
16
24
|
return logo.link ? <Link to={logo.link}>{img}</Link> : img;
|
|
17
25
|
}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import styled from 'styled-components';
|
|
3
3
|
|
|
4
|
-
import type { TryItSecurityAppsProps } from '
|
|
5
|
-
|
|
4
|
+
import type { TryItSecurityAppsProps } from '@theme/components/OpenApiDocs/TryItSecurityApps';
|
|
6
5
|
import { Button } from '@theme/components/Button/Button';
|
|
7
6
|
import { usePreloadHistory } from '@portal/usePreloadHistory';
|
|
8
7
|
import { usePageData } from '@portal/hooks/usePageData';
|
|
9
|
-
|
|
10
|
-
import { Dropdown } from './Dropdown';
|
|
8
|
+
import { Dropdown } from '@theme/components/OpenApiDocs/Dropdown';
|
|
11
9
|
|
|
12
10
|
export function DevOnboardingTryItSecurity(props: TryItSecurityAppsProps) {
|
|
13
11
|
const apiId = (props as any).apiId;
|
|
@@ -8,9 +8,10 @@ import { useTranslate } from '@portal/hooks';
|
|
|
8
8
|
|
|
9
9
|
interface NextPageType {
|
|
10
10
|
nextPage?: ResolvedNavItemWithLink | null;
|
|
11
|
+
className?: string;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
|
-
export function NextButton({ nextPage }: NextPageType): JSX.Element {
|
|
14
|
+
export function NextButton({ nextPage, className }: NextPageType): JSX.Element {
|
|
14
15
|
const { navigation } = useThemeConfig();
|
|
15
16
|
const { translate } = useTranslate();
|
|
16
17
|
|
|
@@ -33,6 +34,7 @@ export function NextButton({ nextPage }: NextPageType): JSX.Element {
|
|
|
33
34
|
to={nextPage.link}
|
|
34
35
|
data-component-name="PageNavigation/NextPageLink"
|
|
35
36
|
data-translation-key={translationKey}
|
|
37
|
+
extraClass={className}
|
|
36
38
|
>
|
|
37
39
|
{text}
|
|
38
40
|
</StyledButton>
|
|
@@ -9,9 +9,14 @@ import type { ResolvedNavItemWithLink } from '@theme/types/portal';
|
|
|
9
9
|
interface PageNavigationType {
|
|
10
10
|
nextPage?: ResolvedNavItemWithLink | null;
|
|
11
11
|
prevPage?: ResolvedNavItemWithLink | null;
|
|
12
|
+
className?: string;
|
|
12
13
|
}
|
|
13
14
|
|
|
14
|
-
export function PageNavigation({
|
|
15
|
+
export function PageNavigation({
|
|
16
|
+
nextPage,
|
|
17
|
+
prevPage,
|
|
18
|
+
className,
|
|
19
|
+
}: PageNavigationType): JSX.Element | null {
|
|
15
20
|
const { navigation } = useThemeConfig();
|
|
16
21
|
|
|
17
22
|
if (navigation?.previousButton?.hide && navigation?.nextButton?.hide) {
|
|
@@ -19,7 +24,10 @@ export function PageNavigation({ nextPage, prevPage }: PageNavigationType): JSX.
|
|
|
19
24
|
}
|
|
20
25
|
|
|
21
26
|
return (
|
|
22
|
-
<PageNavigationWrapper
|
|
27
|
+
<PageNavigationWrapper
|
|
28
|
+
data-component-name="PageNavigation/PageNavigation"
|
|
29
|
+
className={className}
|
|
30
|
+
>
|
|
23
31
|
<PreviousButton prevPage={prevPage} />
|
|
24
32
|
<NextButton nextPage={nextPage} />
|
|
25
33
|
</PageNavigationWrapper>
|
|
@@ -8,9 +8,10 @@ import { useTranslate } from '@portal/hooks';
|
|
|
8
8
|
|
|
9
9
|
interface PreviousPageType {
|
|
10
10
|
prevPage?: ResolvedNavItemWithLink | null;
|
|
11
|
+
className?: string;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
|
-
export function PreviousButton({ prevPage }: PreviousPageType): JSX.Element {
|
|
14
|
+
export function PreviousButton({ prevPage, className }: PreviousPageType): JSX.Element {
|
|
14
15
|
const { navigation } = useThemeConfig();
|
|
15
16
|
const { translate } = useTranslate();
|
|
16
17
|
|
|
@@ -36,6 +37,7 @@ export function PreviousButton({ prevPage }: PreviousPageType): JSX.Element {
|
|
|
36
37
|
to={prevPage.link}
|
|
37
38
|
data-component-name="PageNavigation/PreviousPageLink"
|
|
38
39
|
data-translation-key={translationKey}
|
|
40
|
+
extraClass={className}
|
|
39
41
|
>
|
|
40
42
|
{text}
|
|
41
43
|
</StyledButton>
|
|
@@ -18,8 +18,9 @@ interface PanelBodyProps {
|
|
|
18
18
|
hidden?: boolean;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
export const PanelBody = styled.div.attrs(() => ({
|
|
21
|
+
export const PanelBody = styled.div.attrs<{ className?: string }>(({ className }) => ({
|
|
22
22
|
'data-component-name': 'Panel/PanelBody',
|
|
23
|
+
className,
|
|
23
24
|
}))<PanelBodyProps>`
|
|
24
25
|
${({ animate }) => animate && showPanelAnimation};
|
|
25
26
|
${({ hidden }) => hidden && 'visibility: hidden'};
|