@cloud-ru/ds-uikit-product-header 1.5.1-preview-d90ac2be.0 → 1.5.2-preview-0406cbd2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +1 -2
- package/dist/cjs/components/HeaderButton/HeaderButton.js +1 -3
- package/dist/cjs/components/HeaderLayout/HeaderLayout.js +1 -1
- package/dist/cjs/components/HeaderLayout/styles.module.css +9 -2
- package/dist/cjs/components/Logo/Logo.js +3 -3
- package/dist/cjs/components/Logo/styles.module.css +2 -1
- package/dist/cjs/components/MainMenu/MainMenu.js +6 -9
- package/dist/cjs/components/MainMenu/helperComponents/Banners/MenuBanner.js +1 -3
- package/dist/cjs/components/MainMenu/helperComponents/Banners/styles.module.css +2 -1
- package/dist/cjs/components/MainMenu/helperComponents/Content/Content.js +11 -35
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.js +1 -1
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/styles.module.css +2 -1
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/SortableGroup.d.ts +4 -16
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/SortableGroup.js +10 -38
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.d.ts +4 -4
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.js +5 -10
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.d.ts +1 -3
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.js +4 -6
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.d.ts +4 -6
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.js +11 -16
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategoryTitle.d.ts +3 -7
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategoryTitle.js +18 -24
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/styles.module.css +1 -1
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.css +22 -32
- package/dist/cjs/components/MainMenu/helperComponents/Content/hooks/useContentSegmentsSortable.js +2 -4
- package/dist/cjs/components/MainMenu/helperComponents/Content/hooks/useSegmentDnd.d.ts +4 -4
- package/dist/cjs/components/MainMenu/helperComponents/Content/hooks/useSegmentDnd.js +3 -3
- package/dist/cjs/components/MainMenu/helperComponents/Content/styles.module.css +0 -16
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/Favorites.d.ts +4 -4
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/Favorites.js +11 -12
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/EmptyState/styles.module.css +2 -2
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/styles.module.css +10 -7
- package/dist/cjs/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.d.ts +1 -1
- package/dist/cjs/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.js +7 -7
- package/dist/cjs/components/MainMenu/helperComponents/MenuDesktop/styles.module.css +10 -4
- package/dist/cjs/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.d.ts +2 -1
- package/dist/cjs/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.js +2 -2
- package/dist/cjs/components/MainMenu/helperComponents/MenuHeaderBrand/styles.module.css +4 -1
- package/dist/cjs/components/MainMenu/helperComponents/MenuMobile/MenuMobile.d.ts +1 -1
- package/dist/cjs/components/MainMenu/helperComponents/MenuMobile/MenuMobile.js +6 -5
- package/dist/cjs/components/MainMenu/helperComponents/MenuMobile/styles.module.css +9 -2
- package/dist/cjs/components/MainMenu/helperComponents/MountAnimation/MountAnimation.d.ts +1 -1
- package/dist/cjs/components/MainMenu/helperComponents/MountAnimation/MountAnimation.js +1 -4
- package/dist/cjs/components/MainMenu/helperComponents/MountAnimation/styles.module.css +6 -6
- package/dist/cjs/components/MainMenu/helperComponents/Search/styles.module.css +3 -1
- package/dist/cjs/components/MainMenu/helperComponents/ServiceCard/ServiceCard.d.ts +6 -23
- package/dist/cjs/components/MainMenu/helperComponents/ServiceCard/ServiceCard.js +21 -30
- package/dist/cjs/components/MainMenu/helperComponents/ServiceCard/styles.module.css +2 -7
- package/dist/cjs/components/MainMenu/hooks/useMainMenuDnd.d.ts +4 -4
- package/dist/cjs/components/MainMenu/hooks/useMainMenuDnd.js +6 -4
- package/dist/cjs/components/MainMenu/hooks/useMenuItems.js +7 -12
- package/dist/cjs/components/MainMenu/utils/filterLinksGroupsFuzzy.d.ts +0 -5
- package/dist/cjs/components/MainMenu/utils/filterLinksGroupsFuzzy.js +7 -21
- package/dist/cjs/components/MainMenu/utils/flatLinksGroups.d.ts +0 -2
- package/dist/cjs/components/MainMenu/utils/flatLinksGroups.js +0 -5
- package/dist/cjs/components/MainMenu/utils/resolveInnerLinksByIds.d.ts +2 -2
- package/dist/cjs/components/MainMenu/utils/resolveInnerLinksByIds.js +4 -2
- package/dist/cjs/components/PathBreadcrumbs/PathBreadcrumbs.d.ts +1 -2
- package/dist/cjs/components/PathBreadcrumbs/PathBreadcrumbs.js +2 -2
- package/dist/cjs/components/PlatformLogo/styles.module.css +4 -2
- package/dist/cjs/components/UserMenu/UserMenu.js +5 -1
- package/dist/cjs/components/UserMenu/styles.module.css +1 -1
- package/dist/cjs/hooks/useDesktopComfortClassName.d.ts +2 -0
- package/dist/cjs/hooks/useDesktopComfortClassName.js +11 -0
- package/dist/cjs/hooks/useMobileLayout.js +1 -0
- package/dist/cjs/locale/index.d.ts +8 -8
- package/dist/cjs/locale/index.js +4 -4
- package/dist/cjs/style.css +89 -87
- package/dist/esm/components/HeaderButton/HeaderButton.js +1 -3
- package/dist/esm/components/HeaderLayout/HeaderLayout.js +1 -1
- package/dist/esm/components/HeaderLayout/styles.module.css +9 -2
- package/dist/esm/components/Logo/Logo.js +3 -3
- package/dist/esm/components/Logo/styles.module.css +2 -1
- package/dist/esm/components/MainMenu/MainMenu.js +7 -10
- package/dist/esm/components/MainMenu/helperComponents/Banners/MenuBanner.js +1 -3
- package/dist/esm/components/MainMenu/helperComponents/Banners/styles.module.css +2 -1
- package/dist/esm/components/MainMenu/helperComponents/Content/Content.js +13 -37
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.js +1 -1
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/styles.module.css +2 -1
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/SortableGroup.d.ts +4 -16
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/SortableGroup.js +9 -37
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.d.ts +4 -4
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.js +5 -10
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.d.ts +1 -3
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.js +3 -5
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.d.ts +4 -6
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.js +12 -17
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategoryTitle.d.ts +3 -7
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategoryTitle.js +19 -25
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/styles.module.css +1 -1
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.css +22 -32
- package/dist/esm/components/MainMenu/helperComponents/Content/hooks/useContentSegmentsSortable.js +2 -4
- package/dist/esm/components/MainMenu/helperComponents/Content/hooks/useSegmentDnd.d.ts +4 -4
- package/dist/esm/components/MainMenu/helperComponents/Content/hooks/useSegmentDnd.js +3 -3
- package/dist/esm/components/MainMenu/helperComponents/Content/styles.module.css +0 -16
- package/dist/esm/components/MainMenu/helperComponents/Favorites/Favorites.d.ts +4 -4
- package/dist/esm/components/MainMenu/helperComponents/Favorites/Favorites.js +11 -12
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/EmptyState/styles.module.css +2 -2
- package/dist/esm/components/MainMenu/helperComponents/Favorites/styles.module.css +10 -7
- package/dist/esm/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.d.ts +1 -1
- package/dist/esm/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.js +7 -7
- package/dist/esm/components/MainMenu/helperComponents/MenuDesktop/styles.module.css +10 -4
- package/dist/esm/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.d.ts +2 -1
- package/dist/esm/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.js +2 -2
- package/dist/esm/components/MainMenu/helperComponents/MenuHeaderBrand/styles.module.css +4 -1
- package/dist/esm/components/MainMenu/helperComponents/MenuMobile/MenuMobile.d.ts +1 -1
- package/dist/esm/components/MainMenu/helperComponents/MenuMobile/MenuMobile.js +6 -5
- package/dist/esm/components/MainMenu/helperComponents/MenuMobile/styles.module.css +9 -2
- package/dist/esm/components/MainMenu/helperComponents/MountAnimation/MountAnimation.d.ts +1 -1
- package/dist/esm/components/MainMenu/helperComponents/MountAnimation/MountAnimation.js +1 -4
- package/dist/esm/components/MainMenu/helperComponents/MountAnimation/styles.module.css +6 -6
- package/dist/esm/components/MainMenu/helperComponents/Search/styles.module.css +3 -1
- package/dist/esm/components/MainMenu/helperComponents/ServiceCard/ServiceCard.d.ts +6 -23
- package/dist/esm/components/MainMenu/helperComponents/ServiceCard/ServiceCard.js +20 -30
- package/dist/esm/components/MainMenu/helperComponents/ServiceCard/styles.module.css +2 -7
- package/dist/esm/components/MainMenu/hooks/useMainMenuDnd.d.ts +4 -4
- package/dist/esm/components/MainMenu/hooks/useMainMenuDnd.js +8 -6
- package/dist/esm/components/MainMenu/hooks/useMenuItems.js +8 -13
- package/dist/esm/components/MainMenu/utils/filterLinksGroupsFuzzy.d.ts +0 -5
- package/dist/esm/components/MainMenu/utils/filterLinksGroupsFuzzy.js +7 -20
- package/dist/esm/components/MainMenu/utils/flatLinksGroups.d.ts +0 -2
- package/dist/esm/components/MainMenu/utils/flatLinksGroups.js +0 -4
- package/dist/esm/components/MainMenu/utils/resolveInnerLinksByIds.d.ts +2 -2
- package/dist/esm/components/MainMenu/utils/resolveInnerLinksByIds.js +4 -2
- package/dist/esm/components/PathBreadcrumbs/PathBreadcrumbs.d.ts +1 -2
- package/dist/esm/components/PathBreadcrumbs/PathBreadcrumbs.js +2 -2
- package/dist/esm/components/PlatformLogo/styles.module.css +4 -2
- package/dist/esm/components/UserMenu/UserMenu.js +5 -1
- package/dist/esm/components/UserMenu/styles.module.css +1 -1
- package/dist/esm/hooks/useDesktopComfortClassName.d.ts +2 -0
- package/dist/esm/hooks/useDesktopComfortClassName.js +8 -0
- package/dist/esm/hooks/useMobileLayout.js +1 -0
- package/dist/esm/locale/index.d.ts +8 -8
- package/dist/esm/locale/index.js +4 -4
- package/dist/esm/style.css +89 -87
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +22 -22
- package/src/components/HeaderButton/HeaderButton.tsx +1 -4
- package/src/components/HeaderLayout/HeaderLayout.tsx +8 -2
- package/src/components/HeaderLayout/styles.module.scss +11 -1
- package/src/components/Logo/Logo.tsx +4 -4
- package/src/components/Logo/styles.module.scss +1 -0
- package/src/components/MainMenu/MainMenu.tsx +6 -11
- package/src/components/MainMenu/helperComponents/Banners/MenuBanner.tsx +1 -3
- package/src/components/MainMenu/helperComponents/Banners/styles.module.scss +1 -0
- package/src/components/MainMenu/helperComponents/Content/Content.tsx +58 -100
- package/src/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.tsx +1 -1
- package/src/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/styles.module.scss +2 -0
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/SortableGroup.tsx +47 -99
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.tsx +35 -18
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.tsx +6 -11
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.tsx +96 -69
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategoryTitle.tsx +48 -64
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.scss +13 -29
- package/src/components/MainMenu/helperComponents/Content/hooks/useContentSegmentsSortable.ts +2 -4
- package/src/components/MainMenu/helperComponents/Content/hooks/useSegmentDnd.tsx +7 -8
- package/src/components/MainMenu/helperComponents/Content/styles.module.scss +0 -19
- package/src/components/MainMenu/helperComponents/Favorites/Favorites.tsx +26 -27
- package/src/components/MainMenu/helperComponents/Favorites/styles.module.scss +12 -7
- package/src/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.tsx +11 -17
- package/src/components/MainMenu/helperComponents/MenuDesktop/styles.module.scss +10 -2
- package/src/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.tsx +3 -2
- package/src/components/MainMenu/helperComponents/MenuHeaderBrand/styles.module.scss +4 -0
- package/src/components/MainMenu/helperComponents/MenuMobile/MenuMobile.tsx +10 -7
- package/src/components/MainMenu/helperComponents/MenuMobile/styles.module.scss +8 -1
- package/src/components/MainMenu/helperComponents/MountAnimation/MountAnimation.tsx +1 -5
- package/src/components/MainMenu/helperComponents/MountAnimation/styles.module.scss +4 -2
- package/src/components/MainMenu/helperComponents/Search/styles.module.scss +3 -3
- package/src/components/MainMenu/helperComponents/ServiceCard/ServiceCard.tsx +41 -85
- package/src/components/MainMenu/helperComponents/ServiceCard/styles.module.scss +1 -7
- package/src/components/MainMenu/hooks/useMainMenuDnd.tsx +12 -7
- package/src/components/MainMenu/hooks/useMenuItems.tsx +10 -34
- package/src/components/MainMenu/utils/filterLinksGroupsFuzzy.ts +8 -29
- package/src/components/MainMenu/utils/flatLinksGroups.ts +0 -5
- package/src/components/MainMenu/utils/resolveInnerLinksByIds.ts +6 -3
- package/src/components/PathBreadcrumbs/PathBreadcrumbs.tsx +2 -3
- package/src/components/PlatformLogo/styles.module.scss +4 -1
- package/src/components/UserMenu/UserMenu.tsx +5 -1
- package/src/components/UserMenu/styles.module.scss +1 -1
- package/src/hooks/useDesktopComfortClassName.ts +11 -0
- package/src/hooks/useMobileLayout.ts +1 -0
- package/src/locale/index.ts +4 -4
- package/dist/cjs/components/MainMenu/helperComponents/Content/cardsContext.d.ts +0 -20
- package/dist/cjs/components/MainMenu/helperComponents/Content/cardsContext.js +0 -17
- package/dist/cjs/components/MainMenu/helperComponents/Content/hooks/useProgressiveCount.d.ts +0 -12
- package/dist/cjs/components/MainMenu/helperComponents/Content/hooks/useProgressiveCount.js +0 -39
- package/dist/esm/components/MainMenu/helperComponents/Content/cardsContext.d.ts +0 -20
- package/dist/esm/components/MainMenu/helperComponents/Content/cardsContext.js +0 -13
- package/dist/esm/components/MainMenu/helperComponents/Content/hooks/useProgressiveCount.d.ts +0 -12
- package/dist/esm/components/MainMenu/helperComponents/Content/hooks/useProgressiveCount.js +0 -35
- package/src/components/MainMenu/helperComponents/Content/cardsContext.ts +0 -36
- package/src/components/MainMenu/helperComponents/Content/hooks/useProgressiveCount.ts +0 -46
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## 1.5.1 (2026-09-25)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **FF-9083:** migrate components to renamed token keys ([fd8237d](https://github.com/cloud-ru-tech/snack-v2/commit/fd8237d04c95b5474955c946d9db7bedb3821c97))
|
|
11
|
+
- **FF-9085:** pin comfort density on mobile header surfaces ([2d23010](https://github.com/cloud-ru-tech/snack-v2/commit/2d230100ae078bfa26fbe4a4d3cd643187eee00b))
|
|
12
|
+
|
|
6
13
|
# 1.5.0 (2026-09-21)
|
|
7
14
|
|
|
8
15
|
### Features
|
package/README.md
CHANGED
|
@@ -478,7 +478,7 @@ import { MainMenu, MenuMobile } from '@cloud-ru/ds-uikit-product-header';
|
|
|
478
478
|
| `onSegmentOrderChange` | `((segmentId: string, orderedGroupIds: string[]) => void)` | — | Колбэк после DnD групп в сегменте (без id синтетической группы избранного). |
|
|
479
479
|
| `onSegmentServiceClick` | `((service: InnerLink, e?: MouseEvent<HTMLElement, MouseEvent>) => void)` | — | Колбэк клика по карточке сервиса в сегменте. |
|
|
480
480
|
| `onWidthChangeEnd` | `((width: number) => void)` | — | Вызывается при окончании изменения ширины дровера (desktop only) |
|
|
481
|
-
| `open` | `boolean` |
|
|
481
|
+
| `open` | `boolean` | — | |
|
|
482
482
|
| `platformGroups` | `LinksGroup` | — | Платформенные группы (например «Облачные продукты», «Другие продукты»). <br/> Без поиска в сетке карточек **не отображаются**. <br/> С поиском: попадают в результаты при совпадении; порядок — <br/> после совпадений из сегментов без `pinBottomOnSearch`, перед сегментами с `pinBottomOnSearch`. <br/> Обычно `favoritesEnabled: false`; карточки могут быть без `icon` (Avatar по `label`). |
|
|
483
483
|
| `preferences` | `MainMenuPreferencesProps` | — | Настройки меню (модалка по кнопке в тулбаре): описания карточек, цвета групп. <br/> Не передано — кнопка настроек в тулбаре не отображается. |
|
|
484
484
|
| `rightTop` | `ReactNode` | — | Слот над тулбаром правой колонки (например, баннеры) |
|
|
@@ -821,5 +821,4 @@ export function Basic() {
|
|
|
821
821
|
|
|
822
822
|
| Prop | Type | Default | Description |
|
|
823
823
|
|------|------|---------|-------------|
|
|
824
|
-
| `isMobile` | `boolean` | — | |
|
|
825
824
|
| `items` | `BreadcrumbsProps` \| `Item` | — | |
|
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.HeaderButton = HeaderButton;
|
|
7
7
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
8
|
const button_1 = require("@cloud-ru/ds-button");
|
|
9
|
-
const theme_1 = require("@cloud-ru/ds-theme");
|
|
10
9
|
const tooltip_1 = require("@cloud-ru/ds-tooltip");
|
|
11
10
|
const classnames_1 = __importDefault(require("classnames"));
|
|
12
11
|
const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
|
|
@@ -16,7 +15,6 @@ const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
|
|
|
16
15
|
* остальное API `Button` и `Tooltip` передаётся как есть.
|
|
17
16
|
*/
|
|
18
17
|
function HeaderButton({ tooltip, isMobile, className, ...rest }) {
|
|
19
|
-
const compactThemeClassName = (0, theme_1.useThemeClassnames)({ density: 'compact' });
|
|
20
18
|
return (
|
|
21
19
|
// FIXME: typescript ломается, если не указать tip явно
|
|
22
20
|
// пока не разбирался почему так
|
|
@@ -29,5 +27,5 @@ function HeaderButton({ tooltip, isMobile, className, ...rest }) {
|
|
|
29
27
|
placement: 'bottom',
|
|
30
28
|
...tooltip,
|
|
31
29
|
triggerClassName: styles_module_scss_1.default.tooltipTrigger,
|
|
32
|
-
}, children: (0, jsx_runtime_1.jsx)(button_1.Button, { ...rest, size: 'm', appearance: 'neutral', view: 'simple', className: (0, classnames_1.default)(styles_module_scss_1.default.headerButton,
|
|
30
|
+
}, children: (0, jsx_runtime_1.jsx)(button_1.Button, { ...rest, size: 'm', appearance: 'neutral', view: 'simple', className: (0, classnames_1.default)(styles_module_scss_1.default.headerButton, className) }) }));
|
|
33
31
|
}
|
|
@@ -13,5 +13,5 @@ const useMobileLayout_1 = require("../../hooks/useMobileLayout");
|
|
|
13
13
|
const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
|
|
14
14
|
function HeaderLayout({ menu, logo, select, breadcrumbs, toolbar, className, ...rest }) {
|
|
15
15
|
const isMobile = (0, useMobileLayout_1.useMobileLayout)();
|
|
16
|
-
return ((0, jsx_runtime_1.jsxs)("header", { className: (0, classnames_1.default)(styles_module_scss_1.default.header, className), ...(0, utils_1.extractSupportProps)({ 'data-test-id': constants_1.TEST_IDS.headerLayout.root, ...rest }), children: [(0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.top, children: [(0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.left, children: [logo && (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: logo }), menu && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'vertical' }), menu] })), !isMobile && select && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'vertical' }), select] })), !isMobile && breadcrumbs && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'vertical' }), breadcrumbs] }))] }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.right, children: toolbar })] }), (0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'horizontal' }), isMobile && Boolean(breadcrumbs) && (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.bottom, children: breadcrumbs })] }));
|
|
16
|
+
return ((0, jsx_runtime_1.jsxs)("header", { className: (0, classnames_1.default)(styles_module_scss_1.default.header, className), "data-mobile": isMobile || undefined, ...(0, utils_1.extractSupportProps)({ 'data-test-id': constants_1.TEST_IDS.headerLayout.root, ...rest }), children: [(0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.top, children: [(0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.left, children: [logo && (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: logo }), menu && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'vertical' }), menu, isMobile && (0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'vertical' })] })), !isMobile && select && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'vertical' }), select] })), !isMobile && breadcrumbs && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'vertical' }), breadcrumbs] }))] }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.right, children: toolbar })] }), (0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'horizontal' }), isMobile && Boolean(breadcrumbs) && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.bottom, children: breadcrumbs }), (0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'horizontal' })] }))] }));
|
|
17
17
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.header{
|
|
2
2
|
box-sizing:border-box;
|
|
3
|
-
background-color:var(--sn-theme-color-neutral-background, var(--sn-brand-color-neutral-90, var(--sn-
|
|
3
|
+
background-color:var(--sn-theme-color-neutral-background, var(--sn-brand-color-neutral-90, var(--sn-brand-palette-gray-90, #eeeff3)));
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
.top{
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
align-items:center;
|
|
19
19
|
box-sizing:border-box;
|
|
20
20
|
height:var(--sn-primitive-dimension-24, 24px);
|
|
21
|
-
border-bottom:var(--sn-primitive-strokeWeight-strokeRegular, 1px) solid var(--sn-theme-color-available-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-default-borderColor, rgba(159, 166, 198, 0.3019607843)));
|
|
22
21
|
}
|
|
23
22
|
|
|
24
23
|
.left{
|
|
@@ -34,4 +33,12 @@
|
|
|
34
33
|
gap:var(--sn-primitive-dimension-8, 8px);
|
|
35
34
|
align-items:center;
|
|
36
35
|
height:100%;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.header[data-mobile] .top{
|
|
39
|
+
padding:var(--sn-primitive-dimension-0, 0px);
|
|
40
|
+
}
|
|
41
|
+
.header[data-mobile] .left,
|
|
42
|
+
.header[data-mobile] .right{
|
|
43
|
+
gap:var(--sn-primitive-dimension-0, 0px);
|
|
37
44
|
}
|
|
@@ -17,7 +17,7 @@ const constants_1 = require("./constants");
|
|
|
17
17
|
const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
|
|
18
18
|
function Logo({ path, loading, mode, href, onClick, className, tooltip, ...rest }) {
|
|
19
19
|
const [error, setError] = (0, react_1.useState)(false);
|
|
20
|
-
const
|
|
20
|
+
const logoThemeClassName = (0, theme_1.useThemeClassnames)({ brand: 'hrGreen' });
|
|
21
21
|
(0, react_1.useEffect)(() => {
|
|
22
22
|
setError(false);
|
|
23
23
|
}, [path, loading]);
|
|
@@ -29,7 +29,7 @@ function Logo({ path, loading, mode, href, onClick, className, tooltip, ...rest
|
|
|
29
29
|
setError(true);
|
|
30
30
|
} }));
|
|
31
31
|
}
|
|
32
|
-
return ((0, jsx_runtime_1.jsxs)("span", { className: styles_module_scss_1.default.logoWrap, children: [(0, jsx_runtime_1.jsxs)("span", { className: styles_module_scss_1.default.iconStack, children: [(0, jsx_runtime_1.jsx)(logos_1.CloudLogo, { size: 24, className: (0, classnames_1.default)(styles_module_scss_1.default.icon,
|
|
33
|
-
}, [error, mode, path,
|
|
32
|
+
return ((0, jsx_runtime_1.jsxs)("span", { className: styles_module_scss_1.default.logoWrap, children: [(0, jsx_runtime_1.jsxs)("span", { className: styles_module_scss_1.default.iconStack, children: [(0, jsx_runtime_1.jsx)(logos_1.CloudLogo, { size: 24, className: (0, classnames_1.default)(styles_module_scss_1.default.icon, logoThemeClassName, styles_module_scss_1.default.iconDefault) }), (0, jsx_runtime_1.jsx)(product_1.HomeFilledSVG, { size: 24, className: (0, classnames_1.default)(styles_module_scss_1.default.icon, logoThemeClassName, styles_module_scss_1.default.iconHover) })] }), mode && mode !== constants_1.HEADER_LOGO_MODE.Prod && ((0, jsx_runtime_1.jsx)(promo_tag_1.PromoTag, { as: 'span', label: mode, size: 'xs', appearance: constants_1.MAP_LOGO_MODE_TO_APPEARANCE[mode] }))] }));
|
|
33
|
+
}, [error, mode, path, logoThemeClassName]);
|
|
34
34
|
return ((0, jsx_runtime_1.jsx)(HeaderButton_1.HeaderButton, { as: 'a', tooltip: tooltip, className: (0, classnames_1.default)(styles_module_scss_1.default.logo, className), href: href, tabIndex: 0, onClick: onClick, loading: loading, icon: logo, ...(0, utils_1.extractDataTestProps)(rest) }));
|
|
35
35
|
}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
.icon{
|
|
20
20
|
transform-origin:50% center;
|
|
21
21
|
transform-box:fill-box;
|
|
22
|
-
color:var(--sn-theme-color-primary-accent, var(--sn-brand-color-primary-
|
|
22
|
+
color:var(--sn-theme-color-primary-accent, var(--sn-brand-color-primary-50, #389f74));
|
|
23
23
|
transition:opacity 0.28s cubic-bezier(0.4, 0, 0.2, 1);
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
.logo{
|
|
37
37
|
position:relative;
|
|
38
38
|
flex-shrink:0;
|
|
39
|
+
box-sizing:border-box;
|
|
39
40
|
}
|
|
40
41
|
.logo:active:not([data-disabled]) .iconDefault{
|
|
41
42
|
opacity:0;
|
|
@@ -14,16 +14,13 @@ const MenuMobile_1 = require("./helperComponents/MenuMobile");
|
|
|
14
14
|
function MainMenu({ open: openProp, setOpen: setOpenProp, settingItems, platformGroups, logo, leftTop, leftBottom, rightTop, segments, segmentPrefs, activeSegmentId, onActiveSegmentChange, onSegmentOrderChange, onSegmentExpandedChange, onSegmentServiceClick, favorite, search, preferences, disabled, defaultWidth, onWidthChangeEnd, draggerTooltip, loading, }) {
|
|
15
15
|
const { t } = locale_1.headerLocale.useTranslations();
|
|
16
16
|
const [open = false, setOpen] = (0, utils_1.useValueControl)({ value: openProp, onChange: setOpenProp });
|
|
17
|
-
const searchValue = search?.value;
|
|
18
|
-
const onSearchChange = search?.onChange;
|
|
19
17
|
(0, react_1.useEffect)(() => {
|
|
20
|
-
if (!open &&
|
|
21
|
-
|
|
22
|
-
}, [open,
|
|
23
|
-
const handleOpen = (0, react_1.useCallback)(() => {
|
|
24
|
-
setOpen(true);
|
|
25
|
-
}, [setOpen]);
|
|
18
|
+
if (!open && search?.value)
|
|
19
|
+
search?.onChange('');
|
|
20
|
+
}, [open, search]);
|
|
26
21
|
const isMobile = (0, useMobileLayout_1.useMobileLayout)();
|
|
27
22
|
const MenuComponent = isMobile ? MenuMobile_1.MenuMobile : MenuDesktop_1.MenuDesktop;
|
|
28
|
-
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(HeaderButton_1.HeaderButton, { tooltip: open ? undefined : { tip: t('services') }, isMobile: isMobile, disabled: disabled, icon: (0, jsx_runtime_1.jsx)(product_1.MainMenuSVG, {}), onClick:
|
|
23
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(HeaderButton_1.HeaderButton, { tooltip: open ? undefined : { tip: t('services') }, isMobile: isMobile, disabled: disabled, icon: (0, jsx_runtime_1.jsx)(product_1.MainMenuSVG, {}), onClick: () => {
|
|
24
|
+
setOpen(true);
|
|
25
|
+
}, "data-test-id": constants_1.TEST_IDS.mainMenu.drawerButton }), (0, jsx_runtime_1.jsx)(MenuComponent, { settingItems: settingItems, segments: segments, segmentPrefs: segmentPrefs, activeSegmentId: activeSegmentId, onActiveSegmentChange: onActiveSegmentChange, onSegmentOrderChange: onSegmentOrderChange, onSegmentExpandedChange: onSegmentExpandedChange, onSegmentServiceClick: onSegmentServiceClick, platformGroups: platformGroups, search: search, logo: logo, leftTop: leftTop, leftBottom: leftBottom, rightTop: rightTop, favorite: favorite, open: open, setOpen: setOpen, preferences: preferences, defaultWidth: defaultWidth, onWidthChangeEnd: onWidthChangeEnd, draggerTooltip: draggerTooltip, loading: loading })] }));
|
|
29
26
|
}
|
|
@@ -9,7 +9,6 @@ const button_1 = require("@cloud-ru/ds-button");
|
|
|
9
9
|
const card_1 = require("@cloud-ru/ds-card");
|
|
10
10
|
const system_1 = require("@cloud-ru/ds-icons/interface/system");
|
|
11
11
|
const promo_tag_1 = require("@cloud-ru/ds-promo-tag");
|
|
12
|
-
const theme_1 = require("@cloud-ru/ds-theme");
|
|
13
12
|
const typography_1 = require("@cloud-ru/ds-typography");
|
|
14
13
|
const classnames_1 = __importDefault(require("classnames"));
|
|
15
14
|
const react_1 = require("react");
|
|
@@ -18,11 +17,10 @@ const constants_1 = require("./constants");
|
|
|
18
17
|
const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
|
|
19
18
|
function MenuBanner({ title, promoTag, afterTitle, onClose, className, href = '#', 'data-test-id': dataTestId, ...rest }) {
|
|
20
19
|
const { t } = locale_1.headerLocale.useTranslations();
|
|
21
|
-
const compactThemeClassname = (0, theme_1.useThemeClassnames)({ density: 'compact' });
|
|
22
20
|
const handleClose = (0, react_1.useCallback)(e => {
|
|
23
21
|
e.preventDefault();
|
|
24
22
|
e.stopPropagation();
|
|
25
23
|
onClose?.(e);
|
|
26
24
|
}, [onClose]);
|
|
27
|
-
return ((0, jsx_runtime_1.jsx)(card_1.Card, { as: 'a', href: href, radius: 'l', view: 'simple', className: (0, classnames_1.default)(styles_module_scss_1.default.root, className), "data-test-id": dataTestId ?? constants_1.MENU_BANNER_TEST_IDS.root, ...rest, children: (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.contentRow, children: [(0, jsx_runtime_1.jsxs)("span", { className: styles_module_scss_1.default.titleWrapper, children: [(0, jsx_runtime_1.jsx)(typography_1.Typography, { as: 'span', variant: 'body', size: 'm', className: styles_module_scss_1.default.title, "data-test-id": constants_1.MENU_BANNER_TEST_IDS.title, children: title }), promoTag && ((0, jsx_runtime_1.jsx)(promo_tag_1.PromoTag, { ...promoTag, className: styles_module_scss_1.default.promoTag, roleAppearance: promo_tag_1.ROLE_APPEARANCE.Decor, size: promo_tag_1.SIZE.Xs, "data-test-id": constants_1.MENU_BANNER_TEST_IDS.promoTag }))] }), afterTitle && ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.afterTitle, "data-test-id": constants_1.MENU_BANNER_TEST_IDS.afterTitle, children: afterTitle })), onClose && ((0, jsx_runtime_1.jsx)(button_1.Button, { className:
|
|
25
|
+
return ((0, jsx_runtime_1.jsx)(card_1.Card, { as: 'a', href: href, radius: 'l', view: 'simple', className: (0, classnames_1.default)(styles_module_scss_1.default.root, className), "data-test-id": dataTestId ?? constants_1.MENU_BANNER_TEST_IDS.root, ...rest, children: (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.contentRow, children: [(0, jsx_runtime_1.jsxs)("span", { className: styles_module_scss_1.default.titleWrapper, children: [(0, jsx_runtime_1.jsx)(typography_1.Typography, { as: 'span', variant: 'body', size: 'm', className: styles_module_scss_1.default.title, "data-test-id": constants_1.MENU_BANNER_TEST_IDS.title, children: title }), promoTag && ((0, jsx_runtime_1.jsx)(promo_tag_1.PromoTag, { ...promoTag, className: styles_module_scss_1.default.promoTag, roleAppearance: promo_tag_1.ROLE_APPEARANCE.Decor, size: promo_tag_1.SIZE.Xs, "data-test-id": constants_1.MENU_BANNER_TEST_IDS.promoTag }))] }), afterTitle && ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.afterTitle, "data-test-id": constants_1.MENU_BANNER_TEST_IDS.afterTitle, children: afterTitle })), onClose && ((0, jsx_runtime_1.jsx)(button_1.Button, { className: styles_module_scss_1.default.closeButton, view: 'elevated', appearance: 'neutral', size: 's', icon: (0, jsx_runtime_1.jsx)(system_1.CrossSVG, { size: 16 }), onClick: handleClose, "aria-label": t('close'), "data-test-id": constants_1.MENU_BANNER_TEST_IDS.close }))] }) }));
|
|
28
26
|
}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
.root{
|
|
14
|
+
box-sizing:border-box;
|
|
14
15
|
width:100%;
|
|
15
16
|
min-width:0;
|
|
16
17
|
}
|
|
@@ -21,7 +22,7 @@
|
|
|
21
22
|
.contentRow{
|
|
22
23
|
position:relative;
|
|
23
24
|
display:flex;
|
|
24
|
-
gap:var(--sn-density-spacing-interval-s, var(--sn-primitive-dimension-
|
|
25
|
+
gap:var(--sn-density-spacing-interval-s, var(--sn-platform-comfort-spacing-interval-s, var(--sn-primitive-dimension-12, 12px)));
|
|
25
26
|
align-items:center;
|
|
26
27
|
box-sizing:border-box;
|
|
27
28
|
width:100%;
|
|
@@ -15,16 +15,12 @@ const react_1 = require("react");
|
|
|
15
15
|
const locale_1 = require("../../../../locale");
|
|
16
16
|
const shouldBeOpenedInNewTab_1 = require("../../../../utils/shouldBeOpenedInNewTab");
|
|
17
17
|
const utils_2 = require("../../utils");
|
|
18
|
-
const MountAnimation_1 = require("../MountAnimation");
|
|
19
|
-
const cardsContext_1 = require("./cardsContext");
|
|
20
18
|
const constants_1 = require("./constants");
|
|
21
19
|
const ContentToolbar_1 = require("./helperComponents/ContentToolbar");
|
|
22
20
|
const SortableGroup_1 = require("./helperComponents/SortableGroup");
|
|
23
21
|
const useContentSegmentsSortable_1 = require("./hooks/useContentSegmentsSortable");
|
|
24
|
-
const useProgressiveCount_1 = require("./hooks/useProgressiveCount");
|
|
25
22
|
const useSegmentDnd_1 = require("./hooks/useSegmentDnd");
|
|
26
23
|
const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
|
|
27
|
-
const noopFavoriteChange = () => { };
|
|
28
24
|
function Content({ searchValue, search, rightTop, segments, searchGroups = [], segmentPrefs, activeSegmentId, onActiveSegmentChange, onSegmentOrderChange, onSegmentExpandedChange, onSegmentServiceClick, className, footer, favorite, isMobile, preferences, loading, }) {
|
|
29
25
|
const { t } = locale_1.headerLocale.useTranslations();
|
|
30
26
|
const showDescription = (0, react_1.useDeferredValue)(preferences?.showDescription.value ?? false);
|
|
@@ -37,8 +33,7 @@ function Content({ searchValue, search, rightTop, segments, searchGroups = [], s
|
|
|
37
33
|
});
|
|
38
34
|
const isSearching = Boolean(searchValue);
|
|
39
35
|
const enableServiceDrag = Boolean(favorite) && !isMobile && !isSearching;
|
|
40
|
-
|
|
41
|
-
const handleLinkClick = (0, utils_1.useEventHandler)((service, e) => {
|
|
36
|
+
const handleLinkClick = (0, react_1.useCallback)((service, e) => {
|
|
42
37
|
if (service.disabled) {
|
|
43
38
|
e?.preventDefault();
|
|
44
39
|
return;
|
|
@@ -48,11 +43,7 @@ function Content({ searchValue, search, rightTop, segments, searchGroups = [], s
|
|
|
48
43
|
}
|
|
49
44
|
onSegmentServiceClick?.(service, e);
|
|
50
45
|
service.onClick?.(e);
|
|
51
|
-
});
|
|
52
|
-
const handleFavoriteChange = (0, utils_1.useEventHandler)((productId) => favorite ? favorite.onChange(productId) : noopFavoriteChange);
|
|
53
|
-
const favoriteValue = favorite?.value;
|
|
54
|
-
const favoriteIds = (0, react_1.useMemo)(() => (favoriteValue ? new Set(favoriteValue) : undefined), [favoriteValue]);
|
|
55
|
-
const showGroupsColors = preferences?.showGroupsColors?.value;
|
|
46
|
+
}, [onSegmentServiceClick]);
|
|
56
47
|
const { orderedGroups, expandedIds, onExpandedChange, handleDragEnd: handleSortableDragEnd, } = (0, useContentSegmentsSortable_1.useContentSegmentsSortable)({
|
|
57
48
|
segments,
|
|
58
49
|
activeSegmentId: segmentId,
|
|
@@ -70,50 +61,35 @@ function Content({ searchValue, search, rightTop, segments, searchGroups = [], s
|
|
|
70
61
|
expandedIds,
|
|
71
62
|
onSortableDragEnd: handleSortableDragEnd,
|
|
72
63
|
showDescription,
|
|
73
|
-
showGroupsColors,
|
|
74
|
-
|
|
75
|
-
onFavoriteChange: handleFavoriteChange,
|
|
64
|
+
showGroupsColors: preferences?.showGroupsColors?.value,
|
|
65
|
+
favorite,
|
|
76
66
|
});
|
|
77
|
-
|
|
78
|
-
const renderedGroupsCount = (0, useProgressiveCount_1.useProgressiveCount)(visibleGroups.length, `${segmentId}|${isSearching}`, !loading);
|
|
79
|
-
const renderedGroups = (0, react_1.useMemo)(() => (renderedGroupsCount < visibleGroups.length ? visibleGroups.slice(0, renderedGroupsCount) : visibleGroups), [visibleGroups, renderedGroupsCount]);
|
|
80
|
-
const expandedIdsSet = (0, react_1.useMemo)(() => new Set(expandedIds), [expandedIds]);
|
|
81
|
-
const visibleGroupIds = (0, react_1.useMemo)(() => visibleGroups.map(({ id }) => id), [visibleGroups]);
|
|
82
|
-
const allGroupsExpanded = visibleGroups.length > 0 && visibleGroupIds.every(id => expandedIdsSet.has(id));
|
|
67
|
+
const allGroupsExpanded = visibleGroups.length > 0 && visibleGroups.every(({ id }) => expandedIds.includes(id));
|
|
83
68
|
const handleToggleAllGroupsExpanded = (0, react_1.useCallback)(() => {
|
|
69
|
+
const visibleIds = visibleGroups.map(({ id }) => id);
|
|
84
70
|
if (allGroupsExpanded) {
|
|
85
|
-
|
|
86
|
-
onExpandedChange(expandedIds.filter(id => !visibleIdsSet.has(id)));
|
|
71
|
+
onExpandedChange(expandedIds.filter(id => !visibleIds.includes(id)));
|
|
87
72
|
return;
|
|
88
73
|
}
|
|
89
|
-
onExpandedChange([...new Set([...expandedIds, ...
|
|
90
|
-
}, [allGroupsExpanded, expandedIds, onExpandedChange,
|
|
91
|
-
const cardsContext = (0, react_1.useMemo)(() => ({
|
|
92
|
-
showDescription,
|
|
93
|
-
isMobile,
|
|
94
|
-
dragEnabled: enableServiceDrag,
|
|
95
|
-
favoriteIds,
|
|
96
|
-
onFavoriteChange: favoriteIds ? handleFavoriteChange : undefined,
|
|
97
|
-
onServiceClick: handleLinkClick,
|
|
98
|
-
}), [showDescription, isMobile, enableServiceDrag, favoriteIds, handleFavoriteChange, handleLinkClick]);
|
|
74
|
+
onExpandedChange([...new Set([...expandedIds, ...visibleIds])]);
|
|
75
|
+
}, [allGroupsExpanded, expandedIds, onExpandedChange, visibleGroups]);
|
|
99
76
|
const segmentItems = (0, react_1.useMemo)(() => segments?.map(segment => ({
|
|
100
77
|
value: segment.id,
|
|
101
78
|
label: segment.label,
|
|
102
79
|
icon: segment.icon,
|
|
103
80
|
})), [segments]);
|
|
104
81
|
const hasCards = visibleGroups.length > 0;
|
|
105
|
-
const mountAnimationType = isMobile ? undefined : 'fade-slide-up-right';
|
|
106
82
|
const cards = (() => {
|
|
107
83
|
if (loading) {
|
|
108
84
|
return Array.from({ length: 5 }).map((_, index) => (0, jsx_runtime_1.jsx)(SortableGroup_1.SortableGroupSkeleton, { isMobile: isMobile }, index));
|
|
109
85
|
}
|
|
110
86
|
if (hasCards) {
|
|
111
|
-
return ((0, jsx_runtime_1.jsx)(sortable_1.SortableContext, { items:
|
|
87
|
+
return ((0, jsx_runtime_1.jsx)(sortable_1.SortableContext, { items: visibleGroups.map(({ id }) => id), strategy: sortable_1.verticalListSortingStrategy, children: (0, jsx_runtime_1.jsx)(accordion_1.Accordion, { selectionMode: 'multiple', expanded: expandedIds, onExpandedChange: onExpandedChange, children: visibleGroups.map(({ id, label, icon, items, favoritesEnabled, blockColor, highlight }) => ((0, jsx_runtime_1.jsx)(SortableGroup_1.SortableGroup, { id: id, icon: icon, label: label, items: items, isExpanded: expandedIds.includes(id), blockColor: (0, utils_2.resolveGroupBlockColor)(blockColor, preferences?.showGroupsColors?.value), showDescription: showDescription, isMobile: isMobile, enableServiceDrag: enableServiceDrag, favorite: favorite, groupFavoritesEnabled: favoritesEnabled, onServiceClick: handleLinkClick, highlight: highlight }, id))) }) }));
|
|
112
88
|
}
|
|
113
89
|
return ((0, jsx_runtime_1.jsx)(info_block_1.InfoBlock, { size: 'm', icon: {
|
|
114
90
|
icon: isSearching ? system_1.SearchSVG : system_1.CrossSVG,
|
|
115
91
|
appearance: 'neutral',
|
|
116
92
|
}, content: isSearching ? t('noDataFound') : t('noData'), "data-test-id": isSearching ? constants_1.TEST_IDS.noDataFound : constants_1.TEST_IDS.noData, "data-mobile": isMobile || undefined, className: styles_module_scss_1.default.noData }));
|
|
117
93
|
})();
|
|
118
|
-
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [search, (0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(styles_module_scss_1.default.content, className), "data-
|
|
94
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [search, (0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(styles_module_scss_1.default.content, className), "data-empty": (!loading && !hasCards) || undefined, children: [!isSearching && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ContentToolbar_1.ContentToolbar, { segment: segmentId, onSegmentChange: setSegmentId, segmentItems: segmentItems, allGroupsExpanded: allGroupsExpanded, onToggleAllGroupsExpanded: handleToggleAllGroupsExpanded, preferences: preferences, isMobile: isMobile, loading: loading }), rightTop] })), cards, footer] })] }));
|
|
119
95
|
}
|
|
@@ -28,7 +28,7 @@ function ContentToolbar({ segment, onSegmentChange, segmentItems, allGroupsExpan
|
|
|
28
28
|
(0, react_1.startTransition)(() => preferences?.showDescription?.onChange(value));
|
|
29
29
|
};
|
|
30
30
|
const hasSegmentItems = segmentItems && segmentItems?.length > 0;
|
|
31
|
-
return ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.root, "data-test-id": constants_1.TEST_IDS.toolbar, children: [hasSegmentItems && ((0, jsx_runtime_1.jsx)(skeleton_1.WithSkeleton, { loading: loading, skeleton: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.segmentControlSkeleton, "data-test-id": constants_1.TEST_IDS.segmentControl, "data-mobile": isMobile || undefined, children: (0, jsx_runtime_1.jsx)(skeleton_1.Skeleton, { className: styles_module_scss_1.default.segmentControlSkeletonBlock }) }), children: (0, jsx_runtime_1.jsx)(segment_control_1.SegmentControl, { size: 'm', outline: true, value: segment, onChange: onSegmentChange, className: styles_module_scss_1.default.segmentControl, "data-test-id": constants_1.TEST_IDS.segmentControl, items: segmentItems, width: isMobile ? 'full' : 'auto' }) })), (preferences || !isMobile) && !loading && ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.actions, children: [preferences && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(HeaderButton_1.HeaderButton, { icon: (0, jsx_runtime_1.jsx)(system_1.SettingsSVG, {}), "aria-label": t('menuSettingsTitle'), "data-test-id": constants_1.TEST_IDS.settingsButton, onClick: openModal, tooltip: { tip: t('menuSettingsTitle') } }), (0, jsx_runtime_1.jsx)(modal_1.Modal, { open: open, onClose: closeModal, title: t('menuSettingsTitle'), "data-test-id": constants_1.TEST_IDS.settingsModal, cancelButton: {
|
|
31
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.root, "data-mobile": isMobile || undefined, "data-test-id": constants_1.TEST_IDS.toolbar, children: [hasSegmentItems && ((0, jsx_runtime_1.jsx)(skeleton_1.WithSkeleton, { loading: loading, skeleton: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.segmentControlSkeleton, "data-test-id": constants_1.TEST_IDS.segmentControl, "data-mobile": isMobile || undefined, children: (0, jsx_runtime_1.jsx)(skeleton_1.Skeleton, { className: styles_module_scss_1.default.segmentControlSkeletonBlock }) }), children: (0, jsx_runtime_1.jsx)(segment_control_1.SegmentControl, { size: 'm', outline: true, value: segment, onChange: onSegmentChange, className: styles_module_scss_1.default.segmentControl, "data-test-id": constants_1.TEST_IDS.segmentControl, items: segmentItems, width: isMobile ? 'full' : 'auto' }) })), (preferences || !isMobile) && !loading && ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.actions, children: [preferences && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(HeaderButton_1.HeaderButton, { icon: (0, jsx_runtime_1.jsx)(system_1.SettingsSVG, {}), "aria-label": t('menuSettingsTitle'), "data-test-id": constants_1.TEST_IDS.settingsButton, onClick: openModal, tooltip: { tip: t('menuSettingsTitle') } }), (0, jsx_runtime_1.jsx)(modal_1.Modal, { open: open, onClose: closeModal, title: t('menuSettingsTitle'), "data-test-id": constants_1.TEST_IDS.settingsModal, cancelButton: {
|
|
32
32
|
label: t('close'),
|
|
33
33
|
onClick: closeModal,
|
|
34
34
|
}, content: (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.settingsContent, children: [preferences.showGroupsColors && ((0, jsx_runtime_1.jsx)(uikit_product_switch_row_1.SwitchRow, { title: t('menuSettingsShowGroupsColors'), checked: preferences.showGroupsColors.value, onChange: preferences.showGroupsColors.onChange, "data-test-id": constants_1.TEST_IDS.settingsShowGroupsColorsSwitch })), (0, jsx_runtime_1.jsx)(uikit_product_switch_row_1.SwitchRow, { title: t('menuSettingsShowDescription'), checked: preferences.showDescription.value, onChange: handleShowDescriptionChange, "data-test-id": constants_1.TEST_IDS.settingsShowDescriptionSwitch })] }) })] })), !isMobile && ((0, jsx_runtime_1.jsx)(HeaderButton_1.HeaderButton, { icon: allGroupsExpanded ? (0, jsx_runtime_1.jsx)(system_1.CollapseVerticalSVG, {}) : (0, jsx_runtime_1.jsx)(system_1.ExpandVerticalSVG, {}), "aria-label": allGroupsExpanded ? t('contentCollapseAllGroups') : t('contentExpandAllGroups'), "data-test-id": constants_1.TEST_IDS.toggleAllGroups, onClick: onToggleAllGroupsExpanded, tooltip: { tip: allGroupsExpanded ? t('contentCollapseAllGroups') : t('contentExpandAllGroups') } }))] }))] }));
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
gap:var(--sn-primitive-dimension-8, 8px);
|
|
4
4
|
align-items:center;
|
|
5
5
|
justify-content:space-between;
|
|
6
|
+
box-sizing:border-box;
|
|
6
7
|
width:100%;
|
|
7
8
|
min-width:0;
|
|
8
9
|
min-height:var(--sn-primitive-dimension-32, 32px);
|
|
@@ -16,7 +17,7 @@
|
|
|
16
17
|
display:flex;
|
|
17
18
|
flex-shrink:0;
|
|
18
19
|
width:264px;
|
|
19
|
-
height:var(--sn-segmentControl-anatomy-size-m-segment-container-height, var(--sn-density-size-m, var(--sn-primitive-dimension-
|
|
20
|
+
height:var(--sn-segmentControl-anatomy-size-m-segment-container-height, var(--sn-density-size-m, var(--sn-density-scale-100-m, var(--sn-platform-comfort-scale-100-m, var(--sn-primitive-dimension-40, 40px)))));
|
|
20
21
|
}
|
|
21
22
|
.segmentControlSkeleton[data-mobile]{
|
|
22
23
|
width:100%;
|
|
@@ -1,24 +1,12 @@
|
|
|
1
1
|
import { LinksGroup, LinksGroupBlockColor, LinksGroupTitle } from '../../../../types';
|
|
2
|
-
import {
|
|
3
|
-
export type SortableGroupProps =
|
|
2
|
+
import { SortableGroupCardsProps } from './components';
|
|
3
|
+
export type SortableGroupProps = Omit<SortableGroupCardsProps, 'groupId'> & Pick<LinksGroup, 'icon'> & {
|
|
4
4
|
id: string;
|
|
5
5
|
label: LinksGroupTitle;
|
|
6
6
|
isExpanded?: boolean;
|
|
7
|
-
isMobile?: boolean;
|
|
8
|
-
/** Группу можно перетаскивать (иначе рендерится без `useSortable`). */
|
|
9
|
-
enableServiceDrag?: boolean;
|
|
10
7
|
blockColor?: LinksGroupBlockColor;
|
|
11
8
|
highlight?: boolean;
|
|
12
9
|
groupFavoritesEnabled?: boolean;
|
|
13
|
-
/** Группа появляется с fade-in при монтировании (на desktop; на mobile анимирует контейнер). */
|
|
14
|
-
appear?: boolean;
|
|
15
10
|
};
|
|
16
|
-
declare function
|
|
17
|
-
export declare
|
|
18
|
-
export type SortableGroupDragPreviewProps = Omit<SortableGroupProps, 'enableServiceDrag'> & Pick<CardsContextValue, 'showDescription' | 'favoriteIds' | 'onFavoriteChange'>;
|
|
19
|
-
/**
|
|
20
|
-
* Превью группы в `DragOverlay`. Рендерится вне `Content`, поэтому свой `CardsContext` собирает
|
|
21
|
-
* сам: без drag-обвязки карточек и без обработчика клика.
|
|
22
|
-
*/
|
|
23
|
-
export declare function SortableGroupDragPreview({ id, label, items, isExpanded, showDescription, isMobile, favoriteIds, onFavoriteChange, groupFavoritesEnabled, blockColor, highlight, }: SortableGroupDragPreviewProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
-
export {};
|
|
11
|
+
export declare function SortableGroup({ id, icon, label, items, isExpanded, showDescription, isMobile, enableServiceDrag, favorite, groupFavoritesEnabled, onServiceClick, blockColor, highlight, }: SortableGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare function SortableGroupDragPreview({ id, label, items, isExpanded, showDescription, isMobile, favorite, groupFavoritesEnabled, blockColor, highlight, }: Omit<SortableGroupProps, 'enableServiceDrag'>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.SortableGroup =
|
|
6
|
+
exports.SortableGroup = SortableGroup;
|
|
7
7
|
exports.SortableGroupDragPreview = SortableGroupDragPreview;
|
|
8
8
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
9
9
|
const sortable_1 = require("@dnd-kit/sortable");
|
|
@@ -11,27 +11,14 @@ const utilities_1 = require("@dnd-kit/utilities");
|
|
|
11
11
|
const accordion_1 = require("@cloud-ru/ds-accordion");
|
|
12
12
|
const drag_and_drop_1 = require("@cloud-ru/ds-drag-and-drop");
|
|
13
13
|
const theme_1 = require("@cloud-ru/ds-theme");
|
|
14
|
-
const react_1 = require("react");
|
|
15
|
-
const cardsContext_1 = require("../../cardsContext");
|
|
16
14
|
const constants_1 = require("../../constants");
|
|
17
15
|
const components_1 = require("./components");
|
|
18
16
|
const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
|
|
19
|
-
function
|
|
20
|
-
const {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const [isAppearing, setIsAppearing] = (0, react_1.useState)(Boolean(appear));
|
|
25
|
-
const handleAnimationEnd = (0, react_1.useCallback)((event) => {
|
|
26
|
-
// `animationend` всплывает от вложенных анимаций — нужна только своя.
|
|
27
|
-
if (event.target === event.currentTarget) {
|
|
28
|
-
setIsAppearing(false);
|
|
29
|
-
}
|
|
30
|
-
}, []);
|
|
31
|
-
return ((0, jsx_runtime_1.jsxs)(drag_and_drop_1.DragGhost, { innerRef: setNodeRef, id: id, style: style, className: styles_module_scss_1.default.group, dragging: isDragging, mode: drag_and_drop_1.DRAG_MODE.Dynamic, "data-appear": isAppearing || undefined, onAnimationEnd: handleAnimationEnd, "data-test-id": `${constants_1.TEST_IDS.groupCard}-${id}`, children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decoration, "data-color-scheme": colorScheme, "data-is-highlighted": highlight || undefined, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decorationBackground, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.colorMarker, "data-block-color": blockColor }) }) }), (0, jsx_runtime_1.jsx)(accordion_1.Accordion.CollapseBlockTertiary, { id: id, showChevron: false, afterTitle: (0, jsx_runtime_1.jsx)(components_1.SortableGroupHeader, { label: label, icon: icon, isExpanded: isExpanded, enableServiceDrag: enableServiceDrag, attributes: attributes, listeners: listeners, isMobile: isMobile }), children: (0, jsx_runtime_1.jsx)(components_1.SortableGroupCards, { groupId: id, items: items, groupFavoritesEnabled: groupFavoritesEnabled }) })] }));
|
|
32
|
-
}
|
|
33
|
-
function DraggableGroup(props) {
|
|
34
|
-
const { attributes, listeners, setNodeRef, transform, transition, isDragging } = (0, sortable_1.useSortable)({ id: props.id });
|
|
17
|
+
function SortableGroup({ id, icon, label, items, isExpanded, showDescription, isMobile, enableServiceDrag, favorite, groupFavoritesEnabled = true, onServiceClick, blockColor, highlight, }) {
|
|
18
|
+
const { attributes, listeners, setNodeRef, transform, transition, isDragging } = (0, sortable_1.useSortable)({
|
|
19
|
+
id,
|
|
20
|
+
disabled: !enableServiceDrag,
|
|
21
|
+
});
|
|
35
22
|
const style = {
|
|
36
23
|
// CSS.Transform добавляет scaleX/scaleY, из-за чего перетаскиваемая группа "растягивается"
|
|
37
24
|
// при пересечении с соседней группой другой высоты. CSS.Translate использует только сдвиг.
|
|
@@ -40,25 +27,10 @@ function DraggableGroup(props) {
|
|
|
40
27
|
transform: transform ? utilities_1.CSS.Translate.toString(transform) : undefined,
|
|
41
28
|
transition,
|
|
42
29
|
};
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
function SortableGroupBase(props) {
|
|
46
|
-
// Без drag (mobile, поиск, нет избранного) группа не регистрируется в `SortableContext`.
|
|
47
|
-
return props.enableServiceDrag ? (0, jsx_runtime_1.jsx)(DraggableGroup, { ...props }) : (0, jsx_runtime_1.jsx)(GroupView, { ...props });
|
|
30
|
+
const { colorScheme } = (0, theme_1.useThemeAppearance)().appearance;
|
|
31
|
+
return ((0, jsx_runtime_1.jsxs)(drag_and_drop_1.DragGhost, { innerRef: setNodeRef, id: id, style: style, className: styles_module_scss_1.default.group, dragging: isDragging, mode: drag_and_drop_1.DRAG_MODE.Dynamic, "data-test-id": `${constants_1.TEST_IDS.groupCard}-${id}`, children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decoration, "data-color-scheme": colorScheme, "data-is-highlighted": highlight || undefined, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decorationBackground, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.colorMarker, "data-block-color": blockColor }) }) }), (0, jsx_runtime_1.jsx)(accordion_1.Accordion.CollapseBlockTertiary, { id: id, showChevron: false, afterTitle: (0, jsx_runtime_1.jsx)(components_1.SortableGroupHeader, { label: label, icon: icon, isExpanded: isExpanded, enableServiceDrag: enableServiceDrag, attributes: attributes, listeners: listeners, isMobile: isMobile }), children: (0, jsx_runtime_1.jsx)(components_1.SortableGroupCards, { groupId: id, items: items, showDescription: showDescription, isMobile: isMobile, enableServiceDrag: enableServiceDrag, favorite: favorite, groupFavoritesEnabled: groupFavoritesEnabled, onServiceClick: onServiceClick }) })] }));
|
|
48
32
|
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Превью группы в `DragOverlay`. Рендерится вне `Content`, поэтому свой `CardsContext` собирает
|
|
52
|
-
* сам: без drag-обвязки карточек и без обработчика клика.
|
|
53
|
-
*/
|
|
54
|
-
function SortableGroupDragPreview({ id, label, items, isExpanded, showDescription, isMobile, favoriteIds, onFavoriteChange, groupFavoritesEnabled, blockColor, highlight, }) {
|
|
33
|
+
function SortableGroupDragPreview({ id, label, items, isExpanded, showDescription, isMobile, favorite, groupFavoritesEnabled, blockColor, highlight, }) {
|
|
55
34
|
const { colorScheme } = (0, theme_1.useThemeAppearance)().appearance;
|
|
56
|
-
|
|
57
|
-
showDescription,
|
|
58
|
-
isMobile,
|
|
59
|
-
dragEnabled: false,
|
|
60
|
-
favoriteIds,
|
|
61
|
-
onFavoriteChange,
|
|
62
|
-
};
|
|
63
|
-
return ((0, jsx_runtime_1.jsx)(drag_and_drop_1.DragPreview, { className: styles_module_scss_1.default.groupDragPreview, children: (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.group, "data-drag-preview": true, children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decoration, "data-color-scheme": colorScheme, "data-is-highlighted": highlight || undefined, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decorationBackground, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.colorMarker, "data-block-color": blockColor }) }) }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.groupDragPreviewHeader, children: (0, jsx_runtime_1.jsx)(components_1.SortableGroupHeader, { label: label, isExpanded: isExpanded, isMobile: isMobile, enableServiceDrag: true }) }), isExpanded && ((0, jsx_runtime_1.jsx)(cardsContext_1.CardsContext.Provider, { value: cardsContext, children: (0, jsx_runtime_1.jsx)(components_1.SortableGroupCards, { groupId: id, items: items, groupFavoritesEnabled: groupFavoritesEnabled }) }))] }) }));
|
|
35
|
+
return ((0, jsx_runtime_1.jsx)(drag_and_drop_1.DragPreview, { className: styles_module_scss_1.default.groupDragPreview, children: (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.group, "data-drag-preview": true, children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decoration, "data-color-scheme": colorScheme, "data-is-highlighted": highlight || undefined, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decorationBackground, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.colorMarker, "data-block-color": blockColor }) }) }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.groupDragPreviewHeader, children: (0, jsx_runtime_1.jsx)(components_1.SortableGroupHeader, { label: label, isExpanded: isExpanded, isMobile: isMobile, enableServiceDrag: true }) }), isExpanded && ((0, jsx_runtime_1.jsx)(components_1.SortableGroupCards, { groupId: id, items: items, showDescription: showDescription, isMobile: isMobile, favorite: favorite, groupFavoritesEnabled: groupFavoritesEnabled }))] }) }));
|
|
64
36
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { InnerLink } from '../../../../../types';
|
|
2
|
-
|
|
2
|
+
import { ServiceCardProps } from '../../../../ServiceCard';
|
|
3
|
+
export type SortableGroupCardsProps = Pick<ServiceCardProps, 'showDescription' | 'isMobile' | 'favorite' | 'onServiceClick'> & {
|
|
3
4
|
groupId: string;
|
|
4
5
|
items: InnerLink[];
|
|
6
|
+
enableServiceDrag?: boolean;
|
|
5
7
|
groupFavoritesEnabled?: boolean;
|
|
6
8
|
};
|
|
7
|
-
declare function
|
|
8
|
-
export declare const SortableGroupCards: import("react").MemoExoticComponent<typeof SortableGroupCardsBase>;
|
|
9
|
-
export {};
|
|
9
|
+
export declare function SortableGroupCards({ groupId, items, showDescription, isMobile, enableServiceDrag, favorite, groupFavoritesEnabled, onServiceClick, }: SortableGroupCardsProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -3,26 +3,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.SortableGroupCards =
|
|
6
|
+
exports.SortableGroupCards = SortableGroupCards;
|
|
7
7
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
-
const react_1 = require("react");
|
|
9
8
|
const innerLink_1 = require("../../../../../utils/innerLink");
|
|
10
9
|
const ServiceCard_1 = require("../../../../ServiceCard");
|
|
11
|
-
const cardsContext_1 = require("../../../cardsContext");
|
|
12
10
|
const styles_module_scss_1 = __importDefault(require('../styles.module.css'));
|
|
13
11
|
const SubCategory_1 = require("./SubCategory");
|
|
14
|
-
function
|
|
15
|
-
|
|
16
|
-
const cardFavoriteChange = favoriteIds ? onFavoriteChange : undefined;
|
|
17
|
-
return ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.groupBody, "data-mobile": isMobile || undefined, children: items.map(service => {
|
|
12
|
+
function SortableGroupCards({ groupId, items, showDescription, isMobile, enableServiceDrag, favorite, groupFavoritesEnabled, onServiceClick, }) {
|
|
13
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.groupBody, "data-mobile": isMobile || undefined, "data-show-description": showDescription || undefined, children: items.map(service => {
|
|
18
14
|
if (service.hidden) {
|
|
19
15
|
return null;
|
|
20
16
|
}
|
|
21
17
|
const key = String(groupId) + service.id;
|
|
22
18
|
if ((0, innerLink_1.isSubCategoryCard)(service)) {
|
|
23
|
-
return ((0, jsx_runtime_1.jsx)(SubCategory_1.SubCategory, { groupId: groupId, service: service, groupFavoritesEnabled: groupFavoritesEnabled }, key));
|
|
19
|
+
return ((0, jsx_runtime_1.jsx)(SubCategory_1.SubCategory, { groupId: groupId, service: service, showDescription: showDescription, isMobile: isMobile, dragDisabled: !enableServiceDrag, favorite: favorite, groupFavoritesEnabled: groupFavoritesEnabled, onServiceClick: onServiceClick }, key));
|
|
24
20
|
}
|
|
25
|
-
return ((0, jsx_runtime_1.jsx)(ServiceCard_1.
|
|
21
|
+
return ((0, jsx_runtime_1.jsx)(ServiceCard_1.DraggableServiceCard, { groupId: groupId, service: service, favorite: favorite, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescription, dragDisabled: !enableServiceDrag }, key));
|
|
26
22
|
}) }));
|
|
27
23
|
}
|
|
28
|
-
exports.SortableGroupCards = (0, react_1.memo)(SortableGroupCardsBase);
|
|
@@ -6,6 +6,4 @@ export type SortableGroupHeaderProps = Pick<LinksGroup, 'icon'> & {
|
|
|
6
6
|
enableServiceDrag?: boolean;
|
|
7
7
|
isMobile?: boolean;
|
|
8
8
|
} & SortableGroupDragHandleProps;
|
|
9
|
-
declare function
|
|
10
|
-
export declare const SortableGroupHeader: import("react").MemoExoticComponent<typeof SortableGroupHeaderBase>;
|
|
11
|
-
export {};
|
|
9
|
+
export declare function SortableGroupHeader({ label, icon, isExpanded, enableServiceDrag, attributes, listeners, isMobile, }: SortableGroupHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -3,21 +3,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.SortableGroupHeader =
|
|
6
|
+
exports.SortableGroupHeader = SortableGroupHeader;
|
|
7
7
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
8
|
const button_1 = require("@cloud-ru/ds-button");
|
|
9
9
|
const system_1 = require("@cloud-ru/ds-icons/interface/system");
|
|
10
10
|
const typography_1 = require("@cloud-ru/ds-typography");
|
|
11
11
|
const uikit_product_title_clickable_1 = require("@cloud-ru/ds-uikit-product-title-clickable");
|
|
12
|
-
const react_1 = require("react");
|
|
13
12
|
const utils_1 = require("../../../../../utils");
|
|
14
13
|
const styles_module_scss_1 = __importDefault(require('../styles.module.css'));
|
|
15
14
|
const SortableGroupDragHandle_1 = require("./SortableGroupDragHandle");
|
|
16
|
-
function
|
|
17
|
-
const handleLabelClick =
|
|
15
|
+
function SortableGroupHeader({ label, icon, isExpanded, enableServiceDrag, attributes, listeners, isMobile, }) {
|
|
16
|
+
const handleLabelClick = e => {
|
|
18
17
|
e.stopPropagation();
|
|
19
18
|
label?.onClick?.(e);
|
|
20
|
-
}
|
|
19
|
+
};
|
|
21
20
|
return ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.header, "data-expanded": isExpanded || undefined, children: [(0, jsx_runtime_1.jsx)(typography_1.Typography, { variant: 'title', size: 'm', className: styles_module_scss_1.default.headerTitle, "data-test-id": 'header__drawer-menu__group-card-title', children: label.onClick || label.href ? ((0, jsx_runtime_1.jsx)(uikit_product_title_clickable_1.TitleClickable, { ...(label.href ? { as: 'a', href: label.href } : { as: 'div' }), onClick: handleLabelClick, title: label.text, icon: (0, utils_1.getLinkEmblem)({ icon }) })) : (label.text) }), (enableServiceDrag || !isMobile) && ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.headerActions, "data-always-visible": isMobile || undefined, children: [enableServiceDrag && (0, jsx_runtime_1.jsx)(SortableGroupDragHandle_1.SortableGroupDragHandle, { attributes: attributes, listeners: listeners }), !isMobile && ((0, jsx_runtime_1.jsx)(button_1.Button, { view: 'elevated', appearance: 'neutral', size: 's', icon: isExpanded ? (0, jsx_runtime_1.jsx)(system_1.ChevronUpSVG, {}) : (0, jsx_runtime_1.jsx)(system_1.ChevronDownSVG, {}), "data-test-id": 'header__drawer-menu__group-card-collapse' }))] }))] }));
|
|
22
21
|
}
|
|
23
|
-
exports.SortableGroupHeader = (0, react_1.memo)(SortableGroupHeaderBase);
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export type SubCategoryProps = {
|
|
1
|
+
import { ServiceCardProps } from '../../../../../ServiceCard';
|
|
2
|
+
export type SubCategoryProps = Pick<ServiceCardProps, 'service' | 'onServiceClick' | 'favorite' | 'showDescription' | 'isMobile'> & {
|
|
3
3
|
groupId: string;
|
|
4
|
-
|
|
4
|
+
dragDisabled?: boolean;
|
|
5
5
|
groupFavoritesEnabled?: boolean;
|
|
6
6
|
};
|
|
7
|
-
declare function
|
|
8
|
-
export declare const SubCategory: import("react").MemoExoticComponent<typeof SubCategoryBase>;
|
|
9
|
-
export {};
|
|
7
|
+
export declare function SubCategory({ groupId, service, showDescription, isMobile, dragDisabled, favorite, onServiceClick, groupFavoritesEnabled, }: SubCategoryProps): import("react/jsx-runtime").JSX.Element;
|