@redneckz/wildless-cms-uni-blocks 0.2.44 → 0.2.47

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 (319) hide show
  1. package/dist/BenefitsBlock.d.ts +2 -8
  2. package/dist/BenefitsBlock.js +4 -26
  3. package/dist/BenefitsBlock.js.map +1 -1
  4. package/dist/Blocks.d.ts +3 -0
  5. package/dist/Blocks.js +11 -5
  6. package/dist/Blocks.js.map +1 -1
  7. package/dist/ContentPage.d.ts +3 -4
  8. package/dist/ContentPage.js +5 -5
  9. package/dist/ContentPage.js.map +1 -1
  10. package/dist/ContentPageContext.d.ts +6 -3
  11. package/dist/ExchangeRateTile.d.ts +7 -0
  12. package/dist/ExchangeRateTile.js +32 -0
  13. package/dist/ExchangeRateTile.js.map +1 -0
  14. package/dist/Footer/Contacts.d.ts +2 -2
  15. package/dist/Footer/Footer.d.ts +2 -4
  16. package/dist/Footer/Footer.js +2 -2
  17. package/dist/Footer/Footer.js.map +1 -1
  18. package/dist/Footer/FooterLink.d.ts +2 -2
  19. package/dist/Footer/Sitemap.d.ts +2 -2
  20. package/dist/Footer/Sitemap.js +2 -1
  21. package/dist/Footer/Sitemap.js.map +1 -1
  22. package/dist/Footer/SocialMedia.d.ts +2 -2
  23. package/dist/Footer/SocialMedia.js +6 -6
  24. package/dist/Footer/SocialMedia.js.map +1 -1
  25. package/dist/Footer/index.d.ts +2 -0
  26. package/dist/Footer/index.js +5 -0
  27. package/dist/Footer/index.js.map +1 -0
  28. package/dist/Header/Header.d.ts +2 -2
  29. package/dist/Header/Header.js +4 -3
  30. package/dist/Header/Header.js.map +1 -1
  31. package/dist/Header/HeaderSecondaryMenu.js +1 -1
  32. package/dist/Header/HeaderSecondaryMenu.js.map +1 -1
  33. package/dist/Header/HeaderSecondaryMenuButton.d.ts +1 -0
  34. package/dist/Header/HeaderSecondaryMenuButton.js +1 -1
  35. package/dist/Header/HeaderSecondaryMenuButton.js.map +1 -1
  36. package/dist/Icons/ActualBalanceIcon.d.ts +1 -1
  37. package/dist/Icons/CalendarIcon.d.ts +1 -1
  38. package/dist/Icons/ClockIcon.d.ts +1 -1
  39. package/dist/Icons/ComfortableCompIcon.d.ts +1 -1
  40. package/dist/Icons/DollarIcon.d.ts +1 -0
  41. package/dist/Icons/DollarIcon.js +6 -0
  42. package/dist/Icons/DollarIcon.js.map +1 -0
  43. package/dist/Icons/EmptyWalletIcon.d.ts +1 -1
  44. package/dist/Icons/EuroIcon.d.ts +1 -0
  45. package/dist/Icons/EuroIcon.js +6 -0
  46. package/dist/Icons/EuroIcon.js.map +1 -0
  47. package/dist/Icons/GridIcon.d.ts +1 -1
  48. package/dist/Icons/LoupeIcon.d.ts +1 -1
  49. package/dist/Icons/NewDocIcon.d.ts +1 -1
  50. package/dist/Icons/OkIcon.d.ts +1 -1
  51. package/dist/Icons/PassSendIcon.d.ts +1 -1
  52. package/dist/Icons/PercentageSquareIcon.d.ts +1 -1
  53. package/dist/Icons/ProfileIcon.d.ts +1 -1
  54. package/dist/Icons/SignDocsIcon.d.ts +1 -1
  55. package/dist/Icons/TelegramIcon.d.ts +1 -1
  56. package/dist/Icons/VKIcon.d.ts +1 -1
  57. package/dist/Icons/index.d.ts +17 -16
  58. package/dist/Icons/index.js +26 -22
  59. package/dist/Icons/index.js.map +1 -1
  60. package/dist/Img.js +1 -1
  61. package/dist/Img.js.map +1 -1
  62. package/dist/LikeControl.d.ts +2 -2
  63. package/dist/LikeControl.js +1 -1
  64. package/dist/LikeControl.js.map +1 -1
  65. package/dist/MobileAppTile.d.ts +8 -0
  66. package/dist/MobileAppTile.js +9 -0
  67. package/dist/MobileAppTile.js.map +1 -0
  68. package/dist/Placeholder.d.ts +3 -1
  69. package/dist/Placeholder.js +9 -2
  70. package/dist/Placeholder.js.map +1 -1
  71. package/dist/ProductBlock.d.ts +3 -9
  72. package/dist/ProductBlock.js +1 -1
  73. package/dist/ProductBlock.js.map +1 -1
  74. package/dist/ProductBlockInner.d.ts +2 -8
  75. package/dist/ProductBlockInner.js +4 -26
  76. package/dist/ProductBlockInner.js.map +1 -1
  77. package/dist/ProductGallery.d.ts +3 -5
  78. package/dist/ProductGallery.js +3 -3
  79. package/dist/ProductGallery.js.map +1 -1
  80. package/dist/ProjectSettings.d.ts +18 -0
  81. package/dist/ProjectSettings.js +30 -0
  82. package/dist/ProjectSettings.js.map +1 -0
  83. package/dist/StepsBlock.d.ts +9 -4
  84. package/dist/StepsBlock.js +4 -26
  85. package/dist/StepsBlock.js.map +1 -1
  86. package/dist/Tile.d.ts +2 -2
  87. package/dist/Tile.js +15 -7
  88. package/dist/Tile.js.map +1 -1
  89. package/dist/index.d.ts +5 -3
  90. package/dist/index.js +7 -5
  91. package/dist/index.js.map +1 -1
  92. package/dist/types.d.ts +6 -1
  93. package/dist/ui-kit/Button.d.ts +1 -0
  94. package/dist/ui-kit/Button.js +4 -4
  95. package/dist/ui-kit/Button.js.map +1 -1
  96. package/dist/ui-kit/LikeButton.d.ts +1 -0
  97. package/dist/ui-kit/LikeButton.js +1 -1
  98. package/dist/ui-kit/LikeButton.js.map +1 -1
  99. package/dist/ui-kit/SearchBar.d.ts +2 -2
  100. package/dist/ui-kit/SearchBar.js.map +1 -1
  101. package/dist/ui-kit/TopItem.d.ts +1 -0
  102. package/dist/ui-kit/TopItem.js +2 -2
  103. package/dist/ui-kit/TopItem.js.map +1 -1
  104. package/dist/useLink.d.ts +1 -0
  105. package/dist/useLink.js +1 -0
  106. package/dist/useLink.js.map +1 -1
  107. package/dist/useSitemap.d.ts +3 -0
  108. package/dist/useSitemap.js +16 -0
  109. package/dist/useSitemap.js.map +1 -0
  110. package/dist/utils/url.d.ts +4 -4
  111. package/fonts/ubuntu/ubuntu.css +51 -32
  112. package/lib/BenefitsBlock.d.ts +2 -8
  113. package/lib/BenefitsBlock.js +4 -3
  114. package/lib/BenefitsBlock.js.map +1 -1
  115. package/lib/Blocks.d.ts +3 -0
  116. package/lib/Blocks.js +9 -3
  117. package/lib/Blocks.js.map +1 -1
  118. package/lib/ContentPage.d.ts +3 -4
  119. package/lib/ContentPage.js +5 -5
  120. package/lib/ContentPage.js.map +1 -1
  121. package/lib/ContentPageContext.d.ts +6 -3
  122. package/lib/ExchangeRateTile.d.ts +7 -0
  123. package/lib/ExchangeRateTile.js +30 -0
  124. package/lib/ExchangeRateTile.js.map +1 -0
  125. package/lib/Footer/Contacts.d.ts +2 -2
  126. package/lib/Footer/Footer.d.ts +2 -4
  127. package/lib/Footer/Footer.js +2 -2
  128. package/lib/Footer/Footer.js.map +1 -1
  129. package/lib/Footer/FooterLink.d.ts +2 -2
  130. package/lib/Footer/Sitemap.d.ts +2 -2
  131. package/lib/Footer/Sitemap.js +2 -1
  132. package/lib/Footer/Sitemap.js.map +1 -1
  133. package/lib/Footer/SocialMedia.d.ts +2 -2
  134. package/lib/Footer/SocialMedia.js +6 -6
  135. package/lib/Footer/SocialMedia.js.map +1 -1
  136. package/lib/Footer/index.d.ts +2 -0
  137. package/lib/Footer/index.js +2 -0
  138. package/lib/Footer/index.js.map +1 -0
  139. package/lib/Header/Header.d.ts +2 -2
  140. package/lib/Header/Header.js +4 -3
  141. package/lib/Header/Header.js.map +1 -1
  142. package/lib/Header/HeaderSecondaryMenu.js +1 -1
  143. package/lib/Header/HeaderSecondaryMenu.js.map +1 -1
  144. package/lib/Header/HeaderSecondaryMenuButton.d.ts +1 -0
  145. package/lib/Header/HeaderSecondaryMenuButton.js +1 -1
  146. package/lib/Header/HeaderSecondaryMenuButton.js.map +1 -1
  147. package/lib/Icons/ActualBalanceIcon.d.ts +1 -1
  148. package/lib/Icons/CalendarIcon.d.ts +1 -1
  149. package/lib/Icons/ClockIcon.d.ts +1 -1
  150. package/lib/Icons/ComfortableCompIcon.d.ts +1 -1
  151. package/lib/Icons/DollarIcon.d.ts +1 -0
  152. package/lib/Icons/DollarIcon.js +3 -0
  153. package/lib/Icons/DollarIcon.js.map +1 -0
  154. package/lib/Icons/EmptyWalletIcon.d.ts +1 -1
  155. package/lib/Icons/EuroIcon.d.ts +1 -0
  156. package/lib/Icons/EuroIcon.js +3 -0
  157. package/lib/Icons/EuroIcon.js.map +1 -0
  158. package/lib/Icons/GridIcon.d.ts +1 -1
  159. package/lib/Icons/LoupeIcon.d.ts +1 -1
  160. package/lib/Icons/NewDocIcon.d.ts +1 -1
  161. package/lib/Icons/OkIcon.d.ts +1 -1
  162. package/lib/Icons/PassSendIcon.d.ts +1 -1
  163. package/lib/Icons/PercentageSquareIcon.d.ts +1 -1
  164. package/lib/Icons/ProfileIcon.d.ts +1 -1
  165. package/lib/Icons/SignDocsIcon.d.ts +1 -1
  166. package/lib/Icons/TelegramIcon.d.ts +1 -1
  167. package/lib/Icons/VKIcon.d.ts +1 -1
  168. package/lib/Icons/index.d.ts +17 -16
  169. package/lib/Icons/index.js +17 -16
  170. package/lib/Icons/index.js.map +1 -1
  171. package/lib/Img.js +1 -1
  172. package/lib/Img.js.map +1 -1
  173. package/lib/LikeControl.d.ts +2 -2
  174. package/lib/LikeControl.js +1 -1
  175. package/lib/LikeControl.js.map +1 -1
  176. package/lib/MobileAppTile.d.ts +8 -0
  177. package/lib/MobileAppTile.js +7 -0
  178. package/lib/MobileAppTile.js.map +1 -0
  179. package/lib/Placeholder.d.ts +3 -1
  180. package/lib/Placeholder.js +9 -2
  181. package/lib/Placeholder.js.map +1 -1
  182. package/lib/ProductBlock.d.ts +3 -9
  183. package/lib/ProductBlock.js +1 -1
  184. package/lib/ProductBlock.js.map +1 -1
  185. package/lib/ProductBlockInner.d.ts +2 -8
  186. package/lib/ProductBlockInner.js +4 -3
  187. package/lib/ProductBlockInner.js.map +1 -1
  188. package/lib/ProductGallery.d.ts +3 -5
  189. package/lib/ProductGallery.js +3 -3
  190. package/lib/ProductGallery.js.map +1 -1
  191. package/lib/ProjectSettings.d.ts +18 -0
  192. package/lib/ProjectSettings.js +28 -0
  193. package/lib/ProjectSettings.js.map +1 -0
  194. package/lib/StepsBlock.d.ts +9 -4
  195. package/lib/StepsBlock.js +4 -3
  196. package/lib/StepsBlock.js.map +1 -1
  197. package/lib/Tile.d.ts +2 -2
  198. package/lib/Tile.js +15 -7
  199. package/lib/Tile.js.map +1 -1
  200. package/lib/common.css +1 -1
  201. package/lib/index.d.ts +5 -3
  202. package/lib/index.js +3 -2
  203. package/lib/index.js.map +1 -1
  204. package/lib/types.d.ts +6 -1
  205. package/lib/ui-kit/Button.d.ts +1 -0
  206. package/lib/ui-kit/Button.js +4 -4
  207. package/lib/ui-kit/Button.js.map +1 -1
  208. package/lib/ui-kit/LikeButton.d.ts +1 -0
  209. package/lib/ui-kit/LikeButton.js +1 -1
  210. package/lib/ui-kit/LikeButton.js.map +1 -1
  211. package/lib/ui-kit/SearchBar.d.ts +2 -2
  212. package/lib/ui-kit/SearchBar.js.map +1 -1
  213. package/lib/ui-kit/TopItem.d.ts +1 -0
  214. package/lib/ui-kit/TopItem.js +2 -2
  215. package/lib/ui-kit/TopItem.js.map +1 -1
  216. package/lib/useLink.d.ts +1 -0
  217. package/lib/useLink.js +1 -0
  218. package/lib/useLink.js.map +1 -1
  219. package/lib/useSitemap.d.ts +3 -0
  220. package/lib/useSitemap.js +13 -0
  221. package/lib/useSitemap.js.map +1 -0
  222. package/lib/utils/url.d.ts +4 -4
  223. package/package.json +43 -19
  224. package/src/BenefitsBlock.fixture.tsx +34 -0
  225. package/src/BenefitsBlock.tsx +45 -0
  226. package/src/Blocks.ts +23 -0
  227. package/src/ContentPage.fixture.tsx +38 -0
  228. package/src/ContentPage.page.json +540 -0
  229. package/src/ContentPage.tsx +83 -0
  230. package/src/ContentPageContext.tsx +34 -0
  231. package/src/ContentPageHead.tsx +26 -0
  232. package/src/ExchangeRateTile.fixture.tsx +11 -0
  233. package/src/ExchangeRateTile.tsx +80 -0
  234. package/src/Footer/Contacts.tsx +71 -0
  235. package/src/Footer/Footer.fixture.tsx +265 -0
  236. package/src/Footer/Footer.tsx +46 -0
  237. package/src/Footer/FooterLink.ts +6 -0
  238. package/src/Footer/HorizontalNavigation.tsx +46 -0
  239. package/src/Footer/Sitemap.tsx +55 -0
  240. package/src/Footer/SocialMedia.tsx +46 -0
  241. package/src/Footer/TextInformation.tsx +50 -0
  242. package/src/Footer/index.ts +2 -0
  243. package/src/Header/Header.fixture.tsx +21 -0
  244. package/src/Header/Header.tsx +55 -0
  245. package/src/Header/HeaderContent.ts +6 -0
  246. package/src/Header/HeaderSecondaryMenu.tsx +42 -0
  247. package/src/Header/HeaderSecondaryMenuButton.tsx +21 -0
  248. package/src/Header/index.ts +3 -0
  249. package/src/Header/isSubItemActive.ts +9 -0
  250. package/src/Header/isTopItemActive.ts +13 -0
  251. package/src/Icons/ActualBalanceIcon.tsx +202 -0
  252. package/src/Icons/CalendarIcon.tsx +19 -0
  253. package/src/Icons/ClockIcon.tsx +212 -0
  254. package/src/Icons/ComfortableCompIcon.tsx +379 -0
  255. package/src/Icons/DollarIcon.tsx +12 -0
  256. package/src/Icons/EmptyWalletIcon.tsx +25 -0
  257. package/src/Icons/EuroIcon.tsx +12 -0
  258. package/src/Icons/GridIcon.tsx +9 -0
  259. package/src/Icons/LoupeIcon.tsx +11 -0
  260. package/src/Icons/NewDocIcon.tsx +262 -0
  261. package/src/Icons/OkIcon.tsx +8 -0
  262. package/src/Icons/PassSendIcon.tsx +250 -0
  263. package/src/Icons/PercentageSquareIcon.tsx +18 -0
  264. package/src/Icons/ProfileIcon.tsx +18 -0
  265. package/src/Icons/SignDocsIcon.tsx +295 -0
  266. package/src/Icons/TelegramIcon.tsx +8 -0
  267. package/src/Icons/VKIcon.tsx +10 -0
  268. package/src/Icons/index.ts +17 -0
  269. package/src/Img.tsx +22 -0
  270. package/src/LikeControl.fixture.tsx +5 -0
  271. package/src/LikeControl.tsx +23 -0
  272. package/src/MobileAppTile.fixture.tsx +15 -0
  273. package/src/MobileAppTile.tsx +34 -0
  274. package/src/Placeholder.fixture.tsx +5 -0
  275. package/src/Placeholder.tsx +33 -0
  276. package/src/ProductBlock.fixture.tsx +95 -0
  277. package/src/ProductBlock.tsx +15 -0
  278. package/src/ProductBlockInner.tsx +110 -0
  279. package/src/ProductGallery.fixture.tsx +138 -0
  280. package/src/ProductGallery.tsx +90 -0
  281. package/src/ProjectSettings.ts +38 -0
  282. package/src/StepsBlock.fixture.tsx +23 -0
  283. package/src/StepsBlock.tsx +51 -0
  284. package/src/Tile.fixture.tsx +124 -0
  285. package/src/Tile.tsx +89 -0
  286. package/src/api/LikeAPI.ts +141 -0
  287. package/src/common.css +39 -0
  288. package/src/content-page-repository/ContentPageRepository.ts +38 -0
  289. package/src/content-page-repository/TransformationOptions.ts +4 -0
  290. package/src/content-page-repository/index.ts +1 -0
  291. package/src/content-page-repository/mapJSON.spec.ts +28 -0
  292. package/src/content-page-repository/mapJSON.ts +23 -0
  293. package/src/content-page-repository/transformContentPage.ts +26 -0
  294. package/src/content-page-repository/transformMarkdown.ts +10 -0
  295. package/src/content-page-repository/transformPicture.ts +61 -0
  296. package/src/cosmos.decorator.tsx +19 -0
  297. package/src/index.ts +19 -0
  298. package/src/mergeTopItems.spec.ts +20 -0
  299. package/src/mergeTopItems.ts +13 -0
  300. package/src/setup-fixture.ts +49 -0
  301. package/src/types.ts +109 -0
  302. package/src/ui-kit/BlockItem.fixture.tsx +5 -0
  303. package/src/ui-kit/BlockItem.tsx +36 -0
  304. package/src/ui-kit/Breadcrumb.tsx +26 -0
  305. package/src/ui-kit/Button.fixture.tsx +113 -0
  306. package/src/ui-kit/Button.tsx +66 -0
  307. package/src/ui-kit/HeaderItem.fixture.tsx +8 -0
  308. package/src/ui-kit/HeaderItem.tsx +25 -0
  309. package/src/ui-kit/LikeButton.fixture.tsx +6 -0
  310. package/src/ui-kit/LikeButton.tsx +41 -0
  311. package/src/ui-kit/Logo.fixture.tsx +5 -0
  312. package/src/ui-kit/Logo.tsx +35 -0
  313. package/src/ui-kit/SVG.tsx +32 -0
  314. package/src/ui-kit/SearchBar.tsx +33 -0
  315. package/src/ui-kit/TopItem.fixture.tsx +8 -0
  316. package/src/ui-kit/TopItem.tsx +37 -0
  317. package/src/useLink.ts +28 -0
  318. package/src/useSitemap.ts +17 -0
  319. package/src/utils/url.ts +22 -0
@@ -0,0 +1,540 @@
1
+ {
2
+ "title": "Кредиты",
3
+ "slug": "credits",
4
+ "description": "Акционерное общество «Российский Сельскохозяйственный банк»* — один из крупнейших банков в России. Созданный в 2000 году в целях развития национальной кредитно-финансовой системы.",
5
+ "keywords": ["кредит", "акция"],
6
+ "robots": ["index", "follow"],
7
+ "og": {
8
+ "type": "article",
9
+ "url": "https://foo.com/bar/baz"
10
+ },
11
+ "date": "2022-04-08",
12
+ "style": ["p-20", "pt-0", "gap-5", "bg-secondary-light"],
13
+ "likeControl": true,
14
+ "blocks": [
15
+ {
16
+ "type": "Header",
17
+ "style": ["col-span-12", "-mx-20", "mb-5", "shadow-[0_8px_32px_0px_#00000014]"],
18
+ "content": {
19
+ "topItems": [
20
+ {
21
+ "href": "https://rshb.ru/",
22
+ "text": "Бизнес клиентам",
23
+ "target": "_blank"
24
+ },
25
+ {
26
+ "href": "https://rshb.ru/",
27
+ "text": "Частным клиентам",
28
+ "target": "_blank"
29
+ }
30
+ ]
31
+ }
32
+ },
33
+ {
34
+ "type": "ProductGallery",
35
+ "style": ["col-span-12"],
36
+ "content": {
37
+ "slides": [
38
+ {
39
+ "nav": {
40
+ "title": "Деньги на любые цели",
41
+ "desc": "Ставка от 12,5% годовых на срок до 5 лет"
42
+ },
43
+ "productBlock": {
44
+ "title": "Ставка от 12,5% годовых на срок до 5 лет!»",
45
+ "description": "Кредит наличными без залога и поручительства. Потребительский кредит на любые цели. Нужен только паспорт.",
46
+ "items": [
47
+ "Потребительский кредит по специальной процентной ставке",
48
+ "Получите деньги без залога и поручительства",
49
+ "Кредитный лимит до 5 млн рублей"
50
+ ],
51
+ "buttons": [
52
+ {
53
+ "href": "https://rshb.ru",
54
+ "text": "Подробнее",
55
+ "target": "_blank",
56
+ "version": "primary"
57
+ }
58
+ ],
59
+ "image": {
60
+ "src": "money-1.png",
61
+ "title": "деньги",
62
+ "format": "webp",
63
+ "size": {
64
+ "width": 220,
65
+ "height": 220
66
+ }
67
+ }
68
+ }
69
+ },
70
+ {
71
+ "nav": {
72
+ "title": "Для людей в возрасте",
73
+ "desc": "Ставка от 12,5% годовых на срок до 3 лет"
74
+ },
75
+ "productBlock": {
76
+ "title": "Ставка от 12,5% годовых на срок до 3 лет!»",
77
+ "description": "Кредит наличными без залога и поручительства. Потребительский кредит на любые цели. Нужен только паспорт.",
78
+ "items": [
79
+ "Потребительский кредит по специальной процентной ставке",
80
+ "Получите деньги без залога и поручительства",
81
+ "Кредитный лимит до 5 млн рублей"
82
+ ],
83
+ "buttons": [
84
+ {
85
+ "href": "https://rshb.ru",
86
+ "text": "Подробнее",
87
+ "target": "_blank",
88
+ "version": "primary"
89
+ }
90
+ ],
91
+ "image": {
92
+ "src": "worker.png",
93
+ "title": "Рабочий",
94
+ "format": "webp",
95
+ "size": {
96
+ "width": 220,
97
+ "height": 220
98
+ }
99
+ }
100
+ }
101
+ },
102
+ {
103
+ "nav": {
104
+ "title": "Выгодно покупать",
105
+ "desc": "Дополнительные бонусные баллы за покупки"
106
+ },
107
+ "productBlock": {
108
+ "title": "Дополнительные бонусные баллы за покупки!»",
109
+ "description": "Кредит наличными без залога и поручительства. Потребительский кредит на любые цели. Нужен только паспорт.",
110
+ "items": [
111
+ "Потребительский кредит по специальной процентной ставке",
112
+ "Получите деньги без залога и поручительства",
113
+ "Кредитный лимит до 5 млн рублей"
114
+ ],
115
+ "buttons": [
116
+ {
117
+ "href": "https://rshb.ru",
118
+ "text": "Подробнее",
119
+ "target": "_blank",
120
+ "version": "primary"
121
+ }
122
+ ],
123
+ "image": {
124
+ "src": "credit-card-1.png",
125
+ "title": "Кредитка",
126
+ "format": "webp",
127
+ "size": {
128
+ "width": 220,
129
+ "height": 220
130
+ }
131
+ }
132
+ }
133
+ },
134
+ {
135
+ "nav": {
136
+ "title": "Карты Unionpay",
137
+ "desc": "Кэшбэк до 20% у партнеров"
138
+ },
139
+ "productBlock": {
140
+ "title": "Карты Unionpay»",
141
+ "description": "Кэшбэк до 20% у партнеров",
142
+ "items": [
143
+ "Потребительский кредит по специальной процентной ставке",
144
+ "Получите деньги без залога и поручительства",
145
+ "Кредитный лимит до 5 млн рублей"
146
+ ],
147
+ "buttons": [
148
+ {
149
+ "href": "https://rshb.ru",
150
+ "text": "Подробнее",
151
+ "target": "_blank",
152
+ "version": "primary"
153
+ }
154
+ ],
155
+ "image": {
156
+ "src": "credit-card-1.png",
157
+ "title": "Кредитка",
158
+ "format": "webp",
159
+ "size": {
160
+ "width": 220,
161
+ "height": 220
162
+ }
163
+ }
164
+ }
165
+ }
166
+ ]
167
+ }
168
+ },
169
+ {
170
+ "type": "Tile",
171
+ "style": ["col-span-8"],
172
+ "content": {
173
+ "title": "Кредиты",
174
+ "items": [
175
+ "Кредитный лимит до 10 млн ₽",
176
+ "Кредиты наличными на любые цели",
177
+ "Получите деньги без залога и поручителей"
178
+ ],
179
+ "button": {
180
+ "text": "Подробнее",
181
+ "href": "/credit-cards",
182
+ "version": "secondary"
183
+ },
184
+ "image": {
185
+ "src": "money-1.png",
186
+ "title": "деньги",
187
+ "format": "webp",
188
+ "size": {
189
+ "width": 220,
190
+ "height": 220
191
+ }
192
+ }
193
+ }
194
+ },
195
+ {
196
+ "type": "Tile",
197
+ "version": "secondary",
198
+ "style": ["col-span-4"],
199
+ "content": {
200
+ "title": "Ипотека",
201
+ "description": "Широкий выбор ипотечных программ с государственной поддержкой. Специальный предложения от 12,2 %",
202
+ "button": {
203
+ "text": "Подробнее",
204
+ "href": "/credits",
205
+ "version": "secondary"
206
+ },
207
+ "promo": true
208
+ }
209
+ },
210
+ {
211
+ "type": "Tile",
212
+ "style": ["col-span-6"],
213
+ "content": {
214
+ "title": "Банковские пластиковые карты",
215
+ "items": ["Счета в разных валютах", "Бесплатное обслуживание", "Кэшбэк до 15% от покупок"],
216
+ "button": {
217
+ "text": "Подробнее",
218
+ "href": "/credits",
219
+ "version": "secondary"
220
+ },
221
+ "image": {
222
+ "src": "credit-card-1.png",
223
+ "title": "Кредитка",
224
+ "format": "webp",
225
+ "size": {
226
+ "width": 220,
227
+ "height": 220
228
+ }
229
+ }
230
+ }
231
+ },
232
+ {
233
+ "type": "Tile",
234
+ "style": ["col-span-6"],
235
+ "content": {
236
+ "title": "Премиальные продукты",
237
+ "description": "Выделенные зоны обслуживания и персональный финансовый консультант. Полный спектр премиальных продуктов, подчеркивающих ваш статус",
238
+ "button": {
239
+ "text": "Подробнее",
240
+ "href": "/credits",
241
+ "version": "secondary"
242
+ },
243
+ "image": {
244
+ "src": "column-1.png",
245
+ "alt": "Column",
246
+ "format": "webp",
247
+ "size": {
248
+ "width": 220,
249
+ "height": 220
250
+ }
251
+ }
252
+ }
253
+ },
254
+ {
255
+ "type": "Tile",
256
+ "style": ["col-span-12"],
257
+ "content": {
258
+ "title": "Экосистема «СВОЕ», созданная для людей",
259
+ "items": [
260
+ "Качественные фермерские продукты напрямую от производителей",
261
+ "Самая большая база сельских туров по России",
262
+ "Площадки для создания комфортной жизни за городом",
263
+ "Подробная база вакансий для жителей сельской местности"
264
+ ],
265
+ "button": {
266
+ "text": "Подробнее",
267
+ "href": "/credits",
268
+ "version": "secondary"
269
+ },
270
+ "image": {
271
+ "src": "globe-1.png",
272
+ "title": "Глобус",
273
+ "format": "webp",
274
+ "size": {
275
+ "width": 220,
276
+ "height": 220
277
+ }
278
+ }
279
+ }
280
+ },
281
+ {
282
+ "type": "Tile",
283
+ "style": ["col-span-4"],
284
+ "content": {
285
+ "title": "Драгоценные металлы",
286
+ "items": ["Счета в драгоценных металлах", "Слитки и монеты из драгоценных металлов"],
287
+ "button": {
288
+ "text": "Подробнее",
289
+ "href": "/credits",
290
+ "version": "secondary"
291
+ }
292
+ }
293
+ },
294
+ {
295
+ "type": "Tile",
296
+ "style": ["col-span-4"],
297
+ "content": {
298
+ "title": "Банковские ячейки",
299
+ "items": ["Полная конфиденциальность", "Разный размер ячеек", "Оформление доверенностей"],
300
+ "button": {
301
+ "text": "Подробнее",
302
+ "href": "/credits",
303
+ "version": "secondary"
304
+ }
305
+ }
306
+ },
307
+ {
308
+ "type": "Tile",
309
+ "style": ["col-span-4"],
310
+ "content": {
311
+ "title": "Вклады и сбережения",
312
+ "items": [
313
+ "Доходность по вкладам до 15% годовых",
314
+ "Минимальная сумма вклада от 3000 Р",
315
+ "Минимальный срок вклада от 1 месяца"
316
+ ],
317
+ "button": {
318
+ "text": "Подробнее",
319
+ "href": "/credits",
320
+ "version": "secondary"
321
+ }
322
+ }
323
+ },
324
+ {
325
+ "type": "Tile",
326
+ "style": ["col-span-4"],
327
+ "content": {
328
+ "title": "Акции и спецпредложения",
329
+ "version": "secondary",
330
+ "description": "Пенсионный кредит по специальной процентной ставке",
331
+ "button": {
332
+ "text": "Все акции",
333
+ "href": "/credits",
334
+ "version": "secondary"
335
+ }
336
+ }
337
+ },
338
+ {
339
+ "type": "ExchangeRateTile",
340
+ "style": ["col-span-4"]
341
+ },
342
+ {
343
+ "type": "MobileAppTile",
344
+ "style": ["col-span-4"],
345
+ "content": {
346
+ "qr": "data:image/jpeg;base64,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"
347
+ }
348
+ },
349
+ {
350
+ "type": "Unknown",
351
+ "style": ["col-span-12"],
352
+ "content": {
353
+ "title": "Неизвестный блок"
354
+ }
355
+ },
356
+ {
357
+ "type": "Footer",
358
+ "style": ["col-span-12"],
359
+ "content": {
360
+ "topItems": [
361
+ {
362
+ "href": "https://rshb.ru/",
363
+ "text": "Частным клиентам",
364
+ "target": "_blank",
365
+ "items": [
366
+ {
367
+ "href": "https://rshb.ru/",
368
+ "text": "Кредитные карты"
369
+ },
370
+ {
371
+ "href": "https://rshb.ru/",
372
+ "text": "Дебетовые карты"
373
+ },
374
+ {
375
+ "href": "https://rshb.ru/",
376
+ "text": "Кредиты"
377
+ },
378
+ {
379
+ "href": "https://rshb.ru/",
380
+ "text": "Ипотека"
381
+ },
382
+ {
383
+ "href": "https://rshb.ru/",
384
+ "text": "Вклады и сбережения"
385
+ },
386
+ {
387
+ "href": "https://rshb.ru/",
388
+ "text": "Инвестиции"
389
+ },
390
+ {
391
+ "href": "https://rshb.ru/",
392
+ "text": "Страхование"
393
+ },
394
+ {
395
+ "href": "https://rshb.ru/",
396
+ "text": "Премиальным клиентам"
397
+ },
398
+ {
399
+ "href": "https://rshb.ru/",
400
+ "text": "Биометрическая регистрация"
401
+ },
402
+ {
403
+ "href": "https://rshb.ru/",
404
+ "text": "Перевод денег"
405
+ },
406
+ {
407
+ "href": "https://rshb.ru/",
408
+ "text": "Обмен денег"
409
+ },
410
+ {
411
+ "href": "https://rshb.ru/",
412
+ "text": "Акции"
413
+ },
414
+ {
415
+ "href": "https://rshb.ru/",
416
+ "text": "Тарифы"
417
+ },
418
+ {
419
+ "href": "https://rshb.ru/",
420
+ "text": "Архивная информация"
421
+ }
422
+ ]
423
+ },
424
+ {
425
+ "href": "https://rshb.ru/",
426
+ "text": "Бизнес клиентам",
427
+ "target": "_blank",
428
+ "items": [
429
+ {
430
+ "href": "https://rshb.ru/",
431
+ "text": "РКО"
432
+ },
433
+ {
434
+ "href": "https://rshb.ru/",
435
+ "text": "Кредиты"
436
+ },
437
+ {
438
+ "href": "https://rshb.ru/",
439
+ "text": "Депозиты"
440
+ },
441
+ {
442
+ "href": "https://rshb.ru/",
443
+ "text": "Эквайринг"
444
+ },
445
+ {
446
+ "href": "https://rshb.ru/",
447
+ "text": "Банковские карты"
448
+ },
449
+ {
450
+ "href": "https://rshb.ru/",
451
+ "text": "ВЭД"
452
+ },
453
+ {
454
+ "href": "https://rshb.ru/",
455
+ "text": "Инвестиции"
456
+ },
457
+ {
458
+ "href": "https://rshb.ru/",
459
+ "text": "Обмен валюты"
460
+ },
461
+ {
462
+ "href": "https://rshb.ru/",
463
+ "text": "Страхование"
464
+ },
465
+ {
466
+ "href": "https://rshb.ru/",
467
+ "text": "Партнёрские программы"
468
+ },
469
+ {
470
+ "href": "https://rshb.ru/",
471
+ "text": "Онлайн-сервисы"
472
+ },
473
+ {
474
+ "href": "https://rshb.ru/",
475
+ "text": "Акции"
476
+ },
477
+ {
478
+ "href": "https://rshb.ru/",
479
+ "text": "Тарифы"
480
+ },
481
+ {
482
+ "href": "https://rshb.ru/",
483
+ "text": "Архивная информация"
484
+ }
485
+ ]
486
+ }
487
+ ],
488
+ "contacts": [
489
+ {
490
+ "text": "+7 (495) 787-7-787",
491
+ "description": "Для звонков из-за границы",
492
+ "type": "tel"
493
+ },
494
+ {
495
+ "text": "example@example.com",
496
+ "description": "Для писем",
497
+ "type": "email"
498
+ },
499
+ {
500
+ "text": "7787",
501
+ "description": "Абонентам МТС, Мегафон, Билайн и Tele2",
502
+ "type": "tel"
503
+ }
504
+ ],
505
+ "documents": [
506
+ {
507
+ "text": "Информация о процентных ставках по договорам банковского вклада с физическими лицами",
508
+ "href": "https://rshb.ru/",
509
+ "target": "_blank"
510
+ },
511
+ {
512
+ "text": "Раскрытие информации профессиональным участником рынка ценных бумаг",
513
+ "href": "https://rshb.ru/",
514
+ "target": "_blank"
515
+ },
516
+ {
517
+ "text": "Раскрытие информации",
518
+ "href": "https://rshb.ru/",
519
+ "target": "_blank"
520
+ },
521
+ {
522
+ "text": "Удостоверяющий центр",
523
+ "href": "https://rshb.ru/",
524
+ "target": "_blank"
525
+ },
526
+ {
527
+ "text": "Финансовая культура",
528
+ "href": "https://rshb.ru/",
529
+ "target": "_blank"
530
+ }
531
+ ],
532
+ "socialMedia": [
533
+ { "href": "https://vk.com" },
534
+ { "href": "https://ok.ru" },
535
+ { "href": "https://t.me" }
536
+ ]
537
+ }
538
+ }
539
+ ]
540
+ }
@@ -0,0 +1,83 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+ import { Blocks } from './Blocks'; // TODO Lazy load
3
+ import { LikeControl } from './LikeControl';
4
+ import { Placeholder } from './Placeholder';
5
+ import type { BlockDef, ContentPageDef, UniBlockProps } from './types';
6
+
7
+ interface BlockDecoratorProps<VNode> {
8
+ blockClassName: string;
9
+ block: BlockDef;
10
+ render: (props: { blockClassName: string; block: BlockDef }) => VNode;
11
+ }
12
+
13
+ export type BlockDecorator<VNode = any> = (
14
+ props: BlockDecoratorProps<VNode>,
15
+ index?: number | string,
16
+ ) => any;
17
+
18
+ export interface ContentPageProps extends UniBlockProps {
19
+ data: ContentPageDef;
20
+ blockDecorator?: BlockDecorator;
21
+ }
22
+
23
+ const defaultBlockDecorator: BlockDecorator = ({ blockClassName, block, render }) =>
24
+ render({ blockClassName, block });
25
+
26
+ export const ContentPage = JSX<ContentPageProps>(
27
+ ({
28
+ className,
29
+ data: { style: pageStyle, blocks, likeControl, colorPalette = 'pc' },
30
+ context,
31
+ blockDecorator = defaultBlockDecorator,
32
+ }) => {
33
+ return (
34
+ <section className="relative" data-theme={colorPalette}>
35
+ <div className={`grid grid-cols-12 gap-1 ${style2className(pageStyle)} ${className}`}>
36
+ {blocks?.length ? blocks.map(renderBlock) : null}
37
+ </div>
38
+ {likeControl && (
39
+ <div className="flex items-end absolute bottom-0 right-0 h-full pointer-events-none">
40
+ <LikeControl
41
+ className="rounded-tl-lg sticky bottom-0 pointer-events-auto"
42
+ context={context}
43
+ />
44
+ </div>
45
+ )}
46
+ </section>
47
+ );
48
+
49
+ function renderBlock(block: BlockDef, i: number) {
50
+ const { type } = block;
51
+ if (!(type in Blocks)) {
52
+ console.warn(`No block with "${type}" is registered`);
53
+ }
54
+
55
+ const BlockComponent = Blocks[type as keyof typeof Blocks] || Placeholder;
56
+ return blockDecorator(
57
+ {
58
+ blockClassName: style2className(block.style),
59
+ block,
60
+ render: (props) => {
61
+ const { version, content, blocks } = props.block;
62
+ return (
63
+ <BlockComponent
64
+ key={`${type}-${i}`}
65
+ className={props.blockClassName}
66
+ version={version}
67
+ context={context}
68
+ {...content}
69
+ >
70
+ {blocks?.length ? blocks.map(renderBlock) : null}
71
+ </BlockComponent>
72
+ );
73
+ },
74
+ },
75
+ `block-${i}`,
76
+ );
77
+ }
78
+ },
79
+ );
80
+
81
+ function style2className(style: string[] | undefined | null): string {
82
+ return style ? style.join(' ') : '';
83
+ }
@@ -0,0 +1,34 @@
1
+ export interface Router {
2
+ pathname: string;
3
+ query: Record<string, string | string[] | undefined>;
4
+ href?: string;
5
+ basePath?: string;
6
+ push: (url: string) => void;
7
+ }
8
+
9
+ export interface LikeService {
10
+ likeCount: number;
11
+ like: () => void;
12
+ dislike: () => void;
13
+ }
14
+
15
+ export type HandlerDecorator = <F extends Function>(handler: F, targetContent: any) => F;
16
+
17
+ export interface Search {
18
+ term: string;
19
+ setTerm: (t: string) => void;
20
+ }
21
+
22
+ export type AsyncDataHook = <Data, Error = any>(
23
+ key: string,
24
+ fetcher: () => Promise<Data>,
25
+ ) => { data?: Data; error?: Error };
26
+
27
+ export interface ContentPageContext {
28
+ useRouter: () => Router;
29
+ useState: <State>(initialState: State) => [State, (_: State) => void];
30
+ useAsyncData: AsyncDataHook;
31
+ useLikeService: () => LikeService;
32
+ useSearch: () => Search;
33
+ handlerDecorator?: HandlerDecorator;
34
+ }