@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.
Files changed (43) hide show
  1. package/README.md +6 -2
  2. package/dist/cjs/components/MainMenu/helperComponents/Banners/MenuBanner.d.ts +1 -1
  3. package/dist/cjs/components/MainMenu/helperComponents/Banners/MenuBanner.js +3 -2
  4. package/dist/cjs/components/MainMenu/helperComponents/Banners/styles.module.css +11 -15
  5. package/dist/cjs/components/MainMenu/helperComponents/Content/Content.js +0 -5
  6. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.js +1 -1
  7. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.js +16 -2
  8. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/styles.module.css +7 -1
  9. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.css +3 -0
  10. package/dist/cjs/components/MainMenu/helperComponents/Favorites/styles.module.css +2 -2
  11. package/dist/cjs/components/MainMenu/helperComponents/ServiceCard/ServiceCard.js +0 -3
  12. package/dist/cjs/components/MainMenu/types.d.ts +14 -3
  13. package/dist/cjs/components/MainMenu/utils/innerLink.d.ts +10 -0
  14. package/dist/cjs/components/MainMenu/utils/innerLink.js +20 -0
  15. package/dist/cjs/style.css +23 -18
  16. package/dist/esm/components/MainMenu/helperComponents/Banners/MenuBanner.d.ts +1 -1
  17. package/dist/esm/components/MainMenu/helperComponents/Banners/MenuBanner.js +3 -2
  18. package/dist/esm/components/MainMenu/helperComponents/Banners/styles.module.css +11 -15
  19. package/dist/esm/components/MainMenu/helperComponents/Content/Content.js +1 -6
  20. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.js +2 -2
  21. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.js +17 -3
  22. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/styles.module.css +7 -1
  23. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.css +3 -0
  24. package/dist/esm/components/MainMenu/helperComponents/Favorites/styles.module.css +2 -2
  25. package/dist/esm/components/MainMenu/helperComponents/ServiceCard/ServiceCard.js +0 -3
  26. package/dist/esm/components/MainMenu/types.d.ts +14 -3
  27. package/dist/esm/components/MainMenu/utils/innerLink.d.ts +10 -0
  28. package/dist/esm/components/MainMenu/utils/innerLink.js +19 -0
  29. package/dist/esm/style.css +23 -18
  30. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  31. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  32. package/package.json +28 -27
  33. package/src/components/MainMenu/helperComponents/Banners/MenuBanner.tsx +44 -42
  34. package/src/components/MainMenu/helperComponents/Banners/styles.module.scss +15 -22
  35. package/src/components/MainMenu/helperComponents/Content/Content.tsx +1 -7
  36. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.tsx +2 -2
  37. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.tsx +61 -2
  38. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/styles.module.scss +10 -1
  39. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.scss +5 -0
  40. package/src/components/MainMenu/helperComponents/Favorites/styles.module.scss +3 -2
  41. package/src/components/MainMenu/helperComponents/ServiceCard/ServiceCard.tsx +0 -4
  42. package/src/components/MainMenu/types.ts +15 -3
  43. 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
- /** Разрешено ли раскрытие карточки. default=false - Запрещено */
40
- expandableEnabled?: boolean;
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) {
@@ -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-4, 4px);
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-48, 48px);
121
+ min-height:var(--sn-primitive-dimension-40, 40px);
114
122
  padding:0 var(--sn-primitive-dimension-12, 12px);
115
- border-radius:var(--sn-density-radius-2xs, var(--sn-primitive-dimension-4, 4px));
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:0;
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:0;
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))));