@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.
- package/README.md +0 -1
- package/dist/cjs/components/HeaderButton/HeaderButton.js +1 -3
- package/dist/cjs/components/HeaderLayout/HeaderLayout.js +1 -12
- package/dist/cjs/components/HeaderLayout/styles.module.css +8 -1
- package/dist/cjs/components/Logo/styles.module.css +1 -0
- package/dist/cjs/components/MainMenu/helperComponents/Banners/MenuBanner.js +1 -3
- package/dist/cjs/components/MainMenu/helperComponents/Banners/styles.module.css +1 -0
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.js +1 -1
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/styles.module.css +1 -0
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.js +1 -1
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.js +2 -2
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.css +9 -2
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/Favorites.js +3 -1
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/styles.module.css +5 -2
- package/dist/cjs/components/MainMenu/helperComponents/MenuDesktop/styles.module.css +2 -1
- package/dist/cjs/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.d.ts +2 -1
- package/dist/cjs/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.js +2 -2
- package/dist/cjs/components/MainMenu/helperComponents/MenuHeaderBrand/styles.module.css +3 -0
- package/dist/cjs/components/MainMenu/helperComponents/MenuMobile/MenuMobile.js +1 -6
- package/dist/cjs/components/MainMenu/helperComponents/MenuMobile/styles.module.css +1 -5
- package/dist/cjs/components/MainMenu/helperComponents/MountAnimation/styles.module.css +6 -6
- package/dist/cjs/components/MainMenu/helperComponents/Search/styles.module.css +3 -1
- package/dist/cjs/components/PathBreadcrumbs/PathBreadcrumbs.d.ts +1 -2
- package/dist/cjs/components/PathBreadcrumbs/PathBreadcrumbs.js +2 -2
- package/dist/cjs/components/PlatformLogo/styles.module.css +3 -1
- package/dist/cjs/components/UserMenu/UserMenu.js +5 -1
- package/dist/cjs/components/UserMenu/styles.module.css +1 -1
- package/dist/cjs/hooks/useDesktopComfortClassName.d.ts +2 -0
- package/dist/cjs/hooks/useDesktopComfortClassName.js +11 -0
- package/dist/cjs/hooks/useMobileLayout.js +1 -0
- package/dist/cjs/locale/index.d.ts +8 -8
- package/dist/cjs/locale/index.js +4 -4
- package/dist/cjs/style.css +44 -20
- package/dist/esm/components/HeaderButton/HeaderButton.js +1 -3
- package/dist/esm/components/HeaderLayout/HeaderLayout.js +1 -12
- package/dist/esm/components/HeaderLayout/styles.module.css +8 -1
- package/dist/esm/components/Logo/styles.module.css +1 -0
- package/dist/esm/components/MainMenu/helperComponents/Banners/MenuBanner.js +1 -3
- package/dist/esm/components/MainMenu/helperComponents/Banners/styles.module.css +1 -0
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.js +1 -1
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/styles.module.css +1 -0
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.js +1 -1
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.js +2 -2
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.css +9 -2
- package/dist/esm/components/MainMenu/helperComponents/Favorites/Favorites.js +3 -1
- package/dist/esm/components/MainMenu/helperComponents/Favorites/styles.module.css +5 -2
- package/dist/esm/components/MainMenu/helperComponents/MenuDesktop/styles.module.css +2 -1
- package/dist/esm/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.d.ts +2 -1
- package/dist/esm/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.js +2 -2
- package/dist/esm/components/MainMenu/helperComponents/MenuHeaderBrand/styles.module.css +3 -0
- package/dist/esm/components/MainMenu/helperComponents/MenuMobile/MenuMobile.js +1 -6
- package/dist/esm/components/MainMenu/helperComponents/MenuMobile/styles.module.css +1 -5
- package/dist/esm/components/MainMenu/helperComponents/MountAnimation/styles.module.css +6 -6
- package/dist/esm/components/MainMenu/helperComponents/Search/styles.module.css +3 -1
- package/dist/esm/components/PathBreadcrumbs/PathBreadcrumbs.d.ts +1 -2
- package/dist/esm/components/PathBreadcrumbs/PathBreadcrumbs.js +2 -2
- package/dist/esm/components/PlatformLogo/styles.module.css +3 -1
- package/dist/esm/components/UserMenu/UserMenu.js +5 -1
- package/dist/esm/components/UserMenu/styles.module.css +1 -1
- package/dist/esm/hooks/useDesktopComfortClassName.d.ts +2 -0
- package/dist/esm/hooks/useDesktopComfortClassName.js +8 -0
- package/dist/esm/hooks/useMobileLayout.js +1 -0
- package/dist/esm/locale/index.d.ts +8 -8
- package/dist/esm/locale/index.js +4 -4
- package/dist/esm/style.css +44 -20
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +28 -28
- package/src/components/HeaderButton/HeaderButton.tsx +1 -4
- package/src/components/HeaderLayout/HeaderLayout.tsx +10 -21
- package/src/components/HeaderLayout/styles.module.scss +11 -1
- package/src/components/Logo/styles.module.scss +1 -0
- package/src/components/MainMenu/helperComponents/Banners/MenuBanner.tsx +1 -3
- package/src/components/MainMenu/helperComponents/Banners/styles.module.scss +1 -0
- package/src/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.tsx +1 -1
- package/src/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/styles.module.scss +2 -0
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.tsx +5 -1
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.tsx +12 -2
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.scss +13 -2
- package/src/components/MainMenu/helperComponents/Favorites/Favorites.tsx +3 -1
- package/src/components/MainMenu/helperComponents/Favorites/styles.module.scss +12 -7
- package/src/components/MainMenu/helperComponents/MenuDesktop/styles.module.scss +4 -2
- package/src/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.tsx +3 -2
- package/src/components/MainMenu/helperComponents/MenuHeaderBrand/styles.module.scss +4 -0
- package/src/components/MainMenu/helperComponents/MenuMobile/MenuMobile.tsx +46 -52
- package/src/components/MainMenu/helperComponents/MenuMobile/styles.module.scss +1 -7
- package/src/components/MainMenu/helperComponents/MountAnimation/styles.module.scss +4 -2
- package/src/components/MainMenu/helperComponents/Search/styles.module.scss +3 -3
- package/src/components/PathBreadcrumbs/PathBreadcrumbs.tsx +2 -3
- package/src/components/PlatformLogo/styles.module.scss +4 -1
- package/src/components/UserMenu/UserMenu.tsx +5 -1
- package/src/components/UserMenu/styles.module.scss +1 -1
- package/src/hooks/useDesktopComfortClassName.ts +11 -0
- package/src/hooks/useMobileLayout.ts +1 -0
- package/src/locale/index.ts +4 -4
package/dist/cjs/locale/index.js
CHANGED
|
@@ -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: '
|
|
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: 'Системная',
|
package/dist/cjs/style.css
CHANGED
|
@@ -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-
|
|
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)
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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,
|
|
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
|
-
|
|
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
|
}
|
|
@@ -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:
|
|
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
|
}
|
|
@@ -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') } }))] }))] }));
|
|
@@ -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-
|
|
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)
|
|
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)
|
|
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);
|