@srimandir/astro-consultation 2.45.0 → 2.46.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astro-consultation.js","sources":["../src/components/AstrologerCard/currency.ts","../src/components/AstrologerCard/CardIcons.tsx","../src/components/AstrologerCard/AstrologerCard.tsx","../src/components/SlotUnavailableNotice/icons.tsx","../src/components/SlotUnavailableNotice/SlotUnavailableNotice.tsx","../src/components/UnscheduledAstrologerList/icons.tsx","../src/components/UnscheduledAstrologerList/AstrologerPickerRow.tsx","../src/components/ConsultationSlotSheet/icons.tsx","../src/components/ConsultationSlotSheet/ConsultationSlotSheet.tsx","../src/i18n/en.ts","../src/i18n/hi.ts","../src/i18n/kn.ts","../src/i18n/te.ts","../src/i18n/index.ts","../src/components/PaymentResult/PaymentIcons.tsx","../src/components/PaymentResult/PaymentResult.tsx","../src/components/ConsultationDetailsCard/icons.tsx","../src/components/ConsultationDetailsCard/ConsultationDetailsCard.tsx","../src/components/AstroConsultationSuccessModal/icons.tsx","../src/components/AstroConsultationSuccessModal/AstroConsultationSuccessModal.tsx","../src/components/ConsultationBookedSection/icons.tsx","../src/components/ConsultationBookedSection/ConsultationBookedSection.tsx","../src/components/UnscheduledAstrologerList/UnscheduledAstrologerList.tsx","../src/components/UnscheduledAstrologerList/UnscheduledAstrologerListSkeleton.tsx"],"sourcesContent":["/**\n * Currency symbol for an ISO 4217 code.\n *\n * Deliberately small: the card only ever shows rupees or dollars today, and\n * hosts that price in other currencies pass a resolved `currencySymbol` prop\n * instead (hanuman has its own country-aware `getCurrencySymbol`). Unknown\n * codes fall back to \"$\" rather than rendering a bare number.\n */\nexport const getAstrologerPriceSymbol = (currencyCode?: string): string => {\n switch (currencyCode?.toUpperCase()) {\n case 'INR':\n return '₹';\n case 'USD':\n return '$';\n default:\n return '$';\n }\n};\n","import React from 'react';\n\n/**\n * Filled star for the rating pill, traced from the Figma\n * \"Interface, Essential/star-favorite\" asset. Golden Honey 500 (#ffc627).\n */\nexport const StarIcon: React.FC<{ size?: number; className?: string }> = ({\n size = 14,\n className,\n}) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n className={className}\n >\n <path\n d=\"M7 1.167l1.72 3.485 3.846.561-2.783 2.713.657 3.83L7 9.95l-3.44 1.806.657-3.83L1.434 5.213l3.846-.561L7 1.167z\"\n fill=\"#ffc627\"\n stroke=\"#ffc627\"\n strokeWidth=\"1\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n","/**\n * AstrologerCard — one astrologer row on the consultation landing screen.\n *\n * Purely presentational: the host supplies already-mapped astrologer fields and\n * a price block, and gets a tap on \"Select Slot\" back. See `./types.ts` for\n * which fields come from the available-astrologers API and which do not.\n *\n * Currency: pass `currencySymbol` when the host already resolves it (hanuman\n * does, country-aware); otherwise `pricing.currencyCode` is mapped for INR/USD.\n */\nimport React from 'react';\nimport type { AstrologerCardAstrologer, AstrologerCardPricing } from './types';\nimport { getAstrologerPriceSymbol } from './currency';\nimport { StarIcon } from './CardIcons';\nimport styles from './AstrologerCard.module.scss';\n\nexport interface AstrologerCardProps {\n astrologer: AstrologerCardAstrologer;\n /**\n * Price block. Omit to hide the price area entirely — see\n * `AstrologerCardPricing`, none of these values come from the API yet.\n */\n pricing?: AstrologerCardPricing;\n /**\n * Pre-resolved currency symbol, e.g. \"₹\" or \"$\". Wins over\n * `pricing.currencyCode`; pass it when the host maps currency itself.\n */\n currencySymbol?: string;\n /** Fired with the astrologer when \"Select Slot\" is tapped. */\n onSelectSlot?: (astrologer: AstrologerCardAstrologer) => void;\n /** Greys out the CTA, e.g. while a booking is already in flight. */\n disabled?: boolean;\n /** CTA label. Wins over `t(\"consultationSelectSlot\")`. */\n ctaLabel?: string;\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n /** Forwarded to the outermost element so hosts can attach impression observers. */\n innerRef?: React.Ref<HTMLDivElement>;\n}\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\n/** \"4.5\" — one decimal, so an integer 4 from the API still reads as a rating. */\nconst formatRating = (rating: number): string => rating.toFixed(1);\n\nexport const AstrologerCard: React.FC<AstrologerCardProps> = ({\n astrologer,\n pricing,\n currencySymbol,\n onSelectSlot,\n disabled = false,\n ctaLabel,\n t,\n className = '',\n innerRef,\n}) => {\n const {\n name,\n photoUrl,\n languages,\n specialties,\n experienceYears,\n rating,\n isPreviouslyConsulted = false,\n } = astrologer;\n\n const symbol = currencySymbol ?? getAstrologerPriceSymbol(pricing?.currencyCode);\n\n // Every one of these is a documented fallback for a field the API may not\n // send: no rating pill, no experience line, no languages line, no tag row.\n const showRating = typeof rating === 'number' && rating > 0;\n const showExperience = typeof experienceYears === 'number' && experienceYears > 0;\n const languagesLabel = languages?.length ? languages.join(', ') : '';\n const tags = specialties?.filter(Boolean) ?? [];\n\n // A present-but-zero discount (or an mrp that just repeats the price) is not\n // a discount — showing \"0% Off\" or a strike-through at the same price reads\n // as a bug, not a deal.\n const hasMrp = pricing?.mrp != null && pricing.mrp > pricing.price;\n const hasDiscountPercent =\n pricing?.discountPercent != null && pricing.discountPercent > 0;\n\n const content = (\n <>\n <div className={styles.topSection}>\n <div className={styles.photoWrap}>\n {photoUrl ? (\n <img className={styles.photo} src={photoUrl} alt={name} loading=\"lazy\" />\n ) : (\n <div className={styles.photoFallback} aria-hidden=\"true\">\n {name?.trim().charAt(0).toUpperCase() || '?'}\n </div>\n )}\n\n {showRating && (\n <span className={styles.ratingBadge}>\n {formatRating(rating)}\n <StarIcon className={styles.ratingStar} />\n </span>\n )}\n </div>\n\n <div className={styles.details}>\n <div className={styles.identity}>\n <p className={styles.name}>{name}</p>\n\n {showExperience && (\n <p className={styles.experience}>\n {t?.('consultationYearsOfExperience', { count: experienceYears }) ??\n `${experienceYears}+ years of experience`}\n </p>\n )}\n\n {languagesLabel && <p className={styles.languages}>{languagesLabel}</p>}\n </div>\n\n {tags.length > 0 && (\n <div className={styles.tagsRow}>\n {tags.map((tag) => (\n <span key={tag} className={styles.tag}>\n {tag}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <hr className={styles.divider} />\n\n <div className={styles.bottomSection}>\n {pricing && (\n <div className={styles.priceArea}>\n {(hasMrp || hasDiscountPercent) && (\n <div className={styles.discountRow}>\n {hasMrp && (\n <span className={styles.mrp}>\n {symbol}\n {pricing.mrp}\n </span>\n )}\n {hasDiscountPercent && (\n <span className={styles.discount}>\n {t?.('consultationPercentOff', { percent: pricing.discountPercent }) ??\n `${pricing.discountPercent}% Off`}\n </span>\n )}\n </div>\n )}\n <span className={styles.price}>\n {symbol}\n {pricing.price}\n </span>\n </div>\n )}\n\n <div className={styles.actionArea}>\n <button\n type=\"button\"\n className={styles.ctaBtn}\n disabled={disabled}\n onClick={() => onSelectSlot?.(astrologer)}\n >\n {ctaLabel ?? t?.('consultationSelectSlot') ?? 'Select Slot'}\n </button>\n </div>\n </div>\n </>\n );\n\n // The rose plate exists only to show the ribbon under the card, so in the\n // common case the card itself is the root and hosts get no extra wrapper.\n if (!isPreviouslyConsulted) {\n return (\n <div ref={innerRef} className={cx(styles.card, className)}>\n {content}\n </div>\n );\n }\n\n return (\n <div ref={innerRef} className={cx(styles.plate, className)}>\n <div className={styles.card}>{content}</div>\n <div className={styles.ribbon}>\n {t?.('consultationPreviouslyConsulted') ?? 'Previously Consulted'}\n </div>\n </div>\n );\n};\n","import React from 'react';\n\n/** Clock-with-cancel-mark glyph in the notice's white badge (Figma 783:23265). */\nexport const ClockUnavailableIcon: React.FC = () => (\n <svg width=\"19.208\" height=\"19.208\" viewBox=\"0 0 19.208 19.208\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M6.28262 12.9254L4.12172 15.0863\" stroke=\"#D93640\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M4.12172 12.9254L6.28262 15.0863\" stroke=\"#D93640\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <circle cx=\"5.20217\" cy=\"14.0058\" r=\"3.6015\" stroke=\"#D93640\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path\n d=\"M10.4043 16.0067C9.7169 16.0056 9.03316 15.9061 8.37389 15.7113\"\n stroke=\"#D93640\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.4043 16.0067C13.514 16.0125 16.2777 14.0258 17.2629 11.0763C18.248 8.12679 17.233 4.87791 14.744 3.01382C12.255 1.14973 8.85175 1.08966 6.2985 2.86476C3.74525 4.63986 2.61622 7.85089 3.49666 10.8333\"\n stroke=\"#D93640\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M13.5184 9.1166H10.0042V4.802\" stroke=\"#D93640\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n","/**\n * SlotUnavailableNotice — inline error banner shown when a booking attempt\n * loses a race (someone else took the slot first) (Figma 783:23257).\n */\nimport React from 'react';\nimport { ClockUnavailableIcon } from './icons';\nimport styles from './SlotUnavailableNotice.module.scss';\n\nexport interface SlotUnavailableNoticeProps {\n /** Message text. Wins over `t(\"consultationSlotUnavailable\")`. */\n message?: string;\n /** Translation lookup; every string falls back to the design's Hindi default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n}\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport const SlotUnavailableNotice: React.FC<SlotUnavailableNoticeProps> = ({\n message,\n t,\n className = '',\n}) => (\n <div className={cx(styles.root, className)} role=\"alert\">\n <span className={styles.badge}>\n <ClockUnavailableIcon />\n </span>\n <p className={styles.message}>\n {message ??\n t?.('consultationSlotUnavailable') ??\n 'यह समय स्लॉट अब उपलब्ध नहीं है, कृपया कोई अन्य स्लॉट चुनें'}\n </p>\n </div>\n);\n","import React from 'react';\n\n/** Green check-circle beside \"Included in your package\". */\nexport const IncludedCheckIcon: React.FC = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 13 13\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M6.5 0C10.0901 0 13 2.90986 13 6.5C13 10.0901 10.0901 13 6.5 13C2.90986 13 0 10.0901 0 6.5C0 2.90986 2.90986 0 6.5 0ZM10.21 4.1709C10.0284 3.96331 9.71281 3.94187 9.50488 4.12305L5.25 7.83594L3.49609 6.30469C3.28809 6.12318 2.97163 6.14562 2.79004 6.35352C2.60887 6.56152 2.63011 6.87711 2.83789 7.05859L4.92188 8.87695C5.11019 9.04088 5.39091 9.0411 5.5791 8.87695L10.1621 4.87695C10.3699 4.6954 10.3913 4.37889 10.21 4.1709Z\"\n fill=\"#159169\"\n />\n </svg>\n);\n\n/** Filled star beside the astrologer's rating. */\nexport const StarIcon: React.FC = () => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 9.38 8.94\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M9.28094 3.71918L7.22537 5.72294L7.7108 8.55302C7.73192 8.67677 7.6811 8.80184 7.57946 8.87576C7.52204 8.91767 7.45373 8.93879 7.38542 8.93879C7.33295 8.93879 7.28015 8.92625 7.23197 8.90084L4.69031 7.56467L2.14898 8.90051C2.0381 8.95925 1.90313 8.94968 1.80149 8.87543C1.69985 8.80151 1.64903 8.67644 1.67015 8.55269L2.15558 5.72261L0.0996759 3.71918C0.00991586 3.6314 -0.0227541 3.50006 0.0161859 3.38093C0.0551259 3.2618 0.158416 3.17435 0.282826 3.1562L3.1238 2.7437L4.3943 0.169042C4.50551 -0.0563475 4.87511 -0.0563475 4.98632 0.169042L6.25682 2.7437L9.09779 3.1562C9.2222 3.17435 9.32549 3.26147 9.36443 3.38093C9.40337 3.50039 9.3707 3.63107 9.28094 3.71918Z\"\n fill=\"#FFC627\"\n />\n </svg>\n);\n\n/** Blue verified-check badge overlapping the astrologer's photo. */\nexport const VerifiedBadgeIcon: React.FC = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 23.9 23.9\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"11.6667\" cy=\"11.6667\" r=\"5.83333\" fill=\"white\" />\n <path\n d=\"M21.1605 13.933C21.4969 13.7095 21.7815 13.4167 21.9953 13.0741C22.2091 12.7315 22.3471 12.3472 22.4 11.9468C22.3471 11.5465 22.2091 11.1621 21.9953 10.8196C21.7815 10.477 21.4969 10.1841 21.1605 9.9607C20.8921 9.73966 20.6602 9.47759 20.4736 9.18417C20.4343 8.81253 20.4699 8.43679 20.5781 8.0791C20.7089 7.70675 20.7605 7.31122 20.7296 6.91779C20.6988 6.52437 20.5861 6.14171 20.3989 5.7943C20.1225 5.50969 19.79 5.2857 19.4223 5.13659C19.0547 4.98747 18.66 4.9165 18.2635 4.92817C17.905 4.91214 17.5517 4.83644 17.2181 4.70417C16.9832 4.43149 16.8009 4.11755 16.6805 3.7783C16.5688 3.3924 16.3767 3.03453 16.1167 2.72824C15.8568 2.42195 15.5349 2.17418 15.1723 2.00123C14.7891 1.93273 14.3959 1.94517 14.0178 2.03776C13.6397 2.13035 13.2852 2.30103 12.9771 2.53883C12.6647 2.75141 12.3152 2.90338 11.9467 2.98683C11.5782 2.90338 11.2286 2.75141 10.9163 2.53883C10.6085 2.30026 10.2541 2.12911 9.87586 2.03649C9.49767 1.94387 9.10421 1.93186 8.72107 2.00123C8.35846 2.17418 8.03659 2.42195 7.77662 2.72824C7.51666 3.03453 7.32451 3.3924 7.2128 3.7783C7.09247 4.11755 6.91018 4.43149 6.6752 4.70417C6.34164 4.83644 5.98834 4.91214 5.62987 4.92817C5.23331 4.9165 4.83866 4.98747 4.47102 5.13659C4.10338 5.2857 3.77079 5.50969 3.4944 5.7943C3.30721 6.14171 3.19458 6.52437 3.16372 6.91779C3.13287 7.31122 3.18446 7.70675 3.3152 8.0791C3.42345 8.43679 3.459 8.81253 3.41973 9.18417C3.2331 9.47759 3.00126 9.73966 2.7328 9.9607C2.39644 10.1841 2.11181 10.477 1.89802 10.8196C1.68424 11.1621 1.54625 11.5465 1.49333 11.9468C1.54625 12.3472 1.68424 12.7315 1.89802 13.0741C2.11181 13.4167 2.39644 13.7095 2.7328 13.933C3.00126 14.154 3.2331 14.4161 3.41973 14.7095C3.459 15.0811 3.42345 15.4569 3.3152 15.8146C3.18446 16.1869 3.13287 16.5824 3.16372 16.9759C3.19458 17.3693 3.30721 17.752 3.4944 18.0994C3.77079 18.384 4.10338 18.608 4.47102 18.7571C4.83866 18.9062 5.23331 18.9772 5.62987 18.9655C5.98834 18.9815 6.34164 19.0572 6.6752 19.1895C6.91018 19.4622 7.09247 19.7761 7.2128 20.1154C7.32451 20.5013 7.51666 20.8591 7.77662 21.1654C8.03659 21.4717 8.35846 21.7195 8.72107 21.8924C9.10423 21.9609 9.49749 21.9485 9.87555 21.8559C10.2536 21.7633 10.6081 21.5926 10.9163 21.3548C11.2286 21.1423 11.5782 20.9903 11.9467 20.9068C12.3152 20.9903 12.6647 21.1423 12.9771 21.3548C13.4867 21.6934 14.0709 21.9035 14.6795 21.9671C14.8469 21.9716 15.0137 21.9463 15.1723 21.8924C15.5349 21.7195 15.8568 21.4717 16.1167 21.1654C16.3767 20.8591 16.5688 20.5013 16.6805 20.1154C16.8009 19.7761 16.9832 19.4622 17.2181 19.1895C17.5517 19.0572 17.905 18.9815 18.2635 18.9655C18.66 18.9772 19.0547 18.9062 19.4223 18.7571C19.79 18.608 20.1225 18.384 20.3989 18.0994C20.5861 17.752 20.6988 17.3693 20.7296 16.9759C20.7605 16.5824 20.7089 16.1869 20.5781 15.8146C20.4699 15.4569 20.4343 15.0811 20.4736 14.7095C20.6602 14.4161 20.8921 14.154 21.1605 13.933ZM15.456 10.4834L11.4837 14.4706C11.3399 14.6049 11.1504 14.6797 10.9536 14.6797C10.7568 14.6797 10.5673 14.6049 10.4235 14.4706L8.43734 12.4695C8.30102 12.3304 8.22511 12.1431 8.22609 11.9484C8.22707 11.7536 8.30488 11.5671 8.44259 11.4294C8.5803 11.2917 8.7668 11.2139 8.96155 11.2129C9.1563 11.2119 9.34357 11.2879 9.48267 11.4242L10.9461 12.8876L14.4107 9.4231C14.5504 9.28668 14.738 9.21031 14.9333 9.21031C15.1287 9.21031 15.3162 9.28668 15.456 9.4231C15.5269 9.492 15.5832 9.57442 15.6217 9.66548C15.6602 9.75653 15.68 9.85438 15.68 9.95323C15.68 10.0521 15.6602 10.1499 15.6217 10.241C15.5832 10.332 15.5269 10.4145 15.456 10.4834Z\"\n fill=\"#1A6EE5\"\n />\n </svg>\n);\n\n/** Trailing arrow on the \"Schedule your call\" CTA. */\nexport const ArrowRightIcon: React.FC = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M3.75 9H14.25M14.25 9L9.75 4.5M14.25 9L9.75 13.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n","/**\n * The horizontally-scrollable astrologer card row — shared by\n * `UnscheduledAstrologerList` (which wraps it in its own header/tag/footer)\n * and `ConsultationSlotSheet`'s `astrologers` picker (rendered bare, no\n * chrome, for hosts where astrologer selection happens inside the sheet).\n */\nimport React from 'react';\nimport { RecommendedRibbon } from '@srimandir/astrology-common';\nimport { StarIcon, VerifiedBadgeIcon } from './icons';\nimport type { UnscheduledAstrologerListAstrologer } from './types';\nimport styles from './UnscheduledAstrologerList.module.scss';\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport interface AstrologerPickerRowProps {\n astrologers: UnscheduledAstrologerListAstrologer[];\n selectedAstrologerId?: string;\n onSelectAstrologer?: (astrologer: UnscheduledAstrologerListAstrologer) => void;\n /** Accessible name for the radiogroup. */\n ariaLabel?: string;\n className?: string;\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n}\n\nexport const AstrologerPickerRow: React.FC<AstrologerPickerRowProps> = ({\n astrologers,\n selectedAstrologerId,\n onSelectAstrologer,\n ariaLabel,\n className,\n t,\n}) => (\n <div\n className={cx(styles.scrollRow, className)}\n role=\"radiogroup\"\n aria-label={\n ariaLabel ?? t?.('consultationScheduleCallTitle') ?? 'Schedule your astrology call'\n }\n >\n {astrologers.map((astrologer) => {\n const isSelected = astrologer.id === selectedAstrologerId;\n const languagesLabel = astrologer.languages?.length ? astrologer.languages.join(', ') : '';\n const showRating = typeof astrologer.rating === 'number' && astrologer.rating > 0;\n const showExperience = typeof astrologer.experienceYears === 'number';\n\n return (\n <button\n key={astrologer.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n className={cx(styles.astrologerCard, isSelected && styles.astrologerCardSelected)}\n onClick={() => onSelectAstrologer?.(astrologer)}\n >\n {astrologer.isRecommended && (\n <RecommendedRibbon\n className={styles.recommendedRibbonPlacement}\n label={t?.('consultationRecommended') ?? 'Recommended'}\n />\n )}\n\n <span className={styles.avatar}>\n <span className={styles.avatarInner}>\n <span className={styles.avatarFill} />\n {astrologer.photoUrl && (\n <img className={styles.photo} src={astrologer.photoUrl} alt={astrologer.name} />\n )}\n </span>\n <span className={styles.verifiedBadge}>\n <VerifiedBadgeIcon />\n </span>\n </span>\n\n <span className={styles.meta}>\n <p className={styles.name}>{astrologer.name}</p>\n {(showRating || showExperience) && (\n <span className={styles.subRow}>\n {showRating && (\n <span className={styles.rating}>\n {astrologer.rating!.toFixed(1)}\n <StarIcon />\n </span>\n )}\n {showRating && showExperience && <span className={styles.dot} />}\n {showExperience && (\n <span className={styles.experience}>\n {t?.('consultationYearsExperience', { count: astrologer.experienceYears }) ??\n `${astrologer.experienceYears} years of experience`}\n </span>\n )}\n </span>\n )}\n {languagesLabel && <p className={styles.languages}>{languagesLabel}</p>}\n </span>\n </button>\n );\n })}\n </div>\n);\n","import React from 'react';\n\n/** Filled star beside the chosen astrologer's rating (matches ConsultationDetailsCard). */\nexport const StarIcon: React.FC = () => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 9.38 8.94\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M9.28094 3.71918L7.22537 5.72294L7.7108 8.55302C7.73192 8.67677 7.6811 8.80184 7.57946 8.87576C7.52204 8.91767 7.45373 8.93879 7.38542 8.93879C7.33295 8.93879 7.28015 8.92625 7.23197 8.90084L4.69031 7.56467L2.14898 8.90051C2.0381 8.95925 1.90313 8.94968 1.80149 8.87543C1.69985 8.80151 1.64903 8.67644 1.67015 8.55269L2.15558 5.72261L0.0996759 3.71918C0.00991586 3.6314 -0.0227541 3.50006 0.0161859 3.38093C0.0551259 3.2618 0.158416 3.17435 0.282826 3.1562L3.1238 2.7437L4.3943 0.169042C4.50551 -0.0563475 4.87511 -0.0563475 4.98632 0.169042L6.25682 2.7437L9.09779 3.1562C9.2222 3.17435 9.32549 3.26147 9.36443 3.38093C9.40337 3.50039 9.3707 3.63107 9.28094 3.71918Z\"\n fill=\"#FFC627\"\n />\n </svg>\n);\n\n/** Blue verified-check badge overlapping the chosen astrologer's photo (matches ConsultationDetailsCard). */\nexport const VerifiedBadgeIcon: React.FC = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 23.9 23.9\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"11.6667\" cy=\"11.6667\" r=\"5.83333\" fill=\"white\" />\n <path\n d=\"M21.1605 13.933C21.4969 13.7095 21.7815 13.4167 21.9953 13.0741C22.2091 12.7315 22.3471 12.3472 22.4 11.9468C22.3471 11.5465 22.2091 11.1621 21.9953 10.8196C21.7815 10.477 21.4969 10.1841 21.1605 9.9607C20.8921 9.73966 20.6602 9.47759 20.4736 9.18417C20.4343 8.81253 20.4699 8.43679 20.5781 8.0791C20.7089 7.70675 20.7605 7.31122 20.7296 6.91779C20.6988 6.52437 20.5861 6.14171 20.3989 5.7943C20.1225 5.50969 19.79 5.2857 19.4223 5.13659C19.0547 4.98747 18.66 4.9165 18.2635 4.92817C17.905 4.91214 17.5517 4.83644 17.2181 4.70417C16.9832 4.43149 16.8009 4.11755 16.6805 3.7783C16.5688 3.3924 16.3767 3.03453 16.1167 2.72824C15.8568 2.42195 15.5349 2.17418 15.1723 2.00123C14.7891 1.93273 14.3959 1.94517 14.0178 2.03776C13.6397 2.13035 13.2852 2.30103 12.9771 2.53883C12.6647 2.75141 12.3152 2.90338 11.9467 2.98683C11.5782 2.90338 11.2286 2.75141 10.9163 2.53883C10.6085 2.30026 10.2541 2.12911 9.87586 2.03649C9.49767 1.94387 9.10421 1.93186 8.72107 2.00123C8.35846 2.17418 8.03659 2.42195 7.77662 2.72824C7.51666 3.03453 7.32451 3.3924 7.2128 3.7783C7.09247 4.11755 6.91018 4.43149 6.6752 4.70417C6.34164 4.83644 5.98834 4.91214 5.62987 4.92817C5.23331 4.9165 4.83866 4.98747 4.47102 5.13659C4.10338 5.2857 3.77079 5.50969 3.4944 5.7943C3.30721 6.14171 3.19458 6.52437 3.16372 6.91779C3.13287 7.31122 3.18446 7.70675 3.3152 8.0791C3.42345 8.43679 3.459 8.81253 3.41973 9.18417C3.2331 9.47759 3.00126 9.73966 2.7328 9.9607C2.39644 10.1841 2.11181 10.477 1.89802 10.8196C1.68424 11.1621 1.54625 11.5465 1.49333 11.9468C1.54625 12.3472 1.68424 12.7315 1.89802 13.0741C2.11181 13.4167 2.39644 13.7095 2.7328 13.933C3.00126 14.154 3.2331 14.4161 3.41973 14.7095C3.459 15.0811 3.42345 15.4569 3.3152 15.8146C3.18446 16.1869 3.13287 16.5824 3.16372 16.9759C3.19458 17.3693 3.30721 17.752 3.4944 18.0994C3.77079 18.384 4.10338 18.608 4.47102 18.7571C4.83866 18.9062 5.23331 18.9772 5.62987 18.9655C5.98834 18.9815 6.34164 19.0572 6.6752 19.1895C6.91018 19.4622 7.09247 19.7761 7.2128 20.1154C7.32451 20.5013 7.51666 20.8591 7.77662 21.1654C8.03659 21.4717 8.35846 21.7195 8.72107 21.8924C9.10423 21.9609 9.49749 21.9485 9.87555 21.8559C10.2536 21.7633 10.6081 21.5926 10.9163 21.3548C11.2286 21.1423 11.5782 20.9903 11.9467 20.9068C12.3152 20.9903 12.6647 21.1423 12.9771 21.3548C13.4867 21.6934 14.0709 21.9035 14.6795 21.9671C14.8469 21.9716 15.0137 21.9463 15.1723 21.8924C15.5349 21.7195 15.8568 21.4717 16.1167 21.1654C16.3767 20.8591 16.5688 20.5013 16.6805 20.1154C16.8009 19.7761 16.9832 19.4622 17.2181 19.1895C17.5517 19.0572 17.905 18.9815 18.2635 18.9655C18.66 18.9772 19.0547 18.9062 19.4223 18.7571C19.79 18.608 20.1225 18.384 20.3989 18.0994C20.5861 17.752 20.6988 17.3693 20.7296 16.9759C20.7605 16.5824 20.7089 16.1869 20.5781 15.8146C20.4699 15.4569 20.4343 15.0811 20.4736 14.7095C20.6602 14.4161 20.8921 14.154 21.1605 13.933ZM15.456 10.4834L11.4837 14.4706C11.3399 14.6049 11.1504 14.6797 10.9536 14.6797C10.7568 14.6797 10.5673 14.6049 10.4235 14.4706L8.43734 12.4695C8.30102 12.3304 8.22511 12.1431 8.22609 11.9484C8.22707 11.7536 8.30488 11.5671 8.44259 11.4294C8.5803 11.2917 8.7668 11.2139 8.96155 11.2129C9.1563 11.2119 9.34357 11.2879 9.48267 11.4242L10.9461 12.8876L14.4107 9.4231C14.5504 9.28668 14.738 9.21031 14.9333 9.21031C15.1287 9.21031 15.3162 9.28668 15.456 9.4231C15.5269 9.492 15.5832 9.57442 15.6217 9.66548C15.6602 9.75653 15.68 9.85438 15.68 9.95323C15.68 10.0521 15.6602 10.1499 15.6217 10.241C15.5832 10.332 15.5269 10.4145 15.456 10.4834Z\"\n fill=\"#1A6EE5\"\n />\n </svg>\n);\n","/**\n * ConsultationSlotSheet — the consultation-specific contents of a bottom sheet.\n *\n * The chrome (overlay, sheet, slide-up, Escape/backdrop dismiss, scroll lock,\n * close button, header/body/footer split) comes from `@srimandir/common`'s\n * `BottomSheet`; the slot picker itself comes from `@srimandir/astrology-common`.\n * What is left here is only what makes this sheet the *consultation* sheet: the\n * top icon badge, the title, the astrologer section, the phone slot and the\n * footer CTA.\n *\n * The astrologer section supports two flows, matching the two stories:\n * - `astrologers` (+ `selectedAstrologerId`/`onAstrologerSelect`): selection\n * happens *inside* this sheet — renders `UnscheduledAstrologerList`'s own\n * card row (`AstrologerPickerRow`) bare, with no header/footer chrome, so\n * it looks identical to that row wherever else a host renders it. Wins\n * over `astrologer`.\n * - `astrologer` alone: the astrologer was already chosen by whatever\n * (card, inline picker) opened this sheet — shows a read-only summary row\n * instead, reusing the same avatar/verified-badge/rating treatment as\n * `ConsultationDetailsCard`.\n *\n * The phone-number block is a slot: hosts pass their own validated input via\n * `phoneNumberSection`, since country lists, flags and validation live in the\n * host app.\n */\nimport React from 'react';\nimport { BottomSheet } from '@srimandir/common';\nimport { ConsultationSlotSelector } from '@srimandir/astrology-common';\nimport type {\n ConsultationSlot,\n ConsultationSlotDay,\n ConsultationSlotPeriod,\n} from '@srimandir/astrology-common';\nimport { SlotUnavailableNotice } from '../SlotUnavailableNotice';\nimport type { ConsultationDetailsCardAstrologer } from '../ConsultationDetailsCard';\nimport { AstrologerPickerRow } from '../UnscheduledAstrologerList/AstrologerPickerRow';\nimport type { UnscheduledAstrologerListAstrologer } from '../UnscheduledAstrologerList/types';\nimport { StarIcon, VerifiedBadgeIcon } from './icons';\nimport styles from './ConsultationSlotSheet.module.scss';\n\nexport interface ConsultationSlotSheetProps {\n /** Modal mode only — ignored when `inline` is true. Defaults to `true`. */\n isOpen?: boolean;\n /** Modal mode only — ignored when `inline` is true. */\n onClose?: () => void;\n /** Modal mode only. Round close button in the sheet's top-right corner. */\n showCloseButton?: boolean;\n /**\n * Renders the header/body/footer directly in the page flow instead of\n * inside `@srimandir/common`'s `BottomSheet` — no overlay, backdrop, or\n * slide-up chrome. For hosts building a single-page inline booking flow\n * (astrologer list -> phone -> slot grid -> CTA) rather than a\n * \"pick astrologer, then open a sheet\" two-step flow.\n */\n inline?: boolean;\n /** Hides the title/badge header. Mainly useful with `inline`, where the\n * host's own page heading already introduces this section. */\n hideHeader?: boolean;\n\n /** Availability to render. Passed straight through to the selector. */\n days: ConsultationSlotDay[];\n loading?: boolean;\n error?: boolean;\n onRetry?: () => void;\n\n selectedDate?: string;\n onDateSelect?: (date: string) => void;\n selectedPeriod?: ConsultationSlotPeriod;\n onPeriodSelect?: (period: ConsultationSlotPeriod) => void;\n selectedSlotStart?: string | null;\n onSlotSelect?: (slot: ConsultationSlot) => void;\n\n /**\n * The astrologer this sheet is booking a call with. Shown as a summary row\n * (photo, name, rating, experience, languages) above the phone/slot picker.\n * Omit it and the sheet opens with no astrologer identity shown. Ignored\n * when `astrologers` is passed — that renders a picker instead.\n */\n astrologer?: ConsultationDetailsCardAstrologer;\n\n /**\n * Full selectable astrologer list, rendered inside the sheet above the\n * phone/slot picker — for hosts where astrologer selection happens inside\n * this sheet rather than on the host page before it opens. Wins over\n * `astrologer`, which only ever shows a single already-chosen summary row.\n * Reuses `UnscheduledAstrologerList`'s own card row (photo, verified badge,\n * rating, experience, \"Recommended\" ribbon) so the picker looks identical\n * whether it's rendered on the host page or inside this sheet.\n */\n astrologers?: UnscheduledAstrologerListAstrologer[];\n selectedAstrologerId?: string;\n onAstrologerSelect?: (astrologer: UnscheduledAstrologerListAstrologer) => void;\n\n /**\n * The host's phone-number input, rendered above the slot picker. Omit it and\n * the sheet shows the slot picker alone (e.g. when the number is already known).\n */\n phoneNumberSection?: React.ReactNode;\n\n /** Sheet title. Wins over `t(\"consultationSheetTitle\")`. */\n title?: string;\n /** Heading above the date strip. Wins over `t(\"consultationSelectTimeSlot\")`. */\n heading?: string;\n /** Image URL for the 64px badge straddling the sheet's top edge. */\n iconUrl?: string;\n /** Arbitrary node for that badge; wins over `iconUrl`. */\n icon?: React.ReactNode;\n\n /** Footer CTA label. Wins over `t(\"consultationScheduleCall\")`. */\n ctaLabel?: string;\n onCtaClick?: () => void;\n /** Greys out the CTA — e.g. nothing selected yet, or a booking in flight. */\n ctaDisabled?: boolean;\n /** Swaps the CTA label for a busy label while a booking is in flight. */\n isProcessing?: boolean;\n /** Shown under the CTA in red, e.g. a failed booking attempt. */\n errorMessage?: string | null;\n\n /** International build — labels the evening tab \"Evening/Night\". */\n isGlobal?: boolean;\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n}\n\nexport const ConsultationSlotSheet: React.FC<ConsultationSlotSheetProps> = ({\n isOpen = true,\n onClose = () => {},\n showCloseButton = true,\n inline = false,\n hideHeader = false,\n days,\n loading = false,\n error = false,\n onRetry,\n selectedDate,\n onDateSelect,\n selectedPeriod,\n onPeriodSelect,\n selectedSlotStart,\n onSlotSelect,\n astrologer,\n astrologers,\n selectedAstrologerId,\n onAstrologerSelect,\n phoneNumberSection,\n title,\n heading,\n iconUrl,\n icon,\n ctaLabel,\n onCtaClick,\n ctaDisabled = false,\n isProcessing = false,\n errorMessage,\n isGlobal = true,\n t,\n className = '',\n}) => {\n const badge = icon ?? (iconUrl ? <img src={iconUrl} alt=\"\" /> : null);\n const sheetTitle = title ?? t?.('consultationSheetTitle') ?? 'Schedule your astrology consultation';\n\n const languagesLabel = astrologer?.languages?.length\n ? astrologer.languages.join(', ')\n : '';\n const showRating = typeof astrologer?.rating === 'number' && astrologer.rating > 0;\n const showExperience = typeof astrologer?.experienceYears === 'number';\n\n const headerContent = !hideHeader && (\n <>\n {badge && <div className={styles.iconBadge}>{badge}</div>}\n <div\n className={[styles.header, !badge && styles.headerNoIcon]\n .filter(Boolean)\n .join(' ')}\n >\n <p className={styles.title}>{sheetTitle}</p>\n </div>\n <hr className={styles.headerDivider} />\n </>\n );\n\n const footerContent = (\n <div className={styles.footerInner}>\n {errorMessage && (\n <SlotUnavailableNotice\n message={errorMessage}\n t={t}\n className={styles.errorNotice}\n />\n )}\n\n <button\n type=\"button\"\n className={styles.ctaBtn}\n disabled={ctaDisabled || isProcessing}\n onClick={onCtaClick}\n >\n {isProcessing\n ? (t?.('consultationScheduling') ?? 'Scheduling…')\n : (ctaLabel ?? t?.('consultationScheduleCall') ?? 'Schedule call')}\n </button>\n </div>\n );\n\n const bodyContent = (\n <div className={styles.bodyInner}>\n {astrologers?.length ? (\n <>\n <p className={styles.astrologerSectionLabel}>\n {t?.('consultationChooseAstrologer') ?? 'Choose astrologer'}\n </p>\n <AstrologerPickerRow\n astrologers={astrologers}\n selectedAstrologerId={selectedAstrologerId}\n onSelectAstrologer={onAstrologerSelect}\n t={t}\n />\n </>\n ) : (\n astrologer && (\n <div className={styles.astrologerRow}>\n <div className={styles.avatar}>\n <div className={styles.avatarInner}>\n <div className={styles.avatarFill} />\n {astrologer.photoUrl ? (\n <img\n className={styles.photo}\n src={astrologer.photoUrl}\n alt={astrologer.name}\n />\n ) : (\n <div className={styles.photoFallback} aria-hidden=\"true\">\n {astrologer.name?.trim().charAt(0).toUpperCase() || '?'}\n </div>\n )}\n </div>\n <span className={styles.verifiedBadge}>\n <VerifiedBadgeIcon />\n </span>\n </div>\n\n <div className={styles.astrologerMeta}>\n <p className={styles.astrologerName}>{astrologer.name}</p>\n {(showRating || showExperience || languagesLabel) && (\n <div className={styles.astrologerSubRow}>\n {showRating && (\n <span className={styles.rating}>\n {astrologer.rating!.toFixed(1)}\n <StarIcon />\n </span>\n )}\n {showRating && showExperience && <span className={styles.metaDot} />}\n {showExperience && (\n <span className={styles.experience}>\n {t?.('consultationYearsExperience', { count: astrologer.experienceYears }) ??\n `${astrologer.experienceYears} years of experience`}\n </span>\n )}\n </div>\n )}\n {languagesLabel && <p className={styles.languages}>{languagesLabel}</p>}\n </div>\n </div>\n )\n )}\n\n {phoneNumberSection && (\n <div className={styles.phoneSection}>{phoneNumberSection}</div>\n )}\n\n <ConsultationSlotSelector\n days={days}\n loading={loading}\n error={error}\n onRetry={onRetry}\n selectedDate={selectedDate}\n onDateSelect={onDateSelect}\n selectedPeriod={selectedPeriod}\n onPeriodSelect={onPeriodSelect}\n selectedSlotStart={selectedSlotStart}\n onSlotSelect={onSlotSelect}\n heading={heading ?? t?.('consultationSelectTimeSlot') ?? 'Select a time slot.'}\n /* The card that opened the sheet already fixed the astrologer, and\n the language filter lives on the landing screen above the list. */\n showAstrologyProfilesSection={false}\n hideLanguageSelector\n /* The phone block is injected above, so the selector's own\n placeholder must stay off. */\n showPhoneNumberSection={false}\n /* No kundli report in this flow — the \"report ready in 24-48 hours\"\n banner would be untrue here. */\n reportReadyNote={null}\n isGlobal={isGlobal}\n t={t}\n />\n </div>\n );\n\n if (inline) {\n return (\n <div className={[styles.inlineRoot, className].filter(Boolean).join(' ')}>\n {headerContent}\n {bodyContent}\n {footerContent}\n </div>\n );\n }\n\n return (\n <BottomSheet\n isOpen={isOpen}\n onClose={onClose}\n showCloseButton={showCloseButton}\n ariaLabel={sheetTitle}\n className={className}\n header={headerContent}\n footer={footerContent}\n >\n {bodyContent}\n </BottomSheet>\n );\n};\n","import type { ConsultationDictionary } from './types';\n\n/** English — the fallback every other locale degrades to. */\nconst en: ConsultationDictionary = {\n /* AstrologerCard */\n consultationSelectSlot: 'Select Slot',\n consultationYearsOfExperience: '{count}+ years of experience',\n consultationPercentOff: '{percent}% Off',\n consultationPreviouslyConsulted: 'Previously Consulted',\n\n /* ConsultationSlotSheet */\n consultationSheetTitle: 'Schedule your astrology consultation',\n consultationSelectTimeSlot: 'Select a time slot.',\n consultationScheduleCall: 'Schedule call',\n consultationScheduling: 'Scheduling…',\n\n /* ConsultationSlotSelector */\n planPeriodMorning: 'Morning',\n planPeriodAfternoon: 'Afternoon',\n planPeriodEvening: 'Evening',\n planPeriodEveningNight: 'Evening/Night',\n planSlotsLoadError: \"Couldn't load slots. Please try again.\",\n planRetry: 'Retry',\n planNoSlotsAvailableTitle: 'No slots available',\n planNoSlotsAvailableSubtitle:\n 'Try a different consultation language above, or check back soon.',\n /*\n * Weekday abbreviations are deliberately English-only: the other locales omit\n * them and fall through to these. They sit in narrow day chips beside the\n * date, where the three-letter Latin forms are what the design uses and what\n * reads cleanest across scripts. Add them to a locale file to override.\n *\n * `Today` and `Tomorrow` are absent on purpose — the slot picker asks for\n * them for the first two chips, and `createConsultationTranslate` answers\n * with the weekday instead, so every chip reads the same way.\n */\n Sun: 'Sun',\n Mon: 'Mon',\n Tue: 'Tue',\n Wed: 'Wed',\n Thu: 'Thu',\n Fri: 'Fri',\n Sat: 'Sat',\n\n /* PaymentResult */\n back: 'Back',\n bookingConfirmationTitle: 'Booking Confirmation',\n paymentSuccessful: 'Payment Successful 🎉',\n paid: 'Paid',\n booking: 'Booking',\n joinCall: 'Join Call',\n consultationSlotBookedTitle: 'Consultation Slot Booked!',\n consultationSlotBookedSubtitle:\n 'Your 30 minutes call with our Certified Vedic Astrologer is booked',\n consultationSlotFailedTitle: 'Consultation Slot Failed!',\n consultationSlotFailedSubtitle:\n 'We ran into some problem while booking your slot. Please schedule your slot again',\n consultationBookSlotAgain: 'Book slot again →',\n consultationWhatsappUpdate: 'All updates will be sent to your WhatsApp',\n};\n\nexport default en;\n","import type { ConsultationDictionary } from './types';\n\n/** Hindi (hi). */\nconst hi: ConsultationDictionary = {\n consultationSelectSlot: 'स्लॉट चुनें',\n consultationYearsOfExperience: '{count}+ वर्षों का अनुभव',\n consultationPercentOff: '{percent}% छूट',\n consultationPreviouslyConsulted: 'पहले परामर्श लिया',\n\n consultationSheetTitle: 'अपनी ज्योतिष परामर्श की नियुक्ति करें',\n consultationSelectTimeSlot: 'एक समय स्लॉट चुनें।',\n consultationScheduleCall: 'एक कॉल शेड्यूल करें',\n consultationScheduling: 'शेड्यूल हो रहा है…',\n\n planPeriodMorning: 'सुबह',\n planPeriodAfternoon: 'दोपहर',\n planPeriodEvening: 'शाम',\n planPeriodEveningNight: 'शाम/रात',\n planSlotsLoadError: 'स्लॉट लोड नहीं हो सके। कृपया पुनः प्रयास करें।',\n planRetry: 'पुनः प्रयास करें',\n planNoSlotsAvailableTitle: 'कोई स्लॉट उपलब्ध नहीं',\n planNoSlotsAvailableSubtitle:\n 'ऊपर कोई दूसरी परामर्श भाषा चुनें, या थोड़ी देर बाद देखें।',\n\n back: 'वापस',\n bookingConfirmationTitle: 'बुकिंग पुष्टि',\n paymentSuccessful: 'भुगतान सफल 🎉',\n paid: 'भुगतान किया गया',\n booking: 'बुकिंग',\n joinCall: 'कॉल में शामिल हों',\n consultationSlotBookedTitle: 'परामर्श स्लॉट बुक किया गया!',\n consultationSlotBookedSubtitle:\n 'आपका 30 मिनट का कॉल हमारे प्रमाणित वेदिक ज्योतिषी के साथ बुक किया गया है',\n consultationSlotFailedTitle: 'परामर्श स्लॉट विफल!',\n consultationSlotFailedSubtitle:\n 'आपका स्लॉट बुक करते समय कुछ समस्या हुई। कृपया अपना स्लॉट दोबारा शेड्यूल करें',\n consultationBookSlotAgain: 'फिर से स्लॉट बुक करें →',\n consultationWhatsappUpdate: 'सभी अपडेट आपके व्हाट्सएप पर भेजे जाएंगे',\n};\n\nexport default hi;\n","import type { ConsultationDictionary } from './types';\n\n/** Kannada (kn). */\nconst kn: ConsultationDictionary = {\n consultationSelectSlot: 'ಸ್ಲಾಟ್ ಆಯ್ಕೆಮಾಡಿ',\n consultationYearsOfExperience: '{count}+ ವರ್ಷಗಳ ಅನುಭವ',\n consultationPercentOff: '{percent}% ರಿಯಾಯಿತಿ',\n consultationPreviouslyConsulted: 'ಈ ಹಿಂದೆ ಸಂಪರ್ಕಿಸಿದ್ದೀರಿ',\n\n consultationSheetTitle: 'ನಿಮ್ಮ ಜ್ಯೋತಿಷ್ಯ ಕನ್ಸಲ್ಟೇಶನ್ ಶೆಡ್ಯೂಲ್ ಮಾಡಿ',\n consultationSelectTimeSlot: '30 ನಿಮಿಷಗಳ ಸಮಯದ ಸ್ಲಾಟ್ ಆಯ್ಕೆಮಾಡಿ',\n consultationScheduleCall: 'ಕರೆ ಶೆಡ್ಯೂಲ್ ಮಾಡಿ',\n consultationScheduling: 'ಶೆಡ್ಯೂಲ್ ಆಗುತ್ತಿದೆ…',\n\n planPeriodMorning: 'ಬೆಳಿಗ್ಗೆ',\n planPeriodAfternoon: 'ಮಧ್ಯಾಹ್ನ',\n planPeriodEvening: 'ಸಂಜೆ',\n planPeriodEveningNight: 'ಸಂಜೆ/ರಾತ್ರಿ',\n planSlotsLoadError: 'ಸ್ಲಾಟ್ಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.',\n planRetry: 'ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ',\n planNoSlotsAvailableTitle: 'ಯಾವುದೇ ಸ್ಲಾಟ್ ಲಭ್ಯವಿಲ್ಲ',\n planNoSlotsAvailableSubtitle:\n 'ಮೇಲೆ ಬೇರೆ ಕನ್ಸಲ್ಟೇಶನ್ ಭಾಷೆಯನ್ನು ಆರಿಸಿ, ಅಥವಾ ಸ್ವಲ್ಪ ಸಮಯದ ನಂತರ ನೋಡಿ.',\n\n back: 'ಹಿಂದೆ',\n bookingConfirmationTitle: 'ಬುಕಿಂಗ್ ಖಚಿತವಾಗಿದೆ',\n paymentSuccessful: 'ಪಾವತಿ ಪೂರ್ಣಗೊಂಡಿದೆ 🎉',\n paid: 'ಪಾವತಿಸಲಾಗಿದೆ',\n booking: 'ಬುಕಿಂಗ್',\n joinCall: 'ಕರೆಯಲ್ಲಿ ಜಾಯಿನ್ ಆಗಿ',\n consultationSlotBookedTitle: 'ನಿಮ್ಮ ಕನ್ಸಲ್ಟೇಶನ್ ಬುಕ್ ಆಗಿದೆ!',\n consultationSlotBookedSubtitle:\n 'ಸರ್ಟಿಫೈಡ್ ವೇದ ಜ್ಯೋತಿಷಿಯೊಂದಿಗೆ ನಿಮ್ಮ 30 ನಿಮಿಷಗಳ ಕರೆ ಬುಕ್ ಆಗಿದೆ',\n consultationSlotFailedTitle: 'ಕನ್ಸಲ್ಟೇಶನ್ ಸ್ಲಾಟ್ ವಿಫಲವಾಗಿದೆ!',\n consultationSlotFailedSubtitle:\n 'ನಿಮ್ಮ ಸ್ಲಾಟ್ ಬುಕ್ ಮಾಡುವಾಗ ಸಮಸ್ಯೆ ಉಂಟಾಯಿತು. ದಯವಿಟ್ಟು ನಿಮ್ಮ ಸ್ಲಾಟ್ ಅನ್ನು ಮತ್ತೆ ಶೆಡ್ಯೂಲ್ ಮಾಡಿ',\n consultationBookSlotAgain: 'ಮತ್ತೆ ಸ್ಲಾಟ್ ಬುಕ್ ಮಾಡಿ →',\n consultationWhatsappUpdate:\n 'ಎಲ್ಲಾ ಅಪ್ಡೇಟ್ಗಳನ್ನು ನಿಮ್ಮ ವಾಟ್ಸಾಪ್ಗೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ',\n};\n\nexport default kn;\n","import type { ConsultationDictionary } from './types';\n\n/** Telugu (te). */\nconst te: ConsultationDictionary = {\n consultationSelectSlot: 'స్లాట్ ఎంపిక చేసుకోండి',\n consultationYearsOfExperience: '{count}+ సంవత్సరాల అనుభవం',\n consultationPercentOff: '{percent}% తగ్గింపు',\n consultationPreviouslyConsulted: 'గతంలో సంప్రదించారు',\n\n consultationSheetTitle: 'మీ జ్యోతిష్య కన్సల్టేషన్ షెడ్యూల్ చేసుకోండి',\n consultationSelectTimeSlot: '30 నిమిషాల టైమ్ స్లాట్ ఎంచుకోండి',\n consultationScheduleCall: 'కాల్ షెడ్యూల్ చేయండి',\n consultationScheduling: 'షెడ్యూల్ అవుతోంది…',\n\n planPeriodMorning: 'ఉదయం',\n planPeriodAfternoon: 'మధ్యాహ్నం',\n planPeriodEvening: 'సాయంత్రం',\n planPeriodEveningNight: 'సాయంత్రం/రాత్రి',\n planSlotsLoadError: 'స్లాట్లు లోడ్ కాలేదు. దయచేసి మళ్లీ ప్రయత్నించండి.',\n planRetry: 'మళ్లీ ప్రయత్నించండి',\n planNoSlotsAvailableTitle: 'స్లాట్లు అందుబాటులో లేవు',\n planNoSlotsAvailableSubtitle:\n 'పైన వేరే కన్సల్టేషన్ భాషను ఎంచుకోండి, లేదా కొంతసేపటి తర్వాత చూడండి.',\n\n back: 'వెనుకకు',\n bookingConfirmationTitle: 'బుకింగ్ నిర్ధారణ',\n paymentSuccessful: 'పేమెంట్ పూర్తయింది 🎉',\n paid: 'చెల్లించినది',\n booking: 'బుకింగ్',\n joinCall: 'కాల్లో జాయిన్ అవ్వండి',\n consultationSlotBookedTitle: 'మీ కన్సల్టేషన్ బుక్ అయింది!',\n consultationSlotBookedSubtitle:\n 'సర్టిఫైడ్ వేద జ్యోతిష్యుడితో మీ 30 నిమిషాల కాల్ బుక్ అయింది',\n consultationSlotFailedTitle: 'కన్సల్టేషన్ స్లాట్ విఫలమైంది!',\n consultationSlotFailedSubtitle:\n 'మీ స్లాట్ బుక్ చేసేటప్పుడు సమస్య ఏర్పడింది. దయచేసి మీ స్లాట్ను మళ్లీ షెడ్యూల్ చేసుకోండి',\n consultationBookSlotAgain: 'మళ్లీ స్లాట్ బుక్ చేయండి →',\n consultationWhatsappUpdate: 'అన్ని అప్డేట్స్ మీ వాట్సాప్కి పంపబడతాయి',\n};\n\nexport default te;\n","/**\n * Copy for this package's components, in every language the consultation flow\n * ships in.\n *\n * The components themselves stay presentational: each looks its strings up\n * through a `t` prop and falls back to English. This module is what produces\n * that `t`, so hosts pass a locale instead of maintaining ~36 keys of their own:\n *\n * import { createConsultationTranslate } from '@srimandir/astro-consultation';\n * const t = createConsultationTranslate(locale);\n * <AstrologerCard t={t} … />\n * <ConsultationSlotSheet t={t} … /> // forwards it to the slot picker\n * <PaymentResult t={t} … />\n *\n * Keys prefixed `plan…`, and the weekday labels, belong to\n * `ConsultationSlotSelector` in `@srimandir/astrology-common`, which\n * `ConsultationSlotSheet` renders and hands this same `t` to. They live here so\n * one lookup covers the whole flow.\n *\n * NOT covered: astrologer names, languages, specialties and prices. Those are\n * API content and arrive already localised.\n *\n * Adding a language: drop in `<code>.ts` next to `en.ts`, add it to\n * `consultationDictionaries` below and to `ConsultationLocale` in `types.ts`.\n */\n\nimport en from './en';\nimport hi from './hi';\nimport kn from './kn';\nimport te from './te';\nimport type {\n ConsultationDictionary,\n ConsultationLocale,\n ConsultationTranslate,\n} from './types';\n\nexport type {\n ConsultationDictionary,\n ConsultationLocale,\n ConsultationTranslate,\n ConsultationTranslateOptions,\n} from './types';\n\nexport { en, hi, te, kn };\n\nexport const consultationDictionaries: Record<\n ConsultationLocale,\n ConsultationDictionary\n> = { en, hi, te, kn };\n\nconst isSupported = (locale: string): locale is ConsultationLocale =>\n locale in consultationDictionaries;\n\nconst WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n/**\n * The slot picker labels its first two date chips \"Today\" and \"Tomorrow\" and\n * every later one with a weekday, which makes the row read inconsistently. It\n * offers no prop to turn that off, but it does resolve each label through `t` —\n * so answering those two keys with the weekday they actually fall on gives a\n * uniform Mon/Tue/Wed row without a change to `@srimandir/astrology-common`.\n *\n * Deterministic, not a guess: \"Today\" is always the current date and \"Tomorrow\"\n * always the next, which is exactly what the picker computed them from.\n */\nconst RELATIVE_DAY_OFFSETS: Record<string, number> = { Today: 0, Tomorrow: 1 };\n\nconst weekdayKeyFromNow = (daysFromNow: number): string => {\n const date = new Date();\n date.setDate(date.getDate() + daysFromNow);\n return WEEKDAYS[date.getDay()];\n};\n\n/**\n * Builds the `t` the components take.\n *\n * @param locale Anything unrecognised (including a full tag like \"en-US\")\n * falls back to English rather than rendering blanks.\n * @param overrides Host-supplied strings, by the same keys, winning over the\n * bundled copy — for a surface that needs different wording\n * without a package release.\n */\nexport const createConsultationTranslate = (\n locale: string = 'en',\n overrides?: ConsultationDictionary,\n): ConsultationTranslate => {\n const base = isSupported(locale) ? consultationDictionaries[locale] : en;\n const resolve = (k: string): string | undefined =>\n overrides?.[k] ?? base[k] ?? en[k];\n\n return (key, options) => {\n // Resolving \"Today\"/\"Tomorrow\" straight to a hardcoded English weekday\n // (rather than through `resolve`, like every other key) meant a host\n // couldn't localize them via `overrides` or a future locale file even\n // though the weekday abbreviations right next to them are translatable —\n // so a Hindi/Telugu/Kannada UI got \"Sun\" while day 3 onward got its real\n // translation. Only takes this path when the host hasn't overridden\n // \"Today\"/\"Tomorrow\" itself with different literal wording.\n const template =\n key in RELATIVE_DAY_OFFSETS && overrides?.[key] === undefined\n ? resolve(weekdayKeyFromNow(RELATIVE_DAY_OFFSETS[key]))\n : resolve(key);\n if (template === undefined) return undefined;\n\n return template\n .replace('{count}', String(options?.count ?? ''))\n .replace('{percent}', String(options?.percent ?? ''));\n };\n};\n","import React from 'react';\n\n/** Back chevron in the header. */\nexport const BackIcon: React.FC = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M12.5 15.833 6.667 10 12.5 4.167\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n/** Filled star beside the astrologer's rating (Golden Honey 500). */\nexport const StarIcon: React.FC = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M8 1.333l1.966 3.983 4.395.64-3.18 3.1.75 4.377L8 11.37l-3.931 2.064.75-4.378-3.18-3.1 4.395-.639L8 1.333z\"\n fill=\"#ffc627\"\n stroke=\"#ffc627\"\n strokeWidth=\"1\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n/** Calendar-clock glyph in the booked-slot pill. */\nexport const CalendarClockIcon: React.FC = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M5.333 1.333v2M10.667 1.333v2M2 6h9.5M14 8.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0Z\"\n stroke=\"#374151\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M11.5 7.5v1.25l.75.75\"\n stroke=\"#374151\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M5.5 13.5H3.333A1.333 1.333 0 0 1 2 12.167V4.667a1.333 1.333 0 0 1 1.333-1.334h9.334A1.333 1.333 0 0 1 14 4.667V6\"\n stroke=\"#374151\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\n/** Phone glyph on the \"Join Call\" CTA. */\nexport const PhoneIcon: React.FC = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M16.5 12.69v2.25a1.5 1.5 0 0 1-1.635 1.5 14.85 14.85 0 0 1-6.472-2.303 14.63 14.63 0 0 1-4.5-4.5A14.85 14.85 0 0 1 1.59 3.135 1.5 1.5 0 0 1 3.083 1.5h2.25a1.5 1.5 0 0 1 1.5 1.29c.095.72.271 1.427.525 2.107a1.5 1.5 0 0 1-.337 1.583l-.953.952a12 12 0 0 0 4.5 4.5l.953-.952a1.5 1.5 0 0 1 1.582-.338c.68.254 1.387.43 2.108.525a1.5 1.5 0 0 1 1.29 1.523Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n","/**\n * PaymentResult — the screen after the gateway returns (Figma 52:3294 and its\n * shared-hero failed variant).\n *\n * Both states show the same \"Payment Successful 🎉\" hero, because in both the\n * charge went through; only the slot booking differs, which is what `status`\n * selects. There is deliberately no \"payment failed\" state here: when the\n * charge itself fails nothing is booked and nothing is owed, so the host sends\n * the user back to the slot sheet with a toast instead of to a result screen.\n * See `PaymentResultStatus`.\n *\n * Purely presentational: the host formats the slot label (date formatting is\n * app- and locale-specific) and owns every callback.\n */\nimport React from 'react';\nimport {\n BackIcon,\n CalendarClockIcon,\n PhoneIcon,\n StarIcon,\n} from './PaymentIcons';\nimport styles from './PaymentResult.module.scss';\n\n/**\n * Which outcome to render.\n *\n * - `booked` the charge succeeded and the slot is confirmed. Shows the\n * astrologer + slot card and the \"Join Call\" CTA.\n * - `slot_failed` the charge succeeded but booking the slot did not. Shows the\n * failure card and \"Book slot again\". Fail-soft: the user has\n * paid, so the only way out is a retry, never a dead end.\n *\n * A failed *payment* is not a status here — nothing was charged, so there is no\n * result to show; the host reopens the slot sheet with a toast.\n */\nexport type PaymentResultStatus = 'booked' | 'slot_failed';\n\n/** The astrologer fields this screen renders. */\nexport interface PaymentResultAstrologer {\n name: string;\n /** Falls back to the initial-letter avatar when absent. */\n photoUrl?: string;\n /** Rendered comma-joined; the line is dropped when empty. */\n languages?: string[];\n /** Hidden when 0/undefined. */\n rating?: number;\n}\n\nexport interface PaymentResultProps {\n status: PaymentResultStatus;\n\n /** Amount charged, e.g. 99. */\n amount: number;\n /** Pre-resolved symbol, e.g. \"₹\" or \"$\" — the host owns currency mapping. */\n currencySymbol?: string;\n /** Booking reference for the stat row. Renders \"-\" when absent. */\n bookingId?: string | null;\n\n astrologer: PaymentResultAstrologer;\n /**\n * Booked slot, already formatted by the host — e.g.\n * \"Friday, 25 August 2021 @ 11:30 AM\". Only used by the `booked` state.\n */\n slotLabel?: string;\n\n /** True while the authoritative booking status is still being polled. */\n isLoading?: boolean;\n\n onBack?: () => void;\n /** `booked` only — joins the call. */\n onJoinCall?: () => void;\n /** `slot_failed` only — reopens slot selection. */\n onBookSlotAgain?: () => void;\n\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n}\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport const PaymentResult: React.FC<PaymentResultProps> = ({\n status,\n amount,\n currencySymbol = '₹',\n bookingId,\n astrologer,\n slotLabel,\n isLoading = false,\n onBack,\n onJoinCall,\n onBookSlotAgain,\n t,\n className = '',\n}) => {\n const isBooked = status === 'booked';\n const languagesLabel = astrologer.languages?.length\n ? astrologer.languages.join(', ')\n : '';\n const showRating = typeof astrologer.rating === 'number' && astrologer.rating > 0;\n\n return (\n <div className={cx(styles.root, className)} data-testid=\"payment-result\">\n <div className={styles.header}>\n {onBack && (\n <button\n type=\"button\"\n className={styles.backBtn}\n onClick={onBack}\n aria-label={t?.('back') ?? 'Back'}\n >\n <BackIcon />\n </button>\n )}\n <span className={styles.headerTitle}>\n {t?.('bookingConfirmationTitle') ?? 'Booking Confirmation'}\n </span>\n </div>\n\n {/* Hero — identical in both states, the payment succeeded either way. */}\n <div className={styles.hero}>\n <div className={styles.tick} aria-hidden=\"true\">\n ✓\n </div>\n\n <p className={styles.heroTitle}>\n {t?.('paymentSuccessful') ?? 'Payment Successful 🎉'}\n </p>\n\n <div className={styles.statRow}>\n <div className={styles.stat}>\n <span className={styles.statLabel}>{t?.('paid') ?? 'Paid'}</span>\n <span className={styles.statValue}>\n {currencySymbol}\n {amount}\n </span>\n </div>\n <div className={styles.statDivider} />\n <div className={styles.stat}>\n <span className={styles.statLabel}>\n {t?.('booking') ?? 'Booking'}\n </span>\n <span className={styles.statValue}>{bookingId || '-'}</span>\n </div>\n </div>\n </div>\n\n <div className={styles.body}>\n {isLoading && (\n <div className={styles.skeleton} aria-busy=\"true\" aria-live=\"polite\">\n <div className={styles.skeletonLine} style={{ width: '60%' }} />\n <div className={styles.skeletonLine} style={{ width: '85%' }} />\n <div className={styles.skeletonCta} />\n </div>\n )}\n\n {/* STATE: booked — charge taken and slot confirmed. */}\n {!isLoading && isBooked && (\n <div className={styles.section}>\n <div className={styles.bookedHeading}>\n <p className={styles.bookedTitle}>\n {t?.('consultationSlotBookedTitle') ??\n 'Consultation Slot Booked!'}\n </p>\n <p className={styles.bookedSubtitle}>\n {t?.('consultationSlotBookedSubtitle') ??\n 'Your 30 minutes call with our Certified Vedic Astrologer is booked'}\n </p>\n </div>\n\n <div className={styles.astrologerCard}>\n <div className={styles.astrologerRow}>\n {astrologer.photoUrl ? (\n <img\n className={styles.photo}\n src={astrologer.photoUrl}\n alt={astrologer.name}\n />\n ) : (\n <div className={styles.photoFallback} aria-hidden=\"true\">\n {astrologer.name?.trim().charAt(0).toUpperCase() || '?'}\n </div>\n )}\n\n <div className={styles.astrologerMeta}>\n <p className={styles.astrologerName}>{astrologer.name}</p>\n {(languagesLabel || showRating) && (\n <div className={styles.astrologerSubRow}>\n {languagesLabel && (\n <span className={styles.languages}>{languagesLabel}</span>\n )}\n {languagesLabel && showRating && (\n <span className={styles.metaDivider} />\n )}\n {showRating && (\n <span className={styles.rating}>\n {astrologer.rating!.toFixed(1)}\n <StarIcon />\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n\n {slotLabel && (\n <div className={styles.slotPill}>\n <CalendarClockIcon />\n <span className={styles.slotPillText}>{slotLabel}</span>\n </div>\n )}\n </div>\n\n {onJoinCall && (\n <button\n type=\"button\"\n className={styles.ctaBtn}\n onClick={onJoinCall}\n >\n <PhoneIcon />\n {t?.('joinCall') ?? 'Join Call'}\n </button>\n )}\n\n <p className={styles.footnote}>\n {t?.('consultationWhatsappUpdate') ??\n 'All updates will be sent to your WhatsApp'}\n </p>\n </div>\n )}\n\n {/* STATE: slot_failed — charge taken, slot not booked. Retry only. */}\n {!isLoading && !isBooked && (\n <div className={styles.section}>\n <div className={styles.failedCard}>\n <p className={styles.failedTitle}>\n {t?.('consultationSlotFailedTitle') ??\n 'Consultation Slot Failed!'}\n </p>\n <p className={styles.failedSubtitle}>\n {t?.('consultationSlotFailedSubtitle') ??\n 'We ran into some problem while booking your slot. Please schedule your slot again'}\n </p>\n </div>\n\n {onBookSlotAgain && (\n <button\n type=\"button\"\n className={styles.ctaBtn}\n onClick={onBookSlotAgain}\n >\n {t?.('consultationBookSlotAgain') ?? 'Book slot again →'}\n </button>\n )}\n\n <p className={styles.footnote}>\n {t?.('consultationWhatsappUpdate') ??\n 'All updates will be sent to your WhatsApp'}\n </p>\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\n\n/** Calendar-clock glyph beside the call time. */\nexport const CalendarClockIcon: React.FC = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 20.5 20.5\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M15.25 10C18.1495 10 20.5 12.3505 20.5 15.25C20.5 18.1495 18.1495 20.5 15.25 20.5C12.3505 20.5 10 18.1495 10 15.25C10 12.3505 12.3505 10 15.25 10ZM14.25 0C14.6642 0 15 0.335786 15 0.75V1.5H15.75C17.8211 1.5 19.5 3.17893 19.5 5.25V7.75C19.5 8.16421 19.1642 8.5 18.75 8.5C18.3358 8.5 18 8.16421 18 7.75V5.25C18 4.00736 16.9926 3 15.75 3H15V3.75C15 4.16421 14.6642 4.5 14.25 4.5C13.8358 4.5 13.5 4.16421 13.5 3.75V3H6V3.75C6 4.16421 5.66421 4.5 5.25 4.5C4.83579 4.5 4.5 4.16421 4.5 3.75V3H3.75C2.50736 3 1.5 4.00736 1.5 5.25V15.75C1.5 16.9926 2.50736 18 3.75 18H7.75C8.16421 18 8.5 18.3358 8.5 18.75C8.5 19.1642 8.16421 19.5 7.75 19.5H3.75C1.67893 19.5 0 17.8211 0 15.75V5.25C0 3.17893 1.67893 1.5 3.75 1.5H4.5V0.75C4.5 0.335786 4.83579 0 5.25 0C5.66421 0 6 0.335786 6 0.75V1.5H13.5V0.75C13.5 0.335786 13.8358 0 14.25 0ZM15.25 11.5C13.1789 11.5 11.5 13.1789 11.5 15.25C11.5 17.3211 13.1789 19 15.25 19C17.3211 19 19 17.3211 19 15.25C19 13.1789 17.3211 11.5 15.25 11.5ZM15.1436 12.9834C15.5575 12.9837 15.8936 13.3193 15.8936 13.7334V15.0654L16.916 15.6895C17.2693 15.9052 17.3815 16.3672 17.166 16.7207C16.9504 17.0742 16.4883 17.1861 16.1348 16.9707L14.7529 16.127C14.5299 15.9908 14.3937 15.7485 14.3936 15.4873V13.7334C14.3936 13.3192 14.7293 12.9834 15.1436 12.9834ZM5.75 12C6.16421 12 6.5 12.3358 6.5 12.75C6.5 13.1642 6.16421 13.5 5.75 13.5H4.75C4.33579 13.5 4 13.1642 4 12.75C4 12.3358 4.33579 12 4.75 12H5.75ZM8.75 8C9.16421 8 9.5 8.33579 9.5 8.75C9.5 9.16421 9.16421 9.5 8.75 9.5H4.75C4.33579 9.5 4 9.16421 4 8.75C4 8.33579 4.33579 8 4.75 8H8.75Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\n/** Filled star beside the astrologer's rating. */\nexport const StarIcon: React.FC = () => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 9.38 8.94\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M9.28094 3.71918L7.22537 5.72294L7.7108 8.55302C7.73192 8.67677 7.6811 8.80184 7.57946 8.87576C7.52204 8.91767 7.45373 8.93879 7.38542 8.93879C7.33295 8.93879 7.28015 8.92625 7.23197 8.90084L4.69031 7.56467L2.14898 8.90051C2.0381 8.95925 1.90313 8.94968 1.80149 8.87543C1.69985 8.80151 1.64903 8.67644 1.67015 8.55269L2.15558 5.72261L0.0996759 3.71918C0.00991586 3.6314 -0.0227541 3.50006 0.0161859 3.38093C0.0551259 3.2618 0.158416 3.17435 0.282826 3.1562L3.1238 2.7437L4.3943 0.169042C4.50551 -0.0563475 4.87511 -0.0563475 4.98632 0.169042L6.25682 2.7437L9.09779 3.1562C9.2222 3.17435 9.32549 3.26147 9.36443 3.38093C9.40337 3.50039 9.3707 3.63107 9.28094 3.71918Z\"\n fill=\"#FFC627\"\n />\n </svg>\n);\n\n/** Blue verified-check badge overlapping the astrologer's photo. */\nexport const VerifiedBadgeIcon: React.FC = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 23.9 23.9\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"11.6667\" cy=\"11.6667\" r=\"5.83333\" fill=\"white\" />\n <path\n d=\"M21.1605 13.933C21.4969 13.7095 21.7815 13.4167 21.9953 13.0741C22.2091 12.7315 22.3471 12.3472 22.4 11.9468C22.3471 11.5465 22.2091 11.1621 21.9953 10.8196C21.7815 10.477 21.4969 10.1841 21.1605 9.9607C20.8921 9.73966 20.6602 9.47759 20.4736 9.18417C20.4343 8.81253 20.4699 8.43679 20.5781 8.0791C20.7089 7.70675 20.7605 7.31122 20.7296 6.91779C20.6988 6.52437 20.5861 6.14171 20.3989 5.7943C20.1225 5.50969 19.79 5.2857 19.4223 5.13659C19.0547 4.98747 18.66 4.9165 18.2635 4.92817C17.905 4.91214 17.5517 4.83644 17.2181 4.70417C16.9832 4.43149 16.8009 4.11755 16.6805 3.7783C16.5688 3.3924 16.3767 3.03453 16.1167 2.72824C15.8568 2.42195 15.5349 2.17418 15.1723 2.00123C14.7891 1.93273 14.3959 1.94517 14.0178 2.03776C13.6397 2.13035 13.2852 2.30103 12.9771 2.53883C12.6647 2.75141 12.3152 2.90338 11.9467 2.98683C11.5782 2.90338 11.2286 2.75141 10.9163 2.53883C10.6085 2.30026 10.2541 2.12911 9.87586 2.03649C9.49767 1.94387 9.10421 1.93186 8.72107 2.00123C8.35846 2.17418 8.03659 2.42195 7.77662 2.72824C7.51666 3.03453 7.32451 3.3924 7.2128 3.7783C7.09247 4.11755 6.91018 4.43149 6.6752 4.70417C6.34164 4.83644 5.98834 4.91214 5.62987 4.92817C5.23331 4.9165 4.83866 4.98747 4.47102 5.13659C4.10338 5.2857 3.77079 5.50969 3.4944 5.7943C3.30721 6.14171 3.19458 6.52437 3.16372 6.91779C3.13287 7.31122 3.18446 7.70675 3.3152 8.0791C3.42345 8.43679 3.459 8.81253 3.41973 9.18417C3.2331 9.47759 3.00126 9.73966 2.7328 9.9607C2.39644 10.1841 2.11181 10.477 1.89802 10.8196C1.68424 11.1621 1.54625 11.5465 1.49333 11.9468C1.54625 12.3472 1.68424 12.7315 1.89802 13.0741C2.11181 13.4167 2.39644 13.7095 2.7328 13.933C3.00126 14.154 3.2331 14.4161 3.41973 14.7095C3.459 15.0811 3.42345 15.4569 3.3152 15.8146C3.18446 16.1869 3.13287 16.5824 3.16372 16.9759C3.19458 17.3693 3.30721 17.752 3.4944 18.0994C3.77079 18.384 4.10338 18.608 4.47102 18.7571C4.83866 18.9062 5.23331 18.9772 5.62987 18.9655C5.98834 18.9815 6.34164 19.0572 6.6752 19.1895C6.91018 19.4622 7.09247 19.7761 7.2128 20.1154C7.32451 20.5013 7.51666 20.8591 7.77662 21.1654C8.03659 21.4717 8.35846 21.7195 8.72107 21.8924C9.10423 21.9609 9.49749 21.9485 9.87555 21.8559C10.2536 21.7633 10.6081 21.5926 10.9163 21.3548C11.2286 21.1423 11.5782 20.9903 11.9467 20.9068C12.3152 20.9903 12.6647 21.1423 12.9771 21.3548C13.4867 21.6934 14.0709 21.9035 14.6795 21.9671C14.8469 21.9716 15.0137 21.9463 15.1723 21.8924C15.5349 21.7195 15.8568 21.4717 16.1167 21.1654C16.3767 20.8591 16.5688 20.5013 16.6805 20.1154C16.8009 19.7761 16.9832 19.4622 17.2181 19.1895C17.5517 19.0572 17.905 18.9815 18.2635 18.9655C18.66 18.9772 19.0547 18.9062 19.4223 18.7571C19.79 18.608 20.1225 18.384 20.3989 18.0994C20.5861 17.752 20.6988 17.3693 20.7296 16.9759C20.7605 16.5824 20.7089 16.1869 20.5781 15.8146C20.4699 15.4569 20.4343 15.0811 20.4736 14.7095C20.6602 14.4161 20.8921 14.154 21.1605 13.933ZM15.456 10.4834L11.4837 14.4706C11.3399 14.6049 11.1504 14.6797 10.9536 14.6797C10.7568 14.6797 10.5673 14.6049 10.4235 14.4706L8.43734 12.4695C8.30102 12.3304 8.22511 12.1431 8.22609 11.9484C8.22707 11.7536 8.30488 11.5671 8.44259 11.4294C8.5803 11.2917 8.7668 11.2139 8.96155 11.2129C9.1563 11.2119 9.34357 11.2879 9.48267 11.4242L10.9461 12.8876L14.4107 9.4231C14.5504 9.28668 14.738 9.21031 14.9333 9.21031C15.1287 9.21031 15.3162 9.28668 15.456 9.4231C15.5269 9.492 15.5832 9.57442 15.6217 9.66548C15.6602 9.75653 15.68 9.85438 15.68 9.95323C15.68 10.0521 15.6602 10.1499 15.6217 10.241C15.5832 10.332 15.5269 10.4145 15.456 10.4834Z\"\n fill=\"#1A6EE5\"\n />\n </svg>\n);\n","/**\n * ConsultationDetailsCard — the \"Call time\" + \"Astrologer\" white card shared\n * by every screen that confirms a booked consultation (Figma 60:4092 /\n * 783:35734). Split out once a second host (`ConsultationBookedSection`)\n * needed the identical card alongside `AstroConsultationSuccessModal`.\n *\n * Purely presentational: the host formats the date/time labels.\n */\nimport React from 'react';\nimport { CalendarClockIcon, StarIcon, VerifiedBadgeIcon } from './icons';\nimport styles from './ConsultationDetailsCard.module.scss';\n\nexport interface ConsultationDetailsCardAstrologer {\n name: string;\n /** Falls back to the initial-letter avatar when absent. */\n photoUrl?: string;\n /** Rendered comma-joined; the line is dropped when empty. */\n languages?: string[];\n /** Hidden when 0/undefined. */\n rating?: number;\n /** Hidden when undefined. */\n experienceYears?: number;\n}\n\nexport interface ConsultationDetailsCardProps {\n astrologer: ConsultationDetailsCardAstrologer;\n /** Booked call date, already formatted by the host, e.g. \"Friday, 25 August 2026\". */\n dateLabel: string;\n /** Booked call time range, already formatted, e.g. \"11:30 AM - 12:00 PM\". */\n timeRangeLabel: string;\n /** Rendered inside the astrologer section, below the profile row — e.g. a \"Join Call\" CTA. */\n astrologerFooter?: React.ReactNode;\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n}\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport const ConsultationDetailsCard: React.FC<ConsultationDetailsCardProps> = ({\n astrologer,\n dateLabel,\n timeRangeLabel,\n astrologerFooter,\n t,\n className = '',\n}) => {\n const languagesLabel = astrologer.languages?.length ? astrologer.languages.join(', ') : '';\n const showRating = typeof astrologer.rating === 'number' && astrologer.rating > 0;\n const showExperience = typeof astrologer.experienceYears === 'number';\n\n return (\n <div className={cx(styles.card, className)}>\n <div className={styles.scheduleSection}>\n <p className={styles.sectionLabel}>{t?.('consultationCallTimeLabel') ?? 'Call time'}</p>\n <div className={styles.timeRow}>\n <span className={styles.timeIcon}>\n <CalendarClockIcon />\n </span>\n <div className={styles.timeText}>\n <p className={styles.dateLabel}>{dateLabel}</p>\n <p className={styles.timeRangeLabel}>{timeRangeLabel}</p>\n </div>\n </div>\n </div>\n\n <div className={styles.astrologerSection}>\n <p className={styles.sectionLabel}>{t?.('consultationAstrologerLabel') ?? 'Astrologer'}</p>\n <div className={styles.astrologerRow}>\n <div className={styles.avatar}>\n <div className={styles.avatarInner}>\n <div className={styles.avatarFill} />\n {astrologer.photoUrl ? (\n <img className={styles.photo} src={astrologer.photoUrl} alt={astrologer.name} />\n ) : (\n <div className={styles.photoFallback} aria-hidden=\"true\">\n {astrologer.name?.trim().charAt(0).toUpperCase() || '?'}\n </div>\n )}\n </div>\n <span className={styles.verifiedBadge}>\n <VerifiedBadgeIcon />\n </span>\n </div>\n\n <div className={styles.astrologerMeta}>\n <p className={styles.astrologerName}>{astrologer.name}</p>\n {(showRating || showExperience || languagesLabel) && (\n <div className={styles.astrologerSubRow}>\n {showRating && (\n <span className={styles.rating}>\n {astrologer.rating!.toFixed(1)}\n <StarIcon />\n </span>\n )}\n {showRating && showExperience && <span className={styles.metaDot} />}\n {showExperience && (\n <span className={styles.experience}>\n {t?.('consultationYearsExperience', { count: astrologer.experienceYears }) ??\n `${astrologer.experienceYears} years of experience`}\n </span>\n )}\n </div>\n )}\n {languagesLabel && <p className={styles.languages}>{languagesLabel}</p>}\n </div>\n </div>\n\n {astrologerFooter}\n </div>\n </div>\n );\n};\n","import React from 'react';\n\n/**\n * Sparkle-framed checkmark hero (Figma node 60:4046). Traced from the\n * exported vector — the sparkle positions/colors are illustration, not\n * data, so they're kept as one static graphic rather than individual props.\n */\nexport const SuccessHeroIcon: React.FC = () => (\n <svg width=\"204\" height=\"80.4\" viewBox=\"0 0 204 80.4\" fill=\"none\" aria-hidden=\"true\">\n <g clipPath=\"url(#success-hero-clip-1)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M157.375 14.4109C150.356 14.4109 144.688 20.1023 144.688 27.0984C144.688 20.1023 138.996 14.4109 132 14.4109C138.996 14.4109 144.688 8.74204 144.688 1.7459C144.688 8.74204 150.356 14.4109 157.375 14.4109Z\"\n fill=\"#88CEAD\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M170.399 7.8645C166.552 7.8645 163.448 10.9914 163.448 14.8156C163.448 10.9914 160.321 7.8645 156.497 7.8645C160.321 7.8645 163.448 4.76011 163.448 0.913359C163.448 4.76011 166.552 7.8645 170.399 7.8645Z\"\n fill=\"#C2E9D6\"\n />\n </g>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M30.9167 26.5646C26.2376 26.5646 22.4583 30.3438 22.4583 35.0229C22.4583 30.3438 18.6791 26.5646 14 26.5646C18.6791 26.5646 22.4583 22.7853 22.4583 18.1062C22.4583 22.7853 26.2376 26.5646 30.9167 26.5646Z\"\n fill=\"#C2E9D6\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M60.7023 15.352C56.8556 15.352 53.7512 18.4788 53.7512 22.3031C53.7512 18.4788 50.6243 15.352 46.8 15.352C50.6243 15.352 53.7512 12.2476 53.7512 8.40082C53.7512 12.2476 56.8556 15.352 60.7023 15.352Z\"\n fill=\"#C2E9D6\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M156.902 66.0574C153.056 66.0574 149.951 69.1843 149.951 73.0085C149.951 69.1843 146.824 66.0574 143 66.0574C146.824 66.0574 149.951 62.953 149.951 59.1062C149.951 62.953 153.056 66.0574 156.902 66.0574Z\"\n fill=\"#C2E9D6\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M189.758 42.4855C187.335 42.4855 185.379 44.4554 185.379 46.8647C185.379 44.4554 183.409 42.4855 181 42.4855C183.409 42.4855 185.379 40.5297 185.379 38.1062C185.379 40.5297 187.335 42.4855 189.758 42.4855Z\"\n fill=\"#C2E9D6\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11.7584 55.4855C9.33499 55.4855 7.37922 57.4554 7.37922 59.8647C7.37922 57.4554 5.40928 55.4855 3 55.4855C5.40928 55.4855 7.37922 53.5297 7.37922 51.1062C7.37922 53.5297 9.33499 55.4855 11.7584 55.4855Z\"\n fill=\"#C2E9D6\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M47.3753 47.1681C40.3567 47.1681 34.6878 52.8595 34.6878 59.8557C34.6878 52.8595 28.9964 47.1681 22.0002 47.1681C28.9964 47.1681 34.6878 41.4992 34.6878 34.5031C34.6878 41.4992 40.3567 47.1681 47.3753 47.1681Z\"\n fill=\"#88CEAD\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M56.3955 61.7645C51.7164 61.7645 47.9371 65.5438 47.9371 70.2228C47.9371 65.5438 44.1578 61.7645 39.4788 61.7645C44.1578 61.7645 47.9371 57.9852 47.9371 53.3061C47.9371 57.9852 51.7164 61.7645 56.3955 61.7645Z\"\n fill=\"#C2E9D6\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M173.763 50.9718C168.849 50.9718 164.881 54.9557 164.881 59.853C164.881 54.9557 160.897 50.9718 156 50.9718C160.897 50.9718 164.881 47.0035 164.881 42.1062C164.881 47.0035 168.849 50.9718 173.763 50.9718Z\"\n fill=\"#88CEAD\"\n />\n <g clipPath=\"url(#success-hero-clip-2)\">\n <path\n d=\"M98.3086 66.4562C111.564 66.4562 122.309 55.711 122.309 42.4561C122.309 29.2013 111.564 18.4561 98.3086 18.4561C85.0538 18.4561 74.3086 29.2013 74.3086 42.4561C74.3086 55.711 85.0538 66.4562 98.3086 66.4562Z\"\n fill=\"#159169\"\n />\n <path\n d=\"M122.309 42.4559C122.309 55.656 111.509 66.456 98.3086 66.456C90.6587 66.456 83.9087 63.006 79.5586 57.456C83.6086 60.756 88.8586 62.7061 94.5586 62.7061C107.759 62.7061 118.559 51.9061 118.559 38.706C118.559 33.0061 116.609 27.756 113.309 23.706C118.859 28.0559 122.309 34.8059 122.309 42.4559Z\"\n fill=\"#087955\"\n />\n <path\n d=\"M111.359 35.5559L95.7587 52.656C94.7086 53.856 92.9087 53.856 91.8587 52.656L85.2586 45.306C84.3587 44.2559 84.3587 42.606 85.4086 41.5559C86.4587 40.6559 88.1086 40.6559 89.1587 41.7059L93.8087 46.9559L107.459 32.1059C108.509 31.0559 110.159 30.9059 111.209 31.9559C112.259 32.8559 112.259 34.6559 111.359 35.5559Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"success-hero-clip-1\">\n <rect width=\"38.4\" height=\"38.4\" fill=\"white\" transform=\"matrix(1 0 0 -1 132 38.4)\" />\n </clipPath>\n <clipPath id=\"success-hero-clip-2\">\n <rect width=\"48\" height=\"48\" fill=\"white\" transform=\"translate(74.3086 18.4561)\" />\n </clipPath>\n </defs>\n </svg>\n);\n\n/** Message bubble glyph beside the WhatsApp footnote. */\nexport const MessageSquareIcon: React.FC = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M12.4921 10.7417C12.7109 10.5229 12.8338 10.2261 12.8338 9.91671V2.91667C12.8338 2.60725 12.7109 2.3105 12.4921 2.09171C12.2733 1.87292 11.9765 1.75 11.667 1.75H2.33296C2.02352 1.75 1.72675 1.87292 1.50794 2.09171C1.28913 2.3105 1.1662 2.60725 1.1662 2.91667V12.4169C1.16621 12.4988 1.19051 12.5789 1.23602 12.647C1.28154 12.7151 1.34622 12.7681 1.4219 12.7995C1.49758 12.8308 1.58085 12.839 1.66119 12.823C1.74153 12.8071 1.81533 12.7676 1.87326 12.7097L3.15786 11.4252C3.37662 11.2064 3.67334 11.0834 3.98276 11.0834H11.667C11.9765 11.0834 12.2733 10.9605 12.4921 10.7417Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n","/**\n * AstroConsultationSuccessModal — the confirmation dialog shown right after a\n * consultation call is booked (Figma 60:4044, \"Variation 3: Muted Editorial\").\n *\n * Purely presentational: the host formats the date/time labels (locale- and\n * app-specific) and owns the dismiss behavior. There is no close button in\n * the design itself — dismissal is via backdrop click or Escape, same as\n * `SampleReportModal`/`ConsultationSlotModal` elsewhere in this codebase.\n *\n * Rendered as a bottom sheet (`@srimandir/common`'s `BottomSheet`) rather\n * than a centered dialog, matching every other consultation surface in this\n * package — it comes with backdrop/Escape dismiss and body-scroll-lock\n * already built in, so this component only owns the content.\n */\nimport React from 'react';\nimport { BottomSheet } from '@srimandir/common';\nimport {\n ConsultationDetailsCard,\n type ConsultationDetailsCardAstrologer,\n} from '../ConsultationDetailsCard';\nimport { MessageSquareIcon, SuccessHeroIcon } from './icons';\nimport styles from './AstroConsultationSuccessModal.module.scss';\n\nexport type AstroConsultationSuccessModalAstrologer = ConsultationDetailsCardAstrologer;\n\nexport interface AstroConsultationSuccessModalProps {\n isOpen: boolean;\n onClose: () => void;\n\n astrologer: AstroConsultationSuccessModalAstrologer;\n /** Booked call date, already formatted by the host, e.g. \"Friday, 25 August 2026\". */\n dateLabel: string;\n /** Booked call time range, already formatted, e.g. \"11:30 AM - 12:00 PM\". */\n timeRangeLabel: string;\n\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n}\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport const AstroConsultationSuccessModal: React.FC<AstroConsultationSuccessModalProps> = ({\n isOpen,\n onClose,\n astrologer,\n dateLabel,\n timeRangeLabel,\n t,\n className = '',\n}) => {\n const title = t?.('consultationCallBookedTitle') ?? 'Your call has been booked with our Vedic astrologer';\n\n return (\n <BottomSheet\n isOpen={isOpen}\n onClose={onClose}\n showCloseButton={false}\n ariaLabel={title}\n className={cx(styles.sheet, className)}\n >\n <div className={styles.root}>\n <div className={styles.header}>\n <SuccessHeroIcon />\n <p className={styles.title}>{title}</p>\n </div>\n\n <ConsultationDetailsCard\n astrologer={astrologer}\n dateLabel={dateLabel}\n timeRangeLabel={timeRangeLabel}\n t={t}\n />\n\n <div className={styles.footer}>\n <span className={styles.footerIcon}>\n <MessageSquareIcon />\n </span>\n <p className={styles.footerText}>\n {t?.('consultationWhatsappUpdate') ?? 'All updates will be sent to your WhatsApp'}\n </p>\n </div>\n </div>\n </BottomSheet>\n );\n};\n","import React from 'react';\n\n/** Small green check badge beside \"Your astrology call details:\". */\nexport const CheckBadgeIcon: React.FC = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"7\" cy=\"7\" r=\"7\" fill=\"#159169\" />\n <path\n d=\"M5.70493 10.5L2.91667 7.68097L4.00262 6.58591L5.70493 8.30988L9.99738 3.96666L11.0833 5.06171L5.70493 10.5Z\"\n fill=\"white\"\n />\n </svg>\n);\n\n/** Bell glyph on the call-reminder notice. */\nexport const BellIcon: React.FC = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.996 8.66667V6C3.996 3.79067 5.78867 2 8 2C10.2113 2 12.004 3.79067 12.004 6V8.66667C12.004 9.324 12.3027 9.946 12.8153 10.358L13.0213 10.5233C13.6327 11.014 13.2853 12 12.5013 12H3.49867C2.71467 12 2.36733 11.014 2.97867 10.5233L3.18467 10.358C3.698 9.946 3.996 9.324 3.996 8.66667Z\"\n stroke=\"#22272B\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M7 14H9\" stroke=\"#22272B\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\n/** Phone glyph on the \"Join Call\" CTA. */\nexport const PhoneIcon: React.FC = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M16.5 12.69v2.25a1.5 1.5 0 0 1-1.635 1.5 14.85 14.85 0 0 1-6.472-2.303 14.63 14.63 0 0 1-4.5-4.5A14.85 14.85 0 0 1 1.59 3.135 1.5 1.5 0 0 1 3.083 1.5h2.25a1.5 1.5 0 0 1 1.5 1.29c.095.72.271 1.427.525 2.107a1.5 1.5 0 0 1-.337 1.583l-.953.952a12 12 0 0 0 4.5 4.5l.953-.952a1.5 1.5 0 0 1 1.582-.338c.68.254 1.387.43 2.108.525a1.5 1.5 0 0 1 1.29 1.523Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n/**\n * Decorative zodiac-wheel doodle behind the header (Figma node 783:35724).\n * Illustration, not data — kept as one static graphic.\n */\nexport const DecorativeBlobIcon: React.FC = () => (\n <svg width=\"127\" height=\"127\" viewBox=\"0 0 127.081 126.889\" fill=\"none\" aria-hidden=\"true\">\n <g opacity=\"0.3\" fill=\"url(#consultation-booked-blob-gradient)\">\n <path d=\"M27.9017 31.3222C27.8477 30.5847 28.7507 30.1841 29.2628 30.7169L31.8908 33.4565L33.1089 33.3431C44.3357 21.2677 61.5935 15.9144 78.2613 20.35C79.3566 17.0877 83.8696 16.8772 85.2729 19.9975C85.699 20.945 85.7001 21.9772 85.3592 22.88C101.737 30.2663 111.706 46.1047 112.239 63.0172L113.545 64.379L117.701 63.9922C118.038 63.9611 118.357 64.1466 118.496 64.4555L118.497 64.4583C118.636 64.7693 118.56 65.1339 118.31 65.3635L115.236 68.1875L115.525 72.2286C115.579 72.9661 114.676 73.3667 114.164 72.8339L111.868 70.4411C110.533 80.5327 105.861 90.033 98.4809 97.2479C100.101 100.753 96.0512 104.171 92.8726 101.898C81.1457 110.151 66.642 112.279 53.3534 108.26L53.5323 110.768C53.5863 111.505 52.6834 111.906 52.1712 111.373L49.518 108.608L45.5891 108.974C44.8341 109.047 44.4232 108.113 44.98 107.602L46.9497 105.792C38.5359 101.804 31.3005 95.2504 26.5429 86.6274C24.5351 87.6758 22.2198 86.744 21.3637 84.8403C20.5076 82.9367 21.3466 80.5863 23.4634 79.7798C18.4786 65.7354 20.8035 50.5844 28.7288 38.8609L25.9032 39.1242C25.1482 39.1973 24.7373 38.2636 25.2941 37.7529L28.1715 35.107L27.9017 31.3222ZM35.7822 33.0938C36.1187 33.0612 36.4385 33.2481 36.5774 33.5571L36.5787 33.5599C36.7169 33.8709 36.6417 34.2355 36.3913 34.4651L33.5139 37.1109L33.7837 40.8957C33.8376 41.6333 32.9347 42.0339 32.4225 41.5011L30.3305 39.3204C28.4215 42.0739 26.8429 45.0323 25.6049 48.1262L40.6029 53.8074L52.1774 55.5957C52.4595 55.1313 52.7514 54.6998 53.0576 54.2907L49.1548 48.9426C48.6095 48.2029 49.5662 47.2861 50.2851 47.8542L55.2947 51.8108C55.7536 51.3924 56.2391 51.001 56.7475 50.6418L54.318 39.2619L47.729 24.6106C43.0905 26.7969 39.0007 29.6912 35.5393 33.1165L35.7822 33.0938ZM50.5916 64.6266L48.8103 64.8256L50.6723 65.1229C51.0314 65.1802 51.3045 65.4746 51.3368 65.8349C51.5575 68.3138 52.2009 68.7824 51.5057 69.2936L44.4868 74.4482L53.0005 72.6174C53.3253 72.5477 53.6588 72.6877 53.837 72.9689C54.1738 73.5009 54.5497 74.0069 54.9556 74.4757C55.1974 74.7587 55.2138 75.1686 54.9918 75.4669L53.5145 77.4508L55.4362 75.9573C55.7358 75.7259 56.1577 75.738 56.4424 75.9865C58.5425 77.8169 59.4014 77.6518 59.2672 78.5358L57.9689 87.1388L62.6326 79.8887C63.1131 79.1399 63.5415 79.8087 66.2748 79.8807C67.0908 79.9 67.0751 80.8577 67.1521 81.0262L67.1664 80.6093C67.1798 80.1996 67.5029 79.8677 67.9116 79.8451C70.4109 79.7001 70.8815 79.0197 71.4 79.7213L76.4704 86.5966L74.6947 78.3109C74.4979 77.396 75.4398 77.5261 77.3717 75.6551C77.6327 75.402 78.0319 75.3582 78.3411 75.5516L80.0235 76.5996L78.7436 75.2095C78.4765 74.9174 78.4634 74.4789 78.7128 74.1717C79.2515 73.5122 79.6806 72.8935 80.0644 72.229C80.227 71.9456 80.5469 71.7915 80.8703 71.8412L89.1653 73.1125L82.1446 68.5781C81.8653 68.3984 81.7287 68.0663 81.8009 67.7421C82.0218 66.7455 82.1426 65.794 82.1606 64.9158C82.1675 64.5276 82.4543 64.2036 82.8381 64.148L84.7599 63.8672L82.7755 63.6148C82.4022 63.5673 82.1135 63.2629 82.0852 62.8906C81.8993 60.519 81.2337 60.0365 81.9335 59.5191L88.6228 54.6027L80.5105 56.353C80.1878 56.4218 79.8562 56.2843 79.6772 56.0069C78.7074 54.4978 78.0277 54.0193 77.8832 53.698C77.579 53.0215 78.2627 52.6523 79.0814 51.3273L77.577 52.5551C77.2819 52.7964 76.8575 52.7939 76.5657 52.5486C74.5794 50.8787 73.7253 51.0637 73.8655 50.1706L75.128 41.8991L70.5788 48.957C70.1123 49.6857 69.6522 49.0654 67.0189 49.0178C66.6024 49.0101 66.2634 48.6843 66.2424 48.268L66.1747 46.9992L65.8545 48.4577C65.7821 48.7888 65.5067 49.0382 65.1687 49.0748C64.1845 49.185 63.3095 49.3495 62.4941 49.5788C62.1768 49.669 61.8368 49.5522 61.6414 49.2856L56.6184 42.4517L58.407 50.8301C58.4749 51.1489 58.3403 51.4775 58.0677 51.6577C57.2871 52.1699 56.5593 52.7635 55.9031 53.4182C55.6186 53.7021 55.1675 53.7286 54.8524 53.4785L53.8477 52.6854L54.69 53.8399C54.9043 54.137 54.8916 54.5294 54.6642 54.8081C53.1778 56.6309 53.3073 57.3738 52.465 57.2422L43.9282 55.9235L51.2299 60.6641C51.4997 60.8379 51.6346 61.1605 51.5767 61.4749C51.4327 62.2333 51.3363 63.0654 51.2952 63.8793C51.2758 64.268 50.9776 64.5836 50.5916 64.6266ZM57.3453 91.036L52.7309 103.167L55.5569 102.905C56.3164 102.835 56.7205 103.768 56.166 104.276L53.5608 106.67C63.2295 109.657 73.9477 109.354 83.9189 105.082L77.3281 90.4272L70.4371 81.0839C69.869 81.2104 69.2967 81.305 68.7257 81.3667L68.5384 86.9921C68.5104 87.906 67.1941 88.0513 66.9762 87.1485L65.6217 81.4363C64.9587 81.3952 64.3063 81.3172 63.672 81.2005L57.3453 91.036ZM93.0177 73.7145L108.061 79.4245C109.153 76.3838 109.924 73.2265 110.333 70.0049L107.203 70.2959C106.866 70.3271 106.547 70.1416 106.408 69.8326L106.406 69.8298C106.268 69.5188 106.343 69.1543 106.594 68.9246L109.667 66.1009L109.378 62.0582C109.354 61.7248 109.542 61.413 109.847 61.2777C110.092 61.1687 110.357 61.2247 110.577 61.3641C110.24 56.5845 109.099 51.7881 107.113 47.1521L92.4791 53.7335L83.3023 60.4792C83.4321 61.028 83.5314 61.5787 83.599 62.1233L90.712 63.0273C91.6186 63.1445 91.636 64.4663 90.7265 64.5965L83.713 65.6203C83.6697 66.2385 83.5851 66.8821 83.4597 67.5423L93.0177 73.7145ZM82.295 25.2753L77.2324 38.6127L75.5138 49.872C76.0593 50.1949 76.5807 50.5472 77.0714 50.9236L82.5826 46.4216C83.2931 45.8388 84.2571 46.744 83.7302 47.4914L79.6189 53.3109C80.0164 53.7648 80.375 54.2209 80.7026 54.6909L91.8282 52.2894L106.464 45.7074C101.786 35.7767 93.8386 28.3748 84.4811 24.2175C83.8228 24.8728 83.1441 25.1699 82.295 25.2753ZM49.1735 23.9606L55.7635 38.614L62.5985 47.9138C63.1769 47.7724 63.7818 47.6598 64.4272 47.5714L65.8781 40.9503C66.073 40.0565 67.3921 40.1581 67.4425 41.0779L67.7855 47.4638C68.3649 47.5 68.9494 47.5645 69.5326 47.6584L75.7897 37.95L80.6592 25.1213C79.3141 24.6806 78.2579 23.5463 78.0911 21.9389C68.8054 19.4133 58.6505 19.8983 49.1735 23.9606ZM97.5061 95.9799C101.883 91.6636 105.258 86.5096 107.499 80.9053L92.563 75.2358L81.1552 73.4872C80.9143 73.8719 80.6523 74.251 80.3646 74.6314L85.142 79.8236C85.7663 80.5038 84.9157 81.5168 84.1404 81.0322L78.0166 77.2155C77.5158 77.6613 76.9665 78.0881 76.356 78.5051L78.7718 89.7754L85.3636 104.433C87.647 103.357 89.7968 102.11 91.804 100.71C89.7093 97.0444 94.289 93.2482 97.5061 95.9799ZM47.8521 104.466L47.613 101.109C47.559 100.372 48.462 99.9712 48.9741 100.504L51.1762 102.8L55.8649 90.4731L57.6229 78.8207C57.0046 78.4322 56.4361 78.0298 55.9039 77.6008L49.8829 82.2795C49.1556 82.8434 48.2174 81.9112 48.762 81.1807L53.3505 75.0194C53.1616 74.7804 52.9793 74.5334 52.8049 74.2794L41.2824 76.7577L28.4974 82.5073C28.7305 83.6036 28.4461 84.725 27.7807 85.5894C32.4121 94.1246 39.5464 100.585 47.8521 104.466ZM27.8512 81.0611L40.6325 75.3131L50.1411 68.3299C50.0035 67.7354 49.8991 67.1599 49.8255 66.5909L42.7867 65.4652C42.392 65.4002 42.1084 65.0562 42.1196 64.6645C42.1296 64.2682 42.4305 63.9395 42.8241 63.8965L49.758 63.1256C49.799 62.6475 49.8561 62.169 49.9283 61.7073L40.0403 55.2879L25.0425 49.6071C21.6586 59.0204 21.4458 69.5777 25.0613 79.5425C26.1538 79.6185 27.1862 80.1532 27.8512 81.0611Z\" />\n <path d=\"M88.2625 2.20076L91.0447 1.94178C91.8042 1.87155 92.2083 2.80453 91.6538 3.31309L89.596 5.20359L89.789 7.90689C89.843 8.64444 88.94 9.04504 88.4279 8.51223L86.5516 6.55578L83.7694 6.81476C83.0099 6.88499 82.6058 5.95201 83.1603 5.44346L85.2181 3.55295L85.0251 0.849646C84.9711 0.1121 85.8741 -0.288496 86.3862 0.244309L88.2625 2.20076Z\" />\n <path d=\"M42.7926 121.437L43.7546 122.441L45.1871 122.308C45.9421 122.235 46.353 123.168 45.7961 123.679L44.737 124.652L44.8366 126.039C44.8891 126.778 43.9863 127.177 43.4748 126.645L42.512 125.641L41.0796 125.775C40.3246 125.848 39.9137 124.914 40.4705 124.403L41.5303 123.43L41.4315 122.043C41.3775 121.305 42.2804 120.905 42.7926 121.437Z\" />\n <path d=\"M3.90343 34.9369L6.20403 37.3352L9.6131 37.0182C10.3726 36.948 10.7767 37.8809 10.2222 38.3895L7.70169 40.7069L7.93748 44.0202C7.99146 44.7577 7.08853 45.1583 6.57636 44.6255L4.27576 42.2272L0.866695 42.5443C0.10716 42.6145 -0.296871 41.6815 0.257621 41.173L2.77811 38.8556L2.54231 35.5423C2.48833 34.8047 3.39127 34.4041 3.90343 34.9369Z\" />\n <path d=\"M61.9902 54.3898C67.5899 51.8715 74.1707 54.3694 76.6889 59.9689C79.2072 65.5686 76.7093 72.1494 71.1096 74.6677C65.51 77.186 58.9293 74.688 56.4109 69.0883C53.8927 63.4888 56.3906 56.908 61.9902 54.3898Z\" />\n <path d=\"M126.748 87.8674C127.603 89.7694 126.755 92.0048 124.852 92.8602C122.95 93.7156 120.715 92.8671 119.86 90.965C119.004 89.063 119.853 86.8276 121.755 85.9722C123.657 85.1168 125.892 85.9653 126.748 87.8674Z\" />\n </g>\n <path\n opacity=\"0.1\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M21.8571 92.9852C21.8756 92.923 21.933 92.88 21.998 92.88C22.0631 92.88 22.1204 92.923 22.139 92.9852C22.139 92.9852 22.3969 93.8498 22.6733 94.7771C23.1138 96.2544 24.2695 97.4101 25.7468 97.8506C26.6741 98.127 27.5387 98.3849 27.5387 98.3849C27.6009 98.4034 27.6439 98.4608 27.6439 98.5258C27.6439 98.5909 27.6009 98.6483 27.5387 98.6668C27.5387 98.6668 26.6741 98.9247 25.7468 99.2011C24.2695 99.6416 23.1138 100.797 22.6733 102.275C22.3969 103.202 22.139 104.066 22.139 104.066C22.1204 104.129 22.0631 104.172 21.998 104.172C21.933 104.172 21.8756 104.129 21.8571 104.066C21.8571 104.066 21.5992 103.202 21.3228 102.275C20.8823 100.797 19.7266 99.6416 18.2492 99.2011C17.3219 98.9247 16.4574 98.6668 16.4574 98.6668C16.3952 98.6483 16.3522 98.5909 16.3522 98.5258C16.3522 98.4608 16.3952 98.4034 16.4574 98.3849C16.4574 98.3849 17.3219 98.127 18.2492 97.8506C19.7266 97.4101 20.8823 96.2544 21.3228 94.7771C21.5992 93.8498 21.8571 92.9852 21.8571 92.9852Z\"\n fill=\"#6A28D9\"\n />\n <path\n opacity=\"0.1\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M10.0391 83.9089C10.0495 83.874 10.0816 83.85 10.118 83.85C10.1544 83.85 10.1866 83.874 10.1969 83.9089C10.1969 83.9089 10.3414 84.393 10.4962 84.9123C10.7429 85.7396 11.39 86.3868 12.2173 86.6335C12.7366 86.7883 13.2208 86.9327 13.2208 86.9327C13.2556 86.9431 13.2797 86.9752 13.2797 87.0116C13.2797 87.048 13.2556 87.0802 13.2208 87.0905C13.2208 87.0905 12.7366 87.235 12.2173 87.3898C11.39 87.6365 10.7429 88.2836 10.4962 89.1109C10.3414 89.6302 10.1969 90.1144 10.1969 90.1144C10.1866 90.1492 10.1544 90.1733 10.118 90.1733C10.0816 90.1733 10.0495 90.1492 10.0391 90.1144C10.0391 90.1144 9.89466 89.6302 9.73985 89.1109C9.49317 88.2836 8.846 87.6365 8.01869 87.3898C7.4994 87.235 7.01525 87.0905 7.01525 87.0905C6.9804 87.0802 6.95635 87.048 6.95635 87.0116C6.95635 86.9752 6.9804 86.9431 7.01525 86.9327C7.01525 86.9327 7.4994 86.7883 8.01869 86.6335C8.846 86.3868 9.49317 85.7396 9.73985 84.9123C9.89466 84.393 10.0391 83.9089 10.0391 83.9089Z\"\n fill=\"#6A28D9\"\n />\n <defs>\n <linearGradient\n id=\"consultation-booked-blob-gradient\"\n x1=\"88.9522\"\n y1=\"27.2458\"\n x2=\"26.2522\"\n y2=\"97.2058\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#CEC7FF\" />\n <stop offset=\"0.541706\" stopColor=\"#A2C8FF\" />\n <stop offset=\"1\" stopColor=\"white\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","/**\n * ConsultationBookedSection — the inline \"call booked\" confirmation block\n * (Figma 783:35723), for embedding at the top of a booking-confirmation page\n * rather than in a modal (compare `AstroConsultationSuccessModal`, which\n * shows the same `ConsultationDetailsCard` inside a dialog instead).\n *\n * Purely presentational: the host formats the date/time labels and owns the\n * \"Join Call\" action. The design's \"Join Call\" button is Code-Connect-mapped\n * to an Android Compose component (`org.a4b.tatva...TatvaButton`) in Figma —\n * not usable here, so it's rendered as a plain button matching this\n * package's existing CTA styling (see `PaymentResult`'s `.ctaBtn`).\n */\nimport React from 'react';\nimport {\n ConsultationDetailsCard,\n type ConsultationDetailsCardAstrologer,\n} from '../ConsultationDetailsCard';\nimport { BellIcon, CheckBadgeIcon, DecorativeBlobIcon, PhoneIcon } from './icons';\nimport styles from './ConsultationBookedSection.module.scss';\n\nexport type ConsultationBookedSectionAstrologer = ConsultationDetailsCardAstrologer;\n\nexport interface ConsultationBookedSectionProps {\n astrologer: ConsultationBookedSectionAstrologer;\n /** Booked call date, already formatted by the host, e.g. \"Friday, 25 August 2026\". */\n dateLabel: string;\n /** Booked call time range, already formatted, e.g. \"11:30 AM - 12:00 PM\". */\n timeRangeLabel: string;\n /** Renders the \"Join Call\" CTA when present. */\n onJoinCall?: () => void;\n /** Minutes-before-call figure in the reminder note. Defaults to 15. */\n reminderMinutesBefore?: number;\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n}\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport const ConsultationBookedSection: React.FC<ConsultationBookedSectionProps> = ({\n astrologer,\n dateLabel,\n timeRangeLabel,\n onJoinCall,\n reminderMinutesBefore = 15,\n t,\n className = '',\n}) => (\n <div className={cx(styles.root, className)}>\n <span className={styles.blob} aria-hidden=\"true\">\n <DecorativeBlobIcon />\n </span>\n\n <div className={styles.header}>\n <span className={styles.headerIcon}>\n <CheckBadgeIcon />\n </span>\n <p className={styles.headerText}>\n {t?.('consultationCallDetailsHeading') ?? 'Your astrology call details:'}\n </p>\n </div>\n\n <div className={styles.cardWrap}>\n <ConsultationDetailsCard\n className={styles.card}\n astrologer={astrologer}\n dateLabel={dateLabel}\n timeRangeLabel={timeRangeLabel}\n t={t}\n astrologerFooter={\n onJoinCall && (\n <button type=\"button\" className={styles.ctaBtn} onClick={onJoinCall}>\n <PhoneIcon />\n {t?.('consultationJoinCall') ?? 'Join Call'}\n </button>\n )\n }\n />\n </div>\n\n <div className={styles.reminder}>\n <span className={styles.reminderIcon}>\n <BellIcon />\n </span>\n <p className={styles.reminderText}>\n {t?.('consultationCallReminderNote', { minutes: reminderMinutesBefore }) ??\n `You will receive a notification ${reminderMinutesBefore} minutes before the call`}\n </p>\n </div>\n </div>\n);\n","/**\n * UnscheduledAstrologerList — the astrologer picker for a call that's already\n * included in the user's package but not yet scheduled (Figma 811:43546).\n * Radio-select over a horizontally scrollable row of cards, with a single\n * \"Schedule your call\" CTA in the footer once one is chosen.\n *\n * Purely presentational: the host owns selection state and the schedule\n * action. The design's CTA is Code-Connect-mapped to an Android Compose\n * component (`org.a4b.tatva...TatvaButton`) — not usable here, so it's\n * rendered as a plain button matching this package's existing CTA styling\n * (see `PaymentResult`'s `.ctaBtn`).\n */\nimport React from 'react';\nimport { ArrowRightIcon, IncludedCheckIcon } from './icons';\nimport { AstrologerPickerRow } from './AstrologerPickerRow';\nimport type { UnscheduledAstrologerListAstrologer } from './types';\nimport styles from './UnscheduledAstrologerList.module.scss';\n\nexport type { UnscheduledAstrologerListAstrologer } from './types';\n\nexport interface UnscheduledAstrologerListProps {\n astrologers: UnscheduledAstrologerListAstrologer[];\n selectedAstrologerId?: string;\n onSelectAstrologer?: (astrologer: UnscheduledAstrologerListAstrologer) => void;\n /** Fired when \"Schedule your call\" is tapped. */\n onScheduleCall?: () => void;\n /** Greys out the CTA, e.g. nothing selected yet. */\n ctaDisabled?: boolean;\n /** CTA label. Wins over `t(\"consultationScheduleCall\")`. */\n ctaLabel?: string;\n /**\n * Hides the title + \"Included in your package\" tag — for hosts that render\n * the picker inline under their own heading instead of as a standalone card.\n */\n hideHeader?: boolean;\n /**\n * Hides the \"Schedule your call\" footer button — for hosts with a single\n * page-level CTA instead of one scoped to this picker.\n */\n hideFooter?: boolean;\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n}\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport const UnscheduledAstrologerList: React.FC<UnscheduledAstrologerListProps> = ({\n astrologers,\n selectedAstrologerId,\n onSelectAstrologer,\n onScheduleCall,\n ctaDisabled = false,\n ctaLabel,\n hideHeader = false,\n hideFooter = false,\n t,\n className = '',\n}) => (\n <div className={cx(styles.root, className)}>\n <div className={styles.card}>\n {!hideHeader && (\n <div className={styles.header}>\n <p className={styles.title}>\n {t?.('consultationScheduleCallTitle') ?? 'Schedule your astrology call'}\n </p>\n <span className={styles.includedTag}>\n <span className={styles.includedIcon}>\n <IncludedCheckIcon />\n </span>\n <span className={styles.includedText}>\n {t?.('consultationIncludedInPackage') ?? 'Included in your package'}\n </span>\n </span>\n </div>\n )}\n\n <AstrologerPickerRow\n astrologers={astrologers}\n selectedAstrologerId={selectedAstrologerId}\n onSelectAstrologer={onSelectAstrologer}\n t={t}\n />\n\n {!hideFooter && (\n <div className={styles.footer}>\n <button\n type=\"button\"\n className={styles.ctaBtn}\n disabled={ctaDisabled}\n onClick={onScheduleCall}\n >\n {ctaLabel ?? t?.('consultationScheduleCall') ?? 'Schedule your call'}\n <ArrowRightIcon />\n </button>\n </div>\n )}\n </div>\n </div>\n);\n","/**\n * Placeholder shown while the host is still fetching the astrologers for\n * `UnscheduledAstrologerList` — mirrors its card shape (see\n * `UnscheduledAstrologerList.module.scss`) so the layout doesn't jump once\n * the real list swaps in.\n */\nimport React from 'react';\nimport styles from './UnscheduledAstrologerListSkeleton.module.scss';\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport interface UnscheduledAstrologerListSkeletonProps {\n className?: string;\n}\n\nexport const UnscheduledAstrologerListSkeleton: React.FC<\n UnscheduledAstrologerListSkeletonProps\n> = ({ className = '' }) => (\n <div className={cx(styles.root, className)} aria-busy=\"true\" aria-live=\"polite\">\n <div className={styles.card}>\n <div className={styles.header}>\n <div className={cx(styles.title, styles.shimmer)} />\n <div className={cx(styles.tag, styles.shimmer)} />\n </div>\n\n <div className={styles.scrollRow}>\n {[0, 1, 2].map((i) => (\n <div key={i} className={styles.astrologerCard}>\n <div className={cx(styles.avatar, styles.shimmer)} />\n <div className={styles.meta}>\n <div className={cx(styles.name, styles.shimmer)} />\n <div className={cx(styles.subtitle, styles.shimmer)} />\n </div>\n </div>\n ))}\n </div>\n\n <div className={styles.footer}>\n <div className={cx(styles.ctaBtn, styles.shimmer)} />\n </div>\n </div>\n </div>\n);\n"],"names":["getAstrologerPriceSymbol","currencyCode","StarIcon","size","className","jsx","cx","classNames","formatRating","rating","AstrologerCard","astrologer","pricing","currencySymbol","onSelectSlot","disabled","ctaLabel","t","innerRef","name","photoUrl","languages","specialties","experienceYears","isPreviouslyConsulted","symbol","showRating","showExperience","languagesLabel","tags","hasMrp","hasDiscountPercent","content","jsxs","Fragment","styles","tag","ClockUnavailableIcon","SlotUnavailableNotice","message","IncludedCheckIcon","VerifiedBadgeIcon","ArrowRightIcon","AstrologerPickerRow","astrologers","selectedAstrologerId","onSelectAstrologer","ariaLabel","isSelected","RecommendedRibbon","ConsultationSlotSheet","isOpen","onClose","showCloseButton","inline","hideHeader","days","loading","error","onRetry","selectedDate","onDateSelect","selectedPeriod","onPeriodSelect","selectedSlotStart","onSlotSelect","onAstrologerSelect","phoneNumberSection","title","heading","iconUrl","icon","onCtaClick","ctaDisabled","isProcessing","errorMessage","isGlobal","badge","sheetTitle","headerContent","footerContent","bodyContent","ConsultationSlotSelector","BottomSheet","en","hi","kn","te","consultationDictionaries","isSupported","locale","WEEKDAYS","RELATIVE_DAY_OFFSETS","weekdayKeyFromNow","daysFromNow","date","createConsultationTranslate","overrides","base","resolve","k","key","options","template","BackIcon","CalendarClockIcon","PhoneIcon","PaymentResult","status","amount","bookingId","slotLabel","isLoading","onBack","onJoinCall","onBookSlotAgain","isBooked","ConsultationDetailsCard","dateLabel","timeRangeLabel","astrologerFooter","SuccessHeroIcon","MessageSquareIcon","AstroConsultationSuccessModal","CheckBadgeIcon","BellIcon","DecorativeBlobIcon","ConsultationBookedSection","reminderMinutesBefore","UnscheduledAstrologerList","onScheduleCall","hideFooter","UnscheduledAstrologerListSkeleton","i"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"astro-consultation.js","sources":["../src/components/AstrologerCard/currency.ts","../src/components/AstrologerCard/CardIcons.tsx","../src/components/AstrologerCard/AstrologerCard.tsx","../src/components/SlotUnavailableNotice/icons.tsx","../src/components/SlotUnavailableNotice/SlotUnavailableNotice.tsx","../src/components/UnscheduledAstrologerList/icons.tsx","../src/components/UnscheduledAstrologerList/AstrologerPickerRow.tsx","../src/components/ConsultationSlotSheet/icons.tsx","../src/components/ConsultationSlotSheet/ConsultationSlotSheet.tsx","../src/i18n/en.ts","../src/i18n/hi.ts","../src/i18n/kn.ts","../src/i18n/te.ts","../src/i18n/index.ts","../src/components/PaymentResult/PaymentIcons.tsx","../src/components/PaymentResult/PaymentResult.tsx","../src/components/ConsultationDetailsCard/icons.tsx","../src/components/ConsultationDetailsCard/ConsultationDetailsCard.tsx","../src/components/AstroConsultationSuccessModal/icons.tsx","../src/components/AstroConsultationSuccessModal/AstroConsultationSuccessModal.tsx","../src/components/ConsultationBookedSection/icons.tsx","../src/components/ConsultationBookedSection/ConsultationBookedSection.tsx","../src/components/UnscheduledAstrologerList/UnscheduledAstrologerList.tsx","../src/components/UnscheduledAstrologerList/UnscheduledAstrologerListSkeleton.tsx"],"sourcesContent":["/**\n * Currency symbol for an ISO 4217 code.\n *\n * Deliberately small: the card only ever shows rupees or dollars today, and\n * hosts that price in other currencies pass a resolved `currencySymbol` prop\n * instead (hanuman has its own country-aware `getCurrencySymbol`). Unknown\n * codes fall back to \"$\" rather than rendering a bare number.\n */\nexport const getAstrologerPriceSymbol = (currencyCode?: string): string => {\n switch (currencyCode?.toUpperCase()) {\n case 'INR':\n return '₹';\n case 'USD':\n return '$';\n default:\n return '$';\n }\n};\n","import React from 'react';\n\n/**\n * Filled star for the rating pill, traced from the Figma\n * \"Interface, Essential/star-favorite\" asset. Golden Honey 500 (#ffc627).\n */\nexport const StarIcon: React.FC<{ size?: number; className?: string }> = ({\n size = 14,\n className,\n}) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n className={className}\n >\n <path\n d=\"M7 1.167l1.72 3.485 3.846.561-2.783 2.713.657 3.83L7 9.95l-3.44 1.806.657-3.83L1.434 5.213l3.846-.561L7 1.167z\"\n fill=\"#ffc627\"\n stroke=\"#ffc627\"\n strokeWidth=\"1\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n","/**\n * AstrologerCard — one astrologer row on the consultation landing screen.\n *\n * Purely presentational: the host supplies already-mapped astrologer fields and\n * a price block, and gets a tap on \"Select Slot\" back. See `./types.ts` for\n * which fields come from the available-astrologers API and which do not.\n *\n * Currency: pass `currencySymbol` when the host already resolves it (hanuman\n * does, country-aware); otherwise `pricing.currencyCode` is mapped for INR/USD.\n */\nimport React from 'react';\nimport type { AstrologerCardAstrologer, AstrologerCardPricing } from './types';\nimport { getAstrologerPriceSymbol } from './currency';\nimport { StarIcon } from './CardIcons';\nimport styles from './AstrologerCard.module.scss';\n\nexport interface AstrologerCardProps {\n astrologer: AstrologerCardAstrologer;\n /**\n * Price block. Omit to hide the price area entirely — see\n * `AstrologerCardPricing`, none of these values come from the API yet.\n */\n pricing?: AstrologerCardPricing;\n /**\n * Pre-resolved currency symbol, e.g. \"₹\" or \"$\". Wins over\n * `pricing.currencyCode`; pass it when the host maps currency itself.\n */\n currencySymbol?: string;\n /** Fired with the astrologer when \"Select Slot\" is tapped. */\n onSelectSlot?: (astrologer: AstrologerCardAstrologer) => void;\n /** Greys out the CTA, e.g. while a booking is already in flight. */\n disabled?: boolean;\n /** CTA label. Wins over `t(\"consultationSelectSlot\")`. */\n ctaLabel?: string;\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n /** Forwarded to the outermost element so hosts can attach impression observers. */\n innerRef?: React.Ref<HTMLDivElement>;\n}\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\n/** \"4.5\" — one decimal, so an integer 4 from the API still reads as a rating. */\nconst formatRating = (rating: number): string => rating.toFixed(1);\n\nexport const AstrologerCard: React.FC<AstrologerCardProps> = ({\n astrologer,\n pricing,\n currencySymbol,\n onSelectSlot,\n disabled = false,\n ctaLabel,\n t,\n className = '',\n innerRef,\n}) => {\n const {\n name,\n photoUrl,\n languages,\n specialties,\n experienceYears,\n rating,\n isPreviouslyConsulted = false,\n } = astrologer;\n\n const symbol = currencySymbol ?? getAstrologerPriceSymbol(pricing?.currencyCode);\n\n // Every one of these is a documented fallback for a field the API may not\n // send: no rating pill, no experience line, no languages line, no tag row.\n const showRating = typeof rating === 'number' && rating > 0;\n const showExperience = typeof experienceYears === 'number' && experienceYears > 0;\n const languagesLabel = languages?.length ? languages.join(', ') : '';\n const tags = specialties?.filter(Boolean) ?? [];\n\n // A present-but-zero discount (or an mrp that just repeats the price) is not\n // a discount — showing \"0% Off\" or a strike-through at the same price reads\n // as a bug, not a deal.\n const hasMrp = pricing?.mrp != null && pricing.mrp > pricing.price;\n const hasDiscountPercent =\n pricing?.discountPercent != null && pricing.discountPercent > 0;\n\n const content = (\n <>\n <div className={styles.topSection}>\n <div className={styles.photoWrap}>\n {photoUrl ? (\n <img className={styles.photo} src={photoUrl} alt={name} loading=\"lazy\" />\n ) : (\n <div className={styles.photoFallback} aria-hidden=\"true\">\n {name?.trim().charAt(0).toUpperCase() || '?'}\n </div>\n )}\n\n {showRating && (\n <span className={styles.ratingBadge}>\n {formatRating(rating)}\n <StarIcon className={styles.ratingStar} />\n </span>\n )}\n </div>\n\n <div className={styles.details}>\n <div className={styles.identity}>\n <p className={styles.name}>{name}</p>\n\n {showExperience && (\n <p className={styles.experience}>\n {t?.('consultationYearsOfExperience', { count: experienceYears }) ??\n `${experienceYears}+ years of experience`}\n </p>\n )}\n\n {languagesLabel && <p className={styles.languages}>{languagesLabel}</p>}\n </div>\n\n {tags.length > 0 && (\n <div className={styles.tagsRow}>\n {tags.map((tag) => (\n <span key={tag} className={styles.tag}>\n {tag}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <hr className={styles.divider} />\n\n <div className={styles.bottomSection}>\n {pricing && (\n <div className={styles.priceArea}>\n {(hasMrp || hasDiscountPercent) && (\n <div className={styles.discountRow}>\n {hasMrp && (\n <span className={styles.mrp}>\n {symbol}\n {pricing.mrp}\n </span>\n )}\n {hasDiscountPercent && (\n <span className={styles.discount}>\n {t?.('consultationPercentOff', { percent: pricing.discountPercent }) ??\n `${pricing.discountPercent}% Off`}\n </span>\n )}\n </div>\n )}\n <span className={styles.price}>\n {symbol}\n {pricing.price}\n </span>\n </div>\n )}\n\n <div className={styles.actionArea}>\n <button\n type=\"button\"\n className={styles.ctaBtn}\n disabled={disabled}\n onClick={() => onSelectSlot?.(astrologer)}\n >\n {ctaLabel ?? t?.('consultationSelectSlot') ?? 'Select Slot'}\n </button>\n </div>\n </div>\n </>\n );\n\n // The rose plate exists only to show the ribbon under the card, so in the\n // common case the card itself is the root and hosts get no extra wrapper.\n if (!isPreviouslyConsulted) {\n return (\n <div ref={innerRef} className={cx(styles.card, className)}>\n {content}\n </div>\n );\n }\n\n return (\n <div ref={innerRef} className={cx(styles.plate, className)}>\n <div className={styles.card}>{content}</div>\n <div className={styles.ribbon}>\n {t?.('consultationPreviouslyConsulted') ?? 'Previously Consulted'}\n </div>\n </div>\n );\n};\n","import React from 'react';\n\n/** Clock-with-cancel-mark glyph in the notice's white badge (Figma 783:23265). */\nexport const ClockUnavailableIcon: React.FC = () => (\n <svg width=\"19.208\" height=\"19.208\" viewBox=\"0 0 19.208 19.208\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M6.28262 12.9254L4.12172 15.0863\" stroke=\"#D93640\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M4.12172 12.9254L6.28262 15.0863\" stroke=\"#D93640\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <circle cx=\"5.20217\" cy=\"14.0058\" r=\"3.6015\" stroke=\"#D93640\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path\n d=\"M10.4043 16.0067C9.7169 16.0056 9.03316 15.9061 8.37389 15.7113\"\n stroke=\"#D93640\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.4043 16.0067C13.514 16.0125 16.2777 14.0258 17.2629 11.0763C18.248 8.12679 17.233 4.87791 14.744 3.01382C12.255 1.14973 8.85175 1.08966 6.2985 2.86476C3.74525 4.63986 2.61622 7.85089 3.49666 10.8333\"\n stroke=\"#D93640\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M13.5184 9.1166H10.0042V4.802\" stroke=\"#D93640\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n","/**\n * SlotUnavailableNotice — inline error banner shown when a booking attempt\n * loses a race (someone else took the slot first) (Figma 783:23257).\n */\nimport React from 'react';\nimport { ClockUnavailableIcon } from './icons';\nimport styles from './SlotUnavailableNotice.module.scss';\n\nexport interface SlotUnavailableNoticeProps {\n /** Message text. Wins over `t(\"consultationSlotUnavailable\")`. */\n message?: string;\n /** Translation lookup; every string falls back to the design's Hindi default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n}\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport const SlotUnavailableNotice: React.FC<SlotUnavailableNoticeProps> = ({\n message,\n t,\n className = '',\n}) => (\n <div className={cx(styles.root, className)} role=\"alert\">\n <span className={styles.badge}>\n <ClockUnavailableIcon />\n </span>\n <p className={styles.message}>\n {message ??\n t?.('consultationSlotUnavailable') ??\n 'यह समय स्लॉट अब उपलब्ध नहीं है, कृपया कोई अन्य स्लॉट चुनें'}\n </p>\n </div>\n);\n","import React from 'react';\n\n/** Green check-circle beside \"Included in your package\". */\nexport const IncludedCheckIcon: React.FC = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 13 13\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M6.5 0C10.0901 0 13 2.90986 13 6.5C13 10.0901 10.0901 13 6.5 13C2.90986 13 0 10.0901 0 6.5C0 2.90986 2.90986 0 6.5 0ZM10.21 4.1709C10.0284 3.96331 9.71281 3.94187 9.50488 4.12305L5.25 7.83594L3.49609 6.30469C3.28809 6.12318 2.97163 6.14562 2.79004 6.35352C2.60887 6.56152 2.63011 6.87711 2.83789 7.05859L4.92188 8.87695C5.11019 9.04088 5.39091 9.0411 5.5791 8.87695L10.1621 4.87695C10.3699 4.6954 10.3913 4.37889 10.21 4.1709Z\"\n fill=\"#159169\"\n />\n </svg>\n);\n\n/** Filled star beside the astrologer's rating. */\nexport const StarIcon: React.FC = () => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 9.38 8.94\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M9.28094 3.71918L7.22537 5.72294L7.7108 8.55302C7.73192 8.67677 7.6811 8.80184 7.57946 8.87576C7.52204 8.91767 7.45373 8.93879 7.38542 8.93879C7.33295 8.93879 7.28015 8.92625 7.23197 8.90084L4.69031 7.56467L2.14898 8.90051C2.0381 8.95925 1.90313 8.94968 1.80149 8.87543C1.69985 8.80151 1.64903 8.67644 1.67015 8.55269L2.15558 5.72261L0.0996759 3.71918C0.00991586 3.6314 -0.0227541 3.50006 0.0161859 3.38093C0.0551259 3.2618 0.158416 3.17435 0.282826 3.1562L3.1238 2.7437L4.3943 0.169042C4.50551 -0.0563475 4.87511 -0.0563475 4.98632 0.169042L6.25682 2.7437L9.09779 3.1562C9.2222 3.17435 9.32549 3.26147 9.36443 3.38093C9.40337 3.50039 9.3707 3.63107 9.28094 3.71918Z\"\n fill=\"#FFC627\"\n />\n </svg>\n);\n\n/** Blue verified-check badge overlapping the astrologer's photo. */\nexport const VerifiedBadgeIcon: React.FC = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 23.9 23.9\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"11.6667\" cy=\"11.6667\" r=\"5.83333\" fill=\"white\" />\n <path\n d=\"M21.1605 13.933C21.4969 13.7095 21.7815 13.4167 21.9953 13.0741C22.2091 12.7315 22.3471 12.3472 22.4 11.9468C22.3471 11.5465 22.2091 11.1621 21.9953 10.8196C21.7815 10.477 21.4969 10.1841 21.1605 9.9607C20.8921 9.73966 20.6602 9.47759 20.4736 9.18417C20.4343 8.81253 20.4699 8.43679 20.5781 8.0791C20.7089 7.70675 20.7605 7.31122 20.7296 6.91779C20.6988 6.52437 20.5861 6.14171 20.3989 5.7943C20.1225 5.50969 19.79 5.2857 19.4223 5.13659C19.0547 4.98747 18.66 4.9165 18.2635 4.92817C17.905 4.91214 17.5517 4.83644 17.2181 4.70417C16.9832 4.43149 16.8009 4.11755 16.6805 3.7783C16.5688 3.3924 16.3767 3.03453 16.1167 2.72824C15.8568 2.42195 15.5349 2.17418 15.1723 2.00123C14.7891 1.93273 14.3959 1.94517 14.0178 2.03776C13.6397 2.13035 13.2852 2.30103 12.9771 2.53883C12.6647 2.75141 12.3152 2.90338 11.9467 2.98683C11.5782 2.90338 11.2286 2.75141 10.9163 2.53883C10.6085 2.30026 10.2541 2.12911 9.87586 2.03649C9.49767 1.94387 9.10421 1.93186 8.72107 2.00123C8.35846 2.17418 8.03659 2.42195 7.77662 2.72824C7.51666 3.03453 7.32451 3.3924 7.2128 3.7783C7.09247 4.11755 6.91018 4.43149 6.6752 4.70417C6.34164 4.83644 5.98834 4.91214 5.62987 4.92817C5.23331 4.9165 4.83866 4.98747 4.47102 5.13659C4.10338 5.2857 3.77079 5.50969 3.4944 5.7943C3.30721 6.14171 3.19458 6.52437 3.16372 6.91779C3.13287 7.31122 3.18446 7.70675 3.3152 8.0791C3.42345 8.43679 3.459 8.81253 3.41973 9.18417C3.2331 9.47759 3.00126 9.73966 2.7328 9.9607C2.39644 10.1841 2.11181 10.477 1.89802 10.8196C1.68424 11.1621 1.54625 11.5465 1.49333 11.9468C1.54625 12.3472 1.68424 12.7315 1.89802 13.0741C2.11181 13.4167 2.39644 13.7095 2.7328 13.933C3.00126 14.154 3.2331 14.4161 3.41973 14.7095C3.459 15.0811 3.42345 15.4569 3.3152 15.8146C3.18446 16.1869 3.13287 16.5824 3.16372 16.9759C3.19458 17.3693 3.30721 17.752 3.4944 18.0994C3.77079 18.384 4.10338 18.608 4.47102 18.7571C4.83866 18.9062 5.23331 18.9772 5.62987 18.9655C5.98834 18.9815 6.34164 19.0572 6.6752 19.1895C6.91018 19.4622 7.09247 19.7761 7.2128 20.1154C7.32451 20.5013 7.51666 20.8591 7.77662 21.1654C8.03659 21.4717 8.35846 21.7195 8.72107 21.8924C9.10423 21.9609 9.49749 21.9485 9.87555 21.8559C10.2536 21.7633 10.6081 21.5926 10.9163 21.3548C11.2286 21.1423 11.5782 20.9903 11.9467 20.9068C12.3152 20.9903 12.6647 21.1423 12.9771 21.3548C13.4867 21.6934 14.0709 21.9035 14.6795 21.9671C14.8469 21.9716 15.0137 21.9463 15.1723 21.8924C15.5349 21.7195 15.8568 21.4717 16.1167 21.1654C16.3767 20.8591 16.5688 20.5013 16.6805 20.1154C16.8009 19.7761 16.9832 19.4622 17.2181 19.1895C17.5517 19.0572 17.905 18.9815 18.2635 18.9655C18.66 18.9772 19.0547 18.9062 19.4223 18.7571C19.79 18.608 20.1225 18.384 20.3989 18.0994C20.5861 17.752 20.6988 17.3693 20.7296 16.9759C20.7605 16.5824 20.7089 16.1869 20.5781 15.8146C20.4699 15.4569 20.4343 15.0811 20.4736 14.7095C20.6602 14.4161 20.8921 14.154 21.1605 13.933ZM15.456 10.4834L11.4837 14.4706C11.3399 14.6049 11.1504 14.6797 10.9536 14.6797C10.7568 14.6797 10.5673 14.6049 10.4235 14.4706L8.43734 12.4695C8.30102 12.3304 8.22511 12.1431 8.22609 11.9484C8.22707 11.7536 8.30488 11.5671 8.44259 11.4294C8.5803 11.2917 8.7668 11.2139 8.96155 11.2129C9.1563 11.2119 9.34357 11.2879 9.48267 11.4242L10.9461 12.8876L14.4107 9.4231C14.5504 9.28668 14.738 9.21031 14.9333 9.21031C15.1287 9.21031 15.3162 9.28668 15.456 9.4231C15.5269 9.492 15.5832 9.57442 15.6217 9.66548C15.6602 9.75653 15.68 9.85438 15.68 9.95323C15.68 10.0521 15.6602 10.1499 15.6217 10.241C15.5832 10.332 15.5269 10.4145 15.456 10.4834Z\"\n fill=\"#1A6EE5\"\n />\n </svg>\n);\n\n/** Trailing arrow on the \"Schedule your call\" CTA. */\nexport const ArrowRightIcon: React.FC = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M3.75 9H14.25M14.25 9L9.75 4.5M14.25 9L9.75 13.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n","/**\n * The horizontally-scrollable astrologer card row — shared by\n * `UnscheduledAstrologerList` (which wraps it in its own header/tag/footer)\n * and `ConsultationSlotSheet`'s `astrologers` picker (rendered bare, no\n * chrome, for hosts where astrologer selection happens inside the sheet).\n */\nimport React from 'react';\nimport { RecommendedRibbon } from '@srimandir/astrology-common';\nimport { StarIcon, VerifiedBadgeIcon } from './icons';\nimport type { UnscheduledAstrologerListAstrologer } from './types';\nimport styles from './UnscheduledAstrologerList.module.scss';\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport interface AstrologerPickerRowProps {\n astrologers: UnscheduledAstrologerListAstrologer[];\n selectedAstrologerId?: string;\n onSelectAstrologer?: (astrologer: UnscheduledAstrologerListAstrologer) => void;\n /** Accessible name for the radiogroup. */\n ariaLabel?: string;\n className?: string;\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n}\n\nexport const AstrologerPickerRow: React.FC<AstrologerPickerRowProps> = ({\n astrologers,\n selectedAstrologerId,\n onSelectAstrologer,\n ariaLabel,\n className,\n t,\n}) => (\n <div\n className={cx(styles.scrollRow, className)}\n role=\"radiogroup\"\n aria-label={\n ariaLabel ?? t?.('consultationScheduleCallTitle') ?? 'Schedule your astrology call'\n }\n >\n {astrologers.map((astrologer) => {\n const isSelected = astrologer.id === selectedAstrologerId;\n const languagesLabel = astrologer.languages?.length ? astrologer.languages.join(', ') : '';\n const showRating = typeof astrologer.rating === 'number' && astrologer.rating > 0;\n const showExperience = typeof astrologer.experienceYears === 'number';\n\n return (\n <button\n key={astrologer.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n className={cx(styles.astrologerCard, isSelected && styles.astrologerCardSelected)}\n onClick={() => onSelectAstrologer?.(astrologer)}\n >\n {astrologer.isRecommended && (\n <RecommendedRibbon\n className={styles.recommendedRibbonPlacement}\n label={t?.('consultationRecommended') ?? 'Recommended'}\n />\n )}\n\n <span className={styles.avatar}>\n <span className={styles.avatarInner}>\n <span className={styles.avatarFill} />\n {astrologer.photoUrl && (\n <img className={styles.photo} src={astrologer.photoUrl} alt={astrologer.name} />\n )}\n </span>\n <span className={styles.verifiedBadge}>\n <VerifiedBadgeIcon />\n </span>\n </span>\n\n <span className={styles.meta}>\n <p className={styles.name}>{astrologer.name}</p>\n {(showRating || showExperience) && (\n <span className={styles.subRow}>\n {showRating && (\n <span className={styles.rating}>\n {astrologer.rating!.toFixed(1)}\n <StarIcon />\n </span>\n )}\n {showRating && showExperience && <span className={styles.dot} />}\n {showExperience && (\n <span className={styles.experience}>\n {t?.('consultationYearsExperience', { count: astrologer.experienceYears }) ??\n `${astrologer.experienceYears} years of experience`}\n </span>\n )}\n </span>\n )}\n {languagesLabel && <p className={styles.languages}>{languagesLabel}</p>}\n </span>\n </button>\n );\n })}\n </div>\n);\n","import React from 'react';\n\n/** Filled star beside the chosen astrologer's rating (matches ConsultationDetailsCard). */\nexport const StarIcon: React.FC = () => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 9.38 8.94\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M9.28094 3.71918L7.22537 5.72294L7.7108 8.55302C7.73192 8.67677 7.6811 8.80184 7.57946 8.87576C7.52204 8.91767 7.45373 8.93879 7.38542 8.93879C7.33295 8.93879 7.28015 8.92625 7.23197 8.90084L4.69031 7.56467L2.14898 8.90051C2.0381 8.95925 1.90313 8.94968 1.80149 8.87543C1.69985 8.80151 1.64903 8.67644 1.67015 8.55269L2.15558 5.72261L0.0996759 3.71918C0.00991586 3.6314 -0.0227541 3.50006 0.0161859 3.38093C0.0551259 3.2618 0.158416 3.17435 0.282826 3.1562L3.1238 2.7437L4.3943 0.169042C4.50551 -0.0563475 4.87511 -0.0563475 4.98632 0.169042L6.25682 2.7437L9.09779 3.1562C9.2222 3.17435 9.32549 3.26147 9.36443 3.38093C9.40337 3.50039 9.3707 3.63107 9.28094 3.71918Z\"\n fill=\"#FFC627\"\n />\n </svg>\n);\n\n/** Blue verified-check badge overlapping the chosen astrologer's photo (matches ConsultationDetailsCard). */\nexport const VerifiedBadgeIcon: React.FC = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 23.9 23.9\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"11.6667\" cy=\"11.6667\" r=\"5.83333\" fill=\"white\" />\n <path\n d=\"M21.1605 13.933C21.4969 13.7095 21.7815 13.4167 21.9953 13.0741C22.2091 12.7315 22.3471 12.3472 22.4 11.9468C22.3471 11.5465 22.2091 11.1621 21.9953 10.8196C21.7815 10.477 21.4969 10.1841 21.1605 9.9607C20.8921 9.73966 20.6602 9.47759 20.4736 9.18417C20.4343 8.81253 20.4699 8.43679 20.5781 8.0791C20.7089 7.70675 20.7605 7.31122 20.7296 6.91779C20.6988 6.52437 20.5861 6.14171 20.3989 5.7943C20.1225 5.50969 19.79 5.2857 19.4223 5.13659C19.0547 4.98747 18.66 4.9165 18.2635 4.92817C17.905 4.91214 17.5517 4.83644 17.2181 4.70417C16.9832 4.43149 16.8009 4.11755 16.6805 3.7783C16.5688 3.3924 16.3767 3.03453 16.1167 2.72824C15.8568 2.42195 15.5349 2.17418 15.1723 2.00123C14.7891 1.93273 14.3959 1.94517 14.0178 2.03776C13.6397 2.13035 13.2852 2.30103 12.9771 2.53883C12.6647 2.75141 12.3152 2.90338 11.9467 2.98683C11.5782 2.90338 11.2286 2.75141 10.9163 2.53883C10.6085 2.30026 10.2541 2.12911 9.87586 2.03649C9.49767 1.94387 9.10421 1.93186 8.72107 2.00123C8.35846 2.17418 8.03659 2.42195 7.77662 2.72824C7.51666 3.03453 7.32451 3.3924 7.2128 3.7783C7.09247 4.11755 6.91018 4.43149 6.6752 4.70417C6.34164 4.83644 5.98834 4.91214 5.62987 4.92817C5.23331 4.9165 4.83866 4.98747 4.47102 5.13659C4.10338 5.2857 3.77079 5.50969 3.4944 5.7943C3.30721 6.14171 3.19458 6.52437 3.16372 6.91779C3.13287 7.31122 3.18446 7.70675 3.3152 8.0791C3.42345 8.43679 3.459 8.81253 3.41973 9.18417C3.2331 9.47759 3.00126 9.73966 2.7328 9.9607C2.39644 10.1841 2.11181 10.477 1.89802 10.8196C1.68424 11.1621 1.54625 11.5465 1.49333 11.9468C1.54625 12.3472 1.68424 12.7315 1.89802 13.0741C2.11181 13.4167 2.39644 13.7095 2.7328 13.933C3.00126 14.154 3.2331 14.4161 3.41973 14.7095C3.459 15.0811 3.42345 15.4569 3.3152 15.8146C3.18446 16.1869 3.13287 16.5824 3.16372 16.9759C3.19458 17.3693 3.30721 17.752 3.4944 18.0994C3.77079 18.384 4.10338 18.608 4.47102 18.7571C4.83866 18.9062 5.23331 18.9772 5.62987 18.9655C5.98834 18.9815 6.34164 19.0572 6.6752 19.1895C6.91018 19.4622 7.09247 19.7761 7.2128 20.1154C7.32451 20.5013 7.51666 20.8591 7.77662 21.1654C8.03659 21.4717 8.35846 21.7195 8.72107 21.8924C9.10423 21.9609 9.49749 21.9485 9.87555 21.8559C10.2536 21.7633 10.6081 21.5926 10.9163 21.3548C11.2286 21.1423 11.5782 20.9903 11.9467 20.9068C12.3152 20.9903 12.6647 21.1423 12.9771 21.3548C13.4867 21.6934 14.0709 21.9035 14.6795 21.9671C14.8469 21.9716 15.0137 21.9463 15.1723 21.8924C15.5349 21.7195 15.8568 21.4717 16.1167 21.1654C16.3767 20.8591 16.5688 20.5013 16.6805 20.1154C16.8009 19.7761 16.9832 19.4622 17.2181 19.1895C17.5517 19.0572 17.905 18.9815 18.2635 18.9655C18.66 18.9772 19.0547 18.9062 19.4223 18.7571C19.79 18.608 20.1225 18.384 20.3989 18.0994C20.5861 17.752 20.6988 17.3693 20.7296 16.9759C20.7605 16.5824 20.7089 16.1869 20.5781 15.8146C20.4699 15.4569 20.4343 15.0811 20.4736 14.7095C20.6602 14.4161 20.8921 14.154 21.1605 13.933ZM15.456 10.4834L11.4837 14.4706C11.3399 14.6049 11.1504 14.6797 10.9536 14.6797C10.7568 14.6797 10.5673 14.6049 10.4235 14.4706L8.43734 12.4695C8.30102 12.3304 8.22511 12.1431 8.22609 11.9484C8.22707 11.7536 8.30488 11.5671 8.44259 11.4294C8.5803 11.2917 8.7668 11.2139 8.96155 11.2129C9.1563 11.2119 9.34357 11.2879 9.48267 11.4242L10.9461 12.8876L14.4107 9.4231C14.5504 9.28668 14.738 9.21031 14.9333 9.21031C15.1287 9.21031 15.3162 9.28668 15.456 9.4231C15.5269 9.492 15.5832 9.57442 15.6217 9.66548C15.6602 9.75653 15.68 9.85438 15.68 9.95323C15.68 10.0521 15.6602 10.1499 15.6217 10.241C15.5832 10.332 15.5269 10.4145 15.456 10.4834Z\"\n fill=\"#1A6EE5\"\n />\n </svg>\n);\n","/**\n * ConsultationSlotSheet — the consultation-specific contents of a bottom sheet.\n *\n * The chrome (overlay, sheet, slide-up, Escape/backdrop dismiss, scroll lock,\n * close button, header/body/footer split) comes from `@srimandir/common`'s\n * `BottomSheet`; the slot picker itself comes from `@srimandir/astrology-common`.\n * What is left here is only what makes this sheet the *consultation* sheet: the\n * top icon badge, the title, the astrologer section, the phone slot and the\n * footer CTA.\n *\n * The astrologer section supports two flows, matching the two stories:\n * - `astrologers` (+ `selectedAstrologerId`/`onAstrologerSelect`): selection\n * happens *inside* this sheet — renders `UnscheduledAstrologerList`'s own\n * card row (`AstrologerPickerRow`) bare, with no header/footer chrome, so\n * it looks identical to that row wherever else a host renders it. Wins\n * over `astrologer`.\n * - `astrologer` alone: the astrologer was already chosen by whatever\n * (card, inline picker) opened this sheet — shows a read-only summary row\n * instead, reusing the same avatar/verified-badge/rating treatment as\n * `ConsultationDetailsCard`.\n *\n * The phone-number block is a slot: hosts pass their own validated input via\n * `phoneNumberSection`, since country lists, flags and validation live in the\n * host app.\n */\nimport React from 'react';\nimport { BottomSheet } from '@srimandir/common';\nimport { ConsultationSlotSelector } from '@srimandir/astrology-common';\nimport type {\n ConsultationSlot,\n ConsultationSlotDay,\n ConsultationSlotPeriod,\n} from '@srimandir/astrology-common';\nimport { SlotUnavailableNotice } from '../SlotUnavailableNotice';\nimport type { ConsultationDetailsCardAstrologer } from '../ConsultationDetailsCard';\nimport { AstrologerPickerRow } from '../UnscheduledAstrologerList/AstrologerPickerRow';\nimport type { UnscheduledAstrologerListAstrologer } from '../UnscheduledAstrologerList/types';\nimport { StarIcon, VerifiedBadgeIcon } from './icons';\nimport styles from './ConsultationSlotSheet.module.scss';\n\nexport interface ConsultationSlotSheetProps {\n /** Modal mode only — ignored when `inline` is true. Defaults to `true`. */\n isOpen?: boolean;\n /** Modal mode only — ignored when `inline` is true. */\n onClose?: () => void;\n /** Modal mode only. Round close button in the sheet's top-right corner. */\n showCloseButton?: boolean;\n /**\n * Renders the header/body/footer directly in the page flow instead of\n * inside `@srimandir/common`'s `BottomSheet` — no overlay, backdrop, or\n * slide-up chrome. For hosts building a single-page inline booking flow\n * (astrologer list -> phone -> slot grid -> CTA) rather than a\n * \"pick astrologer, then open a sheet\" two-step flow.\n */\n inline?: boolean;\n /** Hides the title/badge header. Mainly useful with `inline`, where the\n * host's own page heading already introduces this section. */\n hideHeader?: boolean;\n\n /** Availability to render. Passed straight through to the selector. */\n days: ConsultationSlotDay[];\n loading?: boolean;\n error?: boolean;\n onRetry?: () => void;\n\n selectedDate?: string;\n onDateSelect?: (date: string) => void;\n selectedPeriod?: ConsultationSlotPeriod;\n onPeriodSelect?: (period: ConsultationSlotPeriod) => void;\n selectedSlotStart?: string | null;\n onSlotSelect?: (slot: ConsultationSlot) => void;\n\n /**\n * The astrologer this sheet is booking a call with. Shown as a summary row\n * (photo, name, rating, experience, languages) above the phone/slot picker.\n * Omit it and the sheet opens with no astrologer identity shown. Ignored\n * when `astrologers` is passed — that renders a picker instead.\n */\n astrologer?: ConsultationDetailsCardAstrologer;\n\n /**\n * Full selectable astrologer list, rendered inside the sheet above the\n * phone/slot picker — for hosts where astrologer selection happens inside\n * this sheet rather than on the host page before it opens. Wins over\n * `astrologer`, which only ever shows a single already-chosen summary row.\n * Reuses `UnscheduledAstrologerList`'s own card row (photo, verified badge,\n * rating, experience, \"Recommended\" ribbon) so the picker looks identical\n * whether it's rendered on the host page or inside this sheet.\n */\n astrologers?: UnscheduledAstrologerListAstrologer[];\n selectedAstrologerId?: string;\n onAstrologerSelect?: (astrologer: UnscheduledAstrologerListAstrologer) => void;\n\n /**\n * The host's phone-number input, rendered above the slot picker. Omit it and\n * the sheet shows the slot picker alone (e.g. when the number is already known).\n */\n phoneNumberSection?: React.ReactNode;\n\n /** Sheet title. Wins over `t(\"consultationSheetTitle\")`. */\n title?: string;\n /** Heading above the date strip. Wins over `t(\"consultationSelectTimeSlot\")`. */\n heading?: string;\n /** Image URL for the 64px badge straddling the sheet's top edge. */\n iconUrl?: string;\n /** Arbitrary node for that badge; wins over `iconUrl`. */\n icon?: React.ReactNode;\n\n /** Footer CTA label. Wins over `t(\"consultationScheduleCall\")`. */\n ctaLabel?: string;\n onCtaClick?: () => void;\n /** Greys out the CTA — e.g. nothing selected yet, or a booking in flight. */\n ctaDisabled?: boolean;\n /** Swaps the CTA label for a busy label while a booking is in flight. */\n isProcessing?: boolean;\n /** Shown under the CTA in red, e.g. a failed booking attempt. */\n errorMessage?: string | null;\n\n /** International build — labels the evening tab \"Evening/Night\". */\n isGlobal?: boolean;\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n}\n\nexport const ConsultationSlotSheet: React.FC<ConsultationSlotSheetProps> = ({\n isOpen = true,\n onClose = () => {},\n showCloseButton = true,\n inline = false,\n hideHeader = false,\n days,\n loading = false,\n error = false,\n onRetry,\n selectedDate,\n onDateSelect,\n selectedPeriod,\n onPeriodSelect,\n selectedSlotStart,\n onSlotSelect,\n astrologer,\n astrologers,\n selectedAstrologerId,\n onAstrologerSelect,\n phoneNumberSection,\n title,\n heading,\n iconUrl,\n icon,\n ctaLabel,\n onCtaClick,\n ctaDisabled = false,\n isProcessing = false,\n errorMessage,\n isGlobal = true,\n t,\n className = '',\n}) => {\n const badge = icon ?? (iconUrl ? <img src={iconUrl} alt=\"\" /> : null);\n const sheetTitle = title ?? t?.('consultationSheetTitle') ?? 'Schedule your astrology consultation';\n\n const languagesLabel = astrologer?.languages?.length\n ? astrologer.languages.join(', ')\n : '';\n const showRating = typeof astrologer?.rating === 'number' && astrologer.rating > 0;\n const showExperience = typeof astrologer?.experienceYears === 'number';\n\n const headerContent = !hideHeader && (\n <>\n {badge && <div className={styles.iconBadge}>{badge}</div>}\n <div\n className={[styles.header, !badge && styles.headerNoIcon]\n .filter(Boolean)\n .join(' ')}\n >\n <p className={styles.title}>{sheetTitle}</p>\n </div>\n <hr className={styles.headerDivider} />\n </>\n );\n\n const footerContent = (\n <div className={styles.footerInner}>\n {errorMessage && (\n <SlotUnavailableNotice\n message={errorMessage}\n t={t}\n className={styles.errorNotice}\n />\n )}\n\n <button\n type=\"button\"\n className={styles.ctaBtn}\n disabled={ctaDisabled || isProcessing}\n onClick={onCtaClick}\n >\n {isProcessing\n ? (t?.('consultationScheduling') ?? 'Scheduling…')\n : (ctaLabel ?? t?.('consultationScheduleCall') ?? 'Schedule call')}\n </button>\n </div>\n );\n\n const bodyContent = (\n <div className={styles.bodyInner}>\n {astrologers?.length ? (\n <>\n <p className={styles.astrologerSectionLabel}>\n {t?.('consultationChooseAstrologer') ?? 'Choose astrologer'}\n </p>\n <AstrologerPickerRow\n astrologers={astrologers}\n selectedAstrologerId={selectedAstrologerId}\n onSelectAstrologer={onAstrologerSelect}\n t={t}\n />\n </>\n ) : (\n astrologer && (\n <div className={styles.astrologerRow}>\n <div className={styles.avatar}>\n <div className={styles.avatarInner}>\n <div className={styles.avatarFill} />\n {astrologer.photoUrl ? (\n <img\n className={styles.photo}\n src={astrologer.photoUrl}\n alt={astrologer.name}\n />\n ) : (\n <div className={styles.photoFallback} aria-hidden=\"true\">\n {astrologer.name?.trim().charAt(0).toUpperCase() || '?'}\n </div>\n )}\n </div>\n <span className={styles.verifiedBadge}>\n <VerifiedBadgeIcon />\n </span>\n </div>\n\n <div className={styles.astrologerMeta}>\n <p className={styles.astrologerName}>{astrologer.name}</p>\n {(showRating || showExperience || languagesLabel) && (\n <div className={styles.astrologerSubRow}>\n {showRating && (\n <span className={styles.rating}>\n {astrologer.rating!.toFixed(1)}\n <StarIcon />\n </span>\n )}\n {showRating && showExperience && <span className={styles.metaDot} />}\n {showExperience && (\n <span className={styles.experience}>\n {t?.('consultationYearsExperience', { count: astrologer.experienceYears }) ??\n `${astrologer.experienceYears} years of experience`}\n </span>\n )}\n </div>\n )}\n {languagesLabel && <p className={styles.languages}>{languagesLabel}</p>}\n </div>\n </div>\n )\n )}\n\n {phoneNumberSection && (\n <div className={styles.phoneSection}>{phoneNumberSection}</div>\n )}\n\n <ConsultationSlotSelector\n days={days}\n loading={loading}\n error={error}\n onRetry={onRetry}\n selectedDate={selectedDate}\n onDateSelect={onDateSelect}\n selectedPeriod={selectedPeriod}\n onPeriodSelect={onPeriodSelect}\n selectedSlotStart={selectedSlotStart}\n onSlotSelect={onSlotSelect}\n heading={heading ?? t?.('consultationSelectTimeSlot') ?? 'Select a time slot.'}\n /* The card that opened the sheet already fixed the astrologer, and\n the language filter lives on the landing screen above the list. */\n showAstrologyProfilesSection={false}\n hideLanguageSelector\n /* The phone block is injected above, so the selector's own\n placeholder must stay off. */\n showPhoneNumberSection={false}\n /* No kundli report in this flow — the \"report ready in 24-48 hours\"\n banner would be untrue here. */\n reportReadyNote={null}\n isGlobal={isGlobal}\n t={t}\n />\n </div>\n );\n\n if (inline) {\n return (\n <div className={[styles.inlineRoot, className].filter(Boolean).join(' ')}>\n {headerContent}\n {bodyContent}\n {footerContent}\n </div>\n );\n }\n\n return (\n <BottomSheet\n isOpen={isOpen}\n onClose={onClose}\n showCloseButton={showCloseButton}\n ariaLabel={sheetTitle}\n className={className}\n header={headerContent}\n footer={footerContent}\n >\n {bodyContent}\n </BottomSheet>\n );\n};\n","import type { ConsultationDictionary } from './types';\n\n/** English — the fallback every other locale degrades to. */\nconst en: ConsultationDictionary = {\n /* AstrologerCard */\n consultationSelectSlot: 'Select Slot',\n consultationYearsOfExperience: '{count}+ years of experience',\n consultationPercentOff: '{percent}% Off',\n consultationPreviouslyConsulted: 'Previously Consulted',\n\n /* ConsultationSlotSheet */\n consultationSheetTitle: 'Schedule your astrology consultation',\n consultationSelectTimeSlot: 'Select a time slot.',\n consultationScheduleCall: 'Schedule call',\n consultationScheduling: 'Scheduling…',\n\n /* ConsultationSlotSelector */\n planPeriodMorning: 'Morning',\n planPeriodAfternoon: 'Afternoon',\n planPeriodEvening: 'Evening',\n planPeriodEveningNight: 'Evening/Night',\n planSlotsLoadError: \"Couldn't load slots. Please try again.\",\n planRetry: 'Retry',\n planNoSlotsAvailableTitle: 'No slots available',\n planNoSlotsAvailableSubtitle:\n 'Try a different consultation language above, or check back soon.',\n /*\n * Weekday abbreviations are deliberately English-only: the other locales omit\n * them and fall through to these. They sit in narrow day chips beside the\n * date, where the three-letter Latin forms are what the design uses and what\n * reads cleanest across scripts. Add them to a locale file to override.\n *\n * `Today` and `Tomorrow` are absent on purpose — the slot picker asks for\n * them for the first two chips, and `createConsultationTranslate` answers\n * with the weekday instead, so every chip reads the same way.\n */\n Sun: 'Sun',\n Mon: 'Mon',\n Tue: 'Tue',\n Wed: 'Wed',\n Thu: 'Thu',\n Fri: 'Fri',\n Sat: 'Sat',\n\n /* PaymentResult */\n back: 'Back',\n bookingConfirmationTitle: 'Booking Confirmation',\n paymentSuccessful: 'Payment Successful 🎉',\n paid: 'Paid',\n booking: 'Booking',\n joinCall: 'Join Call',\n consultationSlotBookedTitle: 'Consultation Slot Booked!',\n consultationSlotBookedSubtitle:\n 'Your 20 minutes call with our Certified Vedic Astrologer is booked',\n consultationSlotFailedTitle: 'Consultation Slot Failed!',\n consultationSlotFailedSubtitle:\n 'We ran into some problem while booking your slot. Please schedule your slot again',\n consultationBookSlotAgain: 'Book slot again →',\n consultationWhatsappUpdate: 'All updates will be sent to your WhatsApp',\n};\n\nexport default en;\n","import type { ConsultationDictionary } from './types';\n\n/** Hindi (hi). */\nconst hi: ConsultationDictionary = {\n consultationSelectSlot: 'स्लॉट चुनें',\n consultationYearsOfExperience: '{count}+ वर्षों का अनुभव',\n consultationPercentOff: '{percent}% छूट',\n consultationPreviouslyConsulted: 'पहले परामर्श लिया',\n\n consultationSheetTitle: 'अपनी ज्योतिष परामर्श की नियुक्ति करें',\n consultationSelectTimeSlot: 'एक समय स्लॉट चुनें।',\n consultationScheduleCall: 'एक कॉल शेड्यूल करें',\n consultationScheduling: 'शेड्यूल हो रहा है…',\n\n planPeriodMorning: 'सुबह',\n planPeriodAfternoon: 'दोपहर',\n planPeriodEvening: 'शाम',\n planPeriodEveningNight: 'शाम/रात',\n planSlotsLoadError: 'स्लॉट लोड नहीं हो सके। कृपया पुनः प्रयास करें।',\n planRetry: 'पुनः प्रयास करें',\n planNoSlotsAvailableTitle: 'कोई स्लॉट उपलब्ध नहीं',\n planNoSlotsAvailableSubtitle:\n 'ऊपर कोई दूसरी परामर्श भाषा चुनें, या थोड़ी देर बाद देखें।',\n\n back: 'वापस',\n bookingConfirmationTitle: 'बुकिंग पुष्टि',\n paymentSuccessful: 'भुगतान सफल 🎉',\n paid: 'भुगतान किया गया',\n booking: 'बुकिंग',\n joinCall: 'कॉल में शामिल हों',\n consultationSlotBookedTitle: 'परामर्श स्लॉट बुक किया गया!',\n consultationSlotBookedSubtitle:\n 'आपका 20 मिनट का कॉल हमारे प्रमाणित वेदिक ज्योतिषी के साथ बुक किया गया है',\n consultationSlotFailedTitle: 'परामर्श स्लॉट विफल!',\n consultationSlotFailedSubtitle:\n 'आपका स्लॉट बुक करते समय कुछ समस्या हुई। कृपया अपना स्लॉट दोबारा शेड्यूल करें',\n consultationBookSlotAgain: 'फिर से स्लॉट बुक करें →',\n consultationWhatsappUpdate: 'सभी अपडेट आपके व्हाट्सएप पर भेजे जाएंगे',\n};\n\nexport default hi;\n","import type { ConsultationDictionary } from './types';\n\n/** Kannada (kn). */\nconst kn: ConsultationDictionary = {\n consultationSelectSlot: 'ಸ್ಲಾಟ್ ಆಯ್ಕೆಮಾಡಿ',\n consultationYearsOfExperience: '{count}+ ವರ್ಷಗಳ ಅನುಭವ',\n consultationPercentOff: '{percent}% ರಿಯಾಯಿತಿ',\n consultationPreviouslyConsulted: 'ಈ ಹಿಂದೆ ಸಂಪರ್ಕಿಸಿದ್ದೀರಿ',\n\n consultationSheetTitle: 'ನಿಮ್ಮ ಜ್ಯೋತಿಷ್ಯ ಕನ್ಸಲ್ಟೇಶನ್ ಶೆಡ್ಯೂಲ್ ಮಾಡಿ',\n consultationSelectTimeSlot: '20 ನಿಮಿಷಗಳ ಸಮಯದ ಸ್ಲಾಟ್ ಆಯ್ಕೆಮಾಡಿ',\n consultationScheduleCall: 'ಕರೆ ಶೆಡ್ಯೂಲ್ ಮಾಡಿ',\n consultationScheduling: 'ಶೆಡ್ಯೂಲ್ ಆಗುತ್ತಿದೆ…',\n\n planPeriodMorning: 'ಬೆಳಿಗ್ಗೆ',\n planPeriodAfternoon: 'ಮಧ್ಯಾಹ್ನ',\n planPeriodEvening: 'ಸಂಜೆ',\n planPeriodEveningNight: 'ಸಂಜೆ/ರಾತ್ರಿ',\n planSlotsLoadError: 'ಸ್ಲಾಟ್ಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.',\n planRetry: 'ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ',\n planNoSlotsAvailableTitle: 'ಯಾವುದೇ ಸ್ಲಾಟ್ ಲಭ್ಯವಿಲ್ಲ',\n planNoSlotsAvailableSubtitle:\n 'ಮೇಲೆ ಬೇರೆ ಕನ್ಸಲ್ಟೇಶನ್ ಭಾಷೆಯನ್ನು ಆರಿಸಿ, ಅಥವಾ ಸ್ವಲ್ಪ ಸಮಯದ ನಂತರ ನೋಡಿ.',\n\n back: 'ಹಿಂದೆ',\n bookingConfirmationTitle: 'ಬುಕಿಂಗ್ ಖಚಿತವಾಗಿದೆ',\n paymentSuccessful: 'ಪಾವತಿ ಪೂರ್ಣಗೊಂಡಿದೆ 🎉',\n paid: 'ಪಾವತಿಸಲಾಗಿದೆ',\n booking: 'ಬುಕಿಂಗ್',\n joinCall: 'ಕರೆಯಲ್ಲಿ ಜಾಯಿನ್ ಆಗಿ',\n consultationSlotBookedTitle: 'ನಿಮ್ಮ ಕನ್ಸಲ್ಟೇಶನ್ ಬುಕ್ ಆಗಿದೆ!',\n consultationSlotBookedSubtitle:\n 'ಸರ್ಟಿಫೈಡ್ ವೇದ ಜ್ಯೋತಿಷಿಯೊಂದಿಗೆ ನಿಮ್ಮ 20 ನಿಮಿಷಗಳ ಕರೆ ಬುಕ್ ಆಗಿದೆ',\n consultationSlotFailedTitle: 'ಕನ್ಸಲ್ಟೇಶನ್ ಸ್ಲಾಟ್ ವಿಫಲವಾಗಿದೆ!',\n consultationSlotFailedSubtitle:\n 'ನಿಮ್ಮ ಸ್ಲಾಟ್ ಬುಕ್ ಮಾಡುವಾಗ ಸಮಸ್ಯೆ ಉಂಟಾಯಿತು. ದಯವಿಟ್ಟು ನಿಮ್ಮ ಸ್ಲಾಟ್ ಅನ್ನು ಮತ್ತೆ ಶೆಡ್ಯೂಲ್ ಮಾಡಿ',\n consultationBookSlotAgain: 'ಮತ್ತೆ ಸ್ಲಾಟ್ ಬುಕ್ ಮಾಡಿ →',\n consultationWhatsappUpdate:\n 'ಎಲ್ಲಾ ಅಪ್ಡೇಟ್ಗಳನ್ನು ನಿಮ್ಮ ವಾಟ್ಸಾಪ್ಗೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ',\n};\n\nexport default kn;\n","import type { ConsultationDictionary } from './types';\n\n/** Telugu (te). */\nconst te: ConsultationDictionary = {\n consultationSelectSlot: 'స్లాట్ ఎంపిక చేసుకోండి',\n consultationYearsOfExperience: '{count}+ సంవత్సరాల అనుభవం',\n consultationPercentOff: '{percent}% తగ్గింపు',\n consultationPreviouslyConsulted: 'గతంలో సంప్రదించారు',\n\n consultationSheetTitle: 'మీ జ్యోతిష్య కన్సల్టేషన్ షెడ్యూల్ చేసుకోండి',\n consultationSelectTimeSlot: '20 నిమిషాల టైమ్ స్లాట్ ఎంచుకోండి',\n consultationScheduleCall: 'కాల్ షెడ్యూల్ చేయండి',\n consultationScheduling: 'షెడ్యూల్ అవుతోంది…',\n\n planPeriodMorning: 'ఉదయం',\n planPeriodAfternoon: 'మధ్యాహ్నం',\n planPeriodEvening: 'సాయంత్రం',\n planPeriodEveningNight: 'సాయంత్రం/రాత్రి',\n planSlotsLoadError: 'స్లాట్లు లోడ్ కాలేదు. దయచేసి మళ్లీ ప్రయత్నించండి.',\n planRetry: 'మళ్లీ ప్రయత్నించండి',\n planNoSlotsAvailableTitle: 'స్లాట్లు అందుబాటులో లేవు',\n planNoSlotsAvailableSubtitle:\n 'పైన వేరే కన్సల్టేషన్ భాషను ఎంచుకోండి, లేదా కొంతసేపటి తర్వాత చూడండి.',\n\n back: 'వెనుకకు',\n bookingConfirmationTitle: 'బుకింగ్ నిర్ధారణ',\n paymentSuccessful: 'పేమెంట్ పూర్తయింది 🎉',\n paid: 'చెల్లించినది',\n booking: 'బుకింగ్',\n joinCall: 'కాల్లో జాయిన్ అవ్వండి',\n consultationSlotBookedTitle: 'మీ కన్సల్టేషన్ బుక్ అయింది!',\n consultationSlotBookedSubtitle:\n 'సర్టిఫైడ్ వేద జ్యోతిష్యుడితో మీ 20 నిమిషాల కాల్ బుక్ అయింది',\n consultationSlotFailedTitle: 'కన్సల్టేషన్ స్లాట్ విఫలమైంది!',\n consultationSlotFailedSubtitle:\n 'మీ స్లాట్ బుక్ చేసేటప్పుడు సమస్య ఏర్పడింది. దయచేసి మీ స్లాట్ను మళ్లీ షెడ్యూల్ చేసుకోండి',\n consultationBookSlotAgain: 'మళ్లీ స్లాట్ బుక్ చేయండి →',\n consultationWhatsappUpdate: 'అన్ని అప్డేట్స్ మీ వాట్సాప్కి పంపబడతాయి',\n};\n\nexport default te;\n","/**\n * Copy for this package's components, in every language the consultation flow\n * ships in.\n *\n * The components themselves stay presentational: each looks its strings up\n * through a `t` prop and falls back to English. This module is what produces\n * that `t`, so hosts pass a locale instead of maintaining ~36 keys of their own:\n *\n * import { createConsultationTranslate } from '@srimandir/astro-consultation';\n * const t = createConsultationTranslate(locale);\n * <AstrologerCard t={t} … />\n * <ConsultationSlotSheet t={t} … /> // forwards it to the slot picker\n * <PaymentResult t={t} … />\n *\n * Keys prefixed `plan…`, and the weekday labels, belong to\n * `ConsultationSlotSelector` in `@srimandir/astrology-common`, which\n * `ConsultationSlotSheet` renders and hands this same `t` to. They live here so\n * one lookup covers the whole flow.\n *\n * NOT covered: astrologer names, languages, specialties and prices. Those are\n * API content and arrive already localised.\n *\n * Adding a language: drop in `<code>.ts` next to `en.ts`, add it to\n * `consultationDictionaries` below and to `ConsultationLocale` in `types.ts`.\n */\n\nimport en from './en';\nimport hi from './hi';\nimport kn from './kn';\nimport te from './te';\nimport type {\n ConsultationDictionary,\n ConsultationLocale,\n ConsultationTranslate,\n} from './types';\n\nexport type {\n ConsultationDictionary,\n ConsultationLocale,\n ConsultationTranslate,\n ConsultationTranslateOptions,\n} from './types';\n\nexport { en, hi, te, kn };\n\nexport const consultationDictionaries: Record<\n ConsultationLocale,\n ConsultationDictionary\n> = { en, hi, te, kn };\n\nconst isSupported = (locale: string): locale is ConsultationLocale =>\n locale in consultationDictionaries;\n\nconst WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n/**\n * The slot picker labels its first two date chips \"Today\" and \"Tomorrow\" and\n * every later one with a weekday, which makes the row read inconsistently. It\n * offers no prop to turn that off, but it does resolve each label through `t` —\n * so answering those two keys with the weekday they actually fall on gives a\n * uniform Mon/Tue/Wed row without a change to `@srimandir/astrology-common`.\n *\n * Deterministic, not a guess: \"Today\" is always the current date and \"Tomorrow\"\n * always the next, which is exactly what the picker computed them from.\n */\nconst RELATIVE_DAY_OFFSETS: Record<string, number> = { Today: 0, Tomorrow: 1 };\n\nconst weekdayKeyFromNow = (daysFromNow: number): string => {\n const date = new Date();\n date.setDate(date.getDate() + daysFromNow);\n return WEEKDAYS[date.getDay()];\n};\n\n/**\n * Builds the `t` the components take.\n *\n * @param locale Anything unrecognised (including a full tag like \"en-US\")\n * falls back to English rather than rendering blanks.\n * @param overrides Host-supplied strings, by the same keys, winning over the\n * bundled copy — for a surface that needs different wording\n * without a package release.\n */\nexport const createConsultationTranslate = (\n locale: string = 'en',\n overrides?: ConsultationDictionary,\n): ConsultationTranslate => {\n const base = isSupported(locale) ? consultationDictionaries[locale] : en;\n const resolve = (k: string): string | undefined =>\n overrides?.[k] ?? base[k] ?? en[k];\n\n return (key, options) => {\n // Resolving \"Today\"/\"Tomorrow\" straight to a hardcoded English weekday\n // (rather than through `resolve`, like every other key) meant a host\n // couldn't localize them via `overrides` or a future locale file even\n // though the weekday abbreviations right next to them are translatable —\n // so a Hindi/Telugu/Kannada UI got \"Sun\" while day 3 onward got its real\n // translation. Only takes this path when the host hasn't overridden\n // \"Today\"/\"Tomorrow\" itself with different literal wording.\n const template =\n key in RELATIVE_DAY_OFFSETS && overrides?.[key] === undefined\n ? resolve(weekdayKeyFromNow(RELATIVE_DAY_OFFSETS[key]))\n : resolve(key);\n if (template === undefined) return undefined;\n\n return template\n .replace('{count}', String(options?.count ?? ''))\n .replace('{percent}', String(options?.percent ?? ''));\n };\n};\n","import React from 'react';\n\n/** Back chevron in the header. */\nexport const BackIcon: React.FC = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M12.5 15.833 6.667 10 12.5 4.167\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n/** Filled star beside the astrologer's rating (Golden Honey 500). */\nexport const StarIcon: React.FC = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M8 1.333l1.966 3.983 4.395.64-3.18 3.1.75 4.377L8 11.37l-3.931 2.064.75-4.378-3.18-3.1 4.395-.639L8 1.333z\"\n fill=\"#ffc627\"\n stroke=\"#ffc627\"\n strokeWidth=\"1\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n/** Calendar-clock glyph in the booked-slot pill. */\nexport const CalendarClockIcon: React.FC = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M5.333 1.333v2M10.667 1.333v2M2 6h9.5M14 8.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0Z\"\n stroke=\"#374151\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M11.5 7.5v1.25l.75.75\"\n stroke=\"#374151\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M5.5 13.5H3.333A1.333 1.333 0 0 1 2 12.167V4.667a1.333 1.333 0 0 1 1.333-1.334h9.334A1.333 1.333 0 0 1 14 4.667V6\"\n stroke=\"#374151\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\n/** Phone glyph on the \"Join Call\" CTA. */\nexport const PhoneIcon: React.FC = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M16.5 12.69v2.25a1.5 1.5 0 0 1-1.635 1.5 14.85 14.85 0 0 1-6.472-2.303 14.63 14.63 0 0 1-4.5-4.5A14.85 14.85 0 0 1 1.59 3.135 1.5 1.5 0 0 1 3.083 1.5h2.25a1.5 1.5 0 0 1 1.5 1.29c.095.72.271 1.427.525 2.107a1.5 1.5 0 0 1-.337 1.583l-.953.952a12 12 0 0 0 4.5 4.5l.953-.952a1.5 1.5 0 0 1 1.582-.338c.68.254 1.387.43 2.108.525a1.5 1.5 0 0 1 1.29 1.523Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n","/**\n * PaymentResult — the screen after the gateway returns (Figma 52:3294 and its\n * shared-hero failed variant).\n *\n * Both states show the same \"Payment Successful 🎉\" hero, because in both the\n * charge went through; only the slot booking differs, which is what `status`\n * selects. There is deliberately no \"payment failed\" state here: when the\n * charge itself fails nothing is booked and nothing is owed, so the host sends\n * the user back to the slot sheet with a toast instead of to a result screen.\n * See `PaymentResultStatus`.\n *\n * Purely presentational: the host formats the slot label (date formatting is\n * app- and locale-specific) and owns every callback.\n */\nimport React from 'react';\nimport {\n BackIcon,\n CalendarClockIcon,\n PhoneIcon,\n StarIcon,\n} from './PaymentIcons';\nimport styles from './PaymentResult.module.scss';\n\n/**\n * Which outcome to render.\n *\n * - `booked` the charge succeeded and the slot is confirmed. Shows the\n * astrologer + slot card and the \"Join Call\" CTA.\n * - `slot_failed` the charge succeeded but booking the slot did not. Shows the\n * failure card and \"Book slot again\". Fail-soft: the user has\n * paid, so the only way out is a retry, never a dead end.\n *\n * A failed *payment* is not a status here — nothing was charged, so there is no\n * result to show; the host reopens the slot sheet with a toast.\n */\nexport type PaymentResultStatus = 'booked' | 'slot_failed';\n\n/** The astrologer fields this screen renders. */\nexport interface PaymentResultAstrologer {\n name: string;\n /** Falls back to the initial-letter avatar when absent. */\n photoUrl?: string;\n /** Rendered comma-joined; the line is dropped when empty. */\n languages?: string[];\n /** Hidden when 0/undefined. */\n rating?: number;\n}\n\nexport interface PaymentResultProps {\n status: PaymentResultStatus;\n\n /** Amount charged, e.g. 99. */\n amount: number;\n /** Pre-resolved symbol, e.g. \"₹\" or \"$\" — the host owns currency mapping. */\n currencySymbol?: string;\n /** Booking reference for the stat row. Renders \"-\" when absent. */\n bookingId?: string | null;\n\n astrologer: PaymentResultAstrologer;\n /**\n * Booked slot, already formatted by the host — e.g.\n * \"Friday, 25 August 2021 @ 11:30 AM\". Only used by the `booked` state.\n */\n slotLabel?: string;\n\n /** True while the authoritative booking status is still being polled. */\n isLoading?: boolean;\n\n onBack?: () => void;\n /** `booked` only — joins the call. */\n onJoinCall?: () => void;\n /** `slot_failed` only — reopens slot selection. */\n onBookSlotAgain?: () => void;\n\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n}\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport const PaymentResult: React.FC<PaymentResultProps> = ({\n status,\n amount,\n currencySymbol = '₹',\n bookingId,\n astrologer,\n slotLabel,\n isLoading = false,\n onBack,\n onJoinCall,\n onBookSlotAgain,\n t,\n className = '',\n}) => {\n const isBooked = status === 'booked';\n const languagesLabel = astrologer.languages?.length\n ? astrologer.languages.join(', ')\n : '';\n const showRating = typeof astrologer.rating === 'number' && astrologer.rating > 0;\n\n return (\n <div className={cx(styles.root, className)} data-testid=\"payment-result\">\n <div className={styles.header}>\n {onBack && (\n <button\n type=\"button\"\n className={styles.backBtn}\n onClick={onBack}\n aria-label={t?.('back') ?? 'Back'}\n >\n <BackIcon />\n </button>\n )}\n <span className={styles.headerTitle}>\n {t?.('bookingConfirmationTitle') ?? 'Booking Confirmation'}\n </span>\n </div>\n\n {/* Hero — identical in both states, the payment succeeded either way. */}\n <div className={styles.hero}>\n <div className={styles.tick} aria-hidden=\"true\">\n ✓\n </div>\n\n <p className={styles.heroTitle}>\n {t?.('paymentSuccessful') ?? 'Payment Successful 🎉'}\n </p>\n\n <div className={styles.statRow}>\n <div className={styles.stat}>\n <span className={styles.statLabel}>{t?.('paid') ?? 'Paid'}</span>\n <span className={styles.statValue}>\n {currencySymbol}\n {amount}\n </span>\n </div>\n <div className={styles.statDivider} />\n <div className={styles.stat}>\n <span className={styles.statLabel}>\n {t?.('booking') ?? 'Booking'}\n </span>\n <span className={styles.statValue}>{bookingId || '-'}</span>\n </div>\n </div>\n </div>\n\n <div className={styles.body}>\n {isLoading && (\n <div className={styles.skeleton} aria-busy=\"true\" aria-live=\"polite\">\n <div className={styles.skeletonLine} style={{ width: '60%' }} />\n <div className={styles.skeletonLine} style={{ width: '85%' }} />\n <div className={styles.skeletonCta} />\n </div>\n )}\n\n {/* STATE: booked — charge taken and slot confirmed. */}\n {!isLoading && isBooked && (\n <div className={styles.section}>\n <div className={styles.bookedHeading}>\n <p className={styles.bookedTitle}>\n {t?.('consultationSlotBookedTitle') ??\n 'Consultation Slot Booked!'}\n </p>\n <p className={styles.bookedSubtitle}>\n {t?.('consultationSlotBookedSubtitle') ??\n 'Your 20 minutes call with our Certified Vedic Astrologer is booked'}\n </p>\n </div>\n\n <div className={styles.astrologerCard}>\n <div className={styles.astrologerRow}>\n {astrologer.photoUrl ? (\n <img\n className={styles.photo}\n src={astrologer.photoUrl}\n alt={astrologer.name}\n />\n ) : (\n <div className={styles.photoFallback} aria-hidden=\"true\">\n {astrologer.name?.trim().charAt(0).toUpperCase() || '?'}\n </div>\n )}\n\n <div className={styles.astrologerMeta}>\n <p className={styles.astrologerName}>{astrologer.name}</p>\n {(languagesLabel || showRating) && (\n <div className={styles.astrologerSubRow}>\n {languagesLabel && (\n <span className={styles.languages}>{languagesLabel}</span>\n )}\n {languagesLabel && showRating && (\n <span className={styles.metaDivider} />\n )}\n {showRating && (\n <span className={styles.rating}>\n {astrologer.rating!.toFixed(1)}\n <StarIcon />\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n\n {slotLabel && (\n <div className={styles.slotPill}>\n <CalendarClockIcon />\n <span className={styles.slotPillText}>{slotLabel}</span>\n </div>\n )}\n </div>\n\n {onJoinCall && (\n <button\n type=\"button\"\n className={styles.ctaBtn}\n onClick={onJoinCall}\n >\n <PhoneIcon />\n {t?.('joinCall') ?? 'Join Call'}\n </button>\n )}\n\n <p className={styles.footnote}>\n {t?.('consultationWhatsappUpdate') ??\n 'All updates will be sent to your WhatsApp'}\n </p>\n </div>\n )}\n\n {/* STATE: slot_failed — charge taken, slot not booked. Retry only. */}\n {!isLoading && !isBooked && (\n <div className={styles.section}>\n <div className={styles.failedCard}>\n <p className={styles.failedTitle}>\n {t?.('consultationSlotFailedTitle') ??\n 'Consultation Slot Failed!'}\n </p>\n <p className={styles.failedSubtitle}>\n {t?.('consultationSlotFailedSubtitle') ??\n 'We ran into some problem while booking your slot. Please schedule your slot again'}\n </p>\n </div>\n\n {onBookSlotAgain && (\n <button\n type=\"button\"\n className={styles.ctaBtn}\n onClick={onBookSlotAgain}\n >\n {t?.('consultationBookSlotAgain') ?? 'Book slot again →'}\n </button>\n )}\n\n <p className={styles.footnote}>\n {t?.('consultationWhatsappUpdate') ??\n 'All updates will be sent to your WhatsApp'}\n </p>\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\n\n/** Calendar-clock glyph beside the call time. */\nexport const CalendarClockIcon: React.FC = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 20.5 20.5\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M15.25 10C18.1495 10 20.5 12.3505 20.5 15.25C20.5 18.1495 18.1495 20.5 15.25 20.5C12.3505 20.5 10 18.1495 10 15.25C10 12.3505 12.3505 10 15.25 10ZM14.25 0C14.6642 0 15 0.335786 15 0.75V1.5H15.75C17.8211 1.5 19.5 3.17893 19.5 5.25V7.75C19.5 8.16421 19.1642 8.5 18.75 8.5C18.3358 8.5 18 8.16421 18 7.75V5.25C18 4.00736 16.9926 3 15.75 3H15V3.75C15 4.16421 14.6642 4.5 14.25 4.5C13.8358 4.5 13.5 4.16421 13.5 3.75V3H6V3.75C6 4.16421 5.66421 4.5 5.25 4.5C4.83579 4.5 4.5 4.16421 4.5 3.75V3H3.75C2.50736 3 1.5 4.00736 1.5 5.25V15.75C1.5 16.9926 2.50736 18 3.75 18H7.75C8.16421 18 8.5 18.3358 8.5 18.75C8.5 19.1642 8.16421 19.5 7.75 19.5H3.75C1.67893 19.5 0 17.8211 0 15.75V5.25C0 3.17893 1.67893 1.5 3.75 1.5H4.5V0.75C4.5 0.335786 4.83579 0 5.25 0C5.66421 0 6 0.335786 6 0.75V1.5H13.5V0.75C13.5 0.335786 13.8358 0 14.25 0ZM15.25 11.5C13.1789 11.5 11.5 13.1789 11.5 15.25C11.5 17.3211 13.1789 19 15.25 19C17.3211 19 19 17.3211 19 15.25C19 13.1789 17.3211 11.5 15.25 11.5ZM15.1436 12.9834C15.5575 12.9837 15.8936 13.3193 15.8936 13.7334V15.0654L16.916 15.6895C17.2693 15.9052 17.3815 16.3672 17.166 16.7207C16.9504 17.0742 16.4883 17.1861 16.1348 16.9707L14.7529 16.127C14.5299 15.9908 14.3937 15.7485 14.3936 15.4873V13.7334C14.3936 13.3192 14.7293 12.9834 15.1436 12.9834ZM5.75 12C6.16421 12 6.5 12.3358 6.5 12.75C6.5 13.1642 6.16421 13.5 5.75 13.5H4.75C4.33579 13.5 4 13.1642 4 12.75C4 12.3358 4.33579 12 4.75 12H5.75ZM8.75 8C9.16421 8 9.5 8.33579 9.5 8.75C9.5 9.16421 9.16421 9.5 8.75 9.5H4.75C4.33579 9.5 4 9.16421 4 8.75C4 8.33579 4.33579 8 4.75 8H8.75Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\n/** Filled star beside the astrologer's rating. */\nexport const StarIcon: React.FC = () => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 9.38 8.94\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M9.28094 3.71918L7.22537 5.72294L7.7108 8.55302C7.73192 8.67677 7.6811 8.80184 7.57946 8.87576C7.52204 8.91767 7.45373 8.93879 7.38542 8.93879C7.33295 8.93879 7.28015 8.92625 7.23197 8.90084L4.69031 7.56467L2.14898 8.90051C2.0381 8.95925 1.90313 8.94968 1.80149 8.87543C1.69985 8.80151 1.64903 8.67644 1.67015 8.55269L2.15558 5.72261L0.0996759 3.71918C0.00991586 3.6314 -0.0227541 3.50006 0.0161859 3.38093C0.0551259 3.2618 0.158416 3.17435 0.282826 3.1562L3.1238 2.7437L4.3943 0.169042C4.50551 -0.0563475 4.87511 -0.0563475 4.98632 0.169042L6.25682 2.7437L9.09779 3.1562C9.2222 3.17435 9.32549 3.26147 9.36443 3.38093C9.40337 3.50039 9.3707 3.63107 9.28094 3.71918Z\"\n fill=\"#FFC627\"\n />\n </svg>\n);\n\n/** Blue verified-check badge overlapping the astrologer's photo. */\nexport const VerifiedBadgeIcon: React.FC = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 23.9 23.9\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"11.6667\" cy=\"11.6667\" r=\"5.83333\" fill=\"white\" />\n <path\n d=\"M21.1605 13.933C21.4969 13.7095 21.7815 13.4167 21.9953 13.0741C22.2091 12.7315 22.3471 12.3472 22.4 11.9468C22.3471 11.5465 22.2091 11.1621 21.9953 10.8196C21.7815 10.477 21.4969 10.1841 21.1605 9.9607C20.8921 9.73966 20.6602 9.47759 20.4736 9.18417C20.4343 8.81253 20.4699 8.43679 20.5781 8.0791C20.7089 7.70675 20.7605 7.31122 20.7296 6.91779C20.6988 6.52437 20.5861 6.14171 20.3989 5.7943C20.1225 5.50969 19.79 5.2857 19.4223 5.13659C19.0547 4.98747 18.66 4.9165 18.2635 4.92817C17.905 4.91214 17.5517 4.83644 17.2181 4.70417C16.9832 4.43149 16.8009 4.11755 16.6805 3.7783C16.5688 3.3924 16.3767 3.03453 16.1167 2.72824C15.8568 2.42195 15.5349 2.17418 15.1723 2.00123C14.7891 1.93273 14.3959 1.94517 14.0178 2.03776C13.6397 2.13035 13.2852 2.30103 12.9771 2.53883C12.6647 2.75141 12.3152 2.90338 11.9467 2.98683C11.5782 2.90338 11.2286 2.75141 10.9163 2.53883C10.6085 2.30026 10.2541 2.12911 9.87586 2.03649C9.49767 1.94387 9.10421 1.93186 8.72107 2.00123C8.35846 2.17418 8.03659 2.42195 7.77662 2.72824C7.51666 3.03453 7.32451 3.3924 7.2128 3.7783C7.09247 4.11755 6.91018 4.43149 6.6752 4.70417C6.34164 4.83644 5.98834 4.91214 5.62987 4.92817C5.23331 4.9165 4.83866 4.98747 4.47102 5.13659C4.10338 5.2857 3.77079 5.50969 3.4944 5.7943C3.30721 6.14171 3.19458 6.52437 3.16372 6.91779C3.13287 7.31122 3.18446 7.70675 3.3152 8.0791C3.42345 8.43679 3.459 8.81253 3.41973 9.18417C3.2331 9.47759 3.00126 9.73966 2.7328 9.9607C2.39644 10.1841 2.11181 10.477 1.89802 10.8196C1.68424 11.1621 1.54625 11.5465 1.49333 11.9468C1.54625 12.3472 1.68424 12.7315 1.89802 13.0741C2.11181 13.4167 2.39644 13.7095 2.7328 13.933C3.00126 14.154 3.2331 14.4161 3.41973 14.7095C3.459 15.0811 3.42345 15.4569 3.3152 15.8146C3.18446 16.1869 3.13287 16.5824 3.16372 16.9759C3.19458 17.3693 3.30721 17.752 3.4944 18.0994C3.77079 18.384 4.10338 18.608 4.47102 18.7571C4.83866 18.9062 5.23331 18.9772 5.62987 18.9655C5.98834 18.9815 6.34164 19.0572 6.6752 19.1895C6.91018 19.4622 7.09247 19.7761 7.2128 20.1154C7.32451 20.5013 7.51666 20.8591 7.77662 21.1654C8.03659 21.4717 8.35846 21.7195 8.72107 21.8924C9.10423 21.9609 9.49749 21.9485 9.87555 21.8559C10.2536 21.7633 10.6081 21.5926 10.9163 21.3548C11.2286 21.1423 11.5782 20.9903 11.9467 20.9068C12.3152 20.9903 12.6647 21.1423 12.9771 21.3548C13.4867 21.6934 14.0709 21.9035 14.6795 21.9671C14.8469 21.9716 15.0137 21.9463 15.1723 21.8924C15.5349 21.7195 15.8568 21.4717 16.1167 21.1654C16.3767 20.8591 16.5688 20.5013 16.6805 20.1154C16.8009 19.7761 16.9832 19.4622 17.2181 19.1895C17.5517 19.0572 17.905 18.9815 18.2635 18.9655C18.66 18.9772 19.0547 18.9062 19.4223 18.7571C19.79 18.608 20.1225 18.384 20.3989 18.0994C20.5861 17.752 20.6988 17.3693 20.7296 16.9759C20.7605 16.5824 20.7089 16.1869 20.5781 15.8146C20.4699 15.4569 20.4343 15.0811 20.4736 14.7095C20.6602 14.4161 20.8921 14.154 21.1605 13.933ZM15.456 10.4834L11.4837 14.4706C11.3399 14.6049 11.1504 14.6797 10.9536 14.6797C10.7568 14.6797 10.5673 14.6049 10.4235 14.4706L8.43734 12.4695C8.30102 12.3304 8.22511 12.1431 8.22609 11.9484C8.22707 11.7536 8.30488 11.5671 8.44259 11.4294C8.5803 11.2917 8.7668 11.2139 8.96155 11.2129C9.1563 11.2119 9.34357 11.2879 9.48267 11.4242L10.9461 12.8876L14.4107 9.4231C14.5504 9.28668 14.738 9.21031 14.9333 9.21031C15.1287 9.21031 15.3162 9.28668 15.456 9.4231C15.5269 9.492 15.5832 9.57442 15.6217 9.66548C15.6602 9.75653 15.68 9.85438 15.68 9.95323C15.68 10.0521 15.6602 10.1499 15.6217 10.241C15.5832 10.332 15.5269 10.4145 15.456 10.4834Z\"\n fill=\"#1A6EE5\"\n />\n </svg>\n);\n","/**\n * ConsultationDetailsCard — the \"Call time\" + \"Astrologer\" white card shared\n * by every screen that confirms a booked consultation (Figma 60:4092 /\n * 783:35734). Split out once a second host (`ConsultationBookedSection`)\n * needed the identical card alongside `AstroConsultationSuccessModal`.\n *\n * Purely presentational: the host formats the date/time labels.\n */\nimport React from 'react';\nimport { CalendarClockIcon, StarIcon, VerifiedBadgeIcon } from './icons';\nimport styles from './ConsultationDetailsCard.module.scss';\n\nexport interface ConsultationDetailsCardAstrologer {\n name: string;\n /** Falls back to the initial-letter avatar when absent. */\n photoUrl?: string;\n /** Rendered comma-joined; the line is dropped when empty. */\n languages?: string[];\n /** Hidden when 0/undefined. */\n rating?: number;\n /** Hidden when undefined. */\n experienceYears?: number;\n}\n\nexport interface ConsultationDetailsCardProps {\n astrologer: ConsultationDetailsCardAstrologer;\n /** Booked call date, already formatted by the host, e.g. \"Friday, 25 August 2026\". */\n dateLabel: string;\n /** Booked call time range, already formatted, e.g. \"11:30 AM - 12:00 PM\". */\n timeRangeLabel: string;\n /** Rendered inside the astrologer section, below the profile row — e.g. a \"Join Call\" CTA. */\n astrologerFooter?: React.ReactNode;\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n}\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport const ConsultationDetailsCard: React.FC<ConsultationDetailsCardProps> = ({\n astrologer,\n dateLabel,\n timeRangeLabel,\n astrologerFooter,\n t,\n className = '',\n}) => {\n const languagesLabel = astrologer.languages?.length ? astrologer.languages.join(', ') : '';\n const showRating = typeof astrologer.rating === 'number' && astrologer.rating > 0;\n const showExperience = typeof astrologer.experienceYears === 'number';\n\n return (\n <div className={cx(styles.card, className)}>\n <div className={styles.scheduleSection}>\n <p className={styles.sectionLabel}>{t?.('consultationCallTimeLabel') ?? 'Call time'}</p>\n <div className={styles.timeRow}>\n <span className={styles.timeIcon}>\n <CalendarClockIcon />\n </span>\n <div className={styles.timeText}>\n <p className={styles.dateLabel}>{dateLabel}</p>\n <p className={styles.timeRangeLabel}>{timeRangeLabel}</p>\n </div>\n </div>\n </div>\n\n <div className={styles.astrologerSection}>\n <p className={styles.sectionLabel}>{t?.('consultationAstrologerLabel') ?? 'Astrologer'}</p>\n <div className={styles.astrologerRow}>\n <div className={styles.avatar}>\n <div className={styles.avatarInner}>\n <div className={styles.avatarFill} />\n {astrologer.photoUrl ? (\n <img className={styles.photo} src={astrologer.photoUrl} alt={astrologer.name} />\n ) : (\n <div className={styles.photoFallback} aria-hidden=\"true\">\n {astrologer.name?.trim().charAt(0).toUpperCase() || '?'}\n </div>\n )}\n </div>\n <span className={styles.verifiedBadge}>\n <VerifiedBadgeIcon />\n </span>\n </div>\n\n <div className={styles.astrologerMeta}>\n <p className={styles.astrologerName}>{astrologer.name}</p>\n {(showRating || showExperience || languagesLabel) && (\n <div className={styles.astrologerSubRow}>\n {showRating && (\n <span className={styles.rating}>\n {astrologer.rating!.toFixed(1)}\n <StarIcon />\n </span>\n )}\n {showRating && showExperience && <span className={styles.metaDot} />}\n {showExperience && (\n <span className={styles.experience}>\n {t?.('consultationYearsExperience', { count: astrologer.experienceYears }) ??\n `${astrologer.experienceYears} years of experience`}\n </span>\n )}\n </div>\n )}\n {languagesLabel && <p className={styles.languages}>{languagesLabel}</p>}\n </div>\n </div>\n\n {astrologerFooter}\n </div>\n </div>\n );\n};\n","import React from 'react';\n\n/**\n * Sparkle-framed checkmark hero (Figma node 60:4046). Traced from the\n * exported vector — the sparkle positions/colors are illustration, not\n * data, so they're kept as one static graphic rather than individual props.\n */\nexport const SuccessHeroIcon: React.FC = () => (\n <svg width=\"204\" height=\"80.4\" viewBox=\"0 0 204 80.4\" fill=\"none\" aria-hidden=\"true\">\n <g clipPath=\"url(#success-hero-clip-1)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M157.375 14.4109C150.356 14.4109 144.688 20.1023 144.688 27.0984C144.688 20.1023 138.996 14.4109 132 14.4109C138.996 14.4109 144.688 8.74204 144.688 1.7459C144.688 8.74204 150.356 14.4109 157.375 14.4109Z\"\n fill=\"#88CEAD\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M170.399 7.8645C166.552 7.8645 163.448 10.9914 163.448 14.8156C163.448 10.9914 160.321 7.8645 156.497 7.8645C160.321 7.8645 163.448 4.76011 163.448 0.913359C163.448 4.76011 166.552 7.8645 170.399 7.8645Z\"\n fill=\"#C2E9D6\"\n />\n </g>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M30.9167 26.5646C26.2376 26.5646 22.4583 30.3438 22.4583 35.0229C22.4583 30.3438 18.6791 26.5646 14 26.5646C18.6791 26.5646 22.4583 22.7853 22.4583 18.1062C22.4583 22.7853 26.2376 26.5646 30.9167 26.5646Z\"\n fill=\"#C2E9D6\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M60.7023 15.352C56.8556 15.352 53.7512 18.4788 53.7512 22.3031C53.7512 18.4788 50.6243 15.352 46.8 15.352C50.6243 15.352 53.7512 12.2476 53.7512 8.40082C53.7512 12.2476 56.8556 15.352 60.7023 15.352Z\"\n fill=\"#C2E9D6\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M156.902 66.0574C153.056 66.0574 149.951 69.1843 149.951 73.0085C149.951 69.1843 146.824 66.0574 143 66.0574C146.824 66.0574 149.951 62.953 149.951 59.1062C149.951 62.953 153.056 66.0574 156.902 66.0574Z\"\n fill=\"#C2E9D6\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M189.758 42.4855C187.335 42.4855 185.379 44.4554 185.379 46.8647C185.379 44.4554 183.409 42.4855 181 42.4855C183.409 42.4855 185.379 40.5297 185.379 38.1062C185.379 40.5297 187.335 42.4855 189.758 42.4855Z\"\n fill=\"#C2E9D6\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11.7584 55.4855C9.33499 55.4855 7.37922 57.4554 7.37922 59.8647C7.37922 57.4554 5.40928 55.4855 3 55.4855C5.40928 55.4855 7.37922 53.5297 7.37922 51.1062C7.37922 53.5297 9.33499 55.4855 11.7584 55.4855Z\"\n fill=\"#C2E9D6\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M47.3753 47.1681C40.3567 47.1681 34.6878 52.8595 34.6878 59.8557C34.6878 52.8595 28.9964 47.1681 22.0002 47.1681C28.9964 47.1681 34.6878 41.4992 34.6878 34.5031C34.6878 41.4992 40.3567 47.1681 47.3753 47.1681Z\"\n fill=\"#88CEAD\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M56.3955 61.7645C51.7164 61.7645 47.9371 65.5438 47.9371 70.2228C47.9371 65.5438 44.1578 61.7645 39.4788 61.7645C44.1578 61.7645 47.9371 57.9852 47.9371 53.3061C47.9371 57.9852 51.7164 61.7645 56.3955 61.7645Z\"\n fill=\"#C2E9D6\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M173.763 50.9718C168.849 50.9718 164.881 54.9557 164.881 59.853C164.881 54.9557 160.897 50.9718 156 50.9718C160.897 50.9718 164.881 47.0035 164.881 42.1062C164.881 47.0035 168.849 50.9718 173.763 50.9718Z\"\n fill=\"#88CEAD\"\n />\n <g clipPath=\"url(#success-hero-clip-2)\">\n <path\n d=\"M98.3086 66.4562C111.564 66.4562 122.309 55.711 122.309 42.4561C122.309 29.2013 111.564 18.4561 98.3086 18.4561C85.0538 18.4561 74.3086 29.2013 74.3086 42.4561C74.3086 55.711 85.0538 66.4562 98.3086 66.4562Z\"\n fill=\"#159169\"\n />\n <path\n d=\"M122.309 42.4559C122.309 55.656 111.509 66.456 98.3086 66.456C90.6587 66.456 83.9087 63.006 79.5586 57.456C83.6086 60.756 88.8586 62.7061 94.5586 62.7061C107.759 62.7061 118.559 51.9061 118.559 38.706C118.559 33.0061 116.609 27.756 113.309 23.706C118.859 28.0559 122.309 34.8059 122.309 42.4559Z\"\n fill=\"#087955\"\n />\n <path\n d=\"M111.359 35.5559L95.7587 52.656C94.7086 53.856 92.9087 53.856 91.8587 52.656L85.2586 45.306C84.3587 44.2559 84.3587 42.606 85.4086 41.5559C86.4587 40.6559 88.1086 40.6559 89.1587 41.7059L93.8087 46.9559L107.459 32.1059C108.509 31.0559 110.159 30.9059 111.209 31.9559C112.259 32.8559 112.259 34.6559 111.359 35.5559Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"success-hero-clip-1\">\n <rect width=\"38.4\" height=\"38.4\" fill=\"white\" transform=\"matrix(1 0 0 -1 132 38.4)\" />\n </clipPath>\n <clipPath id=\"success-hero-clip-2\">\n <rect width=\"48\" height=\"48\" fill=\"white\" transform=\"translate(74.3086 18.4561)\" />\n </clipPath>\n </defs>\n </svg>\n);\n\n/** Message bubble glyph beside the WhatsApp footnote. */\nexport const MessageSquareIcon: React.FC = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M12.4921 10.7417C12.7109 10.5229 12.8338 10.2261 12.8338 9.91671V2.91667C12.8338 2.60725 12.7109 2.3105 12.4921 2.09171C12.2733 1.87292 11.9765 1.75 11.667 1.75H2.33296C2.02352 1.75 1.72675 1.87292 1.50794 2.09171C1.28913 2.3105 1.1662 2.60725 1.1662 2.91667V12.4169C1.16621 12.4988 1.19051 12.5789 1.23602 12.647C1.28154 12.7151 1.34622 12.7681 1.4219 12.7995C1.49758 12.8308 1.58085 12.839 1.66119 12.823C1.74153 12.8071 1.81533 12.7676 1.87326 12.7097L3.15786 11.4252C3.37662 11.2064 3.67334 11.0834 3.98276 11.0834H11.667C11.9765 11.0834 12.2733 10.9605 12.4921 10.7417Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n","/**\n * AstroConsultationSuccessModal — the confirmation dialog shown right after a\n * consultation call is booked (Figma 60:4044, \"Variation 3: Muted Editorial\").\n *\n * Purely presentational: the host formats the date/time labels (locale- and\n * app-specific) and owns the dismiss behavior. There is no close button in\n * the design itself — dismissal is via backdrop click or Escape, same as\n * `SampleReportModal`/`ConsultationSlotModal` elsewhere in this codebase.\n *\n * Rendered as a bottom sheet (`@srimandir/common`'s `BottomSheet`) rather\n * than a centered dialog, matching every other consultation surface in this\n * package — it comes with backdrop/Escape dismiss and body-scroll-lock\n * already built in, so this component only owns the content.\n */\nimport React from 'react';\nimport { BottomSheet } from '@srimandir/common';\nimport {\n ConsultationDetailsCard,\n type ConsultationDetailsCardAstrologer,\n} from '../ConsultationDetailsCard';\nimport { MessageSquareIcon, SuccessHeroIcon } from './icons';\nimport styles from './AstroConsultationSuccessModal.module.scss';\n\nexport type AstroConsultationSuccessModalAstrologer = ConsultationDetailsCardAstrologer;\n\nexport interface AstroConsultationSuccessModalProps {\n isOpen: boolean;\n onClose: () => void;\n\n astrologer: AstroConsultationSuccessModalAstrologer;\n /** Booked call date, already formatted by the host, e.g. \"Friday, 25 August 2026\". */\n dateLabel: string;\n /** Booked call time range, already formatted, e.g. \"11:30 AM - 12:00 PM\". */\n timeRangeLabel: string;\n\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n}\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport const AstroConsultationSuccessModal: React.FC<AstroConsultationSuccessModalProps> = ({\n isOpen,\n onClose,\n astrologer,\n dateLabel,\n timeRangeLabel,\n t,\n className = '',\n}) => {\n const title = t?.('consultationCallBookedTitle') ?? 'Your call has been booked with our Vedic astrologer';\n\n return (\n <BottomSheet\n isOpen={isOpen}\n onClose={onClose}\n showCloseButton={false}\n ariaLabel={title}\n className={cx(styles.sheet, className)}\n >\n <div className={styles.root}>\n <div className={styles.header}>\n <SuccessHeroIcon />\n <p className={styles.title}>{title}</p>\n </div>\n\n <ConsultationDetailsCard\n astrologer={astrologer}\n dateLabel={dateLabel}\n timeRangeLabel={timeRangeLabel}\n t={t}\n />\n\n <div className={styles.footer}>\n <span className={styles.footerIcon}>\n <MessageSquareIcon />\n </span>\n <p className={styles.footerText}>\n {t?.('consultationWhatsappUpdate') ?? 'All updates will be sent to your WhatsApp'}\n </p>\n </div>\n </div>\n </BottomSheet>\n );\n};\n","import React from 'react';\n\n/** Small green check badge beside \"Your astrology call details:\". */\nexport const CheckBadgeIcon: React.FC = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"7\" cy=\"7\" r=\"7\" fill=\"#159169\" />\n <path\n d=\"M5.70493 10.5L2.91667 7.68097L4.00262 6.58591L5.70493 8.30988L9.99738 3.96666L11.0833 5.06171L5.70493 10.5Z\"\n fill=\"white\"\n />\n </svg>\n);\n\n/** Bell glyph on the call-reminder notice. */\nexport const BellIcon: React.FC = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.996 8.66667V6C3.996 3.79067 5.78867 2 8 2C10.2113 2 12.004 3.79067 12.004 6V8.66667C12.004 9.324 12.3027 9.946 12.8153 10.358L13.0213 10.5233C13.6327 11.014 13.2853 12 12.5013 12H3.49867C2.71467 12 2.36733 11.014 2.97867 10.5233L3.18467 10.358C3.698 9.946 3.996 9.324 3.996 8.66667Z\"\n stroke=\"#22272B\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M7 14H9\" stroke=\"#22272B\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\n/** Phone glyph on the \"Join Call\" CTA. */\nexport const PhoneIcon: React.FC = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M16.5 12.69v2.25a1.5 1.5 0 0 1-1.635 1.5 14.85 14.85 0 0 1-6.472-2.303 14.63 14.63 0 0 1-4.5-4.5A14.85 14.85 0 0 1 1.59 3.135 1.5 1.5 0 0 1 3.083 1.5h2.25a1.5 1.5 0 0 1 1.5 1.29c.095.72.271 1.427.525 2.107a1.5 1.5 0 0 1-.337 1.583l-.953.952a12 12 0 0 0 4.5 4.5l.953-.952a1.5 1.5 0 0 1 1.582-.338c.68.254 1.387.43 2.108.525a1.5 1.5 0 0 1 1.29 1.523Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n/**\n * Decorative zodiac-wheel doodle behind the header (Figma node 783:35724).\n * Illustration, not data — kept as one static graphic.\n */\nexport const DecorativeBlobIcon: React.FC = () => (\n <svg width=\"127\" height=\"127\" viewBox=\"0 0 127.081 126.889\" fill=\"none\" aria-hidden=\"true\">\n <g opacity=\"0.3\" fill=\"url(#consultation-booked-blob-gradient)\">\n <path d=\"M27.9017 31.3222C27.8477 30.5847 28.7507 30.1841 29.2628 30.7169L31.8908 33.4565L33.1089 33.3431C44.3357 21.2677 61.5935 15.9144 78.2613 20.35C79.3566 17.0877 83.8696 16.8772 85.2729 19.9975C85.699 20.945 85.7001 21.9772 85.3592 22.88C101.737 30.2663 111.706 46.1047 112.239 63.0172L113.545 64.379L117.701 63.9922C118.038 63.9611 118.357 64.1466 118.496 64.4555L118.497 64.4583C118.636 64.7693 118.56 65.1339 118.31 65.3635L115.236 68.1875L115.525 72.2286C115.579 72.9661 114.676 73.3667 114.164 72.8339L111.868 70.4411C110.533 80.5327 105.861 90.033 98.4809 97.2479C100.101 100.753 96.0512 104.171 92.8726 101.898C81.1457 110.151 66.642 112.279 53.3534 108.26L53.5323 110.768C53.5863 111.505 52.6834 111.906 52.1712 111.373L49.518 108.608L45.5891 108.974C44.8341 109.047 44.4232 108.113 44.98 107.602L46.9497 105.792C38.5359 101.804 31.3005 95.2504 26.5429 86.6274C24.5351 87.6758 22.2198 86.744 21.3637 84.8403C20.5076 82.9367 21.3466 80.5863 23.4634 79.7798C18.4786 65.7354 20.8035 50.5844 28.7288 38.8609L25.9032 39.1242C25.1482 39.1973 24.7373 38.2636 25.2941 37.7529L28.1715 35.107L27.9017 31.3222ZM35.7822 33.0938C36.1187 33.0612 36.4385 33.2481 36.5774 33.5571L36.5787 33.5599C36.7169 33.8709 36.6417 34.2355 36.3913 34.4651L33.5139 37.1109L33.7837 40.8957C33.8376 41.6333 32.9347 42.0339 32.4225 41.5011L30.3305 39.3204C28.4215 42.0739 26.8429 45.0323 25.6049 48.1262L40.6029 53.8074L52.1774 55.5957C52.4595 55.1313 52.7514 54.6998 53.0576 54.2907L49.1548 48.9426C48.6095 48.2029 49.5662 47.2861 50.2851 47.8542L55.2947 51.8108C55.7536 51.3924 56.2391 51.001 56.7475 50.6418L54.318 39.2619L47.729 24.6106C43.0905 26.7969 39.0007 29.6912 35.5393 33.1165L35.7822 33.0938ZM50.5916 64.6266L48.8103 64.8256L50.6723 65.1229C51.0314 65.1802 51.3045 65.4746 51.3368 65.8349C51.5575 68.3138 52.2009 68.7824 51.5057 69.2936L44.4868 74.4482L53.0005 72.6174C53.3253 72.5477 53.6588 72.6877 53.837 72.9689C54.1738 73.5009 54.5497 74.0069 54.9556 74.4757C55.1974 74.7587 55.2138 75.1686 54.9918 75.4669L53.5145 77.4508L55.4362 75.9573C55.7358 75.7259 56.1577 75.738 56.4424 75.9865C58.5425 77.8169 59.4014 77.6518 59.2672 78.5358L57.9689 87.1388L62.6326 79.8887C63.1131 79.1399 63.5415 79.8087 66.2748 79.8807C67.0908 79.9 67.0751 80.8577 67.1521 81.0262L67.1664 80.6093C67.1798 80.1996 67.5029 79.8677 67.9116 79.8451C70.4109 79.7001 70.8815 79.0197 71.4 79.7213L76.4704 86.5966L74.6947 78.3109C74.4979 77.396 75.4398 77.5261 77.3717 75.6551C77.6327 75.402 78.0319 75.3582 78.3411 75.5516L80.0235 76.5996L78.7436 75.2095C78.4765 74.9174 78.4634 74.4789 78.7128 74.1717C79.2515 73.5122 79.6806 72.8935 80.0644 72.229C80.227 71.9456 80.5469 71.7915 80.8703 71.8412L89.1653 73.1125L82.1446 68.5781C81.8653 68.3984 81.7287 68.0663 81.8009 67.7421C82.0218 66.7455 82.1426 65.794 82.1606 64.9158C82.1675 64.5276 82.4543 64.2036 82.8381 64.148L84.7599 63.8672L82.7755 63.6148C82.4022 63.5673 82.1135 63.2629 82.0852 62.8906C81.8993 60.519 81.2337 60.0365 81.9335 59.5191L88.6228 54.6027L80.5105 56.353C80.1878 56.4218 79.8562 56.2843 79.6772 56.0069C78.7074 54.4978 78.0277 54.0193 77.8832 53.698C77.579 53.0215 78.2627 52.6523 79.0814 51.3273L77.577 52.5551C77.2819 52.7964 76.8575 52.7939 76.5657 52.5486C74.5794 50.8787 73.7253 51.0637 73.8655 50.1706L75.128 41.8991L70.5788 48.957C70.1123 49.6857 69.6522 49.0654 67.0189 49.0178C66.6024 49.0101 66.2634 48.6843 66.2424 48.268L66.1747 46.9992L65.8545 48.4577C65.7821 48.7888 65.5067 49.0382 65.1687 49.0748C64.1845 49.185 63.3095 49.3495 62.4941 49.5788C62.1768 49.669 61.8368 49.5522 61.6414 49.2856L56.6184 42.4517L58.407 50.8301C58.4749 51.1489 58.3403 51.4775 58.0677 51.6577C57.2871 52.1699 56.5593 52.7635 55.9031 53.4182C55.6186 53.7021 55.1675 53.7286 54.8524 53.4785L53.8477 52.6854L54.69 53.8399C54.9043 54.137 54.8916 54.5294 54.6642 54.8081C53.1778 56.6309 53.3073 57.3738 52.465 57.2422L43.9282 55.9235L51.2299 60.6641C51.4997 60.8379 51.6346 61.1605 51.5767 61.4749C51.4327 62.2333 51.3363 63.0654 51.2952 63.8793C51.2758 64.268 50.9776 64.5836 50.5916 64.6266ZM57.3453 91.036L52.7309 103.167L55.5569 102.905C56.3164 102.835 56.7205 103.768 56.166 104.276L53.5608 106.67C63.2295 109.657 73.9477 109.354 83.9189 105.082L77.3281 90.4272L70.4371 81.0839C69.869 81.2104 69.2967 81.305 68.7257 81.3667L68.5384 86.9921C68.5104 87.906 67.1941 88.0513 66.9762 87.1485L65.6217 81.4363C64.9587 81.3952 64.3063 81.3172 63.672 81.2005L57.3453 91.036ZM93.0177 73.7145L108.061 79.4245C109.153 76.3838 109.924 73.2265 110.333 70.0049L107.203 70.2959C106.866 70.3271 106.547 70.1416 106.408 69.8326L106.406 69.8298C106.268 69.5188 106.343 69.1543 106.594 68.9246L109.667 66.1009L109.378 62.0582C109.354 61.7248 109.542 61.413 109.847 61.2777C110.092 61.1687 110.357 61.2247 110.577 61.3641C110.24 56.5845 109.099 51.7881 107.113 47.1521L92.4791 53.7335L83.3023 60.4792C83.4321 61.028 83.5314 61.5787 83.599 62.1233L90.712 63.0273C91.6186 63.1445 91.636 64.4663 90.7265 64.5965L83.713 65.6203C83.6697 66.2385 83.5851 66.8821 83.4597 67.5423L93.0177 73.7145ZM82.295 25.2753L77.2324 38.6127L75.5138 49.872C76.0593 50.1949 76.5807 50.5472 77.0714 50.9236L82.5826 46.4216C83.2931 45.8388 84.2571 46.744 83.7302 47.4914L79.6189 53.3109C80.0164 53.7648 80.375 54.2209 80.7026 54.6909L91.8282 52.2894L106.464 45.7074C101.786 35.7767 93.8386 28.3748 84.4811 24.2175C83.8228 24.8728 83.1441 25.1699 82.295 25.2753ZM49.1735 23.9606L55.7635 38.614L62.5985 47.9138C63.1769 47.7724 63.7818 47.6598 64.4272 47.5714L65.8781 40.9503C66.073 40.0565 67.3921 40.1581 67.4425 41.0779L67.7855 47.4638C68.3649 47.5 68.9494 47.5645 69.5326 47.6584L75.7897 37.95L80.6592 25.1213C79.3141 24.6806 78.2579 23.5463 78.0911 21.9389C68.8054 19.4133 58.6505 19.8983 49.1735 23.9606ZM97.5061 95.9799C101.883 91.6636 105.258 86.5096 107.499 80.9053L92.563 75.2358L81.1552 73.4872C80.9143 73.8719 80.6523 74.251 80.3646 74.6314L85.142 79.8236C85.7663 80.5038 84.9157 81.5168 84.1404 81.0322L78.0166 77.2155C77.5158 77.6613 76.9665 78.0881 76.356 78.5051L78.7718 89.7754L85.3636 104.433C87.647 103.357 89.7968 102.11 91.804 100.71C89.7093 97.0444 94.289 93.2482 97.5061 95.9799ZM47.8521 104.466L47.613 101.109C47.559 100.372 48.462 99.9712 48.9741 100.504L51.1762 102.8L55.8649 90.4731L57.6229 78.8207C57.0046 78.4322 56.4361 78.0298 55.9039 77.6008L49.8829 82.2795C49.1556 82.8434 48.2174 81.9112 48.762 81.1807L53.3505 75.0194C53.1616 74.7804 52.9793 74.5334 52.8049 74.2794L41.2824 76.7577L28.4974 82.5073C28.7305 83.6036 28.4461 84.725 27.7807 85.5894C32.4121 94.1246 39.5464 100.585 47.8521 104.466ZM27.8512 81.0611L40.6325 75.3131L50.1411 68.3299C50.0035 67.7354 49.8991 67.1599 49.8255 66.5909L42.7867 65.4652C42.392 65.4002 42.1084 65.0562 42.1196 64.6645C42.1296 64.2682 42.4305 63.9395 42.8241 63.8965L49.758 63.1256C49.799 62.6475 49.8561 62.169 49.9283 61.7073L40.0403 55.2879L25.0425 49.6071C21.6586 59.0204 21.4458 69.5777 25.0613 79.5425C26.1538 79.6185 27.1862 80.1532 27.8512 81.0611Z\" />\n <path d=\"M88.2625 2.20076L91.0447 1.94178C91.8042 1.87155 92.2083 2.80453 91.6538 3.31309L89.596 5.20359L89.789 7.90689C89.843 8.64444 88.94 9.04504 88.4279 8.51223L86.5516 6.55578L83.7694 6.81476C83.0099 6.88499 82.6058 5.95201 83.1603 5.44346L85.2181 3.55295L85.0251 0.849646C84.9711 0.1121 85.8741 -0.288496 86.3862 0.244309L88.2625 2.20076Z\" />\n <path d=\"M42.7926 121.437L43.7546 122.441L45.1871 122.308C45.9421 122.235 46.353 123.168 45.7961 123.679L44.737 124.652L44.8366 126.039C44.8891 126.778 43.9863 127.177 43.4748 126.645L42.512 125.641L41.0796 125.775C40.3246 125.848 39.9137 124.914 40.4705 124.403L41.5303 123.43L41.4315 122.043C41.3775 121.305 42.2804 120.905 42.7926 121.437Z\" />\n <path d=\"M3.90343 34.9369L6.20403 37.3352L9.6131 37.0182C10.3726 36.948 10.7767 37.8809 10.2222 38.3895L7.70169 40.7069L7.93748 44.0202C7.99146 44.7577 7.08853 45.1583 6.57636 44.6255L4.27576 42.2272L0.866695 42.5443C0.10716 42.6145 -0.296871 41.6815 0.257621 41.173L2.77811 38.8556L2.54231 35.5423C2.48833 34.8047 3.39127 34.4041 3.90343 34.9369Z\" />\n <path d=\"M61.9902 54.3898C67.5899 51.8715 74.1707 54.3694 76.6889 59.9689C79.2072 65.5686 76.7093 72.1494 71.1096 74.6677C65.51 77.186 58.9293 74.688 56.4109 69.0883C53.8927 63.4888 56.3906 56.908 61.9902 54.3898Z\" />\n <path d=\"M126.748 87.8674C127.603 89.7694 126.755 92.0048 124.852 92.8602C122.95 93.7156 120.715 92.8671 119.86 90.965C119.004 89.063 119.853 86.8276 121.755 85.9722C123.657 85.1168 125.892 85.9653 126.748 87.8674Z\" />\n </g>\n <path\n opacity=\"0.1\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M21.8571 92.9852C21.8756 92.923 21.933 92.88 21.998 92.88C22.0631 92.88 22.1204 92.923 22.139 92.9852C22.139 92.9852 22.3969 93.8498 22.6733 94.7771C23.1138 96.2544 24.2695 97.4101 25.7468 97.8506C26.6741 98.127 27.5387 98.3849 27.5387 98.3849C27.6009 98.4034 27.6439 98.4608 27.6439 98.5258C27.6439 98.5909 27.6009 98.6483 27.5387 98.6668C27.5387 98.6668 26.6741 98.9247 25.7468 99.2011C24.2695 99.6416 23.1138 100.797 22.6733 102.275C22.3969 103.202 22.139 104.066 22.139 104.066C22.1204 104.129 22.0631 104.172 21.998 104.172C21.933 104.172 21.8756 104.129 21.8571 104.066C21.8571 104.066 21.5992 103.202 21.3228 102.275C20.8823 100.797 19.7266 99.6416 18.2492 99.2011C17.3219 98.9247 16.4574 98.6668 16.4574 98.6668C16.3952 98.6483 16.3522 98.5909 16.3522 98.5258C16.3522 98.4608 16.3952 98.4034 16.4574 98.3849C16.4574 98.3849 17.3219 98.127 18.2492 97.8506C19.7266 97.4101 20.8823 96.2544 21.3228 94.7771C21.5992 93.8498 21.8571 92.9852 21.8571 92.9852Z\"\n fill=\"#6A28D9\"\n />\n <path\n opacity=\"0.1\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M10.0391 83.9089C10.0495 83.874 10.0816 83.85 10.118 83.85C10.1544 83.85 10.1866 83.874 10.1969 83.9089C10.1969 83.9089 10.3414 84.393 10.4962 84.9123C10.7429 85.7396 11.39 86.3868 12.2173 86.6335C12.7366 86.7883 13.2208 86.9327 13.2208 86.9327C13.2556 86.9431 13.2797 86.9752 13.2797 87.0116C13.2797 87.048 13.2556 87.0802 13.2208 87.0905C13.2208 87.0905 12.7366 87.235 12.2173 87.3898C11.39 87.6365 10.7429 88.2836 10.4962 89.1109C10.3414 89.6302 10.1969 90.1144 10.1969 90.1144C10.1866 90.1492 10.1544 90.1733 10.118 90.1733C10.0816 90.1733 10.0495 90.1492 10.0391 90.1144C10.0391 90.1144 9.89466 89.6302 9.73985 89.1109C9.49317 88.2836 8.846 87.6365 8.01869 87.3898C7.4994 87.235 7.01525 87.0905 7.01525 87.0905C6.9804 87.0802 6.95635 87.048 6.95635 87.0116C6.95635 86.9752 6.9804 86.9431 7.01525 86.9327C7.01525 86.9327 7.4994 86.7883 8.01869 86.6335C8.846 86.3868 9.49317 85.7396 9.73985 84.9123C9.89466 84.393 10.0391 83.9089 10.0391 83.9089Z\"\n fill=\"#6A28D9\"\n />\n <defs>\n <linearGradient\n id=\"consultation-booked-blob-gradient\"\n x1=\"88.9522\"\n y1=\"27.2458\"\n x2=\"26.2522\"\n y2=\"97.2058\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#CEC7FF\" />\n <stop offset=\"0.541706\" stopColor=\"#A2C8FF\" />\n <stop offset=\"1\" stopColor=\"white\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","/**\n * ConsultationBookedSection — the inline \"call booked\" confirmation block\n * (Figma 783:35723), for embedding at the top of a booking-confirmation page\n * rather than in a modal (compare `AstroConsultationSuccessModal`, which\n * shows the same `ConsultationDetailsCard` inside a dialog instead).\n *\n * Purely presentational: the host formats the date/time labels and owns the\n * \"Join Call\" action. The design's \"Join Call\" button is Code-Connect-mapped\n * to an Android Compose component (`org.a4b.tatva...TatvaButton`) in Figma —\n * not usable here, so it's rendered as a plain button matching this\n * package's existing CTA styling (see `PaymentResult`'s `.ctaBtn`).\n */\nimport React from 'react';\nimport {\n ConsultationDetailsCard,\n type ConsultationDetailsCardAstrologer,\n} from '../ConsultationDetailsCard';\nimport { BellIcon, CheckBadgeIcon, DecorativeBlobIcon, PhoneIcon } from './icons';\nimport styles from './ConsultationBookedSection.module.scss';\n\nexport type ConsultationBookedSectionAstrologer = ConsultationDetailsCardAstrologer;\n\nexport interface ConsultationBookedSectionProps {\n astrologer: ConsultationBookedSectionAstrologer;\n /** Booked call date, already formatted by the host, e.g. \"Friday, 25 August 2026\". */\n dateLabel: string;\n /** Booked call time range, already formatted, e.g. \"11:30 AM - 12:00 PM\". */\n timeRangeLabel: string;\n /** Renders the \"Join Call\" CTA when present. */\n onJoinCall?: () => void;\n /** Minutes-before-call figure in the reminder note. Defaults to 15. */\n reminderMinutesBefore?: number;\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n}\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport const ConsultationBookedSection: React.FC<ConsultationBookedSectionProps> = ({\n astrologer,\n dateLabel,\n timeRangeLabel,\n onJoinCall,\n reminderMinutesBefore = 15,\n t,\n className = '',\n}) => (\n <div className={cx(styles.root, className)}>\n <span className={styles.blob} aria-hidden=\"true\">\n <DecorativeBlobIcon />\n </span>\n\n <div className={styles.header}>\n <span className={styles.headerIcon}>\n <CheckBadgeIcon />\n </span>\n <p className={styles.headerText}>\n {t?.('consultationCallDetailsHeading') ?? 'Your astrology call details:'}\n </p>\n </div>\n\n <div className={styles.cardWrap}>\n <ConsultationDetailsCard\n className={styles.card}\n astrologer={astrologer}\n dateLabel={dateLabel}\n timeRangeLabel={timeRangeLabel}\n t={t}\n astrologerFooter={\n onJoinCall && (\n <button type=\"button\" className={styles.ctaBtn} onClick={onJoinCall}>\n <PhoneIcon />\n {t?.('consultationJoinCall') ?? 'Join Call'}\n </button>\n )\n }\n />\n </div>\n\n <div className={styles.reminder}>\n <span className={styles.reminderIcon}>\n <BellIcon />\n </span>\n <p className={styles.reminderText}>\n {t?.('consultationCallReminderNote', { minutes: reminderMinutesBefore }) ??\n `You will receive a notification ${reminderMinutesBefore} minutes before the call`}\n </p>\n </div>\n </div>\n);\n","/**\n * UnscheduledAstrologerList — the astrologer picker for a call that's already\n * included in the user's package but not yet scheduled (Figma 811:43546).\n * Radio-select over a horizontally scrollable row of cards, with a single\n * \"Schedule your call\" CTA in the footer once one is chosen.\n *\n * Purely presentational: the host owns selection state and the schedule\n * action. The design's CTA is Code-Connect-mapped to an Android Compose\n * component (`org.a4b.tatva...TatvaButton`) — not usable here, so it's\n * rendered as a plain button matching this package's existing CTA styling\n * (see `PaymentResult`'s `.ctaBtn`).\n */\nimport React from 'react';\nimport { ArrowRightIcon, IncludedCheckIcon } from './icons';\nimport { AstrologerPickerRow } from './AstrologerPickerRow';\nimport type { UnscheduledAstrologerListAstrologer } from './types';\nimport styles from './UnscheduledAstrologerList.module.scss';\n\nexport type { UnscheduledAstrologerListAstrologer } from './types';\n\nexport interface UnscheduledAstrologerListProps {\n astrologers: UnscheduledAstrologerListAstrologer[];\n selectedAstrologerId?: string;\n onSelectAstrologer?: (astrologer: UnscheduledAstrologerListAstrologer) => void;\n /** Fired when \"Schedule your call\" is tapped. */\n onScheduleCall?: () => void;\n /** Greys out the CTA, e.g. nothing selected yet. */\n ctaDisabled?: boolean;\n /** CTA label. Wins over `t(\"consultationScheduleCall\")`. */\n ctaLabel?: string;\n /**\n * Hides the title + \"Included in your package\" tag — for hosts that render\n * the picker inline under their own heading instead of as a standalone card.\n */\n hideHeader?: boolean;\n /**\n * Hides the \"Schedule your call\" footer button — for hosts with a single\n * page-level CTA instead of one scoped to this picker.\n */\n hideFooter?: boolean;\n /** Translation lookup; every string falls back to the English default. */\n t?: (key: string, options?: any) => string | undefined;\n className?: string;\n}\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport const UnscheduledAstrologerList: React.FC<UnscheduledAstrologerListProps> = ({\n astrologers,\n selectedAstrologerId,\n onSelectAstrologer,\n onScheduleCall,\n ctaDisabled = false,\n ctaLabel,\n hideHeader = false,\n hideFooter = false,\n t,\n className = '',\n}) => (\n <div className={cx(styles.root, className)}>\n <div className={styles.card}>\n {!hideHeader && (\n <div className={styles.header}>\n <p className={styles.title}>\n {t?.('consultationScheduleCallTitle') ?? 'Schedule your astrology call'}\n </p>\n <span className={styles.includedTag}>\n <span className={styles.includedIcon}>\n <IncludedCheckIcon />\n </span>\n <span className={styles.includedText}>\n {t?.('consultationIncludedInPackage') ?? 'Included in your package'}\n </span>\n </span>\n </div>\n )}\n\n <AstrologerPickerRow\n astrologers={astrologers}\n selectedAstrologerId={selectedAstrologerId}\n onSelectAstrologer={onSelectAstrologer}\n t={t}\n />\n\n {!hideFooter && (\n <div className={styles.footer}>\n <button\n type=\"button\"\n className={styles.ctaBtn}\n disabled={ctaDisabled}\n onClick={onScheduleCall}\n >\n {ctaLabel ?? t?.('consultationScheduleCall') ?? 'Schedule your call'}\n <ArrowRightIcon />\n </button>\n </div>\n )}\n </div>\n </div>\n);\n","/**\n * Placeholder shown while the host is still fetching the astrologers for\n * `UnscheduledAstrologerList` — mirrors its card shape (see\n * `UnscheduledAstrologerList.module.scss`) so the layout doesn't jump once\n * the real list swaps in.\n */\nimport React from 'react';\nimport styles from './UnscheduledAstrologerListSkeleton.module.scss';\n\nconst cx = (...classNames: (string | false | undefined)[]) =>\n classNames.filter(Boolean).join(' ');\n\nexport interface UnscheduledAstrologerListSkeletonProps {\n className?: string;\n}\n\nexport const UnscheduledAstrologerListSkeleton: React.FC<\n UnscheduledAstrologerListSkeletonProps\n> = ({ className = '' }) => (\n <div className={cx(styles.root, className)} aria-busy=\"true\" aria-live=\"polite\">\n <div className={styles.card}>\n <div className={styles.header}>\n <div className={cx(styles.title, styles.shimmer)} />\n <div className={cx(styles.tag, styles.shimmer)} />\n </div>\n\n <div className={styles.scrollRow}>\n {[0, 1, 2].map((i) => (\n <div key={i} className={styles.astrologerCard}>\n <div className={cx(styles.avatar, styles.shimmer)} />\n <div className={styles.meta}>\n <div className={cx(styles.name, styles.shimmer)} />\n <div className={cx(styles.subtitle, styles.shimmer)} />\n </div>\n </div>\n ))}\n </div>\n\n <div className={styles.footer}>\n <div className={cx(styles.ctaBtn, styles.shimmer)} />\n </div>\n </div>\n </div>\n);\n"],"names":["getAstrologerPriceSymbol","currencyCode","StarIcon","size","className","jsx","cx","classNames","formatRating","rating","AstrologerCard","astrologer","pricing","currencySymbol","onSelectSlot","disabled","ctaLabel","t","innerRef","name","photoUrl","languages","specialties","experienceYears","isPreviouslyConsulted","symbol","showRating","showExperience","languagesLabel","tags","hasMrp","hasDiscountPercent","content","jsxs","Fragment","styles","tag","ClockUnavailableIcon","SlotUnavailableNotice","message","IncludedCheckIcon","VerifiedBadgeIcon","ArrowRightIcon","AstrologerPickerRow","astrologers","selectedAstrologerId","onSelectAstrologer","ariaLabel","isSelected","RecommendedRibbon","ConsultationSlotSheet","isOpen","onClose","showCloseButton","inline","hideHeader","days","loading","error","onRetry","selectedDate","onDateSelect","selectedPeriod","onPeriodSelect","selectedSlotStart","onSlotSelect","onAstrologerSelect","phoneNumberSection","title","heading","iconUrl","icon","onCtaClick","ctaDisabled","isProcessing","errorMessage","isGlobal","badge","sheetTitle","headerContent","footerContent","bodyContent","ConsultationSlotSelector","BottomSheet","en","hi","kn","te","consultationDictionaries","isSupported","locale","WEEKDAYS","RELATIVE_DAY_OFFSETS","weekdayKeyFromNow","daysFromNow","date","createConsultationTranslate","overrides","base","resolve","k","key","options","template","BackIcon","CalendarClockIcon","PhoneIcon","PaymentResult","status","amount","bookingId","slotLabel","isLoading","onBack","onJoinCall","onBookSlotAgain","isBooked","ConsultationDetailsCard","dateLabel","timeRangeLabel","astrologerFooter","SuccessHeroIcon","MessageSquareIcon","AstroConsultationSuccessModal","CheckBadgeIcon","BellIcon","DecorativeBlobIcon","ConsultationBookedSection","reminderMinutesBefore","UnscheduledAstrologerList","onScheduleCall","hideFooter","UnscheduledAstrologerListSkeleton","i"],"mappings":"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"}
|