@cloud-ru/ds-uikit-product-header 1.5.1 → 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.
Files changed (95) hide show
  1. package/README.md +0 -1
  2. package/dist/cjs/components/HeaderButton/HeaderButton.js +1 -3
  3. package/dist/cjs/components/HeaderLayout/HeaderLayout.js +1 -12
  4. package/dist/cjs/components/HeaderLayout/styles.module.css +8 -1
  5. package/dist/cjs/components/Logo/styles.module.css +1 -0
  6. package/dist/cjs/components/MainMenu/helperComponents/Banners/MenuBanner.js +1 -3
  7. package/dist/cjs/components/MainMenu/helperComponents/Banners/styles.module.css +1 -0
  8. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.js +1 -1
  9. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/styles.module.css +1 -0
  10. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.js +1 -1
  11. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.js +2 -2
  12. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.css +9 -2
  13. package/dist/cjs/components/MainMenu/helperComponents/Favorites/Favorites.js +3 -1
  14. package/dist/cjs/components/MainMenu/helperComponents/Favorites/styles.module.css +5 -2
  15. package/dist/cjs/components/MainMenu/helperComponents/MenuDesktop/styles.module.css +2 -1
  16. package/dist/cjs/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.d.ts +2 -1
  17. package/dist/cjs/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.js +2 -2
  18. package/dist/cjs/components/MainMenu/helperComponents/MenuHeaderBrand/styles.module.css +3 -0
  19. package/dist/cjs/components/MainMenu/helperComponents/MenuMobile/MenuMobile.js +1 -6
  20. package/dist/cjs/components/MainMenu/helperComponents/MenuMobile/styles.module.css +1 -5
  21. package/dist/cjs/components/MainMenu/helperComponents/MountAnimation/styles.module.css +6 -6
  22. package/dist/cjs/components/MainMenu/helperComponents/Search/styles.module.css +3 -1
  23. package/dist/cjs/components/PathBreadcrumbs/PathBreadcrumbs.d.ts +1 -2
  24. package/dist/cjs/components/PathBreadcrumbs/PathBreadcrumbs.js +2 -2
  25. package/dist/cjs/components/PlatformLogo/styles.module.css +3 -1
  26. package/dist/cjs/components/UserMenu/UserMenu.js +5 -1
  27. package/dist/cjs/components/UserMenu/styles.module.css +1 -1
  28. package/dist/cjs/hooks/useDesktopComfortClassName.d.ts +2 -0
  29. package/dist/cjs/hooks/useDesktopComfortClassName.js +11 -0
  30. package/dist/cjs/hooks/useMobileLayout.js +1 -0
  31. package/dist/cjs/locale/index.d.ts +8 -8
  32. package/dist/cjs/locale/index.js +4 -4
  33. package/dist/cjs/style.css +44 -20
  34. package/dist/esm/components/HeaderButton/HeaderButton.js +1 -3
  35. package/dist/esm/components/HeaderLayout/HeaderLayout.js +1 -12
  36. package/dist/esm/components/HeaderLayout/styles.module.css +8 -1
  37. package/dist/esm/components/Logo/styles.module.css +1 -0
  38. package/dist/esm/components/MainMenu/helperComponents/Banners/MenuBanner.js +1 -3
  39. package/dist/esm/components/MainMenu/helperComponents/Banners/styles.module.css +1 -0
  40. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.js +1 -1
  41. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/styles.module.css +1 -0
  42. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.js +1 -1
  43. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.js +2 -2
  44. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.css +9 -2
  45. package/dist/esm/components/MainMenu/helperComponents/Favorites/Favorites.js +3 -1
  46. package/dist/esm/components/MainMenu/helperComponents/Favorites/styles.module.css +5 -2
  47. package/dist/esm/components/MainMenu/helperComponents/MenuDesktop/styles.module.css +2 -1
  48. package/dist/esm/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.d.ts +2 -1
  49. package/dist/esm/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.js +2 -2
  50. package/dist/esm/components/MainMenu/helperComponents/MenuHeaderBrand/styles.module.css +3 -0
  51. package/dist/esm/components/MainMenu/helperComponents/MenuMobile/MenuMobile.js +1 -6
  52. package/dist/esm/components/MainMenu/helperComponents/MenuMobile/styles.module.css +1 -5
  53. package/dist/esm/components/MainMenu/helperComponents/MountAnimation/styles.module.css +6 -6
  54. package/dist/esm/components/MainMenu/helperComponents/Search/styles.module.css +3 -1
  55. package/dist/esm/components/PathBreadcrumbs/PathBreadcrumbs.d.ts +1 -2
  56. package/dist/esm/components/PathBreadcrumbs/PathBreadcrumbs.js +2 -2
  57. package/dist/esm/components/PlatformLogo/styles.module.css +3 -1
  58. package/dist/esm/components/UserMenu/UserMenu.js +5 -1
  59. package/dist/esm/components/UserMenu/styles.module.css +1 -1
  60. package/dist/esm/hooks/useDesktopComfortClassName.d.ts +2 -0
  61. package/dist/esm/hooks/useDesktopComfortClassName.js +8 -0
  62. package/dist/esm/hooks/useMobileLayout.js +1 -0
  63. package/dist/esm/locale/index.d.ts +8 -8
  64. package/dist/esm/locale/index.js +4 -4
  65. package/dist/esm/style.css +44 -20
  66. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  67. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  68. package/package.json +28 -28
  69. package/src/components/HeaderButton/HeaderButton.tsx +1 -4
  70. package/src/components/HeaderLayout/HeaderLayout.tsx +10 -21
  71. package/src/components/HeaderLayout/styles.module.scss +11 -1
  72. package/src/components/Logo/styles.module.scss +1 -0
  73. package/src/components/MainMenu/helperComponents/Banners/MenuBanner.tsx +1 -3
  74. package/src/components/MainMenu/helperComponents/Banners/styles.module.scss +1 -0
  75. package/src/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.tsx +1 -1
  76. package/src/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/styles.module.scss +2 -0
  77. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.tsx +5 -1
  78. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.tsx +12 -2
  79. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.scss +13 -2
  80. package/src/components/MainMenu/helperComponents/Favorites/Favorites.tsx +3 -1
  81. package/src/components/MainMenu/helperComponents/Favorites/styles.module.scss +12 -7
  82. package/src/components/MainMenu/helperComponents/MenuDesktop/styles.module.scss +4 -2
  83. package/src/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.tsx +3 -2
  84. package/src/components/MainMenu/helperComponents/MenuHeaderBrand/styles.module.scss +4 -0
  85. package/src/components/MainMenu/helperComponents/MenuMobile/MenuMobile.tsx +46 -52
  86. package/src/components/MainMenu/helperComponents/MenuMobile/styles.module.scss +1 -7
  87. package/src/components/MainMenu/helperComponents/MountAnimation/styles.module.scss +4 -2
  88. package/src/components/MainMenu/helperComponents/Search/styles.module.scss +3 -3
  89. package/src/components/PathBreadcrumbs/PathBreadcrumbs.tsx +2 -3
  90. package/src/components/PlatformLogo/styles.module.scss +4 -1
  91. package/src/components/UserMenu/UserMenu.tsx +5 -1
  92. package/src/components/UserMenu/styles.module.scss +1 -1
  93. package/src/hooks/useDesktopComfortClassName.ts +11 -0
  94. package/src/hooks/useMobileLayout.ts +1 -0
  95. package/src/locale/index.ts +4 -4
package/README.md CHANGED
@@ -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, compactThemeClassName, className) }) }));
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
  }
@@ -6,23 +6,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.HeaderLayout = HeaderLayout;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const divider_1 = require("@cloud-ru/ds-divider");
9
- const theme_1 = require("@cloud-ru/ds-theme");
10
9
  const utils_1 = require("@cloud-ru/ds-utils");
11
10
  const classnames_1 = __importDefault(require("classnames"));
12
- const react_1 = require("react");
13
11
  const constants_1 = require("../../constants");
14
12
  const useMobileLayout_1 = require("../../hooks/useMobileLayout");
15
13
  const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
16
14
  function HeaderLayout({ menu, logo, select, breadcrumbs, toolbar, className, ...rest }) {
17
15
  const isMobile = (0, useMobileLayout_1.useMobileLayout)();
18
- const headerRef = (0, react_1.useRef)(null);
19
- const header = ((0, jsx_runtime_1.jsxs)("header", { ref: headerRef, 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 })] }));
20
- // Временная фиксация: на mobile прикладная тема переключилась на compact, а шапка сверстана
21
- // под comfort и на compact ещё не переехала. Провайдер (а не класс на `<header>`) нужен потому,
22
- // что поверхности шапки — порталы: они переэмитят набор `sn-*` из контекста на своём корне,
23
- // и класс, поставленный поверх, проиграл бы их собственному.
24
- if (isMobile) {
25
- return ((0, jsx_runtime_1.jsx)(theme_1.ChildThemeProvider, { value: { density: theme_1.DENSITY.Comfort }, rootRef: headerRef, children: header }));
26
- }
27
- return header;
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' })] }))] }));
28
17
  }
@@ -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
  }
@@ -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;
@@ -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: (0, classnames_1.default)(styles_module_scss_1.default.closeButton, compactThemeClassname), 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 }))] }) }));
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
  }
@@ -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);
@@ -10,7 +10,7 @@ const ServiceCard_1 = require("../../../../ServiceCard");
10
10
  const styles_module_scss_1 = __importDefault(require('../styles.module.css'));
11
11
  const SubCategory_1 = require("./SubCategory");
12
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, children: items.map(service => {
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 => {
14
14
  if (service.hidden) {
15
15
  return null;
16
16
  }
@@ -37,10 +37,10 @@ function SubCategory({ groupId, service, showDescription, isMobile, dragDisabled
37
37
  return ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_2.default.subcategory, "data-test-id": `${constants_1.TEST_IDS.subcategory}-${service.id}`, children: [(0, jsx_runtime_1.jsx)(SubCategoryTitle_1.SubCategoryTitle, { groupId: groupId, service: service, expandable: {
38
38
  value: Boolean(isExpanded),
39
39
  onClick: handleExpandedChange,
40
- }, showDescription: showDescription, isMobile: isMobile, dragDisabled: dragDisabled, favorite: groupFavoritesEnabled ? favorite : undefined, onServiceClick: onServiceClick }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.groupBody, "data-subcategory-body": 'expanded', "data-mobile": isMobile || undefined, children: nestedItems.map(nestedService => ((0, jsx_runtime_1.jsx)(ServiceCard_1.DraggableServiceCard, { groupId: nestedGroupId, service: nestedService, favorite: favorite, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescription, dragDisabled: dragDisabled }, nestedGroupId + nestedService.id))) })] }));
40
+ }, showDescription: showDescription, isMobile: isMobile, dragDisabled: dragDisabled, favorite: groupFavoritesEnabled ? favorite : undefined, onServiceClick: onServiceClick }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.groupBody, "data-subcategory-body": 'expanded', "data-mobile": isMobile || undefined, "data-show-description": showDescription || undefined, children: nestedItems.map(nestedService => ((0, jsx_runtime_1.jsx)(ServiceCard_1.DraggableServiceCard, { groupId: nestedGroupId, service: nestedService, favorite: favorite, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescription, dragDisabled: dragDisabled }, nestedGroupId + nestedService.id))) })] }));
41
41
  }
42
42
  return ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_2.default.subcategory, "data-test-id": `${constants_1.TEST_IDS.subcategory}-${service.id}`, children: (0, jsx_runtime_1.jsx)(accordion_1.Accordion, { selectionMode: 'single', expanded: isExpanded, onExpandedChange: handleExpandedChange, children: (0, jsx_runtime_1.jsx)(accordion_1.Accordion.CollapseBlockTertiary, { id: subcategoryId, showChevron: false, className: styles_module_scss_2.default.subcategoryAccordion, afterTitle: (0, jsx_runtime_1.jsx)(SubCategoryTitle_1.SubCategoryTitle, { groupId: groupId, service: service, expandable: {
43
43
  value: Boolean(isExpanded),
44
44
  onClick: handleExpandedChange,
45
- }, showDescription: showDescription, isMobile: isMobile, dragDisabled: dragDisabled, favorite: groupFavoritesEnabled ? favorite : undefined, onServiceClick: onServiceClick }), children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.groupBody, "data-subcategory-body": true, "data-mobile": isMobile || undefined, children: nestedItems.map(nestedService => ((0, jsx_runtime_1.jsx)(ServiceCard_1.DraggableServiceCard, { groupId: nestedGroupId, service: nestedService, favorite: favorite, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescription, dragDisabled: dragDisabled }, nestedGroupId + nestedService.id))) }) }) }) }));
45
+ }, showDescription: showDescription, isMobile: isMobile, dragDisabled: dragDisabled, favorite: groupFavoritesEnabled ? favorite : undefined, onServiceClick: onServiceClick }), children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.groupBody, "data-subcategory-body": true, "data-mobile": isMobile || undefined, "data-show-description": showDescription || undefined, children: nestedItems.map(nestedService => ((0, jsx_runtime_1.jsx)(ServiceCard_1.DraggableServiceCard, { groupId: nestedGroupId, service: nestedService, favorite: favorite, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescription, dragDisabled: dragDisabled }, nestedGroupId + nestedService.id))) }) }) }) }));
46
46
  }
@@ -27,7 +27,7 @@
27
27
  }
28
28
  @media (hover: hover){
29
29
  .header:hover{
30
- background-color:var(--sn-theme-color-material-stateLayer-neutral-onBackground-hovered-filled, var(--sn-brand-color-state-neutral-forLightMode-hovered-background, rgba(188, 195, 220, 0.1490196078)));
30
+ background-color:var(--sn-theme-color-neutral-decorTransparent, var(--sn-brand-color-neutral-transparent-forLightMode, rgba(124, 131, 182, 0.0784313725)));
31
31
  }
32
32
  .header:hover .headerActions{
33
33
  pointer-events:auto;
@@ -50,6 +50,7 @@
50
50
  overflow-x:clip;
51
51
  display:flex;
52
52
  flex-direction:column;
53
+ box-sizing:border-box;
53
54
  width:100%;
54
55
  min-width:0;
55
56
  padding:var(--sn-primitive-dimension-4, 4px) var(--sn-primitive-dimension-8, 8px) var(--sn-primitive-dimension-8, 8px) var(--sn-primitive-dimension-12, 12px);
@@ -109,6 +110,12 @@
109
110
  grid-template-columns:repeat(3, minmax(auto, 1fr));
110
111
  gap:var(--sn-primitive-dimension-4, 4px);
111
112
  }
113
+ .groupBody:not([data-mobile]):not([data-subcategory-body]){
114
+ padding:var(--sn-primitive-dimension-4, 4px);
115
+ }
116
+ .groupBody:not([data-mobile]):not([data-show-description]){
117
+ gap:var(--sn-primitive-dimension-0, 0px);
118
+ }
112
119
  @container (width <= 728px){
113
120
  .groupBody:not([data-mobile]){
114
121
  grid-template-columns:repeat(2, minmax(auto, 1fr));
@@ -125,7 +132,7 @@
125
132
  }
126
133
 
127
134
  .decoration{
128
- --highlight-border-width:1px;
135
+ --highlight-border-width:var(--sn-primitive-strokeWeight-strokeRegular, 1px);
129
136
  position:absolute;
130
137
  top:0;
131
138
  left:0;
@@ -14,6 +14,7 @@ const uikit_product_card_predefined_1 = require("@cloud-ru/ds-uikit-product-card
14
14
  const utils_1 = require("@cloud-ru/ds-utils");
15
15
  const classnames_1 = __importDefault(require("classnames"));
16
16
  const react_1 = require("react");
17
+ const useDesktopComfortClassName_1 = require("../../../../hooks/useDesktopComfortClassName");
17
18
  const locale_1 = require("../../../../locale");
18
19
  const utils_2 = require("../../utils");
19
20
  const components_1 = require("./components");
@@ -23,6 +24,7 @@ const utils_3 = require("./utils");
23
24
  function Favorites({ favorite, allServiceGroups, headerClassName, isMobile }) {
24
25
  const { t } = locale_1.headerLocale.useTranslations();
25
26
  const loading = favorite.loading;
27
+ const comfortClassName = (0, useDesktopComfortClassName_1.useDesktopComfortClassName)();
26
28
  const [segment, setSegment] = (0, utils_1.useValueControl)({
27
29
  value: favorite.segment,
28
30
  defaultValue: constants_1.FAVORITES_SEGMENT.Favorites,
@@ -65,5 +67,5 @@ function Favorites({ favorite, allServiceGroups, headerClassName, isMobile }) {
65
67
  onChange: favorite.onChange(service.id),
66
68
  }, ...(0, utils_3.getCommonCardProps)(service, handleFavoriteServiceClick(service)) }, service.id))), !isEmpty && !isFavoritesSegment && recentCards] }) }) })) : ((0, jsx_runtime_1.jsx)(components_1.FavoritesSortable, { favorite: favorite, favoriteItems: favoriteItems, segment: resolvedSegment, setSegment: setSegment, isEmpty: isEmpty, recentCards: recentCards, onFavoriteServiceClick: handleFavoriteServiceClick }));
67
69
  })();
68
- return ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.root, "data-test-id": constants_1.FAVORITES_TEST_IDS.root, children: [(0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(styles_module_scss_1.default.header, headerClassName), "data-test-id": constants_1.FAVORITES_TEST_IDS.header, children: [(0, jsx_runtime_1.jsx)(segment_control_1.SegmentControl, { size: 'm', width: segment_control_1.WIDTH.Full, value: loading ? undefined : segment, onChange: setSegment, className: styles_module_scss_1.default.segmentControl, "data-test-id": constants_1.FAVORITES_TEST_IDS.segmentControl, items: segmentControlItems }), favorite.actions && ((0, jsx_runtime_1.jsx)(list_1.Droplist, { size: 'm', ...favorite.actions, closeDroplistOnItemClick: true, children: (0, jsx_runtime_1.jsx)(button_1.Button, { view: 'function', size: 'm', appearance: 'neutral', icon: (0, jsx_runtime_1.jsx)(system_1.KebabSVG, { size: 24 }), "data-test-id": constants_1.FAVORITES_TEST_IDS.settingsButton, disabled: loading }) }))] }), content] }));
70
+ return ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.root, "data-test-id": constants_1.FAVORITES_TEST_IDS.root, children: [(0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(styles_module_scss_1.default.header, headerClassName), "data-test-id": constants_1.FAVORITES_TEST_IDS.header, children: [(0, jsx_runtime_1.jsx)(segment_control_1.SegmentControl, { size: 'm', width: segment_control_1.WIDTH.Full, value: loading ? undefined : segment, onChange: setSegment, className: styles_module_scss_1.default.segmentControl, "data-test-id": constants_1.FAVORITES_TEST_IDS.segmentControl, items: segmentControlItems }), favorite.actions && ((0, jsx_runtime_1.jsx)(list_1.Droplist, { size: 'm', ...favorite.actions, className: comfortClassName, closeDroplistOnItemClick: true, children: (0, jsx_runtime_1.jsx)(button_1.Button, { view: 'function', size: 'm', appearance: 'neutral', icon: (0, jsx_runtime_1.jsx)(system_1.KebabSVG, { size: 24 }), "data-test-id": constants_1.FAVORITES_TEST_IDS.settingsButton, disabled: loading }) }))] }), content] }));
69
71
  }
@@ -47,16 +47,18 @@
47
47
 
48
48
  .listScrollInner{
49
49
  height:100%;
50
- max-height:calc(var(--sn-primitive-dimension-32, 32px) * 12 + var(--sn-primitive-dimension-4, 4px) + var(--sn-primitive-dimension-8, 8px));
50
+ max-height:calc((var(--sn-primitive-dimension-32, 32px) + var(--sn-primitive-dimension-4, 4px)) * 12 + var(--sn-primitive-dimension-8, 8px));
51
51
  }
52
52
  .listScrollInner[data-mobile]{
53
- max-height:calc(var(--sn-primitive-dimension-40, 40px) * 6 + var(--sn-primitive-dimension-4, 4px) + var(--sn-primitive-dimension-8, 8px));
53
+ max-height:calc((var(--sn-primitive-dimension-40, 40px) + var(--sn-primitive-dimension-4, 4px)) * 6 + var(--sn-primitive-dimension-8, 8px));
54
54
  }
55
55
 
56
56
  .list{
57
57
  display:flex;
58
58
  flex-direction:column;
59
+ gap:var(--sn-primitive-dimension-4, 4px);
59
60
  align-items:stretch;
61
+ box-sizing:border-box;
60
62
  width:100%;
61
63
  padding:var(--sn-primitive-dimension-4, 4px) var(--sn-primitive-dimension-8, 8px) var(--sn-primitive-dimension-8, 8px);
62
64
  }
@@ -82,6 +84,7 @@
82
84
  flex-direction:column;
83
85
  gap:var(--sn-primitive-dimension-4, 4px);
84
86
  align-items:stretch;
87
+ box-sizing:border-box;
85
88
  width:100%;
86
89
  padding:var(--sn-primitive-dimension-8, 8px);
87
90
  }
@@ -56,13 +56,14 @@
56
56
  display:flex;
57
57
  flex-direction:column;
58
58
  gap:var(--sn-primitive-dimension-4, 4px);
59
+ box-sizing:border-box;
59
60
  width:100%;
60
61
  min-width:0;
61
62
  padding:var(--sn-primitive-dimension-16, 16px);
62
63
  }
63
64
 
64
65
  .menu{
65
- --snack-menu-header-height:40px;
66
+ --snack-menu-header-height:var(--sn-primitive-dimension-40, 40px);
66
67
  --snack-menu-left-width:263px;
67
68
  position:relative;
68
69
  height:100vh;
@@ -3,5 +3,6 @@ export type MenuHeaderBrandProps = {
3
3
  logo?: ReactNode;
4
4
  onClose(): void;
5
5
  className?: string;
6
+ isMobile?: boolean;
6
7
  };
7
- export declare function MenuHeaderBrand({ logo, onClose, className }: MenuHeaderBrandProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function MenuHeaderBrand({ logo, onClose, className, isMobile }: MenuHeaderBrandProps): import("react/jsx-runtime").JSX.Element;
@@ -11,7 +11,7 @@ const classnames_1 = __importDefault(require("classnames"));
11
11
  const locale_1 = require("../../../../locale");
12
12
  const HeaderButton_1 = require("../../../HeaderButton");
13
13
  const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
14
- function MenuHeaderBrand({ logo, onClose, className }) {
14
+ function MenuHeaderBrand({ logo, onClose, className, isMobile }) {
15
15
  const { t } = locale_1.headerLocale.useTranslations();
16
- return ((0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(styles_module_scss_1.default.container, className), children: [logo, (0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'vertical' }), (0, jsx_runtime_1.jsx)(HeaderButton_1.HeaderButton, { className: styles_module_scss_1.default.closeButton, onClick: onClose, icon: (0, jsx_runtime_1.jsx)(system_1.ChevronLeftSVG, {}), label: t('close') })] }));
16
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(styles_module_scss_1.default.container, className), "data-mobile": isMobile || undefined, children: [logo, (0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'vertical' }), (0, jsx_runtime_1.jsx)(HeaderButton_1.HeaderButton, { className: styles_module_scss_1.default.closeButton, onClick: onClose, icon: (0, jsx_runtime_1.jsx)(system_1.ChevronLeftSVG, {}), label: t('close') })] }));
17
17
  }
@@ -5,6 +5,9 @@
5
5
  box-sizing:border-box;
6
6
  background-color:var(--sn-theme-color-neutral-background, var(--sn-brand-color-neutral-90, var(--sn-brand-palette-gray-90, #eeeff3)));
7
7
  }
8
+ .container[data-mobile]{
9
+ gap:var(--sn-primitive-dimension-0, 0px);
10
+ }
8
11
 
9
12
  .closeButton{
10
13
  flex-grow:1;
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.MenuMobile = MenuMobile;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const divider_1 = require("@cloud-ru/ds-divider");
9
- const theme_1 = require("@cloud-ru/ds-theme");
10
9
  const utils_1 = require("@cloud-ru/ds-utils");
11
10
  const react_1 = require("react");
12
11
  const constants_1 = require("../../../../constants");
@@ -40,9 +39,5 @@ function MenuMobile({ open: openProp, setOpen: setOpenProp, settingItems, platfo
40
39
  const handleClose = (0, react_1.useCallback)(() => {
41
40
  setOpen(false);
42
41
  }, [setOpen]);
43
- return (
44
- // Временная фиксация comfort (см. `HeaderLayout`): `MainMenu` используется и отдельно от
45
- // `HeaderLayout`, поэтому объявляем плотность здесь же. Обёртка провайдера layout-прозрачная
46
- // (`display: contents`) — меню рендерится порталом, лишний бокс в строке шапки не нужен.
47
- (0, jsx_runtime_1.jsx)(theme_1.ChildThemeProvider, { value: { density: theme_1.DENSITY.Comfort }, className: styles_module_scss_1.default.densityScope, children: (0, jsx_runtime_1.jsx)(mobileOverlays_1.MobileDrawerCustom, { open: open, onClose: handleClose, position: 'bottom', className: styles_module_scss_1.default.drawerMobile, swipeEnabled: false, "data-test-id": constants_1.TEST_IDS.mainMenu.drawerMobile, closeOnPopstate: true, snapPoints: constants_1.BOTTOM_SHEET_FULLSCREEN_SNAP_POINTS, disableMotions: true, children: (0, jsx_runtime_1.jsx)(ScrollWithAnimatedStickyPanel_1.ScrollWithAnimatedStickyPanel, { panel: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(MenuHeaderBrand_1.MenuHeaderBrand, { logo: logo, onClose: handleClose, className: styles_module_scss_1.default.menuHeader }), (0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'horizontal' })] }), children: (0, jsx_runtime_1.jsxs)(MountAnimation_1.MountAnimation, { className: styles_module_scss_1.default.scrollMobile, type: 'fade-slide-up', children: [leftTop && (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.rightContent, children: leftTop }), search && (0, jsx_runtime_1.jsx)(Search_1.Search, { ...search, ref: searchRef, isMobile: true }), !isSearching && favorite && (0, jsx_runtime_1.jsx)(Favorites_1.Favorites, { favorite: favorite, allServiceGroups: allServiceGroups, isMobile: true }), hasSegments && ((0, jsx_runtime_1.jsx)(useMainMenuDnd_1.MainMenuDndContext, { children: (0, jsx_runtime_1.jsx)(Content_1.Content, { isMobile: true, className: styles_module_scss_1.default.rightContent, searchValue: search && search.value, rightTop: rightTop, favorite: favorite, segments: segments, searchGroups: resultItems, segmentPrefs: segmentPrefs, activeSegmentId: activeSegmentId, onActiveSegmentChange: onActiveSegmentChange, onSegmentOrderChange: onSegmentOrderChange, onSegmentExpandedChange: onSegmentExpandedChange, onSegmentServiceClick: onSegmentServiceClick, loading: loading }) })), !isSearching && hasBottomItems && (0, jsx_runtime_1.jsx)(MenuBottom_1.MenuBottom, { settingItems: settingItems, leftBottom: leftBottom })] }) }) }) }));
42
+ return ((0, jsx_runtime_1.jsx)(mobileOverlays_1.MobileDrawerCustom, { open: open, onClose: handleClose, position: 'bottom', className: styles_module_scss_1.default.drawerMobile, swipeEnabled: false, "data-test-id": constants_1.TEST_IDS.mainMenu.drawerMobile, closeOnPopstate: true, snapPoints: constants_1.BOTTOM_SHEET_FULLSCREEN_SNAP_POINTS, disableMotions: true, children: (0, jsx_runtime_1.jsx)(ScrollWithAnimatedStickyPanel_1.ScrollWithAnimatedStickyPanel, { panel: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(MenuHeaderBrand_1.MenuHeaderBrand, { logo: logo, onClose: handleClose, className: styles_module_scss_1.default.menuHeader, isMobile: true }), (0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'horizontal' })] }), children: (0, jsx_runtime_1.jsxs)(MountAnimation_1.MountAnimation, { className: styles_module_scss_1.default.scrollMobile, type: 'fade-slide-up', children: [leftTop && (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.rightContent, children: leftTop }), search && (0, jsx_runtime_1.jsx)(Search_1.Search, { ...search, ref: searchRef, isMobile: true }), !isSearching && favorite && (0, jsx_runtime_1.jsx)(Favorites_1.Favorites, { favorite: favorite, allServiceGroups: allServiceGroups, isMobile: true }), hasSegments && ((0, jsx_runtime_1.jsx)(useMainMenuDnd_1.MainMenuDndContext, { children: (0, jsx_runtime_1.jsx)(Content_1.Content, { isMobile: true, className: styles_module_scss_1.default.rightContent, searchValue: search && search.value, rightTop: rightTop, favorite: favorite, segments: segments, searchGroups: resultItems, segmentPrefs: segmentPrefs, activeSegmentId: activeSegmentId, onActiveSegmentChange: onActiveSegmentChange, onSegmentOrderChange: onSegmentOrderChange, onSegmentExpandedChange: onSegmentExpandedChange, onSegmentServiceClick: onSegmentServiceClick, loading: loading }) })), !isSearching && hasBottomItems && (0, jsx_runtime_1.jsx)(MenuBottom_1.MenuBottom, { settingItems: settingItems, leftBottom: leftBottom })] }) }) }));
48
43
  }
@@ -1,10 +1,5 @@
1
- .densityScope{
2
- display:contents;
3
- }
4
-
5
1
  .menuHeader{
6
2
  height:var(--sn-primitive-dimension-40, 40px);
7
- padding:0 var(--sn-primitive-dimension-4, 4px);
8
3
  }
9
4
 
10
5
  .rightContent{
@@ -22,6 +17,7 @@
22
17
  display:flex;
23
18
  flex-direction:column;
24
19
  gap:var(--sn-primitive-dimension-8, 8px);
20
+ box-sizing:border-box;
25
21
  min-height:100%;
26
22
  margin-top:calc(var(--sn-primitive-dimension-40, 40px) + var(--sn-divider-anatomy-container-height, var(--sn-primitive-dimension-1, 1px)));
27
23
  padding:var(--sn-primitive-dimension-16, 16px);
@@ -5,17 +5,17 @@
5
5
  animation-fill-mode:forwards;
6
6
  }
7
7
  .wrapper[data-animation-type=fade-slide-up-right]{
8
- transform:translate(-12px, 4px);
8
+ transform:translate(calc(-1 * var(--sn-primitive-dimension-12, 12px)), var(--sn-primitive-dimension-4, 4px));
9
9
  opacity:0;
10
10
  animation-name:fade-slide-up-right;
11
11
  }
12
12
  .wrapper[data-animation-type=fade-slide-up]{
13
- transform:translate(0, 4px);
13
+ transform:translate(0, var(--sn-primitive-dimension-4, 4px));
14
14
  opacity:0;
15
15
  animation-name:fade-slide-up;
16
16
  }
17
17
  .wrapper[data-animation-type=slide-right]{
18
- transform:translate(-12px, 0);
18
+ transform:translate(calc(-1 * var(--sn-primitive-dimension-12, 12px)), 0);
19
19
  animation-name:slide-right;
20
20
  }
21
21
  .wrapper[data-animation-type=fade-in]{
@@ -32,7 +32,7 @@
32
32
  }
33
33
  @keyframes fade-slide-up{
34
34
  0%{
35
- transform:translate(0, 4px);
35
+ transform:translate(0, var(--sn-primitive-dimension-4, 4px));
36
36
  opacity:0;
37
37
  }
38
38
  100%{
@@ -42,7 +42,7 @@
42
42
  }
43
43
  @keyframes fade-slide-up-right{
44
44
  0%{
45
- transform:translate(-12px, 4px);
45
+ transform:translate(calc(-1 * var(--sn-primitive-dimension-12, 12px)), var(--sn-primitive-dimension-4, 4px));
46
46
  opacity:0;
47
47
  }
48
48
  100%{
@@ -52,7 +52,7 @@
52
52
  }
53
53
  @keyframes slide-right{
54
54
  0%{
55
- transform:translate(-12px, 0);
55
+ transform:translate(calc(-1 * var(--sn-primitive-dimension-12, 12px)), 0);
56
56
  }
57
57
  100%{
58
58
  transform:translate(0, 0);
@@ -1,6 +1,8 @@
1
1
  .searchWrap:not([data-mobile]){
2
2
  flex:1 1 auto;
3
- padding:var(--sn-primitive-dimension-2, 2px) var(--sn-primitive-dimension-10, 10px);
3
+ box-sizing:border-box;
4
+ margin:0 var(--sn-primitive-dimension-4, 4px);
5
+ padding:var(--sn-primitive-dimension-4, 4px) var(--sn-primitive-dimension-12, 12px);
4
6
  }
5
7
 
6
8
  .search{
@@ -1,7 +1,6 @@
1
1
  import { BreadcrumbsProps } from '@cloud-ru/ds-breadcrumbs';
2
2
  type PathBreadcrumbsProps = {
3
3
  items: BreadcrumbsProps['items'];
4
- isMobile?: boolean;
5
4
  };
6
- export declare function PathBreadcrumbs({ isMobile, items }: PathBreadcrumbsProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function PathBreadcrumbs({ items }: PathBreadcrumbsProps): import("react/jsx-runtime").JSX.Element;
7
6
  export {};
@@ -8,6 +8,6 @@ const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const breadcrumbs_1 = require("@cloud-ru/ds-breadcrumbs");
9
9
  const constants_1 = require("../../constants");
10
10
  const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
11
- function PathBreadcrumbs({ isMobile, items }) {
12
- return ((0, jsx_runtime_1.jsx)(breadcrumbs_1.Breadcrumbs, { items: items, className: styles_module_scss_1.default.breadcrumbs, inactiveLastItem: items.length > 1, separator: '/', size: isMobile ? 'xs' : 's', "data-test-id": constants_1.TEST_IDS.breadcrumbs.root }));
11
+ function PathBreadcrumbs({ items }) {
12
+ return ((0, jsx_runtime_1.jsx)(breadcrumbs_1.Breadcrumbs, { items: items, className: styles_module_scss_1.default.breadcrumbs, inactiveLastItem: items.length > 1, separator: '/', size: 'xs', "data-test-id": constants_1.TEST_IDS.breadcrumbs.root }));
13
13
  }
@@ -2,8 +2,10 @@
2
2
  display:flex;
3
3
  align-items:center;
4
4
  justify-content:center;
5
+ box-sizing:border-box;
5
6
  width:var(--sn-primitive-dimension-24, 24px);
6
7
  height:var(--sn-primitive-dimension-24, 24px);
7
8
  border-radius:var(--sn-density-radius-2xs, var(--sn-platform-comfort-radius-2xs, var(--sn-primitive-dimension-4, 4px)));
8
- background:var(--sn-theme-color-neutral-decor, var(--sn-brand-color-neutral-80, var(--sn-brand-palette-gray-80, #e3e5ed)));
9
+ color:var(--sn-theme-color-neutral-onAccent, var(--sn-brand-color-neutral-99, var(--sn-brand-palette-gray-99, #ffffff)));
10
+ background:var(--sn-theme-color-neutral-accent, var(--sn-brand-color-neutral-50, var(--sn-brand-palette-gray-50, #8b8fa7)));
9
11
  }
@@ -8,8 +8,10 @@ const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const avatar_1 = require("@cloud-ru/ds-avatar");
9
9
  const list_1 = require("@cloud-ru/ds-list");
10
10
  const utils_1 = require("@cloud-ru/ds-utils");
11
+ const classnames_1 = __importDefault(require("classnames"));
11
12
  const react_1 = require("react");
12
13
  const constants_1 = require("../../constants");
14
+ const useDesktopComfortClassName_1 = require("../../hooks/useDesktopComfortClassName");
13
15
  const useMobileLayout_1 = require("../../hooks/useMobileLayout");
14
16
  const locale_1 = require("../../locale");
15
17
  const HeaderButton_1 = require("../HeaderButton");
@@ -23,6 +25,7 @@ const SELECTION_STUB = { mode: 'single', value: '__empty_stub__', onChange: () =
23
25
  function UserMenu({ profile = {}, open: openProp, setOpen: setOpenProp, onLogout, items, settingItems, theme, onClick, triggerTooltip, }) {
24
26
  const { t } = locale_1.headerLocale.useTranslations();
25
27
  const isMobile = (0, useMobileLayout_1.useMobileLayout)();
28
+ const comfortClassName = (0, useDesktopComfortClassName_1.useDesktopComfortClassName)();
26
29
  const [open = false, setOpen] = (0, utils_1.useValueControl)({ value: openProp, onChange: setOpenProp });
27
30
  const { fullName = '', inviteCount } = profile;
28
31
  const userMenuItems = (0, useUserMenuItems_1.useUserMenuItems)({
@@ -42,7 +45,8 @@ function UserMenu({ profile = {}, open: openProp, setOpen: setOpenProp, onLogout
42
45
  }, counter: Number(inviteCount)
43
46
  ? {
44
47
  value: Number(inviteCount),
48
+ appearance: 'primary',
45
49
  }
46
50
  : undefined, "data-test-id": constants_1.TEST_IDS.userMenu.button, icon: (0, jsx_runtime_1.jsx)(avatar_1.Avatar, { appearance: 'red', size: 's', name: fullName, showTwoSymbols: true }), "data-pressed": open })), [fullName, inviteCount, onClick, open, setOpen, isMobile, triggerTooltip]);
47
- return ((0, jsx_runtime_1.jsx)(list_1.Droplist, { open: open, onOpenChange: setOpen, size: 'm', selection: SELECTION_STUB, items: userMenuItems, trigger: 'click', placement: 'bottom-end', className: styles_module_scss_1.default.userMenuDroplist, closeOnPopstate: true, "data-test-id": constants_1.TEST_IDS.userMenu.root, label: t('user'), snapPoints: constants_1.BOTTOM_SHEET_FULLSCREEN_SNAP_POINTS, children: trigger }));
51
+ return ((0, jsx_runtime_1.jsx)(list_1.Droplist, { open: open, onOpenChange: setOpen, size: 'm', selection: SELECTION_STUB, items: userMenuItems, trigger: 'click', placement: 'bottom-end', className: (0, classnames_1.default)(styles_module_scss_1.default.userMenuDroplist, comfortClassName), closeOnPopstate: true, "data-test-id": constants_1.TEST_IDS.userMenu.root, label: t('user'), snapPoints: constants_1.BOTTOM_SHEET_FULLSCREEN_SNAP_POINTS, children: trigger }));
48
52
  }
@@ -1,5 +1,5 @@
1
1
  .userMenuDroplist{
2
- width:272px;
2
+ width:256px;
3
3
  }
4
4
 
5
5
  .userMenuTrigger{
@@ -0,0 +1,2 @@
1
+ /** Класс плотности comfort для выпадающих списков шапки на desktop; на mobile остаётся compact из темы. */
2
+ export declare function useDesktopComfortClassName(): string | undefined;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useDesktopComfortClassName = useDesktopComfortClassName;
4
+ const theme_1 = require("@cloud-ru/ds-theme");
5
+ const useMobileLayout_1 = require("./useMobileLayout");
6
+ /** Класс плотности comfort для выпадающих списков шапки на desktop; на mobile остаётся compact из темы. */
7
+ function useDesktopComfortClassName() {
8
+ const isMobile = (0, useMobileLayout_1.useMobileLayout)();
9
+ const comfortClassName = (0, theme_1.useThemeClassnames)({ density: theme_1.DENSITY.Comfort });
10
+ return isMobile ? undefined : comfortClassName;
11
+ }
@@ -4,5 +4,6 @@ exports.useMobileLayout = useMobileLayout;
4
4
  const adaptive_1 = require("@cloud-ru/ds-adaptive");
5
5
  function useMobileLayout() {
6
6
  const { layoutType } = (0, adaptive_1.useAdaptiveLayout)();
7
+ // Осознанное исключение из isMobileLayout: desktop-шапка не помещается на tablet и desktopSmall
7
8
  return layoutType !== adaptive_1.LAYOUT_TYPE.Desktop;
8
9
  }
@@ -3,11 +3,11 @@ declare const HEADER_MESSAGES: {
3
3
  readonly searchByServices: "Search by services and their sections";
4
4
  readonly services: "Services";
5
5
  readonly user: "User";
6
- readonly logout: "Log out";
6
+ readonly logout: "Log out of account";
7
7
  readonly noData: "No data";
8
8
  readonly noDataFound: "Nothing found";
9
9
  readonly dragGroup: "Drag group";
10
- readonly themeModeLabel: "Theme";
10
+ readonly themeModeLabel: "Interface theme";
11
11
  readonly themeModeLight: "Light";
12
12
  readonly themeModeDark: "Dark";
13
13
  readonly themeModeSystem: "System";
@@ -31,11 +31,11 @@ declare const HEADER_MESSAGES: {
31
31
  readonly searchByServices: "Поиск по сервисам и их разделам";
32
32
  readonly services: "Сервисы";
33
33
  readonly user: "Пользователь";
34
- readonly logout: "Выйти";
34
+ readonly logout: "Выйти из аккаунта";
35
35
  readonly noData: "Нет данных";
36
36
  readonly noDataFound: "Ничего не найдено";
37
37
  readonly dragGroup: "Перетащить группу";
38
- readonly themeModeLabel: "Тема";
38
+ readonly themeModeLabel: "Тема интерфейса";
39
39
  readonly themeModeLight: "Светлая";
40
40
  readonly themeModeDark: "Тёмная";
41
41
  readonly themeModeSystem: "Системная";
@@ -62,11 +62,11 @@ export declare const headerLocale: import("@cloud-ru/ds-locale").DefinedLocale<{
62
62
  readonly searchByServices: "Search by services and their sections";
63
63
  readonly services: "Services";
64
64
  readonly user: "User";
65
- readonly logout: "Log out";
65
+ readonly logout: "Log out of account";
66
66
  readonly noData: "No data";
67
67
  readonly noDataFound: "Nothing found";
68
68
  readonly dragGroup: "Drag group";
69
- readonly themeModeLabel: "Theme";
69
+ readonly themeModeLabel: "Interface theme";
70
70
  readonly themeModeLight: "Light";
71
71
  readonly themeModeDark: "Dark";
72
72
  readonly themeModeSystem: "System";
@@ -90,11 +90,11 @@ export declare const headerLocale: import("@cloud-ru/ds-locale").DefinedLocale<{
90
90
  readonly searchByServices: "Поиск по сервисам и их разделам";
91
91
  readonly services: "Сервисы";
92
92
  readonly user: "Пользователь";
93
- readonly logout: "Выйти";
93
+ readonly logout: "Выйти из аккаунта";
94
94
  readonly noData: "Нет данных";
95
95
  readonly noDataFound: "Ничего не найдено";
96
96
  readonly dragGroup: "Перетащить группу";
97
- readonly themeModeLabel: "Тема";
97
+ readonly themeModeLabel: "Тема интерфейса";
98
98
  readonly themeModeLight: "Светлая";
99
99
  readonly themeModeDark: "Тёмная";
100
100
  readonly themeModeSystem: "Системная";