@cloud-ru/ds-uikit-product-header 1.5.1-preview-d90ac2be.0 → 1.5.1-preview-e30f4f90.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 +91 -91
- package/dist/cjs/components/HeaderButton/HeaderButton.d.ts +1 -0
- package/dist/cjs/components/HeaderLayout/HeaderLayout.d.ts +6 -0
- package/dist/cjs/components/Logo/Logo.d.ts +7 -0
- package/dist/cjs/components/MainMenu/helperComponents/Content/Content.d.ts +6 -0
- package/dist/cjs/components/MainMenu/helperComponents/Content/Content.js +2 -2
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.d.ts +9 -0
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/SortableGroup.d.ts +7 -0
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.d.ts +3 -0
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupDragHandle.d.ts +2 -0
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupSkeleton.d.ts +1 -0
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.d.ts +3 -0
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.js +2 -2
- package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategoryTitle.d.ts +1 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/Favorites.js +12 -33
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/EmptyState/EmptyState.d.ts +4 -1
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/EmptyState/EmptyState.js +4 -2
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesDesktop.d.ts +35 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesDesktop.js +27 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesList.d.ts +21 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesList.js +31 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesMobile.d.ts +28 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesMobile.js +20 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesReorderList.d.ts +24 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesReorderList.js +36 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/RecentList.d.ts +24 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/RecentList.js +30 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/SortableFavoriteCard.d.ts +7 -1
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/SortableFavoriteCard.js +4 -2
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/index.d.ts +2 -1
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/index.js +2 -1
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesAutoSwitch.d.ts +16 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesAutoSwitch.js +28 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesReorder.d.ts +30 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/hooks/{useFavoritesDnd.js → useFavoritesReorder.js} +21 -22
- package/dist/cjs/components/MainMenu/helperComponents/MenuBottom/MenuBottom.d.ts +2 -0
- package/dist/cjs/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.d.ts +3 -0
- package/dist/cjs/components/MainMenu/helperComponents/MenuMobile/MenuMobile.js +1 -1
- package/dist/cjs/components/MainMenu/helperComponents/ServiceCard/ServiceCard.d.ts +7 -0
- package/dist/cjs/components/MainMenu/hooks/useMainMenuDnd.d.ts +2 -0
- package/dist/cjs/components/MainMenu/types.d.ts +31 -1
- package/dist/cjs/components/PathBreadcrumbs/PathBreadcrumbs.d.ts +2 -0
- package/dist/cjs/components/UserMenu/UserMenu.d.ts +13 -0
- package/dist/cjs/components/UserMenu/types.d.ts +7 -0
- package/dist/cjs/utils/noop.d.ts +1 -0
- package/dist/cjs/utils/noop.js +5 -0
- package/dist/esm/components/HeaderButton/HeaderButton.d.ts +1 -0
- package/dist/esm/components/HeaderLayout/HeaderLayout.d.ts +6 -0
- package/dist/esm/components/Logo/Logo.d.ts +7 -0
- package/dist/esm/components/MainMenu/helperComponents/Content/Content.d.ts +6 -0
- package/dist/esm/components/MainMenu/helperComponents/Content/Content.js +2 -2
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.d.ts +9 -0
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/SortableGroup.d.ts +7 -0
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.d.ts +3 -0
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupDragHandle.d.ts +2 -0
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupSkeleton.d.ts +1 -0
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.d.ts +3 -0
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.js +1 -1
- package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategoryTitle.d.ts +1 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/Favorites.js +14 -35
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/EmptyState/EmptyState.d.ts +4 -1
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/EmptyState/EmptyState.js +3 -1
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesDesktop.d.ts +35 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesDesktop.js +24 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesList.d.ts +21 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesList.js +25 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesMobile.d.ts +28 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesMobile.js +17 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesReorderList.d.ts +24 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesReorderList.js +30 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/RecentList.d.ts +24 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/RecentList.js +24 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/SortableFavoriteCard.d.ts +7 -1
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/SortableFavoriteCard.js +3 -1
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/index.d.ts +2 -1
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/index.js +2 -1
- package/dist/esm/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesAutoSwitch.d.ts +16 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesAutoSwitch.js +25 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesReorder.d.ts +30 -0
- package/dist/esm/components/MainMenu/helperComponents/Favorites/hooks/{useFavoritesDnd.js → useFavoritesReorder.js} +21 -22
- package/dist/esm/components/MainMenu/helperComponents/MenuBottom/MenuBottom.d.ts +2 -0
- package/dist/esm/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.d.ts +3 -0
- package/dist/esm/components/MainMenu/helperComponents/MenuMobile/MenuMobile.js +1 -1
- package/dist/esm/components/MainMenu/helperComponents/ServiceCard/ServiceCard.d.ts +7 -0
- package/dist/esm/components/MainMenu/hooks/useMainMenuDnd.d.ts +2 -0
- package/dist/esm/components/MainMenu/types.d.ts +31 -1
- package/dist/esm/components/PathBreadcrumbs/PathBreadcrumbs.d.ts +2 -0
- package/dist/esm/components/UserMenu/UserMenu.d.ts +13 -0
- package/dist/esm/components/UserMenu/types.d.ts +7 -0
- package/dist/esm/utils/noop.d.ts +1 -0
- package/dist/esm/utils/noop.js +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +18 -18
- package/src/components/HeaderButton/HeaderButton.tsx +1 -0
- package/src/components/HeaderLayout/HeaderLayout.tsx +6 -0
- package/src/components/Logo/Logo.tsx +7 -0
- package/src/components/MainMenu/helperComponents/Content/Content.tsx +8 -5
- package/src/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.tsx +9 -0
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/SortableGroup.tsx +7 -0
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.tsx +3 -0
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupDragHandle.tsx +2 -0
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupSkeleton.tsx +1 -0
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.tsx +4 -2
- package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategoryTitle.tsx +1 -0
- package/src/components/MainMenu/helperComponents/Favorites/Favorites.tsx +34 -76
- package/src/components/MainMenu/helperComponents/Favorites/components/EmptyState/EmptyState.tsx +6 -1
- package/src/components/MainMenu/helperComponents/Favorites/components/FavoritesDesktop.tsx +71 -0
- package/src/components/MainMenu/helperComponents/Favorites/components/FavoritesList.tsx +59 -0
- package/src/components/MainMenu/helperComponents/Favorites/components/FavoritesMobile.tsx +60 -0
- package/src/components/MainMenu/helperComponents/Favorites/components/FavoritesReorderList.tsx +75 -0
- package/src/components/MainMenu/helperComponents/Favorites/components/RecentList.tsx +62 -0
- package/src/components/MainMenu/helperComponents/Favorites/components/SortableFavoriteCard.tsx +8 -1
- package/src/components/MainMenu/helperComponents/Favorites/components/index.ts +2 -1
- package/src/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesAutoSwitch.ts +32 -0
- package/src/components/MainMenu/helperComponents/Favorites/hooks/{useFavoritesDnd.tsx → useFavoritesReorder.tsx} +32 -30
- package/src/components/MainMenu/helperComponents/MenuBottom/MenuBottom.tsx +2 -0
- package/src/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.tsx +3 -0
- package/src/components/MainMenu/helperComponents/MenuMobile/MenuMobile.tsx +1 -1
- package/src/components/MainMenu/helperComponents/ServiceCard/ServiceCard.tsx +7 -0
- package/src/components/MainMenu/hooks/useMainMenuDnd.tsx +2 -0
- package/src/components/MainMenu/types.ts +31 -1
- package/src/components/PathBreadcrumbs/PathBreadcrumbs.tsx +2 -0
- package/src/components/UserMenu/UserMenu.tsx +13 -0
- package/src/components/UserMenu/types.ts +7 -0
- package/src/utils/noop.ts +1 -0
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesSortable.d.ts +0 -19
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesSortable.js +0 -30
- package/dist/cjs/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesDnd.d.ts +0 -25
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesSortable.d.ts +0 -19
- package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesSortable.js +0 -24
- package/dist/esm/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesDnd.d.ts +0 -25
- package/src/components/MainMenu/helperComponents/Favorites/components/FavoritesSortable.tsx +0 -78
package/README.md
CHANGED
|
@@ -98,13 +98,13 @@ export function PartialSlots() {
|
|
|
98
98
|
|
|
99
99
|
| Prop | Type | Default | Description |
|
|
100
100
|
|------|------|---------|-------------|
|
|
101
|
-
| `breadcrumbs` | `ReactNode` | — |
|
|
102
|
-
| `className` | `string` | — |
|
|
101
|
+
| `breadcrumbs` | `ReactNode` | — | Слот хлебных крошек. На mobile переносится под основную строку хедера. |
|
|
102
|
+
| `className` | `string` | — | CSS-класс корневого элемента. |
|
|
103
103
|
| `data-test-id` | `string` | — | |
|
|
104
|
-
| `logo` | `ReactNode` | — |
|
|
105
|
-
| `menu` | `ReactNode` | — |
|
|
106
|
-
| `select` | `ReactNode` | — |
|
|
107
|
-
| `toolbar` | `ReactNode` | — |
|
|
104
|
+
| `logo` | `ReactNode` | — | Слот логотипа (крайний левый). |
|
|
105
|
+
| `menu` | `ReactNode` | — | Слот главного меню (слева, после логотипа). |
|
|
106
|
+
| `select` | `ReactNode` | — | Слот селектора (например, выбор облака/организации), после меню. |
|
|
107
|
+
| `toolbar` | `ReactNode` | — | Слот тулбара — правая часть хедера. |
|
|
108
108
|
|
|
109
109
|
## MainMenu
|
|
110
110
|
|
|
@@ -292,27 +292,27 @@ function LocalMainMenu() {
|
|
|
292
292
|
|------|------|---------|-------------|
|
|
293
293
|
| `activeSegmentId` | `string` | — | Активный сегмент правой панели (значение SegmentControl, см. {@link MainMenuSegment.id}). <br/> Не передано — неуправляемое состояние (дефолт — первый сегмент с видимыми карточками). |
|
|
294
294
|
| `defaultWidth` | `number` | — | Ширина дровера, с которой открывается меню (desktop only) |
|
|
295
|
-
| `disabled` | `boolean` | — |
|
|
295
|
+
| `disabled` | `boolean` | — | Кнопка открытия меню недоступна для клика. |
|
|
296
296
|
| `draggerTooltip` | `string` | — | Текст подсказки для драггера (desktop only) |
|
|
297
|
-
| `favorite` | `FavoriteProps` | — |
|
|
298
|
-
| `leftBottom` | `ReactNode` | — |
|
|
299
|
-
| `leftTop` | `ReactNode` | — |
|
|
297
|
+
| `favorite` | `FavoriteProps` | — | Избранное. Без пропа группа-предок карточек драга из избранного не активируется. <br/> Избранное. Без пропа секция «Избранное» не отображается. |
|
|
298
|
+
| `leftBottom` | `ReactNode` | — | Слот под пунктами настроек в левой колонке (desktop) / в конце списка (mobile). |
|
|
299
|
+
| `leftTop` | `ReactNode` | — | Слот над поиском в левой колонке (desktop) / над поиском в списке (mobile). |
|
|
300
300
|
| `loading` | `boolean` | — | Флаг загрузки данных |
|
|
301
|
-
| `logo` | `ReactNode` | — |
|
|
301
|
+
| `logo` | `ReactNode` | — | Логотип в шапке меню. |
|
|
302
302
|
| `onActiveSegmentChange` | `((segmentId: string) => void)` | — | Колбэк смены активного сегмента правой панели. |
|
|
303
303
|
| `onSegmentExpandedChange` | `((segmentId: string, expandedGroupIds: string[]) => void)` | — | Колбэк при изменении набора раскрытых групп сегмента <br/> (без id синтетической группы избранного). |
|
|
304
304
|
| `onSegmentOrderChange` | `((segmentId: string, orderedGroupIds: string[]) => void)` | — | Колбэк после DnD групп в сегменте (без id синтетической группы избранного). |
|
|
305
305
|
| `onSegmentServiceClick` | `((service: InnerLink, e?: MouseEvent<HTMLElement, MouseEvent>) => void)` | — | Колбэк клика по карточке сервиса в сегменте. |
|
|
306
306
|
| `onWidthChangeEnd` | `((width: number) => void)` | — | Вызывается при окончании изменения ширины дровера (desktop only) |
|
|
307
|
-
| `open` | `boolean` | — |
|
|
307
|
+
| `open` | `boolean` | — | Открыто ли меню. <br/> Не передано — состояние открытия неуправляемое (меню само переключает себя по клику на кнопку). |
|
|
308
308
|
| `platformGroups` | `LinksGroup` | — | Платформенные группы (например «Облачные продукты», «Другие продукты»). <br/> Без поиска в сетке карточек **не отображаются**. <br/> С поиском: попадают в результаты при совпадении; порядок — <br/> после совпадений из сегментов без `pinBottomOnSearch`, перед сегментами с `pinBottomOnSearch`. <br/> Обычно `favoritesEnabled: false`; карточки могут быть без `icon` (Avatar по `label`). |
|
|
309
309
|
| `preferences` | `MainMenuPreferencesProps` | — | Настройки меню (модалка по кнопке в тулбаре): описания карточек, цвета групп. <br/> Не передано — кнопка настроек в тулбаре не отображается. |
|
|
310
310
|
| `rightTop` | `ReactNode` | — | Слот над тулбаром правой колонки (например, баннеры) |
|
|
311
|
-
| `search` | `SearchProps` | — |
|
|
311
|
+
| `search` | `SearchProps` | — | Поиск по сервисам. Без пропа поисковая строка не отображается. |
|
|
312
312
|
| `searchGroups` | `LinksGroup` | — | Результаты поиска (уже смерженные); в обычном режиме не используются. |
|
|
313
313
|
| `segmentPrefs` | `MainMenuSegmentPrefs` | — | Пользовательские prefs сегментов (порядок / раскрытие групп). <br/> Нет записи для сегмента или omit `order` / `expanded` → uncontrolled для этого поля. |
|
|
314
314
|
| `segments` | `MainMenuSegment` | — | Сегменты правой панели (сетка карточек) — только каталог. <br/> При поиске: совпадения из сегментов без `pinBottomOnSearch` → `platformGroups` → сегменты с `pinBottomOnSearch`. <br/> Если один и тот же {@link InnerLink.id} совпал сразу в нескольких сегментах — остаётся только <br/> первое по этому приоритету вхождение, остальные (и опустевшие после этого группы) не показываются. <br/> При `segments.length > 1` показывается SegmentControl (скрывается во время поиска). <br/> Порядок и раскрытие групп — через `segmentPrefs` и колбэки ниже. |
|
|
315
|
-
| `setOpen` | `((open: boolean) => void)` | — |
|
|
315
|
+
| `setOpen` | `((open: boolean) => void)` | — | Колбэк открытия/закрытия меню. |
|
|
316
316
|
| `settingItems` | `InnerLink` \| `MainMenuSettingsItem` | — | Пункты левой колонки (desktop) / нижней части списка (mobile). <br/> Плоский список (`dividerBefore` для разделителей). <br/> Не связан с сегментами правой панели и не меняется при сортировке групп в сегментах. |
|
|
317
317
|
|
|
318
318
|
##### Related types
|
|
@@ -339,17 +339,17 @@ function LocalMainMenu() {
|
|
|
339
339
|
| Prop | Type | Default | Description |
|
|
340
340
|
|------|------|---------|-------------|
|
|
341
341
|
| `aliases` | `string[]` | — | Синонимы для fuzzy-поиска. |
|
|
342
|
-
| `badge` | `CardServiceLightProps` \| `PromoTagPredefinedBaseProps` | — |
|
|
342
|
+
| `badge` | `CardServiceLightProps` \| `PromoTagPredefinedBaseProps` | — | Промо-тег карточки. |
|
|
343
343
|
| `description` | `string \| undefined` | — | Краткое описание сервиса — отображается при включённом переключателе «Описание». |
|
|
344
|
-
| `disabled` | `boolean \| undefined` | — |
|
|
344
|
+
| `disabled` | `boolean \| undefined` | — | Карточка недоступна для клика/drag и визуально приглушена. |
|
|
345
345
|
| `favoritesEnabled` | `boolean \| undefined` | — | Разрешено ли добавление карточки в избранное. default=true - разрешено |
|
|
346
|
-
| `hidden` | `boolean \| undefined` | — |
|
|
347
|
-
| `href` | `string \| undefined` | — |
|
|
346
|
+
| `hidden` | `boolean \| undefined` | — | Карточка скрыта (не рендерится, но остаётся в данных — например, для поиска). |
|
|
347
|
+
| `href` | `string \| undefined` | — | Ссылка карточки (рендерится как `<a>`). |
|
|
348
348
|
| `icon` | `JSXElementConstructor<{ size?: number; className?: string; }> \| undefined` | — | Иконка карточки. |
|
|
349
349
|
| `id` | `string` | — | Уникальный идентификатор карточки (также используется в избранном и при поиске). <br/> Один и тот же сервис может быть представлен в разных сегментах с разной <br/> детализацией (простая карточка в общем каталоге и раскрытая с вложенными <br/> сервисами версия в другом сегменте) — в этом случае обеим версиям задаётся <br/> общий `id`. При поиске из совпадений с одинаковым `id` в разных сегментах <br/> остаётся только первое по приоритету сегментов (см. <br/> {@link <br/> MainMenuProps.segments <br/> } <br/> ). |
|
|
350
350
|
| `items` | `InnerLink` | — | Вложенные сервисы подкатегории. <br/> При наличии карточка раскрывается аккордеоном: в свёрнутом виде — обычная карточка <br/> с кнопкой раскрытия, в развёрнутом — заголовок <br/> {@link <br/> TitleClickable <br/> } <br/> и сетка вложенных сервисов. |
|
|
351
351
|
| `label` | `string` | — | Заголовок карточки. |
|
|
352
|
-
| `onClick` | `(e?: MouseEvent<HTMLElement>) => void` | — |
|
|
352
|
+
| `onClick` | `(e?: MouseEvent<HTMLElement>) => void` | — | Колбэк клика по карточке. |
|
|
353
353
|
| `viewMode` | `"expandable"` \| `"expanded"` \| `"flat-link"` \| `"group-title-only"` | — | Режим отображения карточки. default='expandable'. <br/> - `'expandable'` — подкатегория при наличии реальных <br/> {@link <br/> items <br/> } <br/> : заголовок <br/> {@link <br/> TitleClickable <br/> } <br/> с шевроном и сетка вложенных сервисов (раскрытие/схлопывание — <br/> см. <br/> {@link <br/> expandableEnabled <br/> } <br/> ). Без `items` — обычная карточка сервиса. <br/> - `'group-title-only'` — заголовок подкатегории ( <br/> {@link <br/> TitleClickable <br/> } <br/> с шевроном) без <br/> раскрываемого тела, даже если `items` заданы: карточка ведёт себя как обычная ссылка. <br/> Полезно для группы, чьи вложенные сервисы показываются на отдельной странице. <br/> - `'flat-link'` — всегда обычная карточка сервиса, даже если `items` заданы. |
|
|
354
354
|
|
|
355
355
|
- `InnerLinkViewMode` = `"expandable"` \| `"expanded"` \| `"flat-link"` \| `"group-title-only"`
|
|
@@ -361,13 +361,13 @@ function LocalMainMenu() {
|
|
|
361
361
|
| `aliases` | `string[] \| undefined` | — | Синонимы заголовка группы для fuzzy-поиска. |
|
|
362
362
|
| `blockColor` | `"blue"` \| `"green"` \| `"neutral"` \| `"orange"` \| `"pink"` \| `"primary"` \| `"red"` \| `"violet"` \| `"yellow"` | — | Цвет блока группы. |
|
|
363
363
|
| `favoritesEnabled` | `boolean \| undefined` | — | Разрешено ли добавление карточек группы в избранное. |
|
|
364
|
-
| `hidden` | `boolean \| undefined` | — |
|
|
365
|
-
| `highlight` | `boolean \| undefined` | — | Визуальное выделение
|
|
366
|
-
| `icon` | `JSXElementConstructor<{ size?: number; className?: string; }> \| undefined` | — |
|
|
364
|
+
| `hidden` | `boolean \| undefined` | — | Группа скрыта (не рендерится, но остаётся в данных — например, для поиска). |
|
|
365
|
+
| `highlight` | `boolean \| undefined` | — | Визуальное выделение группы. |
|
|
366
|
+
| `icon` | `JSXElementConstructor<{ size?: number; className?: string; }> \| undefined` | — | Иконка группы. |
|
|
367
367
|
| `id` | `string` | — | Уникальный идентификатор группы (якорь скролла, поиск по id). |
|
|
368
368
|
| `items` | `InnerLink` | — | Карточки сервисов или ссылок внутри группы. |
|
|
369
369
|
| `label` | `LinksGroupTitle` \| `TitleClickable` \| `TitleStatic` | — | Заголовок группы в сетке карточек и в боковой навигации. |
|
|
370
|
-
| `onClick` | `((e?: MouseEvent<HTMLElement>) => void) \| undefined` | — |
|
|
370
|
+
| `onClick` | `((e?: MouseEvent<HTMLElement>) => void) \| undefined` | — | Колбэк клика по заголовку группы. |
|
|
371
371
|
|
|
372
372
|
- `LinksGroupBlockColor` = `"blue"` \| `"green"` \| `"neutral"` \| `"orange"` \| `"pink"` \| `"primary"` \| `"red"` \| `"violet"` \| `"yellow"`
|
|
373
373
|
|
|
@@ -404,38 +404,38 @@ function LocalMainMenu() {
|
|
|
404
404
|
|
|
405
405
|
| Prop | Type | Default | Description |
|
|
406
406
|
|------|------|---------|-------------|
|
|
407
|
-
| `divider` | `"after"` \| `"before"` | — |
|
|
408
|
-
| `hidden` | `boolean \| undefined` | — |
|
|
409
|
-
| `href` | `string \| undefined` | — |
|
|
407
|
+
| `divider` | `"after"` \| `"before"` | — | Разделитель до/после пункта. |
|
|
408
|
+
| `hidden` | `boolean \| undefined` | — | Карточка скрыта (не рендерится, но остаётся в данных — например, для поиска). |
|
|
409
|
+
| `href` | `string \| undefined` | — | Ссылка карточки (рендерится как `<a>`). |
|
|
410
410
|
| `icon` | `JSXElementConstructor<{ size?: number; className?: string; }> \| undefined` | — | Иконка карточки. |
|
|
411
411
|
| `id` | `string` | — | Уникальный идентификатор карточки (также используется в избранном и при поиске). <br/> Один и тот же сервис может быть представлен в разных сегментах с разной <br/> детализацией (простая карточка в общем каталоге и раскрытая с вложенными <br/> сервисами версия в другом сегменте) — в этом случае обеим версиям задаётся <br/> общий `id`. При поиске из совпадений с одинаковым `id` в разных сегментах <br/> остаётся только первое по приоритету сегментов (см. <br/> {@link <br/> MainMenuProps.segments <br/> } <br/> ). |
|
|
412
412
|
| `label` | `string` | — | Заголовок карточки. |
|
|
413
|
-
| `onClick` | `(e?: MouseEvent<HTMLElement>) => void` | — |
|
|
413
|
+
| `onClick` | `(e?: MouseEvent<HTMLElement>) => void` | — | Колбэк клика по карточке. |
|
|
414
414
|
|
|
415
415
|
**MainMenuToggleProps**
|
|
416
416
|
|
|
417
417
|
| Prop | Type | Default | Description |
|
|
418
418
|
|------|------|---------|-------------|
|
|
419
|
-
| `onChange` | `(value: boolean) => void` | — |
|
|
420
|
-
| `value` | `boolean` | — |
|
|
419
|
+
| `onChange` | `(value: boolean) => void` | — | Колбэк изменения значения переключателя. |
|
|
420
|
+
| `value` | `boolean` | — | Текущее значение переключателя. |
|
|
421
421
|
|
|
422
422
|
**SearchProps**
|
|
423
423
|
|
|
424
424
|
| Prop | Type | Default | Description |
|
|
425
425
|
|------|------|---------|-------------|
|
|
426
426
|
| `onBlur` | `FocusEventHandler<HTMLInputElement> \| undefined` | — | Колбек обработки потери фокуса |
|
|
427
|
-
| `onChange` | `(value: string) => void` | — |
|
|
427
|
+
| `onChange` | `(value: string) => void` | — | Колбэк изменения значения поисковой строки. |
|
|
428
428
|
| `onFocus` | `FocusEventHandler<HTMLInputElement> \| undefined` | — | Колбек обработки получения фокуса |
|
|
429
|
-
| `onSearchNoResult` | `((value: string) => void) \| undefined` | — |
|
|
430
|
-
| `value` | `string` | — |
|
|
429
|
+
| `onSearchNoResult` | `((value: string) => void) \| undefined` | — | Колбэк вызывается, когда поиск по текущему значению не дал результатов. |
|
|
430
|
+
| `value` | `string` | — | Текущее значение поисковой строки. |
|
|
431
431
|
|
|
432
432
|
**TitleClickable**
|
|
433
433
|
|
|
434
434
|
| Prop | Type | Default | Description |
|
|
435
435
|
|------|------|---------|-------------|
|
|
436
|
-
| `href` | `string \| undefined` | — |
|
|
437
|
-
| `onClick` | `((e?: MouseEvent<HTMLElement>) => void) \| undefined` | — |
|
|
438
|
-
| `text` | `string` | — |
|
|
436
|
+
| `href` | `string \| undefined` | — | Ссылка заголовка (рендерится как `<a>`). |
|
|
437
|
+
| `onClick` | `((e?: MouseEvent<HTMLElement>) => void) \| undefined` | — | Колбэк клика по заголовку. |
|
|
438
|
+
| `text` | `string` | — | Текст заголовка. |
|
|
439
439
|
|
|
440
440
|
**TitleStatic**
|
|
441
441
|
|
|
@@ -443,7 +443,7 @@ function LocalMainMenu() {
|
|
|
443
443
|
|------|------|---------|-------------|
|
|
444
444
|
| `href` | `undefined` | — | |
|
|
445
445
|
| `onClick` | `undefined` | — | |
|
|
446
|
-
| `text` | `string` | — |
|
|
446
|
+
| `text` | `string` | — | Текст заголовка. |
|
|
447
447
|
|
|
448
448
|
### Смотри также
|
|
449
449
|
|
|
@@ -466,27 +466,27 @@ import { MainMenu, MenuMobile } from '@cloud-ru/ds-uikit-product-header';
|
|
|
466
466
|
|------|------|---------|-------------|
|
|
467
467
|
| `activeSegmentId` | `string` | — | Активный сегмент правой панели (значение SegmentControl, см. {@link MainMenuSegment.id}). <br/> Не передано — неуправляемое состояние (дефолт — первый сегмент с видимыми карточками). |
|
|
468
468
|
| `defaultWidth` | `number` | — | Ширина дровера, с которой открывается меню (desktop only) |
|
|
469
|
-
| `disabled` | `boolean` | — |
|
|
469
|
+
| `disabled` | `boolean` | — | Кнопка открытия меню недоступна для клика. |
|
|
470
470
|
| `draggerTooltip` | `string` | — | Текст подсказки для драггера (desktop only) |
|
|
471
|
-
| `favorite` | `FavoriteProps` | — |
|
|
472
|
-
| `leftBottom` | `ReactNode` | — |
|
|
473
|
-
| `leftTop` | `ReactNode` | — |
|
|
471
|
+
| `favorite` | `FavoriteProps` | — | Избранное. Без пропа группа-предок карточек драга из избранного не активируется. <br/> Избранное. Без пропа секция «Избранное» не отображается. |
|
|
472
|
+
| `leftBottom` | `ReactNode` | — | Слот под пунктами настроек в левой колонке (desktop) / в конце списка (mobile). |
|
|
473
|
+
| `leftTop` | `ReactNode` | — | Слот над поиском в левой колонке (desktop) / над поиском в списке (mobile). |
|
|
474
474
|
| `loading` | `boolean` | — | Флаг загрузки данных |
|
|
475
|
-
| `logo` | `ReactNode` | — |
|
|
475
|
+
| `logo` | `ReactNode` | — | Логотип в шапке меню. |
|
|
476
476
|
| `onActiveSegmentChange` | `((segmentId: string) => void)` | — | Колбэк смены активного сегмента правой панели. |
|
|
477
477
|
| `onSegmentExpandedChange` | `((segmentId: string, expandedGroupIds: string[]) => void)` | — | Колбэк при изменении набора раскрытых групп сегмента <br/> (без id синтетической группы избранного). |
|
|
478
478
|
| `onSegmentOrderChange` | `((segmentId: string, orderedGroupIds: string[]) => void)` | — | Колбэк после DnD групп в сегменте (без id синтетической группы избранного). |
|
|
479
479
|
| `onSegmentServiceClick` | `((service: InnerLink, e?: MouseEvent<HTMLElement, MouseEvent>) => void)` | — | Колбэк клика по карточке сервиса в сегменте. |
|
|
480
480
|
| `onWidthChangeEnd` | `((width: number) => void)` | — | Вызывается при окончании изменения ширины дровера (desktop only) |
|
|
481
|
-
| `open` | `boolean` | `false` |
|
|
481
|
+
| `open` | `boolean` | `false` | Открыто ли меню. <br/> Не передано — состояние открытия неуправляемое (меню само переключает себя по клику на кнопку). |
|
|
482
482
|
| `platformGroups` | `LinksGroup` | — | Платформенные группы (например «Облачные продукты», «Другие продукты»). <br/> Без поиска в сетке карточек **не отображаются**. <br/> С поиском: попадают в результаты при совпадении; порядок — <br/> после совпадений из сегментов без `pinBottomOnSearch`, перед сегментами с `pinBottomOnSearch`. <br/> Обычно `favoritesEnabled: false`; карточки могут быть без `icon` (Avatar по `label`). |
|
|
483
483
|
| `preferences` | `MainMenuPreferencesProps` | — | Настройки меню (модалка по кнопке в тулбаре): описания карточек, цвета групп. <br/> Не передано — кнопка настроек в тулбаре не отображается. |
|
|
484
484
|
| `rightTop` | `ReactNode` | — | Слот над тулбаром правой колонки (например, баннеры) |
|
|
485
|
-
| `search` | `SearchProps` | — |
|
|
485
|
+
| `search` | `SearchProps` | — | Поиск по сервисам. Без пропа поисковая строка не отображается. |
|
|
486
486
|
| `searchGroups` | `LinksGroup` | — | Результаты поиска (уже смерженные); в обычном режиме не используются. |
|
|
487
487
|
| `segmentPrefs` | `MainMenuSegmentPrefs` | — | Пользовательские prefs сегментов (порядок / раскрытие групп). <br/> Нет записи для сегмента или omit `order` / `expanded` → uncontrolled для этого поля. |
|
|
488
488
|
| `segments` | `MainMenuSegment` | — | Сегменты правой панели (сетка карточек) — только каталог. <br/> При поиске: совпадения из сегментов без `pinBottomOnSearch` → `platformGroups` → сегменты с `pinBottomOnSearch`. <br/> Если один и тот же {@link InnerLink.id} совпал сразу в нескольких сегментах — остаётся только <br/> первое по этому приоритету вхождение, остальные (и опустевшие после этого группы) не показываются. <br/> При `segments.length > 1` показывается SegmentControl (скрывается во время поиска). <br/> Порядок и раскрытие групп — через `segmentPrefs` и колбэки ниже. |
|
|
489
|
-
| `setOpen` | `((open: boolean) => void)` | — |
|
|
489
|
+
| `setOpen` | `((open: boolean) => void)` | — | Колбэк открытия/закрытия меню. |
|
|
490
490
|
| `settingItems` | `InnerLink` \| `MainMenuSettingsItem` | — | Пункты левой колонки (desktop) / нижней части списка (mobile). <br/> Плоский список (`dividerBefore` для разделителей). <br/> Не связан с сегментами правой панели и не меняется при сортировке групп в сегментах. |
|
|
491
491
|
|
|
492
492
|
##### Related types
|
|
@@ -513,17 +513,17 @@ import { MainMenu, MenuMobile } from '@cloud-ru/ds-uikit-product-header';
|
|
|
513
513
|
| Prop | Type | Default | Description |
|
|
514
514
|
|------|------|---------|-------------|
|
|
515
515
|
| `aliases` | `string[]` | — | Синонимы для fuzzy-поиска. |
|
|
516
|
-
| `badge` | `CardServiceLightProps` \| `PromoTagPredefinedBaseProps` | — |
|
|
516
|
+
| `badge` | `CardServiceLightProps` \| `PromoTagPredefinedBaseProps` | — | Промо-тег карточки. |
|
|
517
517
|
| `description` | `string \| undefined` | — | Краткое описание сервиса — отображается при включённом переключателе «Описание». |
|
|
518
|
-
| `disabled` | `boolean \| undefined` | — |
|
|
518
|
+
| `disabled` | `boolean \| undefined` | — | Карточка недоступна для клика/drag и визуально приглушена. |
|
|
519
519
|
| `favoritesEnabled` | `boolean \| undefined` | — | Разрешено ли добавление карточки в избранное. default=true - разрешено |
|
|
520
|
-
| `hidden` | `boolean \| undefined` | — |
|
|
521
|
-
| `href` | `string \| undefined` | — |
|
|
520
|
+
| `hidden` | `boolean \| undefined` | — | Карточка скрыта (не рендерится, но остаётся в данных — например, для поиска). |
|
|
521
|
+
| `href` | `string \| undefined` | — | Ссылка карточки (рендерится как `<a>`). |
|
|
522
522
|
| `icon` | `JSXElementConstructor<{ size?: number; className?: string; }> \| undefined` | — | Иконка карточки. |
|
|
523
523
|
| `id` | `string` | — | Уникальный идентификатор карточки (также используется в избранном и при поиске). <br/> Один и тот же сервис может быть представлен в разных сегментах с разной <br/> детализацией (простая карточка в общем каталоге и раскрытая с вложенными <br/> сервисами версия в другом сегменте) — в этом случае обеим версиям задаётся <br/> общий `id`. При поиске из совпадений с одинаковым `id` в разных сегментах <br/> остаётся только первое по приоритету сегментов (см. <br/> {@link <br/> MainMenuProps.segments <br/> } <br/> ). |
|
|
524
524
|
| `items` | `InnerLink` | — | Вложенные сервисы подкатегории. <br/> При наличии карточка раскрывается аккордеоном: в свёрнутом виде — обычная карточка <br/> с кнопкой раскрытия, в развёрнутом — заголовок <br/> {@link <br/> TitleClickable <br/> } <br/> и сетка вложенных сервисов. |
|
|
525
525
|
| `label` | `string` | — | Заголовок карточки. |
|
|
526
|
-
| `onClick` | `(e?: MouseEvent<HTMLElement>) => void` | — |
|
|
526
|
+
| `onClick` | `(e?: MouseEvent<HTMLElement>) => void` | — | Колбэк клика по карточке. |
|
|
527
527
|
| `viewMode` | `"expandable"` \| `"expanded"` \| `"flat-link"` \| `"group-title-only"` | — | Режим отображения карточки. default='expandable'. <br/> - `'expandable'` — подкатегория при наличии реальных <br/> {@link <br/> items <br/> } <br/> : заголовок <br/> {@link <br/> TitleClickable <br/> } <br/> с шевроном и сетка вложенных сервисов (раскрытие/схлопывание — <br/> см. <br/> {@link <br/> expandableEnabled <br/> } <br/> ). Без `items` — обычная карточка сервиса. <br/> - `'group-title-only'` — заголовок подкатегории ( <br/> {@link <br/> TitleClickable <br/> } <br/> с шевроном) без <br/> раскрываемого тела, даже если `items` заданы: карточка ведёт себя как обычная ссылка. <br/> Полезно для группы, чьи вложенные сервисы показываются на отдельной странице. <br/> - `'flat-link'` — всегда обычная карточка сервиса, даже если `items` заданы. |
|
|
528
528
|
|
|
529
529
|
- `InnerLinkViewMode` = `"expandable"` \| `"expanded"` \| `"flat-link"` \| `"group-title-only"`
|
|
@@ -535,13 +535,13 @@ import { MainMenu, MenuMobile } from '@cloud-ru/ds-uikit-product-header';
|
|
|
535
535
|
| `aliases` | `string[] \| undefined` | — | Синонимы заголовка группы для fuzzy-поиска. |
|
|
536
536
|
| `blockColor` | `"blue"` \| `"green"` \| `"neutral"` \| `"orange"` \| `"pink"` \| `"primary"` \| `"red"` \| `"violet"` \| `"yellow"` | — | Цвет блока группы. |
|
|
537
537
|
| `favoritesEnabled` | `boolean \| undefined` | — | Разрешено ли добавление карточек группы в избранное. |
|
|
538
|
-
| `hidden` | `boolean \| undefined` | — |
|
|
539
|
-
| `highlight` | `boolean \| undefined` | — | Визуальное выделение
|
|
540
|
-
| `icon` | `JSXElementConstructor<{ size?: number; className?: string; }> \| undefined` | — |
|
|
538
|
+
| `hidden` | `boolean \| undefined` | — | Группа скрыта (не рендерится, но остаётся в данных — например, для поиска). |
|
|
539
|
+
| `highlight` | `boolean \| undefined` | — | Визуальное выделение группы. |
|
|
540
|
+
| `icon` | `JSXElementConstructor<{ size?: number; className?: string; }> \| undefined` | — | Иконка группы. |
|
|
541
541
|
| `id` | `string` | — | Уникальный идентификатор группы (якорь скролла, поиск по id). |
|
|
542
542
|
| `items` | `InnerLink` | — | Карточки сервисов или ссылок внутри группы. |
|
|
543
543
|
| `label` | `LinksGroupTitle` \| `TitleClickable` \| `TitleStatic` | — | Заголовок группы в сетке карточек и в боковой навигации. |
|
|
544
|
-
| `onClick` | `((e?: MouseEvent<HTMLElement>) => void) \| undefined` | — |
|
|
544
|
+
| `onClick` | `((e?: MouseEvent<HTMLElement>) => void) \| undefined` | — | Колбэк клика по заголовку группы. |
|
|
545
545
|
|
|
546
546
|
- `LinksGroupBlockColor` = `"blue"` \| `"green"` \| `"neutral"` \| `"orange"` \| `"pink"` \| `"primary"` \| `"red"` \| `"violet"` \| `"yellow"`
|
|
547
547
|
|
|
@@ -578,38 +578,38 @@ import { MainMenu, MenuMobile } from '@cloud-ru/ds-uikit-product-header';
|
|
|
578
578
|
|
|
579
579
|
| Prop | Type | Default | Description |
|
|
580
580
|
|------|------|---------|-------------|
|
|
581
|
-
| `divider` | `"after"` \| `"before"` | — |
|
|
582
|
-
| `hidden` | `boolean \| undefined` | — |
|
|
583
|
-
| `href` | `string \| undefined` | — |
|
|
581
|
+
| `divider` | `"after"` \| `"before"` | — | Разделитель до/после пункта. |
|
|
582
|
+
| `hidden` | `boolean \| undefined` | — | Карточка скрыта (не рендерится, но остаётся в данных — например, для поиска). |
|
|
583
|
+
| `href` | `string \| undefined` | — | Ссылка карточки (рендерится как `<a>`). |
|
|
584
584
|
| `icon` | `JSXElementConstructor<{ size?: number; className?: string; }> \| undefined` | — | Иконка карточки. |
|
|
585
585
|
| `id` | `string` | — | Уникальный идентификатор карточки (также используется в избранном и при поиске). <br/> Один и тот же сервис может быть представлен в разных сегментах с разной <br/> детализацией (простая карточка в общем каталоге и раскрытая с вложенными <br/> сервисами версия в другом сегменте) — в этом случае обеим версиям задаётся <br/> общий `id`. При поиске из совпадений с одинаковым `id` в разных сегментах <br/> остаётся только первое по приоритету сегментов (см. <br/> {@link <br/> MainMenuProps.segments <br/> } <br/> ). |
|
|
586
586
|
| `label` | `string` | — | Заголовок карточки. |
|
|
587
|
-
| `onClick` | `(e?: MouseEvent<HTMLElement>) => void` | — |
|
|
587
|
+
| `onClick` | `(e?: MouseEvent<HTMLElement>) => void` | — | Колбэк клика по карточке. |
|
|
588
588
|
|
|
589
589
|
**MainMenuToggleProps**
|
|
590
590
|
|
|
591
591
|
| Prop | Type | Default | Description |
|
|
592
592
|
|------|------|---------|-------------|
|
|
593
|
-
| `onChange` | `(value: boolean) => void` | — |
|
|
594
|
-
| `value` | `boolean` | — |
|
|
593
|
+
| `onChange` | `(value: boolean) => void` | — | Колбэк изменения значения переключателя. |
|
|
594
|
+
| `value` | `boolean` | — | Текущее значение переключателя. |
|
|
595
595
|
|
|
596
596
|
**SearchProps**
|
|
597
597
|
|
|
598
598
|
| Prop | Type | Default | Description |
|
|
599
599
|
|------|------|---------|-------------|
|
|
600
600
|
| `onBlur` | `FocusEventHandler<HTMLInputElement> \| undefined` | — | Колбек обработки потери фокуса |
|
|
601
|
-
| `onChange` | `(value: string) => void` | — |
|
|
601
|
+
| `onChange` | `(value: string) => void` | — | Колбэк изменения значения поисковой строки. |
|
|
602
602
|
| `onFocus` | `FocusEventHandler<HTMLInputElement> \| undefined` | — | Колбек обработки получения фокуса |
|
|
603
|
-
| `onSearchNoResult` | `((value: string) => void) \| undefined` | — |
|
|
604
|
-
| `value` | `string` | — |
|
|
603
|
+
| `onSearchNoResult` | `((value: string) => void) \| undefined` | — | Колбэк вызывается, когда поиск по текущему значению не дал результатов. |
|
|
604
|
+
| `value` | `string` | — | Текущее значение поисковой строки. |
|
|
605
605
|
|
|
606
606
|
**TitleClickable**
|
|
607
607
|
|
|
608
608
|
| Prop | Type | Default | Description |
|
|
609
609
|
|------|------|---------|-------------|
|
|
610
|
-
| `href` | `string \| undefined` | — |
|
|
611
|
-
| `onClick` | `((e?: MouseEvent<HTMLElement>) => void) \| undefined` | — |
|
|
612
|
-
| `text` | `string` | — |
|
|
610
|
+
| `href` | `string \| undefined` | — | Ссылка заголовка (рендерится как `<a>`). |
|
|
611
|
+
| `onClick` | `((e?: MouseEvent<HTMLElement>) => void) \| undefined` | — | Колбэк клика по заголовку. |
|
|
612
|
+
| `text` | `string` | — | Текст заголовка. |
|
|
613
613
|
|
|
614
614
|
**TitleStatic**
|
|
615
615
|
|
|
@@ -617,7 +617,7 @@ import { MainMenu, MenuMobile } from '@cloud-ru/ds-uikit-product-header';
|
|
|
617
617
|
|------|------|---------|-------------|
|
|
618
618
|
| `href` | `undefined` | — | |
|
|
619
619
|
| `onClick` | `undefined` | — | |
|
|
620
|
-
| `text` | `string` | — |
|
|
620
|
+
| `text` | `string` | — | Текст заголовка. |
|
|
621
621
|
|
|
622
622
|
### Адаптивность
|
|
623
623
|
|
|
@@ -693,15 +693,15 @@ export function ControlledTheme() {
|
|
|
693
693
|
|
|
694
694
|
| Prop | Type | Default | Description |
|
|
695
695
|
|------|------|---------|-------------|
|
|
696
|
-
| `items` | `BaseItemWithoutNonGroup` \| `CommonGroupItem` \| `DroplistProps` \| `ScrollProps` | — |
|
|
697
|
-
| `onClick` | `(() => void)` | — |
|
|
698
|
-
| `onLogout` | `(() => void)` | — |
|
|
699
|
-
| `open` | `boolean` | — |
|
|
700
|
-
| `profile` | `UserProfileProps` | `{}` |
|
|
701
|
-
| `setOpen` | `((open: boolean) => void)` | — |
|
|
702
|
-
| `settingItems` | `BaseItemProps` | — |
|
|
703
|
-
| `theme` | `ThemeProps` | — |
|
|
704
|
-
| `triggerTooltip` | `string` | — |
|
|
696
|
+
| `items` | `BaseItemWithoutNonGroup` \| `CommonGroupItem` \| `DroplistProps` \| `ScrollProps` | — | Дополнительные пункты меню (например, список организаций). |
|
|
697
|
+
| `onClick` | `(() => void)` | — | Колбэк клика по кнопке-триггеру. |
|
|
698
|
+
| `onLogout` | `(() => void)` | — | Колбэк клика по пункту «Выйти». |
|
|
699
|
+
| `open` | `boolean` | — | Открыто ли меню. <br/> Не передано — состояние открытия неуправляемое (меню само переключает себя по клику на кнопку). |
|
|
700
|
+
| `profile` | `UserProfileProps` | `{}` | Профиль пользователя (имя, email, счётчик приглашений). |
|
|
701
|
+
| `setOpen` | `((open: boolean) => void)` | — | Колбэк открытия/закрытия меню. |
|
|
702
|
+
| `settingItems` | `BaseItemProps` | — | Пункты настроек в нижней части меню. |
|
|
703
|
+
| `theme` | `ThemeProps` | — | Переключатель темы в меню. Без пропа не отображается. |
|
|
704
|
+
| `triggerTooltip` | `string` | — | Текст подсказки для кнопки-триггера. |
|
|
705
705
|
|
|
706
706
|
##### Related types
|
|
707
707
|
|
|
@@ -711,18 +711,18 @@ export function ControlledTheme() {
|
|
|
711
711
|
|
|
712
712
|
| Prop | Type | Default | Description |
|
|
713
713
|
|------|------|---------|-------------|
|
|
714
|
-
| `onChange` | `((themeMode: ThemeMode) => void) \| undefined` | — |
|
|
715
|
-
| `value` | `"dark"` \| `"light"` \| `"system"` | — |
|
|
714
|
+
| `onChange` | `((themeMode: ThemeMode) => void) \| undefined` | — | Колбэк изменения режима темы. |
|
|
715
|
+
| `value` | `"dark"` \| `"light"` \| `"system"` | — | Текущий режим темы. Без пропа переключатель темы в меню не отображается. |
|
|
716
716
|
|
|
717
717
|
**UserProfileProps**
|
|
718
718
|
|
|
719
719
|
| Prop | Type | Default | Description |
|
|
720
720
|
|------|------|---------|-------------|
|
|
721
|
-
| `email` | `string \| undefined` | — |
|
|
722
|
-
| `fullName` | `string \| undefined` | — |
|
|
723
|
-
| `inviteCount` | `number \| undefined` | — |
|
|
724
|
-
| `itemWrapRender` | `((node: ReactNode) => ReactNode) \| undefined` | — |
|
|
725
|
-
| `onClick` | `((e: MouseEvent<HTMLElement>) => void) \| undefined` | — |
|
|
721
|
+
| `email` | `string \| undefined` | — | Email пользователя. |
|
|
722
|
+
| `fullName` | `string \| undefined` | — | Полное имя пользователя. Отображается в аватаре (первые буквы) и в пункте профиля меню. |
|
|
723
|
+
| `inviteCount` | `number \| undefined` | — | Число активных приглашений — отображается счётчиком на кнопке-триггере меню. |
|
|
724
|
+
| `itemWrapRender` | `((node: ReactNode) => ReactNode) \| undefined` | — | Оборачивает содержимое пункта профиля — например, ссылкой или дополнительной разметкой. |
|
|
725
|
+
| `onClick` | `((e: MouseEvent<HTMLElement>) => void) \| undefined` | — | Колбэк клика по пункту профиля. |
|
|
726
726
|
|
|
727
727
|
## Logo
|
|
728
728
|
|
|
@@ -773,14 +773,14 @@ export function WithMode() {
|
|
|
773
773
|
|
|
774
774
|
| Prop | Type | Default | Description |
|
|
775
775
|
|------|------|---------|-------------|
|
|
776
|
-
| `className` | `string` | — |
|
|
776
|
+
| `className` | `string` | — | CSS-класс корневого элемента. |
|
|
777
777
|
| `data-test-id` | `string` | — | |
|
|
778
|
-
| `href` | `string` | — |
|
|
779
|
-
| `loading` | `boolean` | — |
|
|
780
|
-
| `mode` | `"develop"` \| `"hybrid"` \| `"prod"` \| `"stage"` | — |
|
|
781
|
-
| `onClick` | `MouseEventHandler<HTMLAnchorElement>` | — |
|
|
782
|
-
| `path` | `string` | — |
|
|
783
|
-
| `tooltip` | `TooltipProps` | — |
|
|
778
|
+
| `href` | `string` | — | Ссылка логотипа. |
|
|
779
|
+
| `loading` | `boolean` | — | Флаг загрузки — логотип показывается в состоянии загрузки кнопки. |
|
|
780
|
+
| `mode` | `"develop"` \| `"hybrid"` \| `"prod"` \| `"stage"` | — | Режим окружения — отображается промо-тегом рядом с дефолтной иконкой (не для `'prod'`). |
|
|
781
|
+
| `onClick` | `MouseEventHandler<HTMLAnchorElement>` | — | Колбэк клика по логотипу. |
|
|
782
|
+
| `path` | `string` | — | Путь до кастомного изображения логотипа. Без пропа (или при ошибке загрузки) — дефолтная иконка. |
|
|
783
|
+
| `tooltip` | `TooltipProps` | — | Настройки тултипа логотипа. |
|
|
784
784
|
|
|
785
785
|
##### Related types
|
|
786
786
|
|
|
@@ -821,5 +821,5 @@ export function Basic() {
|
|
|
821
821
|
|
|
822
822
|
| Prop | Type | Default | Description |
|
|
823
823
|
|------|------|---------|-------------|
|
|
824
|
-
| `isMobile` | `boolean` | — |
|
|
825
|
-
| `items` | `BreadcrumbsProps` \| `Item` | — |
|
|
824
|
+
| `isMobile` | `boolean` | — | Мобильная раскладка — уменьшенный размер. |
|
|
825
|
+
| `items` | `BreadcrumbsProps` \| `Item` | — | Пункты хлебных крошек. |
|
|
@@ -4,6 +4,7 @@ import { ElementType } from 'react';
|
|
|
4
4
|
export type HeaderButtonProps<T extends ElementType = 'button'> = Omit<ButtonProps<T>, 'size' | 'appearance' | 'view'> & {
|
|
5
5
|
/** Настройки тултипа. `placement` и `disableSpanWrapper` зафиксированы под анатомию хедера */
|
|
6
6
|
tooltip?: Omit<TooltipProps, 'placement'>;
|
|
7
|
+
/** Мобильная раскладка — тултип не показывается (на mobile нет hover). */
|
|
7
8
|
isMobile?: boolean;
|
|
8
9
|
};
|
|
9
10
|
/**
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { WithSupportProps } from '@cloud-ru/ds-utils';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
export type HeaderLayoutProps = WithSupportProps<{
|
|
4
|
+
/** CSS-класс корневого элемента. */
|
|
4
5
|
className?: string;
|
|
6
|
+
/** Слот главного меню (слева, после логотипа). */
|
|
5
7
|
menu?: ReactNode;
|
|
8
|
+
/** Слот логотипа (крайний левый). */
|
|
6
9
|
logo?: ReactNode;
|
|
10
|
+
/** Слот селектора (например, выбор облака/организации), после меню. */
|
|
7
11
|
select?: ReactNode;
|
|
12
|
+
/** Слот хлебных крошек. На mobile переносится под основную строку хедера. */
|
|
8
13
|
breadcrumbs?: ReactNode;
|
|
14
|
+
/** Слот тулбара — правая часть хедера. */
|
|
9
15
|
toolbar?: ReactNode;
|
|
10
16
|
}>;
|
|
11
17
|
export declare function HeaderLayout({ menu, logo, select, breadcrumbs, toolbar, className, ...rest }: HeaderLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -3,12 +3,19 @@ import { WithSupportProps } from '@cloud-ru/ds-utils';
|
|
|
3
3
|
import { MouseEventHandler } from 'react';
|
|
4
4
|
import { HeaderLogoMode } from './constants';
|
|
5
5
|
export type LogoProps = WithSupportProps<{
|
|
6
|
+
/** Флаг загрузки — логотип показывается в состоянии загрузки кнопки. */
|
|
6
7
|
loading?: boolean;
|
|
8
|
+
/** Путь до кастомного изображения логотипа. Без пропа (или при ошибке загрузки) — дефолтная иконка. */
|
|
7
9
|
path?: string;
|
|
10
|
+
/** Режим окружения — отображается промо-тегом рядом с дефолтной иконкой (не для `'prod'`). */
|
|
8
11
|
mode?: HeaderLogoMode;
|
|
12
|
+
/** Ссылка логотипа. */
|
|
9
13
|
href: string;
|
|
14
|
+
/** Колбэк клика по логотипу. */
|
|
10
15
|
onClick?: MouseEventHandler<HTMLAnchorElement>;
|
|
16
|
+
/** CSS-класс корневого элемента. */
|
|
11
17
|
className?: string;
|
|
18
|
+
/** Настройки тултипа логотипа. */
|
|
12
19
|
tooltip?: TooltipProps;
|
|
13
20
|
}>;
|
|
14
21
|
export declare function Logo({ path, loading, mode, href, onClick, className, tooltip, ...rest }: LogoProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -40,6 +40,7 @@ export type ContentProps = {
|
|
|
40
40
|
* Колбэк клика по карточке сервиса в сегменте.
|
|
41
41
|
*/
|
|
42
42
|
onSegmentServiceClick?(service: InnerLink, e?: MouseEvent<HTMLElement>): void;
|
|
43
|
+
/** Избранное. Без пропа группа-предок карточек драга из избранного не активируется. */
|
|
43
44
|
favorite?: FavoriteProps;
|
|
44
45
|
/**
|
|
45
46
|
* Настройки меню (модалка по кнопке в тулбаре): описания карточек, цвета групп.
|
|
@@ -47,12 +48,17 @@ export type ContentProps = {
|
|
|
47
48
|
* Не передано — кнопка настроек в тулбаре не отображается.
|
|
48
49
|
*/
|
|
49
50
|
preferences?: MainMenuPreferencesProps;
|
|
51
|
+
/** Текущее значение поисковой строки — переключает контент между каталогом и результатами поиска. */
|
|
50
52
|
searchValue?: string;
|
|
53
|
+
/** Слот поисковой строки — рендерится над контентом. */
|
|
51
54
|
search?: ReactNode;
|
|
52
55
|
/** Слот над тулбаром правой колонки (например, баннеры) */
|
|
53
56
|
rightTop?: ReactNode;
|
|
57
|
+
/** Слот под сеткой карточек. */
|
|
54
58
|
footer?: ReactNode;
|
|
59
|
+
/** Мобильная раскладка. */
|
|
55
60
|
isMobile?: boolean;
|
|
61
|
+
/** CSS-класс корневого элемента. */
|
|
56
62
|
className?: string;
|
|
57
63
|
/** Флаг загрузки данных */
|
|
58
64
|
loading?: boolean;
|
|
@@ -13,6 +13,7 @@ const utils_1 = require("@cloud-ru/ds-utils");
|
|
|
13
13
|
const classnames_1 = __importDefault(require("classnames"));
|
|
14
14
|
const react_1 = require("react");
|
|
15
15
|
const locale_1 = require("../../../../locale");
|
|
16
|
+
const noop_1 = require("../../../../utils/noop");
|
|
16
17
|
const shouldBeOpenedInNewTab_1 = require("../../../../utils/shouldBeOpenedInNewTab");
|
|
17
18
|
const utils_2 = require("../../utils");
|
|
18
19
|
const MountAnimation_1 = require("../MountAnimation");
|
|
@@ -24,7 +25,6 @@ const useContentSegmentsSortable_1 = require("./hooks/useContentSegmentsSortable
|
|
|
24
25
|
const useProgressiveCount_1 = require("./hooks/useProgressiveCount");
|
|
25
26
|
const useSegmentDnd_1 = require("./hooks/useSegmentDnd");
|
|
26
27
|
const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
|
|
27
|
-
const noopFavoriteChange = () => { };
|
|
28
28
|
function Content({ searchValue, search, rightTop, segments, searchGroups = [], segmentPrefs, activeSegmentId, onActiveSegmentChange, onSegmentOrderChange, onSegmentExpandedChange, onSegmentServiceClick, className, footer, favorite, isMobile, preferences, loading, }) {
|
|
29
29
|
const { t } = locale_1.headerLocale.useTranslations();
|
|
30
30
|
const showDescription = (0, react_1.useDeferredValue)(preferences?.showDescription.value ?? false);
|
|
@@ -49,7 +49,7 @@ function Content({ searchValue, search, rightTop, segments, searchGroups = [], s
|
|
|
49
49
|
onSegmentServiceClick?.(service, e);
|
|
50
50
|
service.onClick?.(e);
|
|
51
51
|
});
|
|
52
|
-
const handleFavoriteChange = (0, utils_1.useEventHandler)((productId) => favorite ? favorite.onChange(productId) :
|
|
52
|
+
const handleFavoriteChange = (0, utils_1.useEventHandler)((productId) => (favorite ? favorite.onChange(productId) : noop_1.noop));
|
|
53
53
|
const favoriteValue = favorite?.value;
|
|
54
54
|
const favoriteIds = (0, react_1.useMemo)(() => (favoriteValue ? new Set(favoriteValue) : undefined), [favoriteValue]);
|
|
55
55
|
const showGroupsColors = preferences?.showGroupsColors?.value;
|
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { MainMenuPreferencesProps } from '../../../../types';
|
|
3
3
|
export type ContentToolbarSegmentItem = {
|
|
4
|
+
/** Значение сегмента (id). */
|
|
4
5
|
value: string;
|
|
6
|
+
/** Подпись сегмента. */
|
|
5
7
|
label: string;
|
|
8
|
+
/** Иконка сегмента. */
|
|
6
9
|
icon?: ReactNode;
|
|
7
10
|
};
|
|
8
11
|
export type ContentToolbarProps = {
|
|
12
|
+
/** Значение активного сегмента SegmentControl. */
|
|
9
13
|
segment: string;
|
|
14
|
+
/** Колбэк смены активного сегмента. */
|
|
10
15
|
onSegmentChange(segment: string): void;
|
|
16
|
+
/** Пункты SegmentControl. Без пунктов (или с одним) SegmentControl не отображается. */
|
|
11
17
|
segmentItems?: ContentToolbarSegmentItem[];
|
|
18
|
+
/** Все группы сегмента раскрыты — определяет иконку кнопки свернуть/развернуть все. */
|
|
12
19
|
allGroupsExpanded: boolean;
|
|
20
|
+
/** Колбэк клика по кнопке свернуть/развернуть все группы. */
|
|
13
21
|
onToggleAllGroupsExpanded(): void;
|
|
14
22
|
/** Настройки меню (модалка по кнопке). Не передано — кнопка настроек не отображается. */
|
|
15
23
|
preferences?: MainMenuPreferencesProps;
|
|
24
|
+
/** Мобильная раскладка — кнопка свернуть/развернуть все скрывается. */
|
|
16
25
|
isMobile?: boolean;
|
|
17
26
|
/** Флаг загрузки данных — сегменты подгружаются с бэка, поэтому SegmentControl тоже уходит в скелетон. */
|
|
18
27
|
loading?: boolean;
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
import { LinksGroup, LinksGroupBlockColor, LinksGroupTitle } from '../../../../types';
|
|
2
2
|
import { CardsContextValue } from '../../cardsContext';
|
|
3
3
|
export type SortableGroupProps = Pick<LinksGroup, 'icon' | 'items'> & {
|
|
4
|
+
/** Id группы. */
|
|
4
5
|
id: string;
|
|
6
|
+
/** Заголовок группы. */
|
|
5
7
|
label: LinksGroupTitle;
|
|
8
|
+
/** Раскрыта ли группа. */
|
|
6
9
|
isExpanded?: boolean;
|
|
10
|
+
/** Мобильная раскладка. */
|
|
7
11
|
isMobile?: boolean;
|
|
8
12
|
/** Группу можно перетаскивать (иначе рендерится без `useSortable`). */
|
|
9
13
|
enableServiceDrag?: boolean;
|
|
14
|
+
/** Цвет блока группы. */
|
|
10
15
|
blockColor?: LinksGroupBlockColor;
|
|
16
|
+
/** Визуальное выделение группы. */
|
|
11
17
|
highlight?: boolean;
|
|
18
|
+
/** Разрешено ли добавление карточек группы в избранное. */
|
|
12
19
|
groupFavoritesEnabled?: boolean;
|
|
13
20
|
/** Группа появляется с fade-in при монтировании (на desktop; на mobile анимирует контейнер). */
|
|
14
21
|
appear?: boolean;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { InnerLink } from '../../../../../types';
|
|
2
2
|
export type SortableGroupCardsProps = {
|
|
3
|
+
/** Id группы-предка. */
|
|
3
4
|
groupId: string;
|
|
5
|
+
/** Карточки сервисов группы. */
|
|
4
6
|
items: InnerLink[];
|
|
7
|
+
/** Разрешено ли добавление карточек группы в избранное. */
|
|
5
8
|
groupFavoritesEnabled?: boolean;
|
|
6
9
|
};
|
|
7
10
|
declare function SortableGroupCardsBase({ groupId, items, groupFavoritesEnabled }: SortableGroupCardsProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { DraggableAttributes, DraggableSyntheticListeners } from '@dnd-kit/core';
|
|
2
2
|
export type SortableGroupDragHandleProps = {
|
|
3
|
+
/** ARIA-атрибуты `dnd-kit` draggable-элемента. */
|
|
3
4
|
attributes?: DraggableAttributes;
|
|
5
|
+
/** Обработчики событий `dnd-kit` для инициации перетаскивания. */
|
|
4
6
|
listeners?: DraggableSyntheticListeners;
|
|
5
7
|
};
|
|
6
8
|
export declare function SortableGroupDragHandle({ attributes, listeners }: SortableGroupDragHandleProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { InnerLink } from '../../../../../../types';
|
|
2
2
|
export type SubCategoryProps = {
|
|
3
|
+
/** Id группы-предка. */
|
|
3
4
|
groupId: string;
|
|
5
|
+
/** Карточка подкатегории (с непустым {@link InnerLink.items}). */
|
|
4
6
|
service: InnerLink;
|
|
7
|
+
/** Разрешено ли добавление карточек группы в избранное. */
|
|
5
8
|
groupFavoritesEnabled?: boolean;
|
|
6
9
|
};
|
|
7
10
|
declare function SubCategoryBase({ groupId, service, groupFavoritesEnabled }: SubCategoryProps): import("react/jsx-runtime").JSX.Element;
|