@redneckz/wildless-cms-uni-blocks 0.2.53 → 0.2.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BaseTile.d.ts +13 -0
- package/dist/BaseTile.js +35 -0
- package/dist/BaseTile.js.map +1 -0
- package/dist/Blocks.d.ts +2 -2
- package/dist/Blocks.js.map +1 -1
- package/dist/ContentPage.d.ts +4 -1
- package/dist/ContentPage.js +3 -4
- package/dist/ContentPage.js.map +1 -1
- package/dist/ContentPageContext.d.ts +2 -0
- package/dist/ExchangeRateTile.js +7 -5
- package/dist/ExchangeRateTile.js.map +1 -1
- package/dist/Footer/Footer.mobile.d.ts +5 -0
- package/dist/Footer/Footer.mobile.js +7 -0
- package/dist/Footer/Footer.mobile.js.map +1 -0
- package/dist/Header/Header.js +2 -2
- package/dist/Header/Header.js.map +1 -1
- package/dist/Header/HeaderContent.d.ts +1 -1
- package/dist/Header/HeaderSecondaryMenu.d.ts +5 -2
- package/dist/Header/HeaderSecondaryMenu.js +3 -2
- package/dist/Header/HeaderSecondaryMenu.js.map +1 -1
- package/dist/MobileBlocks.d.ts +13 -0
- package/dist/MobileBlocks.js +27 -0
- package/dist/MobileBlocks.js.map +1 -0
- package/dist/ProductBlock.d.ts +2 -0
- package/dist/ProductBlock.js +7 -2
- package/dist/ProductBlock.js.map +1 -1
- package/dist/ProductBlockInner.d.ts +3 -10
- package/dist/ProductBlockInner.js +3 -15
- package/dist/ProductBlockInner.js.map +1 -1
- package/dist/ProductTile.d.ts +4 -13
- package/dist/ProductTile.js +4 -11
- package/dist/ProductTile.js.map +1 -1
- package/dist/Tile.d.ts +3 -11
- package/dist/Tile.js +4 -26
- package/dist/Tile.js.map +1 -1
- package/dist/api/DaDataAPI.d.ts +3 -0
- package/dist/api/DaDataAPI.js +33 -0
- package/dist/api/DaDataAPI.js.map +1 -0
- package/dist/api/LikeAPI.d.ts +1 -1
- package/dist/api/LikeAPI.js +2 -2
- package/dist/api/LikeAPI.js.map +1 -1
- package/dist/content-page-repository/ContentPageRepository.d.ts +1 -0
- package/dist/content-page-repository/ContentPageRepository.js +6 -0
- package/dist/content-page-repository/ContentPageRepository.js.map +1 -1
- package/dist/content-page-repository/index.d.ts +1 -0
- package/dist/content-page-repository/index.js +3 -1
- package/dist/content-page-repository/index.js.map +1 -1
- package/dist/content-page-repository/toMobilePage.d.ts +2 -0
- package/dist/content-page-repository/toMobilePage.js +23 -0
- package/dist/content-page-repository/toMobilePage.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/utils/getCurrentPosition.d.ts +1 -0
- package/dist/utils/getCurrentPosition.js +5 -0
- package/dist/utils/getCurrentPosition.js.map +1 -0
- package/lib/BaseTile.d.ts +13 -0
- package/lib/BaseTile.js +33 -0
- package/lib/BaseTile.js.map +1 -0
- package/lib/Blocks.d.ts +2 -2
- package/lib/Blocks.js.map +1 -1
- package/lib/ContentPage.d.ts +4 -1
- package/lib/ContentPage.js +3 -4
- package/lib/ContentPage.js.map +1 -1
- package/lib/ContentPageContext.d.ts +2 -0
- package/lib/ExchangeRateTile.js +7 -5
- package/lib/ExchangeRateTile.js.map +1 -1
- package/lib/Footer/Footer.mobile.d.ts +5 -0
- package/lib/Footer/Footer.mobile.js +5 -0
- package/lib/Footer/Footer.mobile.js.map +1 -0
- package/lib/Header/Header.js +2 -2
- package/lib/Header/Header.js.map +1 -1
- package/lib/Header/HeaderContent.d.ts +1 -1
- package/lib/Header/HeaderSecondaryMenu.d.ts +5 -2
- package/lib/Header/HeaderSecondaryMenu.js +3 -2
- package/lib/Header/HeaderSecondaryMenu.js.map +1 -1
- package/lib/MobileBlocks.d.ts +13 -0
- package/lib/MobileBlocks.js +25 -0
- package/lib/MobileBlocks.js.map +1 -0
- package/lib/ProductBlock.d.ts +2 -0
- package/lib/ProductBlock.js +8 -3
- package/lib/ProductBlock.js.map +1 -1
- package/lib/ProductBlockInner.d.ts +3 -10
- package/lib/ProductBlockInner.js +3 -15
- package/lib/ProductBlockInner.js.map +1 -1
- package/lib/ProductTile.d.ts +4 -13
- package/lib/ProductTile.js +4 -11
- package/lib/ProductTile.js.map +1 -1
- package/lib/Tile.d.ts +3 -11
- package/lib/Tile.js +5 -27
- package/lib/Tile.js.map +1 -1
- package/lib/api/DaDataAPI.d.ts +3 -0
- package/lib/api/DaDataAPI.js +30 -0
- package/lib/api/DaDataAPI.js.map +1 -0
- package/lib/api/LikeAPI.d.ts +1 -1
- package/lib/api/LikeAPI.js +2 -2
- package/lib/api/LikeAPI.js.map +1 -1
- package/lib/common.css +1 -1
- package/lib/content-page-repository/ContentPageRepository.d.ts +1 -0
- package/lib/content-page-repository/ContentPageRepository.js +6 -0
- package/lib/content-page-repository/ContentPageRepository.js.map +1 -1
- package/lib/content-page-repository/index.d.ts +1 -0
- package/lib/content-page-repository/index.js +1 -0
- package/lib/content-page-repository/index.js.map +1 -1
- package/lib/content-page-repository/toMobilePage.d.ts +2 -0
- package/lib/content-page-repository/toMobilePage.js +20 -0
- package/lib/content-page-repository/toMobilePage.js.map +1 -0
- package/lib/index.d.ts +5 -2
- package/lib/index.js +3 -1
- package/lib/index.js.map +1 -1
- package/lib/types.d.ts +14 -0
- package/lib/utils/getCurrentPosition.d.ts +1 -0
- package/lib/utils/getCurrentPosition.js +2 -0
- package/lib/utils/getCurrentPosition.js.map +1 -0
- package/package.json +9 -3
- package/src/BaseTile.tsx +87 -0
- package/src/Blocks.ts +3 -2
- package/src/ContentPage.fixture.tsx +23 -3
- package/src/ContentPage.page.json +255 -77
- package/src/ContentPage.tsx +10 -5
- package/src/ContentPageContext.tsx +3 -0
- package/src/ExchangeRateTile.tsx +7 -5
- package/src/Footer/Footer.mobile.tsx +12 -0
- package/src/Header/Header.fixture.tsx +1 -1
- package/src/Header/Header.tsx +6 -2
- package/src/Header/HeaderContent.ts +1 -1
- package/src/Header/HeaderSecondaryMenu.tsx +48 -34
- package/src/MobileBlocks.ts +25 -0
- package/src/ProductBlock.fixture.tsx +3 -2
- package/src/ProductBlock.tsx +25 -3
- package/src/ProductBlockInner.tsx +13 -70
- package/src/ProductTile.fixture.tsx +31 -23
- package/src/ProductTile.tsx +21 -70
- package/src/Tile.fixture.tsx +39 -29
- package/src/Tile.tsx +10 -79
- package/src/api/DaDataAPI.ts +34 -0
- package/src/api/LikeAPI.ts +12 -9
- package/src/content-page-repository/ContentPageRepository.ts +7 -0
- package/src/content-page-repository/index.ts +1 -0
- package/src/content-page-repository/toMobilePage.ts +21 -0
- package/src/index.ts +14 -2
- package/src/setup-fixture.ts +15 -0
- package/src/types.ts +17 -0
- package/src/utils/getCurrentPosition.ts +4 -0
package/src/BaseTile.tsx
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { JSX } from '@redneckz/uni-jsx';
|
|
2
|
+
import { Img } from './Img';
|
|
3
|
+
import type { BlockVersion, Picture, UniBlockProps } from './types';
|
|
4
|
+
import { BlockItem } from './ui-kit/BlockItem';
|
|
5
|
+
import type { ButtonProps } from './ui-kit/Button';
|
|
6
|
+
import { Button } from './ui-kit/Button';
|
|
7
|
+
import { useLink } from './useLink';
|
|
8
|
+
|
|
9
|
+
export interface BaseTileContent {
|
|
10
|
+
title?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
image?: Picture;
|
|
13
|
+
items?: string[];
|
|
14
|
+
buttons?: ButtonProps[];
|
|
15
|
+
version?: BlockVersion;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface BaseTileProps extends BaseTileContent, UniBlockProps {}
|
|
19
|
+
const TITLE_CLASSES = 'font-medium m-0 mb-4 whitespace-pre-wrap max-w-[600px]';
|
|
20
|
+
|
|
21
|
+
export const BaseTile = JSX<BaseTileProps>(
|
|
22
|
+
({
|
|
23
|
+
className,
|
|
24
|
+
context,
|
|
25
|
+
title,
|
|
26
|
+
description,
|
|
27
|
+
children,
|
|
28
|
+
buttons,
|
|
29
|
+
image,
|
|
30
|
+
items,
|
|
31
|
+
version = 'primary',
|
|
32
|
+
}) => {
|
|
33
|
+
const router = context.useRouter();
|
|
34
|
+
const { handlerDecorator } = context;
|
|
35
|
+
return (
|
|
36
|
+
<div className={`font-sans flex flex-col grow h-full`}>
|
|
37
|
+
{title && renderTitle(title, className)}
|
|
38
|
+
<div className="flex grow justify-between mt-4">
|
|
39
|
+
<div className="flex flex-col justify-between items-start">
|
|
40
|
+
<div>
|
|
41
|
+
{description ? (
|
|
42
|
+
<div className="font-normal text-base max-w-[600px] mb-6">{description}</div>
|
|
43
|
+
) : null}
|
|
44
|
+
{children}
|
|
45
|
+
{items?.length ? renderItems(items, version) : null}
|
|
46
|
+
</div>
|
|
47
|
+
{buttons?.length ? (
|
|
48
|
+
<div className="flex mt-6 gap-4">
|
|
49
|
+
{buttons.map((button, index) =>
|
|
50
|
+
renderButton(useLink({ router, handlerDecorator }, button), index),
|
|
51
|
+
)}
|
|
52
|
+
</div>
|
|
53
|
+
) : null}
|
|
54
|
+
</div>
|
|
55
|
+
{image?.src && <Img className="mt-auto" image={image} />}
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
},
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
function renderTitle(title: string, className: string = '') {
|
|
63
|
+
const colSpanPrefix = 'col-span-';
|
|
64
|
+
const colSpanStr = className.split(/\s+/).find((_) => _.startsWith(colSpanPrefix));
|
|
65
|
+
const colSpan = colSpanStr ? parseInt(colSpanStr.substring(colSpanPrefix.length), 10) : 12;
|
|
66
|
+
if (colSpan <= 4) {
|
|
67
|
+
return <h3 className={`${TITLE_CLASSES} text-title-xs`}>{title}</h3>;
|
|
68
|
+
} else if (colSpan <= 8) {
|
|
69
|
+
return <h3 className={`${TITLE_CLASSES} text-title-sm`}>{title}</h3>;
|
|
70
|
+
} else {
|
|
71
|
+
return <h2 className={`${TITLE_CLASSES} text-title`}>{title}</h2>;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function renderItems(items: string[] = [], version?: BlockVersion) {
|
|
76
|
+
return (
|
|
77
|
+
<section className="max-w-[600px]" role="list">
|
|
78
|
+
{items.map((_, i) => (
|
|
79
|
+
<BlockItem key={String(i)} className={i ? 'mt-2.5' : ''} text={_} version={version} />
|
|
80
|
+
))}
|
|
81
|
+
</section>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function renderButton(button: ButtonProps, i: number) {
|
|
86
|
+
return button?.text ? <Button key={String(i)} {...button} version={button.version} /> : null;
|
|
87
|
+
}
|
package/src/Blocks.ts
CHANGED
|
@@ -9,7 +9,8 @@ import { ProductBlockInnerContent } from './ProductBlockInner';
|
|
|
9
9
|
import { ProductGallery, ProductGalleryContent } from './ProductGallery';
|
|
10
10
|
import { StepsBlock, StepsBlockContent } from './StepsBlock';
|
|
11
11
|
import { ProductTile, ProductTileContent } from './ProductTile';
|
|
12
|
-
import {
|
|
12
|
+
import { BaseTileContent } from './BaseTile';
|
|
13
|
+
import { Tile } from './Tile';
|
|
13
14
|
|
|
14
15
|
export const Blocks = {
|
|
15
16
|
Header,
|
|
@@ -29,7 +30,7 @@ export type BlockContent =
|
|
|
29
30
|
| HeaderContent
|
|
30
31
|
| FooterContent
|
|
31
32
|
| PlaceholderContent
|
|
32
|
-
|
|
|
33
|
+
| BaseTileContent
|
|
33
34
|
| ProductTileContent
|
|
34
35
|
| ProductBlockInnerContent
|
|
35
36
|
| StepsBlockContent
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { context } from './setup-fixture';
|
|
2
2
|
|
|
3
|
+
import { Blocks } from './Blocks';
|
|
4
|
+
import { toMobilePage } from './content-page-repository/toMobilePage';
|
|
3
5
|
import { BlockDecorator, ContentPage } from './ContentPage';
|
|
6
|
+
import { MobileBlocks } from './MobileBlocks';
|
|
7
|
+
import type { ContentPageDef } from './types';
|
|
8
|
+
|
|
9
|
+
const data = require('./ContentPage.page.json');
|
|
4
10
|
|
|
5
11
|
const blockDecorator: BlockDecorator = ({ blockClassName, block, render }, i) => (
|
|
6
12
|
<div
|
|
@@ -23,14 +29,28 @@ const blockDecorator: BlockDecorator = ({ blockClassName, block, render }, i) =>
|
|
|
23
29
|
|
|
24
30
|
export default {
|
|
25
31
|
default: (
|
|
26
|
-
<ContentPage
|
|
32
|
+
<ContentPage
|
|
33
|
+
className="bg-main"
|
|
34
|
+
context={context}
|
|
35
|
+
blocksRegistry={Blocks}
|
|
36
|
+
data={data as ContentPageDef}
|
|
37
|
+
/>
|
|
38
|
+
),
|
|
39
|
+
mobile: (
|
|
40
|
+
<ContentPage
|
|
41
|
+
className="bg-secondary-text"
|
|
42
|
+
context={context}
|
|
43
|
+
blocksRegistry={MobileBlocks}
|
|
44
|
+
data={toMobilePage(data as ContentPageDef)}
|
|
45
|
+
/>
|
|
27
46
|
),
|
|
28
47
|
editor: (
|
|
29
48
|
<div style={{ background: "url('grid.svg')", height: '100%' }}>
|
|
30
49
|
<ContentPage
|
|
31
|
-
context={context}
|
|
32
50
|
className="bg-transparent"
|
|
33
|
-
|
|
51
|
+
context={context}
|
|
52
|
+
blocksRegistry={Blocks}
|
|
53
|
+
data={data as ContentPageDef}
|
|
34
54
|
blockDecorator={blockDecorator}
|
|
35
55
|
/>
|
|
36
56
|
</div>
|
|
@@ -42,7 +42,6 @@
|
|
|
42
42
|
},
|
|
43
43
|
"productBlock": {
|
|
44
44
|
"title": "Ставка от 12,5% годовых на срок до 5 лет!»",
|
|
45
|
-
"description": "Кредит наличными без залога и поручительства. Потребительский кредит на любые цели. Нужен только паспорт.",
|
|
46
45
|
"items": [
|
|
47
46
|
"Потребительский кредит по специальной процентной ставке",
|
|
48
47
|
"Получите деньги без залога и поручительства",
|
|
@@ -62,8 +61,8 @@
|
|
|
62
61
|
"format": "webp",
|
|
63
62
|
"alt": "Кредит наличными",
|
|
64
63
|
"size": {
|
|
65
|
-
"width":
|
|
66
|
-
"height":
|
|
64
|
+
"width": 280,
|
|
65
|
+
"height": 280
|
|
67
66
|
}
|
|
68
67
|
}
|
|
69
68
|
}
|
|
@@ -94,8 +93,8 @@
|
|
|
94
93
|
"title": "Рабочий",
|
|
95
94
|
"format": "webp",
|
|
96
95
|
"size": {
|
|
97
|
-
"width":
|
|
98
|
-
"height":
|
|
96
|
+
"width": 280,
|
|
97
|
+
"height": 280
|
|
99
98
|
}
|
|
100
99
|
}
|
|
101
100
|
}
|
|
@@ -126,8 +125,8 @@
|
|
|
126
125
|
"title": "Кредитка",
|
|
127
126
|
"format": "webp",
|
|
128
127
|
"size": {
|
|
129
|
-
"width":
|
|
130
|
-
"height":
|
|
128
|
+
"width": 280,
|
|
129
|
+
"height": 280
|
|
131
130
|
}
|
|
132
131
|
}
|
|
133
132
|
}
|
|
@@ -158,8 +157,8 @@
|
|
|
158
157
|
"title": "Кредитка",
|
|
159
158
|
"format": "webp",
|
|
160
159
|
"size": {
|
|
161
|
-
"width":
|
|
162
|
-
"height":
|
|
160
|
+
"width": 280,
|
|
161
|
+
"height": 280
|
|
163
162
|
}
|
|
164
163
|
}
|
|
165
164
|
}
|
|
@@ -177,11 +176,13 @@
|
|
|
177
176
|
"Кредиты наличными на любые цели",
|
|
178
177
|
"Получите деньги без залога и поручителей"
|
|
179
178
|
],
|
|
180
|
-
"
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
179
|
+
"buttons": [
|
|
180
|
+
{
|
|
181
|
+
"text": "Подробнее",
|
|
182
|
+
"href": "/credit-cards",
|
|
183
|
+
"version": "secondary"
|
|
184
|
+
}
|
|
185
|
+
],
|
|
185
186
|
"image": {
|
|
186
187
|
"src": "money-1.png",
|
|
187
188
|
"title": "деньги",
|
|
@@ -191,6 +192,9 @@
|
|
|
191
192
|
"height": 220
|
|
192
193
|
}
|
|
193
194
|
}
|
|
195
|
+
},
|
|
196
|
+
"mobile": {
|
|
197
|
+
"style": ["col-span-12"]
|
|
194
198
|
}
|
|
195
199
|
},
|
|
196
200
|
{
|
|
@@ -200,12 +204,17 @@
|
|
|
200
204
|
"content": {
|
|
201
205
|
"title": "Ипотека",
|
|
202
206
|
"description": "Широкий выбор ипотечных программ с государственной поддержкой. Специальный предложения от 12,2 %",
|
|
203
|
-
"
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
207
|
+
"buttons": [
|
|
208
|
+
{
|
|
209
|
+
"text": "Подробнее",
|
|
210
|
+
"href": "/credits",
|
|
211
|
+
"version": "secondary"
|
|
212
|
+
}
|
|
213
|
+
],
|
|
208
214
|
"promo": true
|
|
215
|
+
},
|
|
216
|
+
"mobile": {
|
|
217
|
+
"style": ["col-span-12"]
|
|
209
218
|
}
|
|
210
219
|
},
|
|
211
220
|
{
|
|
@@ -214,11 +223,13 @@
|
|
|
214
223
|
"content": {
|
|
215
224
|
"title": "Банковские пластиковые карты",
|
|
216
225
|
"items": ["Счета в разных валютах", "Бесплатное обслуживание", "Кэшбэк до 15% от покупок"],
|
|
217
|
-
"
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
226
|
+
"buttons": [
|
|
227
|
+
{
|
|
228
|
+
"text": "Подробнее",
|
|
229
|
+
"href": "/credits",
|
|
230
|
+
"version": "secondary"
|
|
231
|
+
}
|
|
232
|
+
],
|
|
222
233
|
"image": {
|
|
223
234
|
"src": "credit-card-1.png",
|
|
224
235
|
"title": "Кредитка",
|
|
@@ -228,6 +239,9 @@
|
|
|
228
239
|
"height": 220
|
|
229
240
|
}
|
|
230
241
|
}
|
|
242
|
+
},
|
|
243
|
+
"mobile": {
|
|
244
|
+
"style": ["col-span-12"]
|
|
231
245
|
}
|
|
232
246
|
},
|
|
233
247
|
{
|
|
@@ -236,11 +250,13 @@
|
|
|
236
250
|
"content": {
|
|
237
251
|
"title": "Премиальные продукты",
|
|
238
252
|
"description": "Выделенные зоны обслуживания и персональный финансовый консультант. Полный спектр премиальных продуктов, подчеркивающих ваш статус",
|
|
239
|
-
"
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
253
|
+
"buttons": [
|
|
254
|
+
{
|
|
255
|
+
"text": "Подробнее",
|
|
256
|
+
"href": "/credits",
|
|
257
|
+
"version": "secondary"
|
|
258
|
+
}
|
|
259
|
+
],
|
|
244
260
|
"image": {
|
|
245
261
|
"src": "column-1.png",
|
|
246
262
|
"alt": "Column",
|
|
@@ -250,6 +266,9 @@
|
|
|
250
266
|
"height": 220
|
|
251
267
|
}
|
|
252
268
|
}
|
|
269
|
+
},
|
|
270
|
+
"mobile": {
|
|
271
|
+
"style": ["col-span-12"]
|
|
253
272
|
}
|
|
254
273
|
},
|
|
255
274
|
{
|
|
@@ -263,11 +282,13 @@
|
|
|
263
282
|
"Площадки для создания комфортной жизни за городом",
|
|
264
283
|
"Подробная база вакансий для жителей сельской местности"
|
|
265
284
|
],
|
|
266
|
-
"
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
285
|
+
"buttons": [
|
|
286
|
+
{
|
|
287
|
+
"text": "Подробнее",
|
|
288
|
+
"href": "/credits",
|
|
289
|
+
"version": "secondary"
|
|
290
|
+
}
|
|
291
|
+
],
|
|
271
292
|
"image": {
|
|
272
293
|
"src": "globe-1.png",
|
|
273
294
|
"title": "Глобус",
|
|
@@ -285,11 +306,16 @@
|
|
|
285
306
|
"content": {
|
|
286
307
|
"title": "Драгоценные металлы",
|
|
287
308
|
"items": ["Счета в драгоценных металлах", "Слитки и монеты из драгоценных металлов"],
|
|
288
|
-
"
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
309
|
+
"buttons": [
|
|
310
|
+
{
|
|
311
|
+
"text": "Подробнее",
|
|
312
|
+
"href": "/credits",
|
|
313
|
+
"version": "secondary"
|
|
314
|
+
}
|
|
315
|
+
]
|
|
316
|
+
},
|
|
317
|
+
"mobile": {
|
|
318
|
+
"style": ["col-span-12"]
|
|
293
319
|
}
|
|
294
320
|
},
|
|
295
321
|
{
|
|
@@ -298,11 +324,16 @@
|
|
|
298
324
|
"content": {
|
|
299
325
|
"title": "Банковские ячейки",
|
|
300
326
|
"items": ["Полная конфиденциальность", "Разный размер ячеек", "Оформление доверенностей"],
|
|
301
|
-
"
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
327
|
+
"buttons": [
|
|
328
|
+
{
|
|
329
|
+
"text": "Подробнее",
|
|
330
|
+
"href": "/credits",
|
|
331
|
+
"version": "secondary"
|
|
332
|
+
}
|
|
333
|
+
]
|
|
334
|
+
},
|
|
335
|
+
"mobile": {
|
|
336
|
+
"style": ["col-span-12"]
|
|
306
337
|
}
|
|
307
338
|
},
|
|
308
339
|
{
|
|
@@ -315,11 +346,16 @@
|
|
|
315
346
|
"Минимальная сумма вклада от 3000 Р",
|
|
316
347
|
"Минимальный срок вклада от 1 месяца"
|
|
317
348
|
],
|
|
318
|
-
"
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
349
|
+
"buttons": [
|
|
350
|
+
{
|
|
351
|
+
"text": "Подробнее",
|
|
352
|
+
"href": "/credits",
|
|
353
|
+
"version": "secondary"
|
|
354
|
+
}
|
|
355
|
+
]
|
|
356
|
+
},
|
|
357
|
+
"mobile": {
|
|
358
|
+
"style": ["col-span-12"]
|
|
323
359
|
}
|
|
324
360
|
},
|
|
325
361
|
{
|
|
@@ -329,16 +365,24 @@
|
|
|
329
365
|
"title": "Акции и спецпредложения",
|
|
330
366
|
"version": "secondary",
|
|
331
367
|
"description": "Пенсионный кредит по специальной процентной ставке",
|
|
332
|
-
"
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
368
|
+
"buttons": [
|
|
369
|
+
{
|
|
370
|
+
"text": "Все акции",
|
|
371
|
+
"href": "/credits",
|
|
372
|
+
"version": "secondary"
|
|
373
|
+
}
|
|
374
|
+
]
|
|
375
|
+
},
|
|
376
|
+
"mobile": {
|
|
377
|
+
"hidden": true
|
|
337
378
|
}
|
|
338
379
|
},
|
|
339
380
|
{
|
|
340
381
|
"type": "ExchangeRateTile",
|
|
341
|
-
"style": ["col-span-4"]
|
|
382
|
+
"style": ["col-span-4"],
|
|
383
|
+
"mobile": {
|
|
384
|
+
"style": ["col-span-12"]
|
|
385
|
+
}
|
|
342
386
|
},
|
|
343
387
|
{
|
|
344
388
|
"type": "MobileAppTile",
|
|
@@ -348,6 +392,9 @@
|
|
|
348
392
|
"href": "https://rshbnaturaldbo.onelink.me/qhkF/f182074f?af_qr=true",
|
|
349
393
|
"src": "data:image/png;base64,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"
|
|
350
394
|
}
|
|
395
|
+
},
|
|
396
|
+
"mobile": {
|
|
397
|
+
"style": ["col-span-12"]
|
|
351
398
|
}
|
|
352
399
|
},
|
|
353
400
|
{
|
|
@@ -357,6 +404,67 @@
|
|
|
357
404
|
"title": "Неизвестный блок"
|
|
358
405
|
}
|
|
359
406
|
},
|
|
407
|
+
{
|
|
408
|
+
"type": "ProductBlock",
|
|
409
|
+
"style": ["col-span-12"],
|
|
410
|
+
"content": {
|
|
411
|
+
"title": "Потребительский кредит наличными",
|
|
412
|
+
"description": "Кредит наличными без залога и поручительства. Потребительский кредит на любые цели. Нужен только паспорт.",
|
|
413
|
+
"breadcrumbs": [
|
|
414
|
+
{
|
|
415
|
+
"text": "Главная",
|
|
416
|
+
"href": "/"
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
"text": "Кредитные карты",
|
|
420
|
+
"href": "/credit"
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
"text": "Кредитная карта Своя Union Pay"
|
|
424
|
+
}
|
|
425
|
+
],
|
|
426
|
+
"benefits": [
|
|
427
|
+
{
|
|
428
|
+
"label": "До 5 млн ₽",
|
|
429
|
+
"description": "Кредитный лимит",
|
|
430
|
+
"icon": "EmptyWalletIcon"
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
"label": "От 16,9%",
|
|
434
|
+
"description": "Ставка по кредиту",
|
|
435
|
+
"icon": "PercentageSquareIcon"
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
"label": "До 5 лет",
|
|
439
|
+
"description": "Срок кредитования",
|
|
440
|
+
"icon": "CalendarIcon"
|
|
441
|
+
}
|
|
442
|
+
],
|
|
443
|
+
"buttons": [
|
|
444
|
+
{
|
|
445
|
+
"href": "https://rshb.ru",
|
|
446
|
+
"text": "Оформить карту",
|
|
447
|
+
"target": "_blank",
|
|
448
|
+
"version": "primary"
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"href": "https://rshb.ru",
|
|
452
|
+
"text": "Подробнее",
|
|
453
|
+
"target": "_blank",
|
|
454
|
+
"version": "secondary"
|
|
455
|
+
}
|
|
456
|
+
],
|
|
457
|
+
"image": {
|
|
458
|
+
"src": "money-1.png",
|
|
459
|
+
"alt": "Кредиты в РСХБ",
|
|
460
|
+
"format": "webp",
|
|
461
|
+
"size": {
|
|
462
|
+
"width": 280,
|
|
463
|
+
"height": 280
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
},
|
|
360
468
|
{
|
|
361
469
|
"type": "ProductTile",
|
|
362
470
|
"style": ["col-span-6"],
|
|
@@ -377,11 +485,13 @@
|
|
|
377
485
|
"description": "до 5 лет"
|
|
378
486
|
}
|
|
379
487
|
],
|
|
380
|
-
"
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
488
|
+
"buttons": [
|
|
489
|
+
{
|
|
490
|
+
"text": "Подробнее",
|
|
491
|
+
"href": "/credit-cards",
|
|
492
|
+
"version": "secondary"
|
|
493
|
+
}
|
|
494
|
+
],
|
|
385
495
|
"image": {
|
|
386
496
|
"src": "card-with-diamond.png",
|
|
387
497
|
"alt": "Кредиты в РСХБ",
|
|
@@ -391,6 +501,9 @@
|
|
|
391
501
|
"height": 220
|
|
392
502
|
}
|
|
393
503
|
}
|
|
504
|
+
},
|
|
505
|
+
"mobile": {
|
|
506
|
+
"style": ["col-span-12"]
|
|
394
507
|
}
|
|
395
508
|
},
|
|
396
509
|
{
|
|
@@ -413,12 +526,14 @@
|
|
|
413
526
|
"description": "до 3 лет"
|
|
414
527
|
}
|
|
415
528
|
],
|
|
416
|
-
"
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
529
|
+
"buttons": [
|
|
530
|
+
{
|
|
531
|
+
"text": "Подробнее",
|
|
532
|
+
"href": "/credit-cards",
|
|
533
|
+
"target": "_blank",
|
|
534
|
+
"version": "secondary"
|
|
535
|
+
}
|
|
536
|
+
],
|
|
422
537
|
"image": {
|
|
423
538
|
"src": "letter-with-money.png",
|
|
424
539
|
"alt": "Пенсионный кредит в РСХБ",
|
|
@@ -428,6 +543,9 @@
|
|
|
428
543
|
"height": 220
|
|
429
544
|
}
|
|
430
545
|
}
|
|
546
|
+
},
|
|
547
|
+
"mobile": {
|
|
548
|
+
"style": ["col-span-12"]
|
|
431
549
|
}
|
|
432
550
|
},
|
|
433
551
|
{
|
|
@@ -450,12 +568,14 @@
|
|
|
450
568
|
"description": "до 10 лет"
|
|
451
569
|
}
|
|
452
570
|
],
|
|
453
|
-
"
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
571
|
+
"buttons": [
|
|
572
|
+
{
|
|
573
|
+
"text": "Подробнее",
|
|
574
|
+
"href": "/credit-cards",
|
|
575
|
+
"target": "_blank",
|
|
576
|
+
"version": "secondary"
|
|
577
|
+
}
|
|
578
|
+
],
|
|
459
579
|
"image": {
|
|
460
580
|
"src": "building.png",
|
|
461
581
|
"alt": "Кредит под залог недвижимости в РСХБ",
|
|
@@ -465,6 +585,9 @@
|
|
|
465
585
|
"height": 220
|
|
466
586
|
}
|
|
467
587
|
}
|
|
588
|
+
},
|
|
589
|
+
"mobile": {
|
|
590
|
+
"style": ["col-span-12"]
|
|
468
591
|
}
|
|
469
592
|
},
|
|
470
593
|
{
|
|
@@ -488,14 +611,69 @@
|
|
|
488
611
|
"description": "до 150 лет"
|
|
489
612
|
}
|
|
490
613
|
],
|
|
491
|
-
"
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
614
|
+
"buttons": [
|
|
615
|
+
{
|
|
616
|
+
"text": "Подробнее",
|
|
617
|
+
"href": "/credit-cards",
|
|
618
|
+
"target": "_blank",
|
|
619
|
+
"version": "secondary"
|
|
620
|
+
}
|
|
621
|
+
]
|
|
622
|
+
},
|
|
623
|
+
"mobile": {
|
|
624
|
+
"style": ["col-span-12"]
|
|
625
|
+
}
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
"type": "Tile",
|
|
629
|
+
"style": ["col-span-12"],
|
|
630
|
+
"content": {
|
|
631
|
+
"title": "Рефинансирование кредитов",
|
|
632
|
+
"items": [
|
|
633
|
+
"Без справок и документов из других банков",
|
|
634
|
+
"Погашение ранее взятых кредитов в любых банках",
|
|
635
|
+
"Рефинансировать можно кредит физического лица, кредитную карту, микрозайм или ипотеку"
|
|
636
|
+
],
|
|
637
|
+
"buttons": [
|
|
638
|
+
{
|
|
639
|
+
"text": "Подробнее",
|
|
640
|
+
"href": "/credit-cards",
|
|
641
|
+
"target": "_blank",
|
|
642
|
+
"version": "secondary"
|
|
643
|
+
}
|
|
644
|
+
],
|
|
645
|
+
"image": {
|
|
646
|
+
"src": "money-2.png",
|
|
647
|
+
"title": "Деньги",
|
|
648
|
+
"format": "webp",
|
|
649
|
+
"size": {
|
|
650
|
+
"width": 200,
|
|
651
|
+
"height": 200
|
|
652
|
+
}
|
|
496
653
|
}
|
|
497
654
|
}
|
|
498
655
|
},
|
|
656
|
+
{
|
|
657
|
+
"type": "StepsBlock",
|
|
658
|
+
"style": ["col-span-12"],
|
|
659
|
+
"content": {
|
|
660
|
+
"title": "Рассчитайте условия на онлайн-калькуляторе и оставьте заявку на потребительский кредит",
|
|
661
|
+
"steps": [
|
|
662
|
+
{
|
|
663
|
+
"label": "Заявка на кредит",
|
|
664
|
+
"description": "Оставьте онлайн-заявку на потребительский кредит"
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
"label": "В случае одобрения",
|
|
668
|
+
"description": "Менеджер свяжется с вами и согласует встречу"
|
|
669
|
+
},
|
|
670
|
+
{
|
|
671
|
+
"label": "Получение наличных",
|
|
672
|
+
"description": "Получите наличные в отделении банка"
|
|
673
|
+
}
|
|
674
|
+
]
|
|
675
|
+
}
|
|
676
|
+
},
|
|
499
677
|
{
|
|
500
678
|
"type": "Footer",
|
|
501
679
|
"style": ["col-span-12"],
|