@gravity-ui/page-constructor 3.10.3 → 3.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/README.md +9 -11
  2. package/build/cjs/components/Media/Image/Image.js +3 -2
  3. package/build/cjs/editor/components/ControlPanel/ControlPanel.js +4 -1
  4. package/build/cjs/editor/components/DeviceEmulation/DeviceEmulation.d.ts +7 -0
  5. package/build/cjs/editor/components/DeviceEmulation/DeviceEmulation.js +10 -0
  6. package/build/cjs/editor/components/DeviceEmulation/DeviceEmulationMobile/DeviceEmulationMobile.css +33 -0
  7. package/build/cjs/editor/components/DeviceEmulation/DeviceEmulationMobile/DeviceEmulationMobile.d.ts +8 -0
  8. package/build/cjs/editor/components/DeviceEmulation/DeviceEmulationMobile/DeviceEmulationMobile.js +41 -0
  9. package/build/cjs/editor/components/DeviceEmulation/utils.d.ts +4 -0
  10. package/build/cjs/editor/components/DeviceEmulation/utils.js +7 -0
  11. package/build/cjs/editor/components/Layout/Layout.js +3 -1
  12. package/build/cjs/editor/containers/Editor/Editor.d.ts +1 -1
  13. package/build/cjs/editor/containers/Editor/Editor.js +34 -9
  14. package/build/cjs/editor/containers/Form/Form.js +2 -2
  15. package/build/cjs/editor/context.d.ts +9 -0
  16. package/build/cjs/editor/context.js +6 -0
  17. package/build/cjs/editor/icons/Tablet.d.ts +2 -0
  18. package/build/cjs/editor/icons/Tablet.js +9 -0
  19. package/build/cjs/editor/types/index.d.ts +14 -5
  20. package/build/cjs/editor/types/index.js +3 -1
  21. package/build/cjs/editor/utils/index.d.ts +2 -0
  22. package/build/cjs/editor/utils/index.js +4 -1
  23. package/build/cjs/editor/widget/constants.d.ts +4 -0
  24. package/build/cjs/editor/widget/constants.js +8 -0
  25. package/build/cjs/editor/widget/index.d.ts +21 -0
  26. package/build/cjs/editor/widget/index.js +76 -0
  27. package/build/cjs/editor/widget/utils.d.ts +1 -0
  28. package/build/cjs/editor/widget/utils.js +19 -0
  29. package/build/cjs/hooks/useHeightCalculator.js +1 -1
  30. package/build/cjs/models/navigation.d.ts +3 -2
  31. package/build/{esm/navigation/components/Header/Header.css → cjs/navigation/components/DesktopNavigation/DesktopNavigation.css} +28 -36
  32. package/build/cjs/navigation/components/DesktopNavigation/DesktopNavigation.d.ts +4 -0
  33. package/build/cjs/navigation/components/DesktopNavigation/DesktopNavigation.js +21 -0
  34. package/build/cjs/navigation/components/MobileMenuButton/MobileMenuButton.css +7 -0
  35. package/build/cjs/navigation/components/MobileMenuButton/MobileMenuButton.d.ts +3 -0
  36. package/build/cjs/navigation/components/MobileMenuButton/MobileMenuButton.js +15 -0
  37. package/build/cjs/navigation/components/MobileNavigation/MobileNavigation.css +10 -5
  38. package/build/cjs/navigation/components/MobileNavigation/MobileNavigation.d.ts +1 -10
  39. package/build/cjs/navigation/components/MobileNavigation/MobileNavigation.js +7 -30
  40. package/build/cjs/navigation/components/Navigation/Navigation.css +8 -13
  41. package/build/cjs/navigation/components/Navigation/Navigation.d.ts +4 -7
  42. package/build/cjs/navigation/components/Navigation/Navigation.js +37 -15
  43. package/build/cjs/navigation/components/NavigationItem/NavigationItem.css +28 -0
  44. package/build/cjs/navigation/components/NavigationItem/NavigationItem.d.ts +3 -9
  45. package/build/cjs/navigation/components/NavigationItem/NavigationItem.js +15 -6
  46. package/build/cjs/navigation/components/NavigationItem/components/GithubButton/GithubButton.d.ts +1 -1
  47. package/build/cjs/navigation/components/NavigationItem/components/NavigationButton/NavigationButton.d.ts +1 -1
  48. package/build/cjs/navigation/components/NavigationItem/components/NavigationDropdown/NavigationDropdown.d.ts +5 -4
  49. package/build/cjs/navigation/components/NavigationItem/components/NavigationDropdown/NavigationDropdown.js +12 -7
  50. package/build/cjs/navigation/components/NavigationItem/components/NavigationLink/NavigationLink.d.ts +1 -1
  51. package/build/cjs/navigation/components/NavigationList/NavigationList.d.ts +3 -0
  52. package/build/cjs/navigation/components/NavigationList/NavigationList.js +11 -0
  53. package/build/cjs/navigation/components/NavigationListItem/NavigationListItem.d.ts +4 -13
  54. package/build/cjs/navigation/components/NavigationListItem/NavigationListItem.js +6 -13
  55. package/build/cjs/navigation/components/NavigationPopup/NavigationPopup.css +5 -4
  56. package/build/cjs/navigation/components/NavigationPopup/NavigationPopup.d.ts +1 -8
  57. package/build/cjs/navigation/components/NavigationPopup/NavigationPopup.js +6 -6
  58. package/build/cjs/navigation/containers/Layout/Layout.js +2 -2
  59. package/build/cjs/navigation/models.d.ts +63 -0
  60. package/build/cjs/navigation/{constants.js → models.js} +7 -1
  61. package/build/cjs/navigation/utils.d.ts +11 -1
  62. package/build/cjs/navigation/utils.js +19 -1
  63. package/build/esm/components/Media/Image/Image.js +3 -2
  64. package/build/esm/editor/components/ControlPanel/ControlPanel.js +6 -3
  65. package/build/esm/editor/components/DeviceEmulation/DeviceEmulation.d.ts +7 -0
  66. package/build/esm/editor/components/DeviceEmulation/DeviceEmulation.js +7 -0
  67. package/build/esm/editor/components/DeviceEmulation/DeviceEmulationMobile/DeviceEmulationMobile.css +33 -0
  68. package/build/esm/editor/components/DeviceEmulation/DeviceEmulationMobile/DeviceEmulationMobile.d.ts +9 -0
  69. package/build/esm/editor/components/DeviceEmulation/DeviceEmulationMobile/DeviceEmulationMobile.js +40 -0
  70. package/build/esm/editor/components/DeviceEmulation/utils.d.ts +4 -0
  71. package/build/esm/editor/components/DeviceEmulation/utils.js +3 -0
  72. package/build/esm/editor/components/Layout/Layout.js +3 -1
  73. package/build/esm/editor/containers/Editor/Editor.d.ts +1 -1
  74. package/build/esm/editor/containers/Editor/Editor.js +35 -10
  75. package/build/esm/editor/containers/Form/Form.js +2 -2
  76. package/build/esm/editor/context.d.ts +9 -0
  77. package/build/esm/editor/context.js +2 -0
  78. package/build/esm/editor/icons/Tablet.d.ts +2 -0
  79. package/build/esm/editor/icons/Tablet.js +4 -0
  80. package/build/esm/editor/types/index.d.ts +14 -5
  81. package/build/esm/editor/types/index.js +3 -1
  82. package/build/esm/editor/utils/index.d.ts +2 -0
  83. package/build/esm/editor/utils/index.js +2 -0
  84. package/build/esm/editor/widget/constants.d.ts +4 -0
  85. package/build/esm/editor/widget/constants.js +5 -0
  86. package/build/esm/editor/widget/index.d.ts +21 -0
  87. package/build/esm/editor/widget/index.js +71 -0
  88. package/build/esm/editor/widget/utils.d.ts +1 -0
  89. package/build/esm/editor/widget/utils.js +15 -0
  90. package/build/esm/hooks/useHeightCalculator.js +1 -1
  91. package/build/esm/models/navigation.d.ts +3 -2
  92. package/build/{cjs/navigation/components/Header/Header.css → esm/navigation/components/DesktopNavigation/DesktopNavigation.css} +28 -36
  93. package/build/esm/navigation/components/DesktopNavigation/DesktopNavigation.d.ts +5 -0
  94. package/build/esm/navigation/components/DesktopNavigation/DesktopNavigation.js +19 -0
  95. package/build/esm/navigation/components/MobileMenuButton/MobileMenuButton.css +7 -0
  96. package/build/esm/navigation/components/MobileMenuButton/MobileMenuButton.d.ts +4 -0
  97. package/build/esm/navigation/components/MobileMenuButton/MobileMenuButton.js +11 -0
  98. package/build/esm/navigation/components/MobileNavigation/MobileNavigation.css +10 -5
  99. package/build/esm/navigation/components/MobileNavigation/MobileNavigation.d.ts +1 -10
  100. package/build/esm/navigation/components/MobileNavigation/MobileNavigation.js +9 -31
  101. package/build/esm/navigation/components/Navigation/Navigation.css +8 -13
  102. package/build/esm/navigation/components/Navigation/Navigation.d.ts +4 -7
  103. package/build/esm/navigation/components/Navigation/Navigation.js +35 -15
  104. package/build/esm/navigation/components/NavigationItem/NavigationItem.css +28 -0
  105. package/build/esm/navigation/components/NavigationItem/NavigationItem.d.ts +4 -9
  106. package/build/esm/navigation/components/NavigationItem/NavigationItem.js +16 -6
  107. package/build/esm/navigation/components/NavigationItem/components/GithubButton/GithubButton.d.ts +1 -1
  108. package/build/esm/navigation/components/NavigationItem/components/NavigationButton/NavigationButton.d.ts +1 -1
  109. package/build/esm/navigation/components/NavigationItem/components/NavigationDropdown/NavigationDropdown.d.ts +5 -4
  110. package/build/esm/navigation/components/NavigationItem/components/NavigationDropdown/NavigationDropdown.js +12 -7
  111. package/build/esm/navigation/components/NavigationItem/components/NavigationLink/NavigationLink.d.ts +1 -1
  112. package/build/esm/navigation/components/NavigationList/NavigationList.d.ts +3 -0
  113. package/build/esm/navigation/components/NavigationList/NavigationList.js +7 -0
  114. package/build/esm/navigation/components/NavigationListItem/NavigationListItem.d.ts +4 -14
  115. package/build/esm/navigation/components/NavigationListItem/NavigationListItem.js +5 -10
  116. package/build/esm/navigation/components/NavigationPopup/NavigationPopup.css +5 -4
  117. package/build/esm/navigation/components/NavigationPopup/NavigationPopup.d.ts +1 -8
  118. package/build/esm/navigation/components/NavigationPopup/NavigationPopup.js +6 -6
  119. package/build/esm/navigation/containers/Layout/Layout.js +2 -2
  120. package/build/esm/navigation/models.d.ts +63 -0
  121. package/build/esm/navigation/{constants.js → models.js} +6 -0
  122. package/build/esm/navigation/utils.d.ts +11 -1
  123. package/build/esm/navigation/utils.js +17 -0
  124. package/package.json +39 -16
  125. package/server/models/navigation.d.ts +3 -2
  126. package/widget/index.js +1 -0
  127. package/CHANGELOG.md +0 -1469
  128. package/build/cjs/navigation/components/Header/Header.d.ts +0 -8
  129. package/build/cjs/navigation/components/Header/Header.js +0 -86
  130. package/build/cjs/navigation/components/NavigationDropdownItem/NavigationDropdownItem.d.ts +0 -11
  131. package/build/cjs/navigation/components/NavigationDropdownItem/NavigationDropdownItem.js +0 -15
  132. package/build/cjs/navigation/components/NavigationListItem/NavigationListItem.css +0 -27
  133. package/build/cjs/navigation/constants.d.ts +0 -6
  134. package/build/esm/navigation/components/Header/Header.d.ts +0 -9
  135. package/build/esm/navigation/components/Header/Header.js +0 -82
  136. package/build/esm/navigation/components/NavigationDropdownItem/NavigationDropdownItem.d.ts +0 -11
  137. package/build/esm/navigation/components/NavigationDropdownItem/NavigationDropdownItem.js +0 -13
  138. package/build/esm/navigation/components/NavigationListItem/NavigationListItem.css +0 -27
  139. package/build/esm/navigation/constants.d.ts +0 -6
@@ -1,15 +1,20 @@
1
- import React from 'react';
1
+ import { __rest } from "tslib";
2
+ import React, { Fragment, useRef } from 'react';
2
3
  import { ToggleArrow } from '../../../../../components';
3
4
  import { getMediaImage } from '../../../../../components/Media/Image/utils';
4
5
  import { block } from '../../../../../utils';
6
+ import NavigationPopup from '../../../NavigationPopup/NavigationPopup';
5
7
  import { ContentWrapper } from '../ContentWrapper/ContentWrapper';
6
8
  import './NavigationDropdown.css';
7
9
  const b = block('navigation-dropdown');
8
10
  const TOGGLE_ARROW_SIZE = 12;
9
- export const NavigationDropdown = React.forwardRef(({ text, icon, isOpened, className, iconSize, onClick }, ref) => {
11
+ export const NavigationDropdown = (_a) => {
12
+ var { text, icon, className, iconSize, hidePopup, items, isActive } = _a, props = __rest(_a, ["text", "icon", "className", "iconSize", "hidePopup", "items", "isActive"]);
10
13
  const iconData = icon && getMediaImage(icon);
11
- return (React.createElement("span", { ref: ref, onClick: onClick, className: b(null, className) },
12
- React.createElement(ContentWrapper, { text: text, icon: iconData, iconSize: iconSize }),
13
- React.createElement(ToggleArrow, { className: b('arrow'), size: TOGGLE_ARROW_SIZE, type: 'vertical', iconType: "navigation", open: isOpened })));
14
- });
15
- NavigationDropdown.displayName = 'NavigationDropdown';
14
+ const anchorRef = useRef(null);
15
+ return (React.createElement(Fragment, null,
16
+ React.createElement("span", Object.assign({ ref: anchorRef }, props, { className: b(null, className) }),
17
+ React.createElement(ContentWrapper, { text: text, icon: iconData, iconSize: iconSize }),
18
+ React.createElement(ToggleArrow, { className: b('arrow'), size: TOGGLE_ARROW_SIZE, type: 'vertical', iconType: "navigation", open: isActive })),
19
+ React.createElement(NavigationPopup, { open: isActive, onClose: hidePopup, items: items, anchorRef: anchorRef })));
20
+ };
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { NavigationLinkItem } from '../../../../../models';
3
- import { NavigationItemProps } from '../../NavigationItem';
3
+ import { NavigationItemProps } from '../../../../models';
4
4
  import './NavigationLink.css';
5
5
  type NavigationLinkProps = NavigationItemProps & NavigationLinkItem;
6
6
  export declare const NavigationLink: React.FC<NavigationLinkProps>;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import { NavigationListProps } from '../../models';
3
+ export declare const NavigationList: React.FC<NavigationListProps>;
@@ -0,0 +1,7 @@
1
+ import { __rest } from "tslib";
2
+ import React from 'react';
3
+ import NavigationListItem from '../NavigationListItem/NavigationListItem';
4
+ export const NavigationList = (_a) => {
5
+ var { className, itemClassName, items } = _a, props = __rest(_a, ["className", "itemClassName", "items"]);
6
+ return (React.createElement("ul", { className: className }, items.map((item, index) => (React.createElement(NavigationListItem, Object.assign({ key: index, index: index, data: item, className: itemClassName }, props))))));
7
+ };
@@ -1,14 +1,4 @@
1
- import { ClassNameProps, NavigationItemModel } from '../../../models';
2
- import { ItemColumnName } from '../../constants';
3
- import './NavigationListItem.css';
4
- type NavigationListItemProps = {
5
- item: NavigationItemModel;
6
- index: number;
7
- column: ItemColumnName;
8
- activeItemId?: string;
9
- highlightActiveItem?: boolean;
10
- hidePopup: () => void;
11
- onActiveItemChange: (id?: string) => void;
12
- } & ClassNameProps;
13
- export declare const NavigationListItem: ({ item, className, index, activeItemId, highlightActiveItem, hidePopup, column, onActiveItemChange, }: NavigationListItemProps) => JSX.Element;
14
- export {};
1
+ import React from 'react';
2
+ import { NavigationListItemProps } from '../../models';
3
+ declare const NavigationListItem: React.FC<NavigationListItemProps>;
4
+ export default NavigationListItem;
@@ -1,12 +1,9 @@
1
+ import { __rest } from "tslib";
1
2
  import React from 'react';
2
- import { NavigationItemType } from '../../../models';
3
- import { block } from '../../../utils';
4
3
  import { getItemClickHandler } from '../../utils';
5
- import NavigationDropdownItem from '../NavigationDropdownItem/NavigationDropdownItem';
6
4
  import NavigationItem from '../NavigationItem/NavigationItem';
7
- import './NavigationListItem.css';
8
- const b = block('navigation-list-item');
9
- export const NavigationListItem = ({ item, className, index, activeItemId, highlightActiveItem, hidePopup, column, onActiveItemChange, }) => {
5
+ const NavigationListItem = (_a) => {
6
+ var { column, index, activeItemId, onActiveItemChange } = _a, props = __rest(_a, ["column", "index", "activeItemId", "onActiveItemChange"]);
10
7
  const id = `${column}-${index}`;
11
8
  const isActive = id === activeItemId;
12
9
  const onClick = getItemClickHandler({
@@ -15,8 +12,6 @@ export const NavigationListItem = ({ item, className, index, activeItemId, highl
15
12
  activeItemId,
16
13
  onActiveItemChange,
17
14
  });
18
- return (React.createElement("li", { className: b(null, className) },
19
- item.type === NavigationItemType.Dropdown ? (React.createElement(NavigationDropdownItem, { className: b('content'), data: item, onClick: onClick, isActive: isActive, hidePopup: hidePopup })) : (React.createElement(NavigationItem, { className: b('content'), data: item, onClick: onClick })),
20
- highlightActiveItem && isActive && (React.createElement("div", { className: b('slider-container') },
21
- React.createElement("div", { className: b('slider') })))));
15
+ return (React.createElement(NavigationItem, Object.assign({ isActive: isActive, onClick: onClick, hidePopup: onActiveItemChange }, props)));
22
16
  };
17
+ export default NavigationListItem;
@@ -14,13 +14,14 @@ unpredictable css rules order in build */
14
14
  background: var(--yc-color-base-float);
15
15
  box-shadow: 0 3px 10px var(--yc-color-sfx-shadow);
16
16
  }
17
- @media (max-width: 768px) {
18
- .pc-navigation-popup {
19
- display: none;
20
- }
17
+ .pc-navigation-popup__list {
18
+ margin: 0;
19
+ padding: 0;
20
+ list-style: none;
21
21
  }
22
22
  .pc-navigation-popup__link {
23
23
  height: 36px;
24
+ line-height: 20px;
24
25
  padding: 8px 12px;
25
26
  border-radius: 8px;
26
27
  }
@@ -1,12 +1,5 @@
1
1
  import React from 'react';
2
- import { NavigationLinkItem } from '../../../models';
2
+ import { NavigationPopupProps } from '../../models';
3
3
  import './NavigationPopup.css';
4
- export interface NavigationPopupProps {
5
- open: boolean;
6
- items: NavigationLinkItem[];
7
- onClose: () => void;
8
- className?: string;
9
- anchorRef: React.RefObject<Element>;
10
- }
11
4
  export declare const NavigationPopup: React.FC<NavigationPopupProps>;
12
5
  export default NavigationPopup;
@@ -1,15 +1,15 @@
1
1
  import React from 'react';
2
2
  import { Popup } from '@gravity-ui/uikit';
3
3
  import { block } from '../../../utils';
4
+ import { NavigationLayout } from '../../models';
4
5
  import NavigationItem from '../NavigationItem/NavigationItem';
5
6
  import './NavigationPopup.css';
6
7
  const b = block('navigation-popup');
7
8
  const OFFSET_RESET = [0, 0];
8
- export const NavigationPopup = ({ anchorRef, items, onClose, className, open, }) => {
9
- return (React.createElement(Popup
9
+ export const NavigationPopup = ({ anchorRef, items, onClose, className, open, }) => (React.createElement(Popup
10
+ // Workaround to recalculate position on every opening. Required for valid position calculation for scrolled header links.
11
+ , {
10
12
  // Workaround to recalculate position on every opening. Required for valid position calculation for scrolled header links.
11
- , {
12
- // Workaround to recalculate position on every opening. Required for valid position calculation for scrolled header links.
13
- anchorRef: open ? anchorRef : undefined, className: b(null, className), open: open, onClose: onClose, onOutsideClick: onClose, keepMounted: true, disablePortal: true, strategy: "fixed", placement: "bottom-start", offset: OFFSET_RESET }, items.map((item) => (React.createElement(NavigationItem, { key: item.text, className: b('link'), data: item })))));
14
- };
13
+ anchorRef: open ? anchorRef : undefined, className: b(null, className), open: open, onClose: onClose, onOutsideClick: onClose, keepMounted: true, disablePortal: true, strategy: "fixed", placement: "bottom-start", offset: OFFSET_RESET },
14
+ React.createElement("ul", { className: b('list') }, items.map((item) => (React.createElement(NavigationItem, { key: item.text, className: b('link'), data: item, menuLayout: NavigationLayout.Dropdown }))))));
15
15
  export default NavigationPopup;
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
  import { block } from '../../../utils';
3
- import Header from '../../components/Header/Header';
3
+ import Navigation from '../../components/Navigation/Navigation';
4
4
  import './Layout.css';
5
5
  const b = block('layout');
6
6
  const Layout = ({ children, navigation }) => (React.createElement("div", { className: b() },
7
- navigation && React.createElement(Header, { data: navigation.header, logo: navigation.logo }),
7
+ navigation && React.createElement(Navigation, { data: navigation.header, logo: navigation.logo }),
8
8
  React.createElement("main", { className: b('content') }, children)));
9
9
  export default Layout;
@@ -0,0 +1,63 @@
1
+ import { MouseEventHandler } from 'react';
2
+ import { ClassNameProps, NavigationItemData, NavigationItemModel, NavigationLinkItem, ThemedNavigationLogoData } from '../models';
3
+ export interface MobileMenuButtonProps {
4
+ isSidebarOpened: boolean;
5
+ onSidebarOpenedChange: (arg: boolean) => void;
6
+ }
7
+ export declare enum ItemColumnName {
8
+ Left = "left",
9
+ Right = "right",
10
+ Top = "top",
11
+ Bottom = "bottom"
12
+ }
13
+ export declare enum NavigationLayout {
14
+ Desktop = "desktop",
15
+ Mobile = "mobile",
16
+ Dropdown = "dropdown"
17
+ }
18
+ export interface ActiveItemProps {
19
+ activeItemId?: string;
20
+ onActiveItemChange: (id?: string) => void;
21
+ }
22
+ export interface MenuLayoutProps {
23
+ menuLayout?: NavigationLayout;
24
+ }
25
+ export interface NavigationItemProps extends ClassNameProps, MenuLayoutProps {
26
+ data: NavigationItemData;
27
+ onClick?: MouseEventHandler;
28
+ isActive?: boolean;
29
+ isTopLevel?: boolean;
30
+ hidePopup?: () => void;
31
+ }
32
+ export interface NavigationListItemProps extends MenuLayoutProps, ActiveItemProps, ClassNameProps {
33
+ data: NavigationItemModel;
34
+ column: ItemColumnName;
35
+ index: number;
36
+ }
37
+ export interface NavigationListProps extends Pick<NavigationListItemProps, 'column'>, MenuLayoutProps, ActiveItemProps, ClassNameProps {
38
+ items: NavigationItemModel[];
39
+ itemClassName?: string;
40
+ }
41
+ export interface ItemsWrapperProps extends Pick<NavigationListProps, 'items'>, ActiveItemProps, ClassNameProps {
42
+ }
43
+ export interface DesktopNavigationProps extends MobileMenuButtonProps, ActiveItemProps {
44
+ logo: ThemedNavigationLogoData;
45
+ leftItemsWithIconSize: NavigationItemModel[];
46
+ rightItemsWithIconSize?: NavigationItemModel[];
47
+ }
48
+ export interface MobileNavigationProps extends ClassNameProps, ActiveItemProps {
49
+ isOpened?: boolean;
50
+ topItems?: NavigationItemModel[];
51
+ bottomItems?: NavigationItemModel[];
52
+ }
53
+ export interface NavigationProps extends MobileMenuButtonProps, ActiveItemProps {
54
+ logo: ThemedNavigationLogoData;
55
+ leftItemsWithIconSize: NavigationItemModel[];
56
+ rightItemsWithIconSize?: NavigationItemModel[];
57
+ }
58
+ export interface NavigationPopupProps extends ClassNameProps {
59
+ open: boolean;
60
+ items: NavigationLinkItem[];
61
+ onClose: () => void;
62
+ anchorRef: React.RefObject<Element>;
63
+ }
@@ -5,3 +5,9 @@ export var ItemColumnName;
5
5
  ItemColumnName["Top"] = "top";
6
6
  ItemColumnName["Bottom"] = "bottom";
7
7
  })(ItemColumnName || (ItemColumnName = {}));
8
+ export var NavigationLayout;
9
+ (function (NavigationLayout) {
10
+ NavigationLayout["Desktop"] = "desktop";
11
+ NavigationLayout["Mobile"] = "mobile";
12
+ NavigationLayout["Dropdown"] = "dropdown";
13
+ })(NavigationLayout || (NavigationLayout = {}));
@@ -1,5 +1,6 @@
1
1
  import { MouseEventHandler } from 'react';
2
- import { ItemColumnName } from './constants';
2
+ import { NavigationButtonItem, NavigationDropdownItem, NavigationItemModel, NavigationItemType } from '../models';
3
+ import { ItemColumnName } from './models';
3
4
  type GetItemClickHandlerArgs = {
4
5
  column: ItemColumnName;
5
6
  index: number;
@@ -7,4 +8,13 @@ type GetItemClickHandlerArgs = {
7
8
  onActiveItemChange: (id?: string) => void;
8
9
  };
9
10
  export declare const getItemClickHandler: ({ column, index, onActiveItemChange, }: GetItemClickHandlerArgs) => MouseEventHandler;
11
+ export declare function getNavigationItemWithIconSize(iconSize?: number): (item: NavigationItemModel) => NavigationButtonItem | NavigationDropdownItem | {
12
+ type: NavigationItemType.Link;
13
+ url: string;
14
+ arrow?: boolean | undefined;
15
+ target?: string | undefined;
16
+ text: string;
17
+ icon?: import("../models").ImageProps | undefined;
18
+ iconSize?: number | undefined;
19
+ };
10
20
  export {};
@@ -1,3 +1,4 @@
1
+ import { NavigationItemType, } from '../models';
1
2
  export const getItemClickHandler = ({ column, index, onActiveItemChange, activeItemId }) => (e) => {
2
3
  const id = `${column}-${index}`;
3
4
  if (e) {
@@ -5,3 +6,19 @@ export const getItemClickHandler = ({ column, index, onActiveItemChange, activeI
5
6
  }
6
7
  onActiveItemChange(id === activeItemId ? undefined : `${column}-${index}`);
7
8
  };
9
+ const isButtonItem = (item) => item.type === NavigationItemType.Button;
10
+ const isDropdownItem = (item) => item.type === NavigationItemType.Dropdown;
11
+ const iconSizeKey = 'iconSize';
12
+ export function getNavigationItemWithIconSize(iconSize = 20) {
13
+ const getItem = (item) => {
14
+ const newItem = Object.assign({}, item);
15
+ if ('items' in newItem && isDropdownItem(newItem)) {
16
+ newItem.items = newItem.items.map(getItem);
17
+ }
18
+ if (!(iconSizeKey in newItem) && !isButtonItem(newItem)) {
19
+ newItem.iconSize = iconSize;
20
+ }
21
+ return newItem;
22
+ };
23
+ return getItem;
24
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/page-constructor",
3
- "version": "3.10.3",
3
+ "version": "3.12.0",
4
4
  "description": "Gravity UI Page Constructor",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -23,7 +23,8 @@
23
23
  "require": "./server/index.js",
24
24
  "import": "./server/index.js"
25
25
  },
26
- "./styles/*": "./styles/*"
26
+ "./styles/*": "./styles/*",
27
+ "./widget/*": "./widget/*"
27
28
  },
28
29
  "main": "./build/cjs/index.js",
29
30
  "module": "./build/esm/index.js",
@@ -44,7 +45,8 @@
44
45
  "files": [
45
46
  "build",
46
47
  "styles",
47
- "server"
48
+ "server",
49
+ "widget"
48
50
  ],
49
51
  "sideEffects": [
50
52
  "*.css",
@@ -63,13 +65,14 @@
63
65
  "lint": "run-p lint:js lint:styles lint:prettier typecheck",
64
66
  "typecheck": "tsc --noEmit",
65
67
  "dev": "npm run storybook:start",
66
- "storybook:start": "TS_NODE_PROJECT=.storybook/tsconfig.json start-storybook -p 7009",
67
- "storybook:build": "TS_NODE_PROJECT=.storybook/tsconfig.json build-storybook -c .storybook -o storybook-static",
68
+ "storybook:start": "sb dev -p 7009",
69
+ "storybook:build": "sb build -c .storybook -o storybook-static",
68
70
  "start": "node dist",
69
71
  "clean": "gulp clean",
70
72
  "build:client": "gulp",
71
73
  "build:server": "rimraf server && tsc -p tsconfig.server.json && move-file server/server.js server/index.js && move-file server/server.d.ts server/index.d.ts",
72
- "build": "run-p build:client build:server",
74
+ "build:widget": "webpack --config widget.webpack.js",
75
+ "build": "run-p build:client build:server build:widget",
73
76
  "prepublishOnly": "npm run lint && npm run build",
74
77
  "prepare": "husky install",
75
78
  "test": "jest",
@@ -79,13 +82,14 @@
79
82
  "dependencies": {
80
83
  "@gravity-ui/dynamic-forms": "^1.9.2",
81
84
  "@gravity-ui/i18n": "^1.0.0",
85
+ "ajv": "^8.12.0",
82
86
  "bem-cn-lite": "^4.0.0",
83
87
  "final-form": "^4.20.9",
84
88
  "github-buttons": "2.23.0",
85
89
  "lodash": "^4.17.21",
86
90
  "react-final-form": "^6.5.9",
87
91
  "react-player": "^2.9.0",
88
- "react-slick": "^0.28.1",
92
+ "react-slick": "^0.29.0",
89
93
  "react-spring": "^9.3.0",
90
94
  "react-transition-group": "^4.4.2",
91
95
  "react-waypoint": "^10.1.0",
@@ -100,21 +104,27 @@
100
104
  "react": "^16.0.0 || ^17.0.0 || ^18.0.0"
101
105
  },
102
106
  "devDependencies": {
107
+ "@babel/core": "^7.22.8",
108
+ "@babel/preset-env": "^7.22.9",
109
+ "@babel/preset-react": "^7.22.5",
110
+ "@babel/preset-typescript": "^7.22.5",
103
111
  "@commitlint/cli": "^17.1.2",
104
112
  "@commitlint/config-conventional": "^17.1.0",
105
113
  "@doc-tools/transform": "2.12.0",
114
+ "@gravity-ui/babel-preset": "^1.0.1",
106
115
  "@gravity-ui/eslint-config": "^2.0.0",
107
116
  "@gravity-ui/icons": "^2.1.0",
108
117
  "@gravity-ui/prettier-config": "^1.0.1",
109
118
  "@gravity-ui/stylelint-config": "^1.0.0",
110
119
  "@gravity-ui/tsconfig": "^1.0.0",
111
120
  "@gravity-ui/uikit": "^4.1.0",
112
- "@storybook/addon-actions": "^6.3.12",
113
- "@storybook/addon-essentials": "^6.5.10",
114
- "@storybook/addon-knobs": "^6.3.1",
115
- "@storybook/addon-viewport": "^6.3.12",
121
+ "@storybook/addon-actions": "^7.1.0",
122
+ "@storybook/addon-essentials": "^7.1.0",
123
+ "@storybook/addon-knobs": "^7.0.2",
124
+ "@storybook/addon-viewport": "^7.1.0",
116
125
  "@storybook/preset-scss": "^1.0.3",
117
- "@storybook/react": "^6.5.16",
126
+ "@storybook/react": "^7.1.0",
127
+ "@storybook/react-webpack5": "^7.1.0",
118
128
  "@testing-library/jest-dom": "^5.16.5",
119
129
  "@testing-library/react": "^13.4.0",
120
130
  "@testing-library/user-event": "^14.4.3",
@@ -127,6 +137,10 @@
127
137
  "@types/react-transition-group": "^4.4.4",
128
138
  "@types/sanitize-html": "2.6.1",
129
139
  "@types/uuid": "^9.0.0",
140
+ "@types/webpack-env": "^1.18.1",
141
+ "autoprefixer": "^10.4.14",
142
+ "babel-loader": "^8.3.0",
143
+ "css-loader": "^5.2.7",
130
144
  "es5-ext": "0.10.53",
131
145
  "eslint": "^8.34.0",
132
146
  "eslint-plugin-local": "./eslint-plugin-local",
@@ -134,7 +148,8 @@
134
148
  "eslint-plugin-testing-library": "^5.9.1",
135
149
  "gulp": "^4.0.2",
136
150
  "gulp-dart-sass": "^1.0.2",
137
- "gulp-replace": "^1.1.3",
151
+ "gulp-replace": "^1.1.4",
152
+ "gulp-ts-alias": "^2.0.0",
138
153
  "gulp-typescript": "^6.0.0-alpha.1",
139
154
  "html-loader": "^1.3.2",
140
155
  "htmlparser2": "^6.1.0",
@@ -148,20 +163,28 @@
148
163
  "move-file-cli": "^3.0.0",
149
164
  "npm-run-all": "^4.1.5",
150
165
  "postcss": "^8.4.16",
166
+ "postcss-loader": "^4.3.0",
167
+ "postcss-preset-env": "^9.0.0",
151
168
  "postcss-scss": "^4.0.4",
152
169
  "prettier": "2.4.1",
153
170
  "react": "^18.2.0",
154
171
  "react-docgen-typescript": "^2.2.2",
155
172
  "react-dom": "^18.2.0",
173
+ "resolve-url-loader": "^3.1.5",
156
174
  "rimraf": "^3.0.2",
157
- "sass": "^1.54.4",
158
- "sass-loader": "^10.3.1",
175
+ "sass": "^1.63.6",
176
+ "sass-loader": "^10.4.1",
177
+ "storybook": "^7.1.0",
178
+ "style-loader": "^2.0.0",
159
179
  "stylelint": "^14.11.0",
160
180
  "svg-sprite-loader": "^6.0.11",
181
+ "terser-webpack-plugin": "^5.3.9",
161
182
  "ts-jest": "^29.0.3",
162
183
  "tslib": "^2.4.0",
163
184
  "typescript": "^4.9.4",
164
- "webpack": "^4.46.0"
185
+ "webpack": "^5.88.2",
186
+ "webpack-cli": "^5.1.4",
187
+ "webpack-shell-plugin-next": "^2.3.1"
165
188
  },
166
189
  "lint-staged": {
167
190
  "*.{css,scss}": [
@@ -44,6 +44,8 @@ export interface NavigationButtonItem extends ButtonProps {
44
44
  export interface NavigationDropdownItem extends NavigationItemBase {
45
45
  type: NavigationItemType.Dropdown;
46
46
  items: NavigationLinkItem[];
47
+ hidePopup: () => void;
48
+ isActive: boolean;
47
49
  }
48
50
  export interface NavigationSocialItem extends Omit<NavigationItemBase, 'text'> {
49
51
  type: NavigationItemType.Social;
@@ -51,8 +53,7 @@ export interface NavigationSocialItem extends Omit<NavigationItemBase, 'text'> {
51
53
  url: string;
52
54
  }
53
55
  export type NavigationItemModel = NavigationLinkItem | NavigationButtonItem | NavigationDropdownItem;
54
- export type NavigationItemData = NavigationLinkItem | NavigationButtonItem | NavigationSocialItem | DropdownItemData;
55
- export type DropdownItemData = Omit<NavigationDropdownItem, 'items'>;
56
+ export type NavigationItemData = NavigationLinkItem | NavigationButtonItem | NavigationSocialItem | NavigationDropdownItem;
56
57
  export interface NavigationLogoData {
57
58
  icon: ImageProps;
58
59
  text?: string;