@cloud-ru/ds-uikit-product-header 2.1.4-preview-e8fab9b7.0 → 2.1.4-preview-20b4671f.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 (55) hide show
  1. package/README.md +0 -2
  2. package/dist/cjs/components/MainMenu/MainMenu.d.ts +1 -1
  3. package/dist/cjs/components/MainMenu/MainMenu.js +2 -2
  4. package/dist/cjs/components/MainMenu/helperComponents/Banners/styles.module.css +0 -1
  5. package/dist/cjs/components/MainMenu/helperComponents/Content/Content.d.ts +1 -5
  6. package/dist/cjs/components/MainMenu/helperComponents/Content/Content.js +3 -4
  7. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupDragHandle.d.ts +8 -1
  8. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupDragHandle.js +2 -2
  9. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.d.ts +2 -6
  10. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.js +1 -1
  11. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.css +10 -13
  12. package/dist/cjs/components/MainMenu/helperComponents/Content/styles.module.css +0 -15
  13. package/dist/cjs/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.d.ts +1 -1
  14. package/dist/cjs/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.js +4 -4
  15. package/dist/cjs/components/MainMenu/helperComponents/MenuDesktop/constants.d.ts +1 -1
  16. package/dist/cjs/components/MainMenu/helperComponents/MenuDesktop/constants.js +3 -3
  17. package/dist/cjs/components/MainMenu/hooks/useMainMenuDnd.js +0 -12
  18. package/dist/cjs/components/MainMenu/types.d.ts +1 -1
  19. package/dist/cjs/style.css +10 -37
  20. package/dist/esm/components/MainMenu/MainMenu.d.ts +1 -1
  21. package/dist/esm/components/MainMenu/MainMenu.js +2 -2
  22. package/dist/esm/components/MainMenu/helperComponents/Banners/styles.module.css +0 -1
  23. package/dist/esm/components/MainMenu/helperComponents/Content/Content.d.ts +1 -5
  24. package/dist/esm/components/MainMenu/helperComponents/Content/Content.js +3 -4
  25. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupDragHandle.d.ts +8 -1
  26. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupDragHandle.js +2 -2
  27. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.d.ts +2 -6
  28. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.js +1 -1
  29. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.css +10 -13
  30. package/dist/esm/components/MainMenu/helperComponents/Content/styles.module.css +0 -15
  31. package/dist/esm/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.d.ts +1 -1
  32. package/dist/esm/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.js +5 -5
  33. package/dist/esm/components/MainMenu/helperComponents/MenuDesktop/constants.d.ts +1 -1
  34. package/dist/esm/components/MainMenu/helperComponents/MenuDesktop/constants.js +2 -2
  35. package/dist/esm/components/MainMenu/hooks/useMainMenuDnd.js +1 -10
  36. package/dist/esm/components/MainMenu/types.d.ts +1 -1
  37. package/dist/esm/style.css +10 -37
  38. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  39. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  40. package/package.json +18 -18
  41. package/src/components/MainMenu/MainMenu.tsx +0 -2
  42. package/src/components/MainMenu/helperComponents/Banners/styles.module.scss +0 -1
  43. package/src/components/MainMenu/helperComponents/Content/Content.tsx +2 -12
  44. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupDragHandle.tsx +11 -1
  45. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.tsx +4 -9
  46. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.scss +19 -27
  47. package/src/components/MainMenu/helperComponents/Content/styles.module.scss +0 -22
  48. package/src/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.tsx +4 -6
  49. package/src/components/MainMenu/helperComponents/MenuDesktop/constants.ts +2 -2
  50. package/src/components/MainMenu/helperComponents/MenuDesktop/styles.module.scss +2 -6
  51. package/src/components/MainMenu/hooks/useMainMenuDnd.tsx +1 -12
  52. package/src/components/MainMenu/types.ts +0 -1
  53. package/dist/cjs/components/MainMenu/styles.module.css +0 -8
  54. package/dist/esm/components/MainMenu/styles.module.css +0 -8
  55. package/src/components/MainMenu/styles.module.scss +0 -10
@@ -8,7 +8,6 @@
8
8
  outline:none;
9
9
  }
10
10
  .headerActions[data-always-visible]{
11
- pointer-events:auto;
12
11
  opacity:1;
13
12
  }
14
13
 
@@ -64,25 +63,20 @@
64
63
  animation:none;
65
64
  }
66
65
  }
66
+ .group[data-drag-preview]{
67
+ cursor:grabbing;
68
+ }
67
69
  .group[data-drag-preview] .header{
70
+ cursor:grabbing;
68
71
  background-color:var(--sn-theme-color-neutral-decorTransparent, var(--sn-brand-color-neutral-transparent-forLightMode, rgba(136, 146, 170, 0.0784313725)));
69
72
  }
70
73
  .group[data-drag-preview] .header .headerActions{
71
74
  pointer-events:auto;
72
75
  opacity:1;
73
76
  }
74
- .group:has(:focus-visible) .headerActions{
75
- pointer-events:auto;
76
- opacity:1;
77
- }
78
- @media (hover: hover){
79
- .group:hover .headerActions{
80
- pointer-events:auto;
81
- opacity:1;
82
- }
83
- }
84
77
 
85
78
  .groupDragPreview{
79
+ cursor:grabbing;
86
80
  container-type:inline-size;
87
81
  border-radius:var(--sn-density-radius-2xs, var(--sn-platform-comfort-radius-2xs, var(--sn-primitive-dimension-4, 4px)));
88
82
  }
@@ -125,6 +119,7 @@
125
119
 
126
120
  .groupBody{
127
121
  display:grid;
122
+ grid-template-columns:repeat(3, minmax(auto, 1fr));
128
123
  gap:var(--sn-primitive-dimension-4, 4px);
129
124
  }
130
125
  .groupBody:not([data-subcategory-body]){
@@ -133,8 +128,10 @@
133
128
  .groupBody:not([data-show-description]){
134
129
  gap:0;
135
130
  }
136
- .groupBody:not([data-mobile]){
137
- grid-template-columns:repeat(auto-fill, minmax(240px, 1fr));
131
+ @container (width <= 728px){
132
+ .groupBody:not([data-mobile]){
133
+ grid-template-columns:repeat(2, minmax(auto, 1fr));
134
+ }
138
135
  }
139
136
  .groupBody[data-mobile]{
140
137
  grid-template-columns:repeat(1, minmax(200px, 1fr));
@@ -21,21 +21,6 @@
21
21
  gap:inherit;
22
22
  }
23
23
 
24
- .rightTop{
25
- width:100%;
26
- min-width:0;
27
- }
28
- .rightTop:not([data-mobile]){
29
- display:grid;
30
- grid-template-columns:repeat(auto-fit, minmax(max(252px, (100% - var(--sn-primitive-dimension-4, 4px)) / 2), 1fr));
31
- gap:var(--sn-primitive-dimension-4, 4px);
32
- }
33
- .rightTop[data-mobile]{
34
- display:flex;
35
- flex-direction:column;
36
- gap:var(--sn-primitive-dimension-8, 8px);
37
- }
38
-
39
24
  .noData{
40
25
  flex:1 1 auto;
41
26
  place-self:center center;
@@ -1,2 +1,2 @@
1
1
  import { MainMenuProps } from '../../types.js';
2
- export declare function MenuDesktop({ open, setOpen, settingItems, platformGroups, segments, segmentPrefs, activeSegmentId, onActiveSegmentChange, onSegmentOrderChange, onSegmentExpandedChange, onToggleAllGroupsExpanded, onSegmentServiceClick, favorite, search, preferences, logo, rightTop, leftTop, leftBottom, defaultWidth, onWidthChangeEnd, draggerTooltip, loading, }: MainMenuProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MenuDesktop({ open, setOpen, settingItems, platformGroups, segments, segmentPrefs, activeSegmentId, onActiveSegmentChange, onSegmentOrderChange, onSegmentExpandedChange, onSegmentServiceClick, favorite, search, preferences, logo, rightTop, leftTop, leftBottom, defaultWidth, onWidthChangeEnd, draggerTooltip, loading, }: MainMenuProps): import("react/jsx-runtime").JSX.Element;
@@ -13,9 +13,9 @@ import { MenuBottom } from '../MenuBottom/index.js';
13
13
  import { MenuHeaderBrand } from '../MenuHeaderBrand/index.js';
14
14
  import { MountAnimation } from '../MountAnimation/index.js';
15
15
  import { Search } from '../Search/index.js';
16
- import { MENU_WIDTH_DEFAULT, MENU_WIDTH_MIN } from './constants.js';
16
+ import { MENU_WIDTH_MAX, MENU_WIDTH_MIN } from './constants.js';
17
17
  import styles from './styles.module.css';
18
- export function MenuDesktop({ open = false, setOpen, settingItems, platformGroups, segments, segmentPrefs, activeSegmentId, onActiveSegmentChange, onSegmentOrderChange, onSegmentExpandedChange, onToggleAllGroupsExpanded, onSegmentServiceClick, favorite, search, preferences, logo, rightTop, leftTop, leftBottom, defaultWidth = MENU_WIDTH_DEFAULT, onWidthChangeEnd, draggerTooltip, loading, }) {
18
+ export function MenuDesktop({ open = false, setOpen, settingItems, platformGroups, segments, segmentPrefs, activeSegmentId, onActiveSegmentChange, onSegmentOrderChange, onSegmentExpandedChange, onSegmentServiceClick, favorite, search, preferences, logo, rightTop, leftTop, leftBottom, defaultWidth = MENU_WIDTH_MAX, onWidthChangeEnd, draggerTooltip, loading, }) {
19
19
  const { scrollRef, searchRef, resultItems } = useMenuItems({
20
20
  segments,
21
21
  search,
@@ -50,12 +50,12 @@ export function MenuDesktop({ open = false, setOpen, settingItems, platformGroup
50
50
  const handleCloseDrawer = useCallback(() => {
51
51
  setOpen?.(false);
52
52
  }, [setOpen]);
53
- const menu = (_jsxs("div", { className: styles.menu, children: [_jsxs("div", { className: styles.menuHeader, children: [_jsx(MenuHeaderBrand, { logo: logo, onClose: handleCloseDrawer, className: styles.menuHeaderBrand }), isNeedRightBlock && search && (_jsxs(_Fragment, { children: [_jsx(Divider, { orientation: 'vertical' }), _jsx(Search, { ...search, ref: searchRef })] }))] }), _jsx(Divider, {}), _jsxs("div", { className: styles.menuBody, children: [_jsxs(MountAnimation, { className: styles.left, "data-test-id": TEST_IDS.mainMenu.left, type: 'slide-right', children: [leftTop && _jsx("div", { className: styles.leftTop, children: leftTop }), isNeedRightBlock && favorite && _jsx(Favorites, { favorite: favorite, servicesById: servicesById }), hasBottomItems && _jsx(MenuBottom, { settingItems: settingItems, leftBottom: leftBottom })] }), isNeedRightBlock && (_jsxs(_Fragment, { children: [_jsx(MountAnimation, { type: 'fade-in', children: _jsx(Divider, { orientation: 'vertical' }) }), _jsx("div", { className: styles.right, "data-test-id": TEST_IDS.mainMenu.right, children: _jsx(Scroll, { paddingAbsolute: true, className: styles.scroll, ref: scrollRef, barHideStrategy: 'never', overflow: { x: 'hidden' }, children: _jsx(Content, { className: styles.rightContent, searchValue: search?.value, rightTop: rightTop, favorite: favorite, segments: segments, searchGroups: resultItems, segmentPrefs: segmentPrefs, activeSegmentId: activeSegmentId, onActiveSegmentChange: onActiveSegmentChange, onSegmentOrderChange: onSegmentOrderChange, onSegmentExpandedChange: onSegmentExpandedChange, onSegmentServiceClick: onSegmentServiceClick, onToggleAllGroupsExpanded: onToggleAllGroupsExpanded, preferences: preferences, loading: loading }) }) })] }))] })] }));
53
+ const menu = (_jsxs("div", { className: styles.menu, children: [_jsxs("div", { className: styles.menuHeader, children: [_jsx(MenuHeaderBrand, { logo: logo, onClose: handleCloseDrawer, className: styles.menuHeaderBrand }), isNeedRightBlock && search && (_jsxs(_Fragment, { children: [_jsx(Divider, { orientation: 'vertical' }), _jsx(Search, { ...search, ref: searchRef })] }))] }), _jsx(Divider, {}), _jsxs("div", { className: styles.menuBody, children: [_jsxs(MountAnimation, { className: styles.left, "data-test-id": TEST_IDS.mainMenu.left, type: 'slide-right', children: [leftTop && _jsx("div", { className: styles.leftTop, children: leftTop }), isNeedRightBlock && favorite && _jsx(Favorites, { favorite: favorite, servicesById: servicesById }), hasBottomItems && _jsx(MenuBottom, { settingItems: settingItems, leftBottom: leftBottom })] }), isNeedRightBlock && (_jsxs(_Fragment, { children: [_jsx(MountAnimation, { type: 'fade-in', children: _jsx(Divider, { orientation: 'vertical' }) }), _jsx("div", { className: styles.right, "data-test-id": TEST_IDS.mainMenu.right, children: _jsx(Scroll, { paddingAbsolute: true, className: styles.scroll, ref: scrollRef, barHideStrategy: 'never', overflow: { x: 'hidden' }, children: _jsx(Content, { className: styles.rightContent, searchValue: search?.value, rightTop: rightTop, favorite: favorite, segments: segments, searchGroups: resultItems, segmentPrefs: segmentPrefs, activeSegmentId: activeSegmentId, onActiveSegmentChange: onActiveSegmentChange, onSegmentOrderChange: onSegmentOrderChange, onSegmentExpandedChange: onSegmentExpandedChange, onSegmentServiceClick: onSegmentServiceClick, preferences: preferences, loading: loading }) }) })] }))] })] }));
54
54
  return (_jsx(DrawerCustom, { open: open, onClose: handleCloseDrawer, width: isNeedRightBlock ? 'm' : 's', position: 'left', className: styles.drawer, rootClassName: styles.drawerRoot, "data-test-id": TEST_IDS.mainMenu.drawer, "data-small": !isNeedRightBlock || undefined, disableMotions: true, showButtonClosed: false, resizable: isNeedRightBlock
55
55
  ? {
56
56
  min: MENU_WIDTH_MIN,
57
- max: 'full',
58
- default: defaultWidth,
57
+ max: MENU_WIDTH_MAX,
58
+ default: Math.min(Math.max(defaultWidth, MENU_WIDTH_MIN), MENU_WIDTH_MAX),
59
59
  onResizeEnd: onWidthChangeEnd,
60
60
  draggerTooltip,
61
61
  }
@@ -1,3 +1,3 @@
1
1
  export declare const MENU_WIDTH_STORAGE_KEY = "cloud-ru-main-menu-user-width";
2
2
  export declare const MENU_WIDTH_MIN: number;
3
- export declare const MENU_WIDTH_DEFAULT: number;
3
+ export declare const MENU_WIDTH_MAX: number;
@@ -1,4 +1,4 @@
1
1
  export const MENU_WIDTH_STORAGE_KEY = 'cloud-ru-main-menu-user-width';
2
2
  // паддинг справа 24px у дровера нужно компенсировать
3
- export const MENU_WIDTH_MIN = 630 + 24;
4
- export const MENU_WIDTH_DEFAULT = 1208 + 24;
3
+ export const MENU_WIDTH_MIN = 960 + 24;
4
+ export const MENU_WIDTH_MAX = 1208 + 24;
@@ -3,10 +3,9 @@ import { DndContext, DragOverlay, KeyboardSensor, PointerSensor, useSensor, useS
3
3
  import { restrictToVerticalAxis } from '@dnd-kit/modifiers';
4
4
  import { sortableKeyboardCoordinates } from '@dnd-kit/sortable';
5
5
  import { usePortalContext } from '@cloud-ru/ds-portal-context';
6
- import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';
6
+ import { createContext, useCallback, useContext, useMemo, useState } from 'react';
7
7
  import { createPortal } from 'react-dom';
8
8
  import { ServiceCard } from '../helperComponents/ServiceCard/index.js';
9
- import styles from '../styles.module.css';
10
9
  import { favoriteListCollisionDetection, getDragReferenceY, isServiceDragId, isServiceSourceDragId, parseServiceDragId, resolveFavoriteOrderOnDragEnd, } from '../utils/index.js';
11
10
  const restrictGroupDragToVerticalAxis = args => {
12
11
  if (args.active?.id != null && isServiceSourceDragId(args.active.id)) {
@@ -83,14 +82,6 @@ export function useMainMenuDnd({ favorite, servicesById, showDescription }) {
83
82
  }
84
83
  export function MainMenuDndContext({ children, sensors, modifiers, collisionDetection, onDragStart, onDragEnd, onDragCancel, dragOverlay, overlayContextValue, }) {
85
84
  const portalContextRef = usePortalContext();
86
- const isDragging = Boolean(dragOverlay);
87
- useEffect(() => {
88
- if (!isDragging)
89
- return;
90
- /* Для предотвращения случайных взаимодействий с любыми другими элементами при перетаскивании */
91
- document.body.classList.add(styles.dragging);
92
- return () => document.body.classList.remove(styles.dragging);
93
- }, [isDragging]);
94
85
  // `DragOverlay` рендерит `position: fixed` без собственного портала. Drawer-обёртка
95
86
  // (`.snack-rc-drawer-content-wrapper`) держит `will-change: transform`, а это, как и
96
87
  // настоящий transform, создаёт containing block для fixed-потомков — оверлей резолвится
@@ -240,7 +240,7 @@ export type MainMenuSettingsItem = Pick<InnerLink, 'id' | 'label' | 'icon' | 'on
240
240
  /** Разделитель до/после пункта. */
241
241
  divider?: 'before' | 'after';
242
242
  };
243
- export type MainMenuProps = Pick<ContentProps, 'segments' | 'searchGroups' | 'segmentPrefs' | 'activeSegmentId' | 'onActiveSegmentChange' | 'onSegmentOrderChange' | 'onSegmentExpandedChange' | 'onToggleAllGroupsExpanded' | 'onSegmentServiceClick' | 'favorite' | 'preferences' | 'loading' | 'rightTop'> & {
243
+ export type MainMenuProps = Pick<ContentProps, 'segments' | 'searchGroups' | 'segmentPrefs' | 'activeSegmentId' | 'onActiveSegmentChange' | 'onSegmentOrderChange' | 'onSegmentExpandedChange' | 'onSegmentServiceClick' | 'favorite' | 'preferences' | 'loading' | 'rightTop'> & {
244
244
  /** Кнопка открытия меню недоступна для клика. */
245
245
  disabled?: boolean;
246
246
  /**
@@ -169,7 +169,6 @@
169
169
 
170
170
  .promoTag{
171
171
  cursor:inherit;
172
- flex-shrink:0;
173
172
  }
174
173
  .root{
175
174
  display:flex;
@@ -301,7 +300,6 @@
301
300
  outline:none;
302
301
  }
303
302
  .headerActions[data-always-visible]{
304
- pointer-events:auto;
305
303
  opacity:1;
306
304
  }
307
305
 
@@ -357,25 +355,20 @@
357
355
  animation:none;
358
356
  }
359
357
  }
358
+ .group[data-drag-preview]{
359
+ cursor:grabbing;
360
+ }
360
361
  .group[data-drag-preview] .header{
362
+ cursor:grabbing;
361
363
  background-color:var(--sn-theme-color-neutral-decorTransparent, var(--sn-brand-color-neutral-transparent-forLightMode, rgba(136, 146, 170, 0.0784313725)));
362
364
  }
363
365
  .group[data-drag-preview] .header .headerActions{
364
366
  pointer-events:auto;
365
367
  opacity:1;
366
368
  }
367
- .group:has(:focus-visible) .headerActions{
368
- pointer-events:auto;
369
- opacity:1;
370
- }
371
- @media (hover: hover){
372
- .group:hover .headerActions{
373
- pointer-events:auto;
374
- opacity:1;
375
- }
376
- }
377
369
 
378
370
  .groupDragPreview{
371
+ cursor:grabbing;
379
372
  container-type:inline-size;
380
373
  border-radius:var(--sn-density-radius-2xs, var(--sn-platform-comfort-radius-2xs, var(--sn-primitive-dimension-4, 4px)));
381
374
  }
@@ -418,6 +411,7 @@
418
411
 
419
412
  .groupBody{
420
413
  display:grid;
414
+ grid-template-columns:repeat(3, minmax(auto, 1fr));
421
415
  gap:var(--sn-primitive-dimension-4, 4px);
422
416
  }
423
417
  .groupBody:not([data-subcategory-body]){
@@ -426,8 +420,10 @@
426
420
  .groupBody:not([data-show-description]){
427
421
  gap:0;
428
422
  }
429
- .groupBody:not([data-mobile]){
430
- grid-template-columns:repeat(auto-fill, minmax(240px, 1fr));
423
+ @container (width <= 728px){
424
+ .groupBody:not([data-mobile]){
425
+ grid-template-columns:repeat(2, minmax(auto, 1fr));
426
+ }
431
427
  }
432
428
  .groupBody[data-mobile]{
433
429
  grid-template-columns:repeat(1, minmax(200px, 1fr));
@@ -579,21 +575,6 @@
579
575
  gap:inherit;
580
576
  }
581
577
 
582
- .rightTop{
583
- width:100%;
584
- min-width:0;
585
- }
586
- .rightTop:not([data-mobile]){
587
- display:grid;
588
- grid-template-columns:repeat(auto-fit, minmax(max(252px, (100% - var(--sn-primitive-dimension-4, 4px)) / 2), 1fr));
589
- gap:var(--sn-primitive-dimension-4, 4px);
590
- }
591
- .rightTop[data-mobile]{
592
- display:flex;
593
- flex-direction:column;
594
- gap:var(--sn-primitive-dimension-8, 8px);
595
- }
596
-
597
578
  .noData{
598
579
  flex:1 1 auto;
599
580
  place-self:center center;
@@ -958,14 +939,6 @@
958
939
  .staticCard{
959
940
  position:relative;
960
941
  }
961
- .dragging,
962
- .dragging *{
963
- cursor:grabbing !important;
964
- }
965
-
966
- .dragging *{
967
- pointer-events:none !important;
968
- }
969
942
  .container{
970
943
  display:flex;
971
944
  align-items:center;