profinansy-ui-lib 4.1.22 → 4.1.23
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/api/banner/banner.typed.d.ts +13 -1
- package/dist/api/quizFunnel/quizFunnel.bitrix.api.d.ts +10 -0
- package/dist/api/quizFunnel/quizFunnel.bitrix.const.d.ts +1 -0
- package/dist/api/quizFunnel/quizFunnel.bitrix.typed.d.ts +29 -0
- package/dist/api/quizFunnel/quizFunnel.enkod.api.d.ts +6 -0
- package/dist/api/quizFunnel/quizFunnel.enkod.const.d.ts +2 -0
- package/dist/api/quizFunnel/quizFunnel.enkod.typed.d.ts +15 -0
- package/dist/api/quizFunnel/quizFunnel.tilda.const.d.ts +2 -0
- package/dist/api/quizFunnel/quizFunnel.tilda.typed.d.ts +13 -0
- package/dist/components/blocks/QuizFunnel/QuizFunnel.d.ts +2 -0
- package/dist/components/blocks/QuizFunnel/QuizFunnel.styled.d.ts +145 -0
- package/dist/components/blocks/QuizFunnel/QuizFunnel.typed.d.ts +136 -0
- package/dist/components/blocks/QuizFunnel/constants/QuizFunnel.const.d.ts +49 -0
- package/dist/components/blocks/QuizFunnel/constants/QuizFunnel.layout.const.d.ts +35 -0
- package/dist/components/blocks/QuizFunnel/constants/QuizFunnel.metrika.const.d.ts +42 -0
- package/dist/components/blocks/QuizFunnel/constants/index.d.ts +4 -0
- package/dist/components/blocks/QuizFunnel/hooks/index.d.ts +5 -0
- package/dist/components/blocks/QuizFunnel/hooks/useQuizFunnelBanner.d.ts +15 -0
- package/dist/components/blocks/QuizFunnel/hooks/useQuizFunnelBitrix.d.ts +11 -0
- package/dist/components/blocks/QuizFunnel/hooks/useQuizFunnelLayout.d.ts +5 -0
- package/dist/components/blocks/QuizFunnel/index.d.ts +21 -0
- package/dist/components/blocks/QuizFunnel/utils/QuizFunnel.funnels.d.ts +11 -0
- package/dist/components/blocks/QuizFunnel/utils/index.d.ts +13 -0
- package/dist/components/blocks/QuizFunnel/utils/quizFunnel.banner.d.ts +26 -0
- package/dist/components/blocks/QuizFunnel/utils/quizFunnel.bitrix.d.ts +20 -0
- package/dist/components/blocks/QuizFunnel/utils/quizFunnel.enkod.d.ts +17 -0
- package/dist/components/blocks/QuizFunnel/utils/quizFunnel.leadForm.validation.d.ts +29 -0
- package/dist/components/blocks/QuizFunnel/utils/quizFunnel.messenger.d.ts +33 -0
- package/dist/components/blocks/QuizFunnel/utils/quizFunnel.metrika.d.ts +8 -0
- package/dist/components/blocks/QuizFunnel/utils/quizFunnel.metrika.funnels.d.ts +8 -0
- package/dist/components/blocks/QuizFunnel/utils/quizFunnel.referrer.d.ts +12 -0
- package/dist/components/blocks/QuizFunnel/utils/quizFunnel.steps.d.ts +11 -0
- package/dist/components/blocks/QuizFunnel/utils/quizFunnel.tilda.d.ts +18 -0
- package/dist/components/blocks/QuizFunnel/utils/quizFunnel.user.d.ts +13 -0
- package/dist/components/uikit/PhoneInput/PhoneInput.const.d.ts +2 -0
- package/dist/components/uikit/PhoneInput/PhoneInput.d.ts +3 -0
- package/dist/components/uikit/PhoneInput/PhoneInput.styled.d.ts +7 -0
- package/dist/components/uikit/PhoneInput/PhoneInput.typed.d.ts +20 -0
- package/dist/components/uikit/PhoneInput/index.d.ts +2 -0
- package/dist/components/uikit/PhoneInput/phoneInputChevron.const.d.ts +2 -0
- package/dist/components/uikit/Tooltip/Tooltip.d.ts +2 -1
- package/dist/components/uikit/Tooltip/Tooltip.styled.d.ts +1 -0
- package/dist/components/uikit/Tooltip/Tooltip.typed.d.ts +2 -0
- package/dist/components/uikit/Typography/Typography.typed.d.ts +1 -1
- package/dist/fonts/unbounded-cyrillic-ext.woff2 +0 -0
- package/dist/fonts/unbounded-cyrillic.woff2 +0 -0
- package/dist/fonts/unbounded-latin-ext.woff2 +0 -0
- package/dist/fonts/unbounded-latin.woff2 +0 -0
- package/dist/index.d.ts +4 -0
- package/dist/profinansy-ui-lib.cjs +2732 -1082
- package/dist/profinansy-ui-lib.cjs.map +1 -1
- package/dist/profinansy-ui-lib.css +1 -0
- package/dist/profinansy-ui-lib.es.js +15979 -11451
- package/dist/profinansy-ui-lib.es.js.map +1 -1
- package/dist/theme/fonts/UnboundedFontFace.d.ts +6 -0
- package/dist/theme/fonts/index.d.ts +1 -0
- package/dist/theme/theme.const.d.ts +4 -0
- package/package.json +3 -1
|
@@ -1,8 +1,20 @@
|
|
|
1
|
+
export interface IBannerRuleOr {
|
|
2
|
+
has_registration?: boolean | null;
|
|
3
|
+
has_profinansy?: boolean | null;
|
|
4
|
+
has_course?: boolean | null;
|
|
5
|
+
tariff_id?: number | null;
|
|
6
|
+
product_id?: number | null;
|
|
7
|
+
stream_number?: number | null;
|
|
8
|
+
}
|
|
1
9
|
export interface IBanner {
|
|
2
10
|
id: number;
|
|
3
11
|
banner_platform_id: number;
|
|
4
12
|
name: string;
|
|
5
13
|
url: string;
|
|
14
|
+
rules?: {
|
|
15
|
+
rules_and?: unknown[];
|
|
16
|
+
rules_or?: IBannerRuleOr[];
|
|
17
|
+
};
|
|
6
18
|
photos: {
|
|
7
19
|
'688X334'?: string;
|
|
8
20
|
'688X452'?: string;
|
|
@@ -40,7 +52,7 @@ export interface IBannerListItem {
|
|
|
40
52
|
id: number;
|
|
41
53
|
rules: {
|
|
42
54
|
rules_and: unknown[];
|
|
43
|
-
rules_or:
|
|
55
|
+
rules_or: IBannerRuleOr[];
|
|
44
56
|
};
|
|
45
57
|
ab_test: boolean;
|
|
46
58
|
banner_platform_id: number;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IQuizBitrixDealCheckPayload, IQuizBitrixDealSubmitPayload, TQuizBitrixDealResult } from './quizFunnel.bitrix.typed';
|
|
2
|
+
/**
|
|
3
|
+
* GET /webhook/quiz/deal/add — gate: клиент уже в CRM?
|
|
4
|
+
* 200 + success — не найден; 409 + duplicate — найден.
|
|
5
|
+
*/
|
|
6
|
+
export declare const checkQuizBitrixDeal: (payload: IQuizBitrixDealCheckPayload) => Promise<TQuizBitrixDealResult>;
|
|
7
|
+
/**
|
|
8
|
+
* POST /webhook/quiz/deal/add — полная заявка после формы квиза.
|
|
9
|
+
*/
|
|
10
|
+
export declare const submitQuizBitrixDeal: (payload: IQuizBitrixDealSubmitPayload) => Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const QUIZ_FUNNEL_BITRIX_DEAL_URL: string;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type TQuizBitrixDealStatus = 'success' | 'duplicate';
|
|
2
|
+
export interface IQuizBitrixDealResponse {
|
|
3
|
+
status: TQuizBitrixDealStatus;
|
|
4
|
+
message: string;
|
|
5
|
+
}
|
|
6
|
+
/** GET — проверка дубликата (gate) */
|
|
7
|
+
export interface IQuizBitrixDealCheckPayload {
|
|
8
|
+
email?: string;
|
|
9
|
+
phone?: string;
|
|
10
|
+
}
|
|
11
|
+
/** POST — отправка после формы */
|
|
12
|
+
export interface IQuizBitrixDealSubmitBasePayload {
|
|
13
|
+
url?: string;
|
|
14
|
+
fio?: string;
|
|
15
|
+
email?: string;
|
|
16
|
+
phone?: string;
|
|
17
|
+
referrer?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Базовые поля + пары «текст вопроса» → «текст ответа» */
|
|
20
|
+
export type IQuizBitrixDealSubmitPayload = IQuizBitrixDealSubmitBasePayload & Record<string, string>;
|
|
21
|
+
export type TQuizBitrixDealResult = {
|
|
22
|
+
skipped: true;
|
|
23
|
+
} | {
|
|
24
|
+
skipped: false;
|
|
25
|
+
httpStatus: number;
|
|
26
|
+
data: IQuizBitrixDealResponse | null;
|
|
27
|
+
isClientFound: boolean;
|
|
28
|
+
isClientNotFound: boolean;
|
|
29
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IApiSettings } from '../api';
|
|
2
|
+
import { IQuizEnkodSendPayload, IQuizEnkodSendResponse } from './quizFunnel.enkod.typed';
|
|
3
|
+
/**
|
|
4
|
+
* POST /api/auth/send/enkod — заголовок token (в т.ч. анонимный).
|
|
5
|
+
*/
|
|
6
|
+
export declare const sendQuizEnkodContact: (settings: IApiSettings, payload: IQuizEnkodSendPayload) => Promise<IQuizEnkodSendResponse>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** groups/tags: одно значение или массив */
|
|
2
|
+
export type TQuizEnkodCrmValue = string | string[];
|
|
3
|
+
/** Тело POST /api/auth/send/enkod */
|
|
4
|
+
export interface IQuizEnkodSendPayload {
|
|
5
|
+
email?: string;
|
|
6
|
+
phone?: string;
|
|
7
|
+
lastName?: string;
|
|
8
|
+
firstName?: string;
|
|
9
|
+
groups?: TQuizEnkodCrmValue;
|
|
10
|
+
tags?: TQuizEnkodCrmValue;
|
|
11
|
+
}
|
|
12
|
+
export interface IQuizEnkodSendResponse {
|
|
13
|
+
ok?: boolean;
|
|
14
|
+
[key: string]: unknown;
|
|
15
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Query save-tilda-contact2 */
|
|
2
|
+
export interface IQuizFunnelTildaContactQuery {
|
|
3
|
+
landos: string;
|
|
4
|
+
phone: string;
|
|
5
|
+
email: string;
|
|
6
|
+
name: string;
|
|
7
|
+
/** Внешний document.referrer (не с доменов наших проектов) */
|
|
8
|
+
referrer?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface IQuizFunnelTildaSaveContactResponse {
|
|
11
|
+
ok?: boolean;
|
|
12
|
+
id: number | string;
|
|
13
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const FloatingRoot: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
3
|
+
export declare const FloatingButtonText: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
4
|
+
export declare const FloatingButtonIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
5
|
+
export declare const FloatingButton: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, never>> & string;
|
|
6
|
+
export declare const ModalBody: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
7
|
+
export declare const StepImage: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, never>> & string;
|
|
8
|
+
export declare const StepImageWrap: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
9
|
+
export declare const StepContent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
10
|
+
export declare const StepActions: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
11
|
+
$withDivider?: boolean;
|
|
12
|
+
$introCompact?: boolean;
|
|
13
|
+
$questionCompact?: boolean;
|
|
14
|
+
$formCompact?: boolean;
|
|
15
|
+
$finalCompact?: boolean;
|
|
16
|
+
}>> & string;
|
|
17
|
+
export declare const IntroTitleAccent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
18
|
+
export declare const IntroDurationBadge: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
19
|
+
export declare const IntroSubtitleAccent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
20
|
+
export declare const IntroDesktopRoot: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
21
|
+
$bgUrl: string;
|
|
22
|
+
}>> & string;
|
|
23
|
+
export declare const IntroDesktopLayout: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
24
|
+
export declare const IntroDesktopPicPanel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
25
|
+
export declare const IntroDesktopPic: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, never>> & string;
|
|
26
|
+
export declare const IntroDesktopContentPanel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
27
|
+
export declare const IntroDesktopTextStack: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
28
|
+
export declare const IntroDesktopDuration: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
29
|
+
export declare const IntroDesktopTitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, never>> & string;
|
|
30
|
+
export declare const IntroDesktopTitleGroup: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
31
|
+
export declare const IntroDesktopTitleLine: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
32
|
+
export declare const IntroDesktopHeadline: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
33
|
+
export declare const IntroDesktopHeadlinePrimary: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
34
|
+
export declare const IntroDesktopHeadlineAccent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
35
|
+
export declare const IntroDesktopActions: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
36
|
+
export declare const IntroCompactLayout: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
37
|
+
export declare const IntroCompactHeroImage: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, never>> & string;
|
|
38
|
+
export declare const IntroCompactContent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
39
|
+
export declare const IntroCompactTitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, never>> & string;
|
|
40
|
+
export declare const IntroCompactHeadline: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
41
|
+
export declare const IntroCompactHeadlinePrimary: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
42
|
+
export declare const IntroCompactHeadlineAccent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
43
|
+
export declare const QuestionDesktopRoot: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
44
|
+
export declare const QuestionDesktopLayout: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
45
|
+
export declare const QuestionDesktopPicPanel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
46
|
+
export declare const QuestionDesktopPic: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, never>> & string;
|
|
47
|
+
export declare const QuestionDesktopContentPanel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
48
|
+
export declare const QuestionDesktopBody: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
49
|
+
export declare const QuestionDesktopFooter: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
50
|
+
export declare const QuestionCompactLayout: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
51
|
+
export declare const QuestionCompactHeroImage: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, never>> & string;
|
|
52
|
+
export declare const QuestionCompactContent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
53
|
+
export declare const BottomActions: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
54
|
+
$align?: 'end' | 'between';
|
|
55
|
+
$reverseOnMobile?: boolean;
|
|
56
|
+
}>> & string;
|
|
57
|
+
export declare const ProgressBlock: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
58
|
+
export declare const ProgressLabel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
59
|
+
export declare const ProgressSegments: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
60
|
+
export declare const ProgressSegment: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
61
|
+
$active?: boolean;
|
|
62
|
+
}>> & string;
|
|
63
|
+
export declare const AnswersList: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
64
|
+
export declare const AnswerOption: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>, {
|
|
65
|
+
$selected?: boolean;
|
|
66
|
+
}>> & string;
|
|
67
|
+
export declare const SplitLayout: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
68
|
+
export declare const SplitImagePanel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
69
|
+
$imageUrl?: string;
|
|
70
|
+
}>> & string;
|
|
71
|
+
export declare const SplitImageOverlayPanel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
72
|
+
$imageUrl: string;
|
|
73
|
+
}>> & string;
|
|
74
|
+
export declare const SplitImageOverlayContent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
75
|
+
export declare const SplitContentPanel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
76
|
+
$stretch?: boolean;
|
|
77
|
+
}>> & string;
|
|
78
|
+
export declare const DesktopPanelActions: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
79
|
+
export declare const FormStackLayout: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
80
|
+
export declare const FormDesktopLayout: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
81
|
+
export declare const FinalDesktopLayout: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
82
|
+
export declare const FinalHeroPanel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
83
|
+
$imageUrl: string;
|
|
84
|
+
}>> & string;
|
|
85
|
+
export declare const FinalCompactHeroPanel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
86
|
+
$imageUrl: string;
|
|
87
|
+
}>> & string;
|
|
88
|
+
export declare const FinalCompactTitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, never>> & string;
|
|
89
|
+
export declare const FinalCompactSubtitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, never>> & string;
|
|
90
|
+
export declare const FinalContentPanel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
91
|
+
export declare const FinalContentInner: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
92
|
+
export declare const FinalTitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, never>> & string;
|
|
93
|
+
export declare const FinalSubtitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, never>> & string;
|
|
94
|
+
export declare const FinalDesktopActions: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
95
|
+
export declare const FinalMessengerButtonsStack: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
96
|
+
export declare const FinalMessengerButton: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, {
|
|
97
|
+
$variant: 'telegram' | 'vk' | 'max';
|
|
98
|
+
}>> & string;
|
|
99
|
+
export declare const FinalMessengerButtonText: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
100
|
+
export declare const FinalMessengerButtonIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {
|
|
101
|
+
$variant: 'telegram' | 'vk' | 'max';
|
|
102
|
+
}>> & string;
|
|
103
|
+
export declare const FormHeroPanel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
104
|
+
$imageUrl?: string;
|
|
105
|
+
}>> & string;
|
|
106
|
+
export declare const FormHeroContent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
107
|
+
export declare const FormHeroCongrats: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
108
|
+
export declare const FormHeroGiftTitles: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
109
|
+
export declare const FormHeroBulletsBlock: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
110
|
+
export declare const FormHeroBulletsLabel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
111
|
+
export declare const FormHeroBullets: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLUListElement>, HTMLUListElement>, never>> & string;
|
|
112
|
+
export declare const FormContentPanel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
113
|
+
export declare const FormContentInner: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
114
|
+
export declare const FormTitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, never>> & string;
|
|
115
|
+
export declare const FormPhoneField: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
116
|
+
export declare const AgreementCheckboxWrap: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
117
|
+
$hasError?: boolean;
|
|
118
|
+
}>> & string;
|
|
119
|
+
export declare const AgreementsList: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
120
|
+
export declare const AgreementText: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
121
|
+
export declare const AgreementLink: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, never>> & string;
|
|
122
|
+
export declare const FormActions: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
123
|
+
export declare const FormHeroBg: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
124
|
+
export declare const FormHeroText: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
125
|
+
export declare const Fields: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
126
|
+
export declare const GiftBox: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
127
|
+
export declare const GiftBoxIconWrap: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
128
|
+
export declare const GiftBoxIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
129
|
+
export declare const GiftBoxText: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
130
|
+
export declare const FinalInfoBox: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
131
|
+
export declare const ManagerHintRow: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
132
|
+
export declare const ManagerHintIconWrap: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
133
|
+
export declare const ManagerHintIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
134
|
+
export declare const ManagerHintText: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
135
|
+
/** На compact Tooltip не должен быть block — иначе ссылка уезжает на новую строку */
|
|
136
|
+
export declare const ManagerHintTooltipWrap: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
137
|
+
export declare const ManagerTooltipList: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
138
|
+
export declare const ManagerTooltipItem: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, never>> & string;
|
|
139
|
+
export declare const ManagerTooltipItemLabel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
140
|
+
export declare const ManagerTooltipItemIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {
|
|
141
|
+
$variant: 'telegram' | 'whatsapp' | 'max';
|
|
142
|
+
}>> & string;
|
|
143
|
+
export declare const ManagerLinkTrigger: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, never>> & string;
|
|
144
|
+
export declare const FinalButtonsStack: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
145
|
+
export declare const RestartRow: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
export type TQuizFunnelStep = 'intro' | 'question1' | 'question2' | 'question3' | 'leadForm' | 'final';
|
|
2
|
+
export type TQuizFunnelQuestionStep = Extract<TQuizFunnelStep, 'question1' | 'question2' | 'question3'>;
|
|
3
|
+
export type TQuizFunnelOfferVariant = 'A' | 'B';
|
|
4
|
+
export type TQuizTargetFunnelId = 'dolgovaya_razgruzka' | '7_sposobov' | 'akcii_obligacii' | 'obligacionnaya_zarplata';
|
|
5
|
+
/** groups/tags для отправки на бэк: строка или массив */
|
|
6
|
+
export type TQuizFunnelCrmValue = string | string[];
|
|
7
|
+
export interface IQuizTargetFunnelCrmPayload {
|
|
8
|
+
groups: TQuizFunnelCrmValue;
|
|
9
|
+
tags: TQuizFunnelCrmValue;
|
|
10
|
+
}
|
|
11
|
+
/** Базовые ссылки финала (до проброса UTM/ulid — как DEFAULT_BY_SLOT в Tilda) */
|
|
12
|
+
export interface IQuizTargetFunnelMessengerRedirects {
|
|
13
|
+
vk?: string;
|
|
14
|
+
telegram?: string;
|
|
15
|
+
max?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Параметры save-tilda-contact2.
|
|
19
|
+
* Форма квиза: name, email, phone + landos + UTM.
|
|
20
|
+
*/
|
|
21
|
+
export interface IQuizTargetFunnelTildaSubmit {
|
|
22
|
+
/** landos для save-tilda-contact2 */
|
|
23
|
+
landos: string;
|
|
24
|
+
/** Пробрасывать UTM из window.location (кроме s_*) */
|
|
25
|
+
appendUtmFromLocation: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Базовые URL кнопок финала (VK / Telegram / Max).
|
|
28
|
+
* UTM и ulid дописываются в quizFunnel.messenger (логика Tilda-скрипта).
|
|
29
|
+
*/
|
|
30
|
+
messengerRedirects?: IQuizTargetFunnelMessengerRedirects;
|
|
31
|
+
/**
|
|
32
|
+
* Fallback Telegram, если messengerRedirects.telegram не задан.
|
|
33
|
+
* Полный URL собирается как t.me/{bot}?start={prefix}, ulid допишется при редиректе.
|
|
34
|
+
*/
|
|
35
|
+
telegramDeepLink?: {
|
|
36
|
+
botUsername: string;
|
|
37
|
+
/** Префикс start, напр. 7_ → start=7_{ulid} */
|
|
38
|
+
startParamPrefix: string;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** Целевая воронка (автовебинар) по результатам квиза */
|
|
42
|
+
export interface IQuizTargetFunnel {
|
|
43
|
+
id: TQuizTargetFunnelId;
|
|
44
|
+
/** Точное название для Tilda / Bitrix */
|
|
45
|
+
title: string;
|
|
46
|
+
/** groups/tags для enKod (один объект на воронку) */
|
|
47
|
+
crmPayloads: [IQuizTargetFunnelCrmPayload];
|
|
48
|
+
/** save-tilda-contact2 */
|
|
49
|
+
tildaSubmit: IQuizTargetFunnelTildaSubmit;
|
|
50
|
+
/** Левая колонка: заголовок результата */
|
|
51
|
+
leadHeading: string;
|
|
52
|
+
/** Абзацы перед блоком «Внутри» */
|
|
53
|
+
leadParagraphs: string[];
|
|
54
|
+
/** Подпись перед списком (по умолчанию «Внутри:») */
|
|
55
|
+
leadBulletsLabel?: string;
|
|
56
|
+
leadBullets: string[];
|
|
57
|
+
/** Левая колонка, призыв перед формой */
|
|
58
|
+
formCallout: string;
|
|
59
|
+
/** Правая колонка, текст между полями и кнопкой */
|
|
60
|
+
formGiftText?: string;
|
|
61
|
+
submitButtonText: string;
|
|
62
|
+
}
|
|
63
|
+
export interface IQuizFunnelManagerLink {
|
|
64
|
+
label: string;
|
|
65
|
+
href: string;
|
|
66
|
+
}
|
|
67
|
+
/** id ответов по questionId: goal | experience | barrier */
|
|
68
|
+
export type TQuizFunnelAnswersById = {
|
|
69
|
+
goal?: string;
|
|
70
|
+
experience?: string;
|
|
71
|
+
barrier?: string;
|
|
72
|
+
};
|
|
73
|
+
export type TQuizFunnelAnswer = {
|
|
74
|
+
id: string;
|
|
75
|
+
text: string;
|
|
76
|
+
};
|
|
77
|
+
export type TQuizFunnelQuestion = {
|
|
78
|
+
id: string;
|
|
79
|
+
title: string;
|
|
80
|
+
subtitle?: string;
|
|
81
|
+
answers: TQuizFunnelAnswer[];
|
|
82
|
+
};
|
|
83
|
+
export interface IQuizFunnelIntroCopy {
|
|
84
|
+
/** Одна строка мелкого текста (вариант A) */
|
|
85
|
+
title?: string;
|
|
86
|
+
/** Несколько строк мелкого текста (вариант B) */
|
|
87
|
+
titleLines?: string[];
|
|
88
|
+
/** @deprecated для desktop — headlinePrimary + headlineAccent */
|
|
89
|
+
subtitle?: string;
|
|
90
|
+
/** Крупный заголовок, строка 1 (desktop) */
|
|
91
|
+
headlinePrimary?: string;
|
|
92
|
+
/** Крупный заголовок, строка 2 — акцент (desktop) */
|
|
93
|
+
headlineAccent?: string;
|
|
94
|
+
buttonText: string;
|
|
95
|
+
durationText?: string;
|
|
96
|
+
}
|
|
97
|
+
export interface IQuizFunnelCopy {
|
|
98
|
+
intro: IQuizFunnelIntroCopy;
|
|
99
|
+
questions: [TQuizFunnelQuestion, TQuizFunnelQuestion, TQuizFunnelQuestion];
|
|
100
|
+
leadForm: {
|
|
101
|
+
title: string;
|
|
102
|
+
subtitle?: string;
|
|
103
|
+
namePlaceholder: string;
|
|
104
|
+
emailPlaceholder: string;
|
|
105
|
+
phonePlaceholder: string;
|
|
106
|
+
submitText: string;
|
|
107
|
+
};
|
|
108
|
+
final: {
|
|
109
|
+
titleDesktop: string;
|
|
110
|
+
titleCompact: string;
|
|
111
|
+
subtitle?: string;
|
|
112
|
+
vkText?: string;
|
|
113
|
+
telegramText: string;
|
|
114
|
+
maxText: string;
|
|
115
|
+
restartText: string;
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
import { TQuizFunnelMetrikaGoalKey } from './constants/QuizFunnel.metrika.const';
|
|
119
|
+
export type TQuizFunnelMetrikaGoalsOverride = Partial<Record<TQuizFunnelMetrikaGoalKey, string>>;
|
|
120
|
+
export interface IQuizFunnelProps {
|
|
121
|
+
/**
|
|
122
|
+
* Переопределение имён целей Метрики (иначе — QUIZ_FUNNEL_METRIKA_GOALS).
|
|
123
|
+
*/
|
|
124
|
+
metrikaGoals?: TQuizFunnelMetrikaGoalsOverride;
|
|
125
|
+
/**
|
|
126
|
+
* Одно автооткрытие (localStorage quiz_funnel_auto_opened).
|
|
127
|
+
* С token — gate через GET /modal/list?code=quiz_funnel, view после отправки формы.
|
|
128
|
+
* Без token (гость) — gate не вызывается.
|
|
129
|
+
* FAB после закрытия без прохождения — quiz_funnel_dismissed.
|
|
130
|
+
*/
|
|
131
|
+
autoOpen?: boolean;
|
|
132
|
+
/** Нижний отступ на mobile как у Support. */
|
|
133
|
+
isWithoutBottom?: boolean;
|
|
134
|
+
/** Тексты и вопросы. Пока нет финального ТЗ — можно передать свои. */
|
|
135
|
+
copy?: IQuizFunnelCopy;
|
|
136
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { IQuizFunnelCopy, TQuizFunnelOfferVariant } from '../QuizFunnel.typed';
|
|
2
|
+
export declare const QUIZ_FUNNEL_OFFER_STORAGE_KEY = "quiz_funnel_offer_variant";
|
|
3
|
+
/** Текст плавающей кнопки «Забрать подарок» */
|
|
4
|
+
export declare const QUIZ_FUNNEL_FAB_LABEL = "\u0417\u0430\u0431\u0440\u0430\u0442\u044C \u043F\u043E\u0434\u0430\u0440\u043E\u043A";
|
|
5
|
+
/** Код баннера в content API: GET /modal/list?code=quiz_funnel */
|
|
6
|
+
export declare const QUIZ_FUNNEL_BANNER_CODE = "quiz_funnel";
|
|
7
|
+
/** Уже было автооткрытие (гость и authorized; сохраняется после логина) */
|
|
8
|
+
export declare const QUIZ_FUNNEL_AUTO_OPENED_STORAGE_KEY = "quiz_funnel_auto_opened";
|
|
9
|
+
/** Квиз пройден до финального шага */
|
|
10
|
+
export declare const QUIZ_FUNNEL_COMPLETED_STORAGE_KEY = "quiz_funnel_completed";
|
|
11
|
+
/** Модалку закрыли, не завершив квиз — показываем FAB */
|
|
12
|
+
export declare const QUIZ_FUNNEL_DISMISSED_STORAGE_KEY = "quiz_funnel_dismissed";
|
|
13
|
+
export declare const wasQuizFunnelAutoOpened: () => boolean;
|
|
14
|
+
export declare const markQuizFunnelAutoOpened: () => void;
|
|
15
|
+
export declare const wasQuizFunnelCompleted: () => boolean;
|
|
16
|
+
export declare const markQuizFunnelCompleted: () => void;
|
|
17
|
+
export declare const clearQuizFunnelCompleted: () => void;
|
|
18
|
+
export declare const wasQuizFunnelDismissed: () => boolean;
|
|
19
|
+
export declare const markQuizFunnelDismissed: () => void;
|
|
20
|
+
export declare const clearQuizFunnelDismissed: () => void;
|
|
21
|
+
/**
|
|
22
|
+
* Страницы без квиза (путь без домена; одинаково на test/stage/prod).
|
|
23
|
+
* @see https://profinansy.ru/login и др.
|
|
24
|
+
*/
|
|
25
|
+
export declare const QUIZ_FUNNEL_EXCLUDED_PATHS: readonly ["/login", "/login/registration", "/login/recovery", "/subscribe", "/club/payment", "/about"];
|
|
26
|
+
/** Нормализует pathname из ConfigLibrary (без query, без хвостового /) */
|
|
27
|
+
export declare const normalizeQuizFunnelPathname: (pathname: string) => string;
|
|
28
|
+
export declare const isQuizFunnelPathExcluded: (pathname: string) => boolean;
|
|
29
|
+
/** @deprecated используйте QUIZ_FUNNEL_STEP_IMAGES.intro */
|
|
30
|
+
export declare const QUIZ_FUNNEL_INTRO_IMAGE_URL = "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-intro.png";
|
|
31
|
+
/** Текст над ссылками на менеджера под формой */
|
|
32
|
+
export declare const QUIZ_FUNNEL_MANAGER_HINT = "\u041E\u0441\u0442\u0430\u043B\u0438\u0441\u044C \u0432\u043E\u043F\u0440\u043E\u0441\u044B? \u041D\u0430\u043F\u0438\u0448\u0438\u0442\u0435 \u043C\u0435\u043D\u0435\u0434\u0436\u0435\u0440\u0443 pro.finansy";
|
|
33
|
+
/** Ссылки «задать вопрос» в тултипе менеджера */
|
|
34
|
+
export declare const QUIZ_FUNNEL_MANAGER_LINKS: readonly [{
|
|
35
|
+
readonly label: "Задать вопрос в Телеграм";
|
|
36
|
+
readonly href: "https://t.me/profinansy_assist_bot";
|
|
37
|
+
readonly messenger: "telegram";
|
|
38
|
+
}, {
|
|
39
|
+
readonly label: "Задать вопрос в Ватсапп";
|
|
40
|
+
readonly href: "https://wa.me/79818115676?text=%D0%A5%D0%BE%D1%87%D1%83";
|
|
41
|
+
readonly messenger: "whatsapp";
|
|
42
|
+
}, {
|
|
43
|
+
readonly label: "Задать вопрос в Макс";
|
|
44
|
+
readonly href: "https://max.ru/id9703096398_1_bot";
|
|
45
|
+
readonly messenger: "max";
|
|
46
|
+
}];
|
|
47
|
+
/** A/B офферы на первом экране квиза */
|
|
48
|
+
export declare const QUIZ_INTRO_OFFERS: Record<TQuizFunnelOfferVariant, IQuizFunnelCopy['intro']>;
|
|
49
|
+
export declare const QUIZ_FUNNEL_COPY_DEFAULT: IQuizFunnelCopy;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { TQuizFunnelQuestionStep, TQuizFunnelStep } from '../QuizFunnel.typed';
|
|
2
|
+
/** Ширина, на которой включается compact-верстка (intro, form, final) */
|
|
3
|
+
export declare const QUIZ_FUNNEL_COMPACT_BREAKPOINT = 960;
|
|
4
|
+
/**
|
|
5
|
+
* max-height списка стран PhoneInput на leadForm (desktop-колонка 528px).
|
|
6
|
+
* Скролл внутри списка, без overflow-хаков у Modal.
|
|
7
|
+
*/
|
|
8
|
+
export declare const QUIZ_FUNNEL_PHONE_DROPDOWN_MAX_HEIGHT = 250;
|
|
9
|
+
export declare const QUIZ_FUNNEL_STEP_IMAGES: {
|
|
10
|
+
/** Фон всей модалки — только шаг intro, desktop */
|
|
11
|
+
readonly introBg: "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-intro-bg.png";
|
|
12
|
+
/** Картинка слева на intro, desktop */
|
|
13
|
+
readonly introPic: "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-intro-pic.png";
|
|
14
|
+
/** Intro при ширине ≤ compact breakpoint (бейдж на картинке) */
|
|
15
|
+
readonly introCompact: "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-intro.png";
|
|
16
|
+
/** @deprecated используйте introPic / introCompact */
|
|
17
|
+
readonly intro: "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-intro.png";
|
|
18
|
+
/** 1-й вопрос — desktop (вертикальная) */
|
|
19
|
+
readonly question1Desktop: "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-first-vertical.png";
|
|
20
|
+
/** 2-й вопрос — desktop (вертикальная) */
|
|
21
|
+
readonly question2Desktop: "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-second-vertical.png";
|
|
22
|
+
/** 3-й вопрос — desktop (вертикальная) */
|
|
23
|
+
readonly question3Desktop: "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-third-vertical.png";
|
|
24
|
+
/** 1–3 вопросы — compact ≤960px */
|
|
25
|
+
readonly question1: "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-first.png";
|
|
26
|
+
readonly question2: "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-second.png";
|
|
27
|
+
readonly question3: "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-third.png";
|
|
28
|
+
readonly formDesktop: "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-form.png";
|
|
29
|
+
readonly formMob: "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-form-mob.png";
|
|
30
|
+
readonly finalDesktop: "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-final.png";
|
|
31
|
+
readonly finalMob: "https://storage.yandexcloud.net/public-files.profinansy.ru/images/quiz-modal-final-mob.png";
|
|
32
|
+
};
|
|
33
|
+
export declare const QUIZ_FUNNEL_MODAL_MAX_WIDTH: Record<'intro' | 'introCompact' | 'question' | 'leadForm' | 'final', string>;
|
|
34
|
+
export declare const getQuizFunnelModalMaxWidth: (step: TQuizFunnelStep, isCompactLayout?: boolean) => string;
|
|
35
|
+
export declare const getQuizFunnelQuestionImage: (step: TQuizFunnelQuestionStep, isCompactLayout?: boolean) => string;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ID целей Я.Метрики (reachGoal), счётчик 89369871.
|
|
3
|
+
* @see ТЗ «Квиз / …»
|
|
4
|
+
*/
|
|
5
|
+
export declare const QUIZ_FUNNEL_METRIKA_GOALS: {
|
|
6
|
+
/** Показ поп-апа с квизом */
|
|
7
|
+
readonly offerView: "quiz_offer_view";
|
|
8
|
+
/** Закрытие поп-апа без завершения */
|
|
9
|
+
readonly popupClose: "quiz_popup_close";
|
|
10
|
+
/** Показ FAB «Забрать подарок» */
|
|
11
|
+
readonly returnIconView: "quiz_return_icon_view";
|
|
12
|
+
/** Клик по FAB */
|
|
13
|
+
readonly returnIconClick: "quiz_return_icon_click";
|
|
14
|
+
/** Клик «Пройти тест» */
|
|
15
|
+
readonly startClick: "quiz_start_click";
|
|
16
|
+
readonly q1View: "quiz_q1_view";
|
|
17
|
+
readonly q1Answer: "quiz_q1_answer";
|
|
18
|
+
readonly q2View: "quiz_q2_view";
|
|
19
|
+
readonly q2Answer: "quiz_q2_answer";
|
|
20
|
+
readonly q3View: "quiz_q3_view";
|
|
21
|
+
readonly q3Answer: "quiz_q3_answer";
|
|
22
|
+
/** Показ формы оффера (любая воронка) */
|
|
23
|
+
readonly awOfferView: "quiz_aw_offer_view";
|
|
24
|
+
readonly awOfferDebtView: "quiz_aw_offer_debt_view";
|
|
25
|
+
readonly awOffer7waysView: "quiz_aw_offer_7ways_view";
|
|
26
|
+
readonly awOfferObligView: "quiz_aw_offer_oblig_view";
|
|
27
|
+
readonly awOffer5minView: "quiz_aw_offer_5min_view";
|
|
28
|
+
/** Успешная регистрация (любая воронка) */
|
|
29
|
+
readonly registrationSuccess: "quiz_registration_success";
|
|
30
|
+
readonly registrationDebtSuccess: "quiz_registration_debt_success";
|
|
31
|
+
readonly registration7waysSuccess: "quiz_registration_7ways_success";
|
|
32
|
+
readonly registrationObligSuccess: "quiz_registration_oblig_success";
|
|
33
|
+
readonly registration5minSuccess: "quiz_registration_5min_success";
|
|
34
|
+
readonly debtTgClick: "quiz_debt_tg_click";
|
|
35
|
+
readonly debtVkClick: "quiz_debt_vk_click";
|
|
36
|
+
readonly ways7TgClick: "quiz_7ways_tg_click";
|
|
37
|
+
readonly ways7VkClick: "quiz_7ways_vk_click";
|
|
38
|
+
readonly obligTgClick: "quiz_oblig_tg_click";
|
|
39
|
+
readonly min5TgClick: "quiz_5min_tg_click";
|
|
40
|
+
readonly min5MaxClick: "quiz_5min_max_click";
|
|
41
|
+
};
|
|
42
|
+
export type TQuizFunnelMetrikaGoalKey = keyof typeof QUIZ_FUNNEL_METRIKA_GOALS;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { QUIZ_FUNNEL_AUTO_OPENED_STORAGE_KEY, QUIZ_FUNNEL_BANNER_CODE, QUIZ_FUNNEL_COMPLETED_STORAGE_KEY, QUIZ_FUNNEL_COPY_DEFAULT, QUIZ_FUNNEL_DISMISSED_STORAGE_KEY, QUIZ_FUNNEL_EXCLUDED_PATHS, QUIZ_FUNNEL_INTRO_IMAGE_URL, QUIZ_FUNNEL_MANAGER_LINKS, QUIZ_FUNNEL_MANAGER_HINT, QUIZ_FUNNEL_FAB_LABEL, QUIZ_FUNNEL_OFFER_STORAGE_KEY, QUIZ_INTRO_OFFERS, clearQuizFunnelCompleted, clearQuizFunnelDismissed, isQuizFunnelPathExcluded, markQuizFunnelAutoOpened, markQuizFunnelCompleted, markQuizFunnelDismissed, normalizeQuizFunnelPathname, wasQuizFunnelAutoOpened, wasQuizFunnelCompleted, wasQuizFunnelDismissed } from './QuizFunnel.const';
|
|
2
|
+
export { QUIZ_FUNNEL_METRIKA_GOALS } from './QuizFunnel.metrika.const';
|
|
3
|
+
export type { TQuizFunnelMetrikaGoalKey } from './QuizFunnel.metrika.const';
|
|
4
|
+
export { QUIZ_FUNNEL_COMPACT_BREAKPOINT, QUIZ_FUNNEL_MODAL_MAX_WIDTH, QUIZ_FUNNEL_PHONE_DROPDOWN_MAX_HEIGHT, QUIZ_FUNNEL_STEP_IMAGES, getQuizFunnelModalMaxWidth, getQuizFunnelQuestionImage } from './QuizFunnel.layout.const';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { useQuizFunnelBanner } from './useQuizFunnelBanner';
|
|
2
|
+
export type { TQuizFunnelBannerStatus } from './useQuizFunnelBanner';
|
|
3
|
+
export { useQuizFunnelBitrix } from './useQuizFunnelBitrix';
|
|
4
|
+
export type { TQuizFunnelBitrixStatus } from './useQuizFunnelBitrix';
|
|
5
|
+
export { useQuizFunnelLayout } from './useQuizFunnelLayout';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { IBanner } from '../../../../api/banner/banner.typed';
|
|
2
|
+
export type TQuizFunnelBannerStatus = 'idle' | 'loading' | 'allowed' | 'denied';
|
|
3
|
+
/**
|
|
4
|
+
* Gate квиза через /modal/list?code=quiz_funnel.
|
|
5
|
+
* Без token (гость) — API не вызываем, квиз разрешён.
|
|
6
|
+
* С token — дополнительно: нет ни одного product_id из rules_or в JWT (tariff[].p).
|
|
7
|
+
*/
|
|
8
|
+
export declare const useQuizFunnelBanner: (enabled: boolean) => {
|
|
9
|
+
status: TQuizFunnelBannerStatus;
|
|
10
|
+
bannerData: IBanner;
|
|
11
|
+
isAllowed: boolean;
|
|
12
|
+
isLoading: boolean;
|
|
13
|
+
registerView: () => Promise<void>;
|
|
14
|
+
viewId: number;
|
|
15
|
+
};
|