@cloud-ru/ds-uikit-product-header 1.5.2-preview-b174c2b1.0 → 1.5.2

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 (219) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +91 -91
  3. package/dist/cjs/components/HeaderButton/HeaderButton.d.ts +0 -1
  4. package/dist/cjs/components/HeaderLayout/HeaderLayout.d.ts +0 -6
  5. package/dist/cjs/components/Logo/Logo.d.ts +0 -7
  6. package/dist/cjs/components/MainMenu/MainMenu.js +6 -9
  7. package/dist/cjs/components/MainMenu/helperComponents/Content/Content.d.ts +0 -6
  8. package/dist/cjs/components/MainMenu/helperComponents/Content/Content.js +11 -35
  9. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.d.ts +0 -9
  10. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/SortableGroup.d.ts +4 -23
  11. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/SortableGroup.js +10 -38
  12. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.d.ts +4 -7
  13. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.js +4 -9
  14. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupDragHandle.d.ts +0 -2
  15. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.d.ts +1 -3
  16. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.js +4 -6
  17. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupSkeleton.d.ts +0 -1
  18. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.d.ts +4 -9
  19. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.js +12 -17
  20. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategoryTitle.d.ts +3 -8
  21. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategoryTitle.js +18 -24
  22. package/dist/cjs/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.css +0 -17
  23. package/dist/cjs/components/MainMenu/helperComponents/Content/hooks/useContentSegmentsSortable.js +2 -4
  24. package/dist/cjs/components/MainMenu/helperComponents/Content/hooks/useSegmentDnd.d.ts +4 -4
  25. package/dist/cjs/components/MainMenu/helperComponents/Content/hooks/useSegmentDnd.js +3 -3
  26. package/dist/cjs/components/MainMenu/helperComponents/Content/styles.module.css +0 -16
  27. package/dist/cjs/components/MainMenu/helperComponents/Favorites/Favorites.d.ts +4 -4
  28. package/dist/cjs/components/MainMenu/helperComponents/Favorites/Favorites.js +33 -15
  29. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/EmptyState/EmptyState.d.ts +1 -4
  30. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/EmptyState/EmptyState.js +2 -4
  31. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesSortable.d.ts +19 -0
  32. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesSortable.js +30 -0
  33. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/SortableFavoriteCard.d.ts +1 -7
  34. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/SortableFavoriteCard.js +2 -4
  35. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/index.d.ts +1 -2
  36. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/index.js +1 -2
  37. package/dist/cjs/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesDnd.d.ts +25 -0
  38. package/dist/cjs/components/MainMenu/helperComponents/Favorites/hooks/{useFavoritesReorder.js → useFavoritesDnd.js} +22 -21
  39. package/dist/cjs/components/MainMenu/helperComponents/MenuBottom/MenuBottom.d.ts +0 -2
  40. package/dist/cjs/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.d.ts +1 -1
  41. package/dist/cjs/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.js +7 -7
  42. package/dist/cjs/components/MainMenu/helperComponents/MenuDesktop/styles.module.css +5 -0
  43. package/dist/cjs/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.d.ts +0 -3
  44. package/dist/cjs/components/MainMenu/helperComponents/MenuMobile/MenuMobile.d.ts +1 -1
  45. package/dist/cjs/components/MainMenu/helperComponents/MenuMobile/MenuMobile.js +6 -5
  46. package/dist/cjs/components/MainMenu/helperComponents/MenuMobile/styles.module.css +7 -0
  47. package/dist/cjs/components/MainMenu/helperComponents/MountAnimation/MountAnimation.d.ts +1 -1
  48. package/dist/cjs/components/MainMenu/helperComponents/MountAnimation/MountAnimation.js +1 -4
  49. package/dist/cjs/components/MainMenu/helperComponents/ServiceCard/ServiceCard.d.ts +6 -30
  50. package/dist/cjs/components/MainMenu/helperComponents/ServiceCard/ServiceCard.js +21 -30
  51. package/dist/cjs/components/MainMenu/helperComponents/ServiceCard/styles.module.css +1 -6
  52. package/dist/cjs/components/MainMenu/hooks/useMainMenuDnd.d.ts +4 -6
  53. package/dist/cjs/components/MainMenu/hooks/useMainMenuDnd.js +6 -4
  54. package/dist/cjs/components/MainMenu/hooks/useMenuItems.js +7 -12
  55. package/dist/cjs/components/MainMenu/types.d.ts +1 -31
  56. package/dist/cjs/components/MainMenu/utils/filterLinksGroupsFuzzy.d.ts +0 -5
  57. package/dist/cjs/components/MainMenu/utils/filterLinksGroupsFuzzy.js +7 -21
  58. package/dist/cjs/components/MainMenu/utils/flatLinksGroups.d.ts +0 -2
  59. package/dist/cjs/components/MainMenu/utils/flatLinksGroups.js +0 -5
  60. package/dist/cjs/components/MainMenu/utils/resolveInnerLinksByIds.d.ts +2 -2
  61. package/dist/cjs/components/MainMenu/utils/resolveInnerLinksByIds.js +4 -2
  62. package/dist/cjs/components/PathBreadcrumbs/PathBreadcrumbs.d.ts +0 -2
  63. package/dist/cjs/components/UserMenu/UserMenu.d.ts +0 -13
  64. package/dist/cjs/components/UserMenu/types.d.ts +0 -7
  65. package/dist/cjs/style.css +13 -39
  66. package/dist/esm/components/HeaderButton/HeaderButton.d.ts +0 -1
  67. package/dist/esm/components/HeaderLayout/HeaderLayout.d.ts +0 -6
  68. package/dist/esm/components/Logo/Logo.d.ts +0 -7
  69. package/dist/esm/components/MainMenu/MainMenu.js +7 -10
  70. package/dist/esm/components/MainMenu/helperComponents/Content/Content.d.ts +0 -6
  71. package/dist/esm/components/MainMenu/helperComponents/Content/Content.js +13 -37
  72. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.d.ts +0 -9
  73. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/SortableGroup.d.ts +4 -23
  74. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/SortableGroup.js +9 -37
  75. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.d.ts +4 -7
  76. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.js +4 -9
  77. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupDragHandle.d.ts +0 -2
  78. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.d.ts +1 -3
  79. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.js +3 -5
  80. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupSkeleton.d.ts +0 -1
  81. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.d.ts +4 -9
  82. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.js +13 -18
  83. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategoryTitle.d.ts +3 -8
  84. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategoryTitle.js +19 -25
  85. package/dist/esm/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.css +0 -17
  86. package/dist/esm/components/MainMenu/helperComponents/Content/hooks/useContentSegmentsSortable.js +2 -4
  87. package/dist/esm/components/MainMenu/helperComponents/Content/hooks/useSegmentDnd.d.ts +4 -4
  88. package/dist/esm/components/MainMenu/helperComponents/Content/hooks/useSegmentDnd.js +3 -3
  89. package/dist/esm/components/MainMenu/helperComponents/Content/styles.module.css +0 -16
  90. package/dist/esm/components/MainMenu/helperComponents/Favorites/Favorites.d.ts +4 -4
  91. package/dist/esm/components/MainMenu/helperComponents/Favorites/Favorites.js +35 -17
  92. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/EmptyState/EmptyState.d.ts +1 -4
  93. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/EmptyState/EmptyState.js +1 -3
  94. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesSortable.d.ts +19 -0
  95. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesSortable.js +24 -0
  96. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/SortableFavoriteCard.d.ts +1 -7
  97. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/SortableFavoriteCard.js +1 -3
  98. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/index.d.ts +1 -2
  99. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/index.js +1 -2
  100. package/dist/esm/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesDnd.d.ts +25 -0
  101. package/dist/esm/components/MainMenu/helperComponents/Favorites/hooks/{useFavoritesReorder.js → useFavoritesDnd.js} +22 -21
  102. package/dist/esm/components/MainMenu/helperComponents/MenuBottom/MenuBottom.d.ts +0 -2
  103. package/dist/esm/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.d.ts +1 -1
  104. package/dist/esm/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.js +7 -7
  105. package/dist/esm/components/MainMenu/helperComponents/MenuDesktop/styles.module.css +5 -0
  106. package/dist/esm/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.d.ts +0 -3
  107. package/dist/esm/components/MainMenu/helperComponents/MenuMobile/MenuMobile.d.ts +1 -1
  108. package/dist/esm/components/MainMenu/helperComponents/MenuMobile/MenuMobile.js +6 -5
  109. package/dist/esm/components/MainMenu/helperComponents/MenuMobile/styles.module.css +7 -0
  110. package/dist/esm/components/MainMenu/helperComponents/MountAnimation/MountAnimation.d.ts +1 -1
  111. package/dist/esm/components/MainMenu/helperComponents/MountAnimation/MountAnimation.js +1 -4
  112. package/dist/esm/components/MainMenu/helperComponents/ServiceCard/ServiceCard.d.ts +6 -30
  113. package/dist/esm/components/MainMenu/helperComponents/ServiceCard/ServiceCard.js +20 -30
  114. package/dist/esm/components/MainMenu/helperComponents/ServiceCard/styles.module.css +1 -6
  115. package/dist/esm/components/MainMenu/hooks/useMainMenuDnd.d.ts +4 -6
  116. package/dist/esm/components/MainMenu/hooks/useMainMenuDnd.js +8 -6
  117. package/dist/esm/components/MainMenu/hooks/useMenuItems.js +8 -13
  118. package/dist/esm/components/MainMenu/types.d.ts +1 -31
  119. package/dist/esm/components/MainMenu/utils/filterLinksGroupsFuzzy.d.ts +0 -5
  120. package/dist/esm/components/MainMenu/utils/filterLinksGroupsFuzzy.js +7 -20
  121. package/dist/esm/components/MainMenu/utils/flatLinksGroups.d.ts +0 -2
  122. package/dist/esm/components/MainMenu/utils/flatLinksGroups.js +0 -4
  123. package/dist/esm/components/MainMenu/utils/resolveInnerLinksByIds.d.ts +2 -2
  124. package/dist/esm/components/MainMenu/utils/resolveInnerLinksByIds.js +4 -2
  125. package/dist/esm/components/PathBreadcrumbs/PathBreadcrumbs.d.ts +0 -2
  126. package/dist/esm/components/UserMenu/UserMenu.d.ts +0 -13
  127. package/dist/esm/components/UserMenu/types.d.ts +0 -7
  128. package/dist/esm/style.css +13 -39
  129. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  130. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  131. package/package.json +28 -28
  132. package/src/components/HeaderButton/HeaderButton.tsx +0 -1
  133. package/src/components/HeaderLayout/HeaderLayout.tsx +0 -6
  134. package/src/components/Logo/Logo.tsx +0 -7
  135. package/src/components/MainMenu/MainMenu.tsx +6 -11
  136. package/src/components/MainMenu/helperComponents/Content/Content.tsx +59 -104
  137. package/src/components/MainMenu/helperComponents/Content/helperComponents/ContentToolbar/ContentToolbar.tsx +0 -9
  138. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/SortableGroup.tsx +47 -106
  139. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupCards.tsx +30 -20
  140. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupDragHandle.tsx +0 -2
  141. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupHeader.tsx +6 -11
  142. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SortableGroupSkeleton.tsx +0 -1
  143. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategory.tsx +87 -72
  144. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/components/SubCategory/SubCategoryTitle.tsx +48 -65
  145. package/src/components/MainMenu/helperComponents/Content/helperComponents/SortableGroup/styles.module.scss +0 -27
  146. package/src/components/MainMenu/helperComponents/Content/hooks/useContentSegmentsSortable.ts +2 -4
  147. package/src/components/MainMenu/helperComponents/Content/hooks/useSegmentDnd.tsx +7 -8
  148. package/src/components/MainMenu/helperComponents/Content/styles.module.scss +0 -19
  149. package/src/components/MainMenu/helperComponents/Favorites/Favorites.tsx +82 -43
  150. package/src/components/MainMenu/helperComponents/Favorites/components/EmptyState/EmptyState.tsx +1 -6
  151. package/src/components/MainMenu/helperComponents/Favorites/components/FavoritesSortable.tsx +78 -0
  152. package/src/components/MainMenu/helperComponents/Favorites/components/SortableFavoriteCard.tsx +1 -8
  153. package/src/components/MainMenu/helperComponents/Favorites/components/index.ts +1 -2
  154. package/src/components/MainMenu/helperComponents/Favorites/hooks/{useFavoritesReorder.tsx → useFavoritesDnd.tsx} +30 -32
  155. package/src/components/MainMenu/helperComponents/MenuBottom/MenuBottom.tsx +0 -2
  156. package/src/components/MainMenu/helperComponents/MenuDesktop/MenuDesktop.tsx +11 -17
  157. package/src/components/MainMenu/helperComponents/MenuDesktop/styles.module.scss +6 -0
  158. package/src/components/MainMenu/helperComponents/MenuHeaderBrand/MenuHeaderBrand.tsx +0 -3
  159. package/src/components/MainMenu/helperComponents/MenuMobile/MenuMobile.tsx +10 -7
  160. package/src/components/MainMenu/helperComponents/MenuMobile/styles.module.scss +7 -0
  161. package/src/components/MainMenu/helperComponents/MountAnimation/MountAnimation.tsx +1 -5
  162. package/src/components/MainMenu/helperComponents/ServiceCard/ServiceCard.tsx +41 -92
  163. package/src/components/MainMenu/helperComponents/ServiceCard/styles.module.scss +1 -7
  164. package/src/components/MainMenu/hooks/useMainMenuDnd.tsx +12 -9
  165. package/src/components/MainMenu/hooks/useMenuItems.tsx +10 -34
  166. package/src/components/MainMenu/types.ts +1 -31
  167. package/src/components/MainMenu/utils/filterLinksGroupsFuzzy.ts +8 -29
  168. package/src/components/MainMenu/utils/flatLinksGroups.ts +0 -5
  169. package/src/components/MainMenu/utils/resolveInnerLinksByIds.ts +6 -3
  170. package/src/components/PathBreadcrumbs/PathBreadcrumbs.tsx +0 -2
  171. package/src/components/UserMenu/UserMenu.tsx +0 -13
  172. package/src/components/UserMenu/types.ts +0 -7
  173. package/dist/cjs/components/MainMenu/helperComponents/Content/cardsContext.d.ts +0 -20
  174. package/dist/cjs/components/MainMenu/helperComponents/Content/cardsContext.js +0 -17
  175. package/dist/cjs/components/MainMenu/helperComponents/Content/hooks/useProgressiveCount.d.ts +0 -12
  176. package/dist/cjs/components/MainMenu/helperComponents/Content/hooks/useProgressiveCount.js +0 -39
  177. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesDesktop.d.ts +0 -35
  178. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesDesktop.js +0 -27
  179. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesList.d.ts +0 -21
  180. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesList.js +0 -31
  181. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesMobile.d.ts +0 -28
  182. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesMobile.js +0 -20
  183. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesReorderList.d.ts +0 -24
  184. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/FavoritesReorderList.js +0 -36
  185. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/RecentList.d.ts +0 -24
  186. package/dist/cjs/components/MainMenu/helperComponents/Favorites/components/RecentList.js +0 -30
  187. package/dist/cjs/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesAutoSwitch.d.ts +0 -16
  188. package/dist/cjs/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesAutoSwitch.js +0 -28
  189. package/dist/cjs/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesReorder.d.ts +0 -30
  190. package/dist/cjs/utils/noop.d.ts +0 -1
  191. package/dist/cjs/utils/noop.js +0 -5
  192. package/dist/esm/components/MainMenu/helperComponents/Content/cardsContext.d.ts +0 -20
  193. package/dist/esm/components/MainMenu/helperComponents/Content/cardsContext.js +0 -13
  194. package/dist/esm/components/MainMenu/helperComponents/Content/hooks/useProgressiveCount.d.ts +0 -12
  195. package/dist/esm/components/MainMenu/helperComponents/Content/hooks/useProgressiveCount.js +0 -35
  196. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesDesktop.d.ts +0 -35
  197. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesDesktop.js +0 -24
  198. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesList.d.ts +0 -21
  199. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesList.js +0 -25
  200. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesMobile.d.ts +0 -28
  201. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesMobile.js +0 -17
  202. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesReorderList.d.ts +0 -24
  203. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/FavoritesReorderList.js +0 -30
  204. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/RecentList.d.ts +0 -24
  205. package/dist/esm/components/MainMenu/helperComponents/Favorites/components/RecentList.js +0 -24
  206. package/dist/esm/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesAutoSwitch.d.ts +0 -16
  207. package/dist/esm/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesAutoSwitch.js +0 -25
  208. package/dist/esm/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesReorder.d.ts +0 -30
  209. package/dist/esm/utils/noop.d.ts +0 -1
  210. package/dist/esm/utils/noop.js +0 -1
  211. package/src/components/MainMenu/helperComponents/Content/cardsContext.ts +0 -36
  212. package/src/components/MainMenu/helperComponents/Content/hooks/useProgressiveCount.ts +0 -46
  213. package/src/components/MainMenu/helperComponents/Favorites/components/FavoritesDesktop.tsx +0 -71
  214. package/src/components/MainMenu/helperComponents/Favorites/components/FavoritesList.tsx +0 -59
  215. package/src/components/MainMenu/helperComponents/Favorites/components/FavoritesMobile.tsx +0 -60
  216. package/src/components/MainMenu/helperComponents/Favorites/components/FavoritesReorderList.tsx +0 -75
  217. package/src/components/MainMenu/helperComponents/Favorites/components/RecentList.tsx +0 -62
  218. package/src/components/MainMenu/helperComponents/Favorites/hooks/useFavoritesAutoSwitch.ts +0 -32
  219. package/src/utils/noop.ts +0 -1
@@ -13,16 +13,12 @@ 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");
17
16
  const shouldBeOpenedInNewTab_1 = require("../../../../utils/shouldBeOpenedInNewTab");
18
17
  const utils_2 = require("../../utils");
19
- const MountAnimation_1 = require("../MountAnimation");
20
- const cardsContext_1 = require("./cardsContext");
21
18
  const constants_1 = require("./constants");
22
19
  const ContentToolbar_1 = require("./helperComponents/ContentToolbar");
23
20
  const SortableGroup_1 = require("./helperComponents/SortableGroup");
24
21
  const useContentSegmentsSortable_1 = require("./hooks/useContentSegmentsSortable");
25
- const useProgressiveCount_1 = require("./hooks/useProgressiveCount");
26
22
  const useSegmentDnd_1 = require("./hooks/useSegmentDnd");
27
23
  const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
28
24
  function Content({ searchValue, search, rightTop, segments, searchGroups = [], segmentPrefs, activeSegmentId, onActiveSegmentChange, onSegmentOrderChange, onSegmentExpandedChange, onSegmentServiceClick, className, footer, favorite, isMobile, preferences, loading, }) {
@@ -37,8 +33,7 @@ function Content({ searchValue, search, rightTop, segments, searchGroups = [], s
37
33
  });
38
34
  const isSearching = Boolean(searchValue);
39
35
  const enableServiceDrag = Boolean(favorite) && !isMobile && !isSearching;
40
- // Ссылки на обработчики стабильны: иначе `memo` карточек ломается при каждом рендере потребителя.
41
- const handleLinkClick = (0, utils_1.useEventHandler)((service, e) => {
36
+ const handleLinkClick = (0, react_1.useCallback)((service, e) => {
42
37
  if (service.disabled) {
43
38
  e?.preventDefault();
44
39
  return;
@@ -48,11 +43,7 @@ function Content({ searchValue, search, rightTop, segments, searchGroups = [], s
48
43
  }
49
44
  onSegmentServiceClick?.(service, e);
50
45
  service.onClick?.(e);
51
- });
52
- const handleFavoriteChange = (0, utils_1.useEventHandler)((productId) => (favorite ? favorite.onChange(productId) : noop_1.noop));
53
- const favoriteValue = favorite?.value;
54
- const favoriteIds = (0, react_1.useMemo)(() => (favoriteValue ? new Set(favoriteValue) : undefined), [favoriteValue]);
55
- const showGroupsColors = preferences?.showGroupsColors?.value;
46
+ }, [onSegmentServiceClick]);
56
47
  const { orderedGroups, expandedIds, onExpandedChange, handleDragEnd: handleSortableDragEnd, } = (0, useContentSegmentsSortable_1.useContentSegmentsSortable)({
57
48
  segments,
58
49
  activeSegmentId: segmentId,
@@ -70,50 +61,35 @@ function Content({ searchValue, search, rightTop, segments, searchGroups = [], s
70
61
  expandedIds,
71
62
  onSortableDragEnd: handleSortableDragEnd,
72
63
  showDescription,
73
- showGroupsColors,
74
- favoriteIds,
75
- onFavoriteChange: handleFavoriteChange,
64
+ showGroupsColors: preferences?.showGroupsColors?.value,
65
+ favorite,
76
66
  });
77
- // Первый экран монтируется сразу, остальные группы дорисовываются порциями (см. `useProgressiveCount`).
78
- const renderedGroupsCount = (0, useProgressiveCount_1.useProgressiveCount)(visibleGroups.length, `${segmentId}|${isSearching}`, !loading);
79
- const renderedGroups = (0, react_1.useMemo)(() => (renderedGroupsCount < visibleGroups.length ? visibleGroups.slice(0, renderedGroupsCount) : visibleGroups), [visibleGroups, renderedGroupsCount]);
80
- const expandedIdsSet = (0, react_1.useMemo)(() => new Set(expandedIds), [expandedIds]);
81
- const visibleGroupIds = (0, react_1.useMemo)(() => visibleGroups.map(({ id }) => id), [visibleGroups]);
82
- const allGroupsExpanded = visibleGroups.length > 0 && visibleGroupIds.every(id => expandedIdsSet.has(id));
67
+ const allGroupsExpanded = visibleGroups.length > 0 && visibleGroups.every(({ id }) => expandedIds.includes(id));
83
68
  const handleToggleAllGroupsExpanded = (0, react_1.useCallback)(() => {
69
+ const visibleIds = visibleGroups.map(({ id }) => id);
84
70
  if (allGroupsExpanded) {
85
- const visibleIdsSet = new Set(visibleGroupIds);
86
- onExpandedChange(expandedIds.filter(id => !visibleIdsSet.has(id)));
71
+ onExpandedChange(expandedIds.filter(id => !visibleIds.includes(id)));
87
72
  return;
88
73
  }
89
- onExpandedChange([...new Set([...expandedIds, ...visibleGroupIds])]);
90
- }, [allGroupsExpanded, expandedIds, onExpandedChange, visibleGroupIds]);
91
- const cardsContext = (0, react_1.useMemo)(() => ({
92
- showDescription,
93
- isMobile,
94
- dragEnabled: enableServiceDrag,
95
- favoriteIds,
96
- onFavoriteChange: favoriteIds ? handleFavoriteChange : undefined,
97
- onServiceClick: handleLinkClick,
98
- }), [showDescription, isMobile, enableServiceDrag, favoriteIds, handleFavoriteChange, handleLinkClick]);
74
+ onExpandedChange([...new Set([...expandedIds, ...visibleIds])]);
75
+ }, [allGroupsExpanded, expandedIds, onExpandedChange, visibleGroups]);
99
76
  const segmentItems = (0, react_1.useMemo)(() => segments?.map(segment => ({
100
77
  value: segment.id,
101
78
  label: segment.label,
102
79
  icon: segment.icon,
103
80
  })), [segments]);
104
81
  const hasCards = visibleGroups.length > 0;
105
- const mountAnimationType = isMobile ? undefined : 'fade-slide-up-right';
106
82
  const cards = (() => {
107
83
  if (loading) {
108
84
  return Array.from({ length: 5 }).map((_, index) => (0, jsx_runtime_1.jsx)(SortableGroup_1.SortableGroupSkeleton, { isMobile: isMobile }, index));
109
85
  }
110
86
  if (hasCards) {
111
- return ((0, jsx_runtime_1.jsx)(sortable_1.SortableContext, { items: visibleGroupIds, strategy: sortable_1.verticalListSortingStrategy, children: (0, jsx_runtime_1.jsx)(cardsContext_1.CardsContext.Provider, { value: cardsContext, children: (0, jsx_runtime_1.jsx)(accordion_1.Accordion, { selectionMode: 'multiple', expanded: expandedIds, onExpandedChange: onExpandedChange, children: renderedGroups.map(({ id, label, icon, items, favoritesEnabled, blockColor, highlight }) => ((0, jsx_runtime_1.jsx)(SortableGroup_1.SortableGroup, { id: id, icon: icon, label: label, items: items, isExpanded: expandedIdsSet.has(id), blockColor: (0, utils_2.resolveGroupBlockColor)(blockColor, showGroupsColors), isMobile: isMobile, enableServiceDrag: enableServiceDrag, groupFavoritesEnabled: favoritesEnabled, appear: !isMobile, highlight: highlight }, id))) }) }) }));
87
+ return ((0, jsx_runtime_1.jsx)(sortable_1.SortableContext, { items: visibleGroups.map(({ id }) => id), strategy: sortable_1.verticalListSortingStrategy, children: (0, jsx_runtime_1.jsx)(accordion_1.Accordion, { selectionMode: 'multiple', expanded: expandedIds, onExpandedChange: onExpandedChange, children: visibleGroups.map(({ id, label, icon, items, favoritesEnabled, blockColor, highlight }) => ((0, jsx_runtime_1.jsx)(SortableGroup_1.SortableGroup, { id: id, icon: icon, label: label, items: items, isExpanded: expandedIds.includes(id), blockColor: (0, utils_2.resolveGroupBlockColor)(blockColor, preferences?.showGroupsColors?.value), showDescription: showDescription, isMobile: isMobile, enableServiceDrag: enableServiceDrag, favorite: favorite, groupFavoritesEnabled: favoritesEnabled, onServiceClick: handleLinkClick, highlight: highlight }, id))) }) }));
112
88
  }
113
89
  return ((0, jsx_runtime_1.jsx)(info_block_1.InfoBlock, { size: 'm', icon: {
114
90
  icon: isSearching ? system_1.SearchSVG : system_1.CrossSVG,
115
91
  appearance: 'neutral',
116
92
  }, content: isSearching ? t('noDataFound') : t('noData'), "data-test-id": isSearching ? constants_1.TEST_IDS.noDataFound : constants_1.TEST_IDS.noData, "data-mobile": isMobile || undefined, className: styles_module_scss_1.default.noData }));
117
93
  })();
118
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [search, (0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(styles_module_scss_1.default.content, className), "data-mobile": isMobile || undefined, "data-empty": (!loading && !hasCards) || undefined, children: [!isSearching && ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsxs)(MountAnimation_1.MountAnimation, { type: mountAnimationType, className: styles_module_scss_1.default.top, children: [(0, jsx_runtime_1.jsx)(ContentToolbar_1.ContentToolbar, { segment: segmentId, onSegmentChange: setSegmentId, segmentItems: segmentItems, allGroupsExpanded: allGroupsExpanded, onToggleAllGroupsExpanded: handleToggleAllGroupsExpanded, preferences: preferences, isMobile: isMobile, loading: loading }), rightTop] }) })), cards, footer] })] }));
94
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [search, (0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(styles_module_scss_1.default.content, className), "data-empty": (!loading && !hasCards) || undefined, children: [!isSearching && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ContentToolbar_1.ContentToolbar, { segment: segmentId, onSegmentChange: setSegmentId, segmentItems: segmentItems, allGroupsExpanded: allGroupsExpanded, onToggleAllGroupsExpanded: handleToggleAllGroupsExpanded, preferences: preferences, isMobile: isMobile, loading: loading }), rightTop] })), cards, footer] })] }));
119
95
  }
@@ -1,27 +1,18 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { MainMenuPreferencesProps } from '../../../../types';
3
3
  export type ContentToolbarSegmentItem = {
4
- /** Значение сегмента (id). */
5
4
  value: string;
6
- /** Подпись сегмента. */
7
5
  label: string;
8
- /** Иконка сегмента. */
9
6
  icon?: ReactNode;
10
7
  };
11
8
  export type ContentToolbarProps = {
12
- /** Значение активного сегмента SegmentControl. */
13
9
  segment: string;
14
- /** Колбэк смены активного сегмента. */
15
10
  onSegmentChange(segment: string): void;
16
- /** Пункты SegmentControl. Без пунктов (или с одним) SegmentControl не отображается. */
17
11
  segmentItems?: ContentToolbarSegmentItem[];
18
- /** Все группы сегмента раскрыты — определяет иконку кнопки свернуть/развернуть все. */
19
12
  allGroupsExpanded: boolean;
20
- /** Колбэк клика по кнопке свернуть/развернуть все группы. */
21
13
  onToggleAllGroupsExpanded(): void;
22
14
  /** Настройки меню (модалка по кнопке). Не передано — кнопка настроек не отображается. */
23
15
  preferences?: MainMenuPreferencesProps;
24
- /** Мобильная раскладка — кнопка свернуть/развернуть все скрывается. */
25
16
  isMobile?: boolean;
26
17
  /** Флаг загрузки данных — сегменты подгружаются с бэка, поэтому SegmentControl тоже уходит в скелетон. */
27
18
  loading?: boolean;
@@ -1,31 +1,12 @@
1
1
  import { LinksGroup, LinksGroupBlockColor, LinksGroupTitle } from '../../../../types';
2
- import { CardsContextValue } from '../../cardsContext';
3
- export type SortableGroupProps = Pick<LinksGroup, 'icon' | 'items'> & {
4
- /** Id группы. */
2
+ import { SortableGroupCardsProps } from './components';
3
+ export type SortableGroupProps = Omit<SortableGroupCardsProps, 'groupId'> & Pick<LinksGroup, 'icon'> & {
5
4
  id: string;
6
- /** Заголовок группы. */
7
5
  label: LinksGroupTitle;
8
- /** Раскрыта ли группа. */
9
6
  isExpanded?: boolean;
10
- /** Мобильная раскладка. */
11
- isMobile?: boolean;
12
- /** Группу можно перетаскивать (иначе рендерится без `useSortable`). */
13
- enableServiceDrag?: boolean;
14
- /** Цвет блока группы. */
15
7
  blockColor?: LinksGroupBlockColor;
16
- /** Визуальное выделение группы. */
17
8
  highlight?: boolean;
18
- /** Разрешено ли добавление карточек группы в избранное. */
19
9
  groupFavoritesEnabled?: boolean;
20
- /** Группа появляется с fade-in при монтировании (на desktop; на mobile анимирует контейнер). */
21
- appear?: boolean;
22
10
  };
23
- declare function SortableGroupBase(props: SortableGroupProps): import("react/jsx-runtime").JSX.Element;
24
- export declare const SortableGroup: import("react").MemoExoticComponent<typeof SortableGroupBase>;
25
- export type SortableGroupDragPreviewProps = Omit<SortableGroupProps, 'enableServiceDrag'> & Pick<CardsContextValue, 'showDescription' | 'favoriteIds' | 'onFavoriteChange'>;
26
- /**
27
- * Превью группы в `DragOverlay`. Рендерится вне `Content`, поэтому свой `CardsContext` собирает
28
- * сам: без drag-обвязки карточек и без обработчика клика.
29
- */
30
- export declare function SortableGroupDragPreview({ id, label, items, isExpanded, showDescription, isMobile, favoriteIds, onFavoriteChange, groupFavoritesEnabled, blockColor, highlight, }: SortableGroupDragPreviewProps): import("react/jsx-runtime").JSX.Element;
31
- export {};
11
+ export declare function SortableGroup({ id, icon, label, items, isExpanded, showDescription, isMobile, enableServiceDrag, favorite, groupFavoritesEnabled, onServiceClick, blockColor, highlight, }: SortableGroupProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare function SortableGroupDragPreview({ id, label, items, isExpanded, showDescription, isMobile, favorite, groupFavoritesEnabled, blockColor, highlight, }: Omit<SortableGroupProps, 'enableServiceDrag'>): import("react/jsx-runtime").JSX.Element;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SortableGroup = void 0;
6
+ exports.SortableGroup = SortableGroup;
7
7
  exports.SortableGroupDragPreview = SortableGroupDragPreview;
8
8
  const jsx_runtime_1 = require("react/jsx-runtime");
9
9
  const sortable_1 = require("@dnd-kit/sortable");
@@ -11,27 +11,14 @@ const utilities_1 = require("@dnd-kit/utilities");
11
11
  const accordion_1 = require("@cloud-ru/ds-accordion");
12
12
  const drag_and_drop_1 = require("@cloud-ru/ds-drag-and-drop");
13
13
  const theme_1 = require("@cloud-ru/ds-theme");
14
- const react_1 = require("react");
15
- const cardsContext_1 = require("../../cardsContext");
16
14
  const constants_1 = require("../../constants");
17
15
  const components_1 = require("./components");
18
16
  const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
19
- function GroupView({ id, icon, label, items, isExpanded, isMobile, enableServiceDrag, groupFavoritesEnabled = true, blockColor, highlight, appear, attributes, listeners, setNodeRef, style, isDragging, }) {
20
- const { colorScheme } = (0, theme_1.useThemeAppearance)().appearance;
21
- // Появление проигрывается один раз. React переставляет узлы `insertBefore`, а браузер при
22
- // повторной вставке перезапускает CSS-анимацию — при перетаскивании группы соседи «моргали».
23
- // После окончания флаг снимается, и перестановка анимацию уже не запускает.
24
- const [isAppearing, setIsAppearing] = (0, react_1.useState)(Boolean(appear));
25
- const handleAnimationEnd = (0, react_1.useCallback)((event) => {
26
- // `animationend` всплывает от вложенных анимаций — нужна только своя.
27
- if (event.target === event.currentTarget) {
28
- setIsAppearing(false);
29
- }
30
- }, []);
31
- return ((0, jsx_runtime_1.jsxs)(drag_and_drop_1.DragGhost, { innerRef: setNodeRef, id: id, style: style, className: styles_module_scss_1.default.group, dragging: isDragging, mode: drag_and_drop_1.DRAG_MODE.Dynamic, "data-appear": isAppearing || undefined, onAnimationEnd: handleAnimationEnd, "data-test-id": `${constants_1.TEST_IDS.groupCard}-${id}`, children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decoration, "data-color-scheme": colorScheme, "data-is-highlighted": highlight || undefined, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decorationBackground, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.colorMarker, "data-block-color": blockColor }) }) }), (0, jsx_runtime_1.jsx)(accordion_1.Accordion.CollapseBlockTertiary, { id: id, showChevron: false, afterTitle: (0, jsx_runtime_1.jsx)(components_1.SortableGroupHeader, { label: label, icon: icon, isExpanded: isExpanded, enableServiceDrag: enableServiceDrag, attributes: attributes, listeners: listeners, isMobile: isMobile }), children: (0, jsx_runtime_1.jsx)(components_1.SortableGroupCards, { groupId: id, items: items, groupFavoritesEnabled: groupFavoritesEnabled }) })] }));
32
- }
33
- function DraggableGroup(props) {
34
- const { attributes, listeners, setNodeRef, transform, transition, isDragging } = (0, sortable_1.useSortable)({ id: props.id });
17
+ function SortableGroup({ id, icon, label, items, isExpanded, showDescription, isMobile, enableServiceDrag, favorite, groupFavoritesEnabled = true, onServiceClick, blockColor, highlight, }) {
18
+ const { attributes, listeners, setNodeRef, transform, transition, isDragging } = (0, sortable_1.useSortable)({
19
+ id,
20
+ disabled: !enableServiceDrag,
21
+ });
35
22
  const style = {
36
23
  // CSS.Transform добавляет scaleX/scaleY, из-за чего перетаскиваемая группа "растягивается"
37
24
  // при пересечении с соседней группой другой высоты. CSS.Translate использует только сдвиг.
@@ -40,25 +27,10 @@ function DraggableGroup(props) {
40
27
  transform: transform ? utilities_1.CSS.Translate.toString(transform) : undefined,
41
28
  transition,
42
29
  };
43
- return ((0, jsx_runtime_1.jsx)(GroupView, { ...props, attributes: attributes, listeners: listeners, setNodeRef: setNodeRef, style: style, isDragging: isDragging }));
44
- }
45
- function SortableGroupBase(props) {
46
- // Без drag (mobile, поиск, нет избранного) группа не регистрируется в `SortableContext`.
47
- return props.enableServiceDrag ? (0, jsx_runtime_1.jsx)(DraggableGroup, { ...props }) : (0, jsx_runtime_1.jsx)(GroupView, { ...props });
30
+ const { colorScheme } = (0, theme_1.useThemeAppearance)().appearance;
31
+ return ((0, jsx_runtime_1.jsxs)(drag_and_drop_1.DragGhost, { innerRef: setNodeRef, id: id, style: style, className: styles_module_scss_1.default.group, dragging: isDragging, mode: drag_and_drop_1.DRAG_MODE.Dynamic, "data-test-id": `${constants_1.TEST_IDS.groupCard}-${id}`, children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decoration, "data-color-scheme": colorScheme, "data-is-highlighted": highlight || undefined, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decorationBackground, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.colorMarker, "data-block-color": blockColor }) }) }), (0, jsx_runtime_1.jsx)(accordion_1.Accordion.CollapseBlockTertiary, { id: id, showChevron: false, afterTitle: (0, jsx_runtime_1.jsx)(components_1.SortableGroupHeader, { label: label, icon: icon, isExpanded: isExpanded, enableServiceDrag: enableServiceDrag, attributes: attributes, listeners: listeners, isMobile: isMobile }), children: (0, jsx_runtime_1.jsx)(components_1.SortableGroupCards, { groupId: id, items: items, showDescription: showDescription, isMobile: isMobile, enableServiceDrag: enableServiceDrag, favorite: favorite, groupFavoritesEnabled: groupFavoritesEnabled, onServiceClick: onServiceClick }) })] }));
48
32
  }
49
- exports.SortableGroup = (0, react_1.memo)(SortableGroupBase);
50
- /**
51
- * Превью группы в `DragOverlay`. Рендерится вне `Content`, поэтому свой `CardsContext` собирает
52
- * сам: без drag-обвязки карточек и без обработчика клика.
53
- */
54
- function SortableGroupDragPreview({ id, label, items, isExpanded, showDescription, isMobile, favoriteIds, onFavoriteChange, groupFavoritesEnabled, blockColor, highlight, }) {
33
+ function SortableGroupDragPreview({ id, label, items, isExpanded, showDescription, isMobile, favorite, groupFavoritesEnabled, blockColor, highlight, }) {
55
34
  const { colorScheme } = (0, theme_1.useThemeAppearance)().appearance;
56
- const cardsContext = {
57
- showDescription,
58
- isMobile,
59
- dragEnabled: false,
60
- favoriteIds,
61
- onFavoriteChange,
62
- };
63
- return ((0, jsx_runtime_1.jsx)(drag_and_drop_1.DragPreview, { className: styles_module_scss_1.default.groupDragPreview, children: (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.group, "data-drag-preview": true, children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decoration, "data-color-scheme": colorScheme, "data-is-highlighted": highlight || undefined, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decorationBackground, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.colorMarker, "data-block-color": blockColor }) }) }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.groupDragPreviewHeader, children: (0, jsx_runtime_1.jsx)(components_1.SortableGroupHeader, { label: label, isExpanded: isExpanded, isMobile: isMobile, enableServiceDrag: true }) }), isExpanded && ((0, jsx_runtime_1.jsx)(cardsContext_1.CardsContext.Provider, { value: cardsContext, children: (0, jsx_runtime_1.jsx)(components_1.SortableGroupCards, { groupId: id, items: items, groupFavoritesEnabled: groupFavoritesEnabled }) }))] }) }));
35
+ return ((0, jsx_runtime_1.jsx)(drag_and_drop_1.DragPreview, { className: styles_module_scss_1.default.groupDragPreview, children: (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.group, "data-drag-preview": true, children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decoration, "data-color-scheme": colorScheme, "data-is-highlighted": highlight || undefined, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.decorationBackground, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.colorMarker, "data-block-color": blockColor }) }) }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.groupDragPreviewHeader, children: (0, jsx_runtime_1.jsx)(components_1.SortableGroupHeader, { label: label, isExpanded: isExpanded, isMobile: isMobile, enableServiceDrag: true }) }), isExpanded && ((0, jsx_runtime_1.jsx)(components_1.SortableGroupCards, { groupId: id, items: items, showDescription: showDescription, isMobile: isMobile, favorite: favorite, groupFavoritesEnabled: groupFavoritesEnabled }))] }) }));
64
36
  }
@@ -1,12 +1,9 @@
1
1
  import { InnerLink } from '../../../../../types';
2
- export type SortableGroupCardsProps = {
3
- /** Id группы-предка. */
2
+ import { ServiceCardProps } from '../../../../ServiceCard';
3
+ export type SortableGroupCardsProps = Pick<ServiceCardProps, 'showDescription' | 'isMobile' | 'favorite' | 'onServiceClick'> & {
4
4
  groupId: string;
5
- /** Карточки сервисов группы. */
6
5
  items: InnerLink[];
7
- /** Разрешено ли добавление карточек группы в избранное. */
6
+ enableServiceDrag?: boolean;
8
7
  groupFavoritesEnabled?: boolean;
9
8
  };
10
- declare function SortableGroupCardsBase({ groupId, items, groupFavoritesEnabled }: SortableGroupCardsProps): import("react/jsx-runtime").JSX.Element;
11
- export declare const SortableGroupCards: import("react").MemoExoticComponent<typeof SortableGroupCardsBase>;
12
- export {};
9
+ export declare function SortableGroupCards({ groupId, items, showDescription, isMobile, enableServiceDrag, favorite, groupFavoritesEnabled, onServiceClick, }: SortableGroupCardsProps): import("react/jsx-runtime").JSX.Element;
@@ -3,26 +3,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SortableGroupCards = void 0;
6
+ exports.SortableGroupCards = SortableGroupCards;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
- const react_1 = require("react");
9
8
  const innerLink_1 = require("../../../../../utils/innerLink");
10
9
  const ServiceCard_1 = require("../../../../ServiceCard");
11
- const cardsContext_1 = require("../../../cardsContext");
12
10
  const styles_module_scss_1 = __importDefault(require('../styles.module.css'));
13
11
  const SubCategory_1 = require("./SubCategory");
14
- function SortableGroupCardsBase({ groupId, items, groupFavoritesEnabled }) {
15
- const { isMobile, showDescription, dragEnabled, favoriteIds, onFavoriteChange, onServiceClick } = (0, cardsContext_1.useCardsContext)();
16
- const cardFavoriteChange = favoriteIds ? onFavoriteChange : undefined;
12
+ function SortableGroupCards({ groupId, items, showDescription, isMobile, enableServiceDrag, favorite, groupFavoritesEnabled, onServiceClick, }) {
17
13
  return ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.groupBody, "data-mobile": isMobile || undefined, children: items.map(service => {
18
14
  if (service.hidden) {
19
15
  return null;
20
16
  }
21
17
  const key = String(groupId) + service.id;
22
18
  if ((0, innerLink_1.isSubCategoryCard)(service)) {
23
- return ((0, jsx_runtime_1.jsx)(SubCategory_1.SubCategory, { groupId: groupId, service: service, groupFavoritesEnabled: groupFavoritesEnabled }, key));
19
+ return ((0, jsx_runtime_1.jsx)(SubCategory_1.SubCategory, { groupId: groupId, service: service, showDescription: showDescription, isMobile: isMobile, dragDisabled: !enableServiceDrag, favorite: favorite, groupFavoritesEnabled: groupFavoritesEnabled, onServiceClick: onServiceClick }, key));
24
20
  }
25
- return ((0, jsx_runtime_1.jsx)(ServiceCard_1.GridServiceCard, { groupId: groupId, service: service, isFavorite: favoriteIds?.has(service.id), onFavoriteChange: cardFavoriteChange, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescription, dragEnabled: dragEnabled }, key));
21
+ return ((0, jsx_runtime_1.jsx)(ServiceCard_1.DraggableServiceCard, { groupId: groupId, service: service, favorite: favorite, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescription, dragDisabled: !enableServiceDrag }, key));
26
22
  }) }));
27
23
  }
28
- exports.SortableGroupCards = (0, react_1.memo)(SortableGroupCardsBase);
@@ -1,8 +1,6 @@
1
1
  import { DraggableAttributes, DraggableSyntheticListeners } from '@dnd-kit/core';
2
2
  export type SortableGroupDragHandleProps = {
3
- /** ARIA-атрибуты `dnd-kit` draggable-элемента. */
4
3
  attributes?: DraggableAttributes;
5
- /** Обработчики событий `dnd-kit` для инициации перетаскивания. */
6
4
  listeners?: DraggableSyntheticListeners;
7
5
  };
8
6
  export declare function SortableGroupDragHandle({ attributes, listeners }: SortableGroupDragHandleProps): import("react/jsx-runtime").JSX.Element;
@@ -6,6 +6,4 @@ export type SortableGroupHeaderProps = Pick<LinksGroup, 'icon'> & {
6
6
  enableServiceDrag?: boolean;
7
7
  isMobile?: boolean;
8
8
  } & SortableGroupDragHandleProps;
9
- declare function SortableGroupHeaderBase({ label, icon, isExpanded, enableServiceDrag, attributes, listeners, isMobile, }: SortableGroupHeaderProps): import("react/jsx-runtime").JSX.Element;
10
- export declare const SortableGroupHeader: import("react").MemoExoticComponent<typeof SortableGroupHeaderBase>;
11
- export {};
9
+ export declare function SortableGroupHeader({ label, icon, isExpanded, enableServiceDrag, attributes, listeners, isMobile, }: SortableGroupHeaderProps): import("react/jsx-runtime").JSX.Element;
@@ -3,21 +3,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SortableGroupHeader = void 0;
6
+ exports.SortableGroupHeader = SortableGroupHeader;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const button_1 = require("@cloud-ru/ds-button");
9
9
  const system_1 = require("@cloud-ru/ds-icons/interface/system");
10
10
  const typography_1 = require("@cloud-ru/ds-typography");
11
11
  const uikit_product_title_clickable_1 = require("@cloud-ru/ds-uikit-product-title-clickable");
12
- const react_1 = require("react");
13
12
  const utils_1 = require("../../../../../utils");
14
13
  const styles_module_scss_1 = __importDefault(require('../styles.module.css'));
15
14
  const SortableGroupDragHandle_1 = require("./SortableGroupDragHandle");
16
- function SortableGroupHeaderBase({ label, icon, isExpanded, enableServiceDrag, attributes, listeners, isMobile, }) {
17
- const handleLabelClick = (0, react_1.useCallback)(e => {
15
+ function SortableGroupHeader({ label, icon, isExpanded, enableServiceDrag, attributes, listeners, isMobile, }) {
16
+ const handleLabelClick = e => {
18
17
  e.stopPropagation();
19
18
  label?.onClick?.(e);
20
- }, [label]);
19
+ };
21
20
  return ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.header, "data-expanded": isExpanded || undefined, children: [(0, jsx_runtime_1.jsx)(typography_1.Typography, { variant: 'title', size: 'm', className: styles_module_scss_1.default.headerTitle, "data-test-id": 'header__drawer-menu__group-card-title', children: label.onClick || label.href ? ((0, jsx_runtime_1.jsx)(uikit_product_title_clickable_1.TitleClickable, { ...(label.href ? { as: 'a', href: label.href } : { as: 'div' }), onClick: handleLabelClick, title: label.text, icon: (0, utils_1.getLinkEmblem)({ icon }) })) : (label.text) }), (enableServiceDrag || !isMobile) && ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.headerActions, "data-always-visible": isMobile || undefined, children: [enableServiceDrag && (0, jsx_runtime_1.jsx)(SortableGroupDragHandle_1.SortableGroupDragHandle, { attributes: attributes, listeners: listeners }), !isMobile && ((0, jsx_runtime_1.jsx)(button_1.Button, { view: 'elevated', appearance: 'neutral', size: 's', icon: isExpanded ? (0, jsx_runtime_1.jsx)(system_1.ChevronUpSVG, {}) : (0, jsx_runtime_1.jsx)(system_1.ChevronDownSVG, {}), "data-test-id": 'header__drawer-menu__group-card-collapse' }))] }))] }));
22
21
  }
23
- exports.SortableGroupHeader = (0, react_1.memo)(SortableGroupHeaderBase);
@@ -1,5 +1,4 @@
1
1
  type SortableGroupSkeletonProps = {
2
- /** Мобильная раскладка. */
3
2
  isMobile?: boolean;
4
3
  };
5
4
  export declare function SortableGroupSkeleton({ isMobile }: SortableGroupSkeletonProps): import("react/jsx-runtime").JSX.Element;
@@ -1,12 +1,7 @@
1
- import { InnerLink } from '../../../../../../types';
2
- export type SubCategoryProps = {
3
- /** Id группы-предка. */
1
+ import { ServiceCardProps } from '../../../../../ServiceCard';
2
+ export type SubCategoryProps = Pick<ServiceCardProps, 'service' | 'onServiceClick' | 'favorite' | 'showDescription' | 'isMobile'> & {
4
3
  groupId: string;
5
- /** Карточка подкатегории (с непустым {@link InnerLink.items}). */
6
- service: InnerLink;
7
- /** Разрешено ли добавление карточек группы в избранное. */
4
+ dragDisabled?: boolean;
8
5
  groupFavoritesEnabled?: boolean;
9
6
  };
10
- declare function SubCategoryBase({ groupId, service, groupFavoritesEnabled }: SubCategoryProps): import("react/jsx-runtime").JSX.Element;
11
- export declare const SubCategory: import("react").MemoExoticComponent<typeof SubCategoryBase>;
12
- export {};
7
+ export declare function SubCategory({ groupId, service, showDescription, isMobile, dragDisabled, favorite, onServiceClick, groupFavoritesEnabled, }: SubCategoryProps): import("react/jsx-runtime").JSX.Element;
@@ -3,25 +3,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SubCategory = void 0;
6
+ exports.SubCategory = SubCategory;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const accordion_1 = require("@cloud-ru/ds-accordion");
9
9
  const react_1 = require("react");
10
- const noop_1 = require("../../../../../../../../utils/noop");
11
10
  const innerLink_1 = require("../../../../../../utils/innerLink");
12
11
  const ServiceCard_1 = require("../../../../../ServiceCard");
13
- const cardsContext_1 = require("../../../../cardsContext");
14
12
  const constants_1 = require("../../../../constants");
15
13
  const styles_module_scss_1 = __importDefault(require('../../styles.module.css'));
16
14
  const styles_module_scss_2 = __importDefault(require('./styles.module.css'));
17
15
  const SubCategoryTitle_1 = require("./SubCategoryTitle");
18
- const TITLE_ONLY_EXPANDABLE = { value: true, onClick: noop_1.noop };
19
- const SubCategoryBody = (0, react_1.memo)(function SubCategoryBody({ nestedGroupId, items, variant }) {
20
- const { isMobile, showDescription, dragEnabled, favoriteIds, onFavoriteChange, onServiceClick } = (0, cardsContext_1.useCardsContext)();
21
- const cardFavoriteChange = favoriteIds ? onFavoriteChange : undefined;
22
- return ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.groupBody, "data-subcategory-body": variant === 'expanded' ? 'expanded' : true, "data-mobile": isMobile || undefined, children: items.map(nestedService => ((0, jsx_runtime_1.jsx)(ServiceCard_1.GridServiceCard, { groupId: nestedGroupId, service: nestedService, isFavorite: favoriteIds?.has(nestedService.id), onFavoriteChange: cardFavoriteChange, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescription, dragEnabled: dragEnabled }, nestedGroupId + nestedService.id))) }));
23
- });
24
- function SubCategoryBase({ groupId, service, groupFavoritesEnabled }) {
16
+ const noop = () => { };
17
+ function SubCategory({ groupId, service, showDescription, isMobile, dragDisabled, favorite, onServiceClick, groupFavoritesEnabled, }) {
25
18
  const subcategoryId = (0, innerLink_1.getSubCategoryId)(groupId, service.id);
26
19
  const nestedGroupId = (0, innerLink_1.getNestedServiceGroupId)(groupId, service.id);
27
20
  const nestedItems = (0, react_1.useMemo)(() => service.items?.filter(item => !item.hidden) ?? [], [service.items]);
@@ -35,17 +28,19 @@ function SubCategoryBase({ groupId, service, groupFavoritesEnabled }) {
35
28
  setIsExpanded(isExpanded ? undefined : subcategoryId);
36
29
  }
37
30
  }, [isExpanded, subcategoryId, isExpandableEnabled]);
38
- const expandable = (0, react_1.useMemo)(() => ({ value: Boolean(isExpanded), onClick: handleExpandedChange }), [isExpanded, handleExpandedChange]);
39
- const testId = `${constants_1.TEST_IDS.subcategory}-${service.id}`;
40
- const title = ((0, jsx_runtime_1.jsx)(SubCategoryTitle_1.SubCategoryTitle, { groupId: groupId, service: service, expandable: viewMode === 'group-title-only' ? TITLE_ONLY_EXPANDABLE : expandable, groupFavoritesEnabled: groupFavoritesEnabled }));
41
31
  // 'group-title-only' — только заголовок подкатегории, без раскрываемого тела и кнопки
42
32
  // переключения: карточка ведёт себя как обычная ссылка (см. isSubCategoryCard в utils/innerLink).
43
33
  if (viewMode === 'group-title-only') {
44
- return ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_2.default.subcategory, "data-title-only": true, "data-test-id": testId, children: title }));
34
+ return ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_2.default.subcategory, "data-title-only": true, "data-test-id": `${constants_1.TEST_IDS.subcategory}-${service.id}`, children: (0, jsx_runtime_1.jsx)(SubCategoryTitle_1.SubCategoryTitle, { groupId: groupId, service: service, expandable: { value: true, onClick: noop }, showDescription: showDescription, isMobile: isMobile, dragDisabled: dragDisabled, favorite: groupFavoritesEnabled ? favorite : undefined, onServiceClick: onServiceClick }) }));
45
35
  }
46
36
  if (viewMode === 'expanded') {
47
- return ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_2.default.subcategory, "data-test-id": testId, children: [title, (0, jsx_runtime_1.jsx)(SubCategoryBody, { nestedGroupId: nestedGroupId, items: nestedItems, variant: 'expanded' })] }));
37
+ return ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_2.default.subcategory, "data-test-id": `${constants_1.TEST_IDS.subcategory}-${service.id}`, children: [(0, jsx_runtime_1.jsx)(SubCategoryTitle_1.SubCategoryTitle, { groupId: groupId, service: service, expandable: {
38
+ value: Boolean(isExpanded),
39
+ onClick: handleExpandedChange,
40
+ }, showDescription: showDescription, isMobile: isMobile, dragDisabled: dragDisabled, favorite: groupFavoritesEnabled ? favorite : undefined, onServiceClick: onServiceClick }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.groupBody, "data-subcategory-body": 'expanded', "data-mobile": isMobile || undefined, children: nestedItems.map(nestedService => ((0, jsx_runtime_1.jsx)(ServiceCard_1.DraggableServiceCard, { groupId: nestedGroupId, service: nestedService, favorite: favorite, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescription, dragDisabled: dragDisabled }, nestedGroupId + nestedService.id))) })] }));
48
41
  }
49
- return ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_2.default.subcategory, "data-test-id": testId, children: (0, jsx_runtime_1.jsx)(accordion_1.Accordion, { selectionMode: 'single', expanded: isExpanded, onExpandedChange: handleExpandedChange, children: (0, jsx_runtime_1.jsx)(accordion_1.Accordion.CollapseBlockTertiary, { id: subcategoryId, showChevron: false, className: styles_module_scss_2.default.subcategoryAccordion, afterTitle: title, children: (0, jsx_runtime_1.jsx)(SubCategoryBody, { nestedGroupId: nestedGroupId, items: nestedItems, variant: 'expandable' }) }) }) }));
42
+ return ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_2.default.subcategory, "data-test-id": `${constants_1.TEST_IDS.subcategory}-${service.id}`, children: (0, jsx_runtime_1.jsx)(accordion_1.Accordion, { selectionMode: 'single', expanded: isExpanded, onExpandedChange: handleExpandedChange, children: (0, jsx_runtime_1.jsx)(accordion_1.Accordion.CollapseBlockTertiary, { id: subcategoryId, showChevron: false, className: styles_module_scss_2.default.subcategoryAccordion, afterTitle: (0, jsx_runtime_1.jsx)(SubCategoryTitle_1.SubCategoryTitle, { groupId: groupId, service: service, expandable: {
43
+ value: Boolean(isExpanded),
44
+ onClick: handleExpandedChange,
45
+ }, showDescription: showDescription, isMobile: isMobile, dragDisabled: dragDisabled, favorite: groupFavoritesEnabled ? favorite : undefined, onServiceClick: onServiceClick }), children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.groupBody, "data-subcategory-body": true, "data-mobile": isMobile || undefined, children: nestedItems.map(nestedService => ((0, jsx_runtime_1.jsx)(ServiceCard_1.DraggableServiceCard, { groupId: nestedGroupId, service: nestedService, favorite: favorite, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescription, dragDisabled: dragDisabled }, nestedGroupId + nestedService.id))) }) }) }) }));
50
46
  }
51
- exports.SubCategory = (0, react_1.memo)(SubCategoryBase);
@@ -1,10 +1,5 @@
1
- import { GridServiceCardProps } from '../../../../../ServiceCard';
1
+ import { DraggableServiceCardProps } from '../../../../../ServiceCard';
2
2
  export type SubCategoryTitleProps = {
3
- /** Id группы-предка. */
4
3
  groupId: string;
5
- /** Кнопка избранного показывается только если для группы избранное включено. */
6
- groupFavoritesEnabled?: boolean;
7
- } & Pick<GridServiceCardProps, 'expandable' | 'service'>;
8
- declare function SubCategoryTitleBase({ groupId, service, groupFavoritesEnabled, expandable }: SubCategoryTitleProps): import("react/jsx-runtime").JSX.Element;
9
- export declare const SubCategoryTitle: import("react").MemoExoticComponent<typeof SubCategoryTitleBase>;
10
- export {};
4
+ } & Pick<DraggableServiceCardProps, 'expandable' | 'service' | 'onServiceClick' | 'favorite' | 'showDescription' | 'isMobile' | 'dragDisabled'>;
5
+ export declare function SubCategoryTitle({ groupId, service, showDescription: showDescriptionProp, isMobile, dragDisabled, favorite, onServiceClick, expandable, }: SubCategoryTitleProps): import("react/jsx-runtime").JSX.Element;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SubCategoryTitle = void 0;
6
+ exports.SubCategoryTitle = SubCategoryTitle;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const typography_1 = require("@cloud-ru/ds-typography");
9
9
  const uikit_product_card_predefined_1 = require("@cloud-ru/ds-uikit-product-card-predefined");
@@ -12,59 +12,53 @@ const utils_1 = require("@cloud-ru/ds-utils");
12
12
  const react_1 = require("react");
13
13
  const utils_2 = require("../../../../../../utils");
14
14
  const ServiceCard_1 = require("../../../../../ServiceCard");
15
- const cardsContext_1 = require("../../../../cardsContext");
16
15
  const constants_1 = require("../../../../constants");
17
16
  const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
18
- function SubCategoryTitleBase({ groupId, service, groupFavoritesEnabled, expandable }) {
19
- const { isMobile, showDescription: showDescriptionProp, dragEnabled, favoriteIds, onFavoriteChange, onServiceClick, } = (0, cardsContext_1.useCardsContext)();
17
+ function SubCategoryTitle({ groupId, service, showDescription: showDescriptionProp, isMobile, dragDisabled, favorite, onServiceClick, expandable, }) {
20
18
  const titleRef = (0, react_1.useRef)(null);
21
19
  const tooltipTriggerRef = (0, react_1.useRef)(null);
22
20
  const favoriteRef = (0, react_1.useRef)(null);
23
- const { id, description, icon } = service;
24
- const handleServiceClick = (0, react_1.useCallback)((event) => {
21
+ const handleServiceClick = (event) => {
25
22
  (0, utils_1.stopEventPropagation)(event);
26
23
  onServiceClick?.(service, event);
27
- }, [onServiceClick, service]);
28
- const titleTestId = `${constants_1.TEST_IDS.subcategoryTitle}-${id}`;
29
- const cardFavoriteChange = groupFavoritesEnabled && favoriteIds ? onFavoriteChange : undefined;
30
- const isFavorite = Boolean(favoriteIds?.has(id));
31
- const showDescription = showDescriptionProp && Boolean(description);
32
- const hasTooltip = !showDescription && Boolean(description);
33
- const handleKeyDown = (0, react_1.useMemo)(() => (0, uikit_product_card_predefined_1.createCardActionsKeyDownHandler)({
24
+ };
25
+ const titleTestId = `${constants_1.TEST_IDS.subcategoryTitle}-${service.id}`;
26
+ const isFavorite = Boolean(favorite?.value.includes(service.id));
27
+ const showDescription = showDescriptionProp && Boolean(service.description);
28
+ const hasTooltip = !showDescription && service.description;
29
+ const handleKeyDown = (0, uikit_product_card_predefined_1.createCardActionsKeyDownHandler)({
34
30
  cardRef: titleRef,
35
31
  items: [
36
32
  hasTooltip ? { ref: tooltipTriggerRef } : null,
37
- cardFavoriteChange
33
+ favorite
38
34
  ? {
39
35
  ref: favoriteRef,
40
- onActivate: () => cardFavoriteChange(id)(!isFavorite),
36
+ onActivate: () => favorite.onChange(service.id)(!isFavorite),
41
37
  }
42
38
  : null,
43
39
  ],
44
- }), [hasTooltip, cardFavoriteChange, id, isFavorite]);
45
- const emblem = (0, react_1.useMemo)(() => (0, utils_2.getLinkEmblem)({ icon }), [icon]);
40
+ });
46
41
  if (expandable?.value) {
47
- return ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.subcategoryTitle, "data-mobile": isMobile || undefined, children: [(0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.subcategoryTitleRow, onKeyDown: handleKeyDown, children: [(0, jsx_runtime_1.jsx)(uikit_product_title_clickable_1.TitleClickable, { as: 'a', href: service.href, onClick: handleServiceClick, innerRef: titleRef, title: service.label, icon: emblem, className: styles_module_scss_1.default.subcategoryTitleClickable, "data-test-id": titleTestId }), (0, jsx_runtime_1.jsx)(uikit_product_card_predefined_1.CardActionsSurface, { className: styles_module_scss_1.default.subcategoryTitleActions, actionsVisibility: 'always', actionsSize: isMobile ? 's' : 'm', tooltip: hasTooltip
42
+ return ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.subcategoryTitle, "data-mobile": isMobile || undefined, children: [(0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.subcategoryTitleRow, onKeyDown: handleKeyDown, children: [(0, jsx_runtime_1.jsx)(uikit_product_title_clickable_1.TitleClickable, { as: 'a', href: service.href, onClick: handleServiceClick, innerRef: titleRef, title: service.label, icon: (0, utils_2.getLinkEmblem)(service), className: styles_module_scss_1.default.subcategoryTitleClickable, "data-test-id": titleTestId }), (0, jsx_runtime_1.jsx)(uikit_product_card_predefined_1.CardActionsSurface, { className: styles_module_scss_1.default.subcategoryTitleActions, actionsVisibility: 'always', actionsSize: isMobile ? 's' : 'm', tooltip: hasTooltip
48
43
  ? {
49
- tip: description,
44
+ tip: service.description,
50
45
  buttonRef: tooltipTriggerRef,
51
46
  trigger: isMobile ? 'click' : 'hoverAndFocusVisible',
52
47
  'data-test-id': `${titleTestId}-tooltip`,
53
48
  }
54
- : undefined, favorite: cardFavoriteChange
49
+ : undefined, favorite: favorite
55
50
  ? {
56
51
  enabled: true,
57
52
  checked: isFavorite,
58
- onChange: (checked) => cardFavoriteChange(id)(checked),
53
+ onChange: favorite.onChange(service.id),
59
54
  buttonRef: favoriteRef,
60
55
  'data-test-id': `${titleTestId}-favorite`,
61
56
  }
62
- : undefined })] }), showDescription && ((0, jsx_runtime_1.jsx)(typography_1.Typography, { as: 'p', variant: 'body', size: 's', className: styles_module_scss_1.default.subcategoryDescription, "data-test-id": `${titleTestId}-description`, children: description }))] }));
57
+ : undefined })] }), showDescription && ((0, jsx_runtime_1.jsx)(typography_1.Typography, { as: 'p', variant: 'body', size: 's', className: styles_module_scss_1.default.subcategoryDescription, "data-test-id": `${titleTestId}-description`, children: service.description }))] }));
63
58
  }
64
59
  return (
65
60
  // Карточка — ссылка `<a>`: клик по ней бы долетал до `onClick={toggleOpen}` заголовка
66
61
  // родительского CollapseBlockTertiary (см. TODO там) и лишний раз переключал аккордеон.
67
62
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions
68
- (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.subcategoryTitleDraggable, onPointerDown: utils_1.stopEventPropagation, onClick: utils_1.stopEventPropagation, children: (0, jsx_runtime_1.jsx)(ServiceCard_1.GridServiceCard, { groupId: groupId, service: service, isFavorite: isFavorite, onFavoriteChange: cardFavoriteChange, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescriptionProp, dragEnabled: dragEnabled, expandable: expandable }) }));
63
+ (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.subcategoryTitleDraggable, onPointerDown: utils_1.stopEventPropagation, onClick: utils_1.stopEventPropagation, children: (0, jsx_runtime_1.jsx)(ServiceCard_1.DraggableServiceCard, { groupId: groupId, service: service, favorite: favorite, isMobile: isMobile, onServiceClick: onServiceClick, showDescription: showDescriptionProp, dragDisabled: dragDisabled, expandable: expandable }) }));
69
64
  }
70
- exports.SubCategoryTitle = (0, react_1.memo)(SubCategoryTitleBase);
@@ -46,8 +46,6 @@
46
46
  }
47
47
 
48
48
  .group{
49
- content-visibility:auto;
50
- contain-intrinsic-size:auto var(--sn-primitive-dimension-128, 128px);
51
49
  position:relative;
52
50
  overflow-x:clip;
53
51
  display:flex;
@@ -58,14 +56,6 @@
58
56
  border-radius:var(--sn-density-radius-2xs, var(--sn-platform-comfort-radius-2xs, var(--sn-primitive-dimension-4, 4px)));
59
57
  background-color:var(--sn-theme-color-neutral-background1Level, var(--sn-brand-color-neutral-95, var(--sn-brand-palette-gray-95, #fdfdfd)));
60
58
  }
61
- .group[data-appear]{
62
- animation:group-appear 0.24s cubic-bezier(0.4, 0, 0.2, 1) backwards;
63
- }
64
- @media (prefers-reduced-motion: reduce){
65
- .group[data-appear]{
66
- animation:none;
67
- }
68
- }
69
59
  .group[data-drag-preview]{
70
60
  cursor:grabbing;
71
61
  }
@@ -243,11 +233,4 @@
243
233
 
244
234
  .skeletonService{
245
235
  padding:var(--sn-primitive-dimension-4, 4px);
246
- }
247
-
248
- @keyframes group-appear{
249
- from{
250
- transform:translate(calc(-1 * var(--sn-primitive-dimension-12, 12px)), var(--sn-primitive-dimension-4, 4px));
251
- opacity:0;
252
- }
253
236
  }
@@ -4,10 +4,8 @@ exports.useContentSegmentsSortable = useContentSegmentsSortable;
4
4
  const sortable_1 = require("@dnd-kit/sortable");
5
5
  const react_1 = require("react");
6
6
  function mergeIdsPreservingOrder(prevIds, nextIds) {
7
- const nextIdSet = new Set(nextIds);
8
- const prevIdSet = new Set(prevIds);
9
- const kept = prevIds.filter(id => nextIdSet.has(id));
10
- const added = nextIds.filter(id => !prevIdSet.has(id));
7
+ const kept = prevIds.filter(id => nextIds.includes(id));
8
+ const added = nextIds.filter(id => !prevIds.includes(id));
11
9
  if (added.length === 0 && kept.length === prevIds.length) {
12
10
  return prevIds;
13
11
  }