@srimandir/kundli-generator 7.5.11 → 7.5.13
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/analytics-Qk9BkNnB.js +3672 -0
- package/dist/analytics-Qk9BkNnB.js.map +1 -0
- package/dist/analytics.d.ts +103 -0
- package/dist/components/KundliPage/KundliContext.d.ts +15 -0
- package/dist/components/KundliPage/KundliPage.d.ts +12 -0
- package/dist/components/KundliPage/KundliPageV1.d.ts +13 -0
- package/dist/components/KundliPlanBottomSheet/ConsultationSlotModal.d.ts +11 -0
- package/dist/components/KundliPlanBottomSheet/KundliPlanBottomSheet.d.ts +14 -3
- package/dist/components/KundliPlanBottomSheet/PlanIcons.d.ts +6 -0
- package/dist/components/KundliPlanBottomSheet/consultationSlotDefaults.d.ts +16 -0
- package/dist/components/KundliPlanBottomSheet/index.d.ts +4 -1
- package/dist/components/KundliPlanBottomSheet/types.d.ts +42 -0
- package/dist/components/ThreeSkuPlanBottomSheet/ThreeSkuPlanBottomSheet.types.d.ts +7 -1
- package/dist/components/ThreeSkuPlanBottomSheet/constants.d.ts +24 -0
- package/dist/criticalCss-CkWj4ZhL.js +2002 -0
- package/dist/criticalCss-CkWj4ZhL.js.map +1 -0
- package/dist/form-entry.js +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/kundli-generator.js +29 -27
- package/dist/page-entry.js +2 -2
- package/dist/style.css +1 -1
- package/package.json +2 -2
- package/dist/analytics-BZyas-wq.js +0 -3183
- package/dist/analytics-BZyas-wq.js.map +0 -1
- package/dist/criticalCss-BSSdaBRZ.js +0 -1946
- package/dist/criticalCss-BSSdaBRZ.js.map +0 -1
package/dist/analytics.d.ts
CHANGED
|
@@ -59,6 +59,32 @@ export declare const KUNDLI_ANALYTICS_EVENT_NAMES: {
|
|
|
59
59
|
readonly kundli_plan_proceed_clicked: "kundli_plan_proceed_clicked";
|
|
60
60
|
/** Plan sheet closed without proceeding */
|
|
61
61
|
readonly kundli_plan_page_closed: "kundli_plan_page_closed";
|
|
62
|
+
/** "Select consultation slot" CTA clicked on the astrologer guidance plan card */
|
|
63
|
+
readonly kundli_plan_select_consultation_slot_clicked: "kundli_plan_select_consultation_slot_clicked";
|
|
64
|
+
/** Plan selection screen loads (full-screen consultation scheduling flow) */
|
|
65
|
+
readonly kundli_plan_screen_viewed: "kundli_plan_screen_viewed";
|
|
66
|
+
/** Slot selection screen loads */
|
|
67
|
+
readonly kundli_slot_screen_viewed: "kundli_slot_screen_viewed";
|
|
68
|
+
/** User picks a date */
|
|
69
|
+
readonly kundli_slot_date_selected: "kundli_slot_date_selected";
|
|
70
|
+
/** User switches Morning/Afternoon/Evening */
|
|
71
|
+
readonly kundli_day_part_selected: "kundli_day_part_selected";
|
|
72
|
+
/** User picks a guidance topic chip */
|
|
73
|
+
readonly kundli_guidance_topic_selected: "kundli_guidance_topic_selected";
|
|
74
|
+
/** User taps a time slot */
|
|
75
|
+
readonly kundli_slot_selected: "kundli_slot_selected";
|
|
76
|
+
/** User taps confirm slot / proceeds to reserve ("Proceed to payment" in the slot modal) */
|
|
77
|
+
readonly kundli_slot_reservation_requested: "kundli_slot_reservation_requested";
|
|
78
|
+
/** Payment screen loads with an active hold (tracked by host app's payment page) */
|
|
79
|
+
readonly kundli_payment_screen_viewed: "kundli_payment_screen_viewed";
|
|
80
|
+
/** User selects a payment method (tracked by host app's payment page) */
|
|
81
|
+
readonly kundli_payment_method_selected: "kundli_payment_method_selected";
|
|
82
|
+
/** User confirms payment / gateway opens (tracked by host app's payment page) */
|
|
83
|
+
readonly kundli_payment_initiated: "kundli_payment_initiated";
|
|
84
|
+
/** Success + confirmation screen shown (tracked by host app's confirmation page) */
|
|
85
|
+
readonly kundli_booking_confirmation_viewed: "kundli_booking_confirmation_viewed";
|
|
86
|
+
/** User routed back to re-select after losing their slot (expired/failed/taken) */
|
|
87
|
+
readonly kundli_slot_lost_fallback_shown: "kundli_slot_lost_fallback_shown";
|
|
62
88
|
/** Legacy / alias: when landing page is viewed */
|
|
63
89
|
readonly kundli_page_view: "kundli_page_view";
|
|
64
90
|
/** Legacy / alias: when L1 form page is viewed (same as l1_page_opened) */
|
|
@@ -127,6 +153,9 @@ export interface KundliAnalytics {
|
|
|
127
153
|
trackPlanSelected?(params: {
|
|
128
154
|
planId: string;
|
|
129
155
|
planName: string;
|
|
156
|
+
price?: string;
|
|
157
|
+
includes_consultation?: boolean;
|
|
158
|
+
cta_label?: string;
|
|
130
159
|
}): void;
|
|
131
160
|
/** Updated: includes question-related fields for the 3-SKU experiment. */
|
|
132
161
|
trackPlanProceedClicked?(params: {
|
|
@@ -137,8 +166,82 @@ export interface KundliAnalytics {
|
|
|
137
166
|
question_asked?: boolean;
|
|
138
167
|
question_text?: string;
|
|
139
168
|
question_source?: 'chip' | 'custom' | 'chip_edited';
|
|
169
|
+
cta_type?: 'proceed' | 'confirm_consultation_slot';
|
|
170
|
+
next_step?: 'payment' | 'slot_selection';
|
|
140
171
|
}): void;
|
|
141
172
|
trackPlanPageClosed?(): void;
|
|
173
|
+
/** Fires when the astrologer guidance plan's "Select consultation slot" CTA is clicked. */
|
|
174
|
+
trackSelectConsultationSlotClicked?(params: {
|
|
175
|
+
planId: string;
|
|
176
|
+
planName: string;
|
|
177
|
+
}): void;
|
|
178
|
+
/** Fires when the (full-screen) plan selection screen loads. */
|
|
179
|
+
trackPlanScreenViewed?(params: {
|
|
180
|
+
plans_shown: string[];
|
|
181
|
+
default_selected_plan: string;
|
|
182
|
+
}): void;
|
|
183
|
+
/** Fires when the consultation slot selection screen (full-screen modal) loads. */
|
|
184
|
+
trackSlotScreenViewed?(params: {
|
|
185
|
+
astrologers_shown: string[];
|
|
186
|
+
dates_available_count: number;
|
|
187
|
+
}): void;
|
|
188
|
+
/** Fires when the user picks a date tab. */
|
|
189
|
+
trackSlotDateSelected?(params: {
|
|
190
|
+
date: string;
|
|
191
|
+
day_part_default: string;
|
|
192
|
+
}): void;
|
|
193
|
+
/** Fires when the user switches Morning/Afternoon/Evening. */
|
|
194
|
+
trackDayPartSelected?(params: {
|
|
195
|
+
day_part: string;
|
|
196
|
+
slots_available_count: number;
|
|
197
|
+
}): void;
|
|
198
|
+
/** Fires when the user picks a guidance topic chip. */
|
|
199
|
+
trackGuidanceTopicSelected?(params: {
|
|
200
|
+
topic: string;
|
|
201
|
+
}): void;
|
|
202
|
+
/** Fires when the user taps a time slot. */
|
|
203
|
+
trackSlotSelected?(params: {
|
|
204
|
+
astrologer_id?: string;
|
|
205
|
+
date: string;
|
|
206
|
+
time: string;
|
|
207
|
+
day_part: string;
|
|
208
|
+
topic: string | null;
|
|
209
|
+
}): void;
|
|
210
|
+
/** Fires when the user taps the slot modal's "Proceed to payment" (confirm slot) CTA. */
|
|
211
|
+
trackSlotReservationRequested?(params: {
|
|
212
|
+
astrologer_id?: string;
|
|
213
|
+
slot_datetime: string;
|
|
214
|
+
}): void;
|
|
215
|
+
/** Fires when the payment screen loads with an active hold. Tracked by the host app. */
|
|
216
|
+
trackPaymentScreenViewed?(params: {
|
|
217
|
+
reservation_id: string;
|
|
218
|
+
amount: number;
|
|
219
|
+
currency: string;
|
|
220
|
+
seconds_remaining: number;
|
|
221
|
+
}): void;
|
|
222
|
+
/** Fires when the user selects a payment method. Tracked by the host app. */
|
|
223
|
+
trackPaymentMethodSelected?(params: {
|
|
224
|
+
method: string;
|
|
225
|
+
provider?: string;
|
|
226
|
+
}): void;
|
|
227
|
+
/** Fires when the user confirms payment / gateway opens. Tracked by the host app. */
|
|
228
|
+
trackPaymentInitiated?(params: {
|
|
229
|
+
reservation_id: string;
|
|
230
|
+
amount: number;
|
|
231
|
+
currency: string;
|
|
232
|
+
method: string;
|
|
233
|
+
}): void;
|
|
234
|
+
/** Fires when the booking confirmation screen is shown. Tracked by the host app. */
|
|
235
|
+
trackBookingConfirmationViewed?(params: {
|
|
236
|
+
booking_id: string;
|
|
237
|
+
slot_datetime: string;
|
|
238
|
+
astrologer_id?: string;
|
|
239
|
+
topic: string;
|
|
240
|
+
}): void;
|
|
241
|
+
/** Fires when the user is routed back to re-select after losing their slot. Tracked by the host app. */
|
|
242
|
+
trackSlotLostFallbackShown?(params: {
|
|
243
|
+
reason: 'expired' | 'payment_failed' | 'slot_taken';
|
|
244
|
+
}): void;
|
|
142
245
|
/** Fires once when the SKU comparison table enters the viewport (≥50% visible). */
|
|
143
246
|
trackComparisonTableImpression?(): void;
|
|
144
247
|
/** Fires the first time per card-expansion the user focuses the question textbox. */
|
|
@@ -2,6 +2,7 @@ import { SupportedLocale } from '../../i18n/translations';
|
|
|
2
2
|
import { KundliFormValues } from '../KundliForm';
|
|
3
3
|
import { KundliAnalytics } from '../../analytics';
|
|
4
4
|
import { KundliImageComponent } from '../../types/image';
|
|
5
|
+
import { FetchConsultationSlots } from '../KundliPlanBottomSheet';
|
|
5
6
|
import { AtlasSearchLocalities } from '../KundliForm/sections/UserInfoFormSection/useGooglePlacesAutocomplete';
|
|
6
7
|
export type KundliView = "landing" | "form";
|
|
7
8
|
export interface KundliContextConfig {
|
|
@@ -24,6 +25,20 @@ export interface KundliContextConfig {
|
|
|
24
25
|
atlasSearchLocalities?: AtlasSearchLocalities;
|
|
25
26
|
/** When true (default), birth place autocomplete uses Google Places. When false, uses Atlas via `atlasSearchLocalities`. */
|
|
26
27
|
googleMapsAutocompleteEnabled?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Feature flag (experiment-controlled). When true, the Kundli plan selection sheet
|
|
30
|
+
* (`KundliPlanBottomSheet`) renders full-screen with the left-aligned header style,
|
|
31
|
+
* and selecting the astrologer-consultation plan opens the full-screen
|
|
32
|
+
* `ConsultationSlotModal` (date/time/topic picker) before proceeding to payment.
|
|
33
|
+
* When false (default), behavior is unchanged: bottom sheet, centered header,
|
|
34
|
+
* astrologer-consultation plan proceeds straight to payment.
|
|
35
|
+
*/
|
|
36
|
+
enableConsultationScheduling?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Fetches real consultation slot availability from the host app (no API/endpoint
|
|
39
|
+
* knowledge lives in this package). Called by `ConsultationSlotModal` when it opens.
|
|
40
|
+
*/
|
|
41
|
+
fetchConsultationSlots?: FetchConsultationSlots;
|
|
27
42
|
logoUrl?: string;
|
|
28
43
|
reportImageUrl?: string;
|
|
29
44
|
/** When true, LCP report image can be loaded with priority (e.g. next/image priority). */
|
|
@@ -53,6 +53,18 @@ export interface KundliPageProps {
|
|
|
53
53
|
googleMapsAutocompleteEnabled?: boolean;
|
|
54
54
|
/** Enables 3-SKU experiment flow when used with v1 variant. */
|
|
55
55
|
enableThreeSkuFlow?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Experiment-controlled feature flag (v1 variant only). When true, the Kundli plan
|
|
58
|
+
* sheet renders full-screen and the astrologer-consultation plan opens a full-screen
|
|
59
|
+
* scheduling modal before payment. When false (default), behavior is unchanged.
|
|
60
|
+
*/
|
|
61
|
+
enableConsultationScheduling?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Fetches real consultation slot availability from the host app (no API/endpoint
|
|
64
|
+
* knowledge lives in this package). Passed through to `KundliContext` and used by
|
|
65
|
+
* `ConsultationSlotModal` when it opens.
|
|
66
|
+
*/
|
|
67
|
+
fetchConsultationSlots?: import('../KundliPlanBottomSheet').FetchConsultationSlots;
|
|
56
68
|
/** URL for the "200+ page Kundli Report" sample link in 3-SKU table. */
|
|
57
69
|
kundliReportSampleHref?: string;
|
|
58
70
|
/** URL for the "1 Question" sample link in 3-SKU table. */
|
|
@@ -57,6 +57,19 @@ export interface KundliPageProps {
|
|
|
57
57
|
googleMapsAutocompleteEnabled?: boolean;
|
|
58
58
|
/** Enables 3-SKU experiment flow inside existing v1 page. */
|
|
59
59
|
enableThreeSkuFlow?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Experiment-controlled feature flag. When true, the Kundli plan sheet renders
|
|
62
|
+
* full-screen (matching header style) and the astrologer-consultation plan opens
|
|
63
|
+
* a full-screen date/time/topic scheduling modal before payment. When false
|
|
64
|
+
* (default), existing behavior is unchanged (bottom sheet, direct to payment).
|
|
65
|
+
*/
|
|
66
|
+
enableConsultationScheduling?: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Fetches real consultation slot availability from the host app. Passed through
|
|
69
|
+
* to `KundliContext` and used by `ConsultationSlotModal` when it opens. No
|
|
70
|
+
* endpoint/URL knowledge lives in this package — the host app owns the API call.
|
|
71
|
+
*/
|
|
72
|
+
fetchConsultationSlots?: import('../KundliPlanBottomSheet').FetchConsultationSlots;
|
|
60
73
|
/** URL for the "200+ page Kundli Report" sample link in the 3-SKU table. */
|
|
61
74
|
kundliReportSampleHref?: string;
|
|
62
75
|
/** URL for the "1 Question" sample link in the 3-SKU table. */
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { KundliPlanAstrologer, ConsultationSlotSelection } from './types';
|
|
2
|
+
import { KundliAnalytics } from '../../analytics';
|
|
3
|
+
export interface ConsultationSlotModalProps {
|
|
4
|
+
isOpen: boolean;
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
onProceed: (selection: ConsultationSlotSelection) => void;
|
|
7
|
+
astrologers: KundliPlanAstrologer[];
|
|
8
|
+
t?: (key: string, options?: any) => string;
|
|
9
|
+
analytics?: KundliAnalytics;
|
|
10
|
+
}
|
|
11
|
+
export declare const ConsultationSlotModal: React.FC<ConsultationSlotModalProps>;
|
|
@@ -1,14 +1,24 @@
|
|
|
1
|
-
import { KundliPlan } from './types';
|
|
1
|
+
import { KundliPlan, ConsultationSlotSelection } from './types';
|
|
2
2
|
import { KundliAnalytics } from '../../analytics';
|
|
3
3
|
export interface KundliPlanBottomSheetProps {
|
|
4
4
|
isOpen: boolean;
|
|
5
5
|
onClose: () => void;
|
|
6
6
|
selectedPlan: KundliPlan | null;
|
|
7
7
|
onSelectPlan: (plan: KundliPlan) => void;
|
|
8
|
-
onProceed: (plan: KundliPlan) => void;
|
|
8
|
+
onProceed: (plan: KundliPlan, consultationSlot?: ConsultationSlotSelection) => void;
|
|
9
9
|
plans?: KundliPlan[];
|
|
10
10
|
t?: (key: string) => string;
|
|
11
11
|
analytics?: KundliAnalytics;
|
|
12
|
+
/**
|
|
13
|
+
* Feature flag (experiment-controlled). When true, renders full-screen with the
|
|
14
|
+
* left-aligned header style, and the astrologer-consultation plan opens the
|
|
15
|
+
* full-screen `ConsultationSlotModal` before proceeding to payment.
|
|
16
|
+
* When false/undefined (default), falls back to `KundliContext`'s
|
|
17
|
+
* `enableConsultationScheduling` config, and finally to `false` — preserving the
|
|
18
|
+
* original bottom-sheet behavior (astrologer-consultation plan proceeds straight
|
|
19
|
+
* to payment, no scheduling modal).
|
|
20
|
+
*/
|
|
21
|
+
enableConsultationScheduling?: boolean;
|
|
12
22
|
}
|
|
13
23
|
/**
|
|
14
24
|
* Slide-up bottom sheet that lets the user choose a Kundli plan.
|
|
@@ -17,9 +27,10 @@ export interface KundliPlanBottomSheetProps {
|
|
|
17
27
|
* Shown exclusively for the `v1` variant — the context gates this.
|
|
18
28
|
*/
|
|
19
29
|
export declare const KundliPlanBottomSheet: React.FC<KundliPlanBottomSheetProps>;
|
|
20
|
-
export type { KundliPlan } from './types';
|
|
30
|
+
export type { KundliPlan, ConsultationSlotSelection } from './types';
|
|
21
31
|
export { getDefaultPlans } from './planDefaults';
|
|
22
32
|
export { PlanCard } from './PlanCard';
|
|
23
33
|
export { PlanSheetHeader } from './PlanSheetHeader';
|
|
24
34
|
export { PlanFeatureList } from './PlanFeatureList';
|
|
25
35
|
export { AstrologerCard } from './AstrologerCard';
|
|
36
|
+
export { ConsultationSlotModal } from './ConsultationSlotModal';
|
|
@@ -6,3 +6,9 @@ export declare const ChevronLeftIcon: React.FC;
|
|
|
6
6
|
export declare const BoltIcon: React.FC;
|
|
7
7
|
/** Trend up icon for "Most popular" badge */
|
|
8
8
|
export declare const TrendUpIcon: React.FC;
|
|
9
|
+
/** Sun icon for "Morning" period tab */
|
|
10
|
+
export declare const MorningIcon: React.FC;
|
|
11
|
+
/** Sun-cloud icon for "Afternoon" period tab */
|
|
12
|
+
export declare const AfternoonIcon: React.FC;
|
|
13
|
+
/** Moon icon for "Evening" period tab */
|
|
14
|
+
export declare const EveningIcon: React.FC;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ConsultationSlotDate, ConsultationSlotPeriod } from './types';
|
|
2
|
+
/** Formats an ISO datetime (e.g. "2026-08-03T09:00:00+05:30") into a short label like "9:00 AM". */
|
|
3
|
+
export declare const formatSlotTime: (isoDateTime: string) => string;
|
|
4
|
+
/** Builds a short day-tab label ("Today" / "Tomorrow" / weekday) + day number for a "yyyy-MM-dd" date string. */
|
|
5
|
+
export declare const formatSlotDayLabel: (isoDate: string, referenceDate?: Date) => ConsultationSlotDate;
|
|
6
|
+
export declare const CONSULTATION_PERIOD_ORDER: ConsultationSlotPeriod[];
|
|
7
|
+
/**
|
|
8
|
+
* Guidance topic chips shown before slot selection. Frontend-only, static
|
|
9
|
+
* list — never fetched from an API. `labelKey` resolves via the `t` prop
|
|
10
|
+
* (falls back to `label` when no translation is provided).
|
|
11
|
+
*/
|
|
12
|
+
export declare const GUIDANCE_TOPICS: {
|
|
13
|
+
id: string;
|
|
14
|
+
labelKey: string;
|
|
15
|
+
label: string;
|
|
16
|
+
}[];
|
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
export { KundliPlanBottomSheet, getDefaultPlans } from './KundliPlanBottomSheet';
|
|
2
|
-
export type { KundliPlanBottomSheetProps, KundliPlan } from './KundliPlanBottomSheet';
|
|
2
|
+
export type { KundliPlanBottomSheetProps, KundliPlan, ConsultationSlotSelection } from './KundliPlanBottomSheet';
|
|
3
|
+
export { ConsultationSlotModal } from './ConsultationSlotModal';
|
|
4
|
+
export type { ConsultationSlotModalProps } from './ConsultationSlotModal';
|
|
5
|
+
export type { KundliPlanAstrologer, ConsultationSlot, ConsultationSlotDay, ConsultationSlotPeriod, ConsultationSlotsPreselectData, FetchConsultationSlots, } from './types';
|
|
@@ -19,3 +19,45 @@ export interface KundliPlan {
|
|
|
19
19
|
badge?: string;
|
|
20
20
|
astrologers?: KundliPlanAstrologer[];
|
|
21
21
|
}
|
|
22
|
+
/** A single selectable date tab, e.g. "Tomorrow", "21" */
|
|
23
|
+
export interface ConsultationSlotDate {
|
|
24
|
+
id: string;
|
|
25
|
+
dayLabel: string;
|
|
26
|
+
dayNum: string;
|
|
27
|
+
}
|
|
28
|
+
export type ConsultationSlotPeriod = "morning" | "afternoon" | "evening";
|
|
29
|
+
/** A single bookable time slot for a given day, as returned by the host app's slots API. */
|
|
30
|
+
export interface ConsultationSlot {
|
|
31
|
+
/** ISO datetime with offset, e.g. "2026-08-03T09:00:00+05:30" */
|
|
32
|
+
start: string;
|
|
33
|
+
/** ISO datetime with offset */
|
|
34
|
+
end: string;
|
|
35
|
+
period: ConsultationSlotPeriod;
|
|
36
|
+
}
|
|
37
|
+
/** A single day's availability, as returned by the host app's slots API. */
|
|
38
|
+
export interface ConsultationSlotDay {
|
|
39
|
+
/** ISO "yyyy-MM-dd" */
|
|
40
|
+
date: string;
|
|
41
|
+
has_availability: boolean;
|
|
42
|
+
slots: ConsultationSlot[];
|
|
43
|
+
}
|
|
44
|
+
/** Response shape for the host app's GET consultation slots (preselect) API. */
|
|
45
|
+
export interface ConsultationSlotsPreselectData {
|
|
46
|
+
start_date: string;
|
|
47
|
+
days: ConsultationSlotDay[];
|
|
48
|
+
}
|
|
49
|
+
/** Callback provided by the host app to fetch real consultation slot availability. */
|
|
50
|
+
export type FetchConsultationSlots = () => Promise<ConsultationSlotsPreselectData>;
|
|
51
|
+
/** A guidance topic chip, e.g. "Career & work" */
|
|
52
|
+
export interface ConsultationTopic {
|
|
53
|
+
id: string;
|
|
54
|
+
label: string;
|
|
55
|
+
}
|
|
56
|
+
/** Details captured once the user completes the consultation slot selection flow. */
|
|
57
|
+
export interface ConsultationSlotSelection {
|
|
58
|
+
start: string;
|
|
59
|
+
end: string;
|
|
60
|
+
period: ConsultationSlotPeriod;
|
|
61
|
+
/** Guidance topic id the user picked (e.g. "career_work"). Frontend-only — never fetched from an API. */
|
|
62
|
+
topic?: string;
|
|
63
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ThreeSkuLocale, ThreeSkuPlan } from './constants';
|
|
2
|
+
import { ConsultationSlotSelection } from '../KundliPlanBottomSheet/types';
|
|
2
3
|
/**
|
|
3
4
|
* Analytics interface for the 3-SKU experiment bottom sheet.
|
|
4
5
|
* Extends the base plan analytics with question-specific tracking methods.
|
|
@@ -32,13 +33,18 @@ export interface ThreeSkuAnalytics {
|
|
|
32
33
|
user_had_custom_text: boolean;
|
|
33
34
|
}): void;
|
|
34
35
|
trackOneQuestionViewSampleReportClicked?(): void;
|
|
36
|
+
/** Fires when the astrologer consultation plan's "Select consultation slot" CTA is clicked. */
|
|
37
|
+
trackSelectConsultationSlotClicked?(params: {
|
|
38
|
+
planId: string;
|
|
39
|
+
planName: string;
|
|
40
|
+
}): void;
|
|
35
41
|
}
|
|
36
42
|
export interface ThreeSkuPlanBottomSheetProps {
|
|
37
43
|
isOpen: boolean;
|
|
38
44
|
onClose: () => void;
|
|
39
45
|
selectedPlan: ThreeSkuPlan | null;
|
|
40
46
|
onSelectPlan: (plan: ThreeSkuPlan) => void;
|
|
41
|
-
onProceed: (plan: ThreeSkuPlan, question?: string) => void;
|
|
47
|
+
onProceed: (plan: ThreeSkuPlan, question?: string, consultationSlot?: ConsultationSlotSelection) => void;
|
|
42
48
|
plans?: ThreeSkuPlan[];
|
|
43
49
|
/** Whether the user is on the international (global) flow. Used for default plan pricing. */
|
|
44
50
|
isGlobal?: boolean;
|
|
@@ -6,6 +6,7 @@ export declare const THREE_SKU_STRINGS: {
|
|
|
6
6
|
readonly en: {
|
|
7
7
|
readonly planSheetTitle: "Choose your Kundli Plan";
|
|
8
8
|
readonly planProceedToPayment: "Proceed to Payment";
|
|
9
|
+
readonly planSelectConsultationSlot: "Select consultation slot →";
|
|
9
10
|
readonly planAstrologerHeading: "Top astrologers who will consult you";
|
|
10
11
|
readonly planMostPopular: "Most popular";
|
|
11
12
|
readonly planNew: "New";
|
|
@@ -35,10 +36,22 @@ export declare const THREE_SKU_STRINGS: {
|
|
|
35
36
|
readonly planQuestionChip3: "Are there any doshas which is affecting me?";
|
|
36
37
|
readonly planQuestionChip4: "Is my current job right for me?";
|
|
37
38
|
readonly planAstrologerExp: "{{years}} Years of experience";
|
|
39
|
+
readonly planConsultationSlotTitle: "Select consultation slot";
|
|
40
|
+
readonly planConsultationTrustLabel: "3,750+ people have booked consultation";
|
|
41
|
+
readonly planSelectSlotHeading: "Select consultation slot";
|
|
42
|
+
readonly planGuidanceHeading: "What would you like guidance on?";
|
|
43
|
+
readonly planPeriodMorning: "Morning";
|
|
44
|
+
readonly planPeriodAfternoon: "Afternoon";
|
|
45
|
+
readonly planPeriodEvening: "Evening";
|
|
46
|
+
readonly planTopicCareerWork: "Career & work";
|
|
47
|
+
readonly planTopicHealthWellbeing: "Health & wellbeing";
|
|
48
|
+
readonly planTopicLoveMarriage: "Love & marriage";
|
|
49
|
+
readonly planTopicMoneyFinance: "Money & finance";
|
|
38
50
|
};
|
|
39
51
|
readonly hi: {
|
|
40
52
|
readonly planSheetTitle: "अपनी कुंडली प्लान चुनें";
|
|
41
53
|
readonly planProceedToPayment: "पेमेंट करें";
|
|
54
|
+
readonly planSelectConsultationSlot: "परामर्श स्लॉट चुनें →";
|
|
42
55
|
readonly planAstrologerHeading: "हम आपके लिए नीचे दिए गए टॉप ज्योतिषियों में से एक को चुनेंगे";
|
|
43
56
|
readonly planMostPopular: "सबसे लोकप्रिय";
|
|
44
57
|
readonly planNew: "नया";
|
|
@@ -68,6 +81,17 @@ export declare const THREE_SKU_STRINGS: {
|
|
|
68
81
|
readonly planQuestionChip3: "क्या कोई दोष है जो मुझे प्रभावित कर रहा है?";
|
|
69
82
|
readonly planQuestionChip4: "क्या मेरी मौजूदा नौकरी मेरे लिए सही है?";
|
|
70
83
|
readonly planAstrologerExp: "साल का अनुभव";
|
|
84
|
+
readonly planConsultationSlotTitle: "परामर्श स्लॉट चुनें";
|
|
85
|
+
readonly planConsultationTrustLabel: "3,750+ लोगों ने परामर्श बुक किया है";
|
|
86
|
+
readonly planSelectSlotHeading: "परामर्श स्लॉट चुनें";
|
|
87
|
+
readonly planGuidanceHeading: "आप किस बारे में सलाह चाहते हैं?";
|
|
88
|
+
readonly planPeriodMorning: "सुबह";
|
|
89
|
+
readonly planPeriodAfternoon: "दोपहर";
|
|
90
|
+
readonly planPeriodEvening: "शाम";
|
|
91
|
+
readonly planTopicCareerWork: "करियर और काम";
|
|
92
|
+
readonly planTopicHealthWellbeing: "सेहत और खुशहाली";
|
|
93
|
+
readonly planTopicLoveMarriage: "प्यार और शादी";
|
|
94
|
+
readonly planTopicMoneyFinance: "पैसा और वित्त";
|
|
71
95
|
};
|
|
72
96
|
};
|
|
73
97
|
export type ThreeSkuLocale = keyof typeof THREE_SKU_STRINGS;
|