@gravity-ui/navigation 3.10.0 → 5.0.0-beta.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 (117) hide show
  1. package/build/cjs/components/AsideHeader/AsideHeaderContext.d.ts +16 -5
  2. package/build/cjs/components/AsideHeader/__stories__/AsideHeader.stories.d.ts +2 -0
  3. package/build/cjs/components/AsideHeader/__stories__/moc.d.ts +5 -1
  4. package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesGroupHeader.d.ts +13 -0
  5. package/build/cjs/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/AllPagesListItem/AllPagesListItem.d.ts +2 -4
  6. package/build/cjs/components/AsideHeader/components/AllPagesPanel/constants.d.ts +4 -0
  7. package/build/cjs/components/AsideHeader/components/AllPagesPanel/i18n/index.d.ts +14 -0
  8. package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.d.ts +3 -0
  9. package/build/cjs/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.d.ts +2 -0
  10. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.d.ts +3 -0
  11. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.d.ts +2 -0
  12. package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItems.d.ts +2 -0
  13. package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.d.ts +33 -0
  14. package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.d.ts +13 -0
  15. package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.d.ts +10 -0
  16. package/build/cjs/components/AsideHeader/components/CompositeBar/index.d.ts +2 -0
  17. package/build/cjs/components/AsideHeader/components/CompositeBar/utils.d.ts +4 -0
  18. package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.d.ts +6 -0
  19. package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.d.ts +2 -1
  20. package/build/cjs/components/AsideHeader/components/Panels.d.ts +1 -1
  21. package/build/cjs/components/AsideHeader/hooks/useDelayedToggle.d.ts +6 -0
  22. package/build/cjs/components/AsideHeader/hooks/useIsExpanded.d.ts +6 -0
  23. package/build/cjs/components/AsideHeader/i18n/index.d.ts +8 -0
  24. package/build/cjs/components/AsideHeader/index.d.ts +7 -0
  25. package/build/cjs/components/AsideHeader/types.d.ts +60 -8
  26. package/build/cjs/components/AsideHeader/useAsideHeaderInnerContextValue.d.ts +4 -0
  27. package/build/cjs/components/AsideHeader/utils/getGroupHeight.d.ts +2 -0
  28. package/build/cjs/components/MobileHeader/i18n/index.d.ts +8 -0
  29. package/build/cjs/components/MobileHeader/types.d.ts +2 -1
  30. package/build/cjs/components/Settings/i18n/index.d.ts +8 -0
  31. package/build/cjs/components/Title/i18n/index.d.ts +8 -0
  32. package/build/cjs/components/constants.d.ts +2 -2
  33. package/build/cjs/components/index.d.ts +1 -7
  34. package/build/cjs/components/types.d.ts +18 -10
  35. package/build/cjs/{index-ByqQO5fB.js → index-B9p8boXH.js} +2 -2
  36. package/build/cjs/{index-ByqQO5fB.js.map → index-B9p8boXH.js.map} +1 -1
  37. package/build/cjs/{index-D9NSuTiN.js → index-BF-1v7O1.js} +761 -899
  38. package/build/cjs/index-BF-1v7O1.js.map +1 -0
  39. package/build/cjs/index.js +1 -1
  40. package/build/esm/components/AsideHeader/AsideHeaderContext.d.ts +16 -5
  41. package/build/esm/components/AsideHeader/__stories__/AsideHeader.stories.d.ts +2 -0
  42. package/build/esm/components/AsideHeader/__stories__/moc.d.ts +5 -1
  43. package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesGroupHeader.d.ts +13 -0
  44. package/build/esm/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/AllPagesListItem/AllPagesListItem.d.ts +2 -4
  45. package/build/esm/components/AsideHeader/components/AllPagesPanel/constants.d.ts +4 -0
  46. package/build/esm/components/AsideHeader/components/AllPagesPanel/i18n/index.d.ts +14 -0
  47. package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.d.ts +3 -0
  48. package/build/esm/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.d.ts +2 -0
  49. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.d.ts +3 -0
  50. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.d.ts +2 -0
  51. package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItems.d.ts +2 -0
  52. package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.d.ts +33 -0
  53. package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.d.ts +13 -0
  54. package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.d.ts +10 -0
  55. package/build/esm/components/AsideHeader/components/CompositeBar/index.d.ts +2 -0
  56. package/build/esm/components/AsideHeader/components/CompositeBar/utils.d.ts +4 -0
  57. package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.d.ts +6 -0
  58. package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.d.ts +2 -1
  59. package/build/esm/components/AsideHeader/components/Panels.d.ts +1 -1
  60. package/build/esm/components/AsideHeader/hooks/useDelayedToggle.d.ts +6 -0
  61. package/build/esm/components/AsideHeader/hooks/useIsExpanded.d.ts +6 -0
  62. package/build/esm/components/AsideHeader/i18n/index.d.ts +8 -0
  63. package/build/esm/components/AsideHeader/index.d.ts +7 -0
  64. package/build/esm/components/AsideHeader/types.d.ts +60 -8
  65. package/build/esm/components/AsideHeader/useAsideHeaderInnerContextValue.d.ts +4 -0
  66. package/build/esm/components/AsideHeader/utils/getGroupHeight.d.ts +2 -0
  67. package/build/esm/components/MobileHeader/i18n/index.d.ts +8 -0
  68. package/build/esm/components/MobileHeader/types.d.ts +2 -1
  69. package/build/esm/components/Settings/i18n/index.d.ts +8 -0
  70. package/build/esm/components/Title/i18n/index.d.ts +8 -0
  71. package/build/esm/components/constants.d.ts +2 -2
  72. package/build/esm/components/index.d.ts +1 -7
  73. package/build/esm/components/types.d.ts +18 -10
  74. package/build/esm/{index-CAXXfBb4.js → index-BzBUevHu.js} +2 -2
  75. package/build/esm/{index-CAXXfBb4.js.map → index-BzBUevHu.js.map} +1 -1
  76. package/build/esm/{index-Bi86ts3T.js → index-DH4SSAb2.js} +764 -902
  77. package/build/esm/index-DH4SSAb2.js.map +1 -0
  78. package/build/esm/index.js +1 -1
  79. package/package.json +2 -2
  80. package/build/cjs/components/AllPagesPanel/constants.d.ts +0 -3
  81. package/build/cjs/components/AllPagesPanel/i18n/index.d.ts +0 -6
  82. package/build/cjs/components/AllPagesPanel/useGroupedMenuItems.d.ts +0 -4
  83. package/build/cjs/components/AllPagesPanel/useVisibleMenuItems.d.ts +0 -2
  84. package/build/cjs/components/CompositeBar/CompositeBar.d.ts +0 -20
  85. package/build/cjs/components/CompositeBar/Item/Item.d.ts +0 -43
  86. package/build/cjs/components/CompositeBar/MultipleTooltip/MultipleTooltip.d.ts +0 -9
  87. package/build/cjs/components/CompositeBar/utils.d.ts +0 -12
  88. package/build/cjs/components/FooterItem/FooterItem.d.ts +0 -7
  89. package/build/cjs/index-D9NSuTiN.js.map +0 -1
  90. package/build/esm/components/AllPagesPanel/constants.d.ts +0 -3
  91. package/build/esm/components/AllPagesPanel/i18n/index.d.ts +0 -6
  92. package/build/esm/components/AllPagesPanel/useGroupedMenuItems.d.ts +0 -4
  93. package/build/esm/components/AllPagesPanel/useVisibleMenuItems.d.ts +0 -2
  94. package/build/esm/components/CompositeBar/CompositeBar.d.ts +0 -20
  95. package/build/esm/components/CompositeBar/Item/Item.d.ts +0 -43
  96. package/build/esm/components/CompositeBar/MultipleTooltip/MultipleTooltip.d.ts +0 -9
  97. package/build/esm/components/CompositeBar/utils.d.ts +0 -12
  98. package/build/esm/components/FooterItem/FooterItem.d.ts +0 -7
  99. package/build/esm/index-Bi86ts3T.js.map +0 -1
  100. package/build/cjs/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/AllPagesListItem/index.d.ts +0 -0
  101. package/build/cjs/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/AllPagesPanel.d.ts +0 -0
  102. package/build/cjs/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/index.d.ts +0 -0
  103. package/build/cjs/components/{CompositeBar → AsideHeader/components/CompositeBar}/HighlightedItem/HighlightedItem.d.ts +0 -0
  104. package/build/{esm → cjs/components/AsideHeader}/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.d.ts +1 -1
  105. package/build/cjs/components/{CompositeBar → AsideHeader/components/CompositeBar}/MultipleTooltip/index.d.ts +0 -0
  106. package/build/cjs/components/{CompositeBar → AsideHeader/components/CompositeBar}/constants.d.ts +0 -0
  107. package/build/cjs/components/{FooterItem → AsideHeader/components/FooterItem}/__stories__/FooterItem.stories.d.ts +0 -0
  108. package/build/cjs/components/{FooterItem → AsideHeader/components/FooterItem}/__tests__/helpersPlaywright.d.ts +0 -0
  109. package/build/esm/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/AllPagesListItem/index.d.ts +0 -0
  110. package/build/esm/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/AllPagesPanel.d.ts +0 -0
  111. package/build/esm/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/index.d.ts +0 -0
  112. package/build/esm/components/{CompositeBar → AsideHeader/components/CompositeBar}/HighlightedItem/HighlightedItem.d.ts +0 -0
  113. package/build/{cjs → esm/components/AsideHeader}/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.d.ts +1 -1
  114. /package/build/esm/components/{CompositeBar → AsideHeader/components/CompositeBar}/MultipleTooltip/index.d.ts +0 -0
  115. /package/build/esm/components/{CompositeBar → AsideHeader/components/CompositeBar}/constants.d.ts +0 -0
  116. /package/build/esm/components/{FooterItem → AsideHeader/components/FooterItem}/__stories__/FooterItem.stories.d.ts +0 -0
  117. /package/build/esm/components/{FooterItem → AsideHeader/components/FooterItem}/__tests__/helpersPlaywright.d.ts +0 -0
@@ -1,17 +1,28 @@
1
1
  import React from 'react';
2
- import { MenuItem } from '../types';
3
- import { AsideHeaderInnerProps } from './types';
2
+ import { MenuGroup } from '../types';
3
+ import { AsideHeaderInnerProps, AsideHeaderItem } from './types';
4
4
  export interface AsideHeaderInnerContextType extends AsideHeaderInnerProps {
5
- menuItems: MenuItem[];
6
- defaultMenuItems?: MenuItem[];
5
+ menuItems: AsideHeaderItem[];
6
+ menuGroups?: MenuGroup[];
7
+ defaultMenuItems?: AsideHeaderItem[];
8
+ defaultMenuGroups?: MenuGroup[];
9
+ onMenuGroupsChanged?: (groups: MenuGroup[]) => void;
10
+ onToggleGroupCollapsed?: (groupId: string) => void;
7
11
  allPagesIsAvailable: boolean;
8
- onItemClick: (item: MenuItem, collapsed: boolean, event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
12
+ onItemClick: (item: AsideHeaderItem, collapsed: boolean, event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
13
+ onMouseEnter?: () => void;
14
+ onMouseLeave?: () => void;
15
+ isExpanded: boolean;
9
16
  }
10
17
  export declare const AsideHeaderInnerContextProvider: React.Provider<AsideHeaderInnerContextType | undefined>;
11
18
  export declare const useAsideHeaderInnerContext: () => AsideHeaderInnerContextType;
12
19
  export interface AsideHeaderContextType {
13
20
  compact: boolean;
14
21
  size: number;
22
+ isExpanded: boolean;
23
+ onChangeCompact?: (compact: boolean) => void;
24
+ onMouseEnter?: () => void;
25
+ onMouseLeave?: () => void;
15
26
  }
16
27
  export declare const AsideHeaderContextProvider: React.Provider<AsideHeaderContextType | undefined>;
17
28
  export declare const useAsideHeaderContext: () => AsideHeaderContextType;
@@ -19,3 +19,5 @@ export declare const Fallback: import("@storybook/csf").AnnotatedStoryFn<import(
19
19
  /** @type {StoryFn} */
20
20
  export declare function LineClamp(): React.JSX.Element;
21
21
  export declare const CollapseButtonWrapper: import("@storybook/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("@storybook/csf").Args>;
22
+ export declare const ManyItems: import("@storybook/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("@storybook/csf").Args>;
23
+ export declare const GroupedMenuCollapsible: import("@storybook/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("@storybook/csf").Args>;
@@ -10,4 +10,8 @@ export declare const DEFAULT_LOGO: {
10
10
  onClick: () => void;
11
11
  'aria-label': string;
12
12
  };
13
- export declare const menuItemsClamped: import("../..").MenuItem[];
13
+ export declare const menuItemsClamped: import("../types").AsideHeaderItem[];
14
+ export declare const generateManyMenuItems: (count?: number) => AsideHeaderProps["menuItems"];
15
+ export declare const menuItemsMany: import("../types").AsideHeaderItem[] | undefined;
16
+ export declare const menuItemsWithGroups: AsideHeaderProps['menuItems'];
17
+ export declare const menuGroupsWithIcons: AsideHeaderProps['menuGroups'];
@@ -0,0 +1,13 @@
1
+ import React, { ReactNode } from 'react';
2
+ import './AllPagesGroupHeader.scss';
3
+ interface AllPagesGroupHeaderProps {
4
+ id: string;
5
+ title: string | ReactNode;
6
+ hidden: boolean;
7
+ isDisabled: boolean;
8
+ icon?: SVGIconData;
9
+ editMode?: boolean;
10
+ onToggleHidden?: (groupId: string) => void;
11
+ }
12
+ export declare const AllPagesGroupHeader: React.FC<AllPagesGroupHeaderProps>;
13
+ export {};
@@ -1,13 +1,11 @@
1
1
  import React from 'react';
2
- import { MenuItem } from '../../types';
2
+ import { AsideHeaderItem } from 'src/components/AsideHeader/types';
3
3
  import './AllPagesListItem.scss';
4
4
  interface AllPagesListItemProps {
5
- item: MenuItem;
5
+ item: AsideHeaderItem;
6
6
  editMode?: boolean;
7
7
  enableSorting?: boolean;
8
8
  onToggle: () => void;
9
- onDragStart?: () => void;
10
- onDragEnd?: () => void;
11
9
  }
12
10
  export declare const AllPagesListItem: React.FC<AllPagesListItemProps>;
13
11
  export {};
@@ -0,0 +1,4 @@
1
+ import { AsideHeaderItem } from '../../types';
2
+ export declare const ALL_PAGES_ID: "all-pages";
3
+ export declare const UNGROUPED_ID: "ungrouped";
4
+ export declare function getAllPagesMenuItem(): AsideHeaderItem;
@@ -0,0 +1,14 @@
1
+ declare const _default: ((key: "menu-item.all-pages.title" | "all-panel.menu.category.allOther" | "all-panel.resetToDefault" | "all-panel.title.editing" | "all-panel.title.main", params?: import("@gravity-ui/i18n").Params) => string) & {
2
+ Translation: import("react").ComponentType<{
3
+ children: (props: {
4
+ t: (key: "menu-item.all-pages.title" | "all-panel.menu.category.allOther" | "all-panel.resetToDefault" | "all-panel.title.editing" | "all-panel.title.main", params?: import("@gravity-ui/i18n").Params) => string;
5
+ }) => React.ReactNode;
6
+ }>;
7
+ useTranslation: () => {
8
+ t: (key: "menu-item.all-pages.title" | "all-panel.menu.category.allOther" | "all-panel.resetToDefault" | "all-panel.title.editing" | "all-panel.title.main", params?: import("@gravity-ui/i18n").Params) => string;
9
+ };
10
+ keysetData: {
11
+ "gn-AllPagesPanel": Record<"menu-item.all-pages.title" | "all-panel.menu.category.allOther" | "all-panel.resetToDefault" | "all-panel.title.editing" | "all-panel.title.main", import("@gravity-ui/i18n").KeyData>;
12
+ };
13
+ };
14
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { MenuGroup, MenuItem } from '../../../types';
2
+ import { MenuItemsWithGroups } from '../../types';
3
+ export declare const useGroupedMenuItems: (menuItems: MenuItem[], menuGroups?: MenuGroup[], isEditMode?: boolean) => MenuItemsWithGroups[];
@@ -0,0 +1,2 @@
1
+ import { AsideHeaderItem } from '../../types';
2
+ export declare const useVisibleMenuItems: () => AsideHeaderItem[];
@@ -0,0 +1,3 @@
1
+ import { MenuItem } from '../../../../types';
2
+ import { MenuItemsWithGroups } from '../../../types';
3
+ export declare function buildExpandedFromFlatList(flatList: MenuItemsWithGroups[]): MenuItem[];
@@ -0,0 +1,2 @@
1
+ import { MenuItemsWithGroups } from '../../../types';
2
+ export declare function getRealIndexInGroup(groupIndex: number, itemIndexInGroup: number, flatList: MenuItemsWithGroups[]): number;
@@ -0,0 +1,2 @@
1
+ import { MenuItemsWithGroups } from '../../../types';
2
+ export declare function sortMenuItems(oldIndex: number, newIndex: number, items: MenuItemsWithGroups[]): import("../../../..").MenuItem[];
@@ -0,0 +1,33 @@
1
+ import React, { FC } from 'react';
2
+ import { AsideHeaderItem, MenuItemsWithGroups } from '../../types';
3
+ import './CompositeBar.scss';
4
+ export type CompositeBarProps = {
5
+ type: 'menu' | 'subheader';
6
+ items?: MenuItemsWithGroups[];
7
+ onItemClick?: (item: AsideHeaderItem, collapsed: boolean, event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
8
+ multipleTooltip?: boolean;
9
+ menuMoreTitle?: string;
10
+ onMoreClick?: () => void;
11
+ compact: boolean;
12
+ compositeId?: string;
13
+ className?: string;
14
+ onToggleGroupCollapsed?: (groupId: string) => void;
15
+ };
16
+ type CompositeBarViewProps = CompositeBarProps & {
17
+ compositeId?: string;
18
+ items?: MenuItemsWithGroups[];
19
+ collapsedIds?: Record<string, boolean>;
20
+ enableSorting?: boolean;
21
+ onToggleGroupCollapsed?: (groupId: string) => void;
22
+ onFirstLevelSortEnd?: (params: {
23
+ oldIndex: number;
24
+ newIndex: number;
25
+ }) => void;
26
+ onSecondLevelSortEnd?: (groupId: string) => (params: {
27
+ oldIndex: number;
28
+ newIndex: number;
29
+ }) => void;
30
+ };
31
+ export declare const CompositeBarView: FC<CompositeBarViewProps>;
32
+ export declare const CompositeBar: FC<CompositeBarProps>;
33
+ export {};
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { AsideHeaderItem } from 'src/components/AsideHeader/types';
3
+ import './Item.scss';
4
+ export interface ItemProps extends AsideHeaderItem {
5
+ }
6
+ interface ItemInnerProps extends ItemProps {
7
+ compact?: boolean;
8
+ className?: string;
9
+ onMouseEnter?: () => void;
10
+ onMouseLeave?: () => void;
11
+ }
12
+ export declare const Item: React.FC<ItemInnerProps>;
13
+ export {};
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { PopupProps } from '@gravity-ui/uikit';
3
+ import { AsideHeaderItem } from 'src/components/AsideHeader/types';
4
+ import './MultipleTooltip.scss';
5
+ type MultipleTooltipProps = Pick<PopupProps, 'open' | 'placement'> & {
6
+ anchorRef: React.RefObject<HTMLElement>;
7
+ items: AsideHeaderItem[];
8
+ };
9
+ export declare const MultipleTooltip: React.FC<MultipleTooltipProps>;
10
+ export {};
@@ -0,0 +1,2 @@
1
+ export { CompositeBar } from './CompositeBar';
2
+ export type { CompositeBarProps } from './CompositeBar';
@@ -0,0 +1,4 @@
1
+ import { AsideHeaderItem, MenuItemsWithGroups } from '../../types';
2
+ export declare function getItemHeight(compositeItem: MenuItemsWithGroups): number;
3
+ export declare function getItemsHeight<T extends AsideHeaderItem>(items: T[]): number;
4
+ export declare function getSelectedItemIndex(compositeItems: AsideHeaderItem[]): number | undefined;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { AsideHeaderItem } from '../../types';
3
+ import './FooterItem.scss';
4
+ export interface FooterItemProps extends AsideHeaderItem {
5
+ }
6
+ export declare function FooterItem(props: FooterItemProps): React.JSX.Element;
@@ -3,8 +3,9 @@ import { ContentProps } from '../../../Content';
3
3
  import { LayoutProps } from '../../types';
4
4
  import '../../AsideHeader.scss';
5
5
  export interface PageLayoutProps extends PropsWithChildren<LayoutProps> {
6
+ onChangeCompact?: (compact: boolean) => void;
6
7
  }
7
- declare const PageLayout: (({ compact, className, children, topAlert }: PageLayoutProps) => React.JSX.Element) & {
8
+ declare const PageLayout: (({ compact, className, children, topAlert, onChangeCompact }: PageLayoutProps) => React.JSX.Element) & {
8
9
  Content: React.FC<React.PropsWithChildren<Pick<ContentProps, "renderContent">>>;
9
10
  };
10
11
  export { PageLayout };
@@ -1,2 +1,2 @@
1
1
  import React from 'react';
2
- export declare const Panels: () => React.JSX.Element | null;
2
+ export declare const Panels: React.FC;
@@ -0,0 +1,6 @@
1
+ interface ToggleDelayConfig {
2
+ enableDelay: number;
3
+ disableDelay: number;
4
+ }
5
+ export declare function useDelayedToggle(currentValue: boolean, config?: ToggleDelayConfig, maybeShouldThrottleFn?: (value: boolean, previousValue: boolean) => boolean): boolean;
6
+ export {};
@@ -0,0 +1,6 @@
1
+ export interface UseIsExpandedResult {
2
+ isExpanded: boolean;
3
+ onMouseEnter: () => void;
4
+ onMouseLeave: () => void;
5
+ }
6
+ export declare const useIsExpanded: (externalCompact: boolean) => UseIsExpandedResult;
@@ -1,4 +1,12 @@
1
1
  declare const _default: ((key: "button_collapse" | "button_expand" | "label_more", params?: import("@gravity-ui/i18n").Params) => string) & {
2
+ Translation: import("react").ComponentType<{
3
+ children: (props: {
4
+ t: (key: "button_collapse" | "button_expand" | "label_more", params?: import("@gravity-ui/i18n").Params) => string;
5
+ }) => React.ReactNode;
6
+ }>;
7
+ useTranslation: () => {
8
+ t: (key: "button_collapse" | "button_expand" | "label_more", params?: import("@gravity-ui/i18n").Params) => string;
9
+ };
2
10
  keysetData: {
3
11
  "gn-AsideHeader": Record<"button_collapse" | "button_expand" | "label_more", import("@gravity-ui/i18n").KeyData>;
4
12
  };
@@ -0,0 +1,7 @@
1
+ export { AsideHeader } from './AsideHeader';
2
+ export type { AsideHeaderProps } from './types';
3
+ export { AsideHeaderContextProvider, useAsideHeaderContext } from './AsideHeaderContext';
4
+ export { FooterItem, type FooterItemProps } from './components/FooterItem/FooterItem';
5
+ export { PageLayout, type PageLayoutProps } from './components/PageLayout/PageLayout';
6
+ export { PageLayoutAside } from './components/PageLayout/PageLayoutAside';
7
+ export { AsideFallback } from './components/PageLayout/AsideFallback';
@@ -1,8 +1,8 @@
1
1
  import * as React from 'react';
2
- import { QAProps } from '@gravity-ui/uikit';
2
+ import { PopupProps, QAProps } from '@gravity-ui/uikit';
3
3
  import { RenderContentType } from '../Content';
4
4
  import { DrawerItemProps } from '../Drawer/Drawer';
5
- import { LogoProps, MenuItem, OpenModalSubscriber, SubheaderMenuItem, TopAlertProps } from '../types';
5
+ import { LogoProps, MenuGroup, MenuItem, OpenModalSubscriber, TopAlertProps } from '../types';
6
6
  import { AsideHeaderContextType } from './AsideHeaderContext';
7
7
  export interface LayoutProps {
8
8
  compact: boolean;
@@ -11,10 +11,10 @@ export interface LayoutProps {
11
11
  }
12
12
  interface EditMenuProps {
13
13
  onOpenEditMode?: () => void;
14
- onToggleMenuItem?: (changedItem: MenuItem) => void;
14
+ onToggleMenuItem?: (changedItem: AsideHeaderItem) => void;
15
15
  onResetSettingsToDefault?: () => void;
16
16
  enableSorting?: boolean;
17
- onChangeItemsOrder?: (changedItem: MenuItem, oldIndex: number, newIndex: number) => void;
17
+ onChangeItemsOrder?: (changedItem: AsideHeaderItem, oldIndex: number, newIndex: number) => void;
18
18
  }
19
19
  interface AsideHeaderGeneralProps extends QAProps {
20
20
  logo?: LogoProps;
@@ -46,10 +46,13 @@ interface AsideHeaderGeneralProps extends QAProps {
46
46
  }
47
47
  interface AsideHeaderDefaultProps {
48
48
  panelItems?: DrawerItemProps[];
49
- subheaderItems?: SubheaderMenuItem[];
50
- menuItems?: MenuItem[];
51
- defaultMenuItems?: MenuItem[];
52
- onMenuItemsChanged?: (items: MenuItem[]) => void;
49
+ subheaderItems?: AsideHeaderItem[];
50
+ menuItems?: AsideHeaderItem[];
51
+ defaultMenuItems?: AsideHeaderItem[];
52
+ menuGroups?: MenuGroup[];
53
+ defaultMenuGroups?: MenuGroup[];
54
+ onMenuItemsChanged?: (items: AsideHeaderItem[]) => void;
55
+ onMenuGroupsChanged?: (groups: MenuGroup[]) => void;
53
56
  headerDecoration?: boolean;
54
57
  }
55
58
  export type AsideHeaderInnerProps = AsideHeaderGeneralProps & AsideHeaderDefaultProps & AsideHeaderContextType;
@@ -58,4 +61,53 @@ export interface AsideHeaderProps extends AsideHeaderGeneralProps, LayoutProps,
58
61
  export declare enum InnerPanels {
59
62
  AllPages = "all-pages"
60
63
  }
64
+ export interface AsideHeaderItem extends MenuItem {
65
+ enableTooltip?: boolean;
66
+ onItemClick?: (item: AsideHeaderItem, collapsed: boolean, event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
67
+ bringForward?: boolean;
68
+ compact?: boolean;
69
+ /**
70
+ * @deprecated Use itemWrapper instead for popup functionality
71
+ */
72
+ popupVisible?: PopupProps['open'];
73
+ /**
74
+ * Floating element anchor ref object
75
+ *
76
+ * @deprecated Use itemWrapper instead for popup functionality
77
+ */
78
+ popupRef?: React.RefObject<HTMLElement>;
79
+ /**
80
+ * @deprecated Use itemWrapper instead for popup functionality
81
+ */
82
+ popupPlacement?: PopupProps['placement'];
83
+ /**
84
+ * @deprecated Use itemWrapper instead for popup functionality
85
+ */
86
+ popupOffset?: PopupProps['offset'];
87
+ /**
88
+ * @deprecated Use itemWrapper instead for popup functionality
89
+ */
90
+ popupKeepMounted?: PopupProps['keepMounted'];
91
+ /**
92
+ * @deprecated Use itemWrapper instead for popup functionality
93
+ */
94
+ renderPopupContent?: () => React.ReactNode;
95
+ /**
96
+ * This callback will be called when Escape key pressed on keyboard, or click outside was made
97
+ * This behaviour could be disabled with `disableEscapeKeyDown`
98
+ * and `disableOutsideClick` options
99
+ *
100
+ * @deprecated Use itemWrapper instead for popup functionality
101
+ */
102
+ onOpenChangePopup?: PopupProps['onOpenChange'];
103
+ }
104
+ export interface GroupedMenuItem extends MenuItem {
105
+ groupId: string;
106
+ collapsible: boolean;
107
+ isCollapsed: boolean;
108
+ isDisabled: boolean;
109
+ collapsedByDefault?: boolean;
110
+ items: MenuItemsWithGroups[];
111
+ }
112
+ export type MenuItemsWithGroups = MenuItem | GroupedMenuItem;
61
113
  export {};
@@ -2,4 +2,8 @@ import { AsideHeaderInnerContextType } from './AsideHeaderContext';
2
2
  import { AsideHeaderProps } from './types';
3
3
  export declare const useAsideHeaderInnerContextValue: (props: AsideHeaderProps & {
4
4
  size: number;
5
+ compact: boolean;
6
+ isExpanded: boolean;
7
+ onMouseEnter?: () => void;
8
+ onMouseLeave?: () => void;
5
9
  }) => AsideHeaderInnerContextType;
@@ -0,0 +1,2 @@
1
+ import { MenuItemsWithGroups } from '../types';
2
+ export declare function getGroupBlockHeight(items: MenuItemsWithGroups[]): number;
@@ -1,4 +1,12 @@
1
1
  declare const _default: ((key: "burger_button_close" | "burger_button_open" | "overlap_button_close", params?: import("@gravity-ui/i18n").Params) => string) & {
2
+ Translation: import("react").ComponentType<{
3
+ children: (props: {
4
+ t: (key: "burger_button_close" | "burger_button_open" | "overlap_button_close", params?: import("@gravity-ui/i18n").Params) => string;
5
+ }) => React.ReactNode;
6
+ }>;
7
+ useTranslation: () => {
8
+ t: (key: "burger_button_close" | "burger_button_open" | "overlap_button_close", params?: import("@gravity-ui/i18n").Params) => string;
9
+ };
2
10
  keysetData: {
3
11
  "gn-MobileHeader": Record<"burger_button_close" | "burger_button_open" | "overlap_button_close", import("@gravity-ui/i18n").KeyData>;
4
12
  };
@@ -10,9 +10,10 @@ export interface ModalItem {
10
10
  onClose?: () => void;
11
11
  }
12
12
  type MobileMenuItemType = 'regular' | 'divider';
13
- export interface MobileMenuItem extends Omit<MenuItem, 'tooltipText' | 'pinned' | 'rightAdornment' | 'afterMoreButton' | 'itemWrapper' | 'onItemClick'> {
13
+ export interface MobileMenuItem extends Omit<MenuItem, 'tooltipText' | 'pinned' | 'rightAdornment' | 'itemWrapper' | 'onItemClick' | 'href'> {
14
14
  type?: MobileMenuItemType;
15
15
  closeMenuOnClick?: boolean;
16
+ link?: string;
16
17
  onItemClick?: (item: MobileMenuItem) => void;
17
18
  itemWrapper?: (node: React.ReactNode, item: MobileMenuItem) => React.ReactNode;
18
19
  }
@@ -1,4 +1,12 @@
1
1
  declare const _default: ((key: "label_title" | "label_filter-placeholder" | "label_empty-placeholder" | "label_search" | "label_all-results", params?: import("@gravity-ui/i18n").Params) => string) & {
2
+ Translation: import("react").ComponentType<{
3
+ children: (props: {
4
+ t: (key: "label_title" | "label_filter-placeholder" | "label_empty-placeholder" | "label_search" | "label_all-results", params?: import("@gravity-ui/i18n").Params) => string;
5
+ }) => React.ReactNode;
6
+ }>;
7
+ useTranslation: () => {
8
+ t: (key: "label_title" | "label_filter-placeholder" | "label_empty-placeholder" | "label_search" | "label_all-results", params?: import("@gravity-ui/i18n").Params) => string;
9
+ };
2
10
  keysetData: {
3
11
  "gn-Settings": Record<"label_title" | "label_filter-placeholder" | "label_empty-placeholder" | "label_search" | "label_all-results", import("@gravity-ui/i18n").KeyData>;
4
12
  };
@@ -1,4 +1,12 @@
1
1
  declare const _default: ((key: "button_close", params?: import("@gravity-ui/i18n").Params) => string) & {
2
+ Translation: import("react").ComponentType<{
3
+ children: (props: {
4
+ t: (key: "button_close", params?: import("@gravity-ui/i18n").Params) => string;
5
+ }) => React.ReactNode;
6
+ }>;
7
+ useTranslation: () => {
8
+ t: (key: "button_close", params?: import("@gravity-ui/i18n").Params) => string;
9
+ };
2
10
  keysetData: {
3
11
  "gn-Title": Record<"button_close", import("@gravity-ui/i18n").KeyData>;
4
12
  };
@@ -1,5 +1,5 @@
1
- export declare const ASIDE_HEADER_ICON_SIZE = 18;
1
+ export declare const ASIDE_HEADER_ICON_SIZE = 16;
2
2
  export declare const ASIDE_HEADER_COMPACT_WIDTH = 56;
3
3
  export declare const ASIDE_HEADER_EXPANDED_WIDTH = 236;
4
- export declare const ITEM_HEIGHT = 40;
4
+ export declare const ITEM_HEIGHT = 36;
5
5
  export declare const HEADER_DIVIDER_HEIGHT = 29;
@@ -1,10 +1,4 @@
1
- export { AsideHeader } from './AsideHeader/AsideHeader';
2
- export type { AsideHeaderProps } from './AsideHeader/types';
3
- export { AsideHeaderContextProvider, useAsideHeaderContext } from './AsideHeader/AsideHeaderContext';
4
- export { FooterItem, type FooterItemProps } from './FooterItem/FooterItem';
5
- export { PageLayout, type PageLayoutProps } from './AsideHeader/components/PageLayout/PageLayout';
6
- export { PageLayoutAside } from './AsideHeader/components/PageLayout/PageLayoutAside';
7
- export { AsideFallback } from './AsideHeader/components/PageLayout/AsideFallback';
1
+ export * from './AsideHeader';
8
2
  export * from './Drawer';
9
3
  export * from './ActionBar';
10
4
  export * from './Title';
@@ -1,6 +1,5 @@
1
1
  import React, { HTMLAttributeAnchorTarget } from 'react';
2
2
  import { AlertProps, IconProps, QAProps } from '@gravity-ui/uikit';
3
- import { ItemProps } from './CompositeBar/Item/Item';
4
3
  export type MenuItemType = 'regular' | 'action' | 'divider';
5
4
  export type OpenModalSubscriber = (open: boolean) => void;
6
5
  export interface MakeItemParams {
@@ -14,12 +13,11 @@ export interface MenuItem extends QAProps {
14
13
  icon?: IconProps['data'];
15
14
  iconSize?: number | string;
16
15
  iconQa?: string;
17
- link?: string;
16
+ href?: string;
18
17
  current?: boolean;
19
18
  pinned?: boolean;
20
19
  onItemClick?: (item: MenuItem, collapsed: boolean, event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
21
20
  onItemClickCapture?: (event: React.SyntheticEvent) => void;
22
- onCollapseItemClick?: () => void;
23
21
  itemWrapper?: (p: MakeItemParams, makeItem: (p: MakeItemParams) => React.ReactNode, opts: {
24
22
  collapsed: boolean;
25
23
  compact: boolean;
@@ -29,11 +27,6 @@ export interface MenuItem extends QAProps {
29
27
  preventUserRemoving?: boolean;
30
28
  rightAdornment?: React.ReactNode;
31
29
  type?: MenuItemType;
32
- afterMoreButton?: boolean;
33
- /**
34
- * Order number. Used to determine the display order in the side menu
35
- */
36
- order?: number;
37
30
  /**
38
31
  * Visibility flag in the side menu
39
32
  */
@@ -42,9 +35,24 @@ export interface MenuItem extends QAProps {
42
35
  * The category to which the menu item belongs. Need for grouping in the display/editing mode of all pages
43
36
  */
44
37
  category?: string;
45
- className?: string;
38
+ /**
39
+ * The group ID to which the menu item belongs. Used for grouping menu items
40
+ */
41
+ groupId?: string;
42
+ }
43
+ export interface MenuGroup {
44
+ id: string;
45
+ title: string;
46
+ icon?: IconProps['data'];
47
+ /** Hide the group from display */
48
+ hidden?: boolean;
49
+ /** Allow collapsing the group via UI */
50
+ collapsible?: boolean;
51
+ /** Initial collapsed state when collapsible is true */
52
+ collapsedByDefault?: boolean;
53
+ /** Current collapsed state */
54
+ collapsed: boolean;
46
55
  }
47
- export type SubheaderMenuItem = Omit<ItemProps, 'onItemClick' | 'onItemClickCapture'>;
48
56
  export interface LogoProps {
49
57
  text: (() => React.ReactNode) | string;
50
58
  className?: string;
@@ -2,7 +2,7 @@
2
2
 
3
3
  var React = require('react');
4
4
  var uikit = require('@gravity-ui/uikit');
5
- var index = require('./index-D9NSuTiN.js');
5
+ var index = require('./index-BF-1v7O1.js');
6
6
  require('@bem-react/classname');
7
7
  require('@gravity-ui/icons');
8
8
  require('@gravity-ui/uikit/i18n');
@@ -73,4 +73,4 @@ const TopAlert = ({ alert, className, mobileView = false }) => {
73
73
  };
74
74
 
75
75
  exports.TopAlert = TopAlert;
76
- //# sourceMappingURL=index-ByqQO5fB.js.map
76
+ //# sourceMappingURL=index-B9p8boXH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-ByqQO5fB.js","sources":["../../../src/components/TopAlert/useTopAlertHeight.ts","../../../src/components/TopAlert/TopAlert.tsx"],"sourcesContent":["import React from 'react';\n\nimport debounceFn from 'lodash/debounce';\n\nimport {TopAlertProps} from '../types';\n\ntype TopAlertHeightControls = {\n alertRef: React.RefObject<HTMLDivElement>;\n updateTopSize: () => void;\n};\n\nconst G_ROOT_CLASS_NAME = 'g-root';\n\nexport const useTopAlertHeight = ({alert}: {alert?: TopAlertProps}): TopAlertHeightControls => {\n const alertRef = React.useRef<HTMLDivElement>(null);\n\n const setAsideTopPanelHeight = React.useCallback((clientHeight: number) => {\n const gRootElement = document\n .getElementsByClassName(G_ROOT_CLASS_NAME)\n .item(0) as HTMLElement | null;\n gRootElement?.style.setProperty('--gn-top-alert-height', clientHeight + 'px');\n }, []);\n\n const updateTopSize = React.useCallback(() => {\n setAsideTopPanelHeight(alertRef.current?.clientHeight || 0);\n }, [setAsideTopPanelHeight]);\n\n React.useLayoutEffect(() => {\n const updateTopSizeDebounce = debounceFn(updateTopSize, 200, {leading: true});\n\n if (alert) {\n window.addEventListener('resize', updateTopSizeDebounce);\n updateTopSizeDebounce();\n }\n return () => {\n window.removeEventListener('resize', updateTopSizeDebounce);\n setAsideTopPanelHeight(0);\n };\n }, [alert, alertRef, updateTopSize, setAsideTopPanelHeight]);\n\n return {\n alertRef,\n updateTopSize,\n };\n};\n","import React from 'react';\n\nimport {Alert, Text} from '@gravity-ui/uikit';\n\nimport {TopAlertProps} from '../types';\nimport {block} from '../utils/cn';\n\nimport {useTopAlertHeight} from './useTopAlertHeight';\n\nimport './TopAlert.scss';\n\nconst b = block('top-alert');\n\ntype Props = {\n alert?: TopAlertProps;\n className?: string;\n mobileView?: boolean;\n};\n\nexport const TopAlert = ({alert, className, mobileView = false}: Props) => {\n const {alertRef, updateTopSize} = useTopAlertHeight({alert});\n\n const [opened, setOpened] = React.useState(true);\n\n const handleClose = React.useCallback(() => {\n setOpened(false);\n\n if (alert && 'onCloseTopAlert' in alert) {\n alert.onCloseTopAlert?.();\n }\n }, [alert]);\n\n React.useEffect(() => {\n if (!opened) {\n updateTopSize();\n }\n }, [opened, updateTopSize]);\n\n if (!alert) {\n return null;\n }\n\n const {render} = alert;\n\n if (typeof render === 'function') {\n return (\n <div\n ref={alertRef}\n className={b('wrapper', {'with-bottom-border': !mobileView && opened}, className)}\n >\n {opened && render({handleClose})}\n </div>\n );\n }\n\n return (\n <div\n ref={alertRef}\n className={b('wrapper', {'with-bottom-border': !mobileView && opened}, className)}\n >\n {opened && (\n <Alert\n className={b('', {\n centered: alert.centered,\n dense: alert.dense,\n })}\n corners=\"square\"\n layout=\"horizontal\"\n align={alert.align}\n theme={alert.theme || 'warning'}\n view={alert.view}\n icon={alert.icon}\n title={alert.title}\n message={\n mobileView ? (\n <Text ellipsisLines={5} variant=\"body-2\">\n {alert.message}\n </Text>\n ) : (\n alert.message\n )\n }\n actions={alert.actions}\n onClose={alert.closable ? handleClose : undefined}\n />\n )}\n </div>\n );\n};\n"],"names":["debounceFn","block","Alert","Text"],"mappings":"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"}
1
+ {"version":3,"file":"index-B9p8boXH.js","sources":["../../../src/components/TopAlert/useTopAlertHeight.ts","../../../src/components/TopAlert/TopAlert.tsx"],"sourcesContent":["import React from 'react';\n\nimport debounceFn from 'lodash/debounce';\n\nimport {TopAlertProps} from '../types';\n\ntype TopAlertHeightControls = {\n alertRef: React.RefObject<HTMLDivElement>;\n updateTopSize: () => void;\n};\n\nconst G_ROOT_CLASS_NAME = 'g-root';\n\nexport const useTopAlertHeight = ({alert}: {alert?: TopAlertProps}): TopAlertHeightControls => {\n const alertRef = React.useRef<HTMLDivElement>(null);\n\n const setAsideTopPanelHeight = React.useCallback((clientHeight: number) => {\n const gRootElement = document\n .getElementsByClassName(G_ROOT_CLASS_NAME)\n .item(0) as HTMLElement | null;\n gRootElement?.style.setProperty('--gn-top-alert-height', clientHeight + 'px');\n }, []);\n\n const updateTopSize = React.useCallback(() => {\n setAsideTopPanelHeight(alertRef.current?.clientHeight || 0);\n }, [setAsideTopPanelHeight]);\n\n React.useLayoutEffect(() => {\n const updateTopSizeDebounce = debounceFn(updateTopSize, 200, {leading: true});\n\n if (alert) {\n window.addEventListener('resize', updateTopSizeDebounce);\n updateTopSizeDebounce();\n }\n return () => {\n window.removeEventListener('resize', updateTopSizeDebounce);\n setAsideTopPanelHeight(0);\n };\n }, [alert, alertRef, updateTopSize, setAsideTopPanelHeight]);\n\n return {\n alertRef,\n updateTopSize,\n };\n};\n","import React from 'react';\n\nimport {Alert, Text} from '@gravity-ui/uikit';\n\nimport {TopAlertProps} from '../types';\nimport {block} from '../utils/cn';\n\nimport {useTopAlertHeight} from './useTopAlertHeight';\n\nimport './TopAlert.scss';\n\nconst b = block('top-alert');\n\ntype Props = {\n alert?: TopAlertProps;\n className?: string;\n mobileView?: boolean;\n};\n\nexport const TopAlert = ({alert, className, mobileView = false}: Props) => {\n const {alertRef, updateTopSize} = useTopAlertHeight({alert});\n\n const [opened, setOpened] = React.useState(true);\n\n const handleClose = React.useCallback(() => {\n setOpened(false);\n\n if (alert && 'onCloseTopAlert' in alert) {\n alert.onCloseTopAlert?.();\n }\n }, [alert]);\n\n React.useEffect(() => {\n if (!opened) {\n updateTopSize();\n }\n }, [opened, updateTopSize]);\n\n if (!alert) {\n return null;\n }\n\n const {render} = alert;\n\n if (typeof render === 'function') {\n return (\n <div\n ref={alertRef}\n className={b('wrapper', {'with-bottom-border': !mobileView && opened}, className)}\n >\n {opened && render({handleClose})}\n </div>\n );\n }\n\n return (\n <div\n ref={alertRef}\n className={b('wrapper', {'with-bottom-border': !mobileView && opened}, className)}\n >\n {opened && (\n <Alert\n className={b('', {\n centered: alert.centered,\n dense: alert.dense,\n })}\n corners=\"square\"\n layout=\"horizontal\"\n align={alert.align}\n theme={alert.theme || 'warning'}\n view={alert.view}\n icon={alert.icon}\n title={alert.title}\n message={\n mobileView ? (\n <Text ellipsisLines={5} variant=\"body-2\">\n {alert.message}\n </Text>\n ) : (\n alert.message\n )\n }\n actions={alert.actions}\n onClose={alert.closable ? handleClose : undefined}\n />\n )}\n </div>\n );\n};\n"],"names":["debounceFn","block","Alert","Text"],"mappings":"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"}