@redneckz/wildless-cms-uni-blocks 0.6.29 → 0.6.31

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 (275) hide show
  1. package/bundle/blocks.schema.json +1 -1
  2. package/bundle/bundle.umd.js +94 -73
  3. package/bundle/bundle.umd.min.js +1 -1
  4. package/bundle/components/Carousel/Carousel.d.ts +1 -1
  5. package/bundle/components/Carousel/CarouselContainer.d.ts +2 -1
  6. package/bundle/components/Carousel/CarouselContent.d.ts +9 -2
  7. package/bundle/components/Carousel/CarouselNavButtons.d.ts +11 -0
  8. package/bundle/components/CarouselCard/CarouselCard.d.ts +1 -1
  9. package/bundle/components/CarouselCard/CarouselCardContent.d.ts +5 -2
  10. package/bundle/components/CarouselCard/constants.d.ts +3 -0
  11. package/bundle/components/CarouselTariffsCard/CarouselTariffsCard.d.ts +5 -0
  12. package/bundle/components/CarouselTariffsCard/CarouselTariffsCardContent.d.ts +15 -0
  13. package/bundle/components/ComparisonTable/ComparisonTableRows.d.ts +2 -2
  14. package/bundle/components/ProductBlock/ProductBlockContent.d.ts +6 -0
  15. package/bundle/hooks/useCarouselControls.d.ts +13 -0
  16. package/bundle/icons/IconName.d.ts +4 -2
  17. package/bundle/ui-kit/Foldable/Foldable.d.ts +1 -1
  18. package/cosmos-static/icons/HeartIcon.svg +1 -0
  19. package/dist/components/Blocks.js +7 -5
  20. package/dist/components/Blocks.js.map +1 -1
  21. package/dist/components/Carousel/Carousel.d.ts +1 -1
  22. package/dist/components/Carousel/Carousel.js +6 -6
  23. package/dist/components/Carousel/Carousel.js.map +1 -1
  24. package/dist/components/Carousel/CarouselContainer.d.ts +2 -1
  25. package/dist/components/Carousel/CarouselContainer.js +1 -1
  26. package/dist/components/Carousel/CarouselContainer.js.map +1 -1
  27. package/dist/components/Carousel/CarouselContent.d.ts +9 -2
  28. package/dist/components/Carousel/CarouselContent.js +3 -0
  29. package/dist/components/Carousel/CarouselContent.js.map +1 -1
  30. package/dist/components/Carousel/CarouselNavButtons.d.ts +11 -0
  31. package/dist/components/Carousel/CarouselNavButtons.js +36 -0
  32. package/dist/components/Carousel/CarouselNavButtons.js.map +1 -0
  33. package/dist/components/CarouselCard/CarouselCard.d.ts +1 -1
  34. package/dist/components/CarouselCard/CarouselCard.js +2 -2
  35. package/dist/components/CarouselCard/CarouselCard.js.map +1 -1
  36. package/dist/components/CarouselCard/CarouselCardContent.d.ts +5 -2
  37. package/dist/components/CarouselCard/constants.d.ts +3 -0
  38. package/dist/components/CarouselCard/constants.js +11 -0
  39. package/dist/components/CarouselCard/constants.js.map +1 -0
  40. package/dist/components/CarouselTariffsCard/CarouselTariffsCard.d.ts +5 -0
  41. package/dist/components/CarouselTariffsCard/CarouselTariffsCard.js +29 -0
  42. package/dist/components/CarouselTariffsCard/CarouselTariffsCard.js.map +1 -0
  43. package/dist/components/CarouselTariffsCard/CarouselTariffsCardContent.d.ts +15 -0
  44. package/dist/components/CarouselTariffsCard/CarouselTariffsCardContent.js +2 -0
  45. package/dist/components/CarouselTariffsCard/CarouselTariffsCardContent.js.map +1 -0
  46. package/dist/components/ComparisonTable/ComparisonTableBody.js +2 -2
  47. package/dist/components/ComparisonTable/ComparisonTableBody.js.map +1 -1
  48. package/dist/components/ComparisonTable/ComparisonTableRows.d.ts +2 -2
  49. package/dist/components/ComparisonTable/ComparisonTableRows.js +1 -1
  50. package/dist/components/ComparisonTable/ComparisonTableRows.js.map +1 -1
  51. package/dist/components/MobileAppTile/MobileAppTile.js +1 -1
  52. package/dist/components/ProductBlock/ProductBlockContent.d.ts +6 -0
  53. package/dist/components/ProductBlock/ProductBlockInner.js +5 -3
  54. package/dist/components/ProductBlock/ProductBlockInner.js.map +1 -1
  55. package/dist/components/TariffsTable/TariffsTable.js +3 -3
  56. package/dist/components/TariffsTable/TariffsTable.js.map +1 -1
  57. package/dist/hooks/useCarouselControls.d.ts +13 -0
  58. package/{mobile/dist/hooks/useCarousel.js → dist/hooks/useCarouselControls.js} +6 -6
  59. package/dist/hooks/useCarouselControls.js.map +1 -0
  60. package/dist/icons/IconName.d.ts +4 -2
  61. package/dist/icons/IconName.js +3 -1
  62. package/dist/icons/IconName.js.map +1 -1
  63. package/dist/ui-kit/Button/ButtonInner.js +1 -1
  64. package/dist/ui-kit/Foldable/Foldable.d.ts +1 -1
  65. package/dist/ui-kit/InnerTable/InnerTableHeader.js +2 -2
  66. package/dist/ui-kit/InnerTable/InnerTableHeader.js.map +1 -1
  67. package/lib/common.css +1 -1
  68. package/lib/components/Blocks.js +7 -5
  69. package/lib/components/Blocks.js.map +1 -1
  70. package/lib/components/Carousel/Carousel.d.ts +1 -1
  71. package/lib/components/Carousel/Carousel.fixture.d.ts +1 -0
  72. package/lib/components/Carousel/Carousel.js +6 -6
  73. package/lib/components/Carousel/Carousel.js.map +1 -1
  74. package/lib/components/Carousel/CarouselContainer.d.ts +2 -1
  75. package/lib/components/Carousel/CarouselContainer.js +1 -1
  76. package/lib/components/Carousel/CarouselContainer.js.map +1 -1
  77. package/lib/components/Carousel/CarouselContent.d.ts +9 -2
  78. package/lib/components/Carousel/CarouselContent.js +3 -0
  79. package/lib/components/Carousel/CarouselContent.js.map +1 -1
  80. package/lib/components/Carousel/CarouselNavButtons.d.ts +11 -0
  81. package/lib/components/Carousel/CarouselNavButtons.js +34 -0
  82. package/lib/components/Carousel/CarouselNavButtons.js.map +1 -0
  83. package/lib/components/CarouselCard/CarouselCard.d.ts +1 -1
  84. package/lib/components/CarouselCard/CarouselCard.js +2 -2
  85. package/lib/components/CarouselCard/CarouselCard.js.map +1 -1
  86. package/lib/components/CarouselCard/CarouselCardContent.d.ts +5 -2
  87. package/lib/components/CarouselCard/constants.d.ts +3 -0
  88. package/lib/components/CarouselCard/constants.js +9 -0
  89. package/lib/components/CarouselCard/constants.js.map +1 -0
  90. package/lib/components/CarouselTariffsCard/CarouselTariffsCard.d.ts +5 -0
  91. package/lib/components/CarouselTariffsCard/CarouselTariffsCard.fixture.d.ts +9 -0
  92. package/lib/components/CarouselTariffsCard/CarouselTariffsCard.js +27 -0
  93. package/lib/components/CarouselTariffsCard/CarouselTariffsCard.js.map +1 -0
  94. package/lib/components/CarouselTariffsCard/CarouselTariffsCardContent.d.ts +15 -0
  95. package/lib/components/CarouselTariffsCard/CarouselTariffsCardContent.js +2 -0
  96. package/lib/components/CarouselTariffsCard/CarouselTariffsCardContent.js.map +1 -0
  97. package/lib/components/ComparisonTable/ComparisonTableBody.js +2 -2
  98. package/lib/components/ComparisonTable/ComparisonTableBody.js.map +1 -1
  99. package/lib/components/ComparisonTable/ComparisonTableRows.d.ts +2 -2
  100. package/lib/components/ComparisonTable/ComparisonTableRows.js +1 -1
  101. package/lib/components/ComparisonTable/ComparisonTableRows.js.map +1 -1
  102. package/lib/components/MobileAppTile/MobileAppTile.js +1 -1
  103. package/lib/components/ProductBlock/ProductBlockContent.d.ts +6 -0
  104. package/lib/components/ProductBlock/ProductBlockInner.js +5 -3
  105. package/lib/components/ProductBlock/ProductBlockInner.js.map +1 -1
  106. package/lib/components/TariffsTable/TariffsTable.js +3 -3
  107. package/lib/components/TariffsTable/TariffsTable.js.map +1 -1
  108. package/lib/hooks/useCarouselControls.d.ts +13 -0
  109. package/lib/hooks/{useCarousel.js → useCarouselControls.js} +4 -4
  110. package/lib/hooks/useCarouselControls.js.map +1 -0
  111. package/lib/icons/IconName.d.ts +4 -2
  112. package/lib/icons/IconName.js +3 -1
  113. package/lib/icons/IconName.js.map +1 -1
  114. package/lib/ui-kit/Button/ButtonInner.js +1 -1
  115. package/lib/ui-kit/Foldable/Foldable.d.ts +1 -1
  116. package/lib/ui-kit/InnerTable/InnerTableHeader.js +2 -2
  117. package/lib/ui-kit/InnerTable/InnerTableHeader.js.map +1 -1
  118. package/mobile/bundle/bundle.umd.js +2 -2
  119. package/mobile/bundle/bundle.umd.min.js +1 -1
  120. package/mobile/bundle/components/Carousel/Carousel.d.ts +1 -1
  121. package/mobile/bundle/components/Carousel/CarouselContainer.d.ts +2 -1
  122. package/mobile/bundle/components/Carousel/CarouselContent.d.ts +9 -2
  123. package/mobile/bundle/components/Carousel/CarouselNavButtons.d.ts +11 -0
  124. package/mobile/bundle/components/CarouselCard/CarouselCard.d.ts +1 -1
  125. package/mobile/bundle/components/CarouselCard/CarouselCardContent.d.ts +5 -2
  126. package/mobile/bundle/components/CarouselCard/constants.d.ts +3 -0
  127. package/mobile/bundle/components/CarouselTariffsCard/CarouselTariffsCard.d.ts +5 -0
  128. package/mobile/bundle/components/CarouselTariffsCard/CarouselTariffsCardContent.d.ts +15 -0
  129. package/mobile/bundle/components/ComparisonTable/ComparisonTableRows.d.ts +2 -2
  130. package/mobile/bundle/components/ProductBlock/ProductBlockContent.d.ts +6 -0
  131. package/mobile/bundle/hooks/useCarouselControls.d.ts +13 -0
  132. package/mobile/bundle/icons/IconName.d.ts +4 -2
  133. package/mobile/bundle/ui-kit/Foldable/Foldable.d.ts +1 -1
  134. package/mobile/dist/components/Carousel/Carousel.d.ts +1 -1
  135. package/mobile/dist/components/Carousel/Carousel.js +6 -6
  136. package/mobile/dist/components/Carousel/Carousel.js.map +1 -1
  137. package/mobile/dist/components/Carousel/CarouselContainer.d.ts +2 -1
  138. package/mobile/dist/components/Carousel/CarouselContainer.js +1 -1
  139. package/mobile/dist/components/Carousel/CarouselContainer.js.map +1 -1
  140. package/mobile/dist/components/Carousel/CarouselContent.d.ts +9 -2
  141. package/mobile/dist/components/Carousel/CarouselContent.js +3 -0
  142. package/mobile/dist/components/Carousel/CarouselContent.js.map +1 -1
  143. package/mobile/dist/components/Carousel/CarouselNavButtons.d.ts +11 -0
  144. package/mobile/dist/components/Carousel/CarouselNavButtons.js +36 -0
  145. package/mobile/dist/components/Carousel/CarouselNavButtons.js.map +1 -0
  146. package/mobile/dist/components/CarouselCard/CarouselCard.d.ts +1 -1
  147. package/mobile/dist/components/CarouselCard/CarouselCard.js +2 -2
  148. package/mobile/dist/components/CarouselCard/CarouselCard.js.map +1 -1
  149. package/mobile/dist/components/CarouselCard/CarouselCardContent.d.ts +5 -2
  150. package/mobile/dist/components/CarouselCard/constants.d.ts +3 -0
  151. package/mobile/dist/components/CarouselCard/constants.js +11 -0
  152. package/mobile/dist/components/CarouselCard/constants.js.map +1 -0
  153. package/mobile/dist/components/CarouselTariffsCard/CarouselTariffsCard.d.ts +5 -0
  154. package/mobile/dist/components/CarouselTariffsCard/CarouselTariffsCard.js +29 -0
  155. package/mobile/dist/components/CarouselTariffsCard/CarouselTariffsCard.js.map +1 -0
  156. package/mobile/dist/components/CarouselTariffsCard/CarouselTariffsCardContent.d.ts +15 -0
  157. package/mobile/dist/components/CarouselTariffsCard/CarouselTariffsCardContent.js +2 -0
  158. package/mobile/dist/components/CarouselTariffsCard/CarouselTariffsCardContent.js.map +1 -0
  159. package/mobile/dist/components/ComparisonTable/ComparisonTableBody.js +2 -2
  160. package/mobile/dist/components/ComparisonTable/ComparisonTableBody.js.map +1 -1
  161. package/mobile/dist/components/ComparisonTable/ComparisonTableRows.d.ts +2 -2
  162. package/mobile/dist/components/ComparisonTable/ComparisonTableRows.js +1 -1
  163. package/mobile/dist/components/ComparisonTable/ComparisonTableRows.js.map +1 -1
  164. package/mobile/dist/components/ProductBlock/ProductBlockContent.d.ts +6 -0
  165. package/mobile/dist/hooks/useCarouselControls.d.ts +13 -0
  166. package/{dist/hooks/useCarousel.js → mobile/dist/hooks/useCarouselControls.js} +6 -6
  167. package/mobile/dist/hooks/useCarouselControls.js.map +1 -0
  168. package/mobile/dist/icons/IconName.d.ts +4 -2
  169. package/mobile/dist/icons/IconName.js +3 -1
  170. package/mobile/dist/icons/IconName.js.map +1 -1
  171. package/mobile/dist/ui-kit/Button/ButtonInner.js +1 -1
  172. package/mobile/dist/ui-kit/Foldable/Foldable.d.ts +1 -1
  173. package/mobile/dist/ui-kit/InnerTable/InnerTableHeader.js +2 -2
  174. package/mobile/dist/ui-kit/InnerTable/InnerTableHeader.js.map +1 -1
  175. package/mobile/lib/components/Carousel/Carousel.d.ts +1 -1
  176. package/mobile/lib/components/Carousel/Carousel.js +6 -6
  177. package/mobile/lib/components/Carousel/Carousel.js.map +1 -1
  178. package/mobile/lib/components/Carousel/CarouselContainer.d.ts +2 -1
  179. package/mobile/lib/components/Carousel/CarouselContainer.js +1 -1
  180. package/mobile/lib/components/Carousel/CarouselContainer.js.map +1 -1
  181. package/mobile/lib/components/Carousel/CarouselContent.d.ts +9 -2
  182. package/mobile/lib/components/Carousel/CarouselContent.js +3 -0
  183. package/mobile/lib/components/Carousel/CarouselContent.js.map +1 -1
  184. package/mobile/lib/components/Carousel/CarouselNavButtons.d.ts +11 -0
  185. package/mobile/lib/components/Carousel/CarouselNavButtons.js +34 -0
  186. package/mobile/lib/components/Carousel/CarouselNavButtons.js.map +1 -0
  187. package/mobile/lib/components/CarouselCard/CarouselCard.d.ts +1 -1
  188. package/mobile/lib/components/CarouselCard/CarouselCard.js +2 -2
  189. package/mobile/lib/components/CarouselCard/CarouselCard.js.map +1 -1
  190. package/mobile/lib/components/CarouselCard/CarouselCardContent.d.ts +5 -2
  191. package/mobile/lib/components/CarouselCard/constants.d.ts +3 -0
  192. package/mobile/lib/components/CarouselCard/constants.js +9 -0
  193. package/mobile/lib/components/CarouselCard/constants.js.map +1 -0
  194. package/mobile/lib/components/CarouselTariffsCard/CarouselTariffsCard.d.ts +5 -0
  195. package/mobile/lib/components/CarouselTariffsCard/CarouselTariffsCard.js +27 -0
  196. package/mobile/lib/components/CarouselTariffsCard/CarouselTariffsCard.js.map +1 -0
  197. package/mobile/lib/components/CarouselTariffsCard/CarouselTariffsCardContent.d.ts +15 -0
  198. package/mobile/lib/components/CarouselTariffsCard/CarouselTariffsCardContent.js +2 -0
  199. package/mobile/lib/components/CarouselTariffsCard/CarouselTariffsCardContent.js.map +1 -0
  200. package/mobile/lib/components/ComparisonTable/ComparisonTableBody.js +2 -2
  201. package/mobile/lib/components/ComparisonTable/ComparisonTableBody.js.map +1 -1
  202. package/mobile/lib/components/ComparisonTable/ComparisonTableRows.d.ts +2 -2
  203. package/mobile/lib/components/ComparisonTable/ComparisonTableRows.js +1 -1
  204. package/mobile/lib/components/ComparisonTable/ComparisonTableRows.js.map +1 -1
  205. package/mobile/lib/components/ProductBlock/ProductBlockContent.d.ts +6 -0
  206. package/mobile/lib/hooks/useCarouselControls.d.ts +13 -0
  207. package/mobile/lib/hooks/{useCarousel.js → useCarouselControls.js} +4 -4
  208. package/mobile/lib/hooks/useCarouselControls.js.map +1 -0
  209. package/mobile/lib/icons/IconName.d.ts +4 -2
  210. package/mobile/lib/icons/IconName.js +3 -1
  211. package/mobile/lib/icons/IconName.js.map +1 -1
  212. package/mobile/lib/ui-kit/Button/ButtonInner.js +1 -1
  213. package/mobile/lib/ui-kit/Foldable/Foldable.d.ts +1 -1
  214. package/mobile/lib/ui-kit/InnerTable/InnerTableHeader.js +2 -2
  215. package/mobile/lib/ui-kit/InnerTable/InnerTableHeader.js.map +1 -1
  216. package/mobile/src/components/Carousel/Carousel.tsx +7 -8
  217. package/mobile/src/components/Carousel/CarouselContainer.tsx +3 -2
  218. package/mobile/src/components/Carousel/CarouselContent.ts +10 -2
  219. package/mobile/src/components/Carousel/CarouselNavButtons.tsx +51 -0
  220. package/mobile/src/components/CarouselCard/CarouselCard.tsx +4 -4
  221. package/mobile/src/components/CarouselCard/CarouselCardContent.ts +5 -2
  222. package/mobile/src/components/CarouselCard/constants.ts +11 -0
  223. package/mobile/src/components/CarouselTariffsCard/CarouselTariffsCard.example.json +24 -0
  224. package/mobile/src/components/CarouselTariffsCard/CarouselTariffsCard.tsx +93 -0
  225. package/mobile/src/components/CarouselTariffsCard/CarouselTariffsCard.ui.json +1 -0
  226. package/mobile/src/components/CarouselTariffsCard/CarouselTariffsCardContent.ts +16 -0
  227. package/mobile/src/components/ComparisonTable/ComparisonTableBody.tsx +2 -2
  228. package/mobile/src/components/ComparisonTable/ComparisonTableRows.tsx +3 -3
  229. package/mobile/src/components/ProductBlock/ProductBlockContent.ts +6 -0
  230. package/mobile/src/hooks/{useCarousel.ts → useCarouselControls.ts} +5 -9
  231. package/mobile/src/icons/HeartIcon.svg +3 -0
  232. package/mobile/src/icons/IconName.ts +5 -5
  233. package/mobile/src/ui-kit/Button/ButtonInner.tsx +1 -1
  234. package/mobile/src/ui-kit/Foldable/Foldable.tsx +1 -1
  235. package/mobile/src/ui-kit/InnerTable/InnerTableHeader.tsx +9 -2
  236. package/package.json +1 -1
  237. package/src/components/Blocks.ts +7 -5
  238. package/src/components/Carousel/Carousel.fixture.tsx +31 -3
  239. package/src/components/Carousel/Carousel.tsx +7 -8
  240. package/src/components/Carousel/CarouselContainer.tsx +3 -2
  241. package/src/components/Carousel/CarouselContent.ts +10 -2
  242. package/src/components/Carousel/CarouselNavButtons.tsx +51 -0
  243. package/src/components/CarouselCard/CarouselCard.fixture.tsx +3 -6
  244. package/src/components/CarouselCard/CarouselCard.tsx +4 -4
  245. package/src/components/CarouselCard/CarouselCardContent.ts +5 -2
  246. package/src/components/CarouselCard/constants.ts +11 -0
  247. package/src/components/CarouselTariffsCard/CarouselTariffsCard.example.json +24 -0
  248. package/src/components/CarouselTariffsCard/CarouselTariffsCard.fixture.tsx +64 -0
  249. package/src/components/CarouselTariffsCard/CarouselTariffsCard.tsx +93 -0
  250. package/src/components/CarouselTariffsCard/CarouselTariffsCard.ui.json +1 -0
  251. package/src/components/CarouselTariffsCard/CarouselTariffsCardContent.ts +16 -0
  252. package/src/components/ComparisonTable/ComparisonTableBody.tsx +2 -2
  253. package/src/components/ComparisonTable/ComparisonTableRows.tsx +3 -3
  254. package/src/components/MobileAppTile/MobileAppTile.tsx +1 -1
  255. package/src/components/ProductBlock/ProductBlock.fixture.tsx +1 -0
  256. package/src/components/ProductBlock/ProductBlockContent.ts +6 -0
  257. package/src/components/ProductBlock/ProductBlockInner.tsx +8 -3
  258. package/src/components/TariffsTable/TariffsTable.tsx +5 -7
  259. package/src/hooks/{useCarousel.ts → useCarouselControls.ts} +5 -9
  260. package/src/icons/HeartIcon.svg +3 -0
  261. package/src/icons/IconName.ts +327 -6
  262. package/src/model/.CarouselCardVersion.ts.icloud +0 -0
  263. package/src/ui-kit/Button/ButtonInner.tsx +1 -1
  264. package/src/ui-kit/Foldable/Foldable.tsx +1 -1
  265. package/src/ui-kit/InnerTable/InnerTableHeader.tsx +9 -2
  266. package/bundle/hooks/useCarousel.d.ts +0 -14
  267. package/dist/hooks/useCarousel.d.ts +0 -14
  268. package/dist/hooks/useCarousel.js.map +0 -1
  269. package/lib/hooks/useCarousel.d.ts +0 -14
  270. package/lib/hooks/useCarousel.js.map +0 -1
  271. package/mobile/bundle/hooks/useCarousel.d.ts +0 -14
  272. package/mobile/dist/hooks/useCarousel.d.ts +0 -14
  273. package/mobile/dist/hooks/useCarousel.js.map +0 -1
  274. package/mobile/lib/hooks/useCarousel.d.ts +0 -14
  275. package/mobile/lib/hooks/useCarousel.js.map +0 -1
@@ -1,9 +1,10 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
+ import type { CardWidth } from './CarouselContent';
2
3
 
3
4
  export interface CarouselContainerProps {
4
5
  activeItem: number;
5
6
  cardFullViewCount: number;
6
- cardWidth: number;
7
+ cardWidth: CardWidth;
7
8
  }
8
9
 
9
10
  export const CarouselContainer = JSX<CarouselContainerProps>(
@@ -11,7 +12,7 @@ export const CarouselContainer = JSX<CarouselContainerProps>(
11
12
  const cardFullViewStyles =
12
13
  cardFullViewCount === 1
13
14
  ? `translateX(-${activeItem}00%)`
14
- : `translateX(-${activeItem * cardWidth}px)`;
15
+ : `translateX(-${activeItem * Number(cardWidth)}px)`;
15
16
 
16
17
  return (
17
18
  <div
@@ -1,10 +1,18 @@
1
1
  /**
2
2
  * @title Карусель
3
3
  */
4
+
5
+ /**
6
+ * @title Ширина карточек
7
+ * @enumNames [ "1007", "833", "350", "322" ]
8
+ */
9
+ export type CardWidth = '322' | '350' | '832' | '1007';
4
10
  export interface CarouselContent {
5
- /** @title Блоки */
11
+ /** @title Количество видимых карточек */
6
12
  cardFullViewCount?: number;
7
- cardWidth?: number;
13
+ cardWidth?: CardWidth;
14
+ /** @title Добавление блюра */
8
15
  isBlur?: boolean;
16
+ /** @title Цикличность */
9
17
  isCyclic?: boolean;
10
18
  }
@@ -0,0 +1,51 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+ import { useCallback } from '@redneckz/uni-jsx/lib/hooks';
3
+ import type { VNode } from '../../model/VNode';
4
+ import { renderArrows } from '../../ui-kit/Button/renderArrows';
5
+
6
+ interface CarouselNavButtonsProps {
7
+ cardsCount: number;
8
+ activeCardIndex: number;
9
+ setActiveCardIndex: (index: number) => void;
10
+ cardFullViewCount: number;
11
+ cards?: VNode[];
12
+ isCycle?: boolean;
13
+ }
14
+
15
+ export const CarouselNavButtons = JSX<CarouselNavButtonsProps>(
16
+ ({ cardsCount, activeCardIndex, setActiveCardIndex, cardFullViewCount, isCycle }) => {
17
+ const isGalleryScrollAvailable = cardsCount > cardFullViewCount;
18
+
19
+ const showNextButton =
20
+ (isCycle && isGalleryScrollAvailable) ||
21
+ (isGalleryScrollAvailable && cardsCount - activeCardIndex > cardFullViewCount);
22
+
23
+ const showPrevButton =
24
+ (isCycle && isGalleryScrollAvailable) || (isGalleryScrollAvailable && activeCardIndex > 0);
25
+
26
+ const handleNextClick = useCallback(() => {
27
+ if (isCycle) {
28
+ const nextIndex = activeCardIndex + 1;
29
+ setActiveCardIndex(cardsCount === nextIndex ? 0 : nextIndex);
30
+ } else {
31
+ setActiveCardIndex(activeCardIndex + 1);
32
+ }
33
+ }, []);
34
+
35
+ const handlePrevClick = useCallback(() => {
36
+ if (isCycle && cardsCount > 0) {
37
+ const prevIndex = activeCardIndex - 1;
38
+ setActiveCardIndex(prevIndex < 0 ? cardsCount - 1 : prevIndex);
39
+ } else {
40
+ setActiveCardIndex(activeCardIndex - 1);
41
+ }
42
+ }, []);
43
+
44
+ return renderArrows({
45
+ handler: [handlePrevClick, handleNextClick],
46
+ isShown: [showPrevButton, showNextButton],
47
+ btnClass: ['left-8', 'right-8'],
48
+ className: 'top-1/2 z-10',
49
+ });
50
+ },
51
+ );
@@ -11,24 +11,21 @@ const button: ButtonProps = {
11
11
 
12
12
  export const CARD: CarouselCardContent = {
13
13
  title: 'Хочешь попасть на практику в РСХБ?',
14
- description:
15
- 'Стажировка в Россельхозбанке — это возможность реализовать смелые идеи и проекты под руководством опытных наставников, внести свой вклад в развитие перспективных цифровых продуктов.',
14
+ description: 'Стажировка в Россельхозбанке — это возможность реализовать смелые идеи и проекты.',
16
15
  button,
17
16
  version: 'normal',
18
17
  };
19
18
 
20
19
  export const CARD_NEW: CarouselCardContent = {
21
20
  title: 'РСХБ?',
22
- description:
23
- 'Стажировка в Россельхозбанке — это возможность реализовать смелые идеи и проекты под руководством опытных наставников, внести свой вклад в развитие перспективных цифровых продуктов.',
21
+ description: 'Стажировка в Россельхозбанке — это возможность реализовать смелые идеи и проекты.',
24
22
  button,
25
23
  version: 'normal',
26
24
  };
27
25
 
28
26
  export const CARD_MINI: CarouselCardContent = {
29
27
  title: 'Хочешь попасть на практику в РСХБ?',
30
- description:
31
- 'Стажировка в Россельхозбанке — это возможность реализовать смелые идеи и проекты под руководством опытных наставников, внести свой вклад в развитие перспективных цифровых продуктов.',
28
+ description: 'Стажировка в Россельхозбанке — это возможность реализовать смелые идеи и проекты.',
32
29
  button,
33
30
  version: 'mini',
34
31
  };
@@ -1,9 +1,9 @@
1
- import { Headline } from '../Headline/Headline';
2
1
  import { JSX } from '@redneckz/uni-jsx';
3
- import { renderButton } from '../../ui-kit/Button/ButtonSection';
4
- import type { CarouselCardContent } from './CarouselCardContent';
5
2
  import type { CarouselCardVersion } from '../../model/CarouselCardVersion';
6
3
  import type { UniBlockProps } from '../../model/JSXBlock';
4
+ import { renderButton } from '../../ui-kit/Button/ButtonSection';
5
+ import { Headline } from '../Headline/Headline';
6
+ import type { CarouselCardContent } from './CarouselCardContent';
7
7
 
8
8
  export interface CarouselCardProps extends CarouselCardContent, UniBlockProps {
9
9
  version?: CarouselCardVersion;
@@ -13,7 +13,7 @@ const BLOCK_CLASSES = 'absolute border border-solid border-main-stroke w-[100%]
13
13
 
14
14
  const CARD_STYLE_MAP: Record<CarouselCardVersion, string> = {
15
15
  normal: 'min-w-[100%] justify-center items-center my-7 col-span-12',
16
- mini: 'w-1/3 justify-center items-center mx-4 my-9 col-span-4',
16
+ mini: 'justify-center items-center mx-4 my-9 col-span-4',
17
17
  };
18
18
 
19
19
  const CARD_WIDTH_MAP: Record<CarouselCardVersion, string> = {
@@ -1,7 +1,10 @@
1
- import type { ButtonWithIconProps } from '../../ui-kit/Button/ButtonProps';
2
- import type { HeadlineCommonProps } from '../../model/HeadlineType';
3
1
  import type { CarouselCardVersion } from '../../model/CarouselCardVersion';
2
+ import type { HeadlineCommonProps } from '../../model/HeadlineType';
3
+ import type { ButtonWithIconProps } from '../../ui-kit/Button/ButtonProps';
4
4
 
5
+ /**
6
+ * @title Карточка какусели
7
+ */
5
8
  export interface CarouselCardContent extends HeadlineCommonProps {
6
9
  /**
7
10
  * @title Кнопка
@@ -0,0 +1,11 @@
1
+ import type { CarouselCardVersion } from '../../model/CarouselCardVersion';
2
+
3
+ export const cardStyleMap: Record<CarouselCardVersion, string> = {
4
+ normal: 'min-w-[100%] justify-center items-center m-7 col-span-12',
5
+ mini: 'min-w-auto justify-center items-center m-9 col-span-4',
6
+ };
7
+
8
+ export const cardWidthMap: Record<CarouselCardVersion, string> = {
9
+ normal: 'w-[1007px]',
10
+ mini: 'w-[350px]',
11
+ };
@@ -0,0 +1,24 @@
1
+ {
2
+ "title": "Заголовок",
3
+ "button": {
4
+ "href": "",
5
+ "text": "Кнопка",
6
+ "target": "_self",
7
+ "version": "primary"
8
+ },
9
+ "isHighlighting": false,
10
+ "rows": [
11
+ {
12
+ "title": "Ячейка 1-1",
13
+ "description": "Описание 1-1"
14
+ },
15
+ {
16
+ "title": "Ячейка 1-2",
17
+ "description": "Описание 1-2"
18
+ },
19
+ {
20
+ "title": "Ячейка 1-3",
21
+ "description": "Описание 1-3"
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,64 @@
1
+ import type { Picture } from '../../model/Picture';
2
+ import { ButtonProps } from '../../ui-kit/Button/ButtonProps';
3
+ import { CarouselTariffsCard } from './CarouselTariffsCard';
4
+ import { CarouselTariffsCardContent } from './CarouselTariffsCardContent';
5
+
6
+ const imageMonth: Picture = {
7
+ src: 'monthly-payment.png',
8
+ format: 'webp',
9
+ size: {
10
+ width: 266,
11
+ height: 73,
12
+ },
13
+ title: 'money',
14
+ };
15
+
16
+ const button: ButtonProps = {
17
+ href: '/',
18
+ text: 'Открыть расчетный счет',
19
+ target: '_blank',
20
+ version: 'primary',
21
+ };
22
+
23
+ const buttonSecondary: ButtonProps = {
24
+ href: '/',
25
+ text: 'Открыть расчетный счет',
26
+ target: '_blank',
27
+ version: 'secondary',
28
+ };
29
+
30
+ const rows = [
31
+ { title: 'Открытие расчетного счета', description: 'Бесплатно' },
32
+ { title: 'Внутрибанковские платежи', description: '0 ₽' },
33
+ { title: 'Внешние платежи, до 10 шт.', description: '0 ₽' },
34
+ { title: 'От 11 платежей', description: '50 ₽/шт.' },
35
+ {
36
+ title: 'Внесение наличных',
37
+ description: '0% - до 100 000 ₽/мес., далее согласно п.2.4. Тарифов Банка',
38
+ },
39
+ { title: 'Зарплатный проект', description: 'Бесплатно' },
40
+ ];
41
+
42
+ export const TARIFFS_CARD: CarouselTariffsCardContent = {
43
+ title: 'Расчётный эконом',
44
+ icon: imageMonth,
45
+ button: buttonSecondary,
46
+ rows,
47
+ };
48
+
49
+ export const TARIFFS_CARD_HIT: CarouselTariffsCardContent = {
50
+ icon: imageMonth,
51
+ title: 'Расчётный эконом',
52
+ button,
53
+ rows,
54
+ isHighlighting: true,
55
+ };
56
+
57
+ const CAROUSEL_TARIFFS_CARD = <CarouselTariffsCard {...TARIFFS_CARD} />;
58
+
59
+ const CAROUSEL_TARIFFS_CARD_HIT = <CarouselTariffsCard {...TARIFFS_CARD_HIT} />;
60
+
61
+ export default {
62
+ default: <div className="container grid grid-cols-12">{CAROUSEL_TARIFFS_CARD}</div>,
63
+ hit: <div className="container grid grid-cols-12">{CAROUSEL_TARIFFS_CARD_HIT}</div>,
64
+ };
@@ -0,0 +1,93 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+ import type { HeadlineCommonProps } from '../../model/HeadlineType';
3
+ import type { UniBlockProps } from '../../model/JSXBlock';
4
+ import { VNode } from '../../model/VNode';
5
+ import { BlockWrapper } from '../../ui-kit/BlockWrapper';
6
+ import { Button } from '../../ui-kit/Button/Button';
7
+ import { Foldable } from '../../ui-kit/Foldable/Foldable';
8
+ import { FoldablePartProps } from '../../ui-kit/Foldable/FoldablePartProps';
9
+ import { FoldableSection } from '../../ui-kit/Foldable/FoldableSection';
10
+ import { Heading } from '../../ui-kit/Heading/Heading';
11
+ import { Icon } from '../../ui-kit/Icon/Icon';
12
+ import { Img } from '../../ui-kit/Img/Img';
13
+ import type { CarouselTariffsCardContent } from './CarouselTariffsCardContent';
14
+
15
+ export interface CarouselTariffsCardProps extends CarouselTariffsCardContent, UniBlockProps {}
16
+
17
+ export const CarouselTariffsCard = JSX<CarouselTariffsCardProps>(
18
+ ({ className = '', title, icon, isHighlighting, button, rows = [], ...rest }) => {
19
+ const hitStyle = getHitStyle(Boolean(isHighlighting));
20
+ const rowsNode = rows.map(renderCardInfo);
21
+ const VISIBLE_ROWS_COUNT = 1;
22
+ const [visibleRows, hiddenRows] = [
23
+ rowsNode.slice(0, VISIBLE_ROWS_COUNT),
24
+ rowsNode.slice(VISIBLE_ROWS_COUNT),
25
+ ];
26
+
27
+ return (
28
+ <BlockWrapper
29
+ className={`font-sans bg-white p-[50px] p-8 border border-main-stroke relative w-[322px] min-w-[322px] -ml-[1px] ${hitStyle} ${className}`}
30
+ {...rest}
31
+ >
32
+ {isHighlighting ? renderHitIcon() : null}
33
+ {icon?.src ? <Img className="flex justify-center" image={icon} /> : null}
34
+ {title ? (
35
+ <Heading className="text-primary-text text-center pt-2" headingType="h5" title={title} />
36
+ ) : null}
37
+ {button ? <Button className="w-full mt-4" {...button} /> : null}
38
+ {rows?.length ? (
39
+ <Foldable
40
+ renderFoldableSection={({ isUnfolded }) => (
41
+ <div>
42
+ {visibleRows}
43
+ <FoldableSection isUnfolded={isUnfolded}>{hiddenRows}</FoldableSection>
44
+ </div>
45
+ )}
46
+ renderFoldButton={rows.length > 1 ? renderFoldButton : null}
47
+ />
48
+ ) : null}
49
+ </BlockWrapper>
50
+ );
51
+ },
52
+ );
53
+
54
+ const getHitStyle = (isHighlighting: boolean): string =>
55
+ isHighlighting ? 'mt-9 pt-[71px]' : 'mt-[70px] pt-9';
56
+
57
+ const renderFoldButton = ({ isUnfolded, onToggle }: FoldablePartProps): VNode => (
58
+ <button
59
+ className="w-full cursor-pointer text-primary-main pt-5 flex justify-between items-center"
60
+ onClick={onToggle}
61
+ >
62
+ <div>{isUnfolded ? 'Скрыть' : 'Подробнее о тарифе'}</div>
63
+ <Icon
64
+ className="text-primary-text"
65
+ name={isUnfolded ? 'ArrowUpIcon' : 'ArrowDownIcon'}
66
+ width="16"
67
+ height="16"
68
+ asSVG
69
+ />
70
+ </button>
71
+ );
72
+
73
+ const renderCardInfo = (cell: HeadlineCommonProps): VNode => (
74
+ <div className="py-5 border-b border-main-divider flex flex-col gap-1">
75
+ {cell?.title ? (
76
+ <div className="text-secondary-text text-m-light opacity-80">{cell.title}</div>
77
+ ) : null}
78
+ {cell?.description ? <div className="text-primary-text text-h6">{cell.description}</div> : null}
79
+ </div>
80
+ );
81
+
82
+ const renderHitIcon = (): VNode => {
83
+ const POSITION_STYLE = 'absolute -top-7 -right-4';
84
+
85
+ return (
86
+ <div
87
+ className={`h-[60px] w-[60px] bg-white flex flex-col items-center justify-center shadow-[0_4px_25px_rgba(0,0,0,0.07)] ${POSITION_STYLE}`}
88
+ >
89
+ <Icon iconVersion="black" name="HeartIcon" width="23" height="22" asSVG />
90
+ <div className="text-center">Хит</div>
91
+ </div>
92
+ );
93
+ };
@@ -0,0 +1,16 @@
1
+ import type { HeadlineCommonProps, TitleProps } from '../../model/HeadlineType';
2
+ import type { Picture } from '../../model/Picture';
3
+ import type { ButtonProps } from '../../ui-kit/Button/ButtonProps';
4
+
5
+ /**
6
+ * @title Карточка тарифной карусели
7
+ */
8
+ export type CarouselTariffsCardContent = TitleProps & {
9
+ icon?: Picture;
10
+ /** @title Выделить карточку */
11
+ isHighlighting?: boolean;
12
+ /** @title Кнопка */
13
+ button?: ButtonProps;
14
+ /** @title Ячейка */
15
+ rows?: HeadlineCommonProps[];
16
+ };
@@ -1,5 +1,5 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
- import { useCarouselControl } from '../../hooks/useCarousel';
2
+ import { useCarouselControls } from '../../hooks/useCarouselControls';
3
3
  import { ComparisonTableColumnHeaders } from './ComparisonTableColumnHeaders';
4
4
  import type { Column, RowHeader } from './ComparisonTableContent';
5
5
  import { ComparisonTableRows } from './ComparisonTableRows';
@@ -26,7 +26,7 @@ export const ComparisonTableBody = JSX<ComparisonTableBodyProps>(
26
26
 
27
27
  const isScrollAvailable = colData.length > COLS_LENGTH_FOR_SCROLL;
28
28
 
29
- const [activeIndex, controls] = useCarouselControl({
29
+ const [activeIndex, controls] = useCarouselControls({
30
30
  itemsCount: colData.length,
31
31
  visibleItemCount: COLS_LENGTH_FOR_SCROLL,
32
32
  });
@@ -1,15 +1,15 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
+ import type { CarouselControls } from '../../hooks/useCarouselControls';
2
3
  import type { TitleProps } from '../../model/HeadlineType';
4
+ import { renderArrows } from '../../ui-kit/Button/renderArrows';
3
5
  import type { CellData } from './ComparisonTableContent';
4
6
  import { TableRow } from './TableRow';
5
- import type { Controls } from '../../hooks/useCarousel';
6
- import { renderArrows } from '../../ui-kit/Button/renderArrows';
7
7
 
8
8
  type ComparisonTableRowsProps = {
9
9
  rowData: { header: TitleProps; data: CellData[][] }[];
10
10
  activeCardIndex: number;
11
11
  isColoredFirstColumn: boolean;
12
- controls: Controls;
12
+ controls: CarouselControls;
13
13
  isScrollAvailable: boolean;
14
14
  };
15
15
 
@@ -48,7 +48,7 @@ export const MobileAppTile = JSX<MobileAppTileProps>(
48
48
  headingType={headingType}
49
49
  as="h3"
50
50
  title={title}
51
- className={`whitespace-pre-wrap max-w-[509px] mb-6
51
+ className={`whitespace-pre-wrap mb-6 w-full
52
52
  ${textColorClass} ${AlignText[alignTitle]}`}
53
53
  />
54
54
  ) : null
@@ -85,6 +85,7 @@ export default {
85
85
  headlineVersion="L"
86
86
  title="Потребительский кредит наличными"
87
87
  description="Кредит наличными без залога и поручительства. Потребительский кредит на любые цели. Нужен только паспорт."
88
+ benefitsCountOfRow={2}
88
89
  benefits={benefits}
89
90
  benefitsVersion="normal"
90
91
  buttons={buttons}
@@ -25,6 +25,12 @@ export type ProductBlockInnerContent = HeadlineProps &
25
25
  * }
26
26
  */
27
27
  image?: Picture;
28
+ /**
29
+ * @title Количество преимуществ в строке
30
+ * @default 3
31
+ * @enumNames ["2", "3"]
32
+ */
33
+ benefitsCountOfRow?: 2 | 3;
28
34
  /**
29
35
  * @title Список преимуществ
30
36
  * @minItems 2
@@ -16,6 +16,7 @@ export const ProductBlockInner = JSX<ProductBlockInnerProps>(
16
16
  title,
17
17
  headlineVersion = 'L',
18
18
  description,
19
+ benefitsCountOfRow = 3,
19
20
  benefits,
20
21
  benefitsVersion,
21
22
  buttons,
@@ -27,7 +28,7 @@ export const ProductBlockInner = JSX<ProductBlockInnerProps>(
27
28
  ...rest
28
29
  }) => {
29
30
  const benefitsCount = benefits?.filter((_) => _.label)?.length;
30
- const benefitsContainerStyles = getBenefitsContainerStyles(benefitsCount);
31
+ const benefitsContainerStyles = getBenefitsContainerStyles(benefitsCountOfRow);
31
32
 
32
33
  return (
33
34
  <div className={`flex grow justify-between items-stretch h-full ${className}`}>
@@ -70,5 +71,9 @@ export const ProductBlockInner = JSX<ProductBlockInnerProps>(
70
71
  },
71
72
  );
72
73
 
73
- const getBenefitsContainerStyles = (benefitsCount = 0) =>
74
- `gap-6 mt-6 ${benefitsCount > 3 ? 'inline-grid grid-cols-[auto_auto]' : 'flex'}`;
74
+ const getBenefitsContainerStyles = (benefitsCountOfRow = 2) =>
75
+ `gap-6 mt-6 ${
76
+ benefitsCountOfRow > 2
77
+ ? 'inline-grid grid-cols-[auto_auto_auto]'
78
+ : 'inline-grid grid-cols-[auto_auto]'
79
+ }`;
@@ -1,23 +1,21 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
- import { useCarouselControl } from '../../hooks/useCarousel';
2
+ import type { CarouselControls } from '../../hooks/useCarouselControls';
3
+ import { useCarouselControls } from '../../hooks/useCarouselControls';
3
4
  import type { UniBlockProps } from '../../model/JSXBlock';
4
5
  import { BlockWrapper } from '../../ui-kit/BlockWrapper';
6
+ import { renderArrows } from '../../ui-kit/Button/renderArrows';
5
7
  import { renderDefaultFoldButton } from '../../ui-kit/Foldable/DefaultFoldButton';
6
8
  import { Foldable } from '../../ui-kit/Foldable/Foldable';
7
9
  import { FoldableSection } from '../../ui-kit/Foldable/FoldableSection';
8
10
  import { Heading } from '../../ui-kit/Heading/Heading';
9
- import { TableArrowScrollControl } from '../../ui-kit/TableArrowScrollControl/TableArrowScrollControl';
10
- import type { TableArrowScrollControlProps } from '../../ui-kit/TableArrowScrollControl/TableArrowScrollControlProps';
11
11
  import { COLS_LENGTH_FOR_SCROLL } from './constants';
12
12
  import type { TariffsTableContent } from './TariffsTableContent';
13
13
  import { TariffsTableRow } from './TariffsTableRow';
14
- import { renderArrows } from '../../ui-kit/Button/renderArrows';
15
- import type { Controls } from '../../hooks/useCarousel';
16
14
 
17
15
  export interface TariffsTableProps extends TariffsTableContent, UniBlockProps {}
18
16
 
19
17
  interface WrapperProps {
20
- controls: Controls;
18
+ controls: CarouselControls;
21
19
  isScrollAvailable: boolean;
22
20
  }
23
21
 
@@ -39,7 +37,7 @@ export const TariffsTable = JSX<TariffsTableProps>(
39
37
 
40
38
  const columnsLength = colData.length;
41
39
 
42
- const [activeIndex, controls] = useCarouselControl({
40
+ const [activeIndex, controls] = useCarouselControls({
43
41
  itemsCount: colData.length,
44
42
  visibleItemCount: COLS_LENGTH_FOR_SCROLL,
45
43
  });
@@ -1,8 +1,6 @@
1
1
  import { useCallback, useState } from '@redneckz/uni-jsx/lib/hooks';
2
2
 
3
- export type CarouselControlProps = [number, Controls];
4
-
5
- export interface Controls {
3
+ export interface CarouselControls {
6
4
  inc: () => void;
7
5
  dec: () => void;
8
6
  canInc: boolean;
@@ -15,23 +13,22 @@ interface CarouselProps {
15
13
  isCyclic?: boolean;
16
14
  }
17
15
 
18
- export const useCarouselControl = ({
16
+ export const useCarouselControls = ({
19
17
  itemsCount,
20
18
  visibleItemCount = itemsCount,
21
19
  isCyclic,
22
- }: CarouselProps): Required<CarouselControlProps> => {
20
+ }: CarouselProps): [number, CarouselControls] => {
23
21
  const [activeIndex, setActiveIndex] = useState(0);
24
22
 
25
23
  const inc = useCallback(
26
24
  () =>
27
25
  setActiveIndex((_) => (isCyclic ? (_ + 1) % itemsCount : Math.min(_ + 1, itemsCount - 1))),
28
- [],
26
+ [isCyclic, itemsCount],
29
27
  );
30
-
31
28
  const dec = useCallback(
32
29
  () =>
33
30
  setActiveIndex((_) => (isCyclic ? (itemsCount + _ - 1) % itemsCount : Math.max(_ - 1, 0))),
34
- [],
31
+ [isCyclic, itemsCount],
35
32
  );
36
33
 
37
34
  const isScrollAvailable = itemsCount > visibleItemCount;
@@ -40,7 +37,6 @@ export const useCarouselControl = ({
40
37
  const canInc =
41
38
  isCyclicAndScrollAvailable ||
42
39
  (isScrollAvailable && itemsCount - activeIndex > visibleItemCount);
43
-
44
40
  const canDec = isCyclicAndScrollAvailable || Boolean(isScrollAvailable && activeIndex > 0);
45
41
 
46
42
  return [
@@ -0,0 +1,3 @@
1
+ <svg title="Сердце" width="24" height="22" viewBox="0 0 24 22" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M7.87565 3.66675C5.09122 3.66675 2.83398 5.92398 2.83398 8.70841C2.83398 13.7501 8.79232 18.3334 12.0007 19.3996C15.209 18.3334 21.1673 13.7501 21.1673 8.70841C21.1673 5.92398 18.9101 3.66675 16.1257 3.66675C14.4205 3.66675 12.9131 4.51324 12.0007 5.80893C11.0882 4.51324 9.5808 3.66675 7.87565 3.66675Z" fill="currentColor" stroke="currentColor" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>