@redocly/theme 0.17.1 → 0.18.1

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 (126) hide show
  1. package/lib/I18n/LanguagePicker.js +53 -85
  2. package/lib/components/Catalog/Catalog.d.ts +1 -1
  3. package/lib/components/Catalog/useCatalog.d.ts +2 -1
  4. package/lib/components/Dropdown/Dropdown.d.ts +16 -0
  5. package/lib/components/Dropdown/Dropdown.js +113 -0
  6. package/lib/components/Dropdown/index.d.ts +1 -0
  7. package/lib/components/Dropdown/index.js +18 -0
  8. package/lib/components/Menu/MenuGroup.js +2 -0
  9. package/lib/components/Menu/MenuItem.js +2 -0
  10. package/lib/components/Menu/MobileMenu.d.ts +2 -9
  11. package/lib/components/Menu/MobileMenu.js +35 -65
  12. package/lib/components/Menu/MobileMenuGroup.js +2 -0
  13. package/lib/components/Menu/constants.d.ts +5 -0
  14. package/lib/components/Menu/constants.js +10 -0
  15. package/lib/components/Menu/hooks/use-mobile-menu-items.d.ts +2 -0
  16. package/lib/components/Menu/hooks/use-mobile-menu-items.js +83 -0
  17. package/lib/components/Menu/hooks/use-mobile-menu-levels.d.ts +5 -0
  18. package/lib/components/Menu/hooks/use-mobile-menu-levels.js +50 -0
  19. package/lib/components/Menu/types.d.ts +3 -0
  20. package/lib/components/Menu/types.js +3 -0
  21. package/lib/components/Menu/utils.d.ts +7 -0
  22. package/lib/components/Menu/utils.js +76 -0
  23. package/lib/components/Navbar/MobileUserProfile.d.ts +1 -1
  24. package/lib/components/Navbar/MobileUserProfile.js +4 -7
  25. package/lib/components/Navbar/Navbar.d.ts +0 -3
  26. package/lib/components/Navbar/Navbar.js +9 -12
  27. package/lib/components/Navbar/NavbarItem.d.ts +5 -1
  28. package/lib/components/Navbar/NavbarItem.js +15 -16
  29. package/lib/components/Navbar/NavbarMenu.js +1 -1
  30. package/lib/components/OpenApiDocs/Dropdown.js +5 -5
  31. package/lib/components/Product/Product.d.ts +7 -0
  32. package/lib/components/Product/Product.js +23 -0
  33. package/lib/components/Product/ProductPicker.d.ts +2 -0
  34. package/lib/components/Product/ProductPicker.js +83 -0
  35. package/lib/components/Product/index.d.ts +2 -0
  36. package/lib/components/Product/index.js +19 -0
  37. package/lib/components/Profile/UserProfile.js +54 -6
  38. package/lib/components/Search/InputWrapper.js +1 -7
  39. package/lib/components/Search/ProductTag.d.ts +6 -0
  40. package/lib/components/Search/ProductTag.js +61 -0
  41. package/lib/components/Search/SearchDialog.js +19 -4
  42. package/lib/components/Search/SearchItem.d.ts +2 -1
  43. package/lib/components/Search/SearchItem.js +13 -2
  44. package/lib/components/Search/index.d.ts +1 -0
  45. package/lib/components/Search/index.js +1 -0
  46. package/lib/components/Select/Select.d.ts +18 -0
  47. package/lib/components/Select/Select.js +118 -0
  48. package/lib/components/Select/index.d.ts +1 -0
  49. package/lib/components/Select/index.js +18 -0
  50. package/lib/components/Sidebar/DrilldownMenuItem.js +2 -9
  51. package/lib/components/Sidebar/SidebarItemIcon.d.ts +1 -0
  52. package/lib/components/Sidebar/SidebarItemIcon.js +16 -0
  53. package/lib/components/Sidebar/VersionPicker.d.ts +7 -0
  54. package/lib/components/Sidebar/VersionPicker.js +51 -0
  55. package/lib/components/Sidebar/index.d.ts +2 -0
  56. package/lib/components/Sidebar/index.js +2 -0
  57. package/lib/components/index.d.ts +3 -0
  58. package/lib/components/index.js +3 -0
  59. package/lib/config.d.ts +952 -25
  60. package/lib/config.js +115 -2
  61. package/lib/globalStyle.js +177 -16
  62. package/lib/hooks/useThemeConfig.d.ts +1 -1
  63. package/lib/hooks/useThemeConfig.js +7 -2
  64. package/lib/mocks/hooks/index.d.ts +4 -3
  65. package/lib/mocks/hooks/index.js +6 -2
  66. package/lib/mocks/search.d.ts +1 -1
  67. package/lib/mocks/search.js +1 -1
  68. package/lib/types/portal/src/shared/types/catalog.d.ts +2 -24
  69. package/lib/types/portal/src/shared/types/nav.d.ts +4 -0
  70. package/lib/types/portal/src/shared/types/searchDocument.d.ts +2 -0
  71. package/lib/ui/darkColors.js +2 -0
  72. package/lib/ui/index.d.ts +0 -1
  73. package/lib/ui/index.js +0 -1
  74. package/package.json +1 -1
  75. package/src/I18n/LanguagePicker.tsx +62 -89
  76. package/src/components/Catalog/Catalog.tsx +1 -1
  77. package/src/components/Catalog/useCatalog.ts +2 -3
  78. package/src/components/Dropdown/Dropdown.tsx +138 -0
  79. package/src/components/Dropdown/index.ts +1 -0
  80. package/src/components/Menu/MenuGroup.tsx +2 -0
  81. package/src/components/Menu/MenuItem.tsx +2 -0
  82. package/src/components/Menu/MobileMenu.tsx +43 -96
  83. package/src/components/Menu/MobileMenuGroup.tsx +2 -0
  84. package/src/components/Menu/constants.ts +5 -0
  85. package/src/components/Menu/hooks/use-mobile-menu-items.ts +100 -0
  86. package/src/components/Menu/hooks/use-mobile-menu-levels.ts +55 -0
  87. package/src/components/Menu/types.ts +3 -0
  88. package/src/components/Menu/utils.ts +109 -0
  89. package/src/components/Navbar/MobileUserProfile.tsx +19 -20
  90. package/src/components/Navbar/Navbar.tsx +12 -22
  91. package/src/components/Navbar/NavbarItem.tsx +20 -15
  92. package/src/components/Navbar/NavbarMenu.tsx +1 -1
  93. package/src/components/OpenApiDocs/Dropdown.tsx +5 -5
  94. package/src/components/Product/Product.tsx +28 -0
  95. package/src/components/Product/ProductPicker.tsx +97 -0
  96. package/src/components/Product/index.ts +2 -0
  97. package/src/components/Profile/UserProfile.tsx +80 -21
  98. package/src/components/Search/InputWrapper.tsx +1 -7
  99. package/src/components/Search/ProductTag.tsx +46 -0
  100. package/src/components/Search/SearchDialog.tsx +21 -5
  101. package/src/components/Search/SearchItem.tsx +17 -3
  102. package/src/components/Search/index.ts +1 -0
  103. package/src/components/Select/Select.tsx +140 -0
  104. package/src/components/Select/index.ts +1 -0
  105. package/src/components/Sidebar/DrilldownMenuItem.tsx +2 -10
  106. package/src/components/Sidebar/SidebarItemIcon.tsx +10 -0
  107. package/src/components/Sidebar/VersionPicker.tsx +48 -0
  108. package/src/components/Sidebar/index.ts +2 -0
  109. package/src/components/index.ts +3 -0
  110. package/src/config.ts +140 -6
  111. package/src/globalStyle.ts +181 -16
  112. package/src/hooks/useThemeConfig.ts +18 -3
  113. package/src/mocks/hooks/index.ts +9 -3
  114. package/src/mocks/search.ts +1 -1
  115. package/src/types/portal/src/shared/types/catalog.ts +2 -26
  116. package/src/types/portal/src/shared/types/i18n.d.ts +3 -1
  117. package/src/types/portal/src/shared/types/nav.ts +41 -37
  118. package/src/types/portal/src/shared/types/searchDocument.ts +7 -4
  119. package/src/ui/darkColors.tsx +2 -0
  120. package/src/ui/index.tsx +0 -1
  121. package/lib/components/Navbar/NavbarDropdown.d.ts +0 -9
  122. package/lib/components/Navbar/NavbarDropdown.js +0 -40
  123. package/lib/components/Profile/UserProfileMenu.d.ts +0 -8
  124. package/lib/components/Profile/UserProfileMenu.js +0 -93
  125. package/src/components/Navbar/NavbarDropdown.tsx +0 -48
  126. package/src/components/Profile/UserProfileMenu.tsx +0 -97
@@ -1,45 +1,17 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
4
  };
28
5
  Object.defineProperty(exports, "__esModule", { value: true });
29
6
  exports.LanguagePicker = void 0;
30
- const react_1 = __importStar(require("react"));
31
- const react_router_dom_1 = require("react-router-dom");
7
+ const react_1 = __importDefault(require("react"));
32
8
  const styled_components_1 = __importDefault(require("styled-components"));
33
9
  const utils_1 = require("../mocks/utils");
34
10
  const usePreloadHistory_1 = require("../mocks/usePreloadHistory");
35
11
  const hooks_1 = require("../mocks/hooks");
36
- const hooks_2 = require("../hooks");
12
+ const Select_1 = require("../components/Select");
37
13
  const LanguagePicker = (props) => {
38
14
  const { currentLocale, locales, defaultLocale } = (0, hooks_1.useI18nConfig)();
39
- const dropdownRef = (0, react_1.useRef)(null);
40
- const [isOpen, setIsOpen] = (0, react_1.useState)(false);
41
- (0, hooks_2.useOutsideClick)(dropdownRef, () => setIsOpen(false));
42
- const location = (0, react_router_dom_1.useLocation)();
43
15
  const history = (0, usePreloadHistory_1.usePreloadHistory)();
44
16
  if (locales.length < 2) {
45
17
  return null;
@@ -48,69 +20,65 @@ const LanguagePicker = (props) => {
48
20
  if (!locale) {
49
21
  return null;
50
22
  }
51
- return (react_1.default.createElement(Dropdown, { "data-component-name": "I18n/LanguagePicker", ref: dropdownRef, isOpen: isOpen, onClick: () => setIsOpen(!isOpen), onBlur: () => setIsOpen(false) },
52
- react_1.default.createElement(DropdownValue, { role: "link" }, locale.name || locale.code),
53
- react_1.default.createElement(DropdownMenu, null, locales.map((locale) => (react_1.default.createElement(MenuItem, { onClick: () => {
54
- const newLangPathname = (0, utils_1.withPathPrefix)((0, utils_1.getPathnameForLocale)(location.pathname, defaultLocale, locale.code, locales));
55
- const newUrlWithLanguage = `${newLangPathname}${location.search}${location.hash}`;
56
- history.push(newUrlWithLanguage);
57
- props.onChangeLanguage(locale.code);
58
- }, key: locale.code, role: "link" }, locale.name || locale.code || ''))))));
23
+ const selected = locale.name || locale.code;
24
+ const languageItems = locales.map((locale) => (react_1.default.createElement(LanguageItem, { onClick: () => {
25
+ const newLangPathname = (0, utils_1.withPathPrefix)((0, utils_1.getPathnameForLocale)(location.pathname, defaultLocale, locale.code, locales));
26
+ const newUrlWithLanguage = `${newLangPathname}${location.search}${location.hash}`;
27
+ history.push(newUrlWithLanguage);
28
+ props.onChangeLanguage(locale.code);
29
+ }, key: locale.code, role: "link" }, locale.name || locale.code || '')));
30
+ return react_1.default.createElement(LanguageSelect, { selected: selected, options: languageItems, triggerEvent: "hover" });
59
31
  };
60
32
  exports.LanguagePicker = LanguagePicker;
61
- const Dropdown = styled_components_1.default.div `
62
- font-size: var(--profile-menu-item-font-size);
63
- font-family: var(--profile-menu-item-font-family);
64
- font-weight: var(--profile-menu-item-font-weight);
65
- line-height: var(--profile-menu-item-line-height);
33
+ const LanguageSelect = (0, styled_components_1.default)(Select_1.Select).attrs(() => ({
34
+ dataAttributes: {
35
+ 'data-component-name': 'I18n/LanguagePicker',
36
+ },
37
+ })) `
38
+ display: none;
39
+ font-size: var(--language-picker-font-size);
40
+ font-weight: var(--language-picker-font-weight);
41
+ line-height: var(--language-picker-line-height);
42
+ border-radius: var(--language-picker-border-radius);
43
+ color: var(--language-picker-text-color);
44
+
45
+ ${Select_1.SelectInput} {
46
+ color: var(--navbar-text-color);
47
+ border-radius: var(--language-picker-input-border-radius);
48
+ padding: var(--language-picker-input-padding-vertical)
49
+ var(--language-picker-input-padding-horizontal);
50
+ }
66
51
 
67
- ${(props) => props.isOpen
68
- ? `
69
- ${DropdownMenu} {
70
- display: block;
71
- z-index: var(--z-index-popover);
52
+ ${Select_1.SelectList} {
53
+ min-width: var(--language-picker-list-min-width);
54
+ max-width: var(--language-picker-list-max-width);
55
+ padding: var(--language-picker-list-padding);
56
+ background-color: var(--language-picker-list-background-color);
57
+ border-radius: var(--language-picker-list-border-radius);
58
+ box-shadow: var(--language-picker-list-box-shadow);
59
+ }
60
+
61
+ ${Select_1.SelectListItem} {
62
+ border-radius: var(--language-picker-list-item-border-radius);
63
+
64
+ & > * {
65
+ padding: var(--language-picker-list-item-vertical-padding)
66
+ var(--language-picker-list-item-horizontal-padding);
72
67
  }
73
- `
74
- : ``}
75
- `;
76
- const DropdownValue = styled_components_1.default.div `
77
- cursor: pointer;
78
- display: block;
79
68
 
80
- color: var(--navbar-text-color);
81
- padding: var(--navbar-item-padding-vertical) var(--navbar-item-padding-horizontal);
82
- border-radius: var(--navbar-item-border-radius);
69
+ :hover {
70
+ background-color: var(--language-picker-list-item-active-background-color);
71
+ }
72
+ }
83
73
 
84
- &:hover {
85
- color: var(--navbar-item-hover-text-color);
86
- text-decoration: var(--navbar-item-hover-text-decoration);
87
- background: var(--navbar-item-hover-background-color);
74
+ ${({ theme }) => theme.mediaQueries.medium} {
75
+ display: block;
88
76
  }
89
- `;
90
- const DropdownMenu = styled_components_1.default.ul `
91
- position: absolute;
92
- color: var(--profile-menu-item-text-color);
93
- background-color: var(--profile-menu-background-color);
94
- top: var(--navbar-height);
95
- margin: 0;
96
- box-shadow: 0 1px 2px rgb(204, 204, 204);
97
- border-radius: 0 1px 2px 2px;
98
- overflow: hidden;
99
- display: none;
100
- overflow-y: auto;
101
- z-index: var(--z-index-surface);
102
- padding: 0;
103
- list-style: none;
104
- `;
105
- const MenuItem = styled_components_1.default.li `
106
- padding: 10px;
107
- transition: all 0.2s ease-in-out;
108
- cursor: pointer;
109
77
 
110
- &:hover {
111
- color: var(--profile-menu-item-hover-text-color);
112
- text-decoration: var(--profile-menu-item-hover-text-decoration);
113
- background: var(--profile-menu-item-hover-background-color);
78
+ :hover {
79
+ text-decoration: var(--navbar-item-hover-text-decoration);
80
+ background: var(--navbar-item-hover-background-color);
114
81
  }
115
82
  `;
83
+ const LanguageItem = styled_components_1.default.div ``;
116
84
  //# sourceMappingURL=LanguagePicker.js.map
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import type { CatalogConfig } from '../../types/portal/src/shared/types/catalog';
2
+ import type { CatalogConfig } from '../../config';
3
3
  export default function Catalog(props: {
4
4
  pageProps: {
5
5
  catalogId: string;
@@ -1,3 +1,4 @@
1
1
  import type { ResolvedNavItem } from '../../types/portal';
2
- import type { CatalogConfig, FilteredCatalog } from '../../types/portal/src/shared/types/catalog';
2
+ import type { FilteredCatalog } from '../../types/portal/src/shared/types/catalog';
3
+ import type { CatalogConfig } from '../../config';
3
4
  export declare function useCatalog(items: ResolvedNavItem[], config: CatalogConfig): FilteredCatalog;
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ export interface DropdownProps {
3
+ children: React.ReactNode;
4
+ items: JSX.Element[] | string[];
5
+ dataAttributes?: Record<string, string>;
6
+ className?: string;
7
+ withArrow?: boolean;
8
+ triggerEvent?: 'click' | 'hover';
9
+ onChange?: (value: React.ReactNode | string) => void;
10
+ }
11
+ export declare const Dropdown: ({ children, className, items, withArrow, triggerEvent, onChange, dataAttributes, }: DropdownProps) => JSX.Element;
12
+ export declare const DropdownHeader: import("styled-components").StyledComponent<"div", any, {}, never>;
13
+ export declare const DropdownList: import("styled-components").StyledComponent<"ul", any, {}, never>;
14
+ export declare const DropdownListItem: import("styled-components").StyledComponent<"li", any, {
15
+ separator?: boolean | undefined;
16
+ }, never>;
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.DropdownListItem = exports.DropdownList = exports.DropdownHeader = exports.Dropdown = void 0;
27
+ const react_1 = __importStar(require("react"));
28
+ const styled_components_1 = __importStar(require("styled-components"));
29
+ const icons_1 = require("../../icons");
30
+ const hooks_1 = require("../../hooks");
31
+ const Dropdown = ({ children, className, items, withArrow, triggerEvent = 'click', onChange, dataAttributes, }) => {
32
+ const dropdownRef = (0, react_1.useRef)(null);
33
+ const [isOpen, setIsOpen] = (0, react_1.useState)(false);
34
+ const handleOpen = () => {
35
+ setIsOpen(true);
36
+ };
37
+ const handleClose = () => {
38
+ setIsOpen(false);
39
+ };
40
+ const handleToggle = () => {
41
+ setIsOpen(!isOpen);
42
+ };
43
+ const handleClick = (value) => {
44
+ setIsOpen(false);
45
+ onChange === null || onChange === void 0 ? void 0 : onChange(value);
46
+ };
47
+ (0, hooks_1.useOutsideClick)(dropdownRef, handleClose);
48
+ return (react_1.default.createElement(DropdownContainer, Object.assign({}, dataAttributes, { "data-testid": "dropdown", className: className, ref: dropdownRef, onPointerEnter: triggerEvent === 'hover' ? handleOpen : undefined, onPointerLeave: handleClose, onClick: triggerEvent === 'click' ? handleToggle : undefined }),
49
+ react_1.default.createElement(exports.DropdownHeader, null,
50
+ children,
51
+ withArrow ? isOpen ? react_1.default.createElement(icons_1.ArrowIcon, { direction: "up" }) : react_1.default.createElement(icons_1.ArrowIcon, { direction: "down" }) : null),
52
+ isOpen && (react_1.default.createElement(exports.DropdownList, null, items.map((item, index) => {
53
+ var _a;
54
+ return (react_1.default.createElement(exports.DropdownListItem, { key: index, onClick: () => handleClick(item), separator: (_a = item.props) === null || _a === void 0 ? void 0 : _a.separator }, item));
55
+ })))));
56
+ };
57
+ exports.Dropdown = Dropdown;
58
+ const DropdownContainer = styled_components_1.default.div `
59
+ position: relative;
60
+ font-size: var(--dropdown-font-size);
61
+ font-weight: var(--dropdown-font-weight);
62
+ line-height: var(--dropdown-line-height);
63
+ border-radius: var(--dropdown-border-radius);
64
+ color: var(--dropdown-text-color);
65
+
66
+ a {
67
+ display: block;
68
+ text-decoration: none;
69
+ color: var(--dropdown-text-color);
70
+ }
71
+ `;
72
+ exports.DropdownHeader = styled_components_1.default.div `
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: space-between;
76
+ cursor: pointer;
77
+ `;
78
+ exports.DropdownList = styled_components_1.default.ul `
79
+ position: absolute;
80
+ top: 100%;
81
+ left: 0;
82
+ margin: 0;
83
+ min-width: var(--dropdown-list-min-width);
84
+ max-width: var(--dropdown-list-max-width);
85
+ padding: var(--dropdown-list-padding);
86
+ background-color: var(--dropdown-list-background-color);
87
+ border-radius: var(--dropdown-list-border-radius);
88
+ box-shadow: var(--dropdown-list-box-shadow);
89
+ list-style-type: none;
90
+ cursor: pointer;
91
+ white-space: nowrap;
92
+ overflow: hidden;
93
+ z-index: 1;
94
+ `;
95
+ exports.DropdownListItem = styled_components_1.default.li `
96
+ border-radius: var(--dropdown-list-item-border-radius);
97
+
98
+ & > * {
99
+ padding: var(--dropdown-list-item-vertical-padding) var(--dropdown-list-item-horizontal-padding);
100
+ }
101
+
102
+ :hover {
103
+ background-color: var(--dropdown-list-item-active-background-color);
104
+ }
105
+
106
+ ${({ separator }) => separator &&
107
+ (0, styled_components_1.css) `
108
+ border-bottom: 1px solid var(--dropdown-list-item-separator-color);
109
+ border-bottom-left-radius: 0;
110
+ border-bottom-right-radius: 0;
111
+ `}
112
+ `;
113
+ //# sourceMappingURL=Dropdown.js.map
@@ -0,0 +1 @@
1
+ export * from '../../components/Dropdown/Dropdown';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("../../components/Dropdown/Dropdown"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -33,6 +33,7 @@ const ArrowIcon_1 = require("../../icons/ArrowIcon/ArrowIcon");
33
33
  const MenuLinkItem_1 = require("../../components/Menu/MenuLinkItem");
34
34
  const MenuItemLabel_1 = require("../../components/Menu/MenuItemLabel");
35
35
  const SeparatorLine_1 = require("../../components/Separator/SeparatorLine");
36
+ const SidebarItemIcon_1 = require("../../components/Sidebar/SidebarItemIcon");
36
37
  const hooks_1 = require("../../mocks/hooks");
37
38
  function MenuGroup({ item, isExpanded, toggleExpanded, children, className, }) {
38
39
  const [showChildren, setShowChildren] = (0, react_1.useState)(isExpanded);
@@ -56,6 +57,7 @@ function MenuGroup({ item, isExpanded, toggleExpanded, children, className, }) {
56
57
  react_1.default.createElement(MenuLinkItem_1.MenuLinkItem, { item: item },
57
58
  react_1.default.createElement(MenuGroupLabel, { onClick: toggleExpanded, isAlwaysExpanded: item.expanded === 'always', active: item.active, role: !item.link ? 'link' : 'none' },
58
59
  !!item.items.length && react_1.default.createElement(MenuGroupArrow, { direction: isExpanded ? 'down' : 'right' }),
60
+ item.icon ? react_1.default.createElement(SidebarItemIcon_1.SidebarItemIcon, { src: item.icon }) : null,
59
61
  translate(item.labelTranslationKey, item.label))),
60
62
  react_1.default.createElement(MenuWrapper, { isExpanded: isExpanded }, showChildren ? children : null),
61
63
  item.separatorLine ? react_1.default.createElement(SeparatorLine_1.SeparatorLine, null) : null));
@@ -10,12 +10,14 @@ const MenuLinkItem_1 = require("../../components/Menu/MenuLinkItem");
10
10
  const ExternalIcon_1 = require("../../icons/ExternalIcon");
11
11
  const MenuItemLabel_1 = require("../../components/Menu/MenuItemLabel");
12
12
  const SeparatorLine_1 = require("../../components/Separator/SeparatorLine");
13
+ const SidebarItemIcon_1 = require("../../components/Sidebar/SidebarItemIcon");
13
14
  const hooks_1 = require("../../mocks/hooks");
14
15
  function MenuItem({ item, className }) {
15
16
  const { translate } = (0, hooks_1.useTranslate)();
16
17
  return (react_1.default.createElement(Wrapper, { "data-component-name": "Sidebar/MenuItem", className: className },
17
18
  react_1.default.createElement(MenuLinkItem_1.MenuLinkItem, { item: item },
18
19
  react_1.default.createElement(Label, { active: item.active },
20
+ item.icon ? react_1.default.createElement(SidebarItemIcon_1.SidebarItemIcon, { src: item.icon }) : null,
19
21
  translate(item.labelTranslationKey, item.label),
20
22
  item.external ? react_1.default.createElement(ExternalIcon_1.ExternalIcon, { dataComponentName: "Sidebar/ExternalIcon" }) : null)),
21
23
  item.separatorLine ? react_1.default.createElement(SeparatorLine_1.SeparatorLine, null) : null));
@@ -1,11 +1,4 @@
1
1
  /// <reference types="react" />
2
- import type { ResolvedNavItem } from '../../types/portal';
3
- import type { ItemState } from '../../mocks/Sidebar/types';
4
- interface MobileMenuProps {
5
- navItems: ResolvedNavItem[];
6
- sidebarItems: ItemState[];
7
- className?: string;
8
- }
9
- export declare function MobileMenu({ navItems, sidebarItems, className, }: MobileMenuProps): JSX.Element | null;
2
+ import type { MobileMenuProps } from '../../components/Menu/types';
3
+ export declare function MobileMenu({ className }: MobileMenuProps): JSX.Element | null;
10
4
  export declare const ControlButton: import("styled-components").StyledComponent<"li", any, {}, never>;
11
- export {};
@@ -30,68 +30,46 @@ exports.ControlButton = exports.MobileMenu = void 0;
30
30
  const react_1 = __importStar(require("react"));
31
31
  const react_router_dom_1 = require("react-router-dom");
32
32
  const styled_components_1 = __importDefault(require("styled-components"));
33
- const NavbarDropdown_1 = require("../../components/Navbar/NavbarDropdown");
34
- const utils_1 = require("../../utils");
33
+ const constants_1 = require("../../components/Menu/constants");
35
34
  const index_1 = require("../../components/Menu/index");
36
35
  const MobileUserProfile_1 = require("../../components/Navbar/MobileUserProfile");
37
- const utils_2 = require("../../mocks/utils");
38
36
  const hooks_1 = require("../../mocks/hooks");
39
37
  const icons_1 = require("../../icons");
40
- var MenuLevel;
41
- (function (MenuLevel) {
42
- MenuLevel["NAVBAR"] = "NAVBAR";
43
- MenuLevel["SIDEBAR"] = "SIDEBAR";
44
- })(MenuLevel || (MenuLevel = {}));
45
- function MobileMenu({ navItems, sidebarItems, className, }) {
46
- const [menuLevel, setMenuLevel] = (0, react_1.useState)(sidebarItems.length ? MenuLevel.SIDEBAR : MenuLevel.NAVBAR);
47
- const { pathname, hash } = (0, react_router_dom_1.useLocation)();
48
- const pathHash = pathname + hash;
49
- const { defaultLocale, currentLocale, locales } = (0, hooks_1.useI18nConfig)();
50
- const { translate } = (0, hooks_1.useTranslate)();
51
- if ((0, utils_1.isPrimitive)(navItems) || (0, utils_1.isEmptyArray)(navItems)) {
52
- return null;
53
- }
54
- const isItemActive = (item) => {
55
- return (pathHash ===
56
- (0, utils_1.withPathPrefix)((0, utils_2.getPathnameForLocale)(item.link || '/', defaultLocale, currentLocale, locales)));
57
- };
58
- const mapNavbarItems = (items) => {
59
- return items.map((navItem) => {
60
- var _a;
61
- return (Object.assign(Object.assign(Object.assign(Object.assign({}, navItem), (navItem.items && { items: mapNavbarItems(navItem.items) })), ('link' in navItem && { link: navItem.link || '/' })), { active: 'link' in navItem && isItemActive(navItem), hasActiveSubItem: !!((_a = navItem.items) === null || _a === void 0 ? void 0 : _a.find(isItemActive)) }));
62
- });
63
- };
64
- let menuItems;
65
- switch (menuLevel) {
66
- case MenuLevel.SIDEBAR:
67
- menuItems = sidebarItems;
68
- break;
69
- default:
70
- menuItems = mapNavbarItems(navItems);
71
- }
72
- const isMenuButtonVisible = menuLevel === MenuLevel.SIDEBAR;
73
- const isPreviousButtonVisible = menuLevel === MenuLevel.NAVBAR && !!sidebarItems.length;
74
- const isButtonsSectionVisible = isMenuButtonVisible || isPreviousButtonVisible;
75
- const translationKeys = {
76
- mainMenu: 'theme.mobileMenu.mainMenu',
77
- previous: 'theme.mobileMenu.previous',
78
- };
38
+ const Product_1 = require("../../components/Product/Product");
39
+ const use_mobile_menu_levels_1 = require("../../components/Menu/hooks/use-mobile-menu-levels");
40
+ const use_mobile_menu_items_1 = require("../../components/Menu/hooks/use-mobile-menu-items");
41
+ function MobileMenu({ className }) {
42
+ var _a, _b, _c;
43
+ const location = (0, react_router_dom_1.useLocation)();
44
+ const product = (0, hooks_1.useCurrentProduct)();
45
+ const menuLevels = (0, use_mobile_menu_levels_1.useMobileMenuLevels)();
46
+ const [menuLevel, setMenuLevel] = (0, react_1.useState)(menuLevels.length - 1);
47
+ (0, react_1.useEffect)(() => {
48
+ setMenuLevel(menuLevels.length - 1);
49
+ }, [menuLevels, location]);
50
+ const menuType = ((_a = menuLevels[menuLevel]) === null || _a === void 0 ? void 0 : _a.type) || constants_1.MenuType.MAIN_MENU;
51
+ const menuItems = (0, use_mobile_menu_items_1.useMobileMenuItems)(menuType);
52
+ const prevLevelName = (_b = menuLevels[menuLevel - 1]) === null || _b === void 0 ? void 0 : _b.label;
53
+ const nextLevelName = (_c = menuLevels[menuLevel + 1]) === null || _c === void 0 ? void 0 : _c.label;
54
+ const isButtonsSectionVisible = nextLevelName || prevLevelName;
79
55
  return (react_1.default.createElement(MobileMenuWrapper, { "data-component-name": "Menu/MobileMenu", className: className },
80
56
  react_1.default.createElement(ScrollableArea, null,
81
- isButtonsSectionVisible && (react_1.default.createElement(ButtonsSection, { alignRight: isPreviousButtonVisible },
82
- isMenuButtonVisible && (react_1.default.createElement(exports.ControlButton, { "data-component-name": "Menu/ControlButton", onClick: () => setMenuLevel(MenuLevel.NAVBAR) },
57
+ isButtonsSectionVisible && (react_1.default.createElement(ButtonsSection, { alignRight: !prevLevelName && !!nextLevelName },
58
+ prevLevelName && (react_1.default.createElement(exports.ControlButton, { "data-component-name": "Menu/ControlButton", onClick: () => setMenuLevel(menuLevel - 1) },
83
59
  react_1.default.createElement(icons_1.ArrowIcon, { direction: "left", weight: "thin" }),
84
- react_1.default.createElement(ControlButtonLabel, { paddingDirection: "left" }, translate(translationKeys.mainMenu, 'Main Menu')))),
85
- isPreviousButtonVisible && (react_1.default.createElement(exports.ControlButton, { "data-component-name": "Menu/ControlButton", onClick: () => setMenuLevel(MenuLevel.SIDEBAR) },
86
- react_1.default.createElement(ControlButtonLabel, { paddingDirection: "right" }, translate(translationKeys.previous, 'Previous')),
60
+ react_1.default.createElement(ControlButtonLabel, { paddingDirection: "left" }, prevLevelName))),
61
+ nextLevelName && (react_1.default.createElement(exports.ControlButton, { "data-component-name": "Menu/ControlButton", onClick: () => setMenuLevel(menuLevel + 1) },
62
+ react_1.default.createElement(ControlButtonLabel, { paddingDirection: "right" }, nextLevelName),
87
63
  react_1.default.createElement(icons_1.ArrowIcon, { direction: "right", weight: "thin" }))))),
64
+ menuType === constants_1.MenuType.PRODUCT && product ? (react_1.default.createElement(ProductNameWrapper, null,
65
+ react_1.default.createElement(Product_1.Product, { product: product }))) : null,
88
66
  react_1.default.createElement(MenuWrapper, null,
89
67
  react_1.default.createElement(index_1.Menu, { items: menuItems, isMobile: true }))),
90
68
  react_1.default.createElement(MobileUserProfile_1.MobileUserProfile, null)));
91
69
  }
92
70
  exports.MobileMenu = MobileMenu;
93
71
  const MobileMenuWrapper = styled_components_1.default.div `
94
- height: 100%;
72
+ height: calc(100vh - var(--navbar-height));
95
73
  width: 100%;
96
74
  position: fixed;
97
75
  z-index: var(--z-index-raised);
@@ -106,21 +84,6 @@ const MobileMenuWrapper = styled_components_1.default.div `
106
84
  ${({ theme }) => theme.mediaQueries.medium} {
107
85
  display: none;
108
86
  }
109
-
110
- ${NavbarDropdown_1.DropdownWrapper} {
111
- & > div {
112
- text-align: center;
113
- padding: 10px 0;
114
- cursor: pointer;
115
- a {
116
- color: var(--navbar-text-color);
117
- text-decoration: none;
118
- }
119
- :hover {
120
- text-decoration: underline;
121
- }
122
- }
123
- }
124
87
  `;
125
88
  const ButtonsSection = styled_components_1.default.div `
126
89
  align-items: center;
@@ -130,9 +93,8 @@ const ButtonsSection = styled_components_1.default.div `
130
93
  `;
131
94
  const ScrollableArea = styled_components_1.default.div `
132
95
  padding-top: var(--mobile-menu-padding-top);
133
- flex: 1;
134
96
  overflow-y: scroll;
135
- margin-bottom: 140px;
97
+ flex-grow: 1;
136
98
  `;
137
99
  const MenuWrapper = styled_components_1.default.div `
138
100
  margin: 0 var(--mobile-menu-horizontal-margin);
@@ -176,4 +138,12 @@ const ControlButtonLabel = styled_components_1.default.span `
176
138
  ${({ paddingDirection }) => paddingDirection === 'left' && 'padding-left: 8px'};
177
139
  ${({ paddingDirection }) => paddingDirection === 'right' && 'padding-right: 8px'};
178
140
  `;
141
+ const ProductNameWrapper = styled_components_1.default.div `
142
+ color: var(--mobile-menu-item-text-color);
143
+ border-radius: var(--mobile-menu-item-radius);
144
+ padding-left: var(--sidebar-item-padding-horizontal);
145
+ border: 1px solid rgba(0, 0, 0, 0.06);
146
+ padding: 8px 7px;
147
+ margin: 12px 8px 0 8px;
148
+ `;
179
149
  //# sourceMappingURL=MobileMenu.js.map
@@ -11,12 +11,14 @@ const MenuItemLabel_1 = require("../../components/Menu/MenuItemLabel");
11
11
  const SeparatorLine_1 = require("../../components/Separator/SeparatorLine");
12
12
  const hooks_1 = require("../../mocks/hooks");
13
13
  const icons_1 = require("../../icons");
14
+ const SidebarItemIcon_1 = require("../../components/Sidebar/SidebarItemIcon");
14
15
  function MobileMenuGroup({ item, isExpanded, toggleExpanded, children, }) {
15
16
  const { translate } = (0, hooks_1.useTranslate)();
16
17
  return (react_1.default.createElement(Wrapper, { "data-component-name": "Menu/MobileMenuGroup" },
17
18
  react_1.default.createElement(MenuLinkItem_1.MenuLinkItem, { item: item },
18
19
  react_1.default.createElement(MenuGroupLabel, { onClick: toggleExpanded, active: item.active, expanded: isExpanded },
19
20
  react_1.default.createElement(LabelContainer, null,
21
+ item.icon ? react_1.default.createElement(SidebarItemIcon_1.SidebarItemIcon, { src: item.icon }) : null,
20
22
  react_1.default.createElement(Label, null, translate(item.labelTranslationKey, item.label))),
21
23
  !!item.items.length && (react_1.default.createElement(icons_1.ArrowIcon, { direction: isExpanded ? 'down' : 'right', weight: "thin" })))),
22
24
  react_1.default.createElement(MenuWrapper, { isExpanded: isExpanded }, children),
@@ -0,0 +1,5 @@
1
+ export declare enum MenuType {
2
+ MAIN_MENU = "MAIN_MENU",
3
+ PRODUCT = "PRODUCT",
4
+ PAGE = "PAGE"
5
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MenuType = void 0;
4
+ var MenuType;
5
+ (function (MenuType) {
6
+ MenuType["MAIN_MENU"] = "MAIN_MENU";
7
+ MenuType["PRODUCT"] = "PRODUCT";
8
+ MenuType["PAGE"] = "PAGE";
9
+ })(MenuType = exports.MenuType || (exports.MenuType = {}));
10
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1,2 @@
1
+ import { MenuType } from '../constants';
2
+ export declare const useMobileMenuItems: (menuType: MenuType) => import("../../Sidebar/types").ItemState[];