@srimandir/kundli-generator 10.0.2 → 10.0.4
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-C7q6coqa.js +5099 -0
- package/dist/analytics-C7q6coqa.js.map +1 -0
- package/dist/analytics.d.ts +308 -0
- package/dist/components/KundliForm/KundliForm.d.ts +50 -0
- package/dist/components/KundliForm/index.d.ts +2 -0
- package/dist/components/KundliForm/sections/FormHeader/FormHeader.d.ts +7 -0
- package/dist/components/KundliForm/sections/FormHeader/index.d.ts +2 -0
- package/dist/components/KundliForm/sections/ProceedFooter/ProceedFooter.d.ts +28 -0
- package/dist/components/KundliForm/sections/ProceedFooter/index.d.ts +2 -0
- package/dist/components/KundliForm/sections/UserInfoFormSection/UserInfoFormSection.d.ts +20 -0
- package/dist/components/KundliForm/sections/UserInfoFormSection/constants.d.ts +215 -0
- package/dist/components/KundliForm/sections/UserInfoFormSection/googlePlacesAutocomplete.d.ts +21 -0
- package/dist/components/KundliForm/sections/UserInfoFormSection/index.d.ts +2 -0
- package/dist/components/KundliForm/sections/UserInfoFormSection/useAtlasPlacesAutocomplete.d.ts +22 -0
- package/dist/components/KundliForm/sections/UserInfoFormSection/useGooglePlacesAutocomplete.d.ts +51 -0
- package/dist/components/KundliForm/sections/index.d.ts +3 -0
- package/dist/components/KundliPage/KundliContext.d.ts +108 -0
- package/dist/components/KundliPage/KundliPage.d.ts +92 -0
- package/dist/components/KundliPage/KundliPageV1.d.ts +98 -0
- package/dist/components/KundliPage/KundliPageVariant.d.ts +10 -0
- package/dist/components/KundliPage/index.d.ts +4 -0
- package/dist/components/KundliPage/sections/CTAFooter/CTAFooter.d.ts +15 -0
- package/dist/components/KundliPage/sections/CTAFooter/index.d.ts +2 -0
- package/dist/components/KundliPage/sections/ContactUsSection/ContactUsSection.d.ts +9 -0
- package/dist/components/KundliPage/sections/ContactUsSection/index.d.ts +2 -0
- package/dist/components/KundliPage/sections/FAQSection/FAQSection.d.ts +8 -0
- package/dist/components/KundliPage/sections/FAQSection/index.d.ts +2 -0
- package/dist/components/KundliPage/sections/FeedbackSection/FeedbackSection.d.ts +13 -0
- package/dist/components/KundliPage/sections/FeedbackSection/index.d.ts +2 -0
- package/dist/components/KundliPage/sections/HeroSection/HeroSection.d.ts +5 -0
- package/dist/components/KundliPage/sections/HeroSection/index.d.ts +2 -0
- package/dist/components/KundliPage/sections/KundliHeader/KundliHeader.d.ts +7 -0
- package/dist/components/KundliPage/sections/KundliHeader/index.d.ts +2 -0
- package/dist/components/KundliPage/sections/KundliTableSection/KundliTableSection.constants.d.ts +36 -0
- package/dist/components/KundliPage/sections/KundliTableSection/SampleReportsSection.d.ts +10 -0
- package/dist/components/KundliPage/sections/KundliTableSection/index.d.ts +3 -0
- package/dist/components/KundliPage/sections/PremiumReportOverview/PremiumReportOverview.d.ts +26 -0
- package/dist/components/KundliPage/sections/PremiumReportOverview/index.d.ts +2 -0
- package/dist/components/KundliPage/sections/ThreeStepsProcess/ThreeStepsProcess.d.ts +8 -0
- package/dist/components/KundliPage/sections/ThreeStepsProcess/index.d.ts +2 -0
- package/dist/components/KundliPage/sections/UniversityCertification/UniversityCertification.d.ts +7 -0
- package/dist/components/KundliPage/sections/UniversityCertification/index.d.ts +2 -0
- package/dist/components/KundliPage/sections/UtmBannerSection/UtmBannerSection.d.ts +8 -0
- package/dist/components/KundliPage/sections/UtmBannerSection/index.d.ts +2 -0
- package/dist/components/KundliPage/sections/ViewSampleReportButton/SampleReportModal.d.ts +8 -0
- package/dist/components/KundliPage/sections/ViewSampleReportButton/ViewSampleReportButton.d.ts +14 -0
- package/dist/components/KundliPage/sections/ViewSampleReportButton/index.d.ts +2 -0
- package/dist/components/KundliPage/sections/WhatYoullFindSection/WhatYoullFindSection.d.ts +7 -0
- package/dist/components/KundliPage/sections/WhatYoullFindSection/index.d.ts +2 -0
- package/dist/components/KundliPage/sections/WhyUsSection/WhyUsSection.d.ts +5 -0
- package/dist/components/KundliPage/sections/WhyUsSection/index.d.ts +2 -0
- package/dist/components/KundliPage/sections/index.d.ts +13 -0
- package/dist/components/KundliPlanBottomSheet/AstrologerCard.d.ts +10 -0
- package/dist/components/KundliPlanBottomSheet/AstrologerDetails.d.ts +19 -0
- package/dist/components/KundliPlanBottomSheet/ConsultationSlotFields.d.ts +54 -0
- package/dist/components/KundliPlanBottomSheet/ConsultationSlotModal.d.ts +6 -0
- package/dist/components/KundliPlanBottomSheet/KundliPlanBottomSheet.d.ts +37 -0
- package/dist/components/KundliPlanBottomSheet/MostPopularBadge.d.ts +4 -0
- package/dist/components/KundliPlanBottomSheet/PlanCard.d.ts +19 -0
- package/dist/components/KundliPlanBottomSheet/PlanFeatureList.d.ts +10 -0
- package/dist/components/KundliPlanBottomSheet/PlanIcons.d.ts +18 -0
- package/dist/components/KundliPlanBottomSheet/PlanSheetHeader.d.ts +9 -0
- package/dist/components/KundliPlanBottomSheet/consultationSlotDefaults.d.ts +44 -0
- package/dist/components/KundliPlanBottomSheet/index.d.ts +7 -0
- package/dist/components/KundliPlanBottomSheet/planDefaults.d.ts +2 -0
- package/dist/components/KundliPlanBottomSheet/types.d.ts +67 -0
- package/dist/components/ThreeSkuPlanBottomSheet/AstrologerSection.d.ts +8 -0
- package/dist/components/ThreeSkuPlanBottomSheet/PlanFeatureList.d.ts +7 -0
- package/dist/components/ThreeSkuPlanBottomSheet/PlanSelectorStrip.d.ts +11 -0
- package/dist/components/ThreeSkuPlanBottomSheet/ProceedButton.d.ts +9 -0
- package/dist/components/ThreeSkuPlanBottomSheet/QuestionChips.d.ts +7 -0
- package/dist/components/ThreeSkuPlanBottomSheet/QuestionInput.d.ts +15 -0
- package/dist/components/ThreeSkuPlanBottomSheet/SheetHeader.d.ts +6 -0
- package/dist/components/ThreeSkuPlanBottomSheet/ThreeSkuAstrologerCard.d.ts +6 -0
- package/dist/components/ThreeSkuPlanBottomSheet/ThreeSkuAstrologerProfiles.d.ts +15 -0
- package/dist/components/ThreeSkuPlanBottomSheet/ThreeSkuPlanBottomSheet.d.ts +3 -0
- package/dist/components/ThreeSkuPlanBottomSheet/ThreeSkuPlanBottomSheet.icons.d.ts +3 -0
- package/dist/components/ThreeSkuPlanBottomSheet/ThreeSkuPlanBottomSheet.types.d.ts +61 -0
- package/dist/components/ThreeSkuPlanBottomSheet/constants.d.ts +113 -0
- package/dist/components/ThreeSkuPlanBottomSheet/index.d.ts +4 -0
- package/dist/constants/criticalCss.d.ts +12 -0
- package/dist/criticalCss-Dwemq76K.js +2063 -0
- package/dist/criticalCss-Dwemq76K.js.map +1 -0
- package/dist/dev/main.d.ts +0 -0
- package/dist/form-entry.d.ts +15 -0
- package/dist/form-entry.js +21 -0
- package/dist/form-entry.js.map +1 -0
- package/dist/i18n/I18nContext.d.ts +18 -0
- package/dist/i18n/index.d.ts +2 -0
- package/dist/i18n/translations.d.ts +4 -0
- package/dist/i18n/translations.en.d.ts +163 -0
- package/dist/i18n/translations.hi.d.ts +163 -0
- package/dist/index.d.ts +17 -0
- package/dist/kundli-generator.js +66 -0
- package/dist/kundli-generator.js.map +1 -0
- package/dist/page-entry.d.ts +16 -0
- package/dist/page-entry.js +24 -0
- package/dist/page-entry.js.map +1 -0
- package/dist/style.css +1 -0
- package/dist/styles.d.ts +0 -0
- package/dist/styles.js +2 -0
- package/dist/styles.js.map +1 -0
- package/dist/types/image.d.ts +17 -0
- package/dist/utils/Stringconstant.d.ts +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/keyframeStyles.d.ts +10 -0
- package/dist/utils/localeStorage.d.ts +10 -0
- package/dist/utils/phone.d.ts +26 -0
- package/dist/utils/storage.d.ts +7 -0
- package/dist/utils/utmBanner.d.ts +23 -0
- package/package.json +2 -2
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface WhatYoullFindSectionProps {
|
|
2
|
+
t: (key: string) => string;
|
|
3
|
+
/** Optional image URLs per item (same order as ITEMS) */
|
|
4
|
+
imageUrls?: (string | undefined)[];
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const WhatYoullFindSection: React.FC<WhatYoullFindSectionProps>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { KundliHeader } from './KundliHeader';
|
|
2
|
+
export { HeroSection } from './HeroSection';
|
|
3
|
+
export { UtmBannerSection } from './UtmBannerSection';
|
|
4
|
+
export { PremiumReportOverview } from './PremiumReportOverview';
|
|
5
|
+
export { UniversityCertification } from './UniversityCertification';
|
|
6
|
+
export { ThreeStepsProcess } from './ThreeStepsProcess';
|
|
7
|
+
export { ViewSampleReportButton } from './ViewSampleReportButton';
|
|
8
|
+
export { WhatYoullFindSection } from './WhatYoullFindSection';
|
|
9
|
+
export { WhyUsSection } from './WhyUsSection';
|
|
10
|
+
export { FeedbackSection } from './FeedbackSection';
|
|
11
|
+
export { FAQSection } from './FAQSection';
|
|
12
|
+
export { ContactUsSection } from './ContactUsSection';
|
|
13
|
+
export { CTAFooter, TrustBadgesRow } from './CTAFooter';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { KundliPlanAstrologer } from './types';
|
|
2
|
+
export interface AstrologerCardProps {
|
|
3
|
+
astrologer: KundliPlanAstrologer;
|
|
4
|
+
t?: (key: string, options?: any) => string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Displays a single astrologer's avatar, name, experience and certifications.
|
|
8
|
+
* Used inside the "Kundli Report + Astrologer Guidance" plan card.
|
|
9
|
+
*/
|
|
10
|
+
export declare const AstrologerCard: React.FC<AstrologerCardProps>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const ASTROLOGERS: readonly [{
|
|
2
|
+
readonly id: "jyoti";
|
|
3
|
+
readonly name: "planAstrologerNameJyoti";
|
|
4
|
+
readonly imageUrl: "https://srm-cdn.a4b.io/yoda/1773992823100.webp";
|
|
5
|
+
readonly experience: "planAstrologerExpJyoti";
|
|
6
|
+
readonly certifications: readonly ["planAstrologerCertCertifiedJyotish", "planAstrologerCertAccurateSolutions"];
|
|
7
|
+
}, {
|
|
8
|
+
readonly id: "samiksha";
|
|
9
|
+
readonly name: "planAstrologerNameSamiksha";
|
|
10
|
+
readonly imageUrl: "https://srm-cdn.a4b.io/yoda/1773992841106.webp";
|
|
11
|
+
readonly experience: "planAstrologerExpSamiksha";
|
|
12
|
+
readonly certifications: readonly ["planAstrologerCertVedicAstrology", "planAstrologerCertResultOriented"];
|
|
13
|
+
}, {
|
|
14
|
+
readonly id: "neeraj";
|
|
15
|
+
readonly name: "planAstrologerNameNeeraj";
|
|
16
|
+
readonly imageUrl: "https://srm-cdn.a4b.io/yoda/1773992858276.webp";
|
|
17
|
+
readonly experience: "planAstrologerExpNeeraj";
|
|
18
|
+
readonly certifications: readonly ["planAstrologerCertBhuCertified", "planAstrologerCertMantraRudraksha"];
|
|
19
|
+
}];
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { KundliPlanAstrologer, ConsultationSlotSelection } from './types';
|
|
2
|
+
import { KundliAnalytics } from '../../analytics';
|
|
3
|
+
export interface ConsultationSlotFieldsProps {
|
|
4
|
+
onProceed: (selection: ConsultationSlotSelection) => void;
|
|
5
|
+
astrologers: KundliPlanAstrologer[];
|
|
6
|
+
t?: (key: string, options?: any) => string | undefined;
|
|
7
|
+
analytics?: KundliAnalytics;
|
|
8
|
+
/**
|
|
9
|
+
* Report language the user selected in the kundli form (e.g. "hi", "te").
|
|
10
|
+
* Drives which consultation language is preselected (see
|
|
11
|
+
* `getDefaultConsultationLanguage`). Defaults to `KundliContext`'s live
|
|
12
|
+
* `formValues.language_code` when not passed explicitly — callers not
|
|
13
|
+
* connected to that context (e.g. a standalone post-payment screen) must
|
|
14
|
+
* pass it.
|
|
15
|
+
*/
|
|
16
|
+
reportLanguage?: string;
|
|
17
|
+
/**
|
|
18
|
+
* True for the "Book slot again" retry flow / any post-payment booking
|
|
19
|
+
* screen (payment already succeeded) — false/omitted for the original
|
|
20
|
+
* pre-payment booking flow. Tags every analytics event fired here with
|
|
21
|
+
* `status: "pre_payment" | "post_payment"`.
|
|
22
|
+
*/
|
|
23
|
+
isPostPayment?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Whether to show the guidance-topic picker below the slot grid. Defaults
|
|
26
|
+
* to `!isPostPayment` (the original behavior: ask once, pre-payment; the
|
|
27
|
+
* retry modal reuses the topic already captured then). Pass explicitly
|
|
28
|
+
* when a caller needs the two independent — e.g. a host that collects the
|
|
29
|
+
* topic post-payment on first booking still wants it asked even though
|
|
30
|
+
* `isPostPayment` is (correctly, for analytics) `true`.
|
|
31
|
+
*/
|
|
32
|
+
showGuidanceTopic?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* When true, this component renders no footer of its own (no trust row,
|
|
35
|
+
* no proceed button) — instead it reports proceed-readiness via
|
|
36
|
+
* `onStateChange`, and the host renders its own CTA (e.g. pinned to the
|
|
37
|
+
* bottom of its own page layout, since this component has no opinion on
|
|
38
|
+
* where it's embedded). Defaults to false (renders its own footer,
|
|
39
|
+
* unchanged from before).
|
|
40
|
+
*/
|
|
41
|
+
hideFooter?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Only meaningful when `hideFooter` is true. Called whenever proceed
|
|
44
|
+
* readiness changes (and once on mount) with the current `canProceed`
|
|
45
|
+
* flag and a `proceed()` function the host can wire to its own button —
|
|
46
|
+
* `proceed()` always acts on the latest selection, even if called long
|
|
47
|
+
* after the last `onStateChange` firing.
|
|
48
|
+
*/
|
|
49
|
+
onStateChange?: (state: {
|
|
50
|
+
canProceed: boolean;
|
|
51
|
+
proceed: () => void;
|
|
52
|
+
}) => void;
|
|
53
|
+
}
|
|
54
|
+
export declare const ConsultationSlotFields: React.FC<ConsultationSlotFieldsProps>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ConsultationSlotFieldsProps } from './ConsultationSlotFields';
|
|
2
|
+
export interface ConsultationSlotModalProps extends ConsultationSlotFieldsProps {
|
|
3
|
+
isOpen: boolean;
|
|
4
|
+
onClose: () => void;
|
|
5
|
+
}
|
|
6
|
+
export declare const ConsultationSlotModal: React.FC<ConsultationSlotModalProps>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { KundliPlan, ConsultationSlotSelection } from './types';
|
|
2
|
+
import { KundliAnalytics } from '../../analytics';
|
|
3
|
+
export interface KundliPlanBottomSheetProps {
|
|
4
|
+
isOpen: boolean;
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
selectedPlan: KundliPlan | null;
|
|
7
|
+
onSelectPlan: (plan: KundliPlan) => void;
|
|
8
|
+
onProceed: (plan: KundliPlan, consultationSlot?: ConsultationSlotSelection) => void;
|
|
9
|
+
plans?: KundliPlan[];
|
|
10
|
+
t?: (key: string) => string;
|
|
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;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Slide-up bottom sheet that lets the user choose a Kundli plan.
|
|
25
|
+
*
|
|
26
|
+
* Only rendered when `isOpen` is true (controlled by KundliContext).
|
|
27
|
+
* Shown exclusively for the `v1` variant — the context gates this.
|
|
28
|
+
*/
|
|
29
|
+
export declare const KundliPlanBottomSheet: React.FC<KundliPlanBottomSheetProps>;
|
|
30
|
+
export type { KundliPlan, ConsultationSlotSelection } from './types';
|
|
31
|
+
export { getDefaultPlans } from './planDefaults';
|
|
32
|
+
export { PlanCard } from './PlanCard';
|
|
33
|
+
export { PlanSheetHeader } from './PlanSheetHeader';
|
|
34
|
+
export { PlanFeatureList } from './PlanFeatureList';
|
|
35
|
+
export { AstrologerCard } from './AstrologerCard';
|
|
36
|
+
export { ConsultationSlotModal } from './ConsultationSlotModal';
|
|
37
|
+
export { ConsultationSlotFields } from './ConsultationSlotFields';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { KundliPlan } from './types';
|
|
2
|
+
export interface PlanCardProps {
|
|
3
|
+
plan: KundliPlan;
|
|
4
|
+
isSelected: boolean;
|
|
5
|
+
onSelect: (id: string) => void;
|
|
6
|
+
t?: (key: string, options?: any) => string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Renders a single Kundli plan card.
|
|
10
|
+
*
|
|
11
|
+
* Composed of:
|
|
12
|
+
* - Plan title + radio button
|
|
13
|
+
* - Price row (with optional original price & savings badge)
|
|
14
|
+
* - PlanFeatureList (included / excluded features)
|
|
15
|
+
* - Optional: astrologer heading + list of AstrologerCard sub-components
|
|
16
|
+
*
|
|
17
|
+
* Selecting the card calls `onSelect` with the plan id.
|
|
18
|
+
*/
|
|
19
|
+
export declare const PlanCard: React.FC<PlanCardProps>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { KundliPlanFeature } from './types';
|
|
2
|
+
export interface PlanFeatureListProps {
|
|
3
|
+
features: KundliPlanFeature[];
|
|
4
|
+
t?: (key: string, options?: any) => string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Renders an accessible list of plan features, each with a check (included)
|
|
8
|
+
* or cross (excluded) icon.
|
|
9
|
+
*/
|
|
10
|
+
export declare const PlanFeatureList: React.FC<PlanFeatureListProps>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const CheckIcon: React.FC;
|
|
2
|
+
export declare const CrossIcon: React.FC;
|
|
3
|
+
/** Back arrow chevron */
|
|
4
|
+
export declare const ChevronLeftIcon: React.FC;
|
|
5
|
+
/** Down chevron, used by the consultation-language dropdown trigger */
|
|
6
|
+
export declare const ChevronDownIcon: React.FC;
|
|
7
|
+
/** Lightning bolt icon for "Most popular" badge */
|
|
8
|
+
export declare const BoltIcon: React.FC;
|
|
9
|
+
/** Trend up icon for "Most popular" badge */
|
|
10
|
+
export declare const TrendUpIcon: React.FC;
|
|
11
|
+
/** Sun icon for "Morning" period tab */
|
|
12
|
+
export declare const MorningIcon: React.FC;
|
|
13
|
+
/** Sun-cloud icon for "Afternoon" period tab */
|
|
14
|
+
export declare const AfternoonIcon: React.FC;
|
|
15
|
+
/** Moon icon for "Evening" period tab */
|
|
16
|
+
export declare const EveningIcon: React.FC;
|
|
17
|
+
/** Calendar-with-slash icon for the "No slots available" empty state */
|
|
18
|
+
export declare const CalendarOffIcon: React.FC;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface PlanSheetHeaderProps {
|
|
2
|
+
title: string;
|
|
3
|
+
onBack: () => void;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Sticky header for the plan selection bottom sheet.
|
|
7
|
+
* Shows a back button on the left and a centred orange title.
|
|
8
|
+
*/
|
|
9
|
+
export declare const PlanSheetHeader: React.FC<PlanSheetHeaderProps>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ConsultationSlotDate, ConsultationSlotPeriod, ConsultationSlotsByLanguage } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Formats an ISO datetime (e.g. "2026-08-03T09:00:00+05:30") into a short
|
|
4
|
+
* label like "9:00 AM". Reads the hour/minute directly off the string
|
|
5
|
+
* instead of going through `Date`, so the slot shows the exact wall-clock
|
|
6
|
+
* time the backend sent rather than being reinterpreted in the browser's
|
|
7
|
+
* local timezone.
|
|
8
|
+
*/
|
|
9
|
+
export declare const formatSlotTime: (isoDateTime: string) => string;
|
|
10
|
+
/** Builds a short day-tab label ("Today" / "Tomorrow" / weekday) + day number for a "yyyy-MM-dd" date string. */
|
|
11
|
+
export declare const formatSlotDayLabel: (isoDate: string, referenceDate?: Date) => ConsultationSlotDate;
|
|
12
|
+
export declare const CONSULTATION_PERIOD_ORDER: ConsultationSlotPeriod[];
|
|
13
|
+
/**
|
|
14
|
+
* Guidance topic chips shown before slot selection. Frontend-only, static
|
|
15
|
+
* list — never fetched from an API. `labelKey` resolves via the `t` prop
|
|
16
|
+
* (falls back to `label` when no translation is provided).
|
|
17
|
+
*/
|
|
18
|
+
export declare const GUIDANCE_TOPICS: {
|
|
19
|
+
id: string;
|
|
20
|
+
labelKey: string;
|
|
21
|
+
label: string;
|
|
22
|
+
}[];
|
|
23
|
+
/**
|
|
24
|
+
* Consultation-language dropdown options shown on the slot selection screen.
|
|
25
|
+
* Matches the report-language codes the host app's preselect API returns
|
|
26
|
+
* availability for (`ConsultationSlotsByLanguage` keys). `labelKey` resolves
|
|
27
|
+
* via the `t` prop, reusing the same keys as the kundli form's report
|
|
28
|
+
* language chips (falls back to `label` when no translation is provided).
|
|
29
|
+
*/
|
|
30
|
+
export declare const CONSULTATION_LANGUAGE_OPTIONS: {
|
|
31
|
+
code: string;
|
|
32
|
+
labelKey: string;
|
|
33
|
+
label: string;
|
|
34
|
+
}[];
|
|
35
|
+
export declare const languageHasAvailability: (language: ConsultationSlotsByLanguage[string] | undefined) => boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Picks which consultation language should be preselected when the slot
|
|
38
|
+
* modal opens, based on the report language the user selected in the form:
|
|
39
|
+
* try that report language's default consultation language first, then its
|
|
40
|
+
* fallback, then — if neither has availability — whichever other language
|
|
41
|
+
* does, in `CONSULTATION_LANGUAGE_OPTIONS` order. Falls back to the default
|
|
42
|
+
* language itself if nothing has availability at all.
|
|
43
|
+
*/
|
|
44
|
+
export declare const getDefaultConsultationLanguage: (slotsByLanguage: ConsultationSlotsByLanguage, reportLanguage: string | null | undefined, isGlobal: boolean) => string;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { KundliPlanBottomSheet, getDefaultPlans } from './KundliPlanBottomSheet';
|
|
2
|
+
export type { KundliPlanBottomSheetProps, KundliPlan, ConsultationSlotSelection } from './KundliPlanBottomSheet';
|
|
3
|
+
export { ConsultationSlotModal } from './ConsultationSlotModal';
|
|
4
|
+
export type { ConsultationSlotModalProps } from './ConsultationSlotModal';
|
|
5
|
+
export { ConsultationSlotFields } from './ConsultationSlotFields';
|
|
6
|
+
export type { ConsultationSlotFieldsProps } from './ConsultationSlotFields';
|
|
7
|
+
export type { KundliPlanAstrologer, ConsultationSlot, ConsultationSlotDay, ConsultationSlotPeriod, ConsultationSlotsPreselectData, ConsultationSlotsByLanguage, FetchConsultationSlots, } from './types';
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export interface KundliPlanFeature {
|
|
2
|
+
text: string;
|
|
3
|
+
included: boolean;
|
|
4
|
+
}
|
|
5
|
+
export interface KundliPlanAstrologer {
|
|
6
|
+
name: string;
|
|
7
|
+
experience: string;
|
|
8
|
+
languages?: string[];
|
|
9
|
+
imageUrl?: string;
|
|
10
|
+
certifications: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface KundliPlan {
|
|
13
|
+
id: string;
|
|
14
|
+
title: string;
|
|
15
|
+
price: string;
|
|
16
|
+
originalPrice?: string;
|
|
17
|
+
savingsLabel?: string;
|
|
18
|
+
features: KundliPlanFeature[];
|
|
19
|
+
badge?: string;
|
|
20
|
+
astrologers?: KundliPlanAstrologer[];
|
|
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
|
+
/** Availability per report-language code (e.g. "en", "hi", "te", "ta", "kn", "gu", "mr"), as returned by the host app's slots API. */
|
|
50
|
+
export type ConsultationSlotsByLanguage = Record<string, ConsultationSlotsPreselectData>;
|
|
51
|
+
/** Callback provided by the host app to fetch real consultation slot availability for every report language at once. */
|
|
52
|
+
export type FetchConsultationSlots = () => Promise<ConsultationSlotsByLanguage>;
|
|
53
|
+
/** A guidance topic chip, e.g. "Career & work" */
|
|
54
|
+
export interface ConsultationTopic {
|
|
55
|
+
id: string;
|
|
56
|
+
label: string;
|
|
57
|
+
}
|
|
58
|
+
/** Details captured once the user completes the consultation slot selection flow. */
|
|
59
|
+
export interface ConsultationSlotSelection {
|
|
60
|
+
start: string;
|
|
61
|
+
end: string;
|
|
62
|
+
period: ConsultationSlotPeriod;
|
|
63
|
+
/** Guidance topic id the user picked (e.g. "career_work"). Frontend-only — never fetched from an API. */
|
|
64
|
+
topic?: string;
|
|
65
|
+
/** Report-language code the user picked in the slot modal's language dropdown (e.g. "en", "hi"). */
|
|
66
|
+
language?: string;
|
|
67
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { KundliPlanAstrologer } from '../KundliPlanBottomSheet/types';
|
|
2
|
+
interface AstrologerSectionProps {
|
|
3
|
+
astrologers: KundliPlanAstrologer[];
|
|
4
|
+
heading: string;
|
|
5
|
+
t: (key: string) => string;
|
|
6
|
+
}
|
|
7
|
+
export declare const AstrologerSection: React.FC<AstrologerSectionProps>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ThreeSkuPlan } from './constants';
|
|
2
|
+
import { ThreeSkuAnalytics } from './ThreeSkuPlanBottomSheet.types';
|
|
3
|
+
interface PlanSelectorStripProps {
|
|
4
|
+
plans: ThreeSkuPlan[];
|
|
5
|
+
selectedId: string;
|
|
6
|
+
t: (key: string) => string;
|
|
7
|
+
analytics?: ThreeSkuAnalytics;
|
|
8
|
+
onSelectPlan: (plan: ThreeSkuPlan) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const PlanSelectorStrip: React.FC<PlanSelectorStripProps>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface QuestionInputProps {
|
|
2
|
+
textareaRef: React.RefObject<HTMLTextAreaElement>;
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
placeholder: string;
|
|
6
|
+
chipKeys: readonly string[];
|
|
7
|
+
t: (key: string) => string;
|
|
8
|
+
onFocus: () => void;
|
|
9
|
+
onClick: () => void;
|
|
10
|
+
onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;
|
|
11
|
+
onChipClick: (key: string, idx: number) => void;
|
|
12
|
+
onViewSample?: () => void;
|
|
13
|
+
}
|
|
14
|
+
export declare const QuestionInput: React.FC<QuestionInputProps>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { KundliPlanAstrologer } from '../KundliPlanBottomSheet/types';
|
|
2
|
+
export interface ThreeSkuAstrologerCardProps {
|
|
3
|
+
astrologer: KundliPlanAstrologer;
|
|
4
|
+
t?: (key: string, options?: any) => string;
|
|
5
|
+
}
|
|
6
|
+
export declare const ThreeSkuAstrologerCard: React.FC<ThreeSkuAstrologerCardProps>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const THREE_SKU_ASTROLOGERS: readonly [{
|
|
2
|
+
readonly id: "samiksha";
|
|
3
|
+
readonly name: "Acharya Rama Sarma";
|
|
4
|
+
readonly imageUrl: "https://srm-cdn.a4b.io/yoda/1781527417602.webp";
|
|
5
|
+
readonly experience: "21+ Years of experience";
|
|
6
|
+
readonly languages: readonly ["Hindi", "English", "Telugu"];
|
|
7
|
+
readonly certifications: readonly ["Certified Jyotish Acharya", "Guaranteed accurate solutions"];
|
|
8
|
+
}, {
|
|
9
|
+
readonly id: "jyoti";
|
|
10
|
+
readonly name: "Astro Neeraj";
|
|
11
|
+
readonly imageUrl: "https://srm-cdn.a4b.io/yoda/1781527490353.webp";
|
|
12
|
+
readonly experience: "21+ Years of experience";
|
|
13
|
+
readonly languages: readonly ["Hindi", "English"];
|
|
14
|
+
readonly certifications: readonly ["21+ Years Vedic Astrology", "Result-Oriented Spiritual Guidance"];
|
|
15
|
+
}];
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { ThreeSkuLocale, ThreeSkuPlan } from './constants';
|
|
2
|
+
import { ConsultationSlotSelection } from '../KundliPlanBottomSheet/types';
|
|
3
|
+
/**
|
|
4
|
+
* Analytics interface for the 3-SKU experiment bottom sheet.
|
|
5
|
+
* Extends the base plan analytics with question-specific tracking methods.
|
|
6
|
+
* Intentionally defined here so this component has zero dependency on
|
|
7
|
+
* the base KundliAnalytics interface.
|
|
8
|
+
*/
|
|
9
|
+
export interface ThreeSkuAnalytics {
|
|
10
|
+
trackPlanPageViewed?(): void;
|
|
11
|
+
trackPlanPageClosed?(): void;
|
|
12
|
+
trackPlanSelected?(params: {
|
|
13
|
+
planId: string;
|
|
14
|
+
planName: string;
|
|
15
|
+
}): void;
|
|
16
|
+
trackPlanProceedClicked?(params: {
|
|
17
|
+
planId: string;
|
|
18
|
+
planName: string;
|
|
19
|
+
price?: string;
|
|
20
|
+
currency?: string;
|
|
21
|
+
question_asked?: boolean;
|
|
22
|
+
question_text?: string;
|
|
23
|
+
question_source?: "chip" | "custom" | "chip_edited";
|
|
24
|
+
cta_type?: "proceed" | "confirm_consultation_slot";
|
|
25
|
+
next_step?: "payment" | "slot_selection";
|
|
26
|
+
}): void;
|
|
27
|
+
trackQuestionTextboxClicked?(params: {
|
|
28
|
+
entry_method: "tap" | "keyboard_focus";
|
|
29
|
+
textbox_empty: boolean;
|
|
30
|
+
}): void;
|
|
31
|
+
trackPreSuggestedQuestionSelected?(params: {
|
|
32
|
+
question_text_loaded: string;
|
|
33
|
+
chip_index: number;
|
|
34
|
+
previous_chip_index: number | null;
|
|
35
|
+
user_had_custom_text: boolean;
|
|
36
|
+
}): void;
|
|
37
|
+
trackOneQuestionViewSampleReportClicked?(): void;
|
|
38
|
+
/** Fires when the astrologer consultation plan's "Select consultation slot" CTA is clicked. */
|
|
39
|
+
trackSelectConsultationSlotClicked?(params: {
|
|
40
|
+
planId: string;
|
|
41
|
+
planName: string;
|
|
42
|
+
}): void;
|
|
43
|
+
}
|
|
44
|
+
export interface ThreeSkuPlanBottomSheetProps {
|
|
45
|
+
isOpen: boolean;
|
|
46
|
+
onClose: () => void;
|
|
47
|
+
selectedPlan: ThreeSkuPlan | null;
|
|
48
|
+
onSelectPlan: (plan: ThreeSkuPlan) => void;
|
|
49
|
+
onProceed: (plan: ThreeSkuPlan, question?: string, consultationSlot?: ConsultationSlotSelection) => void;
|
|
50
|
+
plans?: ThreeSkuPlan[];
|
|
51
|
+
/** Whether the user is on the international (global) flow. Used for default plan pricing. */
|
|
52
|
+
isGlobal?: boolean;
|
|
53
|
+
/** Locale for built-in translations. Defaults to "en". Falls back to the passed `t` prop for any key not found locally. */
|
|
54
|
+
locale?: ThreeSkuLocale;
|
|
55
|
+
t?: (key: string) => string;
|
|
56
|
+
analytics?: ThreeSkuAnalytics;
|
|
57
|
+
/** URL for the "1 Question" sample answer PDF shown inside the sheet. */
|
|
58
|
+
oneQuestionSampleHref?: string;
|
|
59
|
+
/** Report language selected in the kundli form — drives the consultation slot modal's default language. */
|
|
60
|
+
reportLanguage?: string;
|
|
61
|
+
}
|