@cloud-ru/ds-uikit-product-header 1.3.9 → 1.3.10-preview-1030ded1.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 +6 -2
- package/dist/cjs/components/MainMenu/helperComponents/Banners/MenuBanner.d.ts +1 -1
- package/dist/cjs/components/MainMenu/helperComponents/Banners/MenuBanner.js +3 -2
- package/dist/cjs/components/MainMenu/helperComponents/Banners/styles.module.css +11 -15
- package/dist/cjs/components/MainMenu/helperComponents/Content/Content.js +0 -5
- 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 +16 -2
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/styles.module.css +7 -1
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.css +3 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/styles.module.css +2 -2
- package/dist/cjs/components/MainMenu/helperComponents/ServiceCard/ServiceCard.js +0 -3
- package/dist/cjs/components/MainMenu/types.d.ts +14 -3
- package/dist/cjs/components/MainMenu/utils/innerLink.d.ts +10 -0
- package/dist/cjs/components/MainMenu/utils/innerLink.js +20 -0
- package/dist/cjs/style.css +23 -18
- package/dist/esm/components/MainMenu/helperComponents/Banners/MenuBanner.d.ts +1 -1
- package/dist/esm/components/MainMenu/helperComponents/Banners/MenuBanner.js +3 -2
- package/dist/esm/components/MainMenu/helperComponents/Banners/styles.module.css +11 -15
- package/dist/esm/components/MainMenu/helperComponents/Content/Content.js +1 -6
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.js +2 -2
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.js +17 -3
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/styles.module.css +7 -1
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.css +3 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/styles.module.css +2 -2
- package/dist/esm/components/MainMenu/helperComponents/ServiceCard/ServiceCard.js +0 -3
- package/dist/esm/components/MainMenu/types.d.ts +14 -3
- package/dist/esm/components/MainMenu/utils/innerLink.d.ts +10 -0
- package/dist/esm/components/MainMenu/utils/innerLink.js +19 -0
- package/dist/esm/style.css +23 -18
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +28 -27
- package/src/components/MainMenu/helperComponents/Banners/MenuBanner.tsx +44 -42
- package/src/components/MainMenu/helperComponents/Banners/styles.module.scss +15 -22
- package/src/components/MainMenu/helperComponents/Content/Content.tsx +1 -7
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.tsx +2 -2
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.tsx +61 -2
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/styles.module.scss +10 -1
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.scss +5 -0
- package/src/components/MainMenu/helperComponents/Favorites/styles.module.scss +3 -2
- package/src/components/MainMenu/helperComponents/ServiceCard/ServiceCard.tsx +0 -4
- package/src/components/MainMenu/types.ts +15 -3
- package/src/components/MainMenu/utils/innerLink.ts +23 -0
|
@@ -44,8 +44,5 @@ export function DraggableServiceCard({ groupId, service, favorite, dragDisabled,
|
|
|
44
44
|
disabled,
|
|
45
45
|
});
|
|
46
46
|
const { tabIndex, ...restAttributes } = attributes ?? {};
|
|
47
|
-
if (disabled) {
|
|
48
|
-
return _jsx(ServiceCard, { service: service, favorite: favorite, ...props, tabIndex: tabIndex });
|
|
49
|
-
}
|
|
50
47
|
return (_jsx(DragGhost, { innerRef: setNodeRef, className: styles.draggableCard, dragging: isDragging, mode: DRAG_MODE.Static, ...listeners, ...restAttributes, children: _jsx(ServiceCard, { service: service, favorite: favorite, ...props, tabIndex: tabIndex }) }));
|
|
51
48
|
}
|
|
@@ -4,6 +4,7 @@ import { CardServiceLightProps } from '@cloud-ru/ds-uikit-product-card-predefine
|
|
|
4
4
|
import { JSXElementConstructor, MouseEvent, ReactNode } from 'react';
|
|
5
5
|
import { ContentProps } from './helperComponents/Content/index.js';
|
|
6
6
|
import { FavoritesSegment } from './helperComponents/Favorites/constants.js';
|
|
7
|
+
export type InnerLinkViewMode = 'group-title-only' | 'flat-link' | 'expanded' | 'expandable';
|
|
7
8
|
/**
|
|
8
9
|
* Карточка сервиса или ссылки внутри {@link LinksGroup}.
|
|
9
10
|
*
|
|
@@ -36,15 +37,25 @@ export type InnerLink = {
|
|
|
36
37
|
badge?: CardServiceLightProps['promoTag'];
|
|
37
38
|
/** Разрешено ли добавление карточки в избранное. default=true - разрешено */
|
|
38
39
|
favoritesEnabled?: boolean;
|
|
39
|
-
/**
|
|
40
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Режим отображения карточки. default='expandable'.
|
|
42
|
+
*
|
|
43
|
+
* - `'expandable'` — подкатегория при наличии реальных {@link items}: заголовок
|
|
44
|
+
* {@link TitleClickable} с шевроном и сетка вложенных сервисов (раскрытие/схлопывание —
|
|
45
|
+
* см. {@link expandableEnabled}). Без `items` — обычная карточка сервиса.
|
|
46
|
+
* - `'group-title-only'` — заголовок подкатегории ({@link TitleClickable} с шевроном) без
|
|
47
|
+
* раскрываемого тела, даже если `items` заданы: карточка ведёт себя как обычная ссылка.
|
|
48
|
+
* Полезно для группы, чьи вложенные сервисы показываются на отдельной странице.
|
|
49
|
+
* - `'flat-link'` — всегда обычная карточка сервиса, даже если `items` заданы.
|
|
50
|
+
*/
|
|
51
|
+
viewMode?: InnerLinkViewMode;
|
|
41
52
|
/**
|
|
42
53
|
* Вложенные сервисы подкатегории.
|
|
43
54
|
*
|
|
44
55
|
* При наличии карточка раскрывается аккордеоном: в свёрнутом виде — обычная карточка
|
|
45
56
|
* с кнопкой раскрытия, в развёрнутом — заголовок {@link TitleClickable} и сетка вложенных сервисов.
|
|
46
57
|
*/
|
|
47
|
-
items?: InnerLink[];
|
|
58
|
+
items?: Omit<InnerLink, 'items' | 'viewMode' | 'expandableEnabled'>[];
|
|
48
59
|
/**
|
|
49
60
|
* Синонимы для fuzzy-поиска.
|
|
50
61
|
*/
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import { InnerLink, LinksGroup } from '../types.js';
|
|
2
2
|
export declare function hasNestedItems(item: InnerLink): boolean;
|
|
3
|
+
/**
|
|
4
|
+
* Рендерится ли карточка как подкатегория (заголовок {@link TitleClickable} + вложенная сетка).
|
|
5
|
+
*
|
|
6
|
+
* Решение зависит от `viewMode` (не указан — считается `'expandable'`):
|
|
7
|
+
* - `'flat-link'` — никогда, карточка всегда обычная ссылка, даже если `items` заданы.
|
|
8
|
+
* - `'group-title-only'` — всегда, даже без `items`: только заголовок, без раскрываемого тела
|
|
9
|
+
* и кнопки переключения — карточка ведёт себя как обычная ссылка.
|
|
10
|
+
* - `'expandable'` — только при наличии реальных вложенных сервисов.
|
|
11
|
+
*/
|
|
12
|
+
export declare function isSubCategoryCard(item: InnerLink): boolean;
|
|
3
13
|
export declare function flatInnerLinks(items?: InnerLink[]): InnerLink[];
|
|
4
14
|
export declare function getLinksGroupVisibleItemsCount(group: LinksGroup): number;
|
|
5
15
|
export declare function getSubCategoryId(groupId: string, serviceId: string): string;
|
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
export function hasNestedItems(item) {
|
|
2
2
|
return Boolean(item.items?.some(child => !child.hidden));
|
|
3
3
|
}
|
|
4
|
+
/**
|
|
5
|
+
* Рендерится ли карточка как подкатегория (заголовок {@link TitleClickable} + вложенная сетка).
|
|
6
|
+
*
|
|
7
|
+
* Решение зависит от `viewMode` (не указан — считается `'expandable'`):
|
|
8
|
+
* - `'flat-link'` — никогда, карточка всегда обычная ссылка, даже если `items` заданы.
|
|
9
|
+
* - `'group-title-only'` — всегда, даже без `items`: только заголовок, без раскрываемого тела
|
|
10
|
+
* и кнопки переключения — карточка ведёт себя как обычная ссылка.
|
|
11
|
+
* - `'expandable'` — только при наличии реальных вложенных сервисов.
|
|
12
|
+
*/
|
|
13
|
+
export function isSubCategoryCard(item) {
|
|
14
|
+
const viewMode = item.viewMode ?? 'expanded';
|
|
15
|
+
if (viewMode === 'flat-link') {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
if (viewMode === 'group-title-only') {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
return hasNestedItems(item);
|
|
22
|
+
}
|
|
4
23
|
export function flatInnerLinks(items = []) {
|
|
5
24
|
return items.flatMap(item => {
|
|
6
25
|
if (item.hidden) {
|
package/dist/esm/style.css
CHANGED
|
@@ -103,28 +103,24 @@
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
.root{
|
|
106
|
+
width:100%;
|
|
107
|
+
min-width:0;
|
|
108
|
+
}
|
|
109
|
+
.root:hover .closeButton, .root:focus-visible .closeButton, .root:has(*:focus-visible) .closeButton{
|
|
110
|
+
visibility:visible;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.contentRow{
|
|
106
114
|
position:relative;
|
|
107
115
|
display:flex;
|
|
108
|
-
gap:var(--sn-primitive-dimension-
|
|
116
|
+
gap:var(--sn-density-spacing-interval-s, var(--sn-primitive-dimension-8, 8px));
|
|
109
117
|
align-items:center;
|
|
110
118
|
box-sizing:border-box;
|
|
111
119
|
width:100%;
|
|
112
120
|
min-width:0;
|
|
113
|
-
min-height:var(--sn-primitive-dimension-
|
|
121
|
+
min-height:var(--sn-primitive-dimension-40, 40px);
|
|
114
122
|
padding:0 var(--sn-primitive-dimension-12, 12px);
|
|
115
|
-
border-radius:
|
|
116
|
-
font:inherit;
|
|
117
|
-
color:inherit;
|
|
118
|
-
text-align:left;
|
|
119
|
-
text-decoration:none;
|
|
120
|
-
background-color:var(--sn-theme-color-neutral-background1Level, var(--sn-brand-color-neutral-95, var(--sn-primitive-color-gray-95, #fdfdfd)));
|
|
121
|
-
}
|
|
122
|
-
.root:hover .closeButton, .root:focus-visible .closeButton, .root:focus-within .closeButton{
|
|
123
|
-
visibility:visible;
|
|
124
|
-
}
|
|
125
|
-
.root:focus-visible{
|
|
126
|
-
outline:var(--sn-theme-color-available-complementary, #000000) solid var(--sn-primitive-strokeWeight-strokeSemiBold, 2px);
|
|
127
|
-
outline-offset:var(--sn-primitive-strokeWeight-strokeSemiBold, 2px);
|
|
123
|
+
border-radius:inherit;
|
|
128
124
|
}
|
|
129
125
|
|
|
130
126
|
.titleWrapper{
|
|
@@ -207,12 +203,18 @@
|
|
|
207
203
|
.subcategory{
|
|
208
204
|
min-width:0;
|
|
209
205
|
}
|
|
210
|
-
.subcategory:has([data-subcategory-body]){
|
|
206
|
+
.subcategory:has([data-subcategory-body]), .subcategory[data-title-only]{
|
|
211
207
|
grid-column:1/-1;
|
|
212
208
|
padding:0 var(--sn-primitive-dimension-4, 4px);
|
|
213
209
|
border-radius:var(--sn-density-radius-2xs, var(--sn-primitive-dimension-4, 4px));
|
|
214
210
|
background-color:var(--sn-theme-color-neutral-decorTransparent, var(--sn-brand-color-neutral-transparent-forLightMode, rgba(124, 131, 182, 0.0784313725)));
|
|
215
211
|
}
|
|
212
|
+
.subcategory[data-title-only]{
|
|
213
|
+
padding:var(--sn-primitive-dimension-4, 4px);
|
|
214
|
+
}
|
|
215
|
+
.subcategory:has([data-subcategory-body=expanded]){
|
|
216
|
+
padding:var(--sn-primitive-dimension-4, 4px) var(--sn-primitive-dimension-4, 4px) 0;
|
|
217
|
+
}
|
|
216
218
|
|
|
217
219
|
.subcategoryAccordion{
|
|
218
220
|
min-width:0;
|
|
@@ -387,6 +389,9 @@
|
|
|
387
389
|
.groupBody[data-subcategory-body]{
|
|
388
390
|
padding-bottom:var(--sn-primitive-dimension-4, 4px);
|
|
389
391
|
}
|
|
392
|
+
.groupBody[data-subcategory-body=expanded]{
|
|
393
|
+
padding-top:var(--sn-accordion-anatomy-accordionTertiary-container-bodyContent-paddingVertical, var(--sn-primitive-dimension-4, 4px));
|
|
394
|
+
}
|
|
390
395
|
|
|
391
396
|
.decoration{
|
|
392
397
|
--highlight-border-width:1px;
|
|
@@ -540,7 +545,7 @@
|
|
|
540
545
|
align-items:center;
|
|
541
546
|
box-sizing:border-box;
|
|
542
547
|
width:100%;
|
|
543
|
-
min-height:
|
|
548
|
+
min-height:var(--sn-primitive-dimension-88, 88px);
|
|
544
549
|
padding:var(--sn-primitive-dimension-8, 8px) 0 0;
|
|
545
550
|
border-radius:var(--sn-density-radius-2xs, var(--sn-primitive-dimension-4, 4px));
|
|
546
551
|
background:var(--sn-theme-color-neutral-background1Level, var(--sn-brand-color-neutral-95, var(--sn-primitive-color-gray-95, #fdfdfd)));
|
|
@@ -567,7 +572,7 @@
|
|
|
567
572
|
position:relative;
|
|
568
573
|
flex:1 1 auto;
|
|
569
574
|
width:100%;
|
|
570
|
-
min-height:
|
|
575
|
+
min-height:var(--sn-primitive-dimension-44, 44px);
|
|
571
576
|
}
|
|
572
577
|
.listScroll[data-insert-new] [data-favorite]{
|
|
573
578
|
fill:var(--sn-theme-color-primary-accent, var(--sn-brand-color-primary-55, var(--sn-brandRole-color-brandA-55, var(--sn-primitive-color-brandA-55, #389f74))));
|