@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.
Files changed (111) hide show
  1. package/dist/analytics-C7q6coqa.js +5099 -0
  2. package/dist/analytics-C7q6coqa.js.map +1 -0
  3. package/dist/analytics.d.ts +308 -0
  4. package/dist/components/KundliForm/KundliForm.d.ts +50 -0
  5. package/dist/components/KundliForm/index.d.ts +2 -0
  6. package/dist/components/KundliForm/sections/FormHeader/FormHeader.d.ts +7 -0
  7. package/dist/components/KundliForm/sections/FormHeader/index.d.ts +2 -0
  8. package/dist/components/KundliForm/sections/ProceedFooter/ProceedFooter.d.ts +28 -0
  9. package/dist/components/KundliForm/sections/ProceedFooter/index.d.ts +2 -0
  10. package/dist/components/KundliForm/sections/UserInfoFormSection/UserInfoFormSection.d.ts +20 -0
  11. package/dist/components/KundliForm/sections/UserInfoFormSection/constants.d.ts +215 -0
  12. package/dist/components/KundliForm/sections/UserInfoFormSection/googlePlacesAutocomplete.d.ts +21 -0
  13. package/dist/components/KundliForm/sections/UserInfoFormSection/index.d.ts +2 -0
  14. package/dist/components/KundliForm/sections/UserInfoFormSection/useAtlasPlacesAutocomplete.d.ts +22 -0
  15. package/dist/components/KundliForm/sections/UserInfoFormSection/useGooglePlacesAutocomplete.d.ts +51 -0
  16. package/dist/components/KundliForm/sections/index.d.ts +3 -0
  17. package/dist/components/KundliPage/KundliContext.d.ts +108 -0
  18. package/dist/components/KundliPage/KundliPage.d.ts +92 -0
  19. package/dist/components/KundliPage/KundliPageV1.d.ts +98 -0
  20. package/dist/components/KundliPage/KundliPageVariant.d.ts +10 -0
  21. package/dist/components/KundliPage/index.d.ts +4 -0
  22. package/dist/components/KundliPage/sections/CTAFooter/CTAFooter.d.ts +15 -0
  23. package/dist/components/KundliPage/sections/CTAFooter/index.d.ts +2 -0
  24. package/dist/components/KundliPage/sections/ContactUsSection/ContactUsSection.d.ts +9 -0
  25. package/dist/components/KundliPage/sections/ContactUsSection/index.d.ts +2 -0
  26. package/dist/components/KundliPage/sections/FAQSection/FAQSection.d.ts +8 -0
  27. package/dist/components/KundliPage/sections/FAQSection/index.d.ts +2 -0
  28. package/dist/components/KundliPage/sections/FeedbackSection/FeedbackSection.d.ts +13 -0
  29. package/dist/components/KundliPage/sections/FeedbackSection/index.d.ts +2 -0
  30. package/dist/components/KundliPage/sections/HeroSection/HeroSection.d.ts +5 -0
  31. package/dist/components/KundliPage/sections/HeroSection/index.d.ts +2 -0
  32. package/dist/components/KundliPage/sections/KundliHeader/KundliHeader.d.ts +7 -0
  33. package/dist/components/KundliPage/sections/KundliHeader/index.d.ts +2 -0
  34. package/dist/components/KundliPage/sections/KundliTableSection/KundliTableSection.constants.d.ts +36 -0
  35. package/dist/components/KundliPage/sections/KundliTableSection/SampleReportsSection.d.ts +10 -0
  36. package/dist/components/KundliPage/sections/KundliTableSection/index.d.ts +3 -0
  37. package/dist/components/KundliPage/sections/PremiumReportOverview/PremiumReportOverview.d.ts +26 -0
  38. package/dist/components/KundliPage/sections/PremiumReportOverview/index.d.ts +2 -0
  39. package/dist/components/KundliPage/sections/ThreeStepsProcess/ThreeStepsProcess.d.ts +8 -0
  40. package/dist/components/KundliPage/sections/ThreeStepsProcess/index.d.ts +2 -0
  41. package/dist/components/KundliPage/sections/UniversityCertification/UniversityCertification.d.ts +7 -0
  42. package/dist/components/KundliPage/sections/UniversityCertification/index.d.ts +2 -0
  43. package/dist/components/KundliPage/sections/UtmBannerSection/UtmBannerSection.d.ts +8 -0
  44. package/dist/components/KundliPage/sections/UtmBannerSection/index.d.ts +2 -0
  45. package/dist/components/KundliPage/sections/ViewSampleReportButton/SampleReportModal.d.ts +8 -0
  46. package/dist/components/KundliPage/sections/ViewSampleReportButton/ViewSampleReportButton.d.ts +14 -0
  47. package/dist/components/KundliPage/sections/ViewSampleReportButton/index.d.ts +2 -0
  48. package/dist/components/KundliPage/sections/WhatYoullFindSection/WhatYoullFindSection.d.ts +7 -0
  49. package/dist/components/KundliPage/sections/WhatYoullFindSection/index.d.ts +2 -0
  50. package/dist/components/KundliPage/sections/WhyUsSection/WhyUsSection.d.ts +5 -0
  51. package/dist/components/KundliPage/sections/WhyUsSection/index.d.ts +2 -0
  52. package/dist/components/KundliPage/sections/index.d.ts +13 -0
  53. package/dist/components/KundliPlanBottomSheet/AstrologerCard.d.ts +10 -0
  54. package/dist/components/KundliPlanBottomSheet/AstrologerDetails.d.ts +19 -0
  55. package/dist/components/KundliPlanBottomSheet/ConsultationSlotFields.d.ts +54 -0
  56. package/dist/components/KundliPlanBottomSheet/ConsultationSlotModal.d.ts +6 -0
  57. package/dist/components/KundliPlanBottomSheet/KundliPlanBottomSheet.d.ts +37 -0
  58. package/dist/components/KundliPlanBottomSheet/MostPopularBadge.d.ts +4 -0
  59. package/dist/components/KundliPlanBottomSheet/PlanCard.d.ts +19 -0
  60. package/dist/components/KundliPlanBottomSheet/PlanFeatureList.d.ts +10 -0
  61. package/dist/components/KundliPlanBottomSheet/PlanIcons.d.ts +18 -0
  62. package/dist/components/KundliPlanBottomSheet/PlanSheetHeader.d.ts +9 -0
  63. package/dist/components/KundliPlanBottomSheet/consultationSlotDefaults.d.ts +44 -0
  64. package/dist/components/KundliPlanBottomSheet/index.d.ts +7 -0
  65. package/dist/components/KundliPlanBottomSheet/planDefaults.d.ts +2 -0
  66. package/dist/components/KundliPlanBottomSheet/types.d.ts +67 -0
  67. package/dist/components/ThreeSkuPlanBottomSheet/AstrologerSection.d.ts +8 -0
  68. package/dist/components/ThreeSkuPlanBottomSheet/PlanFeatureList.d.ts +7 -0
  69. package/dist/components/ThreeSkuPlanBottomSheet/PlanSelectorStrip.d.ts +11 -0
  70. package/dist/components/ThreeSkuPlanBottomSheet/ProceedButton.d.ts +9 -0
  71. package/dist/components/ThreeSkuPlanBottomSheet/QuestionChips.d.ts +7 -0
  72. package/dist/components/ThreeSkuPlanBottomSheet/QuestionInput.d.ts +15 -0
  73. package/dist/components/ThreeSkuPlanBottomSheet/SheetHeader.d.ts +6 -0
  74. package/dist/components/ThreeSkuPlanBottomSheet/ThreeSkuAstrologerCard.d.ts +6 -0
  75. package/dist/components/ThreeSkuPlanBottomSheet/ThreeSkuAstrologerProfiles.d.ts +15 -0
  76. package/dist/components/ThreeSkuPlanBottomSheet/ThreeSkuPlanBottomSheet.d.ts +3 -0
  77. package/dist/components/ThreeSkuPlanBottomSheet/ThreeSkuPlanBottomSheet.icons.d.ts +3 -0
  78. package/dist/components/ThreeSkuPlanBottomSheet/ThreeSkuPlanBottomSheet.types.d.ts +61 -0
  79. package/dist/components/ThreeSkuPlanBottomSheet/constants.d.ts +113 -0
  80. package/dist/components/ThreeSkuPlanBottomSheet/index.d.ts +4 -0
  81. package/dist/constants/criticalCss.d.ts +12 -0
  82. package/dist/criticalCss-Dwemq76K.js +2063 -0
  83. package/dist/criticalCss-Dwemq76K.js.map +1 -0
  84. package/dist/dev/main.d.ts +0 -0
  85. package/dist/form-entry.d.ts +15 -0
  86. package/dist/form-entry.js +21 -0
  87. package/dist/form-entry.js.map +1 -0
  88. package/dist/i18n/I18nContext.d.ts +18 -0
  89. package/dist/i18n/index.d.ts +2 -0
  90. package/dist/i18n/translations.d.ts +4 -0
  91. package/dist/i18n/translations.en.d.ts +163 -0
  92. package/dist/i18n/translations.hi.d.ts +163 -0
  93. package/dist/index.d.ts +17 -0
  94. package/dist/kundli-generator.js +66 -0
  95. package/dist/kundli-generator.js.map +1 -0
  96. package/dist/page-entry.d.ts +16 -0
  97. package/dist/page-entry.js +24 -0
  98. package/dist/page-entry.js.map +1 -0
  99. package/dist/style.css +1 -0
  100. package/dist/styles.d.ts +0 -0
  101. package/dist/styles.js +2 -0
  102. package/dist/styles.js.map +1 -0
  103. package/dist/types/image.d.ts +17 -0
  104. package/dist/utils/Stringconstant.d.ts +1 -0
  105. package/dist/utils/index.d.ts +3 -0
  106. package/dist/utils/keyframeStyles.d.ts +10 -0
  107. package/dist/utils/localeStorage.d.ts +10 -0
  108. package/dist/utils/phone.d.ts +26 -0
  109. package/dist/utils/storage.d.ts +7 -0
  110. package/dist/utils/utmBanner.d.ts +23 -0
  111. 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,2 @@
1
+ export { WhatYoullFindSection } from './WhatYoullFindSection';
2
+ export type { WhatYoullFindSectionProps } from './WhatYoullFindSection';
@@ -0,0 +1,5 @@
1
+ export interface WhyUsSectionProps {
2
+ t: (key: string) => string;
3
+ className?: string;
4
+ }
5
+ export declare const WhyUsSection: React.FC<WhyUsSectionProps>;
@@ -0,0 +1,2 @@
1
+ export { WhyUsSection } from './WhyUsSection';
2
+ export type { WhyUsSectionProps } from './WhyUsSection';
@@ -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,4 @@
1
+ export interface MostPopularBadgeProps {
2
+ label: string;
3
+ }
4
+ export declare const MostPopularBadge: React.FC<MostPopularBadgeProps>;
@@ -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,2 @@
1
+ import { KundliPlan } from './types';
2
+ export declare const getDefaultPlans: (isGlobal: boolean) => KundliPlan[];
@@ -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,7 @@
1
+ import { ThreeSkuPlan } from './constants';
2
+ interface PlanFeatureListProps {
3
+ plan: ThreeSkuPlan;
4
+ t: (key: string) => string;
5
+ }
6
+ export declare const PlanFeatureList: React.FC<PlanFeatureListProps>;
7
+ 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,9 @@
1
+ interface ProceedButtonProps {
2
+ canProceed: boolean;
3
+ label: string;
4
+ showDisabledHint: boolean;
5
+ hintText: string;
6
+ onClick: () => void;
7
+ }
8
+ export declare const ProceedButton: React.FC<ProceedButtonProps>;
9
+ export {};
@@ -0,0 +1,7 @@
1
+ interface QuestionChipsProps {
2
+ chipKeys: readonly string[];
3
+ t: (key: string) => string;
4
+ onChipClick: (key: string, idx: number) => void;
5
+ }
6
+ export declare const QuestionChips: React.FC<QuestionChipsProps>;
7
+ 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
+ interface SheetHeaderProps {
2
+ title: string;
3
+ onClose: () => void;
4
+ }
5
+ export declare const SheetHeader: React.FC<SheetHeaderProps>;
6
+ 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,3 @@
1
+ import { ThreeSkuPlanBottomSheetProps } from './ThreeSkuPlanBottomSheet.types';
2
+ export type { ThreeSkuAnalytics, ThreeSkuPlanBottomSheetProps } from './ThreeSkuPlanBottomSheet.types';
3
+ export declare const ThreeSkuPlanBottomSheet: React.FC<ThreeSkuPlanBottomSheetProps>;
@@ -0,0 +1,3 @@
1
+ export declare const IncludedFeatureIcon: () => JSX.Element;
2
+ export declare const ExcludedFeatureIcon: () => JSX.Element;
3
+ export declare const TrendUpIcon: () => JSX.Element;
@@ -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
+ }