@redneckz/wildless-cms-uni-blocks 0.2.100 → 0.2.104

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 (286) hide show
  1. package/bundle/blocks.schema.json +1 -1
  2. package/bundle/bundle.umd.js +126 -64
  3. package/bundle/bundle.umd.min.js +1 -1
  4. package/dist/components/BlockContent.d.ts +3 -2
  5. package/dist/components/Blocks.d.ts +1 -0
  6. package/dist/components/Blocks.js +2 -0
  7. package/dist/components/Blocks.js.map +1 -1
  8. package/dist/components/Footer/FooterContent.d.ts +1 -1
  9. package/dist/components/Footer/Sitemap.d.ts +1 -1
  10. package/dist/components/Footer/Sitemap.js +2 -2
  11. package/dist/components/Footer/Sitemap.js.map +1 -1
  12. package/dist/components/Header/Header.js +13 -9
  13. package/dist/components/Header/Header.js.map +1 -1
  14. package/dist/components/Header/HeaderContent.d.ts +8 -1
  15. package/dist/components/Header/HeaderSecondaryMenu.d.ts +2 -1
  16. package/dist/components/Header/HeaderSecondaryMenu.js +14 -2
  17. package/dist/components/Header/HeaderSecondaryMenu.js.map +1 -1
  18. package/dist/components/Header/HeaderSecondaryMenuButton.js +1 -1
  19. package/dist/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  20. package/dist/components/Headline/HeadlineContent.d.ts +2 -9
  21. package/dist/components/MobileBlocks.d.ts +1 -0
  22. package/dist/components/MobileBlocks.js +2 -0
  23. package/dist/components/MobileBlocks.js.map +1 -1
  24. package/dist/components/Navigation/Navigation.d.ts +5 -0
  25. package/dist/components/Navigation/Navigation.js +16 -0
  26. package/dist/components/Navigation/Navigation.js.map +1 -0
  27. package/dist/components/Navigation/NavigationContent.d.ts +10 -0
  28. package/dist/components/Navigation/NavigationContent.js +2 -0
  29. package/dist/components/Navigation/NavigationContent.js.map +1 -0
  30. package/dist/components/Navigation/NavigationItem.d.ts +4 -0
  31. package/dist/components/Navigation/NavigationItem.js +6 -0
  32. package/dist/components/Navigation/NavigationItem.js.map +1 -0
  33. package/dist/components/StepsBlock/StepsBlock.d.ts +1 -1
  34. package/dist/components/StepsBlock/StepsBlock.js +3 -3
  35. package/dist/components/StepsBlock/StepsBlock.js.map +1 -1
  36. package/dist/components/StepsBlock/StepsBlockContent.d.ts +5 -2
  37. package/dist/hooks/useLink.js +2 -1
  38. package/dist/hooks/useLink.js.map +1 -1
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/model/BgColorVersion.d.ts +8 -0
  42. package/dist/model/BgColorVersion.js +2 -0
  43. package/dist/model/BgColorVersion.js.map +1 -0
  44. package/dist/services/sitemap/SitemapProps.d.ts +13 -0
  45. package/dist/services/sitemap/SitemapProps.js +2 -0
  46. package/dist/services/sitemap/SitemapProps.js.map +1 -0
  47. package/dist/services/sitemap/findActiveSubItem.d.ts +3 -0
  48. package/dist/services/sitemap/findActiveSubItem.js +13 -0
  49. package/dist/services/sitemap/findActiveSubItem.js.map +1 -0
  50. package/dist/services/sitemap/isHrefActive.d.ts +4 -0
  51. package/dist/services/sitemap/isHrefActive.js +9 -0
  52. package/dist/services/sitemap/isHrefActive.js.map +1 -0
  53. package/dist/services/sitemap/isSubItemActive.d.ts +3 -0
  54. package/dist/services/sitemap/isSubItemActive.js +6 -0
  55. package/dist/services/sitemap/isSubItemActive.js.map +1 -0
  56. package/dist/services/sitemap/isTopItemActive.d.ts +3 -0
  57. package/dist/services/sitemap/isTopItemActive.js +7 -0
  58. package/dist/services/sitemap/isTopItemActive.js.map +1 -0
  59. package/dist/services/sitemap/mergeTopItems.d.ts +2 -0
  60. package/dist/{mergeTopItems.js → services/sitemap/mergeTopItems.js} +1 -3
  61. package/dist/services/sitemap/mergeTopItems.js.map +1 -0
  62. package/dist/services/sitemap/useSitemap.d.ts +3 -0
  63. package/dist/{hooks → services/sitemap}/useSitemap.js +1 -1
  64. package/dist/services/sitemap/useSitemap.js.map +1 -0
  65. package/dist/ui-kit/HeaderItem/HeaderItem.js +16 -4
  66. package/dist/ui-kit/HeaderItem/HeaderItem.js.map +1 -1
  67. package/dist/ui-kit/Icon/IconProps.d.ts +83 -45
  68. package/dist/ui-kit/Icon/IconProps.js +62 -43
  69. package/dist/ui-kit/Icon/IconProps.js.map +1 -1
  70. package/dist/ui-kit/Logo/Logo.d.ts +1 -0
  71. package/dist/ui-kit/Logo/Logo.js +10 -2
  72. package/dist/ui-kit/Logo/Logo.js.map +1 -1
  73. package/dist/ui-kit/SearchBar.js +2 -3
  74. package/dist/ui-kit/SearchBar.js.map +1 -1
  75. package/dist/ui-kit/TopItem/TopItem.d.ts +2 -0
  76. package/dist/ui-kit/TopItem/TopItem.js +19 -7
  77. package/dist/ui-kit/TopItem/TopItem.js.map +1 -1
  78. package/dist/utils/adjustHref.d.ts +4 -0
  79. package/dist/utils/adjustHref.js +21 -0
  80. package/dist/utils/adjustHref.js.map +1 -0
  81. package/dist/utils/maxBy.d.ts +2 -0
  82. package/dist/utils/maxBy.js +7 -0
  83. package/dist/utils/maxBy.js.map +1 -0
  84. package/dist/utils/url.d.ts +0 -13
  85. package/dist/utils/url.js +2 -26
  86. package/dist/utils/url.js.map +1 -1
  87. package/dist/utils/withoutMobilePath.d.ts +2 -0
  88. package/dist/utils/withoutMobilePath.js +6 -0
  89. package/dist/utils/withoutMobilePath.js.map +1 -0
  90. package/lib/common.css +1 -1
  91. package/lib/components/BlockContent.d.ts +3 -2
  92. package/lib/components/Blocks.d.ts +1 -0
  93. package/lib/components/Blocks.js +2 -0
  94. package/lib/components/Blocks.js.map +1 -1
  95. package/lib/components/Footer/FooterContent.d.ts +1 -1
  96. package/lib/components/Footer/Sitemap.d.ts +1 -1
  97. package/lib/components/Footer/Sitemap.js +2 -2
  98. package/lib/components/Footer/Sitemap.js.map +1 -1
  99. package/lib/components/Header/Header.fixture.d.ts +4 -1
  100. package/lib/components/Header/Header.js +13 -9
  101. package/lib/components/Header/Header.js.map +1 -1
  102. package/lib/components/Header/HeaderContent.d.ts +8 -1
  103. package/lib/components/Header/HeaderSecondaryMenu.d.ts +2 -1
  104. package/lib/components/Header/HeaderSecondaryMenu.js +14 -2
  105. package/lib/components/Header/HeaderSecondaryMenu.js.map +1 -1
  106. package/lib/components/Header/HeaderSecondaryMenuButton.js +1 -1
  107. package/lib/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  108. package/lib/components/Headline/HeadlineContent.d.ts +2 -9
  109. package/lib/components/MobileBlocks.d.ts +1 -0
  110. package/lib/components/MobileBlocks.js +2 -0
  111. package/lib/components/MobileBlocks.js.map +1 -1
  112. package/lib/components/Navigation/Navigation.d.ts +5 -0
  113. package/lib/components/Navigation/Navigation.fixture.d.ts +2 -0
  114. package/lib/components/Navigation/Navigation.js +14 -0
  115. package/lib/components/Navigation/Navigation.js.map +1 -0
  116. package/lib/components/Navigation/NavigationContent.d.ts +10 -0
  117. package/lib/components/Navigation/NavigationContent.js +2 -0
  118. package/lib/components/Navigation/NavigationContent.js.map +1 -0
  119. package/lib/components/Navigation/NavigationItem.d.ts +4 -0
  120. package/lib/components/Navigation/NavigationItem.js +4 -0
  121. package/lib/components/Navigation/NavigationItem.js.map +1 -0
  122. package/lib/components/StepsBlock/StepsBlock.d.ts +1 -1
  123. package/lib/components/StepsBlock/StepsBlock.js +3 -3
  124. package/lib/components/StepsBlock/StepsBlock.js.map +1 -1
  125. package/lib/components/StepsBlock/StepsBlockContent.d.ts +5 -2
  126. package/lib/hooks/useLink.js +2 -1
  127. package/lib/hooks/useLink.js.map +1 -1
  128. package/lib/index.d.ts +1 -1
  129. package/lib/index.js.map +1 -1
  130. package/lib/model/BgColorVersion.d.ts +8 -0
  131. package/lib/model/BgColorVersion.js +2 -0
  132. package/lib/model/BgColorVersion.js.map +1 -0
  133. package/lib/services/sitemap/SitemapProps.d.ts +13 -0
  134. package/lib/services/sitemap/SitemapProps.js +2 -0
  135. package/lib/services/sitemap/SitemapProps.js.map +1 -0
  136. package/lib/services/sitemap/findActiveSubItem.d.ts +3 -0
  137. package/lib/services/sitemap/findActiveSubItem.js +10 -0
  138. package/lib/services/sitemap/findActiveSubItem.js.map +1 -0
  139. package/lib/services/sitemap/isHrefActive.d.ts +4 -0
  140. package/lib/services/sitemap/isHrefActive.js +6 -0
  141. package/lib/services/sitemap/isHrefActive.js.map +1 -0
  142. package/lib/services/sitemap/isSubItemActive.d.ts +3 -0
  143. package/lib/services/sitemap/isSubItemActive.js +3 -0
  144. package/lib/services/sitemap/isSubItemActive.js.map +1 -0
  145. package/lib/services/sitemap/isTopItemActive.d.ts +3 -0
  146. package/lib/services/sitemap/isTopItemActive.js +4 -0
  147. package/lib/services/sitemap/isTopItemActive.js.map +1 -0
  148. package/lib/services/sitemap/mergeTopItems.d.ts +2 -0
  149. package/lib/{mergeTopItems.js → services/sitemap/mergeTopItems.js} +1 -3
  150. package/lib/services/sitemap/mergeTopItems.js.map +1 -0
  151. package/lib/services/sitemap/useSitemap.d.ts +3 -0
  152. package/lib/{hooks → services/sitemap}/useSitemap.js +1 -1
  153. package/lib/services/sitemap/useSitemap.js.map +1 -0
  154. package/lib/ui-kit/HeaderItem/HeaderItem.js +16 -4
  155. package/lib/ui-kit/HeaderItem/HeaderItem.js.map +1 -1
  156. package/lib/ui-kit/Icon/IconProps.d.ts +83 -45
  157. package/lib/ui-kit/Icon/IconProps.js +62 -43
  158. package/lib/ui-kit/Icon/IconProps.js.map +1 -1
  159. package/lib/ui-kit/Logo/Logo.d.ts +1 -0
  160. package/lib/ui-kit/Logo/Logo.js +10 -2
  161. package/lib/ui-kit/Logo/Logo.js.map +1 -1
  162. package/lib/ui-kit/SearchBar.js +2 -3
  163. package/lib/ui-kit/SearchBar.js.map +1 -1
  164. package/lib/ui-kit/TopItem/TopItem.d.ts +2 -0
  165. package/lib/ui-kit/TopItem/TopItem.js +19 -7
  166. package/lib/ui-kit/TopItem/TopItem.js.map +1 -1
  167. package/lib/utils/adjustHref.d.ts +4 -0
  168. package/lib/utils/adjustHref.js +18 -0
  169. package/lib/utils/adjustHref.js.map +1 -0
  170. package/lib/utils/maxBy.d.ts +2 -0
  171. package/lib/utils/maxBy.js +3 -0
  172. package/lib/utils/maxBy.js.map +1 -0
  173. package/lib/utils/url.d.ts +0 -13
  174. package/lib/utils/url.js +1 -21
  175. package/lib/utils/url.js.map +1 -1
  176. package/lib/utils/withoutMobilePath.d.ts +2 -0
  177. package/lib/utils/withoutMobilePath.js +3 -0
  178. package/lib/utils/withoutMobilePath.js.map +1 -0
  179. package/package.json +4 -2
  180. package/src/components/BlockContent.ts +4 -2
  181. package/src/components/Blocks.ts +2 -0
  182. package/src/components/ContentPage/ContentPage.page.json +28 -15
  183. package/src/components/Footer/FooterContent.ts +1 -1
  184. package/src/components/Footer/Sitemap.tsx +4 -3
  185. package/src/components/Header/Header.fixture.tsx +4 -18
  186. package/src/components/Header/Header.tsx +56 -45
  187. package/src/components/Header/HeaderContent.ts +8 -1
  188. package/src/components/Header/HeaderSecondaryMenu.tsx +25 -12
  189. package/src/components/Header/HeaderSecondaryMenuButton.tsx +2 -4
  190. package/src/components/Headline/HeadlineContent.ts +2 -10
  191. package/src/components/MobileBlocks.ts +2 -0
  192. package/src/components/Navigation/Navigation.fixture.tsx +28 -0
  193. package/src/components/Navigation/Navigation.tsx +39 -0
  194. package/src/components/Navigation/NavigationContent.ts +11 -0
  195. package/src/components/Navigation/NavigationItem.tsx +17 -0
  196. package/src/components/PictureText/PictureText.example.json +2 -2
  197. package/src/components/PictureText/PictureText.fixture.tsx +2 -2
  198. package/src/components/StepsBlock/StepsBlock.example.json +3 -1
  199. package/src/components/StepsBlock/StepsBlock.tsx +21 -16
  200. package/src/components/StepsBlock/StepsBlockContent.ts +5 -2
  201. package/src/hooks/useLink.ts +2 -1
  202. package/src/icons/Calendar2Icon.svg +1 -0
  203. package/src/icons/CalendarCircleIcon.svg +1 -0
  204. package/src/icons/CalendarTickIcon.svg +1 -0
  205. package/src/icons/CardIcon.svg +1 -0
  206. package/src/icons/CardPosIcon.svg +1 -0
  207. package/src/icons/CardTickIcon.svg +1 -0
  208. package/src/icons/CardWithGemIcon.svg +1 -0
  209. package/src/icons/ChartSquareIcon.svg +1 -0
  210. package/src/icons/CreditCardsIcon.svg +1 -0
  211. package/src/icons/DischountStarIcon.svg +1 -0
  212. package/src/icons/{DiscountShape.svg → DiscountShapeIcon.svg} +0 -0
  213. package/src/icons/{DocumentText.svg → DocumentTextIcon.svg} +0 -0
  214. package/src/icons/EarthIcon.svg +1 -0
  215. package/src/icons/EmptyWalletChangeIcon.svg +1 -0
  216. package/src/icons/GlobalIcon.svg +1 -0
  217. package/src/icons/GridIcon.svg +1 -1
  218. package/src/icons/GridIconWhite.svg +4 -0
  219. package/src/icons/InterestGrowthIcon.svg +1 -0
  220. package/src/icons/InterestIcon.svg +1 -0
  221. package/src/icons/JCBIcon.svg +1 -0
  222. package/src/icons/MasterCardIcon.svg +1 -0
  223. package/src/icons/MinusIcon.svg +1 -0
  224. package/src/icons/MirIcon.svg +1 -0
  225. package/src/icons/MoneyIcon.svg +1 -0
  226. package/src/icons/MoneyInsuranceIcon.svg +1 -0
  227. package/src/icons/MonitorMobileIcon.svg +1 -0
  228. package/src/icons/OfficeIcon.svg +1 -0
  229. package/src/icons/PercentageRoundIcon.svg +1 -0
  230. package/src/icons/PersonalCardIcon.svg +1 -0
  231. package/src/icons/PlusIcon.svg +1 -0
  232. package/src/icons/Profile2UserIcon.svg +1 -0
  233. package/src/icons/RoundRubleIcon.svg +1 -0
  234. package/src/icons/SafeIcon.svg +1 -0
  235. package/src/icons/ShieldTickIcon.svg +1 -0
  236. package/src/icons/SmallClockIcon.svg +1 -0
  237. package/src/icons/UnionPayIcon.svg +1 -0
  238. package/src/icons/UserTickIcon.svg +1 -0
  239. package/src/icons/VisaIcon.svg +1 -0
  240. package/src/icons/WalletAdd2Icon.svg +1 -0
  241. package/src/icons/WalletAddIcon.svg +1 -0
  242. package/src/icons/WalletWithMoneyIcon.svg +1 -0
  243. package/src/index.ts +1 -1
  244. package/src/model/BgColorVersion.ts +8 -0
  245. package/src/services/sitemap/SitemapProps.ts +15 -0
  246. package/src/services/sitemap/findActiveSubItem.ts +14 -0
  247. package/src/services/sitemap/isHrefActive.ts +13 -0
  248. package/src/services/sitemap/isSubItemActive.ts +8 -0
  249. package/src/services/sitemap/isTopItemActive.ts +9 -0
  250. package/src/{mergeTopItems.spec.ts → services/sitemap/mergeTopItems.spec.ts} +0 -0
  251. package/src/{mergeTopItems.ts → services/sitemap/mergeTopItems.ts} +3 -4
  252. package/src/{hooks → services/sitemap}/useSitemap.ts +3 -3
  253. package/src/ui-kit/HeaderItem/HeaderItem.tsx +32 -18
  254. package/src/ui-kit/Icon/IconProps.ts +44 -6
  255. package/src/ui-kit/Logo/Logo.tsx +30 -18
  256. package/src/ui-kit/SearchBar.tsx +13 -18
  257. package/src/ui-kit/TopItem/TopItem.tsx +46 -19
  258. package/src/utils/adjustHref.spec.ts +25 -0
  259. package/src/utils/adjustHref.ts +24 -0
  260. package/src/utils/maxBy.spec.ts +11 -0
  261. package/src/utils/maxBy.ts +7 -0
  262. package/src/utils/url.spec.ts +1 -37
  263. package/src/utils/url.ts +2 -39
  264. package/src/utils/withoutMobilePath.ts +3 -0
  265. package/dist/components/Header/isSubItemActive.d.ts +0 -3
  266. package/dist/components/Header/isSubItemActive.js +0 -8
  267. package/dist/components/Header/isSubItemActive.js.map +0 -1
  268. package/dist/components/Header/isTopItemActive.d.ts +0 -3
  269. package/dist/components/Header/isTopItemActive.js +0 -8
  270. package/dist/components/Header/isTopItemActive.js.map +0 -1
  271. package/dist/hooks/useSitemap.d.ts +0 -3
  272. package/dist/hooks/useSitemap.js.map +0 -1
  273. package/dist/mergeTopItems.d.ts +0 -2
  274. package/dist/mergeTopItems.js.map +0 -1
  275. package/lib/components/Header/isSubItemActive.d.ts +0 -3
  276. package/lib/components/Header/isSubItemActive.js +0 -5
  277. package/lib/components/Header/isSubItemActive.js.map +0 -1
  278. package/lib/components/Header/isTopItemActive.d.ts +0 -3
  279. package/lib/components/Header/isTopItemActive.js +0 -5
  280. package/lib/components/Header/isTopItemActive.js.map +0 -1
  281. package/lib/hooks/useSitemap.d.ts +0 -3
  282. package/lib/hooks/useSitemap.js.map +0 -1
  283. package/lib/mergeTopItems.d.ts +0 -2
  284. package/lib/mergeTopItems.js.map +0 -1
  285. package/src/components/Header/isSubItemActive.ts +0 -7
  286. package/src/components/Header/isTopItemActive.ts +0 -8
@@ -18,25 +18,38 @@
18
18
  "type": "Header",
19
19
  "style": ["-mx-20", "mb-5", "shadow-[0_8px_32px_0px_#00000014]"],
20
20
  "content": {
21
- "defaultLocation": "Москва",
22
- "topItems": [
23
- {
24
- "href": "https://rshb.ru/",
25
- "text": "Бизнес клиентам",
26
- "target": "_blank"
27
- },
28
- {
29
- "href": "https://rshb.ru/",
30
- "text": "Частным клиентам",
31
- "target": "_blank"
32
- }
33
- ]
21
+ "defaultLocation": "Москва"
34
22
  }
35
23
  }
36
24
  ]
37
25
  }
38
26
  },
39
27
  "blocks": [
28
+ {
29
+ "type": "Navigation",
30
+ "style": ["col-span-12"],
31
+ "content": {
32
+ "title": "Потребительский кредит наличными",
33
+ "buttons": [
34
+ {
35
+ "href": "/credits",
36
+ "text": "Оформить"
37
+ },
38
+ {
39
+ "href": "/tariffs",
40
+ "text": "Тарифы"
41
+ },
42
+ {
43
+ "href": "/harvest",
44
+ "text": "Урожай"
45
+ },
46
+ {
47
+ "href": "/faq",
48
+ "text": "Частые вопросы"
49
+ }
50
+ ]
51
+ }
52
+ },
40
53
  {
41
54
  "type": "ProductGallery",
42
55
  "style": ["col-span-12"],
@@ -1838,12 +1851,12 @@
1838
1851
  {
1839
1852
  "label": "Кредит по одному документу",
1840
1853
  "description": "До 300 тыс ₽ по упрощённой процедуре получения кредита",
1841
- "icon": "DocumentText"
1854
+ "icon": "DocumentTextIcon"
1842
1855
  },
1843
1856
  {
1844
1857
  "label": "Кредит на общих условиях",
1845
1858
  "description": "До 5 млн ₽ на общих условиях получения кредита",
1846
- "icon": "DiscountShape"
1859
+ "icon": "DiscountShapeIcon"
1847
1860
  }
1848
1861
  ],
1849
1862
  "image": {
@@ -1,5 +1,5 @@
1
1
  import type { LinkProps } from '../../model/LinkProps';
2
- import type { SitemapProps } from '../../model/SitemapProps';
2
+ import type { SitemapProps } from '../../services/sitemap/SitemapProps';
3
3
 
4
4
  /**
5
5
  * @title Тип контакта
@@ -1,10 +1,11 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
2
  import { useLink } from '../../hooks/useLink';
3
- import { useSitemap } from '../../hooks/useSitemap';
4
- import { mergeTopItems } from '../../mergeTopItems';
5
3
  import type { LinkProps } from '../../model/LinkProps';
6
- import type { TopMenuItem } from '../../model/SitemapProps';
4
+ import { mergeTopItems } from '../../services/sitemap/mergeTopItems';
5
+ import type { TopMenuItem } from '../../services/sitemap/SitemapProps';
6
+ import { useSitemap } from '../../services/sitemap/useSitemap';
7
7
  import type { UniBlockProps } from '../../types';
8
+
8
9
  export interface SitemapProps extends UniBlockProps {
9
10
  items?: TopMenuItem[];
10
11
  }
@@ -1,21 +1,7 @@
1
1
  import { context } from '../../setup-fixture';
2
2
  import { Header } from './Header';
3
3
 
4
- export default (
5
- <Header
6
- context={context}
7
- defaultLocation="Москва"
8
- topItems={[
9
- {
10
- href: 'https://rshb.ru/',
11
- text: 'Бизнес клиентам',
12
- target: '_blank',
13
- },
14
- {
15
- href: 'https://rshb.ru/',
16
- text: 'Частным клиентам',
17
- target: '_blank',
18
- },
19
- ]}
20
- />
21
- );
4
+ export default {
5
+ default: <Header context={context} defaultLocation="Москва" />,
6
+ transparent: <Header context={context} defaultLocation="Москва" bgColor="transparent" />,
7
+ };
@@ -1,61 +1,72 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
2
  import { useLink } from '../../hooks/useLink';
3
- import { useSitemap } from '../../hooks/useSitemap';
4
- import { mergeTopItems } from '../../mergeTopItems';
3
+ import type { BgColorVersion } from '../../model/BgColorVersion';
4
+ import { findActiveSubItem } from '../../services/sitemap/findActiveSubItem';
5
+ import { isTopItemActive } from '../../services/sitemap/isTopItemActive';
6
+ import { mergeTopItems } from '../../services/sitemap/mergeTopItems';
7
+ import { useSitemap } from '../../services/sitemap/useSitemap';
5
8
  import type { UniBlockProps } from '../../types';
6
9
  import { HeaderItem } from '../../ui-kit/HeaderItem/HeaderItem';
7
10
  import { Logo } from '../../ui-kit/Logo/Logo';
8
11
  import { TopItem } from '../../ui-kit/TopItem/TopItem';
9
12
  import type { HeaderContent } from './HeaderContent';
10
13
  import { HeaderSecondaryMenu } from './HeaderSecondaryMenu';
11
- import { isSubItemActive } from './isSubItemActive';
12
- import { isTopItemActive } from './isTopItemActive';
14
+
15
+ const BORDER_COLORS: Record<BgColorVersion, string> = {
16
+ 'bg-white': 'bg-main-divider',
17
+ transparent: 'bg-main-divider opacity-30',
18
+ };
13
19
 
14
20
  export interface HeaderProps extends HeaderContent, UniBlockProps {}
15
21
 
16
- export const Header = JSX<HeaderProps>(({ className, defaultLocation, context, topItems }) => {
17
- const router = context.useRouter();
18
- const sitemap = useSitemap(context.useAsyncData);
19
- const { handlerDecorator } = context;
22
+ export const Header = JSX<HeaderProps>(
23
+ ({ className, defaultLocation, bgColor = 'bg-white', context, topItems }) => {
24
+ const router = context.useRouter();
25
+ const sitemap = useSitemap(context.useAsyncData);
26
+ const { handlerDecorator } = context;
20
27
 
21
- const mergedItems = mergeTopItems(sitemap.topItems, topItems);
22
- const activeTopItem = mergedItems.find(isTopItemActive(router));
23
- const subItems = activeTopItem?.items;
24
- const activeSubItem = subItems?.find(isSubItemActive(router));
28
+ const mergedItems = mergeTopItems(sitemap.topItems, topItems);
29
+ const activeTopItem = mergedItems.find(isTopItemActive(router));
30
+ const subItems = activeTopItem?.items;
31
+ const activeSubItem = findActiveSubItem(router)(subItems);
25
32
 
26
- const topMenu = mergedItems.map((_, i) => (
27
- <TopItem
28
- key={String(i)}
29
- active={_ === activeTopItem}
30
- {...useLink({ router, handlerDecorator }, _)}
31
- ariaLabel={_.text}
32
- />
33
- ));
33
+ const topMenu = mergedItems.map((_, i) => (
34
+ <TopItem
35
+ key={String(i)}
36
+ active={_ === activeTopItem}
37
+ {...useLink({ router, handlerDecorator }, _)}
38
+ ariaLabel={_.text}
39
+ bgColor={bgColor}
40
+ />
41
+ ));
34
42
 
35
- const subMenu = subItems?.map((_) => (
36
- <HeaderItem
37
- key={_.href}
38
- className="mr-8"
39
- active={_ === activeSubItem}
40
- {...useLink({ router, handlerDecorator }, _)}
41
- />
42
- ));
43
+ const subMenu = subItems?.map((_) => (
44
+ <HeaderItem
45
+ key={_.href}
46
+ className="mr-8"
47
+ active={_ === activeSubItem}
48
+ {...useLink({ router, handlerDecorator }, _)}
49
+ bgColor={bgColor}
50
+ />
51
+ ));
43
52
 
44
- return (
45
- <header className={`pt-5 pb-8 px-20 bg-white ${className || ''}`}>
46
- <div className="container">
47
- <div className="flex items-center">
48
- <Logo className="mr-8" />
49
- {topMenu}
50
- <HeaderSecondaryMenu
51
- context={context}
52
- className="ml-auto"
53
- defaultLocation={defaultLocation}
54
- />
53
+ return (
54
+ <header className={`pt-5 pb-8 px-20 ${bgColor} ${className || ''}`}>
55
+ <div className="container">
56
+ <div className="flex items-center">
57
+ <Logo className="mr-8" bgColor={bgColor} />
58
+ {topMenu}
59
+ <HeaderSecondaryMenu
60
+ context={context}
61
+ className="ml-auto"
62
+ defaultLocation={defaultLocation}
63
+ bgColor={bgColor}
64
+ />
65
+ </div>
66
+ <div className={`mt-5 h-[1px] ${BORDER_COLORS[bgColor]}`} />
67
+ <nav className="mt-5">{subMenu}</nav>
55
68
  </div>
56
- <div className="mt-5 h-[1px] bg-main-divider" />
57
- <nav className="mt-5">{subMenu}</nav>
58
- </div>
59
- </header>
60
- );
61
- });
69
+ </header>
70
+ );
71
+ },
72
+ );
@@ -1,4 +1,5 @@
1
- import type { SitemapProps } from '../../model/SitemapProps';
1
+ import { BgColorVersion } from '../../model/BgColorVersion';
2
+ import type { SitemapProps } from '../../services/sitemap/SitemapProps';
2
3
 
3
4
  /**
4
5
  * @title Шапка
@@ -10,4 +11,10 @@ export interface HeaderContent extends SitemapProps {
10
11
  * @default Москва
11
12
  */
12
13
  defaultLocation?: string;
14
+ /**
15
+ * @title Фон элемента
16
+ * @hidden
17
+ * @default white
18
+ */
19
+ bgColor?: BgColorVersion;
13
20
  }
@@ -1,20 +1,34 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
+ import type { BgColorVersion } from '../../model/BgColorVersion';
2
3
  import type { UniBlockProps } from '../../types';
3
4
  import { Icon } from '../../ui-kit/Icon/Icon';
5
+ import type { IconName } from '../../ui-kit/Icon/IconProps';
4
6
  import { TopItem } from '../../ui-kit/TopItem/TopItem';
5
7
  import { HeaderSecondaryMenuButton } from './HeaderSecondaryMenuButton';
6
8
 
7
9
  interface HeaderSecondaryMenuContent {
8
10
  defaultLocation?: string;
9
- className?: string;
11
+ bgColor?: BgColorVersion;
10
12
  }
11
13
 
12
14
  export interface HeaderSecondaryMenuProps extends HeaderSecondaryMenuContent, UniBlockProps {}
13
15
 
16
+ const COLORS_MAP: Record<BgColorVersion, string> = {
17
+ 'bg-white': 'text-primary-text hover:text-primary-main',
18
+ transparent: 'text-white',
19
+ };
20
+ const DOP_LINKS_COLORS_MAP: Record<BgColorVersion, string> = {
21
+ 'bg-white': 'text-secondary-light hover:text-secondary-hover',
22
+ transparent: 'text-white',
23
+ };
24
+ const DOP_LINKS_ICON_NAME_MAP: Record<BgColorVersion, IconName> = {
25
+ 'bg-white': 'GridIcon',
26
+ transparent: 'GridIconWhite',
27
+ };
28
+
14
29
  export const HeaderSecondaryMenu = JSX<HeaderSecondaryMenuProps>(
15
- ({ context, className, defaultLocation = '' }) => {
30
+ ({ context, className, defaultLocation = '', bgColor = 'bg-white' }) => {
16
31
  const [city, getCity] = context.useGeolocation(defaultLocation);
17
-
18
32
  return (
19
33
  <div className={`flex items-center ${className || ''}`}>
20
34
  <TopItem
@@ -24,6 +38,7 @@ export const HeaderSecondaryMenu = JSX<HeaderSecondaryMenuProps>(
24
38
  text={city}
25
39
  ariaLabel="Местоположение"
26
40
  onClick={getCity}
41
+ bgColor={bgColor}
27
42
  />
28
43
  <TopItem
29
44
  className="mr-7"
@@ -31,24 +46,22 @@ export const HeaderSecondaryMenu = JSX<HeaderSecondaryMenuProps>(
31
46
  href="#"
32
47
  text="Офисы и банкоматы"
33
48
  ariaLabel="Список всех доступных офисов и банкоматов"
49
+ bgColor={bgColor}
34
50
  />
35
51
  <HeaderSecondaryMenuButton
36
- className="mr-5 text-primary-text hover:text-primary-main"
52
+ className={`mr-5 ${COLORS_MAP[bgColor]}`}
37
53
  ariaLabel="Поиск по сайту"
38
54
  >
39
- <Icon name="LoupeIcon" aria-hidden="true" className="h-full" asSVG />
55
+ <Icon name="LoupeIcon" className="h-full" asSVG />
40
56
  </HeaderSecondaryMenuButton>
41
- <HeaderSecondaryMenuButton
42
- className="mr-5 text-primary-text hover:text-primary-main"
43
- ariaLabel="Профиль"
44
- >
45
- <Icon name="ProfileIcon" aria-hidden="true" className="h-full" asSVG />
57
+ <HeaderSecondaryMenuButton className={`mr-5 ${COLORS_MAP[bgColor]}`} ariaLabel="Профиль">
58
+ <Icon name="ProfileIcon" className="h-full" asSVG />
46
59
  </HeaderSecondaryMenuButton>
47
60
  <HeaderSecondaryMenuButton
48
- className="min-w-[32px] min-h-[32px] fill-secondary-light hover:fill-secondary-hover"
61
+ className={`${DOP_LINKS_COLORS_MAP[bgColor]} min-w-[32px] min-h-[32px]`}
49
62
  ariaLabel="Дополнительные ссылки"
50
63
  >
51
- <Icon name="GridIcon" aria-hidden="true" className="h-full" asSVG />
64
+ <Icon name={DOP_LINKS_ICON_NAME_MAP[bgColor]} className="h-full" asSVG />
52
65
  </HeaderSecondaryMenuButton>
53
66
  </div>
54
67
  );
@@ -6,12 +6,10 @@ interface HeaderSecondaryMenuButtonProps {
6
6
  }
7
7
 
8
8
  export const HeaderSecondaryMenuButton = JSX<HeaderSecondaryMenuButtonProps>(
9
- ({ className, children, ariaLabel }) => (
9
+ ({ className = '', children, ariaLabel }) => (
10
10
  <button
11
11
  type="button"
12
- className={`border-0 p-0 w-[24px] h-[24px] flex items-center bg-inherit cursor-pointer ${
13
- className || ''
14
- }`}
12
+ className={`border-0 p-0 w-[24px] h-[24px] flex items-center bg-inherit cursor-pointer ${className}`}
15
13
  disabled={true}
16
14
  aria-label={ariaLabel}
17
15
  >
@@ -1,18 +1,10 @@
1
+ import type { BgColorVersion } from '../../model/BgColorVersion';
1
2
  import type { BaseTileCommonProps } from '../BaseTile/BaseTileProps';
2
3
 
3
- /**
4
- * @title Цвет фона
5
- * @enumNames [
6
- * "Прозрачный",
7
- * "Белый"
8
- * ]
9
- */
10
- export type HeadlineBgColor = 'transparent' | 'bg-white';
11
-
12
4
  /**
13
5
  * @title Заголовок
14
6
  */
15
7
  export interface HeadlineContent
16
8
  extends Pick<BaseTileCommonProps, 'title' | 'titleSize' | 'description' | 'align'> {
17
- bgColor?: HeadlineBgColor;
9
+ bgColor?: BgColorVersion;
18
10
  }
@@ -4,6 +4,7 @@ import { Gallery } from './Gallery/Gallery.mobile';
4
4
  import { Header } from './Header/Header';
5
5
  import { Headline } from './Headline/Headline';
6
6
  import { MobileAppTile } from './MobileAppTile/MobileAppTile';
7
+ import { Navigation } from './Navigation/Navigation';
7
8
  import { PictureText } from './PictureText/PictureText';
8
9
  import { Placeholder } from './Placeholder/Placeholder';
9
10
  import { ProductBlock } from './ProductBlock/ProductBlock.mobile';
@@ -24,4 +25,5 @@ export const MobileBlocks = {
24
25
  ProductTile,
25
26
  TextBlock,
26
27
  Tile,
28
+ Navigation,
27
29
  };
@@ -0,0 +1,28 @@
1
+ import { context } from '../../setup-fixture';
2
+
3
+ import { Navigation } from './Navigation';
4
+
5
+ export default () => (
6
+ <Navigation
7
+ title="Потребительский кредит наличными"
8
+ buttons={[
9
+ {
10
+ href: '/credits',
11
+ text: 'Оформить',
12
+ },
13
+ {
14
+ href: '/tariffs',
15
+ text: 'Тарифы',
16
+ },
17
+ {
18
+ href: '/harvest',
19
+ text: 'Урожай',
20
+ },
21
+ {
22
+ href: '/faq',
23
+ text: 'Частые вопросы',
24
+ },
25
+ ]}
26
+ context={context}
27
+ />
28
+ );
@@ -0,0 +1,39 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+ import { useLink } from '../../hooks/useLink';
3
+ import { findActiveSubItem } from '../../services/sitemap/findActiveSubItem';
4
+ import type { UniBlockProps } from '../../types';
5
+ import { NavigationContent } from './NavigationContent';
6
+ import { NavigationItem } from './NavigationItem';
7
+
8
+ export interface NavigationProps extends NavigationContent, UniBlockProps {}
9
+
10
+ export const Navigation = JSX<NavigationProps>(({ className, context, title, buttons }) => {
11
+ const router = context.useRouter();
12
+ const { handlerDecorator } = context;
13
+
14
+ const activeButton = findActiveSubItem(router)(buttons);
15
+
16
+ return (
17
+ <section
18
+ className={`font-sans text-primary-text rounded-[40px] flex items-center justify-between ${
19
+ className || ''
20
+ }`}
21
+ >
22
+ <h2 className="font-medium text-xl m-0">{title}</h2>
23
+ {buttons?.length ? (
24
+ <div className="flex rounded-md overflow-hidden bg-white">
25
+ {buttons
26
+ .filter(({ text }) => text)
27
+ .map((button, i) => (
28
+ <NavigationItem
29
+ key={String(i)}
30
+ className="first:rounded-tl-md first:rounded-bl-md last:rounded-tr-md last:rounded-br-md"
31
+ isActive={button === activeButton}
32
+ {...useLink({ router, handlerDecorator }, button)}
33
+ />
34
+ ))}
35
+ </div>
36
+ ) : null}
37
+ </section>
38
+ );
39
+ });
@@ -0,0 +1,11 @@
1
+ import type { ButtonProps } from '../../ui-kit/Button/ButtonProps';
2
+
3
+ /**
4
+ * @title Навигация
5
+ */
6
+ export interface NavigationContent {
7
+ /** @title Заголовок */
8
+ title?: string;
9
+ /** @title Список ссылок */
10
+ buttons?: ButtonProps[];
11
+ }
@@ -0,0 +1,17 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+ import type { ButtonProps } from '../../ui-kit/Button/ButtonProps';
3
+
4
+ export const NavigationItem = JSX<ButtonProps & { isActive: boolean }>(
5
+ ({ className, text, onClick, href, target, isActive }) => (
6
+ <a
7
+ className={`bg-inherit no-underline px-4 py-2.5 cursor-pointer rounded text-sm border border-solid hover:text-primary-main ${
8
+ className || ''
9
+ } ${isActive ? 'border-primary-main text-primary-main' : 'border-white text-secondary-text'}`}
10
+ onClick={onClick}
11
+ href={href}
12
+ target={target}
13
+ >
14
+ {text}
15
+ </a>
16
+ ),
17
+ );
@@ -10,11 +10,11 @@
10
10
  "benefits": [
11
11
  {
12
12
  "label": "Преимущество №1",
13
- "icon": "DocumentText"
13
+ "icon": "DocumentTextIcon"
14
14
  },
15
15
  {
16
16
  "label": "Преимущество №2",
17
- "icon": "DiscountShape"
17
+ "icon": "DiscountShapeIcon"
18
18
  }
19
19
  ]
20
20
  }
@@ -20,12 +20,12 @@ export const PICTURE_TEXT: PictureTextContent = {
20
20
  {
21
21
  label: 'Кредит по одному документу',
22
22
  description: 'До 300 тыс ₽ по упрощённой процедуре получения кредита',
23
- icon: 'DocumentText',
23
+ icon: 'DocumentTextIcon',
24
24
  },
25
25
  {
26
26
  label: 'Кредит на общих условиях',
27
27
  description: 'До 5 млн ₽ на общих условиях получения кредита',
28
- icon: 'DiscountShape',
28
+ icon: 'DiscountShapeIcon',
29
29
  },
30
30
  ],
31
31
  image,
@@ -1,8 +1,10 @@
1
1
  {
2
2
  "title": "Шаги",
3
+ "showLines": true,
3
4
  "steps": [
4
5
  {
5
6
  "label": "Шаг №1",
7
+ "description": "Описание шага №1",
6
8
  "icon": "NewDocIcon"
7
9
  },
8
10
  {
@@ -10,7 +12,7 @@
10
12
  "icon": "PassSendIcon"
11
13
  },
12
14
  {
13
- "label": "Шаг №3",
15
+ "description": "Шаг №3 без заголовка",
14
16
  "icon": "ActualBalanceIcon"
15
17
  }
16
18
  ]
@@ -1,28 +1,30 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
- import type { Step, StepsBlockContent } from './StepsBlockContent';
3
2
  import type { UniBlockProps } from '../../types';
4
3
  import { Icon } from '../../ui-kit/Icon/Icon';
5
4
  import { Title } from '../../ui-kit/Title/Title';
6
5
  import { joinList } from '../../utils/joinList';
6
+ import type { Step, StepsBlockContent } from './StepsBlockContent';
7
7
 
8
8
  export interface StepsBlockProps extends StepsBlockContent, UniBlockProps {}
9
9
 
10
- export const StepsBlock = JSX<StepsBlockProps>(({ className, title, steps }) => {
10
+ export const StepsBlock = JSX<StepsBlockProps>(({ className, title, showLines = true, steps }) => {
11
11
  return (
12
12
  <section
13
- className={`font-sans text-primary-text bg-white px-12 py-12 flex flex-col items-center ${
13
+ className={`box-border font-sans text-primary-text bg-white px-20 py-[50px] flex flex-col items-center ${
14
14
  className || ''
15
15
  }`}
16
16
  >
17
17
  <Title className="font-medium m-0 max-w-[47rem] text-center">{title}</Title>
18
18
  {steps?.length ? (
19
- <div>
20
- <div className="flex mt-9 items-center px-[88px]">
21
- {joinList(<div className="h-0.5 w-full bg-secondary-light"></div>)(
22
- steps.map((step, i) => renderStepIcon(step, i)),
23
- )}
19
+ <div className={`box-border py-0.5 mb-0.5 ${title ? 'mt-9' : ''}`}>
20
+ <div className="flex items-center px-[88px]">
21
+ {joinList(
22
+ <div
23
+ className={`h-0.5 w-full bg-secondary-light ${!showLines ? 'opacity-0' : ''}`}
24
+ />,
25
+ )(steps.map((step, i) => renderStepIcon(step, i)))}
24
26
  </div>
25
- <div className="flex mt-9 justify-between gap-x-24">{steps.map(renderStepTitle)}</div>
27
+ <div className="flex justify-between gap-x-[101px]">{steps.map(renderStepTitle)}</div>
26
28
  </div>
27
29
  ) : null}
28
30
  </section>
@@ -43,13 +45,16 @@ const renderStepIcon = (step: Step, i: number) => {
43
45
 
44
46
  const renderStepTitle = (step: Step, i: number) => {
45
47
  return (
46
- <div key={String(i)} className="flex flex-col items-center text-center relative w-[276px]">
47
- <div className="max-w-min">
48
- <h5 className="font-medium text-xl m-0 mt-4 whitespace-nowrap px-3">{step.label}</h5>
49
- {step.description && (
50
- <div className="font-normal text-sm text-secondary-text mt-2">{step.description}</div>
51
- )}
52
- </div>
48
+ <div
49
+ key={String(i)}
50
+ className="flex flex-col items-center text-center relative w-[276px] whitespace-pre-line overflow-hidden"
51
+ >
52
+ {step.label && <div className="font-medium text-xl m-0 mt-4">{step.label}</div>}
53
+ {step.description && (
54
+ <div className={`font-normal text-sm text-secondary-text ${step.label ? 'mt-2' : 'mt-4'}`}>
55
+ {step.description}
56
+ </div>
57
+ )}
53
58
  </div>
54
59
  );
55
60
  };
@@ -5,7 +5,7 @@ import type { IconName } from '../../ui-kit/Icon/IconProps';
5
5
  */
6
6
  export interface Step {
7
7
  /** @title Название */
8
- label: string;
8
+ label?: string;
9
9
  /** @title Описание */
10
10
  description?: string;
11
11
  icon?: IconName;
@@ -17,9 +17,12 @@ export interface Step {
17
17
  export interface StepsBlockContent {
18
18
  /** @title Заголовок */
19
19
  title?: string;
20
+ /** @title Линии */
21
+ showLines?: boolean;
20
22
  /**
21
23
  * @title Шаги
22
- * @maxItems 6
24
+ * @minItems 2
25
+ * @maxItems 3
23
26
  */
24
27
  steps?: Step[];
25
28
  }
@@ -1,6 +1,7 @@
1
1
  import { HandlerDecorator, Router } from '../components/ContentPage/ContentPageContext';
2
2
  import type { LinkProps } from '../model/LinkProps';
3
- import { adjustHref, isURL } from '../utils/url';
3
+ import { adjustHref } from '../utils/adjustHref';
4
+ import { isURL } from '../utils/url';
4
5
 
5
6
  const defaultHandlerDecorator: HandlerDecorator = (handler) => handler;
6
7
 
@@ -0,0 +1 @@
1
+ <svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3.5 9.09h17" stroke="#42AB44" stroke-width="2" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M3 13.01V8.5c0-3 1.5-5 5-5h8c3.5 0 5 2 5 5V17c0 3-1.5 5-5 5H8c-3.5 0-5-2-5-5" stroke="#1C1C1C" stroke-width="2" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M11.995 13.7h.01M8.294 13.7h.01M8.294 16.7h.01" stroke="#42AB44" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M8 2v3M16 2v3" stroke="#42AB44" stroke-width="2" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/></svg>
@@ -0,0 +1 @@
1
+ <svg id="icon" width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.89 5.83v2M14.11 5.83v2M7.53 10.14h8.94M13.5 17.67h-3c-2.5 0-4-1.8-4-4v-3c0-2.2 1.5-4 4-4h3c2.5 0 4 1.8 4 4v3c0 2.2-1.5 4-4 4Z" stroke="#42AB44" stroke-width="2" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M4 6c-1.25 1.67-2 3.75-2 6 0 5.52 4.48 10 10 10s10-4.48 10-10S17.52 2 12 2c-1.43 0-2.8.3-4.03.85" stroke="#1C1C1C" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
@@ -0,0 +1 @@
1
+ <svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 2v3M16 2v3M3.5 9.09h17M3 13.1V8.5c0-3 1.5-5 5-5h8c3.5 0 5 2 5 5v7.86c-.73-.83-1.8-1.36-3-1.36-2.21 0-4 1.79-4 4 0 .75.21 1.46.58 2.06.21.36.48.68.79.94H8c-3.5 0-5-2-5-5" stroke="#1C1C1C" stroke-width="2" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M11.995 13.7h.01M8.294 13.7h.01M8.294 16.7h.01" stroke="#1C1C1C" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M22 19c0 .75-.21 1.46-.58 2.06A3.97 3.97 0 0 1 18 23c-1.01 0-1.93-.37-2.63-1-.31-.26-.58-.58-.79-.94A3.92 3.92 0 0 1 14 19c0-2.21 1.79-4 4-4 1.2 0 2.27.53 3 1.36A4 4 0 0 1 22 19Z" stroke="#42AB44" stroke-width="2" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="m16.44 19 .99.99 2.13-1.97" stroke="#42AB44" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>