@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
@@ -7,11 +7,11 @@ const HEADER_MESSAGES = (0, locale_1.defineMessages)({
7
7
  searchByServices: 'Search by services and their sections',
8
8
  services: 'Services',
9
9
  user: 'User',
10
- logout: 'Log out',
10
+ logout: 'Log out of account',
11
11
  noData: 'No data',
12
12
  noDataFound: 'Nothing found',
13
13
  dragGroup: 'Drag group',
14
- themeModeLabel: 'Theme',
14
+ themeModeLabel: 'Interface theme',
15
15
  themeModeLight: 'Light',
16
16
  themeModeDark: 'Dark',
17
17
  themeModeSystem: 'System',
@@ -35,11 +35,11 @@ const HEADER_MESSAGES = (0, locale_1.defineMessages)({
35
35
  searchByServices: 'Поиск по сервисам и их разделам',
36
36
  services: 'Сервисы',
37
37
  user: 'Пользователь',
38
- logout: 'Выйти',
38
+ logout: 'Выйти из аккаунта',
39
39
  noData: 'Нет данных',
40
40
  noDataFound: 'Ничего не найдено',
41
41
  dragGroup: 'Перетащить группу',
42
- themeModeLabel: 'Тема',
42
+ themeModeLabel: 'Тема интерфейса',
43
43
  themeModeLight: 'Светлая',
44
44
  themeModeDark: 'Тёмная',
45
45
  themeModeSystem: 'Системная',
@@ -21,7 +21,6 @@
21
21
  align-items:center;
22
22
  box-sizing:border-box;
23
23
  height:var(--sn-primitive-dimension-24, 24px);
24
- 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)));
25
24
  }
26
25
 
27
26
  .left{
@@ -38,6 +37,14 @@
38
37
  align-items:center;
39
38
  height:100%;
40
39
  }
40
+
41
+ .header[data-mobile] .top{
42
+ padding:var(--sn-primitive-dimension-0, 0px);
43
+ }
44
+ .header[data-mobile] .left,
45
+ .header[data-mobile] .right{
46
+ gap:var(--sn-primitive-dimension-0, 0px);
47
+ }
41
48
  .logoImg{
42
49
  width:auto;
43
50
  min-height:var(--sn-primitive-dimension-24, 24px);
@@ -76,6 +83,7 @@
76
83
  .logo{
77
84
  position:relative;
78
85
  flex-shrink:0;
86
+ box-sizing:border-box;
79
87
  }
80
88
  .logo:active:not([data-disabled]) .iconDefault{
81
89
  opacity:0;
@@ -104,6 +112,7 @@
104
112
  }
105
113
 
106
114
  .root{
115
+ box-sizing:border-box;
107
116
  width:100%;
108
117
  min-width:0;
109
118
  }
@@ -158,6 +167,7 @@
158
167
  gap:var(--sn-primitive-dimension-8, 8px);
159
168
  align-items:center;
160
169
  justify-content:space-between;
170
+ box-sizing:border-box;
161
171
  width:100%;
162
172
  min-width:0;
163
173
  min-height:var(--sn-primitive-dimension-32, 32px);
@@ -301,7 +311,7 @@
301
311
  }
302
312
  @media (hover: hover){
303
313
  .header:hover{
304
- 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)));
314
+ background-color:var(--sn-theme-color-neutral-decorTransparent, var(--sn-brand-color-neutral-transparent-forLightMode, rgba(124, 131, 182, 0.0784313725)));
305
315
  }
306
316
  .header:hover .headerActions{
307
317
  pointer-events:auto;
@@ -324,6 +334,7 @@
324
334
  overflow-x:clip;
325
335
  display:flex;
326
336
  flex-direction:column;
337
+ box-sizing:border-box;
327
338
  width:100%;
328
339
  min-width:0;
329
340
  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);
@@ -383,6 +394,12 @@
383
394
  grid-template-columns:repeat(3, minmax(auto, 1fr));
384
395
  gap:var(--sn-primitive-dimension-4, 4px);
385
396
  }
397
+ .groupBody:not([data-mobile]):not([data-subcategory-body]){
398
+ padding:var(--sn-primitive-dimension-4, 4px);
399
+ }
400
+ .groupBody:not([data-mobile]):not([data-show-description]){
401
+ gap:var(--sn-primitive-dimension-0, 0px);
402
+ }
386
403
  @container (width <= 728px){
387
404
  .groupBody:not([data-mobile]){
388
405
  grid-template-columns:repeat(2, minmax(auto, 1fr));
@@ -399,7 +416,7 @@
399
416
  }
400
417
 
401
418
  .decoration{
402
- --highlight-border-width:1px;
419
+ --highlight-border-width:var(--sn-primitive-strokeWeight-strokeRegular, 1px);
403
420
  position:absolute;
404
421
  top:0;
405
422
  left:0;
@@ -590,16 +607,18 @@
590
607
 
591
608
  .listScrollInner{
592
609
  height:100%;
593
- max-height:calc(var(--sn-primitive-dimension-32, 32px) * 12 + var(--sn-primitive-dimension-4, 4px) + var(--sn-primitive-dimension-8, 8px));
610
+ max-height:calc((var(--sn-primitive-dimension-32, 32px) + var(--sn-primitive-dimension-4, 4px)) * 12 + var(--sn-primitive-dimension-8, 8px));
594
611
  }
595
612
  .listScrollInner[data-mobile]{
596
- max-height:calc(var(--sn-primitive-dimension-40, 40px) * 6 + var(--sn-primitive-dimension-4, 4px) + var(--sn-primitive-dimension-8, 8px));
613
+ max-height:calc((var(--sn-primitive-dimension-40, 40px) + var(--sn-primitive-dimension-4, 4px)) * 6 + var(--sn-primitive-dimension-8, 8px));
597
614
  }
598
615
 
599
616
  .list{
600
617
  display:flex;
601
618
  flex-direction:column;
619
+ gap:var(--sn-primitive-dimension-4, 4px);
602
620
  align-items:stretch;
621
+ box-sizing:border-box;
603
622
  width:100%;
604
623
  padding:var(--sn-primitive-dimension-4, 4px) var(--sn-primitive-dimension-8, 8px) var(--sn-primitive-dimension-8, 8px);
605
624
  }
@@ -625,6 +644,7 @@
625
644
  flex-direction:column;
626
645
  gap:var(--sn-primitive-dimension-4, 4px);
627
646
  align-items:stretch;
647
+ box-sizing:border-box;
628
648
  width:100%;
629
649
  padding:var(--sn-primitive-dimension-8, 8px);
630
650
  }
@@ -705,13 +725,14 @@
705
725
  display:flex;
706
726
  flex-direction:column;
707
727
  gap:var(--sn-primitive-dimension-4, 4px);
728
+ box-sizing:border-box;
708
729
  width:100%;
709
730
  min-width:0;
710
731
  padding:var(--sn-primitive-dimension-16, 16px);
711
732
  }
712
733
 
713
734
  .menu{
714
- --snack-menu-header-height:40px;
735
+ --snack-menu-header-height:var(--sn-primitive-dimension-40, 40px);
715
736
  --snack-menu-left-width:263px;
716
737
  position:relative;
717
738
  height:100vh;
@@ -743,19 +764,17 @@
743
764
  box-sizing:border-box;
744
765
  background-color:var(--sn-theme-color-neutral-background, var(--sn-brand-color-neutral-90, var(--sn-brand-palette-gray-90, #eeeff3)));
745
766
  }
767
+ .container[data-mobile]{
768
+ gap:var(--sn-primitive-dimension-0, 0px);
769
+ }
746
770
 
747
771
  .closeButton{
748
772
  flex-grow:1;
749
773
  flex-shrink:1;
750
774
  justify-content:flex-start;
751
775
  }
752
- .densityScope{
753
- display:contents;
754
- }
755
-
756
776
  .menuHeader{
757
777
  height:var(--sn-primitive-dimension-40, 40px);
758
- padding:0 var(--sn-primitive-dimension-4, 4px);
759
778
  }
760
779
 
761
780
  .rightContent{
@@ -773,6 +792,7 @@
773
792
  display:flex;
774
793
  flex-direction:column;
775
794
  gap:var(--sn-primitive-dimension-8, 8px);
795
+ box-sizing:border-box;
776
796
  min-height:100%;
777
797
  margin-top:calc(var(--sn-primitive-dimension-40, 40px) + var(--sn-divider-anatomy-container-height, var(--sn-primitive-dimension-1, 1px)));
778
798
  padding:var(--sn-primitive-dimension-16, 16px);
@@ -784,17 +804,17 @@
784
804
  animation-fill-mode:forwards;
785
805
  }
786
806
  .wrapper[data-animation-type=fade-slide-up-right]{
787
- transform:translate(-12px, 4px);
807
+ transform:translate(calc(-1 * var(--sn-primitive-dimension-12, 12px)), var(--sn-primitive-dimension-4, 4px));
788
808
  opacity:0;
789
809
  animation-name:fade-slide-up-right;
790
810
  }
791
811
  .wrapper[data-animation-type=fade-slide-up]{
792
- transform:translate(0, 4px);
812
+ transform:translate(0, var(--sn-primitive-dimension-4, 4px));
793
813
  opacity:0;
794
814
  animation-name:fade-slide-up;
795
815
  }
796
816
  .wrapper[data-animation-type=slide-right]{
797
- transform:translate(-12px, 0);
817
+ transform:translate(calc(-1 * var(--sn-primitive-dimension-12, 12px)), 0);
798
818
  animation-name:slide-right;
799
819
  }
800
820
  .wrapper[data-animation-type=fade-in]{
@@ -811,7 +831,7 @@
811
831
  }
812
832
  @keyframes fade-slide-up{
813
833
  0%{
814
- transform:translate(0, 4px);
834
+ transform:translate(0, var(--sn-primitive-dimension-4, 4px));
815
835
  opacity:0;
816
836
  }
817
837
  100%{
@@ -821,7 +841,7 @@
821
841
  }
822
842
  @keyframes fade-slide-up-right{
823
843
  0%{
824
- transform:translate(-12px, 4px);
844
+ transform:translate(calc(-1 * var(--sn-primitive-dimension-12, 12px)), var(--sn-primitive-dimension-4, 4px));
825
845
  opacity:0;
826
846
  }
827
847
  100%{
@@ -831,7 +851,7 @@
831
851
  }
832
852
  @keyframes slide-right{
833
853
  0%{
834
- transform:translate(-12px, 0);
854
+ transform:translate(calc(-1 * var(--sn-primitive-dimension-12, 12px)), 0);
835
855
  }
836
856
  100%{
837
857
  transform:translate(0, 0);
@@ -851,7 +871,9 @@
851
871
  }
852
872
  .searchWrap:not([data-mobile]){
853
873
  flex:1 1 auto;
854
- padding:var(--sn-primitive-dimension-2, 2px) var(--sn-primitive-dimension-10, 10px);
874
+ box-sizing:border-box;
875
+ margin:0 var(--sn-primitive-dimension-4, 4px);
876
+ padding:var(--sn-primitive-dimension-4, 4px) var(--sn-primitive-dimension-12, 12px);
855
877
  }
856
878
 
857
879
  .search{
@@ -881,13 +903,15 @@
881
903
  display:flex;
882
904
  align-items:center;
883
905
  justify-content:center;
906
+ box-sizing:border-box;
884
907
  width:var(--sn-primitive-dimension-24, 24px);
885
908
  height:var(--sn-primitive-dimension-24, 24px);
886
909
  border-radius:var(--sn-density-radius-2xs, var(--sn-platform-comfort-radius-2xs, var(--sn-primitive-dimension-4, 4px)));
887
- background:var(--sn-theme-color-neutral-decor, var(--sn-brand-color-neutral-80, var(--sn-brand-palette-gray-80, #e3e5ed)));
910
+ color:var(--sn-theme-color-neutral-onAccent, var(--sn-brand-color-neutral-99, var(--sn-brand-palette-gray-99, #ffffff)));
911
+ background:var(--sn-theme-color-neutral-accent, var(--sn-brand-color-neutral-50, var(--sn-brand-palette-gray-50, #8b8fa7)));
888
912
  }
889
913
  .userMenuDroplist{
890
- width:272px;
914
+ width:256px;
891
915
  }
892
916
 
893
917
  .userMenuTrigger{
@@ -1,6 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Button } from '@cloud-ru/ds-button';
3
- import { useThemeClassnames } from '@cloud-ru/ds-theme';
4
3
  import { WithTooltip } from '@cloud-ru/ds-tooltip';
5
4
  import cn from 'classnames';
6
5
  import styles from './styles.module.css';
@@ -10,7 +9,6 @@ import styles from './styles.module.css';
10
9
  * остальное API `Button` и `Tooltip` передаётся как есть.
11
10
  */
12
11
  export function HeaderButton({ tooltip, isMobile, className, ...rest }) {
13
- const compactThemeClassName = useThemeClassnames({ density: 'compact' });
14
12
  return (
15
13
  // FIXME: typescript ломается, если не указать tip явно
16
14
  // пока не разбирался почему так
@@ -23,5 +21,5 @@ export function HeaderButton({ tooltip, isMobile, className, ...rest }) {
23
21
  placement: 'bottom',
24
22
  ...tooltip,
25
23
  triggerClassName: styles.tooltipTrigger,
26
- }, children: _jsx(Button, { ...rest, size: 'm', appearance: 'neutral', view: 'simple', className: cn(styles.headerButton, compactThemeClassName, className) }) }));
24
+ }, children: _jsx(Button, { ...rest, size: 'm', appearance: 'neutral', view: 'simple', className: cn(styles.headerButton, className) }) }));
27
25
  }
@@ -1,22 +1,11 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Divider } from '@cloud-ru/ds-divider';
3
- import { ChildThemeProvider, DENSITY } from '@cloud-ru/ds-theme';
4
3
  import { extractSupportProps } from '@cloud-ru/ds-utils';
5
4
  import cn from 'classnames';
6
- import { useRef } from 'react';
7
5
  import { TEST_IDS } from '../../constants.js';
8
6
  import { useMobileLayout } from '../../hooks/useMobileLayout.js';
9
7
  import styles from './styles.module.css';
10
8
  export function HeaderLayout({ menu, logo, select, breadcrumbs, toolbar, className, ...rest }) {
11
9
  const isMobile = useMobileLayout();
12
- const headerRef = useRef(null);
13
- const header = (_jsxs("header", { ref: headerRef, className: cn(styles.header, className), ...extractSupportProps({ 'data-test-id': TEST_IDS.headerLayout.root, ...rest }), children: [_jsxs("div", { className: styles.top, children: [_jsxs("div", { className: styles.left, children: [logo && _jsx(_Fragment, { children: logo }), menu && (_jsxs(_Fragment, { children: [_jsx(Divider, { orientation: 'vertical' }), menu] })), !isMobile && select && (_jsxs(_Fragment, { children: [_jsx(Divider, { orientation: 'vertical' }), select] })), !isMobile && breadcrumbs && (_jsxs(_Fragment, { children: [_jsx(Divider, { orientation: 'vertical' }), breadcrumbs] }))] }), _jsx("div", { className: styles.right, children: toolbar })] }), _jsx(Divider, { orientation: 'horizontal' }), isMobile && Boolean(breadcrumbs) && _jsx("div", { className: styles.bottom, children: breadcrumbs })] }));
14
- // Временная фиксация: на mobile прикладная тема переключилась на compact, а шапка сверстана
15
- // под comfort и на compact ещё не переехала. Провайдер (а не класс на `<header>`) нужен потому,
16
- // что поверхности шапки — порталы: они переэмитят набор `sn-*` из контекста на своём корне,
17
- // и класс, поставленный поверх, проиграл бы их собственному.
18
- if (isMobile) {
19
- return (_jsx(ChildThemeProvider, { value: { density: DENSITY.Comfort }, rootRef: headerRef, children: header }));
20
- }
21
- return header;
10
+ return (_jsxs("header", { className: cn(styles.header, className), "data-mobile": isMobile || undefined, ...extractSupportProps({ 'data-test-id': TEST_IDS.headerLayout.root, ...rest }), children: [_jsxs("div", { className: styles.top, children: [_jsxs("div", { className: styles.left, children: [logo && _jsx(_Fragment, { children: logo }), menu && (_jsxs(_Fragment, { children: [_jsx(Divider, { orientation: 'vertical' }), menu, isMobile && _jsx(Divider, { orientation: 'vertical' })] })), !isMobile && select && (_jsxs(_Fragment, { children: [_jsx(Divider, { orientation: 'vertical' }), select] })), !isMobile && breadcrumbs && (_jsxs(_Fragment, { children: [_jsx(Divider, { orientation: 'vertical' }), breadcrumbs] }))] }), _jsx("div", { className: styles.right, children: toolbar })] }), _jsx(Divider, { orientation: 'horizontal' }), isMobile && Boolean(breadcrumbs) && (_jsxs(_Fragment, { children: [_jsx("div", { className: styles.bottom, children: breadcrumbs }), _jsx(Divider, { orientation: 'horizontal' })] }))] }));
22
11
  }
@@ -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;
@@ -3,7 +3,6 @@ import { Button } from '@cloud-ru/ds-button';
3
3
  import { Card } from '@cloud-ru/ds-card';
4
4
  import { CrossSVG } from '@cloud-ru/ds-icons/interface/system';
5
5
  import { PromoTag, ROLE_APPEARANCE, SIZE } from '@cloud-ru/ds-promo-tag';
6
- import { useThemeClassnames } from '@cloud-ru/ds-theme';
7
6
  import { Typography } from '@cloud-ru/ds-typography';
8
7
  import cn from 'classnames';
9
8
  import { useCallback } from 'react';
@@ -12,11 +11,10 @@ import { MENU_BANNER_TEST_IDS } from './constants.js';
12
11
  import styles from './styles.module.css';
13
12
  export function MenuBanner({ title, promoTag, afterTitle, onClose, className, href = '#', 'data-test-id': dataTestId, ...rest }) {
14
13
  const { t } = headerLocale.useTranslations();
15
- const compactThemeClassname = useThemeClassnames({ density: 'compact' });
16
14
  const handleClose = useCallback(e => {
17
15
  e.preventDefault();
18
16
  e.stopPropagation();
19
17
  onClose?.(e);
20
18
  }, [onClose]);
21
- return (_jsx(Card, { as: 'a', href: href, radius: 'l', view: 'simple', className: cn(styles.root, className), "data-test-id": dataTestId ?? MENU_BANNER_TEST_IDS.root, ...rest, children: _jsxs("div", { className: styles.contentRow, children: [_jsxs("span", { className: styles.titleWrapper, children: [_jsx(Typography, { as: 'span', variant: 'body', size: 'm', className: styles.title, "data-test-id": MENU_BANNER_TEST_IDS.title, children: title }), promoTag && (_jsx(PromoTag, { ...promoTag, className: styles.promoTag, roleAppearance: ROLE_APPEARANCE.Decor, size: SIZE.Xs, "data-test-id": MENU_BANNER_TEST_IDS.promoTag }))] }), afterTitle && (_jsx("div", { className: styles.afterTitle, "data-test-id": MENU_BANNER_TEST_IDS.afterTitle, children: afterTitle })), onClose && (_jsx(Button, { className: cn(styles.closeButton, compactThemeClassname), view: 'elevated', appearance: 'neutral', size: 's', icon: _jsx(CrossSVG, { size: 16 }), onClick: handleClose, "aria-label": t('close'), "data-test-id": MENU_BANNER_TEST_IDS.close }))] }) }));
19
+ return (_jsx(Card, { as: 'a', href: href, radius: 'l', view: 'simple', className: cn(styles.root, className), "data-test-id": dataTestId ?? MENU_BANNER_TEST_IDS.root, ...rest, children: _jsxs("div", { className: styles.contentRow, children: [_jsxs("span", { className: styles.titleWrapper, children: [_jsx(Typography, { as: 'span', variant: 'body', size: 'm', className: styles.title, "data-test-id": MENU_BANNER_TEST_IDS.title, children: title }), promoTag && (_jsx(PromoTag, { ...promoTag, className: styles.promoTag, roleAppearance: ROLE_APPEARANCE.Decor, size: SIZE.Xs, "data-test-id": MENU_BANNER_TEST_IDS.promoTag }))] }), afterTitle && (_jsx("div", { className: styles.afterTitle, "data-test-id": MENU_BANNER_TEST_IDS.afterTitle, children: afterTitle })), onClose && (_jsx(Button, { className: styles.closeButton, view: 'elevated', appearance: 'neutral', size: 's', icon: _jsx(CrossSVG, { size: 16 }), onClick: handleClose, "aria-label": t('close'), "data-test-id": MENU_BANNER_TEST_IDS.close }))] }) }));
22
20
  }
@@ -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
  }
@@ -22,7 +22,7 @@ export function ContentToolbar({ segment, onSegmentChange, segmentItems, allGrou
22
22
  startTransition(() => preferences?.showDescription?.onChange(value));
23
23
  };
24
24
  const hasSegmentItems = segmentItems && segmentItems?.length > 0;
25
- return (_jsxs("div", { className: styles.root, "data-test-id": TEST_IDS.toolbar, children: [hasSegmentItems && (_jsx(WithSkeleton, { loading: loading, skeleton: _jsx("div", { className: styles.segmentControlSkeleton, "data-test-id": TEST_IDS.segmentControl, "data-mobile": isMobile || undefined, children: _jsx(Skeleton, { className: styles.segmentControlSkeletonBlock }) }), children: _jsx(SegmentControl, { size: 'm', outline: true, value: segment, onChange: onSegmentChange, className: styles.segmentControl, "data-test-id": TEST_IDS.segmentControl, items: segmentItems, width: isMobile ? 'full' : 'auto' }) })), (preferences || !isMobile) && !loading && (_jsxs("div", { className: styles.actions, children: [preferences && (_jsxs(_Fragment, { children: [_jsx(HeaderButton, { icon: _jsx(SettingsSVG, {}), "aria-label": t('menuSettingsTitle'), "data-test-id": TEST_IDS.settingsButton, onClick: openModal, tooltip: { tip: t('menuSettingsTitle') } }), _jsx(Modal, { open: open, onClose: closeModal, title: t('menuSettingsTitle'), "data-test-id": TEST_IDS.settingsModal, cancelButton: {
25
+ return (_jsxs("div", { className: styles.root, "data-mobile": isMobile || undefined, "data-test-id": TEST_IDS.toolbar, children: [hasSegmentItems && (_jsx(WithSkeleton, { loading: loading, skeleton: _jsx("div", { className: styles.segmentControlSkeleton, "data-test-id": TEST_IDS.segmentControl, "data-mobile": isMobile || undefined, children: _jsx(Skeleton, { className: styles.segmentControlSkeletonBlock }) }), children: _jsx(SegmentControl, { size: 'm', outline: true, value: segment, onChange: onSegmentChange, className: styles.segmentControl, "data-test-id": TEST_IDS.segmentControl, items: segmentItems, width: isMobile ? 'full' : 'auto' }) })), (preferences || !isMobile) && !loading && (_jsxs("div", { className: styles.actions, children: [preferences && (_jsxs(_Fragment, { children: [_jsx(HeaderButton, { icon: _jsx(SettingsSVG, {}), "aria-label": t('menuSettingsTitle'), "data-test-id": TEST_IDS.settingsButton, onClick: openModal, tooltip: { tip: t('menuSettingsTitle') } }), _jsx(Modal, { open: open, onClose: closeModal, title: t('menuSettingsTitle'), "data-test-id": TEST_IDS.settingsModal, cancelButton: {
26
26
  label: t('close'),
27
27
  onClick: closeModal,
28
28
  }, content: _jsxs("div", { className: styles.settingsContent, children: [preferences.showGroupsColors && (_jsx(SwitchRow, { title: t('menuSettingsShowGroupsColors'), checked: preferences.showGroupsColors.value, onChange: preferences.showGroupsColors.onChange, "data-test-id": TEST_IDS.settingsShowGroupsColorsSwitch })), _jsx(SwitchRow, { title: t('menuSettingsShowDescription'), checked: preferences.showDescription.value, onChange: handleShowDescriptionChange, "data-test-id": TEST_IDS.settingsShowDescriptionSwitch })] }) })] })), !isMobile && (_jsx(HeaderButton, { icon: allGroupsExpanded ? _jsx(CollapseVerticalSVG, {}) : _jsx(ExpandVerticalSVG, {}), "aria-label": allGroupsExpanded ? t('contentCollapseAllGroups') : t('contentExpandAllGroups'), "data-test-id": 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);
@@ -4,7 +4,7 @@ import { DraggableServiceCard } from '../../../../ServiceCard/index.js';
4
4
  import styles from '../styles.module.css';
5
5
  import { SubCategory } from './SubCategory/index.js';
6
6
  export function SortableGroupCards({ groupId, items, showDescription, isMobile, enableServiceDrag, favorite, groupFavoritesEnabled, onServiceClick, }) {
7
- return (_jsx("div", { className: styles.groupBody, "data-mobile": isMobile || undefined, children: items.map(service => {
7
+ return (_jsx("div", { className: styles.groupBody, "data-mobile": isMobile || undefined, "data-show-description": showDescription || undefined, children: items.map(service => {
8
8
  if (service.hidden) {
9
9
  return null;
10
10
  }
@@ -31,10 +31,10 @@ export function SubCategory({ groupId, service, showDescription, isMobile, dragD
31
31
  return (_jsxs("div", { className: styles.subcategory, "data-test-id": `${TEST_IDS.subcategory}-${service.id}`, children: [_jsx(SubCategoryTitle, { groupId: groupId, service: service, expandable: {
32
32
  value: Boolean(isExpanded),
33
33
  onClick: handleExpandedChange,
34
- }, showDescription: showDescription, isMobile: isMobile, dragDisabled: dragDisabled, favorite: groupFavoritesEnabled ? favorite : undefined, onServiceClick: onServiceClick }), _jsx("div", { className: baseGroupStyles.groupBody, "data-subcategory-body": 'expanded', "data-mobile": isMobile || undefined, children: nestedItems.map(nestedService => (_jsx(DraggableServiceCard, { groupId: nestedGroupId, service: nestedService, favorite: favorite, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescription, dragDisabled: dragDisabled }, nestedGroupId + nestedService.id))) })] }));
34
+ }, showDescription: showDescription, isMobile: isMobile, dragDisabled: dragDisabled, favorite: groupFavoritesEnabled ? favorite : undefined, onServiceClick: onServiceClick }), _jsx("div", { className: baseGroupStyles.groupBody, "data-subcategory-body": 'expanded', "data-mobile": isMobile || undefined, "data-show-description": showDescription || undefined, children: nestedItems.map(nestedService => (_jsx(DraggableServiceCard, { groupId: nestedGroupId, service: nestedService, favorite: favorite, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescription, dragDisabled: dragDisabled }, nestedGroupId + nestedService.id))) })] }));
35
35
  }
36
36
  return (_jsx("div", { className: styles.subcategory, "data-test-id": `${TEST_IDS.subcategory}-${service.id}`, children: _jsx(Accordion, { selectionMode: 'single', expanded: isExpanded, onExpandedChange: handleExpandedChange, children: _jsx(Accordion.CollapseBlockTertiary, { id: subcategoryId, showChevron: false, className: styles.subcategoryAccordion, afterTitle: _jsx(SubCategoryTitle, { groupId: groupId, service: service, expandable: {
37
37
  value: Boolean(isExpanded),
38
38
  onClick: handleExpandedChange,
39
- }, showDescription: showDescription, isMobile: isMobile, dragDisabled: dragDisabled, favorite: groupFavoritesEnabled ? favorite : undefined, onServiceClick: onServiceClick }), children: _jsx("div", { className: baseGroupStyles.groupBody, "data-subcategory-body": true, "data-mobile": isMobile || undefined, children: nestedItems.map(nestedService => (_jsx(DraggableServiceCard, { groupId: nestedGroupId, service: nestedService, favorite: favorite, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescription, dragDisabled: dragDisabled }, nestedGroupId + nestedService.id))) }) }) }) }));
39
+ }, showDescription: showDescription, isMobile: isMobile, dragDisabled: dragDisabled, favorite: groupFavoritesEnabled ? favorite : undefined, onServiceClick: onServiceClick }), children: _jsx("div", { className: baseGroupStyles.groupBody, "data-subcategory-body": true, "data-mobile": isMobile || undefined, "data-show-description": showDescription || undefined, children: nestedItems.map(nestedService => (_jsx(DraggableServiceCard, { groupId: nestedGroupId, service: nestedService, favorite: favorite, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescription, dragDisabled: dragDisabled }, nestedGroupId + nestedService.id))) }) }) }) }));
40
40
  }
@@ -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;
@@ -8,6 +8,7 @@ import { CardServiceLight } from '@cloud-ru/ds-uikit-product-card-predefined';
8
8
  import { useValueControl } from '@cloud-ru/ds-utils';
9
9
  import cn from 'classnames';
10
10
  import { useMemo } from 'react';
11
+ import { useDesktopComfortClassName } from '../../../../hooks/useDesktopComfortClassName.js';
11
12
  import { headerLocale } from '../../../../locale/index.js';
12
13
  import { resolveInnerLinksByIds } from '../../utils/index.js';
13
14
  import { EmptyState, FavoritesItemsSkeleton, FavoritesSortable } from './components/index.js';
@@ -17,6 +18,7 @@ import { getCommonCardProps } from './utils.js';
17
18
  export function Favorites({ favorite, allServiceGroups, headerClassName, isMobile }) {
18
19
  const { t } = headerLocale.useTranslations();
19
20
  const loading = favorite.loading;
21
+ const comfortClassName = useDesktopComfortClassName();
20
22
  const [segment, setSegment] = useValueControl({
21
23
  value: favorite.segment,
22
24
  defaultValue: FAVORITES_SEGMENT.Favorites,
@@ -59,5 +61,5 @@ export function Favorites({ favorite, allServiceGroups, headerClassName, isMobil
59
61
  onChange: favorite.onChange(service.id),
60
62
  }, ...getCommonCardProps(service, handleFavoriteServiceClick(service)) }, service.id))), !isEmpty && !isFavoritesSegment && recentCards] }) }) })) : (_jsx(FavoritesSortable, { favorite: favorite, favoriteItems: favoriteItems, segment: resolvedSegment, setSegment: setSegment, isEmpty: isEmpty, recentCards: recentCards, onFavoriteServiceClick: handleFavoriteServiceClick }));
61
63
  })();
62
- return (_jsxs("div", { className: styles.root, "data-test-id": FAVORITES_TEST_IDS.root, children: [_jsxs("div", { className: cn(styles.header, headerClassName), "data-test-id": FAVORITES_TEST_IDS.header, children: [_jsx(SegmentControl, { size: 'm', width: WIDTH.Full, value: loading ? undefined : segment, onChange: setSegment, className: styles.segmentControl, "data-test-id": FAVORITES_TEST_IDS.segmentControl, items: segmentControlItems }), favorite.actions && (_jsx(Droplist, { size: 'm', ...favorite.actions, closeDroplistOnItemClick: true, children: _jsx(Button, { view: 'function', size: 'm', appearance: 'neutral', icon: _jsx(KebabSVG, { size: 24 }), "data-test-id": FAVORITES_TEST_IDS.settingsButton, disabled: loading }) }))] }), content] }));
64
+ return (_jsxs("div", { className: styles.root, "data-test-id": FAVORITES_TEST_IDS.root, children: [_jsxs("div", { className: cn(styles.header, headerClassName), "data-test-id": FAVORITES_TEST_IDS.header, children: [_jsx(SegmentControl, { size: 'm', width: WIDTH.Full, value: loading ? undefined : segment, onChange: setSegment, className: styles.segmentControl, "data-test-id": FAVORITES_TEST_IDS.segmentControl, items: segmentControlItems }), favorite.actions && (_jsx(Droplist, { size: 'm', ...favorite.actions, className: comfortClassName, closeDroplistOnItemClick: true, children: _jsx(Button, { view: 'function', size: 'm', appearance: 'neutral', icon: _jsx(KebabSVG, { size: 24 }), "data-test-id": FAVORITES_TEST_IDS.settingsButton, disabled: loading }) }))] }), content] }));
63
65
  }
@@ -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;
@@ -5,7 +5,7 @@ import cn from 'classnames';
5
5
  import { headerLocale } from '../../../../locale/index.js';
6
6
  import { HeaderButton } from '../../../HeaderButton/index.js';
7
7
  import styles from './styles.module.css';
8
- export function MenuHeaderBrand({ logo, onClose, className }) {
8
+ export function MenuHeaderBrand({ logo, onClose, className, isMobile }) {
9
9
  const { t } = headerLocale.useTranslations();
10
- return (_jsxs("div", { className: cn(styles.container, className), children: [logo, _jsx(Divider, { orientation: 'vertical' }), _jsx(HeaderButton, { className: styles.closeButton, onClick: onClose, icon: _jsx(ChevronLeftSVG, {}), label: t('close') })] }));
10
+ return (_jsxs("div", { className: cn(styles.container, className), "data-mobile": isMobile || undefined, children: [logo, _jsx(Divider, { orientation: 'vertical' }), _jsx(HeaderButton, { className: styles.closeButton, onClick: onClose, icon: _jsx(ChevronLeftSVG, {}), label: t('close') })] }));
11
11
  }
@@ -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;
@@ -1,6 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { Divider } from '@cloud-ru/ds-divider';
3
- import { ChildThemeProvider, DENSITY } from '@cloud-ru/ds-theme';
4
3
  import { useValueControl } from '@cloud-ru/ds-utils';
5
4
  import { useCallback, useMemo } from 'react';
6
5
  import { BOTTOM_SHEET_FULLSCREEN_SNAP_POINTS, TEST_IDS } from '../../../../constants.js';
@@ -34,9 +33,5 @@ export function MenuMobile({ open: openProp, setOpen: setOpenProp, settingItems,
34
33
  const handleClose = useCallback(() => {
35
34
  setOpen(false);
36
35
  }, [setOpen]);
37
- return (
38
- // Временная фиксация comfort (см. `HeaderLayout`): `MainMenu` используется и отдельно от
39
- // `HeaderLayout`, поэтому объявляем плотность здесь же. Обёртка провайдера layout-прозрачная
40
- // (`display: contents`) — меню рендерится порталом, лишний бокс в строке шапки не нужен.
41
- _jsx(ChildThemeProvider, { value: { density: DENSITY.Comfort }, className: styles.densityScope, children: _jsx(MobileDrawerCustom, { open: open, onClose: handleClose, position: 'bottom', className: styles.drawerMobile, swipeEnabled: false, "data-test-id": TEST_IDS.mainMenu.drawerMobile, closeOnPopstate: true, snapPoints: BOTTOM_SHEET_FULLSCREEN_SNAP_POINTS, disableMotions: true, children: _jsx(ScrollWithAnimatedStickyPanel, { panel: _jsxs(_Fragment, { children: [_jsx(MenuHeaderBrand, { logo: logo, onClose: handleClose, className: styles.menuHeader }), _jsx(Divider, { orientation: 'horizontal' })] }), children: _jsxs(MountAnimation, { className: styles.scrollMobile, type: 'fade-slide-up', children: [leftTop && _jsx("div", { className: styles.rightContent, children: leftTop }), search && _jsx(Search, { ...search, ref: searchRef, isMobile: true }), !isSearching && favorite && _jsx(Favorites, { favorite: favorite, allServiceGroups: allServiceGroups, isMobile: true }), hasSegments && (_jsx(MainMenuDndContext, { children: _jsx(Content, { isMobile: true, className: styles.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 && _jsx(MenuBottom, { settingItems: settingItems, leftBottom: leftBottom })] }) }) }) }));
36
+ return (_jsx(MobileDrawerCustom, { open: open, onClose: handleClose, position: 'bottom', className: styles.drawerMobile, swipeEnabled: false, "data-test-id": TEST_IDS.mainMenu.drawerMobile, closeOnPopstate: true, snapPoints: BOTTOM_SHEET_FULLSCREEN_SNAP_POINTS, disableMotions: true, children: _jsx(ScrollWithAnimatedStickyPanel, { panel: _jsxs(_Fragment, { children: [_jsx(MenuHeaderBrand, { logo: logo, onClose: handleClose, className: styles.menuHeader, isMobile: true }), _jsx(Divider, { orientation: 'horizontal' })] }), children: _jsxs(MountAnimation, { className: styles.scrollMobile, type: 'fade-slide-up', children: [leftTop && _jsx("div", { className: styles.rightContent, children: leftTop }), search && _jsx(Search, { ...search, ref: searchRef, isMobile: true }), !isSearching && favorite && _jsx(Favorites, { favorite: favorite, allServiceGroups: allServiceGroups, isMobile: true }), hasSegments && (_jsx(MainMenuDndContext, { children: _jsx(Content, { isMobile: true, className: styles.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 && _jsx(MenuBottom, { settingItems: settingItems, leftBottom: leftBottom })] }) }) }));
42
37
  }
@@ -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);