@healthcloudai/hc-components 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -0
- package/dist/index.cjs +19805 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +46 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.js +19878 -0
- package/dist/index.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../hc-components/_shared/src/index.ts","../../hc-components/_shared/src/theme.ts","../../hc-components/ab-appointment-confirmation/src/AbAppointmentConfirmation.tsx","../../hc-components/ab-appointment-confirmation/src/theme.ts","../../hc-components/ab-care-for-visitors/src/AbCareForVisitors.tsx","../../hc-components/ab-care-for-visitors/src/theme.ts","../../hc-components/ab-care-options/src/AbCareOptions.tsx","../../hc-components/ab-care-options/src/theme.ts","../../hc-components/ab-care-path-choice/src/AbCarePathChoice.tsx","../../hc-components/ab-care-path-choice/src/theme.ts","../../hc-components/ab-care-summary/src/AbCareSummary.tsx","../../hc-components/ab-care-summary/src/theme.ts","../../hc-components/ab-care-timeline/src/AbCareTimeline.tsx","../../hc-components/ab-care-timeline/src/theme.ts","../../hc-components/ab-coming-soon/src/AbComingSoon.tsx","../../hc-components/ab-coming-soon/src/theme.ts","../../hc-components/ab-connected-device/src/AbConnectedDevice.tsx","../../hc-components/ab-connected-device/src/theme.ts","../../hc-components/ab-connected-device-signals/src/AbConnectedDeviceSignals.tsx","../../hc-components/ab-connected-device-signals/src/theme.ts","../../hc-components/ab-coverage-summary/src/AbCoverageSummary.tsx","../../hc-components/ab-coverage-summary/src/theme.ts","../../hc-components/ab-device-connect-prompt/src/AbDeviceConnectPrompt.tsx","../../hc-components/ab-device-connect-prompt/src/theme.ts","../../hc-components/ab-educational-information/src/AbEducationalInformation.tsx","../../hc-components/ab-educational-information/src/theme.ts","../../hc-components/ab-emergency-escalation/src/AbEmergencyEscalation.tsx","../../hc-components/ab-emergency-escalation/src/theme.ts","../../hc-components/ab-estimated-cost/src/AbEstimatedCost.tsx","../../hc-components/ab-estimated-cost/src/theme.ts","../../hc-components/ab-follow-up-check-in/src/AbFollowUpCheckIn.tsx","../../hc-components/ab-follow-up-check-in/src/theme.ts","../../hc-components/ab-health-record-import-prompt/src/AbHealthRecordImportPrompt.tsx","../../hc-components/ab-health-record-import-prompt/src/theme.ts","../../hc-components/ab-id-captured/src/AbIdCaptured.tsx","../../hc-components/ab-id-captured/src/theme.ts","../../hc-components/ab-insurance-captured/src/AbInsuranceCaptured.tsx","../../hc-components/ab-insurance-captured/src/theme.ts","../../hc-components/ab-live-care-routing/src/AbLiveCareRouting.tsx","../../hc-components/ab-live-care-routing/src/theme.ts","../../hc-components/ab-medication/src/AbMedication.tsx","../../hc-components/ab-medication/src/theme.ts","../../hc-components/ab-medication-capture/src/AbMedicationCapture.tsx","../../hc-components/ab-medication-capture/src/theme.ts","../../hc-components/ab-medication-capture-suggestion/src/AbMedicationCaptureSuggestion.tsx","../../hc-components/ab-medication-capture-suggestion/src/theme.ts","../../hc-components/ab-medication-logged/src/AbMedicationLogged.tsx","../../hc-components/ab-medication-logged/src/theme.ts","../../hc-components/ab-medication-safety/src/AbMedicationSafety.tsx","../../hc-components/ab-medication-safety/src/theme.ts","../../hc-components/ab-nearby-care-site/src/AbNearbyCareSite.tsx","../../hc-components/ab-nearby-care-site/src/theme.ts","../../hc-components/ab-next-steps/src/AbNextSteps.tsx","../../hc-components/ab-next-steps/src/theme.ts","../../hc-components/ab-pharmacy-fullfilment/src/AbPharmacyFullfilment.tsx","../../hc-components/ab-pharmacy-fullfilment/src/theme.ts","../../hc-components/ab-pharmacy-options/src/AbPharmacyOptions.tsx","../../hc-components/ab-pharmacy-options/src/theme.ts","../../hc-components/ab-public-health-notice/src/AbPublicHealthNotice.tsx","../../hc-components/ab-public-health-notice/src/theme.ts","../../hc-components/ab-quest-follow-up/src/AbQuestFollowUp.tsx","../../hc-components/ab-quest-follow-up/src/theme.ts","../../hc-components/ab-recommended-care-path/src/AbRecommendedCarePath.tsx","../../hc-components/ab-recommended-care-path/src/theme.ts","../../hc-components/ab-recommended-care-plan/src/AbRecommendedCarePlan.tsx","../../hc-components/ab-recommended-care-plan/src/theme.ts","../../hc-components/ab-recommended-reason-list/src/AbRecommendedReasonList.tsx","../../hc-components/ab-recommended-reason-list/src/theme.ts","../../hc-components/ab-record-imported/src/AbRecordImported.tsx","../../hc-components/ab-record-imported/src/theme.ts","../../hc-components/ab-safecdx/src/AbSafecdx.tsx","../../hc-components/ab-safecdx/src/theme.ts","../../hc-components/ab-safecdx-result/src/AbSafecdxResult.tsx","../../hc-components/ab-safecdx-result/src/theme.ts","../../hc-components/ab-symptom-image-insight/src/AbSymptomImageInsight.tsx","../../hc-components/ab-symptom-image-insight/src/theme.ts","../../hc-components/ab-symptom-image-review/src/AbSymptomImageReview.tsx","../../hc-components/ab-symptom-image-review/src/theme.ts","../../hc-components/ab-symptom-photo/src/AbSymptomPhoto.tsx","../../hc-components/ab-symptom-photo/src/theme.ts","../../hc-components/ab-triage-result/src/AbTriageResult.tsx","../../hc-components/ab-triage-result/src/theme.ts","../../hc-components/ab-triage-summary/src/AbTriageSummary.tsx","../../hc-components/ab-triage-summary/src/theme.ts","../../hc-components/ab-what-happens-next/src/AbWhatHappensNext.tsx","../../hc-components/ab-what-happens-next/src/theme.ts","../../hc-components/social-auth/src/SocialAuth.tsx","../../hc-components/social-auth/src/GoogleAuthButton.tsx","../../hc-components/social-auth/src/AppleAuthButton.tsx","../../hc-components/social-auth/src/theme.ts","../../hc-components/ui-chat/src/UiChat.tsx","../../hc-components/ui-chat/src/theme.ts"],"sourcesContent":["export {\n defaultBaseTheme,\n tonePresets,\n radiusToPx,\n resolveBaseTheme,\n} from \"./theme\";\nexport type {\n BaseTheme,\n Tone,\n Mode,\n Density,\n Radius,\n Elevation,\n} from \"./theme\";\n\nexport type { Action, ActionIntent, ArtifactEnvelope } from \"./envelope\";\n","export type Tone = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\nexport type Mode = \"light\" | \"dark\";\nexport type Density = \"compact\" | \"comfortable\" | \"spacious\";\nexport type Radius = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\nexport type Elevation = \"none\" | \"sm\" | \"md\" | \"lg\";\n\nexport interface BaseTheme {\n tone: Tone;\n mode: Mode;\n accentColor: string;\n accentTextColor: string;\n surfaceColor: string;\n surfaceMutedColor: string;\n textColor: string;\n mutedTextColor: string;\n borderColor: string;\n iconColor: string;\n iconBackgroundColor: string;\n density: Density;\n radius: Radius;\n elevation: Elevation;\n fontFamily: string;\n padding: number;\n}\n\nexport const defaultBaseTheme: BaseTheme = {\n tone: \"neutral\",\n mode: \"light\",\n accentColor: \"#2F5DFF\",\n accentTextColor: \"#FFFFFF\",\n surfaceColor: \"#FFFFFF\",\n surfaceMutedColor: \"#F4F6FB\",\n textColor: \"#0B1220\",\n mutedTextColor: \"#5B6478\",\n borderColor: \"#E5E8EF\",\n iconColor: \"#2F5DFF\",\n iconBackgroundColor: \"#EAF1FF\",\n density: \"comfortable\",\n radius: \"lg\",\n elevation: \"sm\",\n fontFamily: \"Inter, system-ui, sans-serif\",\n padding: 20,\n};\n\nexport const tonePresets: Record<Tone, Partial<BaseTheme>> = {\n neutral: { accentColor: \"#5B6478\", iconBackgroundColor: \"#F0F2F7\" },\n info: { accentColor: \"#2F5DFF\", iconBackgroundColor: \"#EAF1FF\" },\n success: { accentColor: \"#0E9F6E\", iconBackgroundColor: \"#E5F7EF\" },\n warning: { accentColor: \"#B45309\", iconBackgroundColor: \"#FEF3C7\" },\n danger: { accentColor: \"#B91C1C\", iconBackgroundColor: \"#FEE2E2\" },\n};\n\nexport const radiusToPx: Record<Radius, number> = {\n sm: 6,\n md: 10,\n lg: 14,\n xl: 20,\n full: 9999,\n};\n\nexport function resolveBaseTheme(overrides?: Partial<BaseTheme>): BaseTheme {\n const tone = overrides?.tone ?? defaultBaseTheme.tone;\n return {\n ...defaultBaseTheme,\n ...tonePresets[tone],\n ...overrides,\n tone,\n };\n}\n","import React, { useMemo, useRef } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveAppointmentConfirmationTheme } from \"./theme\";\nimport type { AbAppointmentConfirmationProps } from \"./types\";\n\nconst DEFAULT_AVATAR_ICON = \"check\";\nconst DEFAULT_VISIT_ICON = \"activity\";\nconst DEFAULT_VERIFICATION_ICON = \"shield\";\nconst DEFAULT_CTA_ICON = \"calendar\";\n\nfunction renderBodyWithEmphasis(\n body: string,\n emphasisRanges: string[] | undefined,\n baseStyle: object,\n emphasisStyle: object,\n): React.ReactNode {\n if (!emphasisRanges || emphasisRanges.length === 0) return body;\n let segments: Array<{ text: string; emphasis: boolean }> = [\n { text: body, emphasis: false },\n ];\n for (const phrase of emphasisRanges) {\n if (!phrase) continue;\n const next: typeof segments = [];\n for (const seg of segments) {\n if (seg.emphasis) {\n next.push(seg);\n continue;\n }\n const text = seg.text;\n let cursor = 0;\n let idx = text.indexOf(phrase, cursor);\n while (idx !== -1) {\n if (idx > cursor) {\n next.push({\n text: text.slice(cursor, idx),\n emphasis: false,\n });\n }\n next.push({ text: phrase, emphasis: true });\n cursor = idx + phrase.length;\n idx = text.indexOf(phrase, cursor);\n }\n if (cursor < text.length) {\n next.push({ text: text.slice(cursor), emphasis: false });\n }\n }\n segments = next;\n }\n return segments.map((seg, i) => (\n <Text key={i} style={seg.emphasis ? emphasisStyle : baseStyle}>\n {seg.text}\n </Text>\n ));\n}\n\nexport function AbAppointmentConfirmation({\n data,\n theme,\n style,\n bodyEmphasisRanges,\n onAddToCalendar,\n}: AbAppointmentConfirmationProps) {\n const t = useMemo(\n () => resolveAppointmentConfirmationTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const avatarIcon = data.avatarIconName ?? DEFAULT_AVATAR_ICON;\n const visitIcon = data.visit.iconName ?? DEFAULT_VISIT_ICON;\n const verificationIcon =\n data.verification?.iconName ?? DEFAULT_VERIFICATION_ICON;\n const ctaIcon = data.cta?.iconName ?? DEFAULT_CTA_ICON;\n\n // One-shot latch on the CTA.\n const calendarFiredRef = useRef<boolean>(false);\n const handleAddToCalendar = () => {\n if (calendarFiredRef.current) return;\n calendarFiredRef.current = true;\n onAddToCalendar?.();\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n const baseBodyStyle = {\n color: t.bodyColor,\n fontFamily,\n fontSize: 13,\n lineHeight: 19,\n };\n const emphasisBodyStyle = {\n color: t.bodyEmphasisColor,\n fontFamily,\n fontSize: 13,\n lineHeight: 19,\n fontWeight: \"700\" as const,\n };\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <LinearGradient\n colors={t.accentBarColors as unknown as [string, string, string]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.accentBar,\n {\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View\n style={[\n styles.avatar,\n {\n backgroundColor: t.avatarBackgroundColor,\n borderColor: t.avatarBorderColor,\n borderRadius: t.avatarRadiusPx,\n },\n ]}\n >\n <Feather\n name={avatarIcon as never}\n size={20}\n color={t.avatarIconColor}\n />\n </View>\n <View style={styles.headerColumn}>\n <View style={styles.titleRow}>\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n {data.status ? (\n <View\n style={[\n styles.statusPill,\n {\n backgroundColor: t.statusPillBackgroundColor,\n borderColor: t.statusPillBorderColor,\n },\n ]}\n >\n <Text\n style={[\n styles.statusPillLabel,\n {\n color: t.statusPillForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.status.label}\n </Text>\n </View>\n ) : null}\n </View>\n {data.subtitle ? (\n <Text\n style={[\n styles.subtitle,\n { color: t.subtitleColor, fontFamily },\n ]}\n >\n {data.subtitle}\n </Text>\n ) : null}\n </View>\n </View>\n\n <View\n style={[\n styles.visitPanel,\n {\n backgroundColor: t.visitPanelBackgroundColor,\n borderColor: t.visitPanelBorderColor,\n borderRadius: t.visitPanelRadiusPx,\n },\n ]}\n >\n <View style={styles.visitTitleRow}>\n <Feather\n name={visitIcon as never}\n size={16}\n color={t.visitTitleIconColor}\n />\n <Text\n style={[\n styles.visitTitle,\n { color: t.visitTitleColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.visit.name}\n </Text>\n </View>\n <View style={styles.detailGrid}>\n {data.visit.details.map((detail) => (\n <View key={detail.id} style={styles.detailCell}>\n <View style={styles.detailLabelRow}>\n <Feather\n name={detail.iconName as never}\n size={12}\n color={t.detailLabelIconColor}\n />\n <Text\n style={[\n styles.detailLabel,\n { color: t.detailLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {detail.label}\n </Text>\n </View>\n <Text\n style={[\n styles.detailValue,\n { color: t.detailValueColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {detail.value}\n </Text>\n </View>\n ))}\n </View>\n </View>\n\n {data.verification ? (\n <View style={styles.verificationRow}>\n <Feather\n name={verificationIcon as never}\n size={14}\n color={t.verificationIconColor}\n />\n <Text\n style={[\n styles.verificationText,\n { color: t.verificationColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.verification.label}\n </Text>\n </View>\n ) : null}\n\n {data.body ? (\n <Text style={[baseBodyStyle, styles.bodyText]}>\n {renderBodyWithEmphasis(\n data.body,\n bodyEmphasisRanges,\n baseBodyStyle,\n emphasisBodyStyle,\n )}\n </Text>\n ) : null}\n\n {data.cta ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={handleAddToCalendar}\n style={({ pressed }) => [\n styles.cta,\n {\n backgroundColor: t.ctaBackgroundColor,\n borderRadius: t.ctaRadiusPx,\n opacity: pressed ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={ctaIcon as never}\n size={16}\n color={t.ctaIconColor}\n />\n <Text\n style={[\n styles.ctaLabel,\n { color: t.ctaForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.cta.label}\n </Text>\n </Pressable>\n ) : null}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 600,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 14,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n },\n avatar: {\n width: 40,\n height: 40,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderWidth: 1,\n },\n headerColumn: {\n flex: 1,\n gap: 4,\n },\n titleRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n flexWrap: \"wrap\",\n },\n title: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n },\n statusPill: {\n paddingHorizontal: 10,\n paddingVertical: 3,\n borderRadius: 999,\n borderWidth: 1.5,\n },\n statusPillLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1,\n },\n subtitle: {\n fontSize: 13,\n lineHeight: 18,\n },\n visitPanel: {\n paddingHorizontal: 14,\n paddingVertical: 14,\n borderWidth: 1,\n gap: 12,\n },\n visitTitleRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n visitTitle: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n detailGrid: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n rowGap: 12,\n },\n detailCell: {\n width: \"50%\",\n paddingRight: 8,\n gap: 4,\n },\n detailLabelRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n },\n detailLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1.1,\n textTransform: \"uppercase\",\n },\n detailValue: {\n fontSize: 14,\n fontWeight: \"700\",\n lineHeight: 20,\n },\n verificationRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n verificationText: {\n fontSize: 13,\n fontWeight: \"500\",\n flexShrink: 1,\n },\n bodyText: {\n marginTop: -2,\n },\n cta: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 10,\n paddingHorizontal: 18,\n paddingVertical: 14,\n marginTop: 4,\n },\n ctaLabel: {\n fontSize: 14,\n fontWeight: \"700\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbAppointmentConfirmation`. */\nexport interface AppointmentConfirmationTheme extends Partial<BaseTheme> {\n // Top accent bar (gradient)\n accentBarStartColor?: string;\n accentBarMidColor?: string;\n accentBarEndColor?: string;\n // Header avatar\n avatarBackgroundColor?: string;\n avatarBorderColor?: string;\n avatarIconColor?: string;\n // Header text\n titleColor?: string;\n subtitleColor?: string;\n // Status pill\n statusPillBackgroundColor?: string;\n statusPillBorderColor?: string;\n statusPillForegroundColor?: string;\n // Visit panel\n visitPanelBackgroundColor?: string;\n visitPanelBorderColor?: string;\n visitTitleColor?: string;\n visitTitleIconColor?: string;\n detailLabelColor?: string;\n detailLabelIconColor?: string;\n detailValueColor?: string;\n // Verification row\n verificationColor?: string;\n verificationIconColor?: string;\n // Body\n bodyColor?: string;\n bodyEmphasisColor?: string;\n // CTA\n ctaBackgroundColor?: string;\n ctaForegroundColor?: string;\n ctaIconColor?: string;\n // Radii\n cardRadius?: Radius;\n visitPanelRadius?: Radius;\n avatarRadius?: Radius;\n ctaRadius?: Radius;\n}\n\nexport interface ResolvedAppointmentConfirmationTheme {\n base: BaseTheme;\n accentBarColors: readonly [string, string, string];\n avatarBackgroundColor: string;\n avatarBorderColor: string;\n avatarIconColor: string;\n titleColor: string;\n subtitleColor: string;\n statusPillBackgroundColor: string;\n statusPillBorderColor: string;\n statusPillForegroundColor: string;\n visitPanelBackgroundColor: string;\n visitPanelBorderColor: string;\n visitTitleColor: string;\n visitTitleIconColor: string;\n detailLabelColor: string;\n detailLabelIconColor: string;\n detailValueColor: string;\n verificationColor: string;\n verificationIconColor: string;\n bodyColor: string;\n bodyEmphasisColor: string;\n ctaBackgroundColor: string;\n ctaForegroundColor: string;\n ctaIconColor: string;\n cardRadiusPx: number;\n visitPanelRadiusPx: number;\n avatarRadiusPx: number;\n ctaRadiusPx: number;\n}\n\nexport function resolveAppointmentConfirmationTheme(\n theme?: AppointmentConfirmationTheme,\n): ResolvedAppointmentConfirmationTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const visitPanelRadius: Radius =\n theme?.visitPanelRadius ?? base.radius ?? \"md\";\n const avatarRadius: Radius = theme?.avatarRadius ?? \"md\";\n const ctaRadius: Radius = theme?.ctaRadius ?? \"full\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n accentBarColors: [\n theme?.accentBarStartColor ?? \"#EF4444\",\n theme?.accentBarMidColor ?? \"#F59E0B\",\n theme?.accentBarEndColor ?? \"#3B82F6\",\n ] as const,\n avatarBackgroundColor:\n theme?.avatarBackgroundColor ?? \"#DCFCE7\",\n avatarBorderColor:\n theme?.avatarBorderColor ?? \"rgba(15, 23, 42, 0.04)\",\n avatarIconColor: theme?.avatarIconColor ?? \"#16A34A\",\n titleColor: theme?.titleColor ?? base.textColor,\n subtitleColor: theme?.subtitleColor ?? base.mutedTextColor,\n statusPillBackgroundColor:\n theme?.statusPillBackgroundColor ?? \"transparent\",\n statusPillBorderColor:\n theme?.statusPillBorderColor ?? \"#86EFAC\",\n statusPillForegroundColor:\n theme?.statusPillForegroundColor ?? \"#16A34A\",\n visitPanelBackgroundColor:\n theme?.visitPanelBackgroundColor ?? \"#FEF3C7\",\n visitPanelBorderColor:\n theme?.visitPanelBorderColor ?? \"transparent\",\n visitTitleColor: theme?.visitTitleColor ?? base.textColor,\n visitTitleIconColor:\n theme?.visitTitleIconColor ?? base.textColor,\n detailLabelColor:\n theme?.detailLabelColor ?? base.mutedTextColor,\n detailLabelIconColor:\n theme?.detailLabelIconColor ?? base.mutedTextColor,\n detailValueColor:\n theme?.detailValueColor ?? base.textColor,\n verificationColor:\n theme?.verificationColor ?? base.mutedTextColor,\n verificationIconColor:\n theme?.verificationIconColor ?? \"#16A34A\",\n bodyColor: theme?.bodyColor ?? base.mutedTextColor,\n bodyEmphasisColor:\n theme?.bodyEmphasisColor ?? base.textColor,\n ctaBackgroundColor: theme?.ctaBackgroundColor ?? \"#F1F5F9\",\n ctaForegroundColor:\n theme?.ctaForegroundColor ?? base.textColor,\n ctaIconColor: theme?.ctaIconColor ?? base.textColor,\n cardRadiusPx: radiusToPx[cardRadius],\n visitPanelRadiusPx: radiusToPx[visitPanelRadius],\n avatarRadiusPx: radiusToPx[avatarRadius],\n ctaRadiusPx: radiusToPx[ctaRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, StyleSheet, Text, View } from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\n\nimport { resolveCareForVisitorsTheme } from \"./theme\";\nimport type {\n CareForVisitorsBadge,\n CareForVisitorsItem,\n} from \"./payload\";\nimport type {\n AbCareForVisitorsProps,\n ResolvedCareForVisitorsTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"CARE FOR VISITORS\";\nconst DEFAULT_LANGUAGE_SEPARATOR = \" · \";\n\nexport function AbCareForVisitors({\n data,\n theme,\n style,\n}: AbCareForVisitorsProps) {\n const t = useMemo(\n () => resolveCareForVisitorsTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const footer = data.footer === null ? null : data.footer;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View style={styles.eyebrowRow}>\n <Feather name=\"zap\" size={14} color={t.eyebrowColor} />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n\n <Text\n style={[\n styles.heading,\n { color: t.headingColor, fontFamily },\n ]}\n >\n {data.heading}\n </Text>\n\n {data.subtitle ? (\n <Text\n style={[\n styles.subtitle,\n { color: t.subtitleColor, fontFamily },\n ]}\n >\n {data.subtitle}\n </Text>\n ) : null}\n\n <View style={styles.itemsList}>\n {data.items.map((item) => (\n <ItemRow key={item.id} item={item} theme={t} />\n ))}\n </View>\n\n {footer &&\n ((footer.languages && footer.languages.length > 0) ||\n (footer.badges && footer.badges.length > 0)) ? (\n <View style={styles.footerRow}>\n {footer.languages && footer.languages.length > 0 ? (\n <View\n style={[\n styles.languagePill,\n {\n backgroundColor: t.languagePill.background,\n borderColor: t.languagePill.border,\n borderRadius: t.pillRadiusPx,\n },\n ]}\n >\n <Text\n style={[\n styles.languagePillText,\n {\n color: t.languagePill.foreground,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {footer.languages.join(\n footer.languageSeparator ??\n DEFAULT_LANGUAGE_SEPARATOR,\n )}\n </Text>\n </View>\n ) : null}\n {footer.badges?.map((b) => (\n <BadgePill key={b.id} badge={b} theme={t} />\n ))}\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction ItemRow({\n item,\n theme: t,\n}: {\n item: CareForVisitorsItem;\n theme: ResolvedCareForVisitorsTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n return (\n <View style={styles.item}>\n <View\n style={[\n styles.itemIcon,\n {\n backgroundColor: t.itemIconBackgroundColor,\n borderRadius: t.itemIconRadiusPx,\n },\n ]}\n >\n {item.iconName ? (\n <Feather\n name={item.iconName as never}\n size={18}\n color={t.itemIconForegroundColor}\n />\n ) : null}\n </View>\n <View style={styles.itemText}>\n <Text\n style={[\n styles.itemTitle,\n { color: t.itemTitleColor, fontFamily },\n ]}\n >\n {item.title}\n </Text>\n <Text\n style={[\n styles.itemDescription,\n { color: t.itemDescriptionColor, fontFamily },\n ]}\n >\n {item.description}\n </Text>\n </View>\n </View>\n );\n}\n\nfunction BadgePill({\n badge,\n theme: t,\n}: {\n badge: CareForVisitorsBadge;\n theme: ResolvedCareForVisitorsTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n const tone = t.badgeTones[badge.tone ?? \"neutral\"];\n return (\n <View\n style={[\n styles.badge,\n {\n backgroundColor: tone.background,\n borderColor: tone.border,\n borderRadius: t.pillRadiusPx,\n },\n ]}\n >\n {badge.iconName ? (\n <Feather\n name={badge.iconName as never}\n size={12}\n color={tone.foreground}\n />\n ) : null}\n <Text\n style={[\n styles.badgeLabel,\n { color: tone.foreground, fontFamily },\n ]}\n numberOfLines={1}\n >\n {badge.label}\n </Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 560,\n borderWidth: 1,\n padding: 20,\n gap: 12,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n heading: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n },\n subtitle: {\n fontSize: 14,\n lineHeight: 20,\n },\n itemsList: {\n gap: 16,\n marginTop: 4,\n },\n item: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n },\n itemIcon: {\n width: 36,\n height: 36,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n itemText: {\n flex: 1,\n gap: 2,\n },\n itemTitle: {\n fontSize: 15,\n fontWeight: \"700\",\n lineHeight: 20,\n },\n itemDescription: {\n fontSize: 14,\n lineHeight: 20,\n },\n footerRow: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: 8,\n marginTop: 4,\n },\n languagePill: {\n paddingHorizontal: 14,\n paddingVertical: 7,\n borderWidth: 1,\n },\n languagePillText: {\n fontSize: 13,\n fontWeight: \"600\",\n letterSpacing: 0.6,\n },\n badge: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 4,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderWidth: 1,\n },\n badgeLabel: {\n fontSize: 13,\n fontWeight: \"600\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbCareForVisitors`. */\nexport interface CareForVisitorsTheme extends Partial<BaseTheme> {\n // Eyebrow\n eyebrowColor?: string;\n // Heading + subtitle\n headingColor?: string;\n subtitleColor?: string;\n // Bullet item icon tile (soft-blue tinted square)\n itemIconBackgroundColor?: string;\n itemIconForegroundColor?: string;\n // Bullet item text\n itemTitleColor?: string;\n itemDescriptionColor?: string;\n // Footer language pill\n languagePillBackgroundColor?: string;\n languagePillBorderColor?: string;\n languagePillTextColor?: string;\n // Footer badges (per tone)\n badgeSuccessBackgroundColor?: string;\n badgeSuccessBorderColor?: string;\n badgeSuccessForegroundColor?: string;\n badgeInfoBackgroundColor?: string;\n badgeInfoBorderColor?: string;\n badgeInfoForegroundColor?: string;\n badgeNeutralBackgroundColor?: string;\n badgeNeutralBorderColor?: string;\n badgeNeutralForegroundColor?: string;\n // Radii\n cardRadius?: Radius;\n itemIconRadius?: Radius;\n pillRadius?: Radius;\n}\n\nexport interface ResolvedToneColors {\n background: string;\n border: string;\n foreground: string;\n}\n\nexport interface ResolvedCareForVisitorsTheme {\n base: BaseTheme;\n eyebrowColor: string;\n headingColor: string;\n subtitleColor: string;\n itemIconBackgroundColor: string;\n itemIconForegroundColor: string;\n itemTitleColor: string;\n itemDescriptionColor: string;\n languagePill: ResolvedToneColors;\n badgeTones: {\n success: ResolvedToneColors;\n info: ResolvedToneColors;\n neutral: ResolvedToneColors;\n };\n cardRadiusPx: number;\n itemIconRadiusPx: number;\n pillRadiusPx: number;\n}\n\nexport function resolveCareForVisitorsTheme(\n theme?: CareForVisitorsTheme,\n): ResolvedCareForVisitorsTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const itemIconRadius: Radius = theme?.itemIconRadius ?? \"md\";\n const pillRadius: Radius = theme?.pillRadius ?? \"full\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n headingColor: theme?.headingColor ?? base.textColor,\n subtitleColor: theme?.subtitleColor ?? base.mutedTextColor,\n itemIconBackgroundColor:\n theme?.itemIconBackgroundColor ?? \"rgba(59, 130, 246, 0.12)\",\n itemIconForegroundColor:\n theme?.itemIconForegroundColor ?? \"#2563EB\",\n itemTitleColor: theme?.itemTitleColor ?? base.textColor,\n itemDescriptionColor:\n theme?.itemDescriptionColor ?? base.mutedTextColor,\n languagePill: {\n background:\n theme?.languagePillBackgroundColor ?? base.surfaceColor,\n border: theme?.languagePillBorderColor ?? base.borderColor,\n foreground: theme?.languagePillTextColor ?? base.textColor,\n },\n badgeTones: {\n success: {\n background:\n theme?.badgeSuccessBackgroundColor ??\n \"rgba(16, 185, 129, 0.08)\",\n border:\n theme?.badgeSuccessBorderColor ??\n \"rgba(16, 185, 129, 0.35)\",\n foreground:\n theme?.badgeSuccessForegroundColor ?? \"#059669\",\n },\n info: {\n background:\n theme?.badgeInfoBackgroundColor ??\n \"rgba(59, 130, 246, 0.10)\",\n border:\n theme?.badgeInfoBorderColor ?? \"rgba(59, 130, 246, 0.35)\",\n foreground: theme?.badgeInfoForegroundColor ?? \"#2563EB\",\n },\n neutral: {\n background:\n theme?.badgeNeutralBackgroundColor ?? base.surfaceColor,\n border: theme?.badgeNeutralBorderColor ?? base.borderColor,\n foreground:\n theme?.badgeNeutralForegroundColor ?? base.textColor,\n },\n },\n cardRadiusPx: radiusToPx[cardRadius],\n itemIconRadiusPx: radiusToPx[itemIconRadius],\n pillRadiusPx: radiusToPx[pillRadius],\n };\n}\n","import React, { useMemo, useState } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveCareOptionsTheme } from \"./theme\";\nimport type {\n CareOption,\n CareOptionDetail,\n CareOptionMeta,\n} from \"./payload\";\nimport type {\n AbCareOptionsProps,\n ResolvedCareOptionsTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"CARE OPTIONS\";\n\nfunction defaultShowMoreLabel(n: number) {\n return n === 1 ? \"Show 1 more option\" : `Show ${n} more options`;\n}\n\nexport function AbCareOptions({\n data,\n theme,\n style,\n onActionPress,\n}: AbCareOptionsProps) {\n const t = useMemo(() => resolveCareOptionsTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const matchLabel =\n data.matchLabel === null ? null : data.matchLabel;\n\n const initialExpanded = useMemo<Record<string, boolean>>(() => {\n const out: Record<string, boolean> = {};\n for (const o of data.options) {\n if (o.defaultExpanded) out[o.id] = true;\n }\n return out;\n }, [data.options]);\n const [expandedMap, setExpandedMap] = useState(initialExpanded);\n\n const total = data.options.length;\n const initialVisible =\n data.initialVisibleCount && data.initialVisibleCount < total\n ? data.initialVisibleCount\n : total;\n const [showAll, setShowAll] = useState(initialVisible >= total);\n const visibleCount = showAll ? total : initialVisible;\n const hiddenCount = Math.max(0, total - visibleCount);\n const showMoreLabel = data.showMoreLabel ?? defaultShowMoreLabel;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View style={styles.headerRow}>\n <View style={styles.eyebrowWrap}>\n <Feather\n name=\"activity\"\n size={14}\n color={t.eyebrowColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n {matchLabel ? (\n <Text\n style={[\n styles.matchLabel,\n { color: t.matchLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {matchLabel}\n </Text>\n ) : null}\n </View>\n\n <View style={styles.optionsList}>\n {data.options.slice(0, visibleCount).map((option) => (\n <OptionRow\n key={option.id}\n option={option}\n theme={t}\n expanded={!!expandedMap[option.id]}\n onToggle={() =>\n setExpandedMap((prev) => ({\n ...prev,\n [option.id]: !prev[option.id],\n }))\n }\n onActionPress={onActionPress}\n />\n ))}\n </View>\n\n {total > initialVisible ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => setShowAll((s) => !s)}\n style={({ pressed }) => [\n styles.toggleRow,\n { opacity: pressed ? 0.7 : 1 },\n ]}\n >\n <Feather\n name={showAll ? \"minus\" : \"plus\"}\n size={16}\n color={t.toggleColor}\n />\n <Text\n style={[\n styles.toggleLabel,\n { color: t.toggleColor, fontFamily },\n ]}\n >\n {showAll\n ? data.showLessLabel ?? \"Show less\"\n : showMoreLabel(hiddenCount)}\n </Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nfunction OptionRow({\n option,\n theme: t,\n expanded,\n onToggle,\n onActionPress,\n}: {\n option: CareOption;\n theme: ResolvedCareOptionsTheme;\n expanded: boolean;\n onToggle: () => void;\n onActionPress?: (actionId: string, optionId: string) => void;\n}) {\n const fontFamily = t.base.fontFamily;\n return (\n <View\n style={[\n styles.option,\n {\n backgroundColor: t.optionBackgroundColor,\n borderColor: t.optionBorderColor,\n borderRadius: t.optionRadiusPx,\n },\n ]}\n >\n <Pressable\n accessibilityRole=\"button\"\n onPress={onToggle}\n style={({ pressed }) => [\n styles.optionHeader,\n { opacity: pressed ? 0.85 : 1 },\n ]}\n >\n <LinearGradient\n colors={t.avatarGradient}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={[\n styles.avatar,\n { borderRadius: t.avatarRadiusPx },\n ]}\n >\n {option.iconName ? (\n <Feather\n name={option.iconName as never}\n size={20}\n color={t.avatarForegroundColor}\n />\n ) : null}\n </LinearGradient>\n\n <View style={styles.optionTextWrap}>\n <View style={styles.titleRow}>\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {option.title}\n </Text>\n {option.badge ? (\n <View\n style={[\n styles.badge,\n {\n backgroundColor: t.badgeBackgroundColor,\n borderColor: t.badgeBorderColor,\n borderRadius: t.badgeRadiusPx,\n },\n ]}\n >\n {option.badge.iconName ? (\n <Feather\n name={option.badge.iconName as never}\n size={12}\n color={t.badgeForegroundColor}\n />\n ) : null}\n <Text\n style={[\n styles.badgeLabel,\n {\n color: t.badgeForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {option.badge.label}\n </Text>\n </View>\n ) : null}\n </View>\n\n {option.meta && option.meta.length > 0 ? (\n <View style={styles.metaRow}>\n {option.meta.map((m) => (\n <MetaChip key={m.id} meta={m} theme={t} />\n ))}\n </View>\n ) : null}\n </View>\n\n <Feather\n name={expanded ? \"chevron-up\" : \"chevron-down\"}\n size={20}\n color={t.chevronColor}\n />\n </Pressable>\n\n {expanded ? (\n <View style={styles.expandedBody}>\n {option.description ? (\n <Text\n style={[\n styles.description,\n { color: t.descriptionColor, fontFamily },\n ]}\n >\n {option.description}\n </Text>\n ) : null}\n\n {option.details && option.details.length > 0 ? (\n <View style={styles.detailsGrid}>\n {option.details.map((d) => (\n <DetailCell key={d.id} detail={d} theme={t} />\n ))}\n </View>\n ) : null}\n\n {option.action ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() =>\n onActionPress?.(option.action!.id, option.id)\n }\n style={({ pressed }) => [\n styles.ctaWrap,\n { opacity: pressed ? 0.9 : 1 },\n ]}\n >\n <LinearGradient\n colors={t.ctaGradient}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.cta,\n { borderRadius: t.ctaRadiusPx },\n ]}\n >\n <Text\n style={[\n styles.ctaLabel,\n { color: t.ctaForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {option.action.label}\n </Text>\n {option.action.iconName ? (\n <Feather\n name={option.action.iconName as never}\n size={16}\n color={t.ctaForegroundColor}\n />\n ) : null}\n </LinearGradient>\n </Pressable>\n ) : null}\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction MetaChip({\n meta,\n theme: t,\n}: {\n meta: CareOptionMeta;\n theme: ResolvedCareOptionsTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n return (\n <View style={styles.metaChip}>\n {meta.iconName ? (\n <Feather\n name={meta.iconName as never}\n size={13}\n color={t.metaIconColor}\n />\n ) : null}\n <Text\n style={[\n styles.metaText,\n { color: t.metaTextColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {meta.text}\n </Text>\n </View>\n );\n}\n\nfunction DetailCell({\n detail,\n theme: t,\n}: {\n detail: CareOptionDetail;\n theme: ResolvedCareOptionsTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n return (\n <View style={styles.detailCell}>\n {detail.iconName ? (\n <Feather\n name={detail.iconName as never}\n size={14}\n color={t.detailIconColor}\n />\n ) : null}\n <Text\n style={[\n styles.detailText,\n { color: t.detailTextColor, fontFamily },\n ]}\n >\n {detail.text}\n </Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 560,\n borderWidth: 1,\n padding: 16,\n gap: 12,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n },\n eyebrowWrap: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n matchLabel: {\n fontSize: 13,\n },\n optionsList: {\n gap: 12,\n },\n option: {\n borderWidth: 1,\n padding: 14,\n gap: 12,\n },\n optionHeader: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n },\n avatar: {\n width: 44,\n height: 44,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n optionTextWrap: {\n flex: 1,\n gap: 6,\n },\n titleRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexWrap: \"wrap\",\n },\n title: {\n fontSize: 16,\n fontWeight: \"700\",\n flexShrink: 1,\n },\n badge: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 4,\n paddingHorizontal: 10,\n paddingVertical: 3,\n borderWidth: 1,\n },\n badgeLabel: {\n fontSize: 12,\n fontWeight: \"600\",\n },\n metaRow: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n gap: 12,\n },\n metaChip: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 4,\n },\n metaText: {\n fontSize: 13,\n },\n expandedBody: {\n gap: 12,\n paddingLeft: 56,\n },\n description: {\n fontSize: 15,\n lineHeight: 22,\n },\n detailsGrid: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n rowGap: 8,\n },\n detailCell: {\n width: \"50%\",\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 6,\n paddingRight: 8,\n },\n detailText: {\n flex: 1,\n fontSize: 13,\n lineHeight: 18,\n },\n ctaWrap: {\n alignSelf: \"flex-start\",\n marginTop: 4,\n },\n cta: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n paddingHorizontal: 24,\n paddingVertical: 12,\n },\n ctaLabel: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n toggleRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingVertical: 10,\n },\n toggleLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbCareOptions`. */\nexport interface CareOptionsTheme extends Partial<BaseTheme> {\n // Eyebrow + match label\n eyebrowColor?: string;\n matchLabelColor?: string;\n // Option row surface\n optionBackgroundColor?: string;\n optionBorderColor?: string;\n // Avatar tile (gradient)\n avatarGradientStart?: string;\n avatarGradientEnd?: string;\n avatarForegroundColor?: string;\n // Title row\n titleColor?: string;\n badgeBackgroundColor?: string;\n badgeForegroundColor?: string;\n badgeBorderColor?: string;\n chevronColor?: string;\n // Meta row\n metaIconColor?: string;\n metaTextColor?: string;\n // Description + details\n descriptionColor?: string;\n detailIconColor?: string;\n detailTextColor?: string;\n // CTA (gradient pill button)\n ctaGradientStart?: string;\n ctaGradientEnd?: string;\n ctaForegroundColor?: string;\n // Footer toggle\n toggleColor?: string;\n // Radii\n cardRadius?: Radius;\n optionRadius?: Radius;\n avatarRadius?: Radius;\n badgeRadius?: Radius;\n ctaRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the card internals. */\nexport interface ResolvedCareOptionsTheme {\n base: BaseTheme;\n eyebrowColor: string;\n matchLabelColor: string;\n optionBackgroundColor: string;\n optionBorderColor: string;\n avatarGradient: [string, string];\n avatarForegroundColor: string;\n titleColor: string;\n badgeBackgroundColor: string;\n badgeForegroundColor: string;\n badgeBorderColor: string;\n chevronColor: string;\n metaIconColor: string;\n metaTextColor: string;\n descriptionColor: string;\n detailIconColor: string;\n detailTextColor: string;\n ctaGradient: [string, string];\n ctaForegroundColor: string;\n toggleColor: string;\n cardRadiusPx: number;\n optionRadiusPx: number;\n avatarRadiusPx: number;\n badgeRadiusPx: number;\n ctaRadiusPx: number;\n}\n\nexport function resolveCareOptionsTheme(\n theme?: CareOptionsTheme,\n): ResolvedCareOptionsTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius =\n theme?.cardRadius ?? base.radius ?? \"lg\";\n const optionRadius: Radius = theme?.optionRadius ?? \"lg\";\n const avatarRadius: Radius = theme?.avatarRadius ?? \"full\";\n const badgeRadius: Radius = theme?.badgeRadius ?? \"full\";\n const ctaRadius: Radius = theme?.ctaRadius ?? \"full\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n matchLabelColor: theme?.matchLabelColor ?? base.mutedTextColor,\n optionBackgroundColor:\n theme?.optionBackgroundColor ?? base.surfaceColor,\n optionBorderColor:\n theme?.optionBorderColor ?? base.borderColor,\n avatarGradient: [\n theme?.avatarGradientStart ?? \"#FB923C\",\n theme?.avatarGradientEnd ?? \"#EC4899\",\n ],\n avatarForegroundColor:\n theme?.avatarForegroundColor ?? \"#FFFFFF\",\n titleColor: theme?.titleColor ?? base.textColor,\n badgeBackgroundColor:\n theme?.badgeBackgroundColor ?? \"rgba(59, 130, 246, 0.1)\",\n badgeForegroundColor:\n theme?.badgeForegroundColor ?? \"#2563EB\",\n badgeBorderColor:\n theme?.badgeBorderColor ?? \"rgba(59, 130, 246, 0.2)\",\n chevronColor: theme?.chevronColor ?? base.mutedTextColor,\n metaIconColor: theme?.metaIconColor ?? base.mutedTextColor,\n metaTextColor: theme?.metaTextColor ?? base.mutedTextColor,\n descriptionColor:\n theme?.descriptionColor ?? base.textColor,\n detailIconColor:\n theme?.detailIconColor ?? base.mutedTextColor,\n detailTextColor:\n theme?.detailTextColor ?? base.mutedTextColor,\n ctaGradient: [\n theme?.ctaGradientStart ?? \"#FB923C\",\n theme?.ctaGradientEnd ?? \"#EC4899\",\n ],\n ctaForegroundColor: theme?.ctaForegroundColor ?? \"#FFFFFF\",\n toggleColor: theme?.toggleColor ?? base.textColor,\n cardRadiusPx: radiusToPx[cardRadius],\n optionRadiusPx: radiusToPx[optionRadius],\n avatarRadiusPx: radiusToPx[avatarRadius],\n badgeRadiusPx: radiusToPx[badgeRadius],\n ctaRadiusPx: radiusToPx[ctaRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, Pressable, StyleSheet, Text, View } from \"react-native\";\nimport {\n Feather,\n Ionicons,\n MaterialCommunityIcons,\n MaterialIcons,\n} from \"@expo/vector-icons\";\n\nimport { resolveCarePathChoiceTheme } from \"./theme\";\nimport type {\n CarePathOption,\n CarePathOptionIconFamily,\n CarePathOptionIconKind,\n} from \"./payload\";\nimport type {\n AbCarePathChoiceProps,\n ResolvedCarePathChoiceTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"PICK HOW YOU'D LIKE TO BE SEEN\";\n\ninterface IconSpec {\n family: CarePathOptionIconFamily;\n name: string;\n}\n\nconst KIND_ICON: Record<Exclude<CarePathOptionIconKind, \"custom\">, IconSpec> = {\n telehealth: { family: \"Feather\", name: \"video\" },\n \"in-person\": { family: \"MaterialCommunityIcons\", name: \"office-building\" },\n};\n\nfunction renderIcon(\n family: CarePathOptionIconFamily,\n name: string,\n size: number,\n color: string,\n) {\n switch (family) {\n case \"Feather\":\n // The vector-icon name unions are wide string-literal sets; allow any\n // valid icon name from the chosen family without re-typing them all.\n return <Feather name={name as never} size={size} color={color} />;\n case \"Ionicons\":\n return <Ionicons name={name as never} size={size} color={color} />;\n case \"MaterialIcons\":\n return <MaterialIcons name={name as never} size={size} color={color} />;\n case \"MaterialCommunityIcons\":\n default:\n return (\n <MaterialCommunityIcons\n name={name as never}\n size={size}\n color={color}\n />\n );\n }\n}\n\nexport function AbCarePathChoice({\n data,\n theme,\n onSelect,\n style,\n}: AbCarePathChoiceProps) {\n const t = useMemo(() => resolveCarePathChoiceTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View\n style={[\n styles.accentBar,\n {\n backgroundColor: t.accentBarColor,\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <MaterialCommunityIcons\n name=\"stethoscope\"\n size={18}\n color={t.base.mutedTextColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.base.mutedTextColor, fontFamily },\n ]}\n >\n {eyebrow}\n </Text>\n </View>\n\n <Text\n style={[\n styles.bodyText,\n { color: t.bodyTextColor, fontFamily },\n ]}\n >\n {data.body}\n </Text>\n\n <View style={styles.optionGrid}>\n {data.options.map((option) => (\n <OptionCard\n key={option.id}\n option={option}\n theme={t}\n onSelect={onSelect}\n />\n ))}\n </View>\n </View>\n </View>\n );\n}\n\nfunction OptionCard({\n option,\n theme: t,\n onSelect,\n}: {\n option: CarePathOption;\n theme: ResolvedCarePathChoiceTheme;\n onSelect?: (option: CarePathOption) => void;\n}) {\n const fontFamily = t.base.fontFamily;\n const kind = option.kind ?? \"custom\";\n const tileSkin = t.iconKindStyles[kind];\n const tileBg = option.iconBackgroundColor ?? tileSkin.backgroundColor;\n const tileFg = option.iconColor ?? tileSkin.foregroundColor;\n\n const iconSpec: IconSpec | undefined =\n kind !== \"custom\"\n ? KIND_ICON[kind]\n : option.iconName && option.iconFamily\n ? { family: option.iconFamily, name: option.iconName }\n : undefined;\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`${option.title}. ${option.description}`}\n onPress={onSelect ? () => onSelect(option) : undefined}\n style={({ pressed }) => [\n styles.optionCard,\n {\n backgroundColor: t.optionCardBackgroundColor,\n borderColor: t.optionCardBorderColor,\n borderRadius: t.optionCardRadiusPx,\n opacity: pressed ? 0.85 : 1,\n },\n ]}\n >\n <View\n style={[\n styles.iconTile,\n {\n backgroundColor: tileBg,\n borderRadius: t.iconTileRadiusPx,\n },\n ]}\n >\n {iconSpec ? renderIcon(iconSpec.family, iconSpec.name, 22, tileFg) : null}\n </View>\n\n <Text\n style={[\n styles.optionTitle,\n { color: t.optionTitleColor, fontFamily },\n ]}\n >\n {option.title}\n </Text>\n <Text\n style={[\n styles.optionDescription,\n { color: t.optionDescriptionColor, fontFamily },\n ]}\n >\n {option.description}\n </Text>\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 520,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 20,\n gap: 14,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n bodyText: {\n fontSize: 15,\n lineHeight: 22,\n fontWeight: \"400\",\n },\n optionGrid: {\n flexDirection: \"row\",\n gap: 12,\n marginTop: 4,\n },\n optionCard: {\n flex: 1,\n borderWidth: 1,\n padding: 14,\n gap: 8,\n },\n iconTile: {\n width: 40,\n height: 40,\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: 4,\n },\n optionTitle: {\n fontSize: 16,\n fontWeight: \"700\",\n lineHeight: 21,\n },\n optionDescription: {\n fontSize: 14,\n lineHeight: 20,\n fontWeight: \"400\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { CarePathOptionIconKind } from \"./payload\";\n\n/** Background + foreground color pair for an option's icon tile. */\nexport interface IconTileSkin {\n backgroundColor: string;\n foregroundColor: string;\n}\n\n/**\n * Theme overrides for `AbCarePathChoice`.\n *\n * Extends `Partial<BaseTheme>` so callers can pass `tone`, `mode`, etc. and\n * get the shared cascading behavior, then layers component-specific keys\n * for the option cards and icon tiles.\n */\nexport interface CarePathChoiceTheme extends Partial<BaseTheme> {\n /** Color of the thin accent bar across the top of the card. */\n accentBarColor?: string;\n /** Color of the body intro paragraph. */\n bodyTextColor?: string;\n /** Background of each option card. */\n optionCardBackgroundColor?: string;\n /** Border of each option card. */\n optionCardBorderColor?: string;\n /** Option card corner radius token. Defaults to \"md\". */\n optionCardRadius?: Radius;\n /** Option title color. */\n optionTitleColor?: string;\n /** Option description color. */\n optionDescriptionColor?: string;\n /** Icon tile corner radius token. Defaults to \"md\". */\n iconTileRadius?: Radius;\n /**\n * Per-kind icon tile color presets. Merged on top of defaults. The\n * `\"custom\"` entry is used as a fallback when an option has no overrides.\n */\n iconKindStyles?: Partial<Record<CarePathOptionIconKind, Partial<IconTileSkin>>>;\n /** Card corner radius token. Defaults to \"lg\". */\n cardRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the card internals. */\nexport interface ResolvedCarePathChoiceTheme {\n base: BaseTheme;\n accentBarColor: string;\n bodyTextColor: string;\n optionCardBackgroundColor: string;\n optionCardBorderColor: string;\n optionCardRadiusPx: number;\n optionTitleColor: string;\n optionDescriptionColor: string;\n iconTileRadiusPx: number;\n iconKindStyles: Record<CarePathOptionIconKind, IconTileSkin>;\n cardRadiusPx: number;\n}\n\nconst defaultIconKindStyles: Record<CarePathOptionIconKind, IconTileSkin> = {\n telehealth: { backgroundColor: \"#7C5CFF\", foregroundColor: \"#FFFFFF\" },\n \"in-person\": { backgroundColor: \"#1FB082\", foregroundColor: \"#FFFFFF\" },\n custom: { backgroundColor: \"#2F5DFF\", foregroundColor: \"#FFFFFF\" },\n};\n\nexport function resolveCarePathChoiceTheme(\n theme?: CarePathChoiceTheme,\n): ResolvedCarePathChoiceTheme {\n const base = resolveBaseTheme(theme);\n const cardRadius: Radius = theme?.cardRadius ?? \"lg\";\n const optionCardRadius: Radius = theme?.optionCardRadius ?? \"md\";\n const iconTileRadius: Radius = theme?.iconTileRadius ?? \"md\";\n\n const overrides = theme?.iconKindStyles ?? {};\n const iconKindStyles: Record<CarePathOptionIconKind, IconTileSkin> = {\n telehealth: {\n ...defaultIconKindStyles.telehealth,\n ...(overrides.telehealth ?? {}),\n },\n \"in-person\": {\n ...defaultIconKindStyles[\"in-person\"],\n ...(overrides[\"in-person\"] ?? {}),\n },\n custom: {\n ...defaultIconKindStyles.custom,\n ...(overrides.custom ?? {}),\n },\n };\n\n // Cascade: explicit theme override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n accentBarColor: theme?.accentBarColor ?? base.accentColor,\n bodyTextColor: theme?.bodyTextColor ?? base.textColor,\n optionCardBackgroundColor:\n theme?.optionCardBackgroundColor ?? base.surfaceColor,\n optionCardBorderColor: theme?.optionCardBorderColor ?? base.borderColor,\n optionCardRadiusPx: radiusToPx[optionCardRadius],\n optionTitleColor: theme?.optionTitleColor ?? base.textColor,\n optionDescriptionColor:\n theme?.optionDescriptionColor ?? base.mutedTextColor,\n iconTileRadiusPx: radiusToPx[iconTileRadius],\n iconKindStyles,\n cardRadiusPx: radiusToPx[cardRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, Pressable, StyleSheet, Text, View } from \"react-native\";\nimport {\n Feather,\n Ionicons,\n MaterialCommunityIcons,\n MaterialIcons,\n} from \"@expo/vector-icons\";\n\nimport { resolveCareSummaryTheme } from \"./theme\";\nimport type {\n CareSummaryAction,\n CareSummaryActionVariant,\n CareSummaryIconFamily,\n CareSummarySection,\n} from \"./payload\";\nimport type {\n AbCareSummaryProps,\n ResolvedCareSummaryTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"PERSONALIZED CARE SUMMARY\";\n\nfunction renderIcon(\n family: CareSummaryIconFamily,\n name: string,\n size: number,\n color: string,\n) {\n switch (family) {\n case \"Feather\":\n return <Feather name={name as never} size={size} color={color} />;\n case \"Ionicons\":\n return <Ionicons name={name as never} size={size} color={color} />;\n case \"MaterialIcons\":\n return <MaterialIcons name={name as never} size={size} color={color} />;\n case \"MaterialCommunityIcons\":\n default:\n return (\n <MaterialCommunityIcons\n name={name as never}\n size={size}\n color={color}\n />\n );\n }\n}\n\nexport function AbCareSummary({\n data,\n theme,\n onAction,\n onLanguagePress,\n style,\n}: AbCareSummaryProps) {\n const t = useMemo(\n () => resolveCareSummaryTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n const metaParts: string[] = [];\n if (data.reference) metaParts.push(data.reference);\n if (data.generatedAt) metaParts.push(`generated ${data.generatedAt}`);\n const metaLine = metaParts.join(\" · \");\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View\n style={[\n styles.accentBar,\n {\n backgroundColor: t.accentBarColor,\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.eyebrowRow}>\n <View style={styles.eyebrowGroup}>\n <Feather\n name=\"file-text\"\n size={16}\n color={t.base.mutedTextColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.base.mutedTextColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n\n {data.language ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Language: ${data.language.label}`}\n onPress={onLanguagePress}\n style={({ pressed }) => [\n styles.languagePill,\n {\n backgroundColor: t.languagePillBackgroundColor,\n opacity: pressed ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name=\"globe\"\n size={14}\n color={t.languagePillForegroundColor}\n />\n <Text\n style={[\n styles.languageLabel,\n { color: t.languagePillForegroundColor, fontFamily },\n ]}\n >\n {data.language.label}\n </Text>\n </Pressable>\n ) : null}\n </View>\n\n <Text\n style={[\n styles.headline,\n { color: t.base.textColor, fontFamily },\n ]}\n >\n {data.headline}\n </Text>\n\n {metaLine ? (\n <View style={styles.metaRow}>\n <Feather name=\"hash\" size={14} color={t.metaTextColor} />\n <Text\n style={[\n styles.metaText,\n { color: t.metaTextColor, fontFamily },\n ]}\n >\n {metaLine}\n </Text>\n </View>\n ) : null}\n\n <View style={styles.sections}>\n {data.sections.map((section) => (\n <SectionTile key={section.id} section={section} theme={t} />\n ))}\n </View>\n\n {data.actions && data.actions.length > 0 ? (\n <View style={styles.actionsRow}>\n {data.actions.map((action) => (\n <ActionButton\n key={action.id}\n action={action}\n theme={t}\n onPress={onAction}\n />\n ))}\n </View>\n ) : null}\n\n {data.disclaimer ? (\n <Text\n style={[\n styles.disclaimer,\n { color: t.disclaimerColor, fontFamily },\n ]}\n >\n {data.disclaimer}\n </Text>\n ) : null}\n </View>\n </View>\n );\n}\n\nfunction SectionTile({\n section,\n theme: t,\n}: {\n section: CareSummarySection;\n theme: ResolvedCareSummaryTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n const isList = Array.isArray(section.content);\n\n return (\n <View\n style={[\n styles.section,\n {\n backgroundColor: t.sectionBackgroundColor,\n borderColor: t.sectionBorderColor,\n borderRadius: t.sectionRadiusPx,\n },\n ]}\n >\n <Text\n style={[\n styles.sectionLabel,\n { color: t.sectionLabelColor, fontFamily },\n ]}\n >\n {section.label}\n </Text>\n {isList ? (\n <View style={styles.bulletList}>\n {(section.content as string[]).map((item, idx) => (\n <Text\n key={`${section.id}-${idx}`}\n style={[\n styles.bulletItem,\n { color: t.sectionContentColor, fontFamily },\n ]}\n >\n {`\\u00B7 ${item}`}\n </Text>\n ))}\n </View>\n ) : (\n <Text\n style={[\n styles.sectionBody,\n { color: t.sectionContentColor, fontFamily },\n ]}\n >\n {section.content as string}\n </Text>\n )}\n </View>\n );\n}\n\nconst VARIANT_DEFAULT: CareSummaryActionVariant = \"outline\";\n\nfunction ActionButton({\n action,\n theme: t,\n onPress,\n}: {\n action: CareSummaryAction;\n theme: ResolvedCareSummaryTheme;\n onPress?: (action: CareSummaryAction) => void;\n}) {\n const fontFamily = t.base.fontFamily;\n const variant = action.variant ?? VARIANT_DEFAULT;\n const family = action.iconFamily ?? \"Feather\";\n\n const isPrimary = variant === \"primary\";\n const isIconOnly = variant === \"icon\";\n\n const bg = isPrimary\n ? t.primaryButtonBackgroundColor\n : t.outlineButtonBackgroundColor;\n const fg = isPrimary\n ? t.primaryButtonForegroundColor\n : t.outlineButtonForegroundColor;\n const borderColor = isPrimary\n ? \"transparent\"\n : t.outlineButtonBorderColor;\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={action.label ?? action.iconName ?? action.id}\n onPress={onPress ? () => onPress(action) : undefined}\n style={({ pressed }) => [\n styles.actionButtonBase,\n isIconOnly ? styles.actionButtonIcon : styles.actionButtonGrow,\n {\n backgroundColor: bg,\n borderColor,\n borderRadius: t.buttonRadiusPx,\n opacity: pressed ? 0.9 : 1,\n },\n ]}\n >\n {action.iconName\n ? renderIcon(family, action.iconName, 18, fg)\n : null}\n {!isIconOnly && action.label ? (\n <Text\n style={[\n styles.actionButtonLabel,\n { color: fg, fontFamily },\n ]}\n >\n {action.label}\n </Text>\n ) : null}\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 520,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 20,\n gap: 12,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n },\n eyebrowGroup: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n languagePill: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 9999,\n },\n languageLabel: {\n fontSize: 13,\n fontWeight: \"600\",\n },\n headline: {\n fontSize: 20,\n fontWeight: \"700\",\n lineHeight: 26,\n },\n metaRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n },\n metaText: {\n fontSize: 13,\n fontWeight: \"500\",\n },\n sections: {\n gap: 10,\n marginTop: 4,\n },\n section: {\n borderWidth: 1,\n padding: 12,\n gap: 4,\n },\n sectionLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1.1,\n textTransform: \"uppercase\",\n },\n sectionBody: {\n fontSize: 15,\n lineHeight: 22,\n fontWeight: \"500\",\n },\n bulletList: {\n gap: 2,\n },\n bulletItem: {\n fontSize: 15,\n lineHeight: 22,\n fontWeight: \"500\",\n },\n actionsRow: {\n flexDirection: \"row\",\n alignItems: \"stretch\",\n gap: 10,\n marginTop: 6,\n },\n actionButtonBase: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n borderWidth: 1,\n paddingVertical: 12,\n },\n actionButtonGrow: {\n flex: 1,\n paddingHorizontal: 14,\n },\n actionButtonIcon: {\n width: 44,\n paddingHorizontal: 0,\n },\n actionButtonLabel: {\n fontSize: 15,\n fontWeight: \"600\",\n },\n disclaimer: {\n fontSize: 13,\n lineHeight: 18,\n marginTop: 4,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/**\n * Theme overrides for `AbCareSummary`.\n *\n * Extends `Partial<BaseTheme>` so callers can pass `tone`, `mode`, etc. and\n * get the shared cascading behavior, then layers component-specific keys.\n */\nexport interface CareSummaryTheme extends Partial<BaseTheme> {\n /** Color of the thin accent bar across the top of the card. */\n accentBarColor?: string;\n /** Language pill background + foreground. */\n languagePillBackgroundColor?: string;\n languagePillForegroundColor?: string;\n /** Meta row text/icon color (reference + generatedAt). */\n metaTextColor?: string;\n /** Section panel surface + border colors. */\n sectionBackgroundColor?: string;\n sectionBorderColor?: string;\n /** Section radius token. Defaults to \"md\". */\n sectionRadius?: Radius;\n /** Section label (eyebrow) color. */\n sectionLabelColor?: string;\n /** Section body text color. */\n sectionContentColor?: string;\n /** Primary button palette. */\n primaryButtonBackgroundColor?: string;\n primaryButtonForegroundColor?: string;\n /** Outline button palette. */\n outlineButtonBackgroundColor?: string;\n outlineButtonForegroundColor?: string;\n outlineButtonBorderColor?: string;\n /** Disclaimer text color. */\n disclaimerColor?: string;\n /** Radius tokens. */\n cardRadius?: Radius;\n buttonRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the card internals. */\nexport interface ResolvedCareSummaryTheme {\n base: BaseTheme;\n accentBarColor: string;\n languagePillBackgroundColor: string;\n languagePillForegroundColor: string;\n metaTextColor: string;\n sectionBackgroundColor: string;\n sectionBorderColor: string;\n sectionRadiusPx: number;\n sectionLabelColor: string;\n sectionContentColor: string;\n primaryButtonBackgroundColor: string;\n primaryButtonForegroundColor: string;\n outlineButtonBackgroundColor: string;\n outlineButtonForegroundColor: string;\n outlineButtonBorderColor: string;\n disclaimerColor: string;\n cardRadiusPx: number;\n buttonRadiusPx: number;\n}\n\nexport function resolveCareSummaryTheme(\n theme?: CareSummaryTheme,\n): ResolvedCareSummaryTheme {\n const base = resolveBaseTheme(theme);\n const cardRadius: Radius = theme?.cardRadius ?? \"lg\";\n const sectionRadius: Radius = theme?.sectionRadius ?? \"md\";\n const buttonRadius: Radius = theme?.buttonRadius ?? \"md\";\n\n // Cascade: explicit theme override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n accentBarColor: theme?.accentBarColor ?? base.accentColor,\n languagePillBackgroundColor:\n theme?.languagePillBackgroundColor ?? base.iconBackgroundColor,\n languagePillForegroundColor:\n theme?.languagePillForegroundColor ?? base.accentColor,\n metaTextColor: theme?.metaTextColor ?? base.mutedTextColor,\n sectionBackgroundColor:\n theme?.sectionBackgroundColor ?? \"#F8FAFC\",\n sectionBorderColor: theme?.sectionBorderColor ?? base.borderColor,\n sectionRadiusPx: radiusToPx[sectionRadius],\n sectionLabelColor: theme?.sectionLabelColor ?? base.mutedTextColor,\n sectionContentColor: theme?.sectionContentColor ?? base.textColor,\n primaryButtonBackgroundColor:\n theme?.primaryButtonBackgroundColor ?? base.accentColor,\n primaryButtonForegroundColor:\n theme?.primaryButtonForegroundColor ?? \"#FFFFFF\",\n outlineButtonBackgroundColor:\n theme?.outlineButtonBackgroundColor ?? base.surfaceColor,\n outlineButtonForegroundColor:\n theme?.outlineButtonForegroundColor ?? base.textColor,\n outlineButtonBorderColor:\n theme?.outlineButtonBorderColor ?? base.borderColor,\n disclaimerColor: theme?.disclaimerColor ?? base.mutedTextColor,\n cardRadiusPx: radiusToPx[cardRadius],\n buttonRadiusPx: radiusToPx[buttonRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, Pressable, StyleSheet, Text, View } from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\n\nimport { resolveCareTimelineTheme } from \"./theme\";\nimport type { CareTimelineBadge, CareTimelineStep } from \"./payload\";\nimport type {\n AbCareTimelineProps,\n ResolvedCareTimelineTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"YOUR CARE JOURNEY\";\nconst DEFAULT_NEXT_EYEBROW = \"NEXT RECOMMENDED ACTION\";\n\nconst CIRCLE_SIZE = 24;\nconst COLUMN_WIDTH = 28;\n\nexport function AbCareTimeline({\n data,\n theme,\n onStepPress,\n onNextActionPress,\n style,\n}: AbCareTimelineProps) {\n const t = useMemo(() => resolveCareTimelineTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View\n style={[\n styles.accentBar,\n {\n backgroundColor: t.accentBarColor,\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.eyebrowRow}>\n <Feather\n name=\"check-square\"\n size={16}\n color={t.base.mutedTextColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.base.mutedTextColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n\n <View style={styles.timeline}>\n {data.steps.map((step, idx) => (\n <TimelineRow\n key={step.id}\n step={step}\n theme={t}\n isFirst={idx === 0}\n isLast={idx === data.steps.length - 1}\n onPress={onStepPress}\n />\n ))}\n </View>\n\n {data.nextAction ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={data.nextAction.title}\n onPress={onNextActionPress}\n style={({ pressed }) => [\n styles.nextAction,\n {\n backgroundColor: t.nextActionBackgroundColor,\n borderColor: t.nextActionBorderColor,\n borderRadius: t.nextActionRadiusPx,\n opacity: pressed ? 0.9 : 1,\n },\n ]}\n >\n <Feather\n name=\"arrow-right\"\n size={20}\n color={t.nextActionIconColor}\n style={styles.nextActionIcon}\n />\n <View style={styles.nextActionText}>\n <Text\n style={[\n styles.nextActionEyebrow,\n { color: t.nextActionEyebrowColor, fontFamily },\n ]}\n >\n {data.nextAction.eyebrow ?? DEFAULT_NEXT_EYEBROW}\n </Text>\n <Text\n style={[\n styles.nextActionTitle,\n { color: t.nextActionTitleColor, fontFamily },\n ]}\n >\n {data.nextAction.title}\n </Text>\n </View>\n </Pressable>\n ) : null}\n </View>\n </View>\n );\n}\n\nfunction TimelineRow({\n step,\n theme: t,\n isFirst,\n isLast,\n onPress,\n}: {\n step: CareTimelineStep;\n theme: ResolvedCareTimelineTheme;\n isFirst: boolean;\n isLast: boolean;\n onPress?: (step: CareTimelineStep) => void;\n}) {\n const fontFamily = t.base.fontFamily;\n const isUpcoming = step.status === \"upcoming\";\n const isCurrent = step.status === \"current\";\n const titleColor = isUpcoming ? t.upcomingTextColor : t.titleColor;\n const titleWeight: \"700\" | \"500\" = isCurrent ? \"700\" : \"500\";\n\n const RowWrapper: React.ComponentType<{\n children: React.ReactNode;\n }> = onPress\n ? ({ children }) => (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={step.title}\n onPress={() => onPress(step)}\n style={({ pressed }) => [\n styles.row,\n { opacity: pressed ? 0.85 : 1 },\n ]}\n >\n {children}\n </Pressable>\n )\n : ({ children }) => <View style={styles.row}>{children}</View>;\n\n return (\n <RowWrapper>\n <View style={styles.markerCol}>\n <View\n style={[\n styles.connectorSegment,\n {\n backgroundColor: t.connectorColor,\n opacity: isFirst ? 0 : 1,\n height: 10,\n },\n ]}\n />\n <Marker status={step.status} theme={t} />\n <View\n style={[\n styles.connectorSegment,\n {\n backgroundColor: t.connectorColor,\n opacity: isLast ? 0 : 1,\n flex: 1,\n minHeight: 10,\n },\n ]}\n />\n </View>\n\n <View style={styles.contentCol}>\n <View style={styles.titleRow}>\n <Text\n style={[\n styles.title,\n {\n color: titleColor,\n fontWeight: titleWeight,\n fontFamily,\n },\n ]}\n >\n {step.title}\n </Text>\n {step.badge ? <StepBadge badge={step.badge} theme={t} /> : null}\n </View>\n {step.subtitle ? (\n <Text\n style={[\n styles.subtitle,\n { color: t.subtitleColor, fontFamily },\n ]}\n >\n {step.subtitle}\n </Text>\n ) : null}\n </View>\n </RowWrapper>\n );\n}\n\nfunction Marker({\n status,\n theme: t,\n}: {\n status: CareTimelineStep[\"status\"];\n theme: ResolvedCareTimelineTheme;\n}) {\n if (status === \"completed\") {\n return (\n <View\n style={[\n styles.markerCircle,\n { backgroundColor: t.completedColor },\n ]}\n >\n <Feather name=\"check\" size={14} color={t.completedIconColor} />\n </View>\n );\n }\n if (status === \"current\") {\n return (\n <View\n style={[\n styles.markerCircle,\n {\n backgroundColor: t.base.surfaceColor,\n borderWidth: 2,\n borderColor: t.currentColor,\n },\n ]}\n >\n <View\n style={[\n styles.currentDot,\n { backgroundColor: t.currentColor },\n ]}\n />\n </View>\n );\n }\n return (\n <View\n style={[\n styles.markerCircle,\n {\n backgroundColor: t.base.surfaceColor,\n borderWidth: 2,\n borderColor: t.upcomingRingColor,\n },\n ]}\n />\n );\n}\n\nfunction StepBadge({\n badge,\n theme: t,\n}: {\n badge: CareTimelineBadge;\n theme: ResolvedCareTimelineTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n const tone = badge.tone ?? \"info\";\n const palette = t.badgeColors[tone];\n return (\n <View\n style={[\n styles.badge,\n {\n backgroundColor: palette.backgroundColor,\n borderColor: palette.foregroundColor,\n },\n ]}\n >\n <Text\n style={[\n styles.badgeLabel,\n { color: palette.foregroundColor, fontFamily },\n ]}\n >\n {badge.label}\n </Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 520,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 20,\n gap: 12,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n timeline: {\n marginTop: 4,\n },\n row: {\n flexDirection: \"row\",\n alignItems: \"stretch\",\n gap: 12,\n },\n markerCol: {\n width: COLUMN_WIDTH,\n alignItems: \"center\",\n },\n connectorSegment: {\n width: 2,\n },\n markerCircle: {\n width: CIRCLE_SIZE,\n height: CIRCLE_SIZE,\n borderRadius: CIRCLE_SIZE / 2,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n currentDot: {\n width: 8,\n height: 8,\n borderRadius: 4,\n },\n contentCol: {\n flex: 1,\n paddingTop: 6,\n paddingBottom: 14,\n gap: 2,\n },\n titleRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexWrap: \"wrap\",\n },\n title: {\n fontSize: 16,\n lineHeight: 22,\n },\n subtitle: {\n fontSize: 13,\n lineHeight: 18,\n },\n badge: {\n paddingHorizontal: 8,\n paddingVertical: 3,\n borderRadius: 9999,\n borderWidth: 1,\n },\n badgeLabel: {\n fontSize: 12,\n fontWeight: \"600\",\n },\n nextAction: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n padding: 14,\n borderWidth: 1,\n marginTop: 4,\n },\n nextActionIcon: {\n marginTop: 2,\n },\n nextActionText: {\n flex: 1,\n gap: 2,\n },\n nextActionEyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.1,\n textTransform: \"uppercase\",\n },\n nextActionTitle: {\n fontSize: 15,\n fontWeight: \"600\",\n lineHeight: 20,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { CareTimelineBadgeTone } from \"./payload\";\n\n/** Background + foreground color pair (badges, callouts). */\nexport interface ColorPair {\n backgroundColor: string;\n foregroundColor: string;\n}\n\n/**\n * Theme overrides for `AbCareTimeline`.\n *\n * Extends `Partial<BaseTheme>` so callers can pass `tone`, `mode`, etc. and\n * get the shared cascading behavior, then layers component-specific keys.\n */\nexport interface CareTimelineTheme extends Partial<BaseTheme> {\n /** Color of the thin accent bar across the top of the card. */\n accentBarColor?: string;\n /** Filled color for completed step circles. */\n completedColor?: string;\n /** Color of the check icon inside completed step circles. */\n completedIconColor?: string;\n /** Ring + dot color for the current step circle. */\n currentColor?: string;\n /** Ring color for upcoming step circles. */\n upcomingRingColor?: string;\n /** Title color for upcoming steps (muted). */\n upcomingTextColor?: string;\n /** Vertical connector line color. */\n connectorColor?: string;\n /** Active step title color (completed + current). */\n titleColor?: string;\n /** Subtitle color (e.g. dates). */\n subtitleColor?: string;\n /** Per-tone step badge palette. Merged on top of defaults. */\n badgeColors?: Partial<Record<CareTimelineBadgeTone, Partial<ColorPair>>>;\n /** Next-action callout palette. */\n nextActionBackgroundColor?: string;\n nextActionBorderColor?: string;\n nextActionEyebrowColor?: string;\n nextActionTitleColor?: string;\n nextActionIconColor?: string;\n /** Radius tokens. */\n cardRadius?: Radius;\n nextActionRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the timeline internals. */\nexport interface ResolvedCareTimelineTheme {\n base: BaseTheme;\n accentBarColor: string;\n completedColor: string;\n completedIconColor: string;\n currentColor: string;\n upcomingRingColor: string;\n upcomingTextColor: string;\n connectorColor: string;\n titleColor: string;\n subtitleColor: string;\n badgeColors: Record<CareTimelineBadgeTone, ColorPair>;\n nextActionBackgroundColor: string;\n nextActionBorderColor: string;\n nextActionEyebrowColor: string;\n nextActionTitleColor: string;\n nextActionIconColor: string;\n cardRadiusPx: number;\n nextActionRadiusPx: number;\n}\n\nconst defaultBadgeColors: Record<CareTimelineBadgeTone, ColorPair> = {\n info: { backgroundColor: \"#E8F1FE\", foregroundColor: \"#2F5DFF\" },\n success: { backgroundColor: \"#DCFCE7\", foregroundColor: \"#15803D\" },\n warning: { backgroundColor: \"#FDEBD0\", foregroundColor: \"#B45309\" },\n neutral: { backgroundColor: \"#EEF2F7\", foregroundColor: \"#475569\" },\n};\n\nexport function resolveCareTimelineTheme(\n theme?: CareTimelineTheme,\n): ResolvedCareTimelineTheme {\n const base = resolveBaseTheme(theme);\n const cardRadius: Radius = theme?.cardRadius ?? \"lg\";\n const nextActionRadius: Radius = theme?.nextActionRadius ?? \"md\";\n\n const overrides = theme?.badgeColors ?? {};\n const badgeColors: Record<CareTimelineBadgeTone, ColorPair> = {\n info: { ...defaultBadgeColors.info, ...(overrides.info ?? {}) },\n success: { ...defaultBadgeColors.success, ...(overrides.success ?? {}) },\n warning: { ...defaultBadgeColors.warning, ...(overrides.warning ?? {}) },\n neutral: { ...defaultBadgeColors.neutral, ...(overrides.neutral ?? {}) },\n };\n\n // Cascade: explicit theme override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n accentBarColor: theme?.accentBarColor ?? base.accentColor,\n completedColor: theme?.completedColor ?? \"#16A34A\",\n completedIconColor: theme?.completedIconColor ?? \"#FFFFFF\",\n currentColor: theme?.currentColor ?? base.accentColor,\n upcomingRingColor: theme?.upcomingRingColor ?? base.borderColor,\n upcomingTextColor: theme?.upcomingTextColor ?? base.mutedTextColor,\n connectorColor: theme?.connectorColor ?? base.borderColor,\n titleColor: theme?.titleColor ?? base.textColor,\n subtitleColor: theme?.subtitleColor ?? base.mutedTextColor,\n badgeColors,\n nextActionBackgroundColor:\n theme?.nextActionBackgroundColor ?? base.iconBackgroundColor,\n nextActionBorderColor:\n theme?.nextActionBorderColor ?? base.iconBackgroundColor,\n nextActionEyebrowColor:\n theme?.nextActionEyebrowColor ?? base.accentColor,\n nextActionTitleColor: theme?.nextActionTitleColor ?? base.textColor,\n nextActionIconColor: theme?.nextActionIconColor ?? base.accentColor,\n cardRadiusPx: radiusToPx[cardRadius],\n nextActionRadiusPx: radiusToPx[nextActionRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, StyleSheet, Text, View } from \"react-native\";\nimport { Feather, MaterialCommunityIcons } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveComingSoonTheme } from \"./theme\";\nimport type { IconRef } from \"./payload\";\nimport type { AbComingSoonProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"COMING SOON\";\nconst DEFAULT_EYEBROW_ICON: IconRef = {\n name: \"trophy-variant\",\n family: \"material-community\",\n};\nconst DEFAULT_HERO_ICON: IconRef = {\n name: \"trophy-variant\",\n family: \"material-community\",\n};\n\nfunction renderIcon(\n ref: IconRef | undefined,\n fallback: IconRef,\n size: number,\n color: string,\n style?: object,\n) {\n const r = ref ?? fallback;\n const family = r.family ?? \"material-community\";\n if (family === \"feather\") {\n return (\n <Feather\n name={r.name as never}\n size={size}\n color={color}\n style={style as never}\n />\n );\n }\n return (\n <MaterialCommunityIcons\n name={r.name as never}\n size={size}\n color={color}\n style={style as never}\n />\n );\n}\n\nexport function AbComingSoon({\n data,\n theme,\n style,\n}: AbComingSoonProps) {\n const t = useMemo(() => resolveComingSoonTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <LinearGradient\n colors={t.accentBarColors as unknown as [string, string, string]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.accentBar,\n {\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View style={styles.eyebrowRow}>\n {renderIcon(\n data.eyebrowIcon,\n DEFAULT_EYEBROW_ICON,\n 14,\n t.eyebrowIconColor,\n )}\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n {data.tagPill ? (\n <View\n style={[\n styles.tagPill,\n {\n backgroundColor: t.tagPillBackgroundColor,\n borderColor: t.tagPillBorderColor,\n borderRadius: t.pillRadiusPx,\n },\n ]}\n >\n {data.tagPill.icon\n ? renderIcon(\n data.tagPill.icon,\n { name: \"star-four-points\", family: \"material-community\" },\n 12,\n t.tagPillIconColor,\n )\n : null}\n <Text\n style={[\n styles.tagPillLabel,\n {\n color: t.tagPillForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.tagPill.label}\n </Text>\n </View>\n ) : null}\n </View>\n\n <View style={styles.heroRow}>\n <LinearGradient\n colors={\n t.heroTileColors as unknown as [string, string, string]\n }\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={[\n styles.heroTile,\n { borderRadius: t.heroTileRadiusPx },\n ]}\n >\n {renderIcon(\n data.heroIcon,\n DEFAULT_HERO_ICON,\n 28,\n t.heroTileIconColor,\n )}\n </LinearGradient>\n <View style={styles.heroTextCol}>\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n </View>\n </View>\n\n {data.body ? (\n <Text\n style={[\n styles.bodyText,\n { color: t.bodyColor, fontFamily },\n ]}\n >\n {data.body}\n </Text>\n ) : null}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 600,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 12,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 10,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n tagPill: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderWidth: 1,\n flexShrink: 1,\n },\n tagPillLabel: {\n fontSize: 13,\n fontWeight: \"700\",\n },\n heroRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 14,\n marginTop: 2,\n },\n heroTile: {\n width: 56,\n height: 56,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n heroTextCol: {\n flex: 1,\n },\n title: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n },\n bodyText: {\n fontSize: 14,\n lineHeight: 20,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbComingSoon`. */\nexport interface ComingSoonTheme extends Partial<BaseTheme> {\n // Top accent bar (gradient strip)\n accentBarStartColor?: string;\n accentBarMidColor?: string;\n accentBarEndColor?: string;\n // Eyebrow + tag pill\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n tagPillBackgroundColor?: string;\n tagPillBorderColor?: string;\n tagPillForegroundColor?: string;\n tagPillIconColor?: string;\n // Hero icon tile (gradient)\n heroTileStartColor?: string;\n heroTileMidColor?: string;\n heroTileEndColor?: string;\n heroTileIconColor?: string;\n // Title + body\n titleColor?: string;\n bodyColor?: string;\n // Radii\n cardRadius?: Radius;\n pillRadius?: Radius;\n heroTileRadius?: Radius;\n}\n\nexport interface ResolvedComingSoonTheme {\n base: BaseTheme;\n accentBarColors: readonly [string, string, string];\n eyebrowColor: string;\n eyebrowIconColor: string;\n tagPillBackgroundColor: string;\n tagPillBorderColor: string;\n tagPillForegroundColor: string;\n tagPillIconColor: string;\n heroTileColors: readonly [string, string, string];\n heroTileIconColor: string;\n titleColor: string;\n bodyColor: string;\n cardRadiusPx: number;\n pillRadiusPx: number;\n heroTileRadiusPx: number;\n}\n\nexport function resolveComingSoonTheme(\n theme?: ComingSoonTheme,\n): ResolvedComingSoonTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const pillRadius: Radius = theme?.pillRadius ?? \"full\";\n const heroTileRadius: Radius =\n theme?.heroTileRadius ?? base.radius ?? \"lg\";\n\n return {\n base,\n accentBarColors: [\n theme?.accentBarStartColor ?? \"#EC4899\",\n theme?.accentBarMidColor ?? \"#F59E0B\",\n theme?.accentBarEndColor ?? \"#3B82F6\",\n ] as const,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n tagPillBackgroundColor:\n theme?.tagPillBackgroundColor ?? \"#FFFBEB\",\n tagPillBorderColor:\n theme?.tagPillBorderColor ?? \"#FDE68A\",\n tagPillForegroundColor:\n theme?.tagPillForegroundColor ?? \"#B45309\",\n tagPillIconColor:\n theme?.tagPillIconColor ?? \"#B45309\",\n heroTileColors: [\n theme?.heroTileStartColor ?? \"#F472B6\",\n theme?.heroTileMidColor ?? \"#F59E0B\",\n theme?.heroTileEndColor ?? \"#A855F7\",\n ] as const,\n heroTileIconColor: theme?.heroTileIconColor ?? \"#FFFFFF\",\n titleColor: theme?.titleColor ?? base.textColor,\n bodyColor: theme?.bodyColor ?? base.mutedTextColor,\n cardRadiusPx: radiusToPx[cardRadius],\n pillRadiusPx: radiusToPx[pillRadius],\n heroTileRadiusPx: radiusToPx[heroTileRadius],\n };\n}\n","import React, { useMemo, useState } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\n\nimport { resolveConnectedDeviceTheme } from \"./theme\";\nimport type { AbConnectedDeviceProps } from \"./types\";\n\nconst DEFAULT_AVATAR_ICON = \"watch\";\nconst DEFAULT_DETAIL_LABEL = \"CONNECTION DETAIL\";\nconst DEFAULT_SIGNAL_LABEL = \"SIGNAL\";\nconst DEFAULT_INSIGHT_ICON = \"zap\";\nconst DEFAULT_COMPLIANCE_ICON = \"shield\";\n\nconst SPARKLINE_HEIGHT = 28;\nconst SPARKLINE_BAR_WIDTH = 2;\nconst SPARKLINE_BAR_GAP = 2;\n\nfunction Sparkline({\n points,\n color,\n trackColor,\n}: {\n points: number[];\n color: string;\n trackColor: string;\n}) {\n const sanitized = useMemo(\n () =>\n points.map((p) =>\n Number.isFinite(p) && p >= 0 ? p : 0,\n ),\n [points],\n );\n const max = useMemo(\n () => Math.max(1, ...sanitized),\n [sanitized],\n );\n return (\n <View\n style={[\n styles.sparkline,\n { height: SPARKLINE_HEIGHT, backgroundColor: trackColor },\n ]}\n >\n {sanitized.map((p, i) => {\n const h = Math.max(2, (p / max) * SPARKLINE_HEIGHT);\n return (\n <View\n key={i}\n style={{\n width: SPARKLINE_BAR_WIDTH,\n height: h,\n marginLeft: i === 0 ? 0 : SPARKLINE_BAR_GAP,\n backgroundColor: color,\n borderRadius: 1,\n }}\n />\n );\n })}\n </View>\n );\n}\n\nexport function AbConnectedDevice({\n data,\n theme,\n style,\n expanded,\n defaultExpanded = true,\n onExpandedChange,\n onToggleExpanded,\n}: AbConnectedDeviceProps) {\n const t = useMemo(\n () => resolveConnectedDeviceTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const avatarIcon = data.iconName ?? DEFAULT_AVATAR_ICON;\n const detailLabel = data.detailLabel ?? DEFAULT_DETAIL_LABEL;\n const insightIcon =\n data.insight?.iconName ?? DEFAULT_INSIGHT_ICON;\n const signalLabel = data.signal?.label ?? DEFAULT_SIGNAL_LABEL;\n\n const [internalExpanded, setInternalExpanded] =\n useState<boolean>(defaultExpanded);\n const isExpanded =\n expanded !== undefined ? expanded : internalExpanded;\n\n const handleToggle = () => {\n const next = !isExpanded;\n if (expanded === undefined) setInternalExpanded(next);\n onExpandedChange?.(next);\n onToggleExpanded?.(next);\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View style={styles.headerRow}>\n <View\n style={[\n styles.avatar,\n {\n backgroundColor: t.avatarBackgroundColor,\n borderRadius: t.avatarRadiusPx,\n },\n ]}\n >\n <Feather\n name={avatarIcon as never}\n size={22}\n color={t.avatarIconColor}\n />\n </View>\n <View style={styles.headerColumn}>\n <View style={styles.nameRow}>\n <Text\n style={[\n styles.name,\n { color: t.nameColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.name}\n </Text>\n {data.verified ? (\n <Feather\n name={\"shield\" as never}\n size={14}\n color={t.verifiedIconColor}\n />\n ) : null}\n </View>\n {data.subtitle ? (\n <Text\n style={[\n styles.subtitle,\n { color: t.subtitleColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.subtitle}\n </Text>\n ) : null}\n {data.status ? (\n <View style={styles.statusRow}>\n <View\n style={[\n styles.statusDot,\n {\n backgroundColor:\n data.status.dotColor ?? t.statusDotColor,\n },\n ]}\n />\n <Text\n style={[\n styles.statusLabel,\n { color: t.statusLabelColor, fontFamily },\n ]}\n >\n {data.status.label}\n </Text>\n {data.status.sublabel ? (\n <Text\n style={[\n styles.statusSublabel,\n {\n color: t.statusSublabelColor,\n fontFamily,\n },\n ]}\n >\n {` · ${data.status.sublabel}`}\n </Text>\n ) : null}\n </View>\n ) : null}\n </View>\n {data.signal ? (\n <View style={styles.signalColumn}>\n <Text\n style={[\n styles.signalValue,\n { color: t.signalValueColor, fontFamily },\n ]}\n >\n {`${data.signal.percent}%`}\n </Text>\n <Text\n style={[\n styles.signalLabel,\n { color: t.signalLabelColor, fontFamily },\n ]}\n >\n {signalLabel}\n </Text>\n {data.signal.sparkline &&\n data.signal.sparkline.length > 0 ? (\n <Sparkline\n points={data.signal.sparkline}\n color={t.sparklineColor}\n trackColor={t.sparklineTrackColor}\n />\n ) : null}\n </View>\n ) : null}\n </View>\n\n {data.capabilities.length > 0 ? (\n <View style={styles.chipsRow}>\n {data.capabilities.map((cap) => (\n <View\n key={cap.id}\n style={[\n styles.chip,\n {\n backgroundColor: t.chipBackgroundColor,\n borderRadius: t.chipRadiusPx,\n },\n ]}\n >\n <View\n style={[\n styles.chipDot,\n { backgroundColor: t.chipDotColor },\n ]}\n />\n <Text\n style={[\n styles.chipLabel,\n { color: t.chipForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {cap.label}\n </Text>\n </View>\n ))}\n </View>\n ) : null}\n\n <View\n style={[\n styles.sectionDivider,\n { borderTopColor: t.sectionDividerColor },\n ]}\n />\n\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: isExpanded }}\n onPress={handleToggle}\n style={({ pressed }) => [\n styles.sectionHeader,\n { opacity: pressed ? 0.7 : 1 },\n ]}\n hitSlop={6}\n >\n <Text\n style={[\n styles.sectionLabel,\n { color: t.sectionLabelColor, fontFamily },\n ]}\n >\n {detailLabel}\n </Text>\n <Feather\n name={(isExpanded ? \"chevron-up\" : \"chevron-down\") as never}\n size={18}\n color={t.sectionChevronColor}\n />\n </Pressable>\n\n {isExpanded ? (\n <View style={styles.detailBody}>\n <View style={styles.statGrid}>\n {data.stats.map((stat) => (\n <View key={stat.id} style={styles.statCell}>\n <View style={styles.statLabelRow}>\n <Feather\n name={stat.iconName as never}\n size={14}\n color={t.statLabelIconColor}\n />\n <Text\n style={[\n styles.statLabel,\n {\n color: t.statLabelColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {stat.label}\n </Text>\n </View>\n <Text\n style={[\n styles.statValue,\n { color: t.statValueColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {stat.value}\n </Text>\n </View>\n ))}\n </View>\n\n {data.insight ? (\n <View\n style={[\n styles.insight,\n {\n backgroundColor: t.insightBackgroundColor,\n borderColor: t.insightBorderColor,\n borderRadius: t.insightRadiusPx,\n },\n ]}\n >\n <Feather\n name={insightIcon as never}\n size={16}\n color={t.insightIconColor}\n style={styles.insightIcon}\n />\n <Text\n style={[\n styles.insightText,\n {\n color: t.insightTextColor,\n fontFamily,\n },\n ]}\n >\n {data.insight.text}\n </Text>\n </View>\n ) : null}\n\n {data.compliance && data.compliance.length > 0 ? (\n <View style={styles.complianceRow}>\n {data.compliance.map((c) => (\n <View\n key={c.id}\n style={[\n styles.compliance,\n {\n backgroundColor: t.complianceBackgroundColor,\n borderColor: t.complianceBorderColor,\n borderRadius: t.complianceRadiusPx,\n },\n ]}\n >\n <Feather\n name={\n (c.iconName ?? DEFAULT_COMPLIANCE_ICON) as never\n }\n size={12}\n color={t.complianceIconColor}\n />\n <Text\n style={[\n styles.complianceLabel,\n {\n color: t.complianceForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {c.label}\n </Text>\n </View>\n ))}\n </View>\n ) : null}\n </View>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 600,\n borderWidth: 1,\n padding: 16,\n gap: 12,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n },\n avatar: {\n width: 48,\n height: 48,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n headerColumn: {\n flex: 1,\n gap: 2,\n minWidth: 0,\n },\n nameRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n flexWrap: \"wrap\",\n },\n name: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n },\n subtitle: {\n fontSize: 13,\n lineHeight: 18,\n },\n statusRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n marginTop: 4,\n },\n statusDot: {\n width: 8,\n height: 8,\n borderRadius: 4,\n },\n statusLabel: {\n fontSize: 13,\n fontWeight: \"600\",\n },\n statusSublabel: {\n fontSize: 13,\n },\n signalColumn: {\n alignItems: \"flex-end\",\n gap: 2,\n minWidth: 80,\n },\n signalValue: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 22,\n },\n signalLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1,\n },\n sparkline: {\n flexDirection: \"row\",\n alignItems: \"flex-end\",\n paddingHorizontal: 2,\n paddingVertical: 0,\n marginTop: 4,\n borderRadius: 4,\n overflow: \"hidden\",\n },\n chipsRow: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n gap: 8,\n },\n chip: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 10,\n paddingVertical: 5,\n },\n chipDot: {\n width: 6,\n height: 6,\n borderRadius: 3,\n },\n chipLabel: {\n fontSize: 12,\n fontWeight: \"600\",\n },\n sectionDivider: {\n borderTopWidth: 1,\n marginTop: 2,\n },\n sectionHeader: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n paddingVertical: 4,\n },\n sectionLabel: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n detailBody: {\n gap: 14,\n },\n statGrid: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n rowGap: 14,\n },\n statCell: {\n width: \"50%\",\n paddingRight: 8,\n gap: 4,\n },\n statLabelRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n },\n statLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1.1,\n textTransform: \"uppercase\",\n },\n statValue: {\n fontSize: 16,\n fontWeight: \"700\",\n lineHeight: 22,\n },\n insight: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n paddingHorizontal: 12,\n paddingVertical: 12,\n borderWidth: 1,\n },\n insightIcon: {\n marginTop: 2,\n },\n insightText: {\n flex: 1,\n fontSize: 13,\n lineHeight: 19,\n },\n complianceRow: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n gap: 8,\n },\n compliance: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 10,\n paddingVertical: 5,\n borderWidth: 1,\n },\n complianceLabel: {\n fontSize: 12,\n fontWeight: \"600\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbConnectedDevice`. */\nexport interface ConnectedDeviceTheme extends Partial<BaseTheme> {\n // Avatar\n avatarBackgroundColor?: string;\n avatarIconColor?: string;\n // Header text\n nameColor?: string;\n subtitleColor?: string;\n verifiedIconColor?: string;\n // Status\n statusLabelColor?: string;\n statusSublabelColor?: string;\n statusDotColor?: string;\n // Signal\n signalValueColor?: string;\n signalLabelColor?: string;\n sparklineColor?: string;\n sparklineTrackColor?: string;\n // Chips\n chipBackgroundColor?: string;\n chipForegroundColor?: string;\n chipDotColor?: string;\n // Section\n sectionLabelColor?: string;\n sectionChevronColor?: string;\n sectionDividerColor?: string;\n // Stats\n statLabelColor?: string;\n statLabelIconColor?: string;\n statValueColor?: string;\n // Insight\n insightBackgroundColor?: string;\n insightBorderColor?: string;\n insightIconColor?: string;\n insightTextColor?: string;\n // Compliance pills\n complianceBackgroundColor?: string;\n complianceBorderColor?: string;\n complianceForegroundColor?: string;\n complianceIconColor?: string;\n // Radii\n cardRadius?: Radius;\n avatarRadius?: Radius;\n chipRadius?: Radius;\n insightRadius?: Radius;\n complianceRadius?: Radius;\n}\n\nexport interface ResolvedConnectedDeviceTheme {\n base: BaseTheme;\n avatarBackgroundColor: string;\n avatarIconColor: string;\n nameColor: string;\n subtitleColor: string;\n verifiedIconColor: string;\n statusLabelColor: string;\n statusSublabelColor: string;\n statusDotColor: string;\n signalValueColor: string;\n signalLabelColor: string;\n sparklineColor: string;\n sparklineTrackColor: string;\n chipBackgroundColor: string;\n chipForegroundColor: string;\n chipDotColor: string;\n sectionLabelColor: string;\n sectionChevronColor: string;\n sectionDividerColor: string;\n statLabelColor: string;\n statLabelIconColor: string;\n statValueColor: string;\n insightBackgroundColor: string;\n insightBorderColor: string;\n insightIconColor: string;\n insightTextColor: string;\n complianceBackgroundColor: string;\n complianceBorderColor: string;\n complianceForegroundColor: string;\n complianceIconColor: string;\n cardRadiusPx: number;\n avatarRadiusPx: number;\n chipRadiusPx: number;\n insightRadiusPx: number;\n complianceRadiusPx: number;\n}\n\nexport function resolveConnectedDeviceTheme(\n theme?: ConnectedDeviceTheme,\n): ResolvedConnectedDeviceTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const avatarRadius: Radius = theme?.avatarRadius ?? base.radius ?? \"md\";\n const chipRadius: Radius = theme?.chipRadius ?? \"full\";\n const insightRadius: Radius = theme?.insightRadius ?? base.radius ?? \"md\";\n const complianceRadius: Radius = theme?.complianceRadius ?? \"full\";\n\n const blueAccent = \"#2563EB\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n avatarBackgroundColor:\n theme?.avatarBackgroundColor ?? \"#1E293B\",\n avatarIconColor: theme?.avatarIconColor ?? \"#FFFFFF\",\n nameColor: theme?.nameColor ?? base.textColor,\n subtitleColor: theme?.subtitleColor ?? base.mutedTextColor,\n verifiedIconColor: theme?.verifiedIconColor ?? \"#16A34A\",\n statusLabelColor: theme?.statusLabelColor ?? base.textColor,\n statusSublabelColor:\n theme?.statusSublabelColor ?? base.mutedTextColor,\n statusDotColor: theme?.statusDotColor ?? blueAccent,\n signalValueColor: theme?.signalValueColor ?? blueAccent,\n signalLabelColor:\n theme?.signalLabelColor ?? base.mutedTextColor,\n sparklineColor: theme?.sparklineColor ?? blueAccent,\n sparklineTrackColor:\n theme?.sparklineTrackColor ?? \"rgba(37, 99, 235, 0.12)\",\n chipBackgroundColor:\n theme?.chipBackgroundColor ?? \"#EFF6FF\",\n chipForegroundColor: theme?.chipForegroundColor ?? blueAccent,\n chipDotColor: theme?.chipDotColor ?? blueAccent,\n sectionLabelColor:\n theme?.sectionLabelColor ?? base.mutedTextColor,\n sectionChevronColor:\n theme?.sectionChevronColor ?? base.mutedTextColor,\n sectionDividerColor:\n theme?.sectionDividerColor ?? base.borderColor,\n statLabelColor: theme?.statLabelColor ?? base.mutedTextColor,\n statLabelIconColor: theme?.statLabelIconColor ?? blueAccent,\n statValueColor: theme?.statValueColor ?? base.textColor,\n insightBackgroundColor:\n theme?.insightBackgroundColor ?? \"#F8FAFC\",\n insightBorderColor:\n theme?.insightBorderColor ?? base.borderColor,\n insightIconColor: theme?.insightIconColor ?? blueAccent,\n insightTextColor:\n theme?.insightTextColor ?? base.textColor,\n complianceBackgroundColor:\n theme?.complianceBackgroundColor ?? \"#F0FDF4\",\n complianceBorderColor:\n theme?.complianceBorderColor ?? \"#BBF7D0\",\n complianceForegroundColor:\n theme?.complianceForegroundColor ?? \"#16A34A\",\n complianceIconColor:\n theme?.complianceIconColor ?? \"#16A34A\",\n cardRadiusPx: radiusToPx[cardRadius],\n avatarRadiusPx: radiusToPx[avatarRadius],\n chipRadiusPx: radiusToPx[chipRadius],\n insightRadiusPx: radiusToPx[insightRadius],\n complianceRadiusPx: radiusToPx[complianceRadius],\n };\n}\n","import React, { useMemo, useRef } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveConnectedDeviceSignalsTheme } from \"./theme\";\nimport type { AbConnectedDeviceSignalsProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"CONNECTED DEVICE SIGNALS\";\nconst DEFAULT_EYEBROW_ICON = \"watch\";\nconst DEFAULT_REFRESH_ICON = \"refresh-cw\";\nconst DEFAULT_BADGE_ICON = \"alert-triangle\";\n\nexport function AbConnectedDeviceSignals({\n data,\n theme,\n style,\n onRefresh,\n}: AbConnectedDeviceSignalsProps) {\n const t = useMemo(\n () => resolveConnectedDeviceSignalsTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIcon = data.eyebrowIconName ?? DEFAULT_EYEBROW_ICON;\n const refreshIcon = data.refresh?.iconName ?? DEFAULT_REFRESH_ICON;\n\n // One-shot latch on the optional refresh tap.\n const refreshFiredRef = useRef<boolean>(false);\n const handleRefresh = () => {\n if (refreshFiredRef.current) return;\n refreshFiredRef.current = true;\n onRefresh?.();\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <LinearGradient\n colors={t.accentBarColors as unknown as [string, string, string]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.accentBar,\n {\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View style={styles.eyebrowRow}>\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n {data.refresh ? (\n <Pressable\n accessibilityRole={onRefresh ? \"button\" : undefined}\n disabled={!onRefresh}\n onPress={onRefresh ? handleRefresh : undefined}\n style={({ pressed }) => [\n styles.refreshPill,\n {\n backgroundColor: t.refreshPillBackgroundColor,\n opacity: pressed && onRefresh ? 0.8 : 1,\n },\n ]}\n hitSlop={6}\n >\n <Feather\n name={refreshIcon as never}\n size={12}\n color={t.refreshPillIconColor}\n />\n <Text\n style={[\n styles.refreshPillLabel,\n {\n color: t.refreshPillForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.refresh.label}\n </Text>\n </Pressable>\n ) : null}\n </View>\n\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n {data.body ? (\n <Text\n style={[\n styles.bodyText,\n { color: t.bodyColor, fontFamily },\n ]}\n >\n {data.body}\n </Text>\n ) : null}\n\n <View style={styles.signalsList}>\n {data.signals.map((signal) => {\n const badgeStyle = signal.badge\n ? t.resolveBadge(signal.badge.severity ?? \"info\")\n : null;\n const badgeIcon =\n signal.badge?.iconName ?? DEFAULT_BADGE_ICON;\n return (\n <View key={signal.id} style={styles.signalRow}>\n <View\n style={[\n styles.swatch,\n {\n backgroundColor:\n t.signalSwatchBackgroundColor,\n borderRadius: t.swatchRadiusPx,\n },\n ]}\n >\n <Feather\n name={signal.iconName as never}\n size={18}\n color={t.signalSwatchIconColor}\n />\n </View>\n <View style={styles.signalText}>\n <Text\n style={[\n styles.signalTitle,\n {\n color: t.signalTitleColor,\n fontFamily,\n },\n ]}\n numberOfLines={2}\n >\n {signal.title}\n {signal.source ? (\n <Text\n style={[\n styles.signalSource,\n {\n color: t.signalSourceColor,\n fontFamily,\n },\n ]}\n >\n {` · ${signal.source}`}\n </Text>\n ) : null}\n </Text>\n {signal.subtitle ? (\n <Text\n style={[\n styles.signalSubtitle,\n {\n color: t.signalSubtitleColor,\n fontFamily,\n },\n ]}\n >\n {signal.subtitle}\n </Text>\n ) : null}\n </View>\n <View style={styles.signalValueColumn}>\n <Text\n style={[\n styles.signalValue,\n {\n color: t.signalValueColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {signal.valueText}\n </Text>\n {signal.badge && badgeStyle ? (\n <View\n style={[\n styles.badge,\n {\n backgroundColor:\n badgeStyle.backgroundColor,\n borderColor: badgeStyle.borderColor,\n borderRadius: t.badgeRadiusPx,\n },\n ]}\n >\n <Feather\n name={badgeIcon as never}\n size={11}\n color={badgeStyle.iconColor}\n />\n <Text\n style={[\n styles.badgeLabel,\n {\n color: badgeStyle.foregroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {signal.badge.label}\n </Text>\n </View>\n ) : null}\n </View>\n </View>\n );\n })}\n </View>\n\n {data.footer ? (\n <Text\n style={[\n styles.footer,\n { color: t.footerColor, fontFamily },\n ]}\n >\n {data.footer}\n </Text>\n ) : null}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 600,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 12,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 10,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n refreshPill: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 10,\n paddingVertical: 5,\n borderRadius: 999,\n },\n refreshPillLabel: {\n fontSize: 12,\n fontWeight: \"600\",\n },\n title: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n marginTop: 2,\n },\n bodyText: {\n fontSize: 13,\n lineHeight: 19,\n },\n signalsList: {\n gap: 14,\n marginTop: 4,\n },\n signalRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n },\n swatch: {\n width: 36,\n height: 36,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n signalText: {\n flex: 1,\n gap: 2,\n minWidth: 0,\n },\n signalTitle: {\n fontSize: 14,\n fontWeight: \"700\",\n lineHeight: 20,\n },\n signalSource: {\n fontSize: 14,\n fontWeight: \"500\",\n },\n signalSubtitle: {\n fontSize: 13,\n lineHeight: 18,\n },\n signalValueColumn: {\n alignItems: \"flex-end\",\n gap: 4,\n minWidth: 80,\n },\n signalValue: {\n fontSize: 14,\n fontWeight: \"700\",\n lineHeight: 20,\n },\n badge: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 4,\n paddingHorizontal: 8,\n paddingVertical: 3,\n borderWidth: 1,\n },\n badgeLabel: {\n fontSize: 10,\n fontWeight: \"700\",\n letterSpacing: 0.8,\n },\n footer: {\n fontSize: 12,\n lineHeight: 17,\n marginTop: 4,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { SignalBadgeSeverity } from \"./payload\";\n\nexport interface SignalBadgeStyle {\n backgroundColor: string;\n borderColor: string;\n foregroundColor: string;\n iconColor: string;\n}\n\n/** Theme overrides for `AbConnectedDeviceSignals`. */\nexport interface ConnectedDeviceSignalsTheme extends Partial<BaseTheme> {\n // Top accent bar (gradient)\n accentBarStartColor?: string;\n accentBarMidColor?: string;\n accentBarEndColor?: string;\n // Eyebrow\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n // Refresh pill\n refreshPillBackgroundColor?: string;\n refreshPillForegroundColor?: string;\n refreshPillIconColor?: string;\n // Header text\n titleColor?: string;\n bodyColor?: string;\n // Signal rows\n signalSwatchBackgroundColor?: string;\n signalSwatchIconColor?: string;\n signalTitleColor?: string;\n signalSourceColor?: string;\n signalSubtitleColor?: string;\n signalValueColor?: string;\n // Badges (per severity)\n badgeStyles?: Partial<\n Record<SignalBadgeSeverity, Partial<SignalBadgeStyle>>\n >;\n // Footer\n footerColor?: string;\n // Radii\n cardRadius?: Radius;\n swatchRadius?: Radius;\n badgeRadius?: Radius;\n}\n\nexport interface ResolvedConnectedDeviceSignalsTheme {\n base: BaseTheme;\n accentBarColors: readonly [string, string, string];\n eyebrowColor: string;\n eyebrowIconColor: string;\n refreshPillBackgroundColor: string;\n refreshPillForegroundColor: string;\n refreshPillIconColor: string;\n titleColor: string;\n bodyColor: string;\n signalSwatchBackgroundColor: string;\n signalSwatchIconColor: string;\n signalTitleColor: string;\n signalSourceColor: string;\n signalSubtitleColor: string;\n signalValueColor: string;\n footerColor: string;\n cardRadiusPx: number;\n swatchRadiusPx: number;\n badgeRadiusPx: number;\n resolveBadge: (severity: SignalBadgeSeverity) => SignalBadgeStyle;\n}\n\nconst BADGE_DEFAULTS: Record<SignalBadgeSeverity, SignalBadgeStyle> = {\n info: {\n backgroundColor: \"#EFF6FF\",\n borderColor: \"#BFDBFE\",\n foregroundColor: \"#2563EB\",\n iconColor: \"#2563EB\",\n },\n normal: {\n backgroundColor: \"#F0FDF4\",\n borderColor: \"#BBF7D0\",\n foregroundColor: \"#16A34A\",\n iconColor: \"#16A34A\",\n },\n elevated: {\n backgroundColor: \"#FEF3C7\",\n borderColor: \"#FDE68A\",\n foregroundColor: \"#B45309\",\n iconColor: \"#B45309\",\n },\n watch: {\n backgroundColor: \"#FCE7F3\",\n borderColor: \"#FBCFE8\",\n foregroundColor: \"#DB2777\",\n iconColor: \"#DB2777\",\n },\n critical: {\n backgroundColor: \"#FEE2E2\",\n borderColor: \"#FECACA\",\n foregroundColor: \"#DC2626\",\n iconColor: \"#DC2626\",\n },\n};\n\nexport function resolveConnectedDeviceSignalsTheme(\n theme?: ConnectedDeviceSignalsTheme,\n): ResolvedConnectedDeviceSignalsTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const swatchRadius: Radius = theme?.swatchRadius ?? \"full\";\n const badgeRadius: Radius = theme?.badgeRadius ?? \"full\";\n\n const blueAccent = \"#2563EB\";\n\n const resolveBadge = (\n severity: SignalBadgeSeverity,\n ): SignalBadgeStyle => {\n const fallback = BADGE_DEFAULTS[severity];\n const override = theme?.badgeStyles?.[severity];\n return {\n backgroundColor:\n override?.backgroundColor ?? fallback.backgroundColor,\n borderColor: override?.borderColor ?? fallback.borderColor,\n foregroundColor:\n override?.foregroundColor ?? fallback.foregroundColor,\n iconColor: override?.iconColor ?? fallback.iconColor,\n };\n };\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n accentBarColors: [\n theme?.accentBarStartColor ?? \"#EF4444\",\n theme?.accentBarMidColor ?? \"#F59E0B\",\n theme?.accentBarEndColor ?? \"#3B82F6\",\n ] as const,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n refreshPillBackgroundColor:\n theme?.refreshPillBackgroundColor ?? \"#EFF6FF\",\n refreshPillForegroundColor:\n theme?.refreshPillForegroundColor ?? blueAccent,\n refreshPillIconColor:\n theme?.refreshPillIconColor ?? blueAccent,\n titleColor: theme?.titleColor ?? base.textColor,\n bodyColor: theme?.bodyColor ?? base.mutedTextColor,\n signalSwatchBackgroundColor:\n theme?.signalSwatchBackgroundColor ?? \"#F1F5F9\",\n signalSwatchIconColor:\n theme?.signalSwatchIconColor ?? base.textColor,\n signalTitleColor:\n theme?.signalTitleColor ?? base.textColor,\n signalSourceColor:\n theme?.signalSourceColor ?? base.mutedTextColor,\n signalSubtitleColor:\n theme?.signalSubtitleColor ?? base.mutedTextColor,\n signalValueColor:\n theme?.signalValueColor ?? base.textColor,\n footerColor: theme?.footerColor ?? base.mutedTextColor,\n cardRadiusPx: radiusToPx[cardRadius],\n swatchRadiusPx: radiusToPx[swatchRadius],\n badgeRadiusPx: radiusToPx[badgeRadius],\n resolveBadge,\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, StyleSheet, Text, View } from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveCoverageSummaryTheme } from \"./theme\";\nimport type { CoverageCopayTile } from \"./payload\";\nimport type {\n AbCoverageSummaryProps,\n ResolvedCoverageSummaryTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"COVERAGE SUMMARY\";\n\nexport function AbCoverageSummary({\n data,\n theme,\n style,\n}: AbCoverageSummaryProps) {\n const t = useMemo(() => resolveCoverageSummaryTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const matchLabel =\n data.matchLabel === null ? null : data.matchLabel;\n const footnote = data.footnote === null ? null : data.footnote;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <LinearGradient\n colors={t.accentGradient}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.accentBar,\n {\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View style={styles.eyebrowWrap}>\n <Feather\n name=\"shield\"\n size={14}\n color={t.eyebrowColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n {matchLabel ? (\n <Text\n style={[\n styles.matchLabel,\n { color: t.matchLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {matchLabel}\n </Text>\n ) : null}\n </View>\n\n <Text\n style={[\n styles.planName,\n { color: t.planNameColor, fontFamily },\n ]}\n numberOfLines={2}\n >\n {data.planName}\n </Text>\n\n {data.planType ? (\n <Text\n style={[\n styles.planType,\n { color: t.planTypeColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.planType}\n </Text>\n ) : null}\n\n {data.copays && data.copays.length > 0 ? (\n <View style={styles.copayRow}>\n {data.copays.map((tile) => (\n <CopayTile key={tile.id} tile={tile} theme={t} />\n ))}\n </View>\n ) : null}\n\n {footnote ? (\n <Text\n style={[\n styles.footnote,\n { color: t.footnoteColor, fontFamily },\n ]}\n >\n {footnote}\n </Text>\n ) : null}\n </View>\n </View>\n );\n}\n\nfunction CopayTile({\n tile,\n theme: t,\n}: {\n tile: CoverageCopayTile;\n theme: ResolvedCoverageSummaryTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n return (\n <View\n style={[\n styles.copayTile,\n {\n backgroundColor: t.copayTileBackgroundColor,\n borderColor: t.copayTileBorderColor,\n borderRadius: t.copayTileRadiusPx,\n },\n ]}\n >\n <Text\n style={[\n styles.copayLabel,\n { color: t.copayLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {tile.label.toUpperCase()}\n </Text>\n <Text\n style={[\n styles.copayValue,\n { color: t.copayValueColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {tile.value}\n </Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 520,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 8,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n },\n eyebrowWrap: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n matchLabel: {\n fontSize: 13,\n },\n planName: {\n fontSize: 22,\n fontWeight: \"700\",\n lineHeight: 28,\n marginTop: 2,\n },\n planType: {\n fontSize: 14,\n marginTop: -4,\n },\n copayRow: {\n flexDirection: \"row\",\n gap: 10,\n marginTop: 8,\n },\n copayTile: {\n flex: 1,\n paddingVertical: 12,\n paddingHorizontal: 8,\n borderWidth: 1,\n alignItems: \"center\",\n gap: 4,\n },\n copayLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n },\n copayValue: {\n fontSize: 18,\n fontWeight: \"700\",\n },\n footnote: {\n fontSize: 13,\n lineHeight: 18,\n marginTop: 6,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/**\n * Theme overrides for `AbCoverageSummary`.\n *\n * Extends `Partial<BaseTheme>` so callers can pass `tone`, `mode`, etc.\n * and get the shared cascading behavior, then layers component-specific keys.\n */\nexport interface CoverageSummaryTheme extends Partial<BaseTheme> {\n /** Two-stop gradient for the thin accent bar across the top of the card. */\n accentGradientStart?: string;\n accentGradientEnd?: string;\n /** Eyebrow icon + label color. */\n eyebrowColor?: string;\n /** Right-aligned match-label color. */\n matchLabelColor?: string;\n /** Title (plan name) color. */\n planNameColor?: string;\n /** Plan type sub-line color. */\n planTypeColor?: string;\n /** Copay tile palette. */\n copayTileBackgroundColor?: string;\n copayTileBorderColor?: string;\n copayLabelColor?: string;\n copayValueColor?: string;\n /** Footnote color. */\n footnoteColor?: string;\n /** Radius tokens. */\n cardRadius?: Radius;\n copayTileRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the card internals. */\nexport interface ResolvedCoverageSummaryTheme {\n base: BaseTheme;\n accentGradient: [string, string];\n eyebrowColor: string;\n matchLabelColor: string;\n planNameColor: string;\n planTypeColor: string;\n copayTileBackgroundColor: string;\n copayTileBorderColor: string;\n copayLabelColor: string;\n copayValueColor: string;\n footnoteColor: string;\n cardRadiusPx: number;\n copayTileRadiusPx: number;\n}\n\nexport function resolveCoverageSummaryTheme(\n theme?: CoverageSummaryTheme,\n): ResolvedCoverageSummaryTheme {\n const base = resolveBaseTheme(theme);\n const cardRadius: Radius = theme?.cardRadius ?? \"lg\";\n const copayTileRadius: Radius = theme?.copayTileRadius ?? \"md\";\n\n // Cascade: explicit theme override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n accentGradient: [\n theme?.accentGradientStart ?? \"#EC4899\",\n theme?.accentGradientEnd ?? \"#3B82F6\",\n ],\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n matchLabelColor: theme?.matchLabelColor ?? base.mutedTextColor,\n planNameColor: theme?.planNameColor ?? base.textColor,\n planTypeColor: theme?.planTypeColor ?? base.mutedTextColor,\n copayTileBackgroundColor:\n theme?.copayTileBackgroundColor ?? base.iconBackgroundColor,\n copayTileBorderColor:\n theme?.copayTileBorderColor ?? base.borderColor,\n copayLabelColor: theme?.copayLabelColor ?? base.mutedTextColor,\n copayValueColor: theme?.copayValueColor ?? base.textColor,\n footnoteColor: theme?.footnoteColor ?? base.mutedTextColor,\n cardRadiusPx: radiusToPx[cardRadius],\n copayTileRadiusPx: radiusToPx[copayTileRadius],\n };\n}\n","import React, { useMemo, useRef } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveDeviceConnectPromptTheme } from \"./theme\";\nimport type { AbDeviceConnectPromptProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"CONNECT A DEVICE\";\nconst DEFAULT_EYEBROW_ICON = \"bluetooth\";\nconst DEFAULT_AVATAR_ICON = \"watch\";\nconst DEFAULT_PRIMARY_ICON = \"plus\";\n\nexport function AbDeviceConnectPrompt({\n data,\n theme,\n style,\n onPrimaryPress,\n onSecondaryPress,\n}: AbDeviceConnectPromptProps) {\n const t = useMemo(\n () => resolveDeviceConnectPromptTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIcon = data.eyebrowIconName ?? DEFAULT_EYEBROW_ICON;\n const avatarIcon = data.avatarIconName ?? DEFAULT_AVATAR_ICON;\n const primaryIcon =\n data.primaryAction.iconName ?? DEFAULT_PRIMARY_ICON;\n const showDot = data.showOnlineDot ?? true;\n\n // One-shot latches on the optional action handlers.\n const primaryFiredRef = useRef<boolean>(false);\n const secondaryFiredRef = useRef<boolean>(false);\n const handlePrimary = () => {\n if (primaryFiredRef.current) return;\n primaryFiredRef.current = true;\n onPrimaryPress?.();\n };\n const handleSecondary = () => {\n if (secondaryFiredRef.current) return;\n secondaryFiredRef.current = true;\n onSecondaryPress?.();\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <LinearGradient\n colors={t.accentBarColors as unknown as [string, string, string]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.accentBar,\n {\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View style={styles.eyebrowRow}>\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n {data.meta ? (\n <Text\n style={[\n styles.meta,\n { color: t.metaColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.meta}\n </Text>\n ) : null}\n </View>\n\n <View style={styles.heroRow}>\n <View style={styles.avatarWrap}>\n <LinearGradient\n colors={\n t.avatarColors as unknown as [string, string]\n }\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={[\n styles.avatar,\n { borderRadius: t.avatarRadiusPx },\n ]}\n >\n <Feather\n name={avatarIcon as never}\n size={26}\n color={t.avatarIconColor}\n />\n </LinearGradient>\n {showDot ? (\n <View\n style={[\n styles.onlineDot,\n {\n backgroundColor: t.onlineDotColor,\n borderColor: t.onlineDotBorderColor,\n },\n ]}\n />\n ) : null}\n </View>\n <View style={styles.heroText}>\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n {data.body ? (\n <Text\n style={[\n styles.bodyText,\n { color: t.bodyColor, fontFamily },\n ]}\n >\n {data.body}\n </Text>\n ) : null}\n </View>\n </View>\n\n {data.capabilities && data.capabilities.length > 0 ? (\n <View style={styles.chipsRow}>\n {data.capabilities.map((chip) => (\n <View\n key={chip.id}\n style={[\n styles.chip,\n {\n backgroundColor: t.chipBackgroundColor,\n borderColor: t.chipBorderColor,\n borderRadius: t.chipRadiusPx,\n },\n ]}\n >\n <Feather\n name={chip.iconName as never}\n size={12}\n color={t.chipIconColor}\n />\n <Text\n style={[\n styles.chipLabel,\n {\n color: t.chipForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {chip.label}\n </Text>\n </View>\n ))}\n </View>\n ) : null}\n\n <View style={styles.actionsRow}>\n <Pressable\n accessibilityRole=\"button\"\n disabled={!onPrimaryPress}\n onPress={onPrimaryPress ? handlePrimary : undefined}\n style={({ pressed }) => [\n styles.primaryButton,\n {\n backgroundColor: t.primaryButtonBackgroundColor,\n borderRadius: t.primaryButtonRadiusPx,\n opacity:\n pressed && onPrimaryPress ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={primaryIcon as never}\n size={16}\n color={t.primaryButtonIconColor}\n />\n <Text\n style={[\n styles.primaryButtonLabel,\n {\n color: t.primaryButtonForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.primaryAction.label}\n </Text>\n </Pressable>\n {data.secondaryAction ? (\n <Pressable\n accessibilityRole={\n onSecondaryPress ? \"button\" : undefined\n }\n disabled={!onSecondaryPress}\n onPress={\n onSecondaryPress ? handleSecondary : undefined\n }\n style={({ pressed }) => [\n styles.secondaryAction,\n {\n opacity:\n pressed && onSecondaryPress ? 0.7 : 1,\n },\n ]}\n hitSlop={6}\n >\n <Text\n style={[\n styles.secondaryActionLabel,\n {\n color: t.secondaryActionColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.secondaryAction.label}\n </Text>\n </Pressable>\n ) : null}\n </View>\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 600,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 14,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 10,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n meta: {\n fontSize: 11,\n fontWeight: \"600\",\n letterSpacing: 1,\n textTransform: \"uppercase\",\n },\n heroRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 14,\n },\n avatarWrap: {\n width: 56,\n height: 56,\n position: \"relative\",\n },\n avatar: {\n width: 56,\n height: 56,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n onlineDot: {\n position: \"absolute\",\n right: -2,\n bottom: -2,\n width: 14,\n height: 14,\n borderRadius: 999,\n borderWidth: 2,\n },\n heroText: {\n flex: 1,\n gap: 6,\n minWidth: 0,\n },\n title: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n },\n bodyText: {\n fontSize: 13,\n lineHeight: 19,\n },\n chipsRow: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n gap: 8,\n },\n chip: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 10,\n paddingVertical: 6,\n borderWidth: 1,\n },\n chipLabel: {\n fontSize: 12,\n fontWeight: \"600\",\n },\n actionsRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n marginTop: 4,\n },\n primaryButton: {\n flex: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 18,\n paddingVertical: 14,\n },\n primaryButtonLabel: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n secondaryAction: {\n paddingHorizontal: 8,\n paddingVertical: 10,\n },\n secondaryActionLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbDeviceConnectPrompt`. */\nexport interface DeviceConnectPromptTheme extends Partial<BaseTheme> {\n // Top accent bar (gradient)\n accentBarStartColor?: string;\n accentBarMidColor?: string;\n accentBarEndColor?: string;\n // Eyebrow + meta\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n metaColor?: string;\n // Avatar gradient + icon + online dot\n avatarStartColor?: string;\n avatarEndColor?: string;\n avatarIconColor?: string;\n onlineDotColor?: string;\n onlineDotBorderColor?: string;\n // Title + body\n titleColor?: string;\n bodyColor?: string;\n // Capability chips\n chipBackgroundColor?: string;\n chipBorderColor?: string;\n chipForegroundColor?: string;\n chipIconColor?: string;\n // Primary action\n primaryButtonBackgroundColor?: string;\n primaryButtonForegroundColor?: string;\n primaryButtonIconColor?: string;\n // Secondary action\n secondaryActionColor?: string;\n // Radii\n cardRadius?: Radius;\n avatarRadius?: Radius;\n chipRadius?: Radius;\n primaryButtonRadius?: Radius;\n}\n\nexport interface ResolvedDeviceConnectPromptTheme {\n base: BaseTheme;\n accentBarColors: readonly [string, string, string];\n eyebrowColor: string;\n eyebrowIconColor: string;\n metaColor: string;\n avatarColors: readonly [string, string];\n avatarIconColor: string;\n onlineDotColor: string;\n onlineDotBorderColor: string;\n titleColor: string;\n bodyColor: string;\n chipBackgroundColor: string;\n chipBorderColor: string;\n chipForegroundColor: string;\n chipIconColor: string;\n primaryButtonBackgroundColor: string;\n primaryButtonForegroundColor: string;\n primaryButtonIconColor: string;\n secondaryActionColor: string;\n cardRadiusPx: number;\n avatarRadiusPx: number;\n chipRadiusPx: number;\n primaryButtonRadiusPx: number;\n}\n\nexport function resolveDeviceConnectPromptTheme(\n theme?: DeviceConnectPromptTheme,\n): ResolvedDeviceConnectPromptTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const avatarRadius: Radius =\n theme?.avatarRadius ?? base.radius ?? \"lg\";\n const chipRadius: Radius = theme?.chipRadius ?? \"full\";\n const primaryButtonRadius: Radius =\n theme?.primaryButtonRadius ?? \"full\";\n\n return {\n base,\n accentBarColors: [\n theme?.accentBarStartColor ?? \"#EC4899\",\n theme?.accentBarMidColor ?? \"#F59E0B\",\n theme?.accentBarEndColor ?? \"#3B82F6\",\n ] as const,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n metaColor: theme?.metaColor ?? base.mutedTextColor,\n avatarColors: [\n theme?.avatarStartColor ?? \"#A78BFA\",\n theme?.avatarEndColor ?? \"#6366F1\",\n ] as const,\n avatarIconColor: theme?.avatarIconColor ?? \"#FFFFFF\",\n onlineDotColor: theme?.onlineDotColor ?? \"#22C55E\",\n onlineDotBorderColor:\n theme?.onlineDotBorderColor ?? base.surfaceColor,\n titleColor: theme?.titleColor ?? base.textColor,\n bodyColor: theme?.bodyColor ?? base.mutedTextColor,\n chipBackgroundColor:\n theme?.chipBackgroundColor ?? base.surfaceColor,\n chipBorderColor:\n theme?.chipBorderColor ?? base.borderColor,\n chipForegroundColor:\n theme?.chipForegroundColor ?? base.textColor,\n chipIconColor:\n theme?.chipIconColor ?? base.mutedTextColor,\n primaryButtonBackgroundColor:\n theme?.primaryButtonBackgroundColor ?? \"#2563EB\",\n primaryButtonForegroundColor:\n theme?.primaryButtonForegroundColor ?? \"#FFFFFF\",\n primaryButtonIconColor:\n theme?.primaryButtonIconColor ?? \"#FFFFFF\",\n secondaryActionColor:\n theme?.secondaryActionColor ?? base.mutedTextColor,\n cardRadiusPx: radiusToPx[cardRadius],\n avatarRadiusPx: radiusToPx[avatarRadius],\n chipRadiusPx: radiusToPx[chipRadius],\n primaryButtonRadiusPx: radiusToPx[primaryButtonRadius],\n };\n}\n","import React, { useMemo, useState } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\n\nimport { resolveEducationalInformationTheme } from \"./theme\";\nimport type { EducationalSection } from \"./payload\";\nimport type {\n AbEducationalInformationProps,\n ResolvedEducationalInformationTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"EDUCATIONAL INFORMATION\";\nconst DEFAULT_READ_MORE = \"Read more\";\nconst DEFAULT_SHOW_LESS = \"Show less\";\n\nexport function AbEducationalInformation({\n data,\n theme,\n style,\n expanded,\n onExpandedChange,\n}: AbEducationalInformationProps) {\n const t = useMemo(\n () => resolveEducationalInformationTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const hasSections =\n !!data.sections && data.sections.length > 0;\n const initialExpanded =\n data.defaultExpanded ?? (hasSections ? false : true);\n const [internalExpanded, setInternalExpanded] =\n useState<boolean>(initialExpanded);\n const isExpanded =\n expanded !== undefined ? expanded : internalExpanded;\n const footnote = data.footnote === null ? null : data.footnote;\n\n const toggleExpanded = () => {\n const next = !isExpanded;\n if (expanded === undefined) setInternalExpanded(next);\n onExpandedChange?.(next);\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View style={styles.eyebrowRow}>\n <Feather\n name=\"book-open\"\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n\n <Text\n style={[\n styles.summary,\n { color: t.summaryColor, fontFamily },\n ]}\n >\n {data.summary}\n </Text>\n\n {hasSections ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: isExpanded }}\n onPress={toggleExpanded}\n style={({ pressed }) => [\n styles.toggleRow,\n { opacity: pressed ? 0.7 : 1 },\n ]}\n >\n <Text\n style={[\n styles.toggleLabel,\n { color: t.toggleColor, fontFamily },\n ]}\n >\n {isExpanded\n ? data.showLessLabel ?? DEFAULT_SHOW_LESS\n : data.readMoreLabel ?? DEFAULT_READ_MORE}\n </Text>\n <Feather\n name={isExpanded ? \"chevron-up\" : \"chevron-down\"}\n size={16}\n color={t.toggleColor}\n />\n </Pressable>\n ) : null}\n\n {hasSections && isExpanded ? (\n <View style={styles.sectionsList}>\n {data.sections!.map((section) => (\n <SectionBlock\n key={section.id}\n section={section}\n theme={t}\n />\n ))}\n </View>\n ) : null}\n\n {footnote ? (\n <Text\n style={[\n styles.footnote,\n { color: t.footnoteColor, fontFamily },\n ]}\n >\n {footnote}\n </Text>\n ) : null}\n </View>\n );\n}\n\nfunction SectionBlock({\n section,\n theme: t,\n}: {\n section: EducationalSection;\n theme: ResolvedEducationalInformationTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n const dotColor = t.bulletColors[section.bulletTone ?? \"info\"];\n return (\n <View style={styles.section}>\n {section.title ? (\n <Text\n style={[\n styles.sectionTitle,\n { color: t.sectionTitleColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {section.title}\n </Text>\n ) : null}\n <View style={styles.bulletsList}>\n {section.items.map((item) => (\n <View key={item.id} style={styles.bulletRow}>\n <View\n style={[\n styles.bulletDot,\n { backgroundColor: dotColor },\n ]}\n />\n <Text\n style={[\n styles.bulletText,\n { color: t.bulletTextColor, fontFamily },\n ]}\n >\n {item.text}\n </Text>\n </View>\n ))}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 560,\n borderWidth: 1,\n padding: 20,\n gap: 12,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n title: {\n fontSize: 20,\n fontWeight: \"700\",\n lineHeight: 26,\n },\n summary: {\n fontSize: 15,\n lineHeight: 22,\n },\n toggleRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 4,\n alignSelf: \"flex-start\",\n },\n toggleLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n sectionsList: {\n gap: 16,\n marginTop: 4,\n },\n section: {\n gap: 8,\n },\n sectionTitle: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n bulletsList: {\n gap: 6,\n },\n bulletRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n },\n bulletDot: {\n width: 7,\n height: 7,\n borderRadius: 3.5,\n marginTop: 8,\n },\n bulletText: {\n flex: 1,\n fontSize: 15,\n lineHeight: 22,\n },\n footnote: {\n fontSize: 12,\n lineHeight: 18,\n marginTop: 4,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { EducationalBulletTone } from \"./payload\";\n\n/** Theme overrides for `AbEducationalInformation`. */\nexport interface EducationalInformationTheme extends Partial<BaseTheme> {\n // Eyebrow\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n // Title + summary\n titleColor?: string;\n summaryColor?: string;\n // Toggle\n toggleColor?: string;\n // Section subheader\n sectionTitleColor?: string;\n // Bullet text\n bulletTextColor?: string;\n // Per-tone bullet dot colour\n bulletInfoColor?: string;\n bulletWarningColor?: string;\n bulletSuccessColor?: string;\n bulletDangerColor?: string;\n bulletNeutralColor?: string;\n // Footnote\n footnoteColor?: string;\n // Radii\n cardRadius?: Radius;\n}\n\nexport interface ResolvedEducationalInformationTheme {\n base: BaseTheme;\n eyebrowColor: string;\n eyebrowIconColor: string;\n titleColor: string;\n summaryColor: string;\n toggleColor: string;\n sectionTitleColor: string;\n bulletTextColor: string;\n bulletColors: Record<EducationalBulletTone, string>;\n footnoteColor: string;\n cardRadiusPx: number;\n}\n\nexport function resolveEducationalInformationTheme(\n theme?: EducationalInformationTheme,\n): ResolvedEducationalInformationTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n titleColor: theme?.titleColor ?? base.textColor,\n summaryColor: theme?.summaryColor ?? base.textColor,\n toggleColor: theme?.toggleColor ?? \"#2563EB\",\n sectionTitleColor:\n theme?.sectionTitleColor ?? base.mutedTextColor,\n bulletTextColor: theme?.bulletTextColor ?? base.textColor,\n bulletColors: {\n info: theme?.bulletInfoColor ?? \"#3B82F6\",\n warning: theme?.bulletWarningColor ?? \"#F59E0B\",\n success: theme?.bulletSuccessColor ?? \"#10B981\",\n danger: theme?.bulletDangerColor ?? \"#EF4444\",\n neutral: theme?.bulletNeutralColor ?? base.mutedTextColor,\n },\n footnoteColor: theme?.footnoteColor ?? base.mutedTextColor,\n cardRadiusPx: radiusToPx[cardRadius],\n };\n}\n","import React, { useMemo, useRef } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather, MaterialCommunityIcons } from \"@expo/vector-icons\";\n\nimport { resolveEmergencyEscalationTheme } from \"./theme\";\nimport type { AbEmergencyEscalationProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"EMERGENCY ESCALATION\";\nconst DEFAULT_EYEBROW_ICON_MCI = \"alarm-light\";\nconst DEFAULT_EYEBROW_ICON_FEATHER = \"bell\";\nconst DEFAULT_CALL_ICON = \"phone\";\n\nexport function AbEmergencyEscalation({\n data,\n theme,\n style,\n onCallPress,\n}: AbEmergencyEscalationProps) {\n const t = useMemo(\n () => resolveEmergencyEscalationTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIconFamily =\n data.eyebrowIconFamily ?? \"material-community\";\n const eyebrowIcon =\n data.eyebrowIconName ??\n (eyebrowIconFamily === \"feather\"\n ? DEFAULT_EYEBROW_ICON_FEATHER\n : DEFAULT_EYEBROW_ICON_MCI);\n const callIcon = data.callAction.iconName ?? DEFAULT_CALL_ICON;\n\n // One-shot latch on the optional handler.\n const callFiredRef = useRef<boolean>(false);\n const handleCall = () => {\n if (callFiredRef.current) return;\n callFiredRef.current = true;\n onCallPress?.();\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(220, 38, 38, 0.10)\" },\n default: {\n shadowColor: \"#DC2626\",\n shadowOpacity: 0.12,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.cardBackgroundColor,\n borderColor: t.cardBorderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View\n style={[\n styles.accentBar,\n {\n backgroundColor: t.accentBarColor,\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.eyebrowRow}>\n {eyebrowIconFamily === \"feather\" ? (\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n ) : (\n <MaterialCommunityIcons\n name={eyebrowIcon as never}\n size={16}\n color={t.eyebrowIconColor}\n style={styles.eyebrowMciIcon}\n />\n )}\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n\n <Text\n style={[\n styles.message,\n { color: t.messageColor, fontFamily },\n ]}\n >\n {data.message}\n </Text>\n\n <Pressable\n accessibilityRole=\"button\"\n disabled={!onCallPress}\n onPress={onCallPress ? handleCall : undefined}\n style={({ pressed }) => [\n styles.callButton,\n {\n backgroundColor: t.callButtonBackgroundColor,\n borderRadius: t.buttonRadiusPx,\n opacity: pressed && onCallPress ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={callIcon as never}\n size={18}\n color={t.callButtonIconColor}\n />\n <Text\n style={[\n styles.callButtonLabel,\n {\n color: t.callButtonForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.callAction.label}\n </Text>\n </Pressable>\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 600,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 12,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrowMciIcon: {\n marginTop: -1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"800\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n message: {\n fontSize: 15,\n lineHeight: 21,\n },\n callButton: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 10,\n paddingHorizontal: 18,\n paddingVertical: 16,\n marginTop: 4,\n },\n callButtonLabel: {\n fontSize: 17,\n fontWeight: \"700\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbEmergencyEscalation`. */\nexport interface EmergencyEscalationTheme extends Partial<BaseTheme> {\n // Top accent bar (solid red strip)\n accentBarColor?: string;\n // Card surface (subtle red-tinted background + red border)\n cardBackgroundColor?: string;\n cardBorderColor?: string;\n // Eyebrow + body\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n messageColor?: string;\n // Primary call button\n callButtonBackgroundColor?: string;\n callButtonForegroundColor?: string;\n callButtonIconColor?: string;\n // Radii\n cardRadius?: Radius;\n buttonRadius?: Radius;\n}\n\nexport interface ResolvedEmergencyEscalationTheme {\n base: BaseTheme;\n accentBarColor: string;\n cardBackgroundColor: string;\n cardBorderColor: string;\n eyebrowColor: string;\n eyebrowIconColor: string;\n messageColor: string;\n callButtonBackgroundColor: string;\n callButtonForegroundColor: string;\n callButtonIconColor: string;\n cardRadiusPx: number;\n buttonRadiusPx: number;\n}\n\nexport function resolveEmergencyEscalationTheme(\n theme?: EmergencyEscalationTheme,\n): ResolvedEmergencyEscalationTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const buttonRadius: Radius = theme?.buttonRadius ?? \"full\";\n\n // Brand-fixed red palette for the alert.\n const redAccent = \"#DC2626\";\n const redDeep = \"#B91C1C\";\n const redTintBg = \"#FEF2F2\";\n const redBorder = \"#FECACA\";\n\n return {\n base,\n accentBarColor: theme?.accentBarColor ?? redAccent,\n cardBackgroundColor:\n theme?.cardBackgroundColor ?? redTintBg,\n cardBorderColor: theme?.cardBorderColor ?? redBorder,\n eyebrowColor: theme?.eyebrowColor ?? redDeep,\n eyebrowIconColor: theme?.eyebrowIconColor ?? redDeep,\n messageColor: theme?.messageColor ?? base.textColor,\n callButtonBackgroundColor:\n theme?.callButtonBackgroundColor ?? redAccent,\n callButtonForegroundColor:\n theme?.callButtonForegroundColor ?? \"#FFFFFF\",\n callButtonIconColor:\n theme?.callButtonIconColor ?? \"#FFFFFF\",\n cardRadiusPx: radiusToPx[cardRadius],\n buttonRadiusPx: radiusToPx[buttonRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, StyleSheet, Text, View } from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveEstimatedCostTheme } from \"./theme\";\nimport type { AbEstimatedCostProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"ESTIMATED COST\";\n\nexport function AbEstimatedCost({\n data,\n theme,\n style,\n}: AbEstimatedCostProps) {\n const t = useMemo(() => resolveEstimatedCostTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const currency = data.currency === null ? null : data.currency;\n const description =\n data.description === null ? null : data.description;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <LinearGradient\n colors={t.accentGradient}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.accentBar,\n {\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.eyebrowRow}>\n <Feather\n name=\"credit-card\"\n size={14}\n color={t.eyebrowColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n\n <View style={styles.amountRow}>\n <Text\n style={[\n styles.amount,\n { color: t.amountColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.minAmount}\n </Text>\n {data.maxAmount ? (\n <>\n <Text\n style={[\n styles.rangeSeparator,\n { color: t.rangeSeparatorColor, fontFamily },\n ]}\n >\n {\"–\"}\n </Text>\n <Text\n style={[\n styles.amountSecondary,\n { color: t.amountSecondaryColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.maxAmount}\n </Text>\n </>\n ) : null}\n {currency ? (\n <Text\n style={[\n styles.currency,\n { color: t.currencyColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {currency}\n </Text>\n ) : null}\n </View>\n\n {description ? (\n <Text\n style={[\n styles.description,\n { color: t.descriptionColor, fontFamily },\n ]}\n >\n {description}\n </Text>\n ) : null}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 520,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 10,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n },\n amountRow: {\n flexDirection: \"row\",\n alignItems: \"baseline\",\n flexWrap: \"wrap\",\n gap: 6,\n },\n amount: {\n fontSize: 30,\n fontWeight: \"700\",\n lineHeight: 36,\n },\n rangeSeparator: {\n fontSize: 26,\n fontWeight: \"500\",\n },\n amountSecondary: {\n fontSize: 24,\n fontWeight: \"700\",\n },\n currency: {\n fontSize: 13,\n fontWeight: \"500\",\n marginLeft: 4,\n },\n description: {\n fontSize: 13,\n lineHeight: 18,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/**\n * Theme overrides for `AbEstimatedCost`.\n *\n * Extends `Partial<BaseTheme>` so callers can pass `tone`, `mode`, etc.\n * and get the shared cascading behavior, then layers component-specific keys.\n */\nexport interface EstimatedCostTheme extends Partial<BaseTheme> {\n /** Two-stop gradient for the thin accent bar across the top of the card. */\n accentGradientStart?: string;\n accentGradientEnd?: string;\n /** Eyebrow icon + label color. */\n eyebrowColor?: string;\n /** Primary amount text color. */\n amountColor?: string;\n /** Secondary amount text color (upper bound of a range). */\n amountSecondaryColor?: string;\n /** Range separator (\"–\") color. */\n rangeSeparatorColor?: string;\n /** Currency suffix color. */\n currencyColor?: string;\n /** Description color. */\n descriptionColor?: string;\n /** Card radius token. */\n cardRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the card internals. */\nexport interface ResolvedEstimatedCostTheme {\n base: BaseTheme;\n accentGradient: [string, string];\n eyebrowColor: string;\n amountColor: string;\n amountSecondaryColor: string;\n rangeSeparatorColor: string;\n currencyColor: string;\n descriptionColor: string;\n cardRadiusPx: number;\n}\n\nexport function resolveEstimatedCostTheme(\n theme?: EstimatedCostTheme,\n): ResolvedEstimatedCostTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n\n // Cascade: explicit theme override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n accentGradient: [\n theme?.accentGradientStart ?? \"#EC4899\",\n theme?.accentGradientEnd ?? \"#3B82F6\",\n ],\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n amountColor: theme?.amountColor ?? base.textColor,\n amountSecondaryColor:\n theme?.amountSecondaryColor ?? base.mutedTextColor,\n rangeSeparatorColor:\n theme?.rangeSeparatorColor ?? base.mutedTextColor,\n currencyColor: theme?.currencyColor ?? base.mutedTextColor,\n descriptionColor: theme?.descriptionColor ?? base.mutedTextColor,\n cardRadiusPx: radiusToPx[cardRadius],\n };\n}\n","import React, { useMemo, useRef, useState } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveFollowUpCheckInTheme } from \"./theme\";\nimport type { AbFollowUpCheckInProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"FOLLOW-UP CHECK-IN\";\nconst DEFAULT_EYEBROW_ICON = \"heart\";\nconst DEFAULT_PILL_ICON = \"calendar\";\nconst DEFAULT_PICK_LABEL = \"Pick\";\n\nexport function AbFollowUpCheckIn({\n data,\n theme,\n style,\n selectedFeelingId,\n onSelectedFeelingChange,\n pickedActionIds,\n onPickedActionIdsChange,\n onPickAction,\n}: AbFollowUpCheckInProps) {\n const t = useMemo(() => resolveFollowUpCheckInTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIcon = data.eyebrowIconName ?? DEFAULT_EYEBROW_ICON;\n const pillIcon = data.scheduledPill?.iconName ?? DEFAULT_PILL_ICON;\n\n const [internalFeeling, setInternalFeeling] = useState<string | null>(\n null,\n );\n const activeFeelingId =\n selectedFeelingId !== undefined ? selectedFeelingId : internalFeeling;\n const [internalPicked, setInternalPicked] = useState<string[]>([]);\n const activePicked = pickedActionIds ?? internalPicked;\n const pickedSet = useMemo(\n () => new Set(activePicked),\n [activePicked],\n );\n\n // One-shot latches per action id so onPickAction fires at most\n // once per id per mount, even with controlled async parent updates.\n const firedActionsRef = useRef<Set<string>>(new Set());\n\n const activeFeeling = useMemo(\n () => data.feelings.find((f) => f.id === activeFeelingId) ?? null,\n [data.feelings, activeFeelingId],\n );\n\n const handleSelectFeeling = (feelingId: string) => {\n if (selectedFeelingId === undefined) setInternalFeeling(feelingId);\n onSelectedFeelingChange?.(feelingId);\n };\n\n const handlePickAction = (actionId: string) => {\n if (!activeFeeling) return;\n if (firedActionsRef.current.has(actionId)) return;\n if (pickedSet.has(actionId)) return;\n const action = activeFeeling.actions.find((a) => a.id === actionId);\n if (!action) return;\n firedActionsRef.current.add(actionId);\n const nextIds = [...activePicked, actionId];\n if (pickedActionIds === undefined) setInternalPicked(nextIds);\n onPickedActionIdsChange?.(nextIds);\n onPickAction?.(activeFeeling, action);\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View style={styles.headerRow}>\n <View style={styles.eyebrowRow}>\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n >\n {eyebrow}\n </Text>\n </View>\n {data.scheduledPill ? (\n <View\n style={[\n styles.pill,\n {\n backgroundColor: t.scheduledPillBackgroundColor,\n },\n ]}\n >\n <Feather\n name={pillIcon as never}\n size={14}\n color={t.scheduledPillIconColor}\n />\n <Text\n style={[\n styles.pillLabel,\n {\n color: t.scheduledPillForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.scheduledPill.label}\n </Text>\n </View>\n ) : null}\n </View>\n\n <Text\n style={[styles.title, { color: t.titleColor, fontFamily }]}\n >\n {data.title}\n </Text>\n {data.body ? (\n <Text\n style={[styles.body, { color: t.bodyColor, fontFamily }]}\n >\n {data.body}\n </Text>\n ) : null}\n\n <View style={styles.feelingsGrid}>\n {data.feelings.map((feeling) => {\n const isSelected = activeFeelingId === feeling.id;\n const isDimmed =\n !!activeFeelingId && activeFeelingId !== feeling.id;\n const tone = t.resolveTone(feeling.tone ?? \"neutral\");\n return (\n <Pressable\n key={feeling.id}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: isSelected }}\n onPress={() => handleSelectFeeling(feeling.id)}\n style={({ pressed }) => [\n styles.feelingCard,\n {\n backgroundColor: isSelected\n ? t.feelingCardSelectedBackgroundColor\n : t.feelingCardBackgroundColor,\n borderColor: isSelected\n ? t.feelingCardSelectedBorderColor\n : t.feelingCardBorderColor,\n borderRadius: t.feelingCardRadiusPx,\n opacity: isDimmed\n ? t.feelingDimmedOpacity\n : pressed\n ? 0.9\n : 1,\n },\n ]}\n >\n {isSelected ? (\n <View\n style={[\n styles.feelingCheck,\n {\n backgroundColor: t.feelingCheckBackgroundColor,\n },\n ]}\n >\n <Feather\n name={\"check\" as never}\n size={12}\n color={t.feelingCheckForegroundColor}\n />\n </View>\n ) : null}\n <View\n style={[\n styles.feelingIcon,\n {\n backgroundColor: tone.iconBackgroundColor,\n borderRadius: t.iconRadiusPx,\n },\n ]}\n >\n <Feather\n name={feeling.iconName as never}\n size={20}\n color={tone.iconForegroundColor}\n />\n </View>\n <Text\n style={[\n styles.feelingLabel,\n {\n color: t.feelingLabelColor,\n fontFamily,\n },\n ]}\n numberOfLines={2}\n >\n {feeling.label}\n </Text>\n {feeling.subtitle ? (\n <Text\n style={[\n styles.feelingSubtitle,\n {\n color: t.feelingSubtitleColor,\n fontFamily,\n },\n ]}\n numberOfLines={2}\n >\n {feeling.subtitle}\n </Text>\n ) : null}\n </Pressable>\n );\n })}\n </View>\n\n {activeFeeling ? (\n <View style={styles.actionsBlock}>\n <Text\n style={[\n styles.sectionLabel,\n { color: t.sectionLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {activeFeeling.sectionLabel}\n </Text>\n {activeFeeling.actions.map((action) => {\n const isDone = pickedSet.has(action.id);\n const pickLabel = action.pickLabel ?? DEFAULT_PICK_LABEL;\n if (isDone) {\n return (\n <View\n key={action.id}\n style={[\n styles.doneRow,\n {\n backgroundColor: t.doneBackgroundColor,\n borderColor: t.doneBorderColor,\n borderRadius: t.actionRadiusPx,\n },\n ]}\n >\n <View\n style={[\n styles.doneCheck,\n {\n backgroundColor: t.doneCheckBackgroundColor,\n borderRadius: t.iconRadiusPx,\n },\n ]}\n >\n <Feather\n name={\"check\" as never}\n size={16}\n color={t.doneCheckForegroundColor}\n />\n </View>\n <View style={styles.actionText}>\n <Text\n style={[\n styles.actionTitle,\n styles.doneTitle,\n {\n color: t.doneTitleColor,\n fontFamily,\n },\n ]}\n >\n {action.title}\n </Text>\n {action.subtitle ? (\n <Text\n style={[\n styles.actionSubtitle,\n {\n color: t.doneSubtitleColor,\n fontFamily,\n },\n ]}\n >\n {action.subtitle}\n </Text>\n ) : null}\n </View>\n </View>\n );\n }\n return (\n <View key={action.id} style={styles.actionRow}>\n <LinearGradient\n colors={\n t.actionIconGradient as unknown as [string, string]\n }\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={[\n styles.actionIcon,\n { borderRadius: t.iconRadiusPx },\n ]}\n >\n <Feather\n name={action.iconName as never}\n size={18}\n color={t.actionIconForegroundColor}\n />\n </LinearGradient>\n <View style={styles.actionText}>\n <Text\n style={[\n styles.actionTitle,\n {\n color: t.actionTitleColor,\n fontFamily,\n },\n ]}\n >\n {action.title}\n </Text>\n {action.subtitle ? (\n <Text\n style={[\n styles.actionSubtitle,\n {\n color: t.actionSubtitleColor,\n fontFamily,\n },\n ]}\n >\n {action.subtitle}\n </Text>\n ) : null}\n </View>\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => handlePickAction(action.id)}\n style={({ pressed }) => [\n styles.pickBtn,\n { opacity: pressed ? 0.7 : 1 },\n ]}\n hitSlop={8}\n >\n <Text\n style={[\n styles.pickLabel,\n {\n color: t.actionPickColor,\n fontFamily,\n },\n ]}\n >\n {pickLabel}\n </Text>\n <Feather\n name={\"arrow-right\" as never}\n size={14}\n color={t.actionPickColor}\n />\n </Pressable>\n </View>\n );\n })}\n </View>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 600,\n borderWidth: 1,\n padding: 18,\n gap: 12,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n pill: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 999,\n },\n pillLabel: {\n fontSize: 12,\n fontWeight: \"600\",\n },\n title: {\n fontSize: 20,\n fontWeight: \"700\",\n lineHeight: 26,\n marginTop: 4,\n },\n body: {\n fontSize: 14,\n lineHeight: 20,\n },\n feelingsGrid: {\n flexDirection: \"row\",\n gap: 12,\n marginTop: 8,\n },\n feelingCard: {\n flex: 1,\n paddingVertical: 16,\n paddingHorizontal: 12,\n alignItems: \"center\",\n gap: 8,\n borderWidth: 2,\n position: \"relative\",\n },\n feelingCheck: {\n position: \"absolute\",\n top: 8,\n right: 8,\n width: 20,\n height: 20,\n borderRadius: 10,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n feelingIcon: {\n width: 44,\n height: 44,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n feelingLabel: {\n fontSize: 14,\n fontWeight: \"700\",\n textAlign: \"center\",\n },\n feelingSubtitle: {\n fontSize: 12,\n lineHeight: 16,\n textAlign: \"center\",\n },\n actionsBlock: {\n marginTop: 12,\n gap: 12,\n },\n sectionLabel: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n actionRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n },\n actionIcon: {\n width: 40,\n height: 40,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n actionText: {\n flex: 1,\n gap: 2,\n },\n actionTitle: {\n fontSize: 14,\n fontWeight: \"700\",\n lineHeight: 20,\n },\n doneTitle: {\n textDecorationLine: \"line-through\",\n },\n actionSubtitle: {\n fontSize: 13,\n lineHeight: 18,\n },\n pickBtn: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 4,\n paddingVertical: 4,\n paddingHorizontal: 4,\n },\n pickLabel: {\n fontSize: 14,\n fontWeight: \"700\",\n },\n doneRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n paddingHorizontal: 12,\n paddingVertical: 12,\n borderWidth: 1,\n },\n doneCheck: {\n width: 36,\n height: 36,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { FollowUpFeelingTone } from \"./payload\";\n\nexport interface FollowUpFeelingToneStyle {\n iconBackgroundColor: string;\n iconForegroundColor: string;\n}\n\n/** Theme overrides for `AbFollowUpCheckIn`. */\nexport interface FollowUpCheckInTheme extends Partial<BaseTheme> {\n // Eyebrow + scheduled pill\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n scheduledPillBackgroundColor?: string;\n scheduledPillForegroundColor?: string;\n scheduledPillIconColor?: string;\n // Title + body\n titleColor?: string;\n bodyColor?: string;\n // Feeling cards\n feelingLabelColor?: string;\n feelingSubtitleColor?: string;\n feelingCardBackgroundColor?: string;\n feelingCardBorderColor?: string;\n feelingCardSelectedBorderColor?: string;\n feelingCardSelectedBackgroundColor?: string;\n feelingCheckBackgroundColor?: string;\n feelingCheckForegroundColor?: string;\n feelingDimmedOpacity?: number;\n toneStyles?: Partial<\n Record<FollowUpFeelingTone, Partial<FollowUpFeelingToneStyle>>\n >;\n // Section label\n sectionLabelColor?: string;\n // Action rows\n actionTitleColor?: string;\n actionSubtitleColor?: string;\n actionPickColor?: string;\n actionIconGradientStart?: string;\n actionIconGradientEnd?: string;\n actionIconForegroundColor?: string;\n // Done row\n doneTitleColor?: string;\n doneSubtitleColor?: string;\n doneBackgroundColor?: string;\n doneBorderColor?: string;\n doneCheckBackgroundColor?: string;\n doneCheckForegroundColor?: string;\n // Radii\n cardRadius?: Radius;\n feelingCardRadius?: Radius;\n actionRadius?: Radius;\n iconRadius?: Radius;\n}\n\nexport interface ResolvedFollowUpCheckInTheme {\n base: BaseTheme;\n eyebrowColor: string;\n eyebrowIconColor: string;\n scheduledPillBackgroundColor: string;\n scheduledPillForegroundColor: string;\n scheduledPillIconColor: string;\n titleColor: string;\n bodyColor: string;\n feelingLabelColor: string;\n feelingSubtitleColor: string;\n feelingCardBackgroundColor: string;\n feelingCardBorderColor: string;\n feelingCardSelectedBorderColor: string;\n feelingCardSelectedBackgroundColor: string;\n feelingCheckBackgroundColor: string;\n feelingCheckForegroundColor: string;\n feelingDimmedOpacity: number;\n sectionLabelColor: string;\n actionTitleColor: string;\n actionSubtitleColor: string;\n actionPickColor: string;\n actionIconGradient: readonly [string, string];\n actionIconForegroundColor: string;\n doneTitleColor: string;\n doneSubtitleColor: string;\n doneBackgroundColor: string;\n doneBorderColor: string;\n doneCheckBackgroundColor: string;\n doneCheckForegroundColor: string;\n cardRadiusPx: number;\n feelingCardRadiusPx: number;\n actionRadiusPx: number;\n iconRadiusPx: number;\n resolveTone: (tone: FollowUpFeelingTone) => FollowUpFeelingToneStyle;\n}\n\nconst TONE_DEFAULTS: Record<FollowUpFeelingTone, FollowUpFeelingToneStyle> = {\n positive: {\n iconBackgroundColor: \"#10B981\",\n iconForegroundColor: \"#FFFFFF\",\n },\n neutral: {\n iconBackgroundColor: \"#F59E0B\",\n iconForegroundColor: \"#FFFFFF\",\n },\n negative: {\n iconBackgroundColor: \"#E11D48\",\n iconForegroundColor: \"#FFFFFF\",\n },\n};\n\nexport function resolveFollowUpCheckInTheme(\n theme?: FollowUpCheckInTheme,\n): ResolvedFollowUpCheckInTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const feelingCardRadius: Radius =\n theme?.feelingCardRadius ?? base.radius ?? \"md\";\n const actionRadius: Radius = theme?.actionRadius ?? base.radius ?? \"md\";\n const iconRadius: Radius = theme?.iconRadius ?? \"full\";\n\n const blueAccent = \"#2563EB\";\n\n const resolveTone = (\n tone: FollowUpFeelingTone,\n ): FollowUpFeelingToneStyle => {\n const fallback = TONE_DEFAULTS[tone];\n const override = theme?.toneStyles?.[tone];\n return {\n iconBackgroundColor:\n override?.iconBackgroundColor ?? fallback.iconBackgroundColor,\n iconForegroundColor:\n override?.iconForegroundColor ?? fallback.iconForegroundColor,\n };\n };\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor: theme?.eyebrowIconColor ?? base.mutedTextColor,\n scheduledPillBackgroundColor:\n theme?.scheduledPillBackgroundColor ?? \"#DBEAFE\",\n scheduledPillForegroundColor:\n theme?.scheduledPillForegroundColor ?? blueAccent,\n scheduledPillIconColor:\n theme?.scheduledPillIconColor ?? blueAccent,\n titleColor: theme?.titleColor ?? base.textColor,\n bodyColor: theme?.bodyColor ?? base.mutedTextColor,\n feelingLabelColor: theme?.feelingLabelColor ?? base.textColor,\n feelingSubtitleColor:\n theme?.feelingSubtitleColor ?? base.mutedTextColor,\n feelingCardBackgroundColor:\n theme?.feelingCardBackgroundColor ?? base.surfaceColor,\n feelingCardBorderColor:\n theme?.feelingCardBorderColor ?? \"transparent\",\n feelingCardSelectedBorderColor:\n theme?.feelingCardSelectedBorderColor ?? \"#BFDBFE\",\n feelingCardSelectedBackgroundColor:\n theme?.feelingCardSelectedBackgroundColor ?? \"#EFF6FF\",\n feelingCheckBackgroundColor:\n theme?.feelingCheckBackgroundColor ?? \"#16A34A\",\n feelingCheckForegroundColor:\n theme?.feelingCheckForegroundColor ?? \"#FFFFFF\",\n feelingDimmedOpacity: theme?.feelingDimmedOpacity ?? 0.55,\n sectionLabelColor:\n theme?.sectionLabelColor ?? base.mutedTextColor,\n actionTitleColor: theme?.actionTitleColor ?? base.textColor,\n actionSubtitleColor:\n theme?.actionSubtitleColor ?? base.mutedTextColor,\n actionPickColor: theme?.actionPickColor ?? blueAccent,\n actionIconGradient: [\n theme?.actionIconGradientStart ?? \"#F97316\",\n theme?.actionIconGradientEnd ?? \"#EF4444\",\n ] as const,\n actionIconForegroundColor:\n theme?.actionIconForegroundColor ?? \"#FFFFFF\",\n doneTitleColor: theme?.doneTitleColor ?? \"#94A3B8\",\n doneSubtitleColor:\n theme?.doneSubtitleColor ?? base.mutedTextColor,\n doneBackgroundColor:\n theme?.doneBackgroundColor ?? \"#F0FDF4\",\n doneBorderColor: theme?.doneBorderColor ?? \"#BBF7D0\",\n doneCheckBackgroundColor:\n theme?.doneCheckBackgroundColor ?? \"#DCFCE7\",\n doneCheckForegroundColor:\n theme?.doneCheckForegroundColor ?? \"#16A34A\",\n cardRadiusPx: radiusToPx[cardRadius],\n feelingCardRadiusPx: radiusToPx[feelingCardRadius],\n actionRadiusPx: radiusToPx[actionRadius],\n iconRadiusPx: radiusToPx[iconRadius],\n resolveTone,\n };\n}\n","import React, { useMemo, useRef, useState } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveHealthRecordImportPromptTheme } from \"./theme\";\nimport type {\n AbHealthRecordImportPromptProps,\n HealthRecordImportDecision,\n} from \"./types\";\n\nconst DEFAULT_AVATAR_ICON = \"file-text\";\nconst DEFAULT_ASSURANCE_ICON = \"shield\";\nconst DEFAULT_DECLINE_LABEL = \"Not now\";\nconst DEFAULT_ACCEPT_LABEL = \"Import\";\nconst DEFAULT_ACCEPT_ICON = \"arrow-right\";\n\nexport function AbHealthRecordImportPrompt({\n data,\n theme,\n style,\n decision,\n onDecisionChange,\n onAccept,\n onDecline,\n}: AbHealthRecordImportPromptProps) {\n const t = useMemo(\n () => resolveHealthRecordImportPromptTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const avatarIcon = data.avatarIconName ?? DEFAULT_AVATAR_ICON;\n const declineLabel = data.declineLabel ?? DEFAULT_DECLINE_LABEL;\n const acceptLabel = data.acceptLabel ?? DEFAULT_ACCEPT_LABEL;\n const acceptIcon = data.acceptIconName ?? DEFAULT_ACCEPT_ICON;\n const assurance = data.assurance;\n const assuranceIcon = assurance?.iconName ?? DEFAULT_ASSURANCE_ICON;\n\n const [internalDecision, setInternalDecision] =\n useState<HealthRecordImportDecision | null>(null);\n const activeDecision =\n decision !== undefined ? decision : internalDecision;\n // One-shot latch: even in controlled mode where the parent's\n // `decision` prop may update asynchronously, repeated taps cannot\n // fire `onAccept` / `onDecline` more than once per mount.\n const decisionFiredRef = useRef<boolean>(false);\n\n const recordDecision = (next: HealthRecordImportDecision) => {\n if (activeDecision || decisionFiredRef.current) return;\n decisionFiredRef.current = true;\n if (decision === undefined) setInternalDecision(next);\n onDecisionChange?.(next);\n if (next === \"accepted\") onAccept?.();\n else onDecline?.();\n };\n\n const isDecided = activeDecision !== null && activeDecision !== undefined;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View style={styles.bodyRow}>\n <LinearGradient\n colors={t.avatarGradient as unknown as [string, string]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={[\n styles.avatar,\n {\n borderRadius: t.avatarRadiusPx,\n borderColor: t.avatarBorderColor,\n },\n ]}\n >\n <Feather\n name={avatarIcon as never}\n size={20}\n color={t.avatarIconColor}\n />\n </LinearGradient>\n <View style={styles.bodyColumn}>\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n <Text\n style={[\n styles.body,\n { color: t.bodyColor, fontFamily },\n ]}\n >\n {data.body}\n </Text>\n {assurance ? (\n <View style={styles.assuranceRow}>\n <Feather\n name={assuranceIcon as never}\n size={14}\n color={t.assuranceIconColor}\n />\n <Text\n style={[\n styles.assuranceText,\n { color: t.assuranceColor, fontFamily },\n ]}\n numberOfLines={2}\n >\n {assurance.text}\n </Text>\n </View>\n ) : null}\n </View>\n </View>\n\n <View style={styles.actionsRow}>\n <Pressable\n accessibilityRole=\"button\"\n disabled={isDecided}\n onPress={() => recordDecision(\"declined\")}\n style={({ pressed }) => [\n styles.declineBtn,\n {\n backgroundColor: t.declineBackgroundColor,\n borderRadius: t.buttonRadiusPx,\n opacity:\n isDecided && activeDecision !== \"declined\"\n ? 0.5\n : pressed\n ? 0.85\n : 1,\n },\n ]}\n >\n <Text\n style={[\n styles.declineLabel,\n {\n color: t.declineForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {declineLabel}\n </Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n disabled={isDecided}\n onPress={() => recordDecision(\"accepted\")}\n style={({ pressed }) => [\n styles.acceptBtn,\n {\n backgroundColor: t.acceptBackgroundColor,\n borderRadius: t.buttonRadiusPx,\n opacity:\n isDecided && activeDecision !== \"accepted\"\n ? 0.5\n : pressed\n ? 0.9\n : 1,\n },\n ]}\n >\n <Text\n style={[\n styles.acceptLabel,\n {\n color: t.acceptForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {acceptLabel}\n </Text>\n <Feather\n name={acceptIcon as never}\n size={16}\n color={t.acceptForegroundColor}\n />\n </Pressable>\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 560,\n borderWidth: 1,\n padding: 18,\n gap: 18,\n },\n bodyRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 14,\n },\n avatar: {\n width: 44,\n height: 44,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderWidth: 1,\n },\n bodyColumn: {\n flex: 1,\n gap: 8,\n },\n title: {\n fontSize: 17,\n fontWeight: \"700\",\n lineHeight: 24,\n },\n body: {\n fontSize: 14,\n lineHeight: 20,\n },\n assuranceRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n marginTop: 2,\n },\n assuranceText: {\n fontSize: 13,\n fontWeight: \"500\",\n flexShrink: 1,\n },\n actionsRow: {\n flexDirection: \"row\",\n alignItems: \"stretch\",\n gap: 12,\n },\n declineBtn: {\n flex: 1,\n paddingHorizontal: 18,\n paddingVertical: 14,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n declineLabel: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n acceptBtn: {\n flex: 1.4,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 10,\n paddingHorizontal: 18,\n paddingVertical: 14,\n },\n acceptLabel: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbHealthRecordImportPrompt`. */\nexport interface HealthRecordImportPromptTheme extends Partial<BaseTheme> {\n // Title + body\n titleColor?: string;\n bodyColor?: string;\n // Avatar gradient\n avatarGradientStart?: string;\n avatarGradientEnd?: string;\n avatarBorderColor?: string;\n avatarIconColor?: string;\n // Assurance row\n assuranceColor?: string;\n assuranceIconColor?: string;\n // Decline button\n declineBackgroundColor?: string;\n declineForegroundColor?: string;\n // Accept button\n acceptBackgroundColor?: string;\n acceptForegroundColor?: string;\n // Radii\n cardRadius?: Radius;\n avatarRadius?: Radius;\n buttonRadius?: Radius;\n}\n\nexport interface ResolvedHealthRecordImportPromptTheme {\n base: BaseTheme;\n titleColor: string;\n bodyColor: string;\n avatarGradient: readonly [string, string];\n avatarBorderColor: string;\n avatarIconColor: string;\n assuranceColor: string;\n assuranceIconColor: string;\n declineBackgroundColor: string;\n declineForegroundColor: string;\n acceptBackgroundColor: string;\n acceptForegroundColor: string;\n cardRadiusPx: number;\n avatarRadiusPx: number;\n buttonRadiusPx: number;\n}\n\nexport function resolveHealthRecordImportPromptTheme(\n theme?: HealthRecordImportPromptTheme,\n): ResolvedHealthRecordImportPromptTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const avatarRadius: Radius = theme?.avatarRadius ?? \"md\";\n const buttonRadius: Radius = theme?.buttonRadius ?? \"full\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n titleColor: theme?.titleColor ?? base.textColor,\n bodyColor: theme?.bodyColor ?? base.mutedTextColor,\n avatarGradient: [\n theme?.avatarGradientStart ?? \"#F59E0B\",\n theme?.avatarGradientEnd ?? \"#EF4444\",\n ] as const,\n avatarBorderColor:\n theme?.avatarBorderColor ?? \"rgba(15, 23, 42, 0.04)\",\n avatarIconColor: theme?.avatarIconColor ?? \"#FFFFFF\",\n assuranceColor: theme?.assuranceColor ?? \"#16A34A\",\n assuranceIconColor: theme?.assuranceIconColor ?? \"#16A34A\",\n declineBackgroundColor:\n theme?.declineBackgroundColor ?? \"#F1F5F9\",\n declineForegroundColor:\n theme?.declineForegroundColor ?? base.textColor,\n acceptBackgroundColor:\n theme?.acceptBackgroundColor ?? \"#0B1220\",\n acceptForegroundColor:\n theme?.acceptForegroundColor ?? \"#FFFFFF\",\n cardRadiusPx: radiusToPx[cardRadius],\n avatarRadiusPx: radiusToPx[avatarRadius],\n buttonRadiusPx: radiusToPx[buttonRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, StyleSheet, Text, View } from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveIdCapturedTheme } from \"./theme\";\nimport type { AbIdCapturedProps } from \"./types\";\n\nconst DEFAULT_STATUS = \"ID CAPTURED\";\nconst DEFAULT_DOCUMENT_KIND = \"PASSPORT\";\n\nfunction deriveInitials(fullName: string): string {\n const tokens = fullName.trim().split(/\\s+/).filter(Boolean);\n if (tokens.length === 0) return \"\";\n if (tokens.length === 1) return tokens[0].slice(0, 2).toUpperCase();\n return (tokens[0][0] + tokens[tokens.length - 1][0]).toUpperCase();\n}\n\nexport function AbIdCaptured({ data, theme, style }: AbIdCapturedProps) {\n const t = useMemo(() => resolveIdCapturedTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n const monoFontFamily = Platform.select({\n ios: \"Menlo\",\n android: \"monospace\",\n default:\n 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace',\n });\n\n const statusLabel =\n data.statusLabel === null ? null : (data.statusLabel ?? DEFAULT_STATUS);\n const documentKind = data.documentKind ?? DEFAULT_DOCUMENT_KIND;\n const initials = data.initials?.trim() || deriveInitials(data.fullName);\n const mrzLine = data.mrzLine === null ? null : data.mrzLine;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View style={[styles.wrap, style]}>\n {statusLabel ? (\n <View\n style={[\n styles.statusPill,\n {\n backgroundColor: t.statusBackgroundColor,\n borderColor: t.statusBorderColor,\n borderRadius: t.pillRadiusPx,\n },\n ]}\n >\n <Feather\n name=\"shield\"\n size={14}\n color={t.statusForegroundColor}\n />\n <Text\n style={[\n styles.statusLabel,\n { color: t.statusForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {statusLabel}\n </Text>\n </View>\n ) : null}\n\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n ]}\n >\n <LinearGradient\n colors={t.accentGradient}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.accentBar,\n {\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.row}>\n <View\n style={[\n styles.initialsTile,\n {\n backgroundColor: t.initialsBackgroundColor,\n borderRadius: t.initialsTileRadiusPx,\n },\n ]}\n >\n <Text\n style={[\n styles.initialsText,\n { color: t.initialsForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {initials}\n </Text>\n </View>\n\n <View style={styles.detailsCol}>\n <View style={styles.eyebrowRow}>\n <Text\n style={[\n styles.documentKind,\n { color: t.documentKindColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {documentKind}\n </Text>\n {data.issuer ? (\n <Text\n style={[\n styles.issuer,\n { color: t.issuerColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.issuer}\n </Text>\n ) : null}\n </View>\n\n <Text\n style={[\n styles.fullName,\n { color: t.fullNameColor, fontFamily },\n ]}\n numberOfLines={2}\n >\n {data.fullName}\n </Text>\n\n {data.fields && data.fields.length > 0 ? (\n <View style={styles.fieldsRow}>\n {data.fields.map((field) => (\n <View key={field.id} style={styles.field}>\n <Text\n style={[\n styles.fieldLabel,\n { color: t.fieldLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {field.label.toUpperCase()}\n </Text>\n <Text\n style={[\n styles.fieldValue,\n { color: t.fieldValueColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {field.value}\n </Text>\n </View>\n ))}\n </View>\n ) : null}\n </View>\n </View>\n\n {mrzLine ? (\n <Text\n style={[\n styles.mrz,\n { color: t.mrzColor, fontFamily: monoFontFamily },\n ]}\n numberOfLines={1}\n >\n {mrzLine}\n </Text>\n ) : null}\n </View>\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrap: {\n width: \"100%\",\n maxWidth: 520,\n gap: 10,\n },\n statusPill: {\n alignSelf: \"flex-start\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingVertical: 6,\n paddingHorizontal: 12,\n borderWidth: 1,\n },\n statusLabel: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n card: {\n width: \"100%\",\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 16,\n gap: 12,\n },\n row: {\n flexDirection: \"row\",\n alignItems: \"stretch\",\n gap: 14,\n },\n initialsTile: {\n width: 76,\n height: 96,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n initialsText: {\n fontSize: 22,\n fontWeight: \"700\",\n letterSpacing: 1,\n },\n detailsCol: {\n flex: 1,\n gap: 6,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n },\n documentKind: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n issuer: {\n fontSize: 13,\n },\n fullName: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n },\n fieldsRow: {\n flexDirection: \"row\",\n gap: 16,\n marginTop: 4,\n flexWrap: \"wrap\",\n },\n field: {\n minWidth: 100,\n gap: 2,\n },\n fieldLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1.1,\n textTransform: \"uppercase\",\n },\n fieldValue: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n mrz: {\n textAlign: \"center\",\n fontSize: 12,\n letterSpacing: 1,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/**\n * Theme overrides for `AbIdCaptured`.\n *\n * Extends `Partial<BaseTheme>` so callers can pass `tone`, `mode`, etc.\n * and get the shared cascading behavior, then layers component-specific keys.\n */\nexport interface IdCapturedTheme extends Partial<BaseTheme> {\n /** Status pill palette (above the card). */\n statusBackgroundColor?: string;\n statusBorderColor?: string;\n statusForegroundColor?: string;\n /** Two-stop gradient for the thin accent bar across the top of the card. */\n accentGradientStart?: string;\n accentGradientEnd?: string;\n /** Initials tile palette. */\n initialsBackgroundColor?: string;\n initialsForegroundColor?: string;\n /** Field label color (uppercase). */\n fieldLabelColor?: string;\n /** Field value color. */\n fieldValueColor?: string;\n /** MRZ monospace line color. */\n mrzColor?: string;\n /** Eyebrow row colors. */\n documentKindColor?: string;\n issuerColor?: string;\n /** Holder full-name color (defaults to base text color). */\n fullNameColor?: string;\n /** Radius tokens. */\n cardRadius?: Radius;\n pillRadius?: Radius;\n initialsTileRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the card internals. */\nexport interface ResolvedIdCapturedTheme {\n base: BaseTheme;\n statusBackgroundColor: string;\n statusBorderColor: string;\n statusForegroundColor: string;\n accentGradient: [string, string];\n initialsBackgroundColor: string;\n initialsForegroundColor: string;\n fieldLabelColor: string;\n fieldValueColor: string;\n mrzColor: string;\n documentKindColor: string;\n issuerColor: string;\n fullNameColor: string;\n cardRadiusPx: number;\n pillRadiusPx: number;\n initialsTileRadiusPx: number;\n}\n\nexport function resolveIdCapturedTheme(\n theme?: IdCapturedTheme,\n): ResolvedIdCapturedTheme {\n const base = resolveBaseTheme(theme);\n const cardRadius: Radius = theme?.cardRadius ?? \"lg\";\n const pillRadius: Radius = theme?.pillRadius ?? \"full\";\n const initialsTileRadius: Radius = theme?.initialsTileRadius ?? \"md\";\n\n // Cascade: explicit theme override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n statusBackgroundColor:\n theme?.statusBackgroundColor ?? base.surfaceColor,\n statusBorderColor: theme?.statusBorderColor ?? base.borderColor,\n statusForegroundColor: theme?.statusForegroundColor ?? \"#15803D\",\n accentGradient: [\n theme?.accentGradientStart ?? \"#EC4899\",\n theme?.accentGradientEnd ?? \"#F97316\",\n ],\n initialsBackgroundColor:\n theme?.initialsBackgroundColor ?? base.iconBackgroundColor,\n initialsForegroundColor:\n theme?.initialsForegroundColor ?? base.mutedTextColor,\n fieldLabelColor: theme?.fieldLabelColor ?? base.mutedTextColor,\n fieldValueColor: theme?.fieldValueColor ?? base.textColor,\n mrzColor: theme?.mrzColor ?? base.mutedTextColor,\n documentKindColor: theme?.documentKindColor ?? base.mutedTextColor,\n issuerColor: theme?.issuerColor ?? base.mutedTextColor,\n fullNameColor: theme?.fullNameColor ?? base.textColor,\n cardRadiusPx: radiusToPx[cardRadius],\n pillRadiusPx: radiusToPx[pillRadius],\n initialsTileRadiusPx: radiusToPx[initialsTileRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, StyleSheet, Text, View } from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveInsuranceCapturedTheme } from \"./theme\";\nimport type {\n AbInsuranceCapturedProps,\n ResolvedInsuranceCapturedTheme,\n} from \"./types\";\nimport type { InsuranceCapturedField } from \"./payload\";\n\nconst DEFAULT_STATUS = \"INSURANCE CAPTURED\";\nconst DEFAULT_EYEBROW = \"HEALTH PLAN\";\n\nexport function AbInsuranceCaptured({\n data,\n theme,\n style,\n}: AbInsuranceCapturedProps) {\n const t = useMemo(\n () => resolveInsuranceCapturedTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n\n const statusLabel =\n data.statusLabel === null\n ? null\n : (data.statusLabel ?? DEFAULT_STATUS);\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const footnote = data.footnote === null ? null : data.footnote;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 10px 32px rgba(59, 130, 246, 0.25)\" },\n default: {\n shadowColor: \"#1D4ED8\",\n shadowOpacity: 0.2,\n shadowRadius: 20,\n shadowOffset: { width: 0, height: 8 },\n elevation: 4,\n },\n });\n\n const showSummaryRow = !!data.networkStatus || !!data.copaySummary;\n\n return (\n <View style={[styles.wrap, style]}>\n {statusLabel ? (\n <View\n style={[\n styles.statusPill,\n {\n backgroundColor: t.statusBackgroundColor,\n borderColor: t.statusBorderColor,\n borderRadius: t.pillRadiusPx,\n },\n ]}\n >\n <Feather\n name=\"shield\"\n size={14}\n color={t.statusForegroundColor}\n />\n <Text\n style={[\n styles.statusLabel,\n { color: t.statusForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {statusLabel}\n </Text>\n </View>\n ) : null}\n\n <LinearGradient\n colors={t.cardGradient}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={[\n styles.card,\n cardShadow,\n { borderRadius: t.cardRadiusPx },\n ]}\n >\n <View style={styles.headerRow}>\n <View style={styles.headerLeft}>\n <Text\n style={[\n styles.eyebrow,\n { color: t.cardEyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n <Text\n style={[\n styles.planName,\n { color: t.cardTitleColor, fontFamily },\n ]}\n numberOfLines={2}\n >\n {data.planName}\n </Text>\n </View>\n {data.planTypeBadge ? (\n <View\n style={[\n styles.planTypeBadge,\n {\n backgroundColor: t.planTypeBadgeBackgroundColor,\n borderColor: t.planTypeBadgeBorderColor,\n borderRadius: t.badgeRadiusPx,\n },\n ]}\n >\n <Text\n style={[\n styles.planTypeBadgeLabel,\n { color: t.planTypeBadgeForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.planTypeBadge}\n </Text>\n </View>\n ) : null}\n </View>\n\n {data.fields && data.fields.length > 0 ? (\n <View style={styles.fieldGrid}>\n {data.fields.map((field) => (\n <FieldCell key={field.id} field={field} theme={t} />\n ))}\n </View>\n ) : null}\n\n {showSummaryRow ? (\n <View\n style={[\n styles.summaryRow,\n { borderTopColor: t.cardDividerColor },\n ]}\n >\n {data.networkStatus ? (\n <Text\n style={[\n styles.summaryText,\n { color: t.cardSummaryColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.networkStatus.toUpperCase()}\n </Text>\n ) : (\n <View />\n )}\n {data.copaySummary ? (\n <Text\n style={[\n styles.summaryText,\n { color: t.cardSummaryColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.copaySummary.toUpperCase()}\n </Text>\n ) : null}\n </View>\n ) : null}\n </LinearGradient>\n\n {footnote ? (\n <Text\n style={[\n styles.footnote,\n { color: t.footnoteColor, fontFamily },\n ]}\n >\n {footnote}\n </Text>\n ) : null}\n </View>\n );\n}\n\nfunction FieldCell({\n field,\n theme: t,\n}: {\n field: InsuranceCapturedField;\n theme: ResolvedInsuranceCapturedTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n return (\n <View style={styles.fieldCell}>\n <Text\n style={[\n styles.fieldLabel,\n { color: t.cardLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {field.label.toUpperCase()}\n </Text>\n <Text\n style={[\n styles.fieldValue,\n { color: t.cardValueColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {field.value}\n </Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrap: {\n width: \"100%\",\n maxWidth: 520,\n gap: 10,\n },\n statusPill: {\n alignSelf: \"flex-start\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingVertical: 6,\n paddingHorizontal: 12,\n borderWidth: 1,\n },\n statusLabel: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n card: {\n width: \"100%\",\n padding: 18,\n gap: 16,\n overflow: \"hidden\",\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: 12,\n },\n headerLeft: {\n flex: 1,\n gap: 4,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n },\n planName: {\n fontSize: 22,\n fontWeight: \"700\",\n lineHeight: 28,\n },\n planTypeBadge: {\n paddingVertical: 4,\n paddingHorizontal: 10,\n borderWidth: 1,\n },\n planTypeBadgeLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n fieldGrid: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n },\n fieldCell: {\n width: \"50%\",\n paddingVertical: 8,\n paddingRight: 8,\n gap: 4,\n },\n fieldLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n fieldValue: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n summaryRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n paddingTop: 12,\n borderTopWidth: StyleSheet.hairlineWidth,\n },\n summaryText: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.1,\n },\n footnote: {\n fontSize: 13,\n lineHeight: 18,\n paddingHorizontal: 4,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/**\n * Theme overrides for `AbInsuranceCaptured`.\n *\n * Extends `Partial<BaseTheme>` so callers can pass `tone`, `mode`, etc.\n * and get the shared cascading behavior, then layers component-specific keys.\n */\nexport interface InsuranceCapturedTheme extends Partial<BaseTheme> {\n /** Status pill palette (above the card). */\n statusBackgroundColor?: string;\n statusBorderColor?: string;\n statusForegroundColor?: string;\n /** Two-stop gradient painted across the entire plan card. */\n cardGradientStart?: string;\n cardGradientEnd?: string;\n /** Card foreground palette (text on top of the colored gradient). */\n cardEyebrowColor?: string;\n cardTitleColor?: string;\n cardLabelColor?: string;\n cardValueColor?: string;\n cardSummaryColor?: string;\n cardDividerColor?: string;\n /** Plan-type badge (top-right pill). */\n planTypeBadgeBackgroundColor?: string;\n planTypeBadgeForegroundColor?: string;\n planTypeBadgeBorderColor?: string;\n /** Footnote color (rendered below the card). */\n footnoteColor?: string;\n /** Radius tokens. */\n cardRadius?: Radius;\n pillRadius?: Radius;\n badgeRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the card internals. */\nexport interface ResolvedInsuranceCapturedTheme {\n base: BaseTheme;\n statusBackgroundColor: string;\n statusBorderColor: string;\n statusForegroundColor: string;\n cardGradient: [string, string];\n cardEyebrowColor: string;\n cardTitleColor: string;\n cardLabelColor: string;\n cardValueColor: string;\n cardSummaryColor: string;\n cardDividerColor: string;\n planTypeBadgeBackgroundColor: string;\n planTypeBadgeForegroundColor: string;\n planTypeBadgeBorderColor: string;\n footnoteColor: string;\n cardRadiusPx: number;\n pillRadiusPx: number;\n badgeRadiusPx: number;\n}\n\nexport function resolveInsuranceCapturedTheme(\n theme?: InsuranceCapturedTheme,\n): ResolvedInsuranceCapturedTheme {\n const base = resolveBaseTheme(theme);\n const cardRadius: Radius = theme?.cardRadius ?? \"lg\";\n const pillRadius: Radius = theme?.pillRadius ?? \"full\";\n const badgeRadius: Radius = theme?.badgeRadius ?? \"full\";\n\n // Cascade: explicit theme override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n statusBackgroundColor:\n theme?.statusBackgroundColor ?? base.surfaceColor,\n statusBorderColor: theme?.statusBorderColor ?? base.borderColor,\n statusForegroundColor: theme?.statusForegroundColor ?? \"#15803D\",\n cardGradient: [\n theme?.cardGradientStart ?? \"#7C3AED\",\n theme?.cardGradientEnd ?? \"#3B82F6\",\n ],\n cardEyebrowColor: theme?.cardEyebrowColor ?? \"rgba(255,255,255,0.8)\",\n cardTitleColor: theme?.cardTitleColor ?? \"#FFFFFF\",\n cardLabelColor: theme?.cardLabelColor ?? \"rgba(255,255,255,0.75)\",\n cardValueColor: theme?.cardValueColor ?? \"#FFFFFF\",\n cardSummaryColor: theme?.cardSummaryColor ?? \"rgba(255,255,255,0.85)\",\n cardDividerColor: theme?.cardDividerColor ?? \"rgba(255,255,255,0.25)\",\n planTypeBadgeBackgroundColor:\n theme?.planTypeBadgeBackgroundColor ?? \"rgba(255,255,255,0.18)\",\n planTypeBadgeForegroundColor:\n theme?.planTypeBadgeForegroundColor ?? \"#FFFFFF\",\n planTypeBadgeBorderColor:\n theme?.planTypeBadgeBorderColor ?? \"rgba(255,255,255,0.35)\",\n footnoteColor: theme?.footnoteColor ?? base.mutedTextColor,\n cardRadiusPx: radiusToPx[cardRadius],\n pillRadiusPx: radiusToPx[pillRadius],\n badgeRadiusPx: radiusToPx[badgeRadius],\n };\n}\n","import React, { useMemo, useState } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveLiveCareRoutingTheme } from \"./theme\";\nimport type {\n CareRoutingNotice,\n CareRoutingReason,\n CareSite,\n MapPoint,\n} from \"./payload\";\nimport type {\n AbLiveCareRoutingProps,\n ResolvedLiveCareRoutingTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"LIVE CARE ROUTING\";\nconst DEFAULT_REASONS_HEADER = \"RECOMMENDED BECAUSE\";\nconst DEFAULT_ETA_SUFFIX = \"ETA\";\nconst MAP_HEIGHT = 220;\nconst ROUTE_DOTS = 14;\n\nexport function AbLiveCareRouting({\n data,\n theme,\n style,\n selectedSiteId,\n onSelectSite,\n onActionPress,\n onChipPress,\n onMapPinPress,\n}: AbLiveCareRoutingProps) {\n const t = useMemo(\n () => resolveLiveCareRoutingTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const reasonsHeader =\n data.reasonsHeader ?? DEFAULT_REASONS_HEADER;\n const etaSuffix = data.etaSuffix ?? DEFAULT_ETA_SUFFIX;\n const showMap = data.showMap !== false;\n const notice = data.notice === null ? null : data.notice;\n const chip = data.chip === null ? null : data.chip;\n\n const initialSelected =\n data.defaultSelectedSiteId ?? data.sites[0]?.id;\n const [internalSelected, setInternalSelected] = useState<\n string | undefined\n >(initialSelected);\n const activeSelectedId =\n selectedSiteId ?? internalSelected ?? data.sites[0]?.id;\n\n const selectedSite =\n data.sites.find((s) => s.id === activeSelectedId) ??\n data.sites[0];\n\n const handleSelect = (id: string) => {\n if (selectedSiteId === undefined) {\n setInternalSelected(id);\n }\n onSelectSite?.(id);\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View style={[styles.outer, style]}>\n {notice ? <NoticeBanner notice={notice} theme={t} /> : null}\n\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n ]}\n >\n {showMap ? (\n <MapPreview\n theme={t}\n userPin={data.userPinPosition}\n sites={data.sites}\n selectedSite={selectedSite}\n etaSuffix={etaSuffix}\n onPinPress={(id) => {\n handleSelect(id);\n if (onMapPinPress) onMapPinPress(id);\n }}\n />\n ) : null}\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View style={styles.eyebrowWrap}>\n <Feather\n name=\"navigation\"\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n {data.locationLabel ? (\n <View\n style={[\n styles.locationChip,\n {\n backgroundColor: t.locationChip.background,\n borderColor: t.locationChip.border,\n borderRadius: t.chipRadiusPx,\n },\n ]}\n >\n <Feather\n name=\"map-pin\"\n size={12}\n color={t.locationChip.foreground}\n />\n <Text\n style={[\n styles.locationChipText,\n {\n color: t.locationChip.foreground,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.locationLabel}\n </Text>\n </View>\n ) : null}\n </View>\n\n <View style={styles.sitesList}>\n {data.sites.map((site) => (\n <SiteRow\n key={site.id}\n site={site}\n theme={t}\n selected={site.id === activeSelectedId}\n onPress={() => handleSelect(site.id)}\n />\n ))}\n </View>\n\n {data.reasons && data.reasons.length > 0 ? (\n <View\n style={[\n styles.reasonsCard,\n {\n backgroundColor: t.reasonsCardBackgroundColor,\n borderColor: t.reasonsCardBorderColor,\n borderRadius: t.reasonsCardRadiusPx,\n },\n ]}\n >\n <View style={styles.reasonsHeaderRow}>\n <Feather\n name=\"zap\"\n size={14}\n color={t.reasonsHeaderIconColor}\n />\n <Text\n style={[\n styles.reasonsHeader,\n {\n color: t.reasonsHeaderColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {reasonsHeader}\n </Text>\n </View>\n <View style={styles.reasonsList}>\n {data.reasons.map((r) => (\n <ReasonRow key={r.id} reason={r} theme={t} />\n ))}\n </View>\n </View>\n ) : null}\n\n {chip || data.primaryAction ? (\n <View style={styles.footerRow}>\n {chip\n ? (() => {\n const chipBody = (\n <>\n {chip.iconName ? (\n <Feather\n name={chip.iconName as never}\n size={14}\n color={\n t.chipTones[chip.tone ?? \"success\"]\n .foreground\n }\n />\n ) : null}\n <Text\n style={[\n styles.chipLabel,\n {\n color:\n t.chipTones[chip.tone ?? \"success\"]\n .foreground,\n fontFamily,\n },\n ]}\n >\n {chip.label}\n </Text>\n </>\n );\n const chipStyle = {\n backgroundColor:\n t.chipTones[chip.tone ?? \"success\"].background,\n borderColor:\n t.chipTones[chip.tone ?? \"success\"].border,\n borderRadius: t.chipRadiusPx,\n } as const;\n return onChipPress ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={onChipPress}\n style={({ pressed }) => [\n styles.chip,\n chipStyle,\n { opacity: pressed ? 0.85 : 1 },\n ]}\n >\n {chipBody}\n </Pressable>\n ) : (\n <View style={[styles.chip, chipStyle]}>{chipBody}</View>\n );\n })()\n : null}\n\n {data.primaryAction ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() =>\n onActionPress?.(\n data.primaryAction!.id,\n activeSelectedId ?? \"\",\n )\n }\n style={({ pressed }) => [\n styles.ctaWrap,\n { opacity: pressed ? 0.9 : 1 },\n ]}\n >\n <LinearGradient\n colors={t.ctaGradient}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.cta,\n { borderRadius: t.ctaRadiusPx },\n ]}\n >\n {data.primaryAction.iconName ? (\n <Feather\n name={\n data.primaryAction.iconName as never\n }\n size={16}\n color={t.ctaForegroundColor}\n />\n ) : null}\n <Text\n style={[\n styles.ctaLabel,\n {\n color: t.ctaForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={2}\n >\n {data.primaryAction.label}\n </Text>\n <Feather\n name=\"chevron-right\"\n size={16}\n color={t.ctaForegroundColor}\n />\n </LinearGradient>\n </Pressable>\n ) : null}\n </View>\n ) : null}\n\n {data.disclaimer ? (\n <Text\n style={[\n styles.disclaimer,\n { color: t.disclaimerColor, fontFamily },\n ]}\n >\n {data.disclaimer}\n </Text>\n ) : null}\n </View>\n </View>\n </View>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Map preview\n// ---------------------------------------------------------------------------\n\nfunction MapPreview({\n theme: t,\n userPin,\n sites,\n selectedSite,\n etaSuffix,\n onPinPress,\n}: {\n theme: ResolvedLiveCareRoutingTheme;\n userPin?: MapPoint;\n sites: CareSite[];\n selectedSite?: CareSite;\n etaSuffix: string;\n onPinPress?: (siteId: string) => void;\n}) {\n const fontFamily = t.base.fontFamily;\n const u = userPin ?? { x: 0.16, y: 0.22 };\n const target = selectedSite?.mapPinPosition;\n\n return (\n <View\n style={[\n styles.map,\n {\n backgroundColor: t.mapStreetColor,\n borderTopLeftRadius: t.mapRadiusPx,\n borderTopRightRadius: t.mapRadiusPx,\n },\n ]}\n >\n {/* Parks */}\n <View\n style={[\n styles.mapPark,\n {\n backgroundColor: t.mapParkColor,\n top: 6,\n left: 60,\n width: 70,\n height: 60,\n borderRadius: 36,\n },\n ]}\n />\n <View\n style={[\n styles.mapPark,\n {\n backgroundColor: t.mapParkColor,\n top: 12,\n right: 30,\n width: 90,\n height: 80,\n },\n ]}\n />\n <View\n style={[\n styles.mapPark,\n {\n backgroundColor: t.mapParkColor,\n top: 40,\n right: 80,\n width: 50,\n height: 40,\n },\n ]}\n />\n\n {/* Water */}\n <LinearGradient\n colors={[t.mapWaterColorTop, t.mapWaterColorBottom]}\n style={styles.mapWater}\n />\n\n {/* Grid */}\n {[0.25, 0.5, 0.75].map((f) => (\n <View\n key={`v${f}`}\n style={[\n styles.mapGridVertical,\n { left: `${f * 100}%`, backgroundColor: t.mapGridColor },\n ]}\n />\n ))}\n {[0.33, 0.66].map((f) => (\n <View\n key={`h${f}`}\n style={[\n styles.mapGridHorizontal,\n { top: `${f * 100}%`, backgroundColor: t.mapGridColor },\n ]}\n />\n ))}\n\n {/* Route line dots from user to selected destination */}\n {target ? (\n <RouteDots\n from={u}\n to={target}\n color={t.routeLineColor}\n />\n ) : null}\n\n {/* User pin */}\n <UserPin theme={t} point={u} />\n\n {/* Site pins */}\n {sites.map((s) => {\n if (!s.mapPinPosition) return null;\n const isSelected = s.id === selectedSite?.id;\n const tone = t.pinTones[s.pinTone ?? \"blue\"];\n return (\n <SitePin\n key={s.id}\n point={s.mapPinPosition}\n tone={tone}\n iconName={s.iconName}\n selected={isSelected}\n onPress={onPinPress ? () => onPinPress(s.id) : undefined}\n />\n );\n })}\n\n {/* ETA chip */}\n {selectedSite ? (\n <View\n style={[\n styles.etaChip,\n {\n backgroundColor: t.etaChip.background,\n borderColor: t.etaChip.border,\n },\n ]}\n >\n <Feather\n name=\"clock\"\n size={12}\n color={t.etaChip.foreground}\n />\n <Text\n style={[\n styles.etaChipText,\n { color: t.etaChip.foreground, fontFamily },\n ]}\n numberOfLines={1}\n >\n {selectedSite.etaLabel} {etaSuffix}\n </Text>\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction RouteDots({\n from,\n to,\n color,\n}: {\n from: MapPoint;\n to: MapPoint;\n color: string;\n}) {\n // Quadratic bezier from `from` to `to` with a control point lifted\n // perpendicular to the chord, giving the route a gentle arc.\n const dots: { left: string; top: string }[] = [];\n const dx = to.x - from.x;\n const dy = to.y - from.y;\n const len = Math.sqrt(dx * dx + dy * dy) || 1;\n // Perpendicular unit (always lift \"up\" / away from screen center).\n const px = -dy / len;\n const py = dx / len;\n const arcAmount = 0.12;\n const lift = arcAmount * (py < 0 ? 1 : -1);\n const cx = (from.x + to.x) / 2 + px * lift;\n const cy = (from.y + to.y) / 2 + py * lift;\n for (let i = 1; i < ROUTE_DOTS; i++) {\n const tt = i / ROUTE_DOTS;\n const x =\n (1 - tt) * (1 - tt) * from.x +\n 2 * (1 - tt) * tt * cx +\n tt * tt * to.x;\n const y =\n (1 - tt) * (1 - tt) * from.y +\n 2 * (1 - tt) * tt * cy +\n tt * tt * to.y;\n dots.push({ left: `${x * 100}%`, top: `${y * 100}%` });\n }\n return (\n <>\n {dots.map((d, idx) => (\n <View\n key={idx}\n style={[\n styles.routeDot,\n {\n backgroundColor: color,\n left: d.left as unknown as number,\n top: d.top as unknown as number,\n },\n ]}\n />\n ))}\n </>\n );\n}\n\nfunction UserPin({\n theme: t,\n point,\n}: {\n theme: ResolvedLiveCareRoutingTheme;\n point: MapPoint;\n}) {\n return (\n <View\n style={[\n styles.pinWrap,\n {\n left: `${point.x * 100}%`,\n top: `${point.y * 100}%`,\n },\n ]}\n >\n <View\n style={[\n styles.pinCircle,\n {\n backgroundColor: t.userPinColor,\n borderColor: \"#FFFFFF\",\n },\n ]}\n >\n <Feather\n name=\"map-pin\"\n size={14}\n color={t.userPinForegroundColor}\n />\n </View>\n </View>\n );\n}\n\nfunction SitePin({\n point,\n tone,\n iconName,\n selected,\n onPress,\n}: {\n point: MapPoint;\n tone: { gradient: [string, string]; foreground: string };\n iconName?: string;\n selected: boolean;\n onPress?: () => void;\n}) {\n const inner = (\n <>\n {selected ? (\n <View\n style={[\n styles.pinHalo,\n { borderColor: tone.gradient[1] },\n ]}\n />\n ) : null}\n <LinearGradient\n colors={tone.gradient}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={[styles.pinCircle, { borderColor: \"#FFFFFF\" }]}\n >\n {iconName ? (\n <Feather\n name={iconName as never}\n size={14}\n color={tone.foreground}\n />\n ) : null}\n </LinearGradient>\n </>\n );\n const wrapStyle = [\n styles.pinWrap,\n { left: `${point.x * 100}%` as const, top: `${point.y * 100}%` as const },\n ];\n return onPress ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={onPress}\n style={({ pressed }) => [...wrapStyle, { opacity: pressed ? 0.85 : 1 }]}\n >\n {inner}\n </Pressable>\n ) : (\n <View style={wrapStyle}>{inner}</View>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Site rows\n// ---------------------------------------------------------------------------\n\nfunction SiteRow({\n site,\n theme: t,\n selected,\n onPress,\n}: {\n site: CareSite;\n theme: ResolvedLiveCareRoutingTheme;\n selected: boolean;\n onPress: () => void;\n}) {\n const fontFamily = t.base.fontFamily;\n const tone = t.pinTones[site.pinTone ?? \"blue\"];\n\n const bg = selected\n ? t.selectedSiteBackgroundColor\n : t.siteRowBackgroundColor;\n const border = selected\n ? t.selectedSiteBorderColor\n : t.siteRowBorderColor;\n const titleColor = selected\n ? t.selectedSiteTitleColor\n : t.siteTitleColor;\n const subtitleColor = selected\n ? t.selectedSiteSubtitleColor\n : t.siteSubtitleColor;\n const etaColor = selected\n ? t.selectedSiteEtaColor\n : t.siteEtaColor;\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ selected }}\n onPress={onPress}\n style={({ pressed }) => [\n styles.siteRow,\n {\n backgroundColor: bg,\n borderColor: border,\n borderRadius: t.siteRowRadiusPx,\n opacity: pressed ? 0.9 : 1,\n },\n ]}\n >\n <LinearGradient\n colors={tone.gradient}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={styles.siteAvatar}\n >\n {site.iconName ? (\n <Feather\n name={site.iconName as never}\n size={18}\n color={tone.foreground}\n />\n ) : null}\n </LinearGradient>\n\n <View style={styles.siteText}>\n <Text\n style={[\n styles.siteTitle,\n { color: titleColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {site.title}\n </Text>\n {site.subtitle ? (\n <Text\n style={[\n styles.siteSubtitle,\n { color: subtitleColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {site.subtitle}\n </Text>\n ) : null}\n </View>\n\n <View style={styles.siteEtaWrap}>\n <Feather name=\"clock\" size={13} color={etaColor} />\n <Text\n style={[\n styles.siteEta,\n { color: etaColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {site.etaLabel}\n </Text>\n </View>\n </Pressable>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Reasons + notice\n// ---------------------------------------------------------------------------\n\nfunction ReasonRow({\n reason,\n theme: t,\n}: {\n reason: CareRoutingReason;\n theme: ResolvedLiveCareRoutingTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n return (\n <View style={styles.reasonRow}>\n <Feather\n name={(reason.iconName ?? \"check\") as never}\n size={14}\n color={t.reasonsBulletIconColor}\n />\n <Text\n style={[\n styles.reasonText,\n { color: t.reasonsBulletTextColor, fontFamily },\n ]}\n >\n {reason.text}\n </Text>\n </View>\n );\n}\n\nfunction NoticeBanner({\n notice,\n theme: t,\n}: {\n notice: CareRoutingNotice;\n theme: ResolvedLiveCareRoutingTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n const tone = t.noticeTones[notice.tone ?? \"success\"];\n const iconName = notice.iconName ?? \"check-circle\";\n return (\n <View\n style={[\n styles.notice,\n {\n backgroundColor: tone.background,\n borderColor: tone.border,\n borderRadius: t.noticeRadiusPx,\n },\n ]}\n >\n <Feather\n name={iconName as never}\n size={18}\n color={tone.iconColor}\n />\n <View style={styles.noticeText}>\n <Text\n style={[\n styles.noticeTitle,\n { color: tone.foreground, fontFamily },\n ]}\n >\n {notice.title}\n </Text>\n {notice.message ? (\n <Text\n style={[\n styles.noticeMessage,\n { color: tone.foreground, fontFamily },\n ]}\n >\n {notice.message}\n </Text>\n ) : null}\n </View>\n </View>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Styles\n// ---------------------------------------------------------------------------\n\nconst PIN_SIZE = 28;\nconst HALO_SIZE = PIN_SIZE + 14;\n\nconst styles = StyleSheet.create({\n outer: {\n width: \"100%\",\n maxWidth: 560,\n gap: 10,\n },\n card: {\n borderWidth: 1,\n overflow: \"hidden\",\n },\n body: {\n padding: 16,\n gap: 14,\n },\n // Map\n map: {\n width: \"100%\",\n height: MAP_HEIGHT,\n overflow: \"hidden\",\n position: \"relative\",\n },\n mapPark: {\n position: \"absolute\",\n borderRadius: 24,\n },\n mapWater: {\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: 0,\n height: MAP_HEIGHT * 0.42,\n },\n mapGridVertical: {\n position: \"absolute\",\n top: 0,\n bottom: 0,\n width: 1,\n },\n mapGridHorizontal: {\n position: \"absolute\",\n left: 0,\n right: 0,\n height: 1,\n },\n routeDot: {\n position: \"absolute\",\n width: 5,\n height: 5,\n borderRadius: 2.5,\n marginLeft: -2.5,\n marginTop: -2.5,\n },\n pinWrap: {\n position: \"absolute\",\n width: PIN_SIZE,\n height: PIN_SIZE,\n marginLeft: -PIN_SIZE / 2,\n marginTop: -PIN_SIZE / 2,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n pinCircle: {\n width: PIN_SIZE,\n height: PIN_SIZE,\n borderRadius: PIN_SIZE / 2,\n borderWidth: 2,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n pinHalo: {\n position: \"absolute\",\n width: HALO_SIZE,\n height: HALO_SIZE,\n borderRadius: HALO_SIZE / 2,\n borderWidth: 2,\n opacity: 0.35,\n },\n etaChip: {\n position: \"absolute\",\n top: 12,\n right: 12,\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 999,\n borderWidth: 1,\n },\n etaChipText: {\n fontSize: 13,\n fontWeight: \"700\",\n },\n // Header\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n },\n eyebrowWrap: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n locationChip: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderWidth: 1,\n },\n locationChipText: {\n fontSize: 13,\n fontWeight: \"600\",\n },\n // Site rows\n sitesList: {\n gap: 10,\n },\n siteRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n padding: 10,\n borderWidth: 1,\n },\n siteAvatar: {\n width: 40,\n height: 40,\n borderRadius: 20,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n siteText: {\n flex: 1,\n gap: 2,\n },\n siteTitle: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n siteSubtitle: {\n fontSize: 13,\n },\n siteEtaWrap: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 4,\n paddingLeft: 8,\n },\n siteEta: {\n fontSize: 13,\n fontWeight: \"700\",\n },\n // Reasons\n reasonsCard: {\n borderWidth: 1,\n padding: 14,\n gap: 10,\n },\n reasonsHeaderRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n },\n reasonsHeader: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n reasonsList: {\n gap: 6,\n },\n reasonRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n reasonText: {\n flex: 1,\n fontSize: 14,\n },\n // Footer\n footerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n },\n chip: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderWidth: 1,\n flexShrink: 0,\n },\n chipLabel: {\n fontSize: 13,\n fontWeight: \"600\",\n },\n ctaWrap: {\n flex: 1,\n },\n cta: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 16,\n paddingVertical: 12,\n },\n ctaLabel: {\n flexShrink: 1,\n fontSize: 14,\n fontWeight: \"700\",\n textAlign: \"center\",\n },\n // Disclaimer\n disclaimer: {\n fontSize: 12,\n lineHeight: 17,\n },\n // Notice\n notice: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n padding: 12,\n borderWidth: 1,\n },\n noticeText: {\n flex: 1,\n gap: 2,\n },\n noticeTitle: {\n fontSize: 14,\n fontWeight: \"700\",\n },\n noticeMessage: {\n fontSize: 13,\n lineHeight: 18,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { CareRoutingNoticeTone, CareSitePinTone } from \"./payload\";\n\n/** Theme overrides for `AbLiveCareRouting`. */\nexport interface LiveCareRoutingTheme extends Partial<BaseTheme> {\n // Map surface\n mapStreetColor?: string;\n mapParkColor?: string;\n mapWaterColorTop?: string;\n mapWaterColorBottom?: string;\n mapGridColor?: string;\n // Live ETA chip on the map\n etaChipBackgroundColor?: string;\n etaChipBorderColor?: string;\n etaChipForegroundColor?: string;\n // Route line dots\n routeLineColor?: string;\n // User pin\n userPinColor?: string;\n userPinForegroundColor?: string;\n // Eyebrow\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n // Location chip (right of eyebrow)\n locationChipBackgroundColor?: string;\n locationChipBorderColor?: string;\n locationChipForegroundColor?: string;\n // Site row (default state)\n siteRowBackgroundColor?: string;\n siteRowBorderColor?: string;\n siteTitleColor?: string;\n siteSubtitleColor?: string;\n siteEtaColor?: string;\n // Site row (selected state)\n selectedSiteBackgroundColor?: string;\n selectedSiteBorderColor?: string;\n selectedSiteTitleColor?: string;\n selectedSiteSubtitleColor?: string;\n selectedSiteEtaColor?: string;\n // Recommends card\n reasonsCardBackgroundColor?: string;\n reasonsCardBorderColor?: string;\n reasonsHeaderColor?: string;\n reasonsHeaderIconColor?: string;\n reasonsBulletIconColor?: string;\n reasonsBulletTextColor?: string;\n // Footer chip (per tone)\n chipSuccessBackgroundColor?: string;\n chipSuccessBorderColor?: string;\n chipSuccessForegroundColor?: string;\n chipInfoBackgroundColor?: string;\n chipInfoBorderColor?: string;\n chipInfoForegroundColor?: string;\n chipNeutralBackgroundColor?: string;\n chipNeutralBorderColor?: string;\n chipNeutralForegroundColor?: string;\n // Primary CTA (gradient pill)\n ctaGradientStart?: string;\n ctaGradientEnd?: string;\n ctaForegroundColor?: string;\n // Disclaimer\n disclaimerColor?: string;\n // Notice banner (per tone)\n noticeSuccessBackgroundColor?: string;\n noticeSuccessBorderColor?: string;\n noticeSuccessForegroundColor?: string;\n noticeSuccessIconColor?: string;\n noticeInfoBackgroundColor?: string;\n noticeInfoBorderColor?: string;\n noticeInfoForegroundColor?: string;\n noticeInfoIconColor?: string;\n noticeWarningBackgroundColor?: string;\n noticeWarningBorderColor?: string;\n noticeWarningForegroundColor?: string;\n noticeWarningIconColor?: string;\n // Radii\n cardRadius?: Radius;\n mapRadius?: Radius;\n siteRowRadius?: Radius;\n reasonsCardRadius?: Radius;\n ctaRadius?: Radius;\n chipRadius?: Radius;\n noticeRadius?: Radius;\n}\n\nexport interface ResolvedToneColors {\n background: string;\n border: string;\n foreground: string;\n}\nexport interface ResolvedNoticeTone extends ResolvedToneColors {\n iconColor: string;\n}\nexport interface ResolvedPinTone {\n gradient: [string, string];\n foreground: string;\n}\n\nexport interface ResolvedLiveCareRoutingTheme {\n base: BaseTheme;\n // Map\n mapStreetColor: string;\n mapParkColor: string;\n mapWaterColorTop: string;\n mapWaterColorBottom: string;\n mapGridColor: string;\n etaChip: ResolvedToneColors;\n routeLineColor: string;\n userPinColor: string;\n userPinForegroundColor: string;\n // Eyebrow + location chip\n eyebrowColor: string;\n eyebrowIconColor: string;\n locationChip: ResolvedToneColors;\n // Site rows\n siteRowBackgroundColor: string;\n siteRowBorderColor: string;\n siteTitleColor: string;\n siteSubtitleColor: string;\n siteEtaColor: string;\n selectedSiteBackgroundColor: string;\n selectedSiteBorderColor: string;\n selectedSiteTitleColor: string;\n selectedSiteSubtitleColor: string;\n selectedSiteEtaColor: string;\n // Recommends\n reasonsCardBackgroundColor: string;\n reasonsCardBorderColor: string;\n reasonsHeaderColor: string;\n reasonsHeaderIconColor: string;\n reasonsBulletIconColor: string;\n reasonsBulletTextColor: string;\n // Chips\n chipTones: {\n success: ResolvedToneColors;\n info: ResolvedToneColors;\n neutral: ResolvedToneColors;\n };\n // CTA\n ctaGradient: [string, string];\n ctaForegroundColor: string;\n // Disclaimer\n disclaimerColor: string;\n // Notice\n noticeTones: Record<CareRoutingNoticeTone, ResolvedNoticeTone>;\n // Pin tones\n pinTones: Record<CareSitePinTone, ResolvedPinTone>;\n // Radii (px)\n cardRadiusPx: number;\n mapRadiusPx: number;\n siteRowRadiusPx: number;\n reasonsCardRadiusPx: number;\n ctaRadiusPx: number;\n chipRadiusPx: number;\n noticeRadiusPx: number;\n}\n\nexport function resolveLiveCareRoutingTheme(\n theme?: LiveCareRoutingTheme,\n): ResolvedLiveCareRoutingTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const mapRadius: Radius = theme?.mapRadius ?? \"lg\";\n const siteRowRadius: Radius = theme?.siteRowRadius ?? \"full\";\n const reasonsCardRadius: Radius =\n theme?.reasonsCardRadius ?? \"lg\";\n const ctaRadius: Radius = theme?.ctaRadius ?? \"full\";\n const chipRadius: Radius = theme?.chipRadius ?? \"full\";\n const noticeRadius: Radius = theme?.noticeRadius ?? \"md\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n mapStreetColor: theme?.mapStreetColor ?? \"#F1F5F9\",\n mapParkColor: theme?.mapParkColor ?? \"rgba(34, 197, 94, 0.18)\",\n mapWaterColorTop:\n theme?.mapWaterColorTop ?? \"rgba(191, 219, 254, 0.4)\",\n mapWaterColorBottom:\n theme?.mapWaterColorBottom ?? \"rgba(147, 197, 253, 0.55)\",\n mapGridColor: theme?.mapGridColor ?? \"rgba(15, 23, 42, 0.05)\",\n etaChip: {\n background:\n theme?.etaChipBackgroundColor ?? \"#FFFFFF\",\n border:\n theme?.etaChipBorderColor ?? \"rgba(15, 23, 42, 0.08)\",\n foreground:\n theme?.etaChipForegroundColor ?? base.textColor,\n },\n routeLineColor: theme?.routeLineColor ?? \"#0F172A\",\n userPinColor: theme?.userPinColor ?? \"#3B82F6\",\n userPinForegroundColor:\n theme?.userPinForegroundColor ?? \"#FFFFFF\",\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n locationChip: {\n background:\n theme?.locationChipBackgroundColor ??\n \"rgba(59, 130, 246, 0.08)\",\n border:\n theme?.locationChipBorderColor ??\n \"rgba(59, 130, 246, 0.20)\",\n foreground:\n theme?.locationChipForegroundColor ?? \"#2563EB\",\n },\n siteRowBackgroundColor:\n theme?.siteRowBackgroundColor ?? base.surfaceColor,\n siteRowBorderColor:\n theme?.siteRowBorderColor ?? base.borderColor,\n siteTitleColor: theme?.siteTitleColor ?? base.textColor,\n siteSubtitleColor:\n theme?.siteSubtitleColor ?? base.mutedTextColor,\n siteEtaColor: theme?.siteEtaColor ?? base.mutedTextColor,\n selectedSiteBackgroundColor:\n theme?.selectedSiteBackgroundColor ?? \"#0F172A\",\n selectedSiteBorderColor:\n theme?.selectedSiteBorderColor ?? \"#0F172A\",\n selectedSiteTitleColor:\n theme?.selectedSiteTitleColor ?? \"#FFFFFF\",\n selectedSiteSubtitleColor:\n theme?.selectedSiteSubtitleColor ??\n \"rgba(255,255,255,0.7)\",\n selectedSiteEtaColor:\n theme?.selectedSiteEtaColor ?? \"#FFFFFF\",\n reasonsCardBackgroundColor:\n theme?.reasonsCardBackgroundColor ??\n \"rgba(59, 130, 246, 0.06)\",\n reasonsCardBorderColor:\n theme?.reasonsCardBorderColor ??\n \"rgba(59, 130, 246, 0.18)\",\n reasonsHeaderColor:\n theme?.reasonsHeaderColor ?? \"#2563EB\",\n reasonsHeaderIconColor:\n theme?.reasonsHeaderIconColor ?? \"#2563EB\",\n reasonsBulletIconColor:\n theme?.reasonsBulletIconColor ?? \"#2563EB\",\n reasonsBulletTextColor:\n theme?.reasonsBulletTextColor ?? base.textColor,\n chipTones: {\n success: {\n background:\n theme?.chipSuccessBackgroundColor ??\n \"rgba(16, 185, 129, 0.10)\",\n border:\n theme?.chipSuccessBorderColor ??\n \"rgba(16, 185, 129, 0.35)\",\n foreground:\n theme?.chipSuccessForegroundColor ?? \"#059669\",\n },\n info: {\n background:\n theme?.chipInfoBackgroundColor ??\n \"rgba(59, 130, 246, 0.10)\",\n border:\n theme?.chipInfoBorderColor ?? \"rgba(59, 130, 246, 0.35)\",\n foreground: theme?.chipInfoForegroundColor ?? \"#2563EB\",\n },\n neutral: {\n background:\n theme?.chipNeutralBackgroundColor ?? base.surfaceColor,\n border: theme?.chipNeutralBorderColor ?? base.borderColor,\n foreground:\n theme?.chipNeutralForegroundColor ?? base.textColor,\n },\n },\n ctaGradient: [\n theme?.ctaGradientStart ?? \"#FB923C\",\n theme?.ctaGradientEnd ?? \"#EC4899\",\n ],\n ctaForegroundColor: theme?.ctaForegroundColor ?? \"#FFFFFF\",\n disclaimerColor: theme?.disclaimerColor ?? base.mutedTextColor,\n noticeTones: {\n success: {\n background:\n theme?.noticeSuccessBackgroundColor ??\n \"rgba(16, 185, 129, 0.10)\",\n border:\n theme?.noticeSuccessBorderColor ??\n \"rgba(16, 185, 129, 0.30)\",\n foreground:\n theme?.noticeSuccessForegroundColor ?? base.textColor,\n iconColor:\n theme?.noticeSuccessIconColor ?? \"#059669\",\n },\n info: {\n background:\n theme?.noticeInfoBackgroundColor ??\n \"rgba(59, 130, 246, 0.10)\",\n border:\n theme?.noticeInfoBorderColor ??\n \"rgba(59, 130, 246, 0.30)\",\n foreground:\n theme?.noticeInfoForegroundColor ?? base.textColor,\n iconColor: theme?.noticeInfoIconColor ?? \"#2563EB\",\n },\n warning: {\n background:\n theme?.noticeWarningBackgroundColor ??\n \"rgba(245, 158, 11, 0.12)\",\n border:\n theme?.noticeWarningBorderColor ??\n \"rgba(245, 158, 11, 0.35)\",\n foreground:\n theme?.noticeWarningForegroundColor ?? base.textColor,\n iconColor: theme?.noticeWarningIconColor ?? \"#D97706\",\n },\n },\n pinTones: {\n green: {\n gradient: [\"#34D399\", \"#059669\"],\n foreground: \"#FFFFFF\",\n },\n orange: {\n gradient: [\"#FB923C\", \"#EA580C\"],\n foreground: \"#FFFFFF\",\n },\n blue: {\n gradient: [\"#60A5FA\", \"#2563EB\"],\n foreground: \"#FFFFFF\",\n },\n purple: {\n gradient: [\"#C084FC\", \"#9333EA\"],\n foreground: \"#FFFFFF\",\n },\n red: {\n gradient: [\"#F87171\", \"#DC2626\"],\n foreground: \"#FFFFFF\",\n },\n neutral: {\n gradient: [\"#94A3B8\", \"#475569\"],\n foreground: \"#FFFFFF\",\n },\n },\n cardRadiusPx: radiusToPx[cardRadius],\n mapRadiusPx: radiusToPx[mapRadius],\n siteRowRadiusPx: radiusToPx[siteRowRadius],\n reasonsCardRadiusPx: radiusToPx[reasonsCardRadius],\n ctaRadiusPx: radiusToPx[ctaRadius],\n chipRadiusPx: radiusToPx[chipRadius],\n noticeRadiusPx: radiusToPx[noticeRadius],\n };\n}\n","import React, { useMemo, useRef, useState } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\n\nimport { resolveMedicationTheme } from \"./theme\";\nimport type { MedicationFulfillmentOption } from \"./payload\";\nimport type {\n AbMedicationProps,\n ResolvedMedicationTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"MEDICATION\";\n\nexport function AbMedication({\n data,\n theme,\n style,\n selectedFulfillmentId,\n onSelectFulfillment,\n requestSent,\n onRequestSentChange,\n onActionPress,\n}: AbMedicationProps) {\n const t = useMemo(() => resolveMedicationTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const badge = data.badge === null ? null : data.badge;\n const instruction =\n data.instruction === null ? null : data.instruction;\n const fulfillmentOptions = data.fulfillmentOptions ?? [];\n\n const initialFulfillment =\n data.defaultFulfillmentId ?? fulfillmentOptions[0]?.id;\n const [internalFulfillment, setInternalFulfillment] = useState<\n string | undefined\n >(initialFulfillment);\n const activeFulfillmentId =\n selectedFulfillmentId ??\n internalFulfillment ??\n fulfillmentOptions[0]?.id;\n const activeFulfillment = fulfillmentOptions.find(\n (o) => o.id === activeFulfillmentId,\n );\n\n const [internalSent, setInternalSent] = useState<boolean>(\n data.defaultRequestSent ?? false,\n );\n const isSent =\n requestSent !== undefined ? requestSent : internalSent;\n\n // One-shot latch so rapid taps in controlled mode (where the\n // parent's `requestSent` prop may update asynchronously) cannot\n // invoke `onActionPress` more than once per mount.\n const actionFiredRef = useRef<boolean>(\n data.defaultRequestSent ?? false,\n );\n\n const handleSelectFulfillment = (id: string) => {\n if (selectedFulfillmentId === undefined) {\n setInternalFulfillment(id);\n }\n onSelectFulfillment?.(id);\n };\n\n const handlePressCta = () => {\n if (isSent || actionFiredRef.current) return;\n actionFiredRef.current = true;\n if (requestSent === undefined) setInternalSent(true);\n onRequestSentChange?.(true);\n onActionPress?.(\n data.primaryAction?.id ?? \"\",\n activeFulfillmentId ?? \"\",\n );\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n const badgeTone = badge?.tone ?? \"warning\";\n const badgeColors = badge ? t.badgeTones[badgeTone] : undefined;\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View style={styles.headerRow}>\n <View style={styles.eyebrowWrap}>\n <Feather\n name=\"link\"\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n {badge && badgeColors ? (\n <View\n style={[\n styles.badge,\n {\n backgroundColor: badgeColors.background,\n borderColor: badgeColors.border,\n borderRadius: t.badgeRadiusPx,\n },\n ]}\n >\n {badge.iconName ? (\n <Feather\n name={badge.iconName as never}\n size={12}\n color={badgeColors.foreground}\n />\n ) : null}\n <Text\n style={[\n styles.badgeText,\n { color: badgeColors.foreground, fontFamily },\n ]}\n numberOfLines={1}\n >\n {badge.label}\n </Text>\n </View>\n ) : null}\n </View>\n\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n\n {data.pharmacy ? (\n <View style={styles.pharmacyRow}>\n <Feather\n name={(data.pharmacyIconName ?? \"map-pin\") as never}\n size={14}\n color={t.pharmacyIconColor}\n />\n <Text\n style={[\n styles.pharmacy,\n { color: t.pharmacyColor, fontFamily },\n ]}\n >\n {data.pharmacy}\n </Text>\n </View>\n ) : null}\n\n {fulfillmentOptions.length > 0 ? (\n <View style={styles.segmentRow}>\n {fulfillmentOptions.map((opt) => (\n <SegmentButton\n key={opt.id}\n opt={opt}\n theme={t}\n selected={opt.id === activeFulfillmentId}\n onPress={() => handleSelectFulfillment(opt.id)}\n />\n ))}\n </View>\n ) : null}\n\n {activeFulfillment?.statusLabel ? (\n <View style={styles.statusRow}>\n <Feather\n name={\n (activeFulfillment.statusIconName ??\n \"clock\") as never\n }\n size={14}\n color={t.statusIconColor}\n />\n <Text\n style={[\n styles.status,\n { color: t.statusColor, fontFamily },\n ]}\n >\n {activeFulfillment.statusLabel}\n </Text>\n </View>\n ) : null}\n\n {instruction ? (\n <View\n style={[\n styles.instruction,\n {\n backgroundColor: t.instructionBackgroundColor,\n borderColor: t.instructionBorderColor,\n borderRadius: t.instructionRadiusPx,\n },\n ]}\n >\n <Feather\n name={\n (instruction.iconName ?? \"shield\") as never\n }\n size={16}\n color={t.instructionIconColor}\n />\n <Text\n style={[\n styles.instructionText,\n {\n color: t.instructionTextColor,\n fontFamily,\n },\n ]}\n >\n {instruction.text}\n </Text>\n </View>\n ) : null}\n\n {data.primaryAction ? (\n isSent ? (\n <View\n style={[\n styles.sentPill,\n {\n backgroundColor: t.sentBackgroundColor,\n borderColor: t.sentBorderColor,\n borderRadius: t.ctaRadiusPx,\n },\n ]}\n >\n <Feather\n name={\n (data.primaryAction.sentIconName ??\n \"check\") as never\n }\n size={16}\n color={t.sentIconColor}\n />\n <Text\n style={[\n styles.sentLabel,\n { color: t.sentForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.primaryAction.sentLabel ??\n \"Mock request sent to pharmacy\"}\n </Text>\n </View>\n ) : (\n <Pressable\n accessibilityRole=\"button\"\n onPress={handlePressCta}\n style={({ pressed }) => [\n styles.cta,\n {\n backgroundColor: t.ctaBackgroundColor,\n borderRadius: t.ctaRadiusPx,\n opacity: pressed ? 0.9 : 1,\n },\n ]}\n >\n {data.primaryAction.iconName ? (\n <Feather\n name={data.primaryAction.iconName as never}\n size={16}\n color={t.ctaForegroundColor}\n />\n ) : null}\n <Text\n style={[\n styles.ctaLabel,\n { color: t.ctaForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.primaryAction.label}\n </Text>\n </Pressable>\n )\n ) : null}\n </View>\n );\n}\n\nfunction SegmentButton({\n opt,\n theme: t,\n selected,\n onPress,\n}: {\n opt: MedicationFulfillmentOption;\n theme: ResolvedMedicationTheme;\n selected: boolean;\n onPress: () => void;\n}) {\n const fontFamily = t.base.fontFamily;\n const bg = selected\n ? t.segmentSelectedBackgroundColor\n : t.segmentBackgroundColor;\n const fg = selected\n ? t.segmentSelectedTextColor\n : t.segmentTextColor;\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ selected }}\n onPress={onPress}\n style={({ pressed }) => [\n styles.segment,\n {\n backgroundColor: bg,\n borderRadius: t.segmentRadiusPx,\n opacity: pressed ? 0.9 : 1,\n },\n ]}\n >\n {opt.iconName ? (\n <Feather\n name={opt.iconName as never}\n size={14}\n color={fg}\n />\n ) : null}\n <Text\n style={[\n styles.segmentLabel,\n { color: fg, fontFamily },\n ]}\n numberOfLines={1}\n >\n {opt.label}\n </Text>\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 560,\n borderWidth: 1,\n padding: 18,\n gap: 12,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n },\n eyebrowWrap: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n badge: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderWidth: 1,\n },\n badgeText: {\n fontSize: 12,\n fontWeight: \"700\",\n },\n title: {\n fontSize: 20,\n fontWeight: \"700\",\n lineHeight: 26,\n },\n pharmacyRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n pharmacy: {\n flexShrink: 1,\n fontSize: 14,\n lineHeight: 20,\n },\n segmentRow: {\n flexDirection: \"row\",\n gap: 8,\n marginTop: 2,\n },\n segment: {\n flexShrink: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 14,\n paddingVertical: 10,\n },\n segmentLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n statusRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n status: {\n fontSize: 14,\n fontWeight: \"500\",\n },\n instruction: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n padding: 14,\n borderWidth: 1,\n },\n instructionText: {\n flex: 1,\n fontSize: 14,\n lineHeight: 20,\n },\n cta: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 16,\n paddingVertical: 14,\n },\n ctaLabel: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n sentPill: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 16,\n paddingVertical: 14,\n borderWidth: 1,\n },\n sentLabel: {\n fontSize: 14,\n fontWeight: \"700\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { MedicationBadgeTone } from \"./payload\";\n\n/** Theme overrides for `AbMedication`. */\nexport interface MedicationTheme extends Partial<BaseTheme> {\n // Eyebrow\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n // Title + pharmacy\n titleColor?: string;\n pharmacyColor?: string;\n pharmacyIconColor?: string;\n // Segmented control\n segmentBackgroundColor?: string;\n segmentTextColor?: string;\n segmentSelectedBackgroundColor?: string;\n segmentSelectedTextColor?: string;\n // Status row beneath the segmented control\n statusColor?: string;\n statusIconColor?: string;\n // Instructions callout\n instructionBackgroundColor?: string;\n instructionBorderColor?: string;\n instructionIconColor?: string;\n instructionTextColor?: string;\n // Primary CTA\n ctaBackgroundColor?: string;\n ctaForegroundColor?: string;\n // Sent confirmation pill\n sentBackgroundColor?: string;\n sentBorderColor?: string;\n sentForegroundColor?: string;\n sentIconColor?: string;\n // Per-tone badge (warning / info / success / danger / neutral)\n badgeWarningBackgroundColor?: string;\n badgeWarningBorderColor?: string;\n badgeWarningForegroundColor?: string;\n badgeInfoBackgroundColor?: string;\n badgeInfoBorderColor?: string;\n badgeInfoForegroundColor?: string;\n badgeSuccessBackgroundColor?: string;\n badgeSuccessBorderColor?: string;\n badgeSuccessForegroundColor?: string;\n badgeDangerBackgroundColor?: string;\n badgeDangerBorderColor?: string;\n badgeDangerForegroundColor?: string;\n badgeNeutralBackgroundColor?: string;\n badgeNeutralBorderColor?: string;\n badgeNeutralForegroundColor?: string;\n // Radii\n cardRadius?: Radius;\n segmentRadius?: Radius;\n instructionRadius?: Radius;\n ctaRadius?: Radius;\n badgeRadius?: Radius;\n}\n\nexport interface ResolvedBadgeTone {\n background: string;\n border: string;\n foreground: string;\n}\n\nexport interface ResolvedMedicationTheme {\n base: BaseTheme;\n eyebrowColor: string;\n eyebrowIconColor: string;\n titleColor: string;\n pharmacyColor: string;\n pharmacyIconColor: string;\n segmentBackgroundColor: string;\n segmentTextColor: string;\n segmentSelectedBackgroundColor: string;\n segmentSelectedTextColor: string;\n statusColor: string;\n statusIconColor: string;\n instructionBackgroundColor: string;\n instructionBorderColor: string;\n instructionIconColor: string;\n instructionTextColor: string;\n ctaBackgroundColor: string;\n ctaForegroundColor: string;\n sentBackgroundColor: string;\n sentBorderColor: string;\n sentForegroundColor: string;\n sentIconColor: string;\n badgeTones: Record<MedicationBadgeTone, ResolvedBadgeTone>;\n cardRadiusPx: number;\n segmentRadiusPx: number;\n instructionRadiusPx: number;\n ctaRadiusPx: number;\n badgeRadiusPx: number;\n}\n\nexport function resolveMedicationTheme(\n theme?: MedicationTheme,\n): ResolvedMedicationTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const segmentRadius: Radius = theme?.segmentRadius ?? \"full\";\n const instructionRadius: Radius = theme?.instructionRadius ?? \"lg\";\n const ctaRadius: Radius = theme?.ctaRadius ?? \"full\";\n const badgeRadius: Radius = theme?.badgeRadius ?? \"full\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n titleColor: theme?.titleColor ?? base.textColor,\n pharmacyColor: theme?.pharmacyColor ?? base.mutedTextColor,\n pharmacyIconColor:\n theme?.pharmacyIconColor ?? base.mutedTextColor,\n segmentBackgroundColor:\n theme?.segmentBackgroundColor ?? \"#F1F5F9\",\n segmentTextColor: theme?.segmentTextColor ?? base.textColor,\n segmentSelectedBackgroundColor:\n theme?.segmentSelectedBackgroundColor ?? \"#0F172A\",\n segmentSelectedTextColor:\n theme?.segmentSelectedTextColor ?? \"#FFFFFF\",\n statusColor: theme?.statusColor ?? base.mutedTextColor,\n statusIconColor:\n theme?.statusIconColor ?? base.mutedTextColor,\n instructionBackgroundColor:\n theme?.instructionBackgroundColor ?? \"#FEF3C7\",\n instructionBorderColor:\n theme?.instructionBorderColor ?? \"rgba(245, 158, 11, 0.30)\",\n instructionIconColor:\n theme?.instructionIconColor ?? \"#B45309\",\n instructionTextColor:\n theme?.instructionTextColor ?? base.textColor,\n ctaBackgroundColor: theme?.ctaBackgroundColor ?? \"#2563EB\",\n ctaForegroundColor: theme?.ctaForegroundColor ?? \"#FFFFFF\",\n sentBackgroundColor:\n theme?.sentBackgroundColor ?? \"rgba(16, 185, 129, 0.10)\",\n sentBorderColor:\n theme?.sentBorderColor ?? \"rgba(16, 185, 129, 0.35)\",\n sentForegroundColor: theme?.sentForegroundColor ?? \"#047857\",\n sentIconColor: theme?.sentIconColor ?? \"#047857\",\n badgeTones: {\n warning: {\n background:\n theme?.badgeWarningBackgroundColor ?? \"#FEF3C7\",\n border:\n theme?.badgeWarningBorderColor ??\n \"rgba(245, 158, 11, 0.30)\",\n foreground:\n theme?.badgeWarningForegroundColor ?? \"#92400E\",\n },\n info: {\n background:\n theme?.badgeInfoBackgroundColor ??\n \"rgba(59, 130, 246, 0.10)\",\n border:\n theme?.badgeInfoBorderColor ??\n \"rgba(59, 130, 246, 0.30)\",\n foreground:\n theme?.badgeInfoForegroundColor ?? \"#1D4ED8\",\n },\n success: {\n background:\n theme?.badgeSuccessBackgroundColor ??\n \"rgba(16, 185, 129, 0.10)\",\n border:\n theme?.badgeSuccessBorderColor ??\n \"rgba(16, 185, 129, 0.30)\",\n foreground:\n theme?.badgeSuccessForegroundColor ?? \"#047857\",\n },\n danger: {\n background:\n theme?.badgeDangerBackgroundColor ??\n \"rgba(239, 68, 68, 0.10)\",\n border:\n theme?.badgeDangerBorderColor ??\n \"rgba(239, 68, 68, 0.30)\",\n foreground:\n theme?.badgeDangerForegroundColor ?? \"#B91C1C\",\n },\n neutral: {\n background:\n theme?.badgeNeutralBackgroundColor ?? base.surfaceColor,\n border: theme?.badgeNeutralBorderColor ?? base.borderColor,\n foreground:\n theme?.badgeNeutralForegroundColor ?? base.textColor,\n },\n },\n cardRadiusPx: radiusToPx[cardRadius],\n segmentRadiusPx: radiusToPx[segmentRadius],\n instructionRadiusPx: radiusToPx[instructionRadius],\n ctaRadiusPx: radiusToPx[ctaRadius],\n badgeRadiusPx: radiusToPx[badgeRadius],\n };\n}\n","import React, { useMemo, useRef, useState } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n TextInput,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveMedicationCaptureTheme } from \"./theme\";\nimport type {\n MedicationItem,\n MedicationPatch,\n} from \"./payload\";\nimport type {\n AbMedicationCaptureProps,\n ResolvedMedicationCaptureTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"CAPTURED FROM PHOTO\";\nconst DEFAULT_EYEBROW_ICON = \"link-2\";\nconst DEFAULT_STATUS_ICON = \"camera\";\nconst DEFAULT_SECURITY_ICON = \"shield\";\nconst DEFAULT_PRIMARY_ICON = \"check\";\nconst DEFAULT_SECONDARY_ICON = \"plus\";\nconst DEFAULT_ADDED_ICON = \"check\";\nconst DEFAULT_ADDED_LABEL = \"Added to your care plan\";\nconst DEFAULT_EMPTY_LABEL = \"All medications removed.\";\n\ninterface DraftValues {\n name: string;\n strength: string;\n instructions: string;\n}\n\nexport function AbMedicationCapture({\n data,\n theme,\n style,\n onMedicationEdit,\n onMedicationDelete,\n onAddAnotherPress,\n onConfirmPress,\n onAddedNoticePress,\n}: AbMedicationCaptureProps) {\n const t = useMemo(\n () => resolveMedicationCaptureTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIcon = data.eyebrowIconName ?? DEFAULT_EYEBROW_ICON;\n const securityIcon =\n data.securityIconName ?? DEFAULT_SECURITY_ICON;\n const isAdded = data.added ?? false;\n const emptyLabel = data.emptyNotice?.label ?? DEFAULT_EMPTY_LABEL;\n const addedLabel = data.addedNotice?.label ?? DEFAULT_ADDED_LABEL;\n const addedIcon = data.addedNotice?.iconName ?? DEFAULT_ADDED_ICON;\n\n // Inline edit state managed locally.\n const [editingId, setEditingId] = useState<string | null>(null);\n const [draft, setDraft] = useState<DraftValues>({\n name: \"\",\n strength: \"\",\n instructions: \"\",\n });\n\n const beginEdit = (m: MedicationItem) => {\n setEditingId(m.id);\n setDraft({\n name: m.name ?? \"\",\n strength: m.strength ?? \"\",\n instructions: m.instructions ?? \"\",\n });\n };\n const cancelEdit = () => {\n setEditingId(null);\n };\n const saveEdit = () => {\n if (editingId == null) return;\n const patch: MedicationPatch = {\n name: draft.name,\n strength: draft.strength,\n instructions: draft.instructions,\n };\n onMedicationEdit?.(editingId, patch);\n setEditingId(null);\n };\n\n // One-shot latches for terminal actions.\n const confirmFiredRef = useRef<boolean>(false);\n const addedNoticeFiredRef = useRef<boolean>(false);\n const handleConfirm = () => {\n if (confirmFiredRef.current) return;\n confirmFiredRef.current = true;\n onConfirmPress?.();\n };\n const handleAddedNotice = () => {\n if (addedNoticeFiredRef.current) return;\n addedNoticeFiredRef.current = true;\n onAddedNoticePress?.();\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n const hasMedications = data.medications.length > 0;\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <LinearGradient\n colors={t.accentBarColors as unknown as [string, string, string]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.accentBar,\n {\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View style={styles.eyebrowRow}>\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n {data.statusPill ? (\n <View\n style={[\n styles.statusPill,\n {\n backgroundColor: t.statusPillBackgroundColor,\n borderColor: t.statusPillBorderColor,\n borderRadius: t.pillRadiusPx,\n },\n ]}\n >\n <Feather\n name={\n (data.statusPill.iconName ??\n DEFAULT_STATUS_ICON) as never\n }\n size={12}\n color={t.statusPillIconColor}\n />\n <Text\n style={[\n styles.statusPillLabel,\n {\n color: t.statusPillForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.statusPill.label}\n </Text>\n </View>\n ) : null}\n </View>\n\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n {data.body ? (\n <Text\n style={[\n styles.bodyText,\n { color: t.bodyColor, fontFamily },\n ]}\n >\n {data.body}\n </Text>\n ) : null}\n\n {hasMedications ? (\n <View style={styles.medsList}>\n {data.medications.map((m) =>\n editingId === m.id ? (\n <EditingRow\n key={m.id}\n draft={draft}\n setDraft={setDraft}\n onCancel={cancelEdit}\n onSave={saveEdit}\n t={t}\n fontFamily={fontFamily}\n />\n ) : (\n <MedicationRow\n key={m.id}\n item={m}\n onEdit={\n onMedicationEdit ? () => beginEdit(m) : undefined\n }\n onDelete={\n onMedicationDelete\n ? () => onMedicationDelete(m.id)\n : undefined\n }\n t={t}\n fontFamily={fontFamily}\n />\n ),\n )}\n </View>\n ) : (\n <View\n style={[\n styles.emptyNotice,\n {\n backgroundColor: t.emptyNoticeBackgroundColor,\n borderColor: t.emptyNoticeBorderColor,\n borderRadius: t.medicationCardRadiusPx,\n },\n ]}\n >\n <Text\n style={[\n styles.emptyNoticeLabel,\n {\n color: t.emptyNoticeForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {emptyLabel}\n </Text>\n </View>\n )}\n\n {data.securityNote ? (\n <View style={styles.securityRow}>\n <Feather\n name={securityIcon as never}\n size={14}\n color={t.securityIconColor}\n />\n <Text\n style={[\n styles.securityNote,\n {\n color: t.securityNoteColor,\n fontFamily,\n },\n ]}\n >\n {data.securityNote}\n </Text>\n </View>\n ) : null}\n\n {isAdded ? (\n <Pressable\n accessibilityRole={\n onAddedNoticePress ? \"button\" : undefined\n }\n disabled={!onAddedNoticePress}\n onPress={\n onAddedNoticePress ? handleAddedNotice : undefined\n }\n style={({ pressed }) => [\n styles.addedNotice,\n {\n backgroundColor: t.addedNoticeBackgroundColor,\n borderColor: t.addedNoticeBorderColor,\n borderRadius: t.buttonRadiusPx,\n opacity:\n pressed && onAddedNoticePress ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={addedIcon as never}\n size={16}\n color={t.addedNoticeIconColor}\n />\n <Text\n style={[\n styles.addedNoticeLabel,\n {\n color: t.addedNoticeForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {addedLabel}\n </Text>\n </Pressable>\n ) : (\n <View style={styles.actionsRow}>\n {data.addAnotherAction ? (\n <Pressable\n accessibilityRole=\"button\"\n disabled={!onAddAnotherPress}\n onPress={onAddAnotherPress}\n style={({ pressed }) => [\n styles.secondaryButton,\n {\n backgroundColor:\n t.secondaryButtonBackgroundColor,\n borderColor: t.secondaryButtonBorderColor,\n borderRadius: t.buttonRadiusPx,\n opacity:\n pressed && onAddAnotherPress ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={\n (data.addAnotherAction.iconName ??\n DEFAULT_SECONDARY_ICON) as never\n }\n size={16}\n color={t.secondaryButtonIconColor}\n />\n <Text\n style={[\n styles.secondaryButtonLabel,\n {\n color: t.secondaryButtonForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.addAnotherAction.label}\n </Text>\n </Pressable>\n ) : null}\n <Pressable\n accessibilityRole=\"button\"\n disabled={!onConfirmPress}\n onPress={onConfirmPress ? handleConfirm : undefined}\n style={({ pressed }) => [\n styles.primaryButton,\n {\n backgroundColor: t.primaryButtonBackgroundColor,\n borderRadius: t.buttonRadiusPx,\n opacity:\n pressed && onConfirmPress ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={\n (data.confirmAction.iconName ??\n DEFAULT_PRIMARY_ICON) as never\n }\n size={16}\n color={t.primaryButtonIconColor}\n />\n <Text\n style={[\n styles.primaryButtonLabel,\n {\n color: t.primaryButtonForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.confirmAction.label}\n </Text>\n </Pressable>\n </View>\n )}\n </View>\n </View>\n );\n}\n\nfunction MedicationRow({\n item,\n onEdit,\n onDelete,\n t,\n fontFamily,\n}: {\n item: MedicationItem;\n onEdit?: () => void;\n onDelete?: () => void;\n t: ResolvedMedicationCaptureTheme;\n fontFamily?: string;\n}) {\n const meta1 =\n [item.prescriber, item.rxNumber].filter(Boolean).join(\" · \");\n return (\n <View\n style={[\n styles.medRow,\n {\n backgroundColor: t.medicationCardBackgroundColor,\n borderColor: t.medicationCardBorderColor,\n borderRadius: t.medicationCardRadiusPx,\n },\n ]}\n >\n <View style={styles.medContent}>\n <View style={styles.medNameRow}>\n <Text\n style={[\n styles.medName,\n { color: t.medicationNameColor, fontFamily },\n ]}\n >\n {item.name}\n </Text>\n {item.strength ? (\n <Text\n style={[\n styles.medStrength,\n {\n color: t.medicationStrengthColor,\n fontFamily,\n },\n ]}\n >\n {item.strength}\n </Text>\n ) : null}\n </View>\n {item.instructions ? (\n <Text\n style={[\n styles.medInstructions,\n {\n color: t.medicationInstructionsColor,\n fontFamily,\n },\n ]}\n >\n {item.instructions}\n </Text>\n ) : null}\n {meta1 ? (\n <Text\n style={[\n styles.medMeta,\n { color: t.medicationMetaColor, fontFamily },\n ]}\n >\n {meta1}\n </Text>\n ) : null}\n {item.supply ? (\n <Text\n style={[\n styles.medMeta,\n { color: t.medicationMetaColor, fontFamily },\n ]}\n >\n {item.supply}\n </Text>\n ) : null}\n </View>\n <View style={styles.medActions}>\n {onEdit ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Edit ${item.name}`}\n onPress={onEdit}\n hitSlop={6}\n style={({ pressed }) => [\n styles.iconBtn,\n { opacity: pressed ? 0.7 : 1 },\n ]}\n >\n <Feather\n name={\"edit-2\" as never}\n size={16}\n color={t.editIconColor}\n />\n </Pressable>\n ) : null}\n {onDelete ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Remove ${item.name}`}\n onPress={onDelete}\n hitSlop={6}\n style={({ pressed }) => [\n styles.iconBtn,\n { opacity: pressed ? 0.7 : 1 },\n ]}\n >\n <Feather\n name={\"trash-2\" as never}\n size={16}\n color={t.deleteIconColor}\n />\n </Pressable>\n ) : null}\n </View>\n </View>\n );\n}\n\nfunction EditingRow({\n draft,\n setDraft,\n onCancel,\n onSave,\n t,\n fontFamily,\n}: {\n draft: DraftValues;\n setDraft: (d: DraftValues) => void;\n onCancel: () => void;\n onSave: () => void;\n t: ResolvedMedicationCaptureTheme;\n fontFamily?: string;\n}) {\n return (\n <View\n style={[\n styles.editRow,\n {\n backgroundColor: t.medicationCardBackgroundColor,\n borderColor: t.medicationCardBorderColor,\n borderRadius: t.medicationCardRadiusPx,\n },\n ]}\n >\n <FormInput\n value={draft.name}\n onChangeText={(v) => setDraft({ ...draft, name: v })}\n placeholder=\"Name\"\n t={t}\n fontFamily={fontFamily}\n />\n <FormInput\n value={draft.strength}\n onChangeText={(v) => setDraft({ ...draft, strength: v })}\n placeholder=\"Strength\"\n t={t}\n fontFamily={fontFamily}\n />\n <FormInput\n value={draft.instructions}\n onChangeText={(v) => setDraft({ ...draft, instructions: v })}\n placeholder=\"Instructions\"\n t={t}\n fontFamily={fontFamily}\n />\n <View style={styles.editActionsRow}>\n <Pressable\n accessibilityRole=\"button\"\n onPress={onCancel}\n style={({ pressed }) => [\n styles.cancelButton,\n {\n backgroundColor: t.secondaryButtonBackgroundColor,\n borderColor: t.secondaryButtonBorderColor,\n borderRadius: t.buttonRadiusPx,\n opacity: pressed ? 0.85 : 1,\n },\n ]}\n >\n <Text\n style={[\n styles.cancelButtonLabel,\n {\n color: t.secondaryButtonForegroundColor,\n fontFamily,\n },\n ]}\n >\n Cancel\n </Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n onPress={onSave}\n style={({ pressed }) => [\n styles.saveButton,\n {\n backgroundColor: t.primaryButtonBackgroundColor,\n borderRadius: t.buttonRadiusPx,\n opacity: pressed ? 0.85 : 1,\n },\n ]}\n >\n <Text\n style={[\n styles.saveButtonLabel,\n {\n color: t.primaryButtonForegroundColor,\n fontFamily,\n },\n ]}\n >\n Save\n </Text>\n </Pressable>\n </View>\n </View>\n );\n}\n\nfunction FormInput({\n value,\n onChangeText,\n placeholder,\n t,\n fontFamily,\n}: {\n value: string;\n onChangeText: (v: string) => void;\n placeholder: string;\n t: ResolvedMedicationCaptureTheme;\n fontFamily?: string;\n}) {\n return (\n <TextInput\n value={value}\n onChangeText={onChangeText}\n placeholder={placeholder}\n placeholderTextColor={t.inputPlaceholderColor}\n style={[\n styles.input,\n {\n backgroundColor: t.inputBackgroundColor,\n borderColor: t.inputBorderColor,\n borderRadius: t.inputRadiusPx,\n color: t.inputTextColor,\n fontFamily,\n },\n ]}\n />\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 600,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 12,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 10,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n statusPill: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderWidth: 1,\n flexShrink: 1,\n },\n statusPillLabel: {\n fontSize: 12,\n fontWeight: \"600\",\n },\n title: {\n fontSize: 17,\n fontWeight: \"700\",\n lineHeight: 23,\n marginTop: 2,\n },\n bodyText: {\n fontSize: 14,\n lineHeight: 20,\n },\n medsList: {\n gap: 10,\n marginTop: 4,\n },\n medRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n padding: 14,\n borderWidth: 1,\n gap: 12,\n },\n medContent: {\n flex: 1,\n gap: 4,\n },\n medNameRow: {\n flexDirection: \"row\",\n alignItems: \"baseline\",\n flexWrap: \"wrap\",\n gap: 6,\n },\n medName: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n medStrength: {\n fontSize: 14,\n },\n medInstructions: {\n fontSize: 14,\n lineHeight: 20,\n },\n medMeta: {\n fontSize: 13,\n lineHeight: 18,\n },\n medActions: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n iconBtn: {\n padding: 4,\n },\n editRow: {\n padding: 12,\n borderWidth: 1,\n gap: 10,\n },\n input: {\n borderWidth: 1,\n paddingHorizontal: 14,\n paddingVertical: Platform.OS === \"web\" ? 10 : 12,\n fontSize: 14,\n },\n editActionsRow: {\n flexDirection: \"row\",\n gap: 10,\n marginTop: 2,\n },\n cancelButton: {\n flexGrow: 1,\n flexBasis: 0,\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingHorizontal: 18,\n paddingVertical: 12,\n borderWidth: 1,\n },\n cancelButtonLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n saveButton: {\n flexGrow: 1,\n flexBasis: 0,\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingHorizontal: 18,\n paddingVertical: 12,\n },\n saveButtonLabel: {\n fontSize: 14,\n fontWeight: \"700\",\n },\n emptyNotice: {\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingHorizontal: 18,\n paddingVertical: 14,\n borderWidth: 1,\n borderStyle: \"dashed\",\n marginTop: 4,\n },\n emptyNoticeLabel: {\n fontSize: 14,\n fontWeight: \"500\",\n },\n securityRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 8,\n marginTop: 2,\n },\n securityNote: {\n flex: 1,\n fontSize: 13,\n lineHeight: 19,\n },\n actionsRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n marginTop: 4,\n flexWrap: \"wrap\",\n },\n primaryButton: {\n flexGrow: 2,\n flexBasis: 0,\n minWidth: 140,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 18,\n paddingVertical: 13,\n },\n primaryButtonLabel: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n secondaryButton: {\n flexGrow: 1,\n flexBasis: 0,\n minWidth: 140,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 18,\n paddingVertical: 12,\n borderWidth: 1,\n },\n secondaryButtonLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n addedNotice: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 18,\n paddingVertical: 14,\n borderWidth: 1,\n marginTop: 4,\n },\n addedNoticeLabel: {\n fontSize: 14,\n fontWeight: \"700\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbMedicationCapture`. */\nexport interface MedicationCaptureTheme extends Partial<BaseTheme> {\n // Top accent bar (gradient)\n accentBarStartColor?: string;\n accentBarMidColor?: string;\n accentBarEndColor?: string;\n // Eyebrow + status pill\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n statusPillBackgroundColor?: string;\n statusPillBorderColor?: string;\n statusPillForegroundColor?: string;\n statusPillIconColor?: string;\n // Title + body\n titleColor?: string;\n bodyColor?: string;\n // Medication card\n medicationCardBackgroundColor?: string;\n medicationCardBorderColor?: string;\n medicationNameColor?: string;\n medicationStrengthColor?: string;\n medicationInstructionsColor?: string;\n medicationMetaColor?: string;\n editIconColor?: string;\n deleteIconColor?: string;\n // Inputs (inline edit form)\n inputBackgroundColor?: string;\n inputBorderColor?: string;\n inputTextColor?: string;\n inputPlaceholderColor?: string;\n // Empty list notice\n emptyNoticeBackgroundColor?: string;\n emptyNoticeBorderColor?: string;\n emptyNoticeForegroundColor?: string;\n // Security note\n securityNoteColor?: string;\n securityIconColor?: string;\n // Primary action (Confirm)\n primaryButtonBackgroundColor?: string;\n primaryButtonForegroundColor?: string;\n primaryButtonIconColor?: string;\n // Secondary action (Add another)\n secondaryButtonBackgroundColor?: string;\n secondaryButtonBorderColor?: string;\n secondaryButtonForegroundColor?: string;\n secondaryButtonIconColor?: string;\n // Added notice\n addedNoticeBackgroundColor?: string;\n addedNoticeBorderColor?: string;\n addedNoticeForegroundColor?: string;\n addedNoticeIconColor?: string;\n // Radii\n cardRadius?: Radius;\n buttonRadius?: Radius;\n pillRadius?: Radius;\n medicationCardRadius?: Radius;\n inputRadius?: Radius;\n}\n\nexport interface ResolvedMedicationCaptureTheme {\n base: BaseTheme;\n accentBarColors: readonly [string, string, string];\n eyebrowColor: string;\n eyebrowIconColor: string;\n statusPillBackgroundColor: string;\n statusPillBorderColor: string;\n statusPillForegroundColor: string;\n statusPillIconColor: string;\n titleColor: string;\n bodyColor: string;\n medicationCardBackgroundColor: string;\n medicationCardBorderColor: string;\n medicationNameColor: string;\n medicationStrengthColor: string;\n medicationInstructionsColor: string;\n medicationMetaColor: string;\n editIconColor: string;\n deleteIconColor: string;\n inputBackgroundColor: string;\n inputBorderColor: string;\n inputTextColor: string;\n inputPlaceholderColor: string;\n emptyNoticeBackgroundColor: string;\n emptyNoticeBorderColor: string;\n emptyNoticeForegroundColor: string;\n securityNoteColor: string;\n securityIconColor: string;\n primaryButtonBackgroundColor: string;\n primaryButtonForegroundColor: string;\n primaryButtonIconColor: string;\n secondaryButtonBackgroundColor: string;\n secondaryButtonBorderColor: string;\n secondaryButtonForegroundColor: string;\n secondaryButtonIconColor: string;\n addedNoticeBackgroundColor: string;\n addedNoticeBorderColor: string;\n addedNoticeForegroundColor: string;\n addedNoticeIconColor: string;\n cardRadiusPx: number;\n buttonRadiusPx: number;\n pillRadiusPx: number;\n medicationCardRadiusPx: number;\n inputRadiusPx: number;\n}\n\nexport function resolveMedicationCaptureTheme(\n theme?: MedicationCaptureTheme,\n): ResolvedMedicationCaptureTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const buttonRadius: Radius = theme?.buttonRadius ?? \"full\";\n const pillRadius: Radius = theme?.pillRadius ?? \"full\";\n const medicationCardRadius: Radius =\n theme?.medicationCardRadius ?? base.radius ?? \"lg\";\n const inputRadius: Radius = theme?.inputRadius ?? \"md\";\n\n const blueAccent = \"#2563EB\";\n const greenAccent = \"#15803D\";\n const redAccent = \"#EF4444\";\n\n return {\n base,\n accentBarColors: [\n theme?.accentBarStartColor ?? \"#EC4899\",\n theme?.accentBarMidColor ?? \"#F59E0B\",\n theme?.accentBarEndColor ?? \"#3B82F6\",\n ] as const,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n statusPillBackgroundColor:\n theme?.statusPillBackgroundColor ?? \"#F0FDF4\",\n statusPillBorderColor:\n theme?.statusPillBorderColor ?? \"#BBF7D0\",\n statusPillForegroundColor:\n theme?.statusPillForegroundColor ?? greenAccent,\n statusPillIconColor:\n theme?.statusPillIconColor ?? greenAccent,\n titleColor: theme?.titleColor ?? base.textColor,\n bodyColor: theme?.bodyColor ?? base.mutedTextColor,\n medicationCardBackgroundColor:\n theme?.medicationCardBackgroundColor ?? \"#F8FAFC\",\n medicationCardBorderColor:\n theme?.medicationCardBorderColor ?? base.borderColor,\n medicationNameColor:\n theme?.medicationNameColor ?? base.textColor,\n medicationStrengthColor:\n theme?.medicationStrengthColor ?? base.mutedTextColor,\n medicationInstructionsColor:\n theme?.medicationInstructionsColor ?? base.textColor,\n medicationMetaColor:\n theme?.medicationMetaColor ?? base.mutedTextColor,\n editIconColor: theme?.editIconColor ?? base.mutedTextColor,\n deleteIconColor: theme?.deleteIconColor ?? redAccent,\n inputBackgroundColor:\n theme?.inputBackgroundColor ?? base.surfaceColor,\n inputBorderColor:\n theme?.inputBorderColor ?? base.borderColor,\n inputTextColor: theme?.inputTextColor ?? base.textColor,\n inputPlaceholderColor:\n theme?.inputPlaceholderColor ?? base.mutedTextColor,\n emptyNoticeBackgroundColor:\n theme?.emptyNoticeBackgroundColor ?? \"#F8FAFC\",\n emptyNoticeBorderColor:\n theme?.emptyNoticeBorderColor ?? base.borderColor,\n emptyNoticeForegroundColor:\n theme?.emptyNoticeForegroundColor ?? base.mutedTextColor,\n securityNoteColor:\n theme?.securityNoteColor ?? base.mutedTextColor,\n securityIconColor:\n theme?.securityIconColor ?? base.mutedTextColor,\n primaryButtonBackgroundColor:\n theme?.primaryButtonBackgroundColor ?? blueAccent,\n primaryButtonForegroundColor:\n theme?.primaryButtonForegroundColor ?? \"#FFFFFF\",\n primaryButtonIconColor:\n theme?.primaryButtonIconColor ?? \"#FFFFFF\",\n secondaryButtonBackgroundColor:\n theme?.secondaryButtonBackgroundColor ?? base.surfaceColor,\n secondaryButtonBorderColor:\n theme?.secondaryButtonBorderColor ?? base.borderColor,\n secondaryButtonForegroundColor:\n theme?.secondaryButtonForegroundColor ?? base.textColor,\n secondaryButtonIconColor:\n theme?.secondaryButtonIconColor ?? base.textColor,\n addedNoticeBackgroundColor:\n theme?.addedNoticeBackgroundColor ?? \"#F0FDF4\",\n addedNoticeBorderColor:\n theme?.addedNoticeBorderColor ?? \"#BBF7D0\",\n addedNoticeForegroundColor:\n theme?.addedNoticeForegroundColor ?? greenAccent,\n addedNoticeIconColor:\n theme?.addedNoticeIconColor ?? greenAccent,\n cardRadiusPx: radiusToPx[cardRadius],\n buttonRadiusPx: radiusToPx[buttonRadius],\n pillRadiusPx: radiusToPx[pillRadius],\n medicationCardRadiusPx: radiusToPx[medicationCardRadius],\n inputRadiusPx: radiusToPx[inputRadius],\n };\n}\n","import React, { useMemo, useRef } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather, MaterialCommunityIcons } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveMedicationCaptureSuggestionTheme } from \"./theme\";\nimport type { AbMedicationCaptureSuggestionProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"MEDICATIONS\";\nconst DEFAULT_EYEBROW_ICON_MCI = \"pill\";\nconst DEFAULT_EYEBROW_ICON_FEATHER = \"package\";\nconst DEFAULT_SECURITY_ICON = \"shield\";\nconst DEFAULT_PRIMARY_ICON = \"camera\";\nconst DEFAULT_DISMISS_ICON = \"x\";\nconst DEFAULT_SKIPPED_NOTICE_LABEL =\n \"Skipped — you can add medications any time\";\n\nexport function AbMedicationCaptureSuggestion({\n data,\n theme,\n style,\n onPrimaryPress,\n onDismissPress,\n onSkippedNoticePress,\n}: AbMedicationCaptureSuggestionProps) {\n const t = useMemo(\n () => resolveMedicationCaptureSuggestionTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIconFamily =\n data.eyebrowIconFamily ?? \"material-community\";\n const eyebrowIcon =\n data.eyebrowIconName ??\n (eyebrowIconFamily === \"feather\"\n ? DEFAULT_EYEBROW_ICON_FEATHER\n : DEFAULT_EYEBROW_ICON_MCI);\n const securityIcon =\n data.securityIconName ?? DEFAULT_SECURITY_ICON;\n const primaryIcon =\n data.primaryAction.iconName ?? DEFAULT_PRIMARY_ICON;\n const dismissIcon =\n data.dismissAction?.iconName ?? DEFAULT_DISMISS_ICON;\n const skippedLabel =\n data.skippedNotice?.label ?? DEFAULT_SKIPPED_NOTICE_LABEL;\n const isSkipped = data.skipped ?? false;\n\n // One-shot latches on the optional handlers.\n const primaryFiredRef = useRef<boolean>(false);\n const dismissFiredRef = useRef<boolean>(false);\n const skippedFiredRef = useRef<boolean>(false);\n const handlePrimary = () => {\n if (primaryFiredRef.current) return;\n primaryFiredRef.current = true;\n onPrimaryPress?.();\n };\n const handleDismiss = () => {\n if (dismissFiredRef.current) return;\n dismissFiredRef.current = true;\n onDismissPress?.();\n };\n const handleSkippedNotice = () => {\n if (skippedFiredRef.current) return;\n skippedFiredRef.current = true;\n onSkippedNoticePress?.();\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <LinearGradient\n colors={t.accentBarColors as unknown as [string, string, string]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.accentBar,\n {\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View style={styles.eyebrowRow}>\n {eyebrowIconFamily === \"feather\" ? (\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n ) : (\n <MaterialCommunityIcons\n name={eyebrowIcon as never}\n size={16}\n color={t.eyebrowIconColor}\n style={styles.eyebrowMciIcon}\n />\n )}\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n {data.optionalPill ? (\n <View\n style={[\n styles.optionalPill,\n {\n backgroundColor: t.optionalPillBackgroundColor,\n borderColor: t.optionalPillBorderColor,\n borderRadius: t.pillRadiusPx,\n },\n ]}\n >\n <Text\n style={[\n styles.optionalPillLabel,\n {\n color: t.optionalPillForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.optionalPill.label}\n </Text>\n </View>\n ) : null}\n </View>\n\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n {data.body ? (\n <Text\n style={[\n styles.bodyText,\n { color: t.bodyColor, fontFamily },\n ]}\n >\n {data.body}\n </Text>\n ) : null}\n\n {data.securityNote ? (\n <View style={styles.securityRow}>\n <Feather\n name={securityIcon as never}\n size={14}\n color={t.securityIconColor}\n />\n <Text\n style={[\n styles.securityNote,\n {\n color: t.securityNoteColor,\n fontFamily,\n },\n ]}\n >\n {data.securityNote}\n </Text>\n </View>\n ) : null}\n\n {isSkipped ? (\n <Pressable\n accessibilityRole={\n onSkippedNoticePress ? \"button\" : undefined\n }\n disabled={!onSkippedNoticePress}\n onPress={\n onSkippedNoticePress ? handleSkippedNotice : undefined\n }\n style={({ pressed }) => [\n styles.skippedNotice,\n {\n backgroundColor: t.skippedNoticeBackgroundColor,\n borderColor: t.skippedNoticeBorderColor,\n borderRadius: t.buttonRadiusPx,\n opacity:\n pressed && onSkippedNoticePress ? 0.85 : 1,\n },\n ]}\n >\n <Text\n style={[\n styles.skippedNoticeLabel,\n {\n color: t.skippedNoticeForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {skippedLabel}\n </Text>\n </Pressable>\n ) : (\n <View style={styles.actionsRow}>\n {data.dismissAction ? (\n <Pressable\n accessibilityRole=\"button\"\n disabled={!onDismissPress}\n onPress={\n onDismissPress ? handleDismiss : undefined\n }\n style={({ pressed }) => [\n styles.dismissButton,\n {\n backgroundColor:\n t.dismissButtonBackgroundColor,\n borderColor: t.dismissButtonBorderColor,\n borderRadius: t.buttonRadiusPx,\n opacity:\n pressed && onDismissPress ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={dismissIcon as never}\n size={16}\n color={t.dismissButtonIconColor}\n />\n <Text\n style={[\n styles.dismissButtonLabel,\n {\n color: t.dismissButtonForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.dismissAction.label}\n </Text>\n </Pressable>\n ) : null}\n <Pressable\n accessibilityRole=\"button\"\n disabled={!onPrimaryPress}\n onPress={\n onPrimaryPress ? handlePrimary : undefined\n }\n style={({ pressed }) => [\n styles.primaryButton,\n {\n backgroundColor: t.primaryButtonBackgroundColor,\n borderRadius: t.buttonRadiusPx,\n opacity:\n pressed && onPrimaryPress ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={primaryIcon as never}\n size={16}\n color={t.primaryButtonIconColor}\n />\n <Text\n style={[\n styles.primaryButtonLabel,\n {\n color: t.primaryButtonForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.primaryAction.label}\n </Text>\n </Pressable>\n </View>\n )}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 600,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 12,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 10,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrowMciIcon: {\n marginTop: -1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n optionalPill: {\n paddingHorizontal: 12,\n paddingVertical: 5,\n borderWidth: 1,\n },\n optionalPillLabel: {\n fontSize: 12,\n fontWeight: \"600\",\n },\n title: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n marginTop: 2,\n },\n bodyText: {\n fontSize: 14,\n lineHeight: 20,\n },\n securityRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 8,\n marginTop: 2,\n },\n securityNote: {\n flex: 1,\n fontSize: 13,\n lineHeight: 19,\n },\n actionsRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n marginTop: 4,\n flexWrap: \"wrap\",\n },\n primaryButton: {\n flexGrow: 2,\n flexBasis: 0,\n minWidth: 160,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 18,\n paddingVertical: 13,\n },\n primaryButtonLabel: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n dismissButton: {\n flexGrow: 1,\n flexBasis: 0,\n minWidth: 120,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 18,\n paddingVertical: 12,\n borderWidth: 1,\n },\n dismissButtonLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n skippedNotice: {\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingHorizontal: 18,\n paddingVertical: 14,\n borderWidth: 1,\n marginTop: 4,\n },\n skippedNoticeLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbMedicationCaptureSuggestion`. */\nexport interface MedicationCaptureSuggestionTheme\n extends Partial<BaseTheme> {\n // Top accent bar (gradient)\n accentBarStartColor?: string;\n accentBarMidColor?: string;\n accentBarEndColor?: string;\n // Eyebrow + optional pill\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n optionalPillBackgroundColor?: string;\n optionalPillBorderColor?: string;\n optionalPillForegroundColor?: string;\n // Title + body + security note\n titleColor?: string;\n bodyColor?: string;\n securityNoteColor?: string;\n securityIconColor?: string;\n // Primary action\n primaryButtonBackgroundColor?: string;\n primaryButtonForegroundColor?: string;\n primaryButtonIconColor?: string;\n // Dismiss action (outlined \"Not now\")\n dismissButtonBackgroundColor?: string;\n dismissButtonBorderColor?: string;\n dismissButtonForegroundColor?: string;\n dismissButtonIconColor?: string;\n // Skipped notice\n skippedNoticeBackgroundColor?: string;\n skippedNoticeBorderColor?: string;\n skippedNoticeForegroundColor?: string;\n // Radii\n cardRadius?: Radius;\n buttonRadius?: Radius;\n pillRadius?: Radius;\n}\n\nexport interface ResolvedMedicationCaptureSuggestionTheme {\n base: BaseTheme;\n accentBarColors: readonly [string, string, string];\n eyebrowColor: string;\n eyebrowIconColor: string;\n optionalPillBackgroundColor: string;\n optionalPillBorderColor: string;\n optionalPillForegroundColor: string;\n titleColor: string;\n bodyColor: string;\n securityNoteColor: string;\n securityIconColor: string;\n primaryButtonBackgroundColor: string;\n primaryButtonForegroundColor: string;\n primaryButtonIconColor: string;\n dismissButtonBackgroundColor: string;\n dismissButtonBorderColor: string;\n dismissButtonForegroundColor: string;\n dismissButtonIconColor: string;\n skippedNoticeBackgroundColor: string;\n skippedNoticeBorderColor: string;\n skippedNoticeForegroundColor: string;\n cardRadiusPx: number;\n buttonRadiusPx: number;\n pillRadiusPx: number;\n}\n\nexport function resolveMedicationCaptureSuggestionTheme(\n theme?: MedicationCaptureSuggestionTheme,\n): ResolvedMedicationCaptureSuggestionTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const buttonRadius: Radius = theme?.buttonRadius ?? \"full\";\n const pillRadius: Radius = theme?.pillRadius ?? \"full\";\n\n const blueAccent = \"#2563EB\";\n\n return {\n base,\n accentBarColors: [\n theme?.accentBarStartColor ?? \"#EC4899\",\n theme?.accentBarMidColor ?? \"#F59E0B\",\n theme?.accentBarEndColor ?? \"#3B82F6\",\n ] as const,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n optionalPillBackgroundColor:\n theme?.optionalPillBackgroundColor ?? \"#EFF6FF\",\n optionalPillBorderColor:\n theme?.optionalPillBorderColor ?? \"#BFDBFE\",\n optionalPillForegroundColor:\n theme?.optionalPillForegroundColor ?? blueAccent,\n titleColor: theme?.titleColor ?? base.textColor,\n bodyColor: theme?.bodyColor ?? base.mutedTextColor,\n securityNoteColor:\n theme?.securityNoteColor ?? base.mutedTextColor,\n securityIconColor:\n theme?.securityIconColor ?? base.mutedTextColor,\n primaryButtonBackgroundColor:\n theme?.primaryButtonBackgroundColor ?? blueAccent,\n primaryButtonForegroundColor:\n theme?.primaryButtonForegroundColor ?? \"#FFFFFF\",\n primaryButtonIconColor:\n theme?.primaryButtonIconColor ?? \"#FFFFFF\",\n dismissButtonBackgroundColor:\n theme?.dismissButtonBackgroundColor ?? base.surfaceColor,\n dismissButtonBorderColor:\n theme?.dismissButtonBorderColor ?? base.borderColor,\n dismissButtonForegroundColor:\n theme?.dismissButtonForegroundColor ?? base.textColor,\n dismissButtonIconColor:\n theme?.dismissButtonIconColor ?? base.textColor,\n skippedNoticeBackgroundColor:\n theme?.skippedNoticeBackgroundColor ?? \"#F8FAFC\",\n skippedNoticeBorderColor:\n theme?.skippedNoticeBorderColor ?? base.borderColor,\n skippedNoticeForegroundColor:\n theme?.skippedNoticeForegroundColor ?? base.textColor,\n cardRadiusPx: radiusToPx[cardRadius],\n buttonRadiusPx: radiusToPx[buttonRadius],\n pillRadiusPx: radiusToPx[pillRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, StyleSheet, Text, View } from \"react-native\";\nimport { Feather, MaterialCommunityIcons } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveMedicationLoggedTheme } from \"./theme\";\nimport type { CodeChip, IconRef } from \"./payload\";\nimport type { AbMedicationLoggedProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"MEDICATION LOGGED\";\nconst DEFAULT_EYEBROW_ICON: IconRef = { name: \"link\", family: \"feather\" };\nconst DEFAULT_HERO_ICON: IconRef = { name: \"link\", family: \"feather\" };\nconst DEFAULT_STATUS_ICON: IconRef = { name: \"check\", family: \"feather\" };\n\nfunction renderIcon(\n ref: IconRef | undefined,\n fallback: IconRef,\n size: number,\n color: string,\n style?: object,\n) {\n const r = ref ?? fallback;\n const family = r.family ?? \"feather\";\n if (family === \"material-community\") {\n return (\n <MaterialCommunityIcons\n name={r.name as never}\n size={size}\n color={color}\n style={style as never}\n />\n );\n }\n return (\n <Feather\n name={r.name as never}\n size={size}\n color={color}\n style={style as never}\n />\n );\n}\n\nfunction formatChip(chip: CodeChip): string | null {\n if (chip.label) return chip.label;\n if (chip.system && chip.code) {\n return `${chip.system} ${chip.system}:${chip.code}`;\n }\n if (chip.system) return chip.system;\n if (chip.code) return chip.code;\n return null;\n}\n\nexport function AbMedicationLogged({\n data,\n theme,\n style,\n}: AbMedicationLoggedProps) {\n const t = useMemo(\n () => resolveMedicationLoggedTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const chipText = data.codeChip ? formatChip(data.codeChip) : null;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <LinearGradient\n colors={t.accentBarColors as unknown as [string, string, string]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.accentBar,\n {\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View style={styles.eyebrowRow}>\n {renderIcon(\n data.eyebrowIcon,\n DEFAULT_EYEBROW_ICON,\n 14,\n t.eyebrowIconColor,\n )}\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n {data.statusPill ? (\n <View\n style={[\n styles.statusPill,\n {\n backgroundColor: t.statusPillBackgroundColor,\n borderColor: t.statusPillBorderColor,\n borderRadius: t.pillRadiusPx,\n },\n ]}\n >\n {renderIcon(\n data.statusPill.icon,\n DEFAULT_STATUS_ICON,\n 12,\n t.statusPillIconColor,\n )}\n <Text\n style={[\n styles.statusPillLabel,\n {\n color: t.statusPillForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.statusPill.label}\n </Text>\n </View>\n ) : null}\n </View>\n\n <View style={styles.heroRow}>\n <LinearGradient\n colors={\n t.heroTileColors as unknown as [string, string, string]\n }\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={[\n styles.heroTile,\n { borderRadius: t.heroTileRadiusPx },\n ]}\n >\n {renderIcon(\n data.heroIcon,\n DEFAULT_HERO_ICON,\n 24,\n t.heroTileIconColor,\n )}\n </LinearGradient>\n <View style={styles.heroTextCol}>\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n {chipText ? (\n <View\n style={[\n styles.codeChip,\n {\n backgroundColor: t.codeChipBackgroundColor,\n borderRadius: t.codeChipRadiusPx,\n },\n ]}\n >\n <Text\n style={[\n styles.codeChipLabel,\n {\n color: t.codeChipForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {chipText}\n </Text>\n </View>\n ) : null}\n </View>\n </View>\n\n {data.body ? (\n <Text\n style={[\n styles.bodyText,\n { color: t.bodyColor, fontFamily },\n ]}\n >\n {data.body}\n </Text>\n ) : null}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 600,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 12,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 10,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n statusPill: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderWidth: 1,\n flexShrink: 1,\n },\n statusPillLabel: {\n fontSize: 13,\n fontWeight: \"700\",\n },\n heroRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 14,\n marginTop: 2,\n },\n heroTile: {\n width: 48,\n height: 48,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n heroTextCol: {\n flex: 1,\n gap: 6,\n alignItems: \"flex-start\",\n },\n title: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n },\n codeChip: {\n paddingHorizontal: 10,\n paddingVertical: 4,\n alignSelf: \"flex-start\",\n },\n codeChipLabel: {\n fontSize: 12,\n fontWeight: \"600\",\n },\n bodyText: {\n fontSize: 14,\n lineHeight: 20,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbMedicationLogged`. */\nexport interface MedicationLoggedTheme extends Partial<BaseTheme> {\n // Top accent bar (gradient strip)\n accentBarStartColor?: string;\n accentBarMidColor?: string;\n accentBarEndColor?: string;\n // Eyebrow + status pill\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n statusPillBackgroundColor?: string;\n statusPillBorderColor?: string;\n statusPillForegroundColor?: string;\n statusPillIconColor?: string;\n // Hero icon tile (gradient)\n heroTileStartColor?: string;\n heroTileMidColor?: string;\n heroTileEndColor?: string;\n heroTileIconColor?: string;\n // Title + code chip + body\n titleColor?: string;\n codeChipBackgroundColor?: string;\n codeChipForegroundColor?: string;\n bodyColor?: string;\n // Radii\n cardRadius?: Radius;\n pillRadius?: Radius;\n heroTileRadius?: Radius;\n codeChipRadius?: Radius;\n}\n\nexport interface ResolvedMedicationLoggedTheme {\n base: BaseTheme;\n accentBarColors: readonly [string, string, string];\n eyebrowColor: string;\n eyebrowIconColor: string;\n statusPillBackgroundColor: string;\n statusPillBorderColor: string;\n statusPillForegroundColor: string;\n statusPillIconColor: string;\n heroTileColors: readonly [string, string, string];\n heroTileIconColor: string;\n titleColor: string;\n codeChipBackgroundColor: string;\n codeChipForegroundColor: string;\n bodyColor: string;\n cardRadiusPx: number;\n pillRadiusPx: number;\n heroTileRadiusPx: number;\n codeChipRadiusPx: number;\n}\n\nexport function resolveMedicationLoggedTheme(\n theme?: MedicationLoggedTheme,\n): ResolvedMedicationLoggedTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const pillRadius: Radius = theme?.pillRadius ?? \"full\";\n const heroTileRadius: Radius =\n theme?.heroTileRadius ?? base.radius ?? \"lg\";\n const codeChipRadius: Radius = theme?.codeChipRadius ?? \"full\";\n\n return {\n base,\n accentBarColors: [\n theme?.accentBarStartColor ?? \"#EC4899\",\n theme?.accentBarMidColor ?? \"#F59E0B\",\n theme?.accentBarEndColor ?? \"#3B82F6\",\n ] as const,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n statusPillBackgroundColor:\n theme?.statusPillBackgroundColor ?? \"#ECFDF5\",\n statusPillBorderColor:\n theme?.statusPillBorderColor ?? \"#A7F3D0\",\n statusPillForegroundColor:\n theme?.statusPillForegroundColor ?? \"#047857\",\n statusPillIconColor:\n theme?.statusPillIconColor ?? \"#047857\",\n heroTileColors: [\n theme?.heroTileStartColor ?? \"#F472B6\",\n theme?.heroTileMidColor ?? \"#F59E0B\",\n theme?.heroTileEndColor ?? \"#A855F7\",\n ] as const,\n heroTileIconColor: theme?.heroTileIconColor ?? \"#FFFFFF\",\n titleColor: theme?.titleColor ?? base.textColor,\n codeChipBackgroundColor:\n theme?.codeChipBackgroundColor ?? \"#F1F5F9\",\n codeChipForegroundColor:\n theme?.codeChipForegroundColor ?? base.textColor,\n bodyColor: theme?.bodyColor ?? base.mutedTextColor,\n cardRadiusPx: radiusToPx[cardRadius],\n pillRadiusPx: radiusToPx[pillRadius],\n heroTileRadiusPx: radiusToPx[heroTileRadius],\n codeChipRadiusPx: radiusToPx[codeChipRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, StyleSheet, Text, View } from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\n\nimport { resolveMedicationSafetyTheme } from \"./theme\";\nimport type { MedicationSafetyItem } from \"./payload\";\nimport type {\n AbMedicationSafetyProps,\n ResolvedMedicationSafetyTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"MEDICATION SAFETY\";\nconst DEFAULT_EYEBROW_ICON = \"shield\";\n\nexport function AbMedicationSafety({\n data,\n theme,\n style,\n}: AbMedicationSafetyProps) {\n const t = useMemo(\n () => resolveMedicationSafetyTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIcon = data.eyebrowIconName ?? DEFAULT_EYEBROW_ICON;\n const items = data.items ?? [];\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View style={styles.eyebrowRow}>\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n\n <View style={styles.itemsList}>\n {items.map((item) => (\n <SafetyRow key={item.id} item={item} theme={t} />\n ))}\n </View>\n </View>\n );\n}\n\nfunction SafetyRow({\n item,\n theme: t,\n}: {\n item: MedicationSafetyItem;\n theme: ResolvedMedicationSafetyTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n const tone = item.tone ?? \"warning\";\n const toneColors = t.tones[tone];\n return (\n <View style={styles.itemRow}>\n <View\n style={[\n styles.avatar,\n {\n backgroundColor: toneColors.background,\n borderRadius: t.avatarRadiusPx,\n },\n ]}\n >\n <Feather\n name={(item.iconName ?? \"shield\") as never}\n size={18}\n color={toneColors.icon}\n />\n </View>\n <View style={styles.itemBody}>\n <Text\n style={[\n styles.itemTitle,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {item.title}\n </Text>\n <Text\n style={[\n styles.itemText,\n { color: t.bodyColor, fontFamily },\n ]}\n >\n {item.body}\n </Text>\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 560,\n borderWidth: 1,\n padding: 18,\n gap: 14,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n itemsList: {\n gap: 16,\n },\n itemRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n },\n avatar: {\n width: 36,\n height: 36,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n itemBody: {\n flex: 1,\n gap: 2,\n },\n itemTitle: {\n fontSize: 15,\n fontWeight: \"700\",\n lineHeight: 22,\n },\n itemText: {\n fontSize: 14,\n lineHeight: 20,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { MedicationSafetyItemTone } from \"./payload\";\n\n/** Theme overrides for `AbMedicationSafety`. */\nexport interface MedicationSafetyTheme extends Partial<BaseTheme> {\n // Eyebrow\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n // Item title + body\n titleColor?: string;\n bodyColor?: string;\n // Per-tone avatar (background + icon foreground)\n toneWarningBackgroundColor?: string;\n toneWarningIconColor?: string;\n toneInfoBackgroundColor?: string;\n toneInfoIconColor?: string;\n toneSuccessBackgroundColor?: string;\n toneSuccessIconColor?: string;\n toneDangerBackgroundColor?: string;\n toneDangerIconColor?: string;\n toneNeutralBackgroundColor?: string;\n toneNeutralIconColor?: string;\n // Radii\n cardRadius?: Radius;\n avatarRadius?: Radius;\n}\n\nexport interface ResolvedTone {\n background: string;\n icon: string;\n}\n\nexport interface ResolvedMedicationSafetyTheme {\n base: BaseTheme;\n eyebrowColor: string;\n eyebrowIconColor: string;\n titleColor: string;\n bodyColor: string;\n tones: Record<MedicationSafetyItemTone, ResolvedTone>;\n cardRadiusPx: number;\n avatarRadiusPx: number;\n}\n\nexport function resolveMedicationSafetyTheme(\n theme?: MedicationSafetyTheme,\n): ResolvedMedicationSafetyTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const avatarRadius: Radius = theme?.avatarRadius ?? \"full\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n titleColor: theme?.titleColor ?? base.textColor,\n bodyColor: theme?.bodyColor ?? base.mutedTextColor,\n tones: {\n warning: {\n background:\n theme?.toneWarningBackgroundColor ?? \"#FEF3C7\",\n icon: theme?.toneWarningIconColor ?? \"#B45309\",\n },\n info: {\n background:\n theme?.toneInfoBackgroundColor ??\n \"rgba(59, 130, 246, 0.12)\",\n icon: theme?.toneInfoIconColor ?? \"#1D4ED8\",\n },\n success: {\n background:\n theme?.toneSuccessBackgroundColor ??\n \"rgba(16, 185, 129, 0.12)\",\n icon: theme?.toneSuccessIconColor ?? \"#047857\",\n },\n danger: {\n background:\n theme?.toneDangerBackgroundColor ??\n \"rgba(239, 68, 68, 0.12)\",\n icon: theme?.toneDangerIconColor ?? \"#B91C1C\",\n },\n neutral: {\n background:\n theme?.toneNeutralBackgroundColor ?? base.surfaceColor,\n icon: theme?.toneNeutralIconColor ?? base.textColor,\n },\n },\n cardRadiusPx: radiusToPx[cardRadius],\n avatarRadiusPx: radiusToPx[avatarRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveNearbyCareSiteTheme } from \"./theme\";\nimport type {\n NearbyCareSiteAction,\n NearbyCareSiteReason,\n NearbyCareSiteStat,\n} from \"./payload\";\nimport type {\n AbNearbyCareSiteProps,\n ResolvedNearbyCareSiteTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"NEARBY CARE SITE\";\nconst DEFAULT_REASONS_HEADER = \"RECOMMENDED BECAUSE\";\n\nexport function AbNearbyCareSite({\n data,\n theme,\n style,\n onActionPress,\n}: AbNearbyCareSiteProps) {\n const t = useMemo(\n () => resolveNearbyCareSiteTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const reasonsHeader = data.reasonsHeader ?? DEFAULT_REASONS_HEADER;\n const showMap = data.map !== null;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n {showMap ? (\n <MapPreview theme={t} map={data.map ?? undefined} />\n ) : null}\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View style={styles.eyebrowWrap}>\n <Feather name=\"map-pin\" size={14} color={t.eyebrowColor} />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n {data.categoryBadge ? (\n <View\n style={[\n styles.categoryBadge,\n {\n backgroundColor: t.categoryBadgeBackgroundColor,\n borderColor: t.categoryBadgeBorderColor,\n borderRadius: t.buttonRadiusPx,\n },\n ]}\n >\n <Text\n style={[\n styles.categoryBadgeLabel,\n {\n color: t.categoryBadgeForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.categoryBadge}\n </Text>\n </View>\n ) : null}\n </View>\n\n <Text\n style={[styles.name, { color: t.nameColor, fontFamily }]}\n numberOfLines={2}\n >\n {data.name}\n </Text>\n {data.address ? (\n <Text\n style={[\n styles.address,\n { color: t.addressColor, fontFamily },\n ]}\n >\n {data.address}\n </Text>\n ) : null}\n\n {data.stats && data.stats.length > 0 ? (\n <View style={styles.statsRow}>\n {data.stats.map((stat) => (\n <StatCell key={stat.id} stat={stat} theme={t} />\n ))}\n </View>\n ) : null}\n\n {data.reasons && data.reasons.length > 0 ? (\n <View\n style={[\n styles.reasonsCard,\n {\n backgroundColor: t.reasonsBackgroundColor,\n borderColor: t.reasonsBorderColor,\n borderRadius: t.reasonsRadiusPx,\n },\n ]}\n >\n <View style={styles.reasonsHeaderRow}>\n <Feather\n name=\"zap\"\n size={14}\n color={t.reasonsHeaderColor}\n />\n <Text\n style={[\n styles.reasonsHeader,\n { color: t.reasonsHeaderColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {reasonsHeader}\n </Text>\n </View>\n <View style={styles.reasonsList}>\n {data.reasons.map((reason) => (\n <ReasonRow\n key={reason.id}\n reason={reason}\n theme={t}\n />\n ))}\n </View>\n </View>\n ) : null}\n\n {data.actions && data.actions.length > 0 ? (\n <View style={styles.actionsRow}>\n {data.actions.map((action) => (\n <ActionButton\n key={action.id}\n action={action}\n theme={t}\n onPress={onActionPress}\n />\n ))}\n </View>\n ) : null}\n </View>\n </View>\n );\n}\n\nfunction MapPreview({\n theme: t,\n map,\n}: {\n theme: ResolvedNearbyCareSiteTheme;\n map?: import(\"./payload\").NearbyCareSiteMap;\n}) {\n const fontFamily = t.base.fontFamily;\n const distance = map?.distanceLabel === null ? null : map?.distanceLabel;\n const hours = map?.hoursLabel === null ? null : map?.hoursLabel;\n const status =\n map?.statusLabel === null ? null : map?.statusLabel ?? \"Located\";\n\n return (\n <View\n style={[\n styles.map,\n {\n backgroundColor: t.mapBackgroundColor,\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n >\n {/* Stylized \"map\" composed from plain Views — no external map dep. */}\n <View\n pointerEvents=\"none\"\n style={[styles.mapStreet, styles.mapStreetH1, { backgroundColor: t.mapStreetColor }]}\n />\n <View\n pointerEvents=\"none\"\n style={[styles.mapStreet, styles.mapStreetH2, { backgroundColor: t.mapStreetColor }]}\n />\n <View\n pointerEvents=\"none\"\n style={[styles.mapStreet, styles.mapStreetV1, { backgroundColor: t.mapStreetColor }]}\n />\n <View\n pointerEvents=\"none\"\n style={[styles.mapStreet, styles.mapStreetV2, { backgroundColor: t.mapStreetColor }]}\n />\n <View\n pointerEvents=\"none\"\n style={[\n styles.mapPark,\n styles.mapParkA,\n { backgroundColor: t.mapParkColor },\n ]}\n />\n <View\n pointerEvents=\"none\"\n style={[\n styles.mapPark,\n styles.mapParkB,\n { backgroundColor: t.mapParkColor },\n ]}\n />\n <View\n pointerEvents=\"none\"\n style={[\n styles.mapWater,\n { backgroundColor: t.mapWaterColor },\n ]}\n />\n\n {/* User location dot */}\n <View\n pointerEvents=\"none\"\n style={[\n styles.userDotOuter,\n { backgroundColor: \"rgba(37, 99, 235, 0.2)\" },\n ]}\n >\n <View\n style={[\n styles.userDot,\n { backgroundColor: t.mapUserDotColor },\n ]}\n />\n </View>\n\n {/* Center pin */}\n <View pointerEvents=\"none\" style={styles.pinWrap}>\n <View\n style={[\n styles.pinHalo,\n { backgroundColor: t.mapPinHaloColor },\n ]}\n />\n <LinearGradient\n colors={t.mapPinGradient}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={styles.pin}\n >\n <Feather name=\"map-pin\" size={18} color=\"#FFFFFF\" />\n </LinearGradient>\n </View>\n\n {/* Top-right status pill */}\n {status ? (\n <View\n style={[\n styles.statusPill,\n { backgroundColor: t.mapStatusBackgroundColor },\n ]}\n >\n <Feather\n name=\"crosshair\"\n size={12}\n color={t.mapStatusForegroundColor}\n />\n <Text\n style={[\n styles.statusPillLabel,\n { color: t.mapStatusForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {status}\n </Text>\n </View>\n ) : null}\n\n {/* Bottom chips */}\n <View style={styles.mapChipsRow} pointerEvents=\"none\">\n {distance ? (\n <View\n style={[\n styles.chip,\n { backgroundColor: t.mapChipBackgroundColor },\n ]}\n >\n <Feather\n name=\"navigation\"\n size={12}\n color={t.mapChipForegroundColor}\n />\n <Text\n style={[\n styles.chipLabel,\n { color: t.mapChipForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {distance}\n </Text>\n </View>\n ) : (\n <View />\n )}\n {hours ? (\n <View\n style={[\n styles.chip,\n styles.chipFlexible,\n { backgroundColor: t.mapChipBackgroundColor },\n ]}\n >\n <Feather\n name=\"clock\"\n size={12}\n color={t.mapChipForegroundColor}\n />\n <Text\n style={[\n styles.chipLabel,\n { color: t.mapChipForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {hours}\n </Text>\n </View>\n ) : null}\n </View>\n </View>\n );\n}\n\nfunction StatCell({\n stat,\n theme: t,\n}: {\n stat: NearbyCareSiteStat;\n theme: ResolvedNearbyCareSiteTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n return (\n <View style={styles.statCell}>\n <View style={styles.statLabelRow}>\n {stat.iconName ? (\n <Feather\n name={stat.iconName as never}\n size={12}\n color={t.statLabelColor}\n />\n ) : null}\n <Text\n style={[\n styles.statLabel,\n { color: t.statLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {stat.label.toUpperCase()}\n </Text>\n </View>\n <Text\n style={[\n styles.statValue,\n { color: t.statValueColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {stat.value}\n </Text>\n </View>\n );\n}\n\nfunction ReasonRow({\n reason,\n theme: t,\n}: {\n reason: NearbyCareSiteReason;\n theme: ResolvedNearbyCareSiteTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n return (\n <View style={styles.reasonRow}>\n <Feather name=\"check\" size={14} color={t.reasonsCheckColor} />\n <Text\n style={[\n styles.reasonText,\n { color: t.reasonsTextColor, fontFamily },\n ]}\n >\n {reason.text}\n </Text>\n </View>\n );\n}\n\nfunction ActionButton({\n action,\n theme: t,\n onPress,\n}: {\n action: NearbyCareSiteAction;\n theme: ResolvedNearbyCareSiteTheme;\n onPress?: (id: string) => void;\n}) {\n const fontFamily = t.base.fontFamily;\n const kind = action.kind ?? \"secondary\";\n const isPrimary = kind === \"primary\";\n const bg = isPrimary\n ? t.primaryActionBackgroundColor\n : t.secondaryActionBackgroundColor;\n const fg = isPrimary\n ? t.primaryActionForegroundColor\n : t.secondaryActionForegroundColor;\n const border = isPrimary\n ? t.primaryActionBackgroundColor\n : t.secondaryActionBorderColor;\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => onPress?.(action.id)}\n style={({ pressed }) => [\n styles.actionButton,\n {\n backgroundColor: bg,\n borderColor: border,\n borderRadius: t.buttonRadiusPx,\n opacity: pressed ? 0.9 : 1,\n },\n ]}\n >\n {action.iconName ? (\n <Feather\n name={action.iconName as never}\n size={16}\n color={fg}\n />\n ) : null}\n <Text\n style={[styles.actionLabel, { color: fg, fontFamily }]}\n numberOfLines={1}\n >\n {action.label}\n </Text>\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 560,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n body: {\n padding: 16,\n gap: 10,\n },\n // ---------- Map ----------\n map: {\n width: \"100%\",\n height: 200,\n overflow: \"hidden\",\n position: \"relative\",\n },\n mapStreet: {\n position: \"absolute\",\n opacity: 0.95,\n },\n mapStreetH1: {\n left: 0,\n right: 0,\n top: 70,\n height: 6,\n },\n mapStreetH2: {\n left: 0,\n right: 0,\n top: 130,\n height: 4,\n },\n mapStreetV1: {\n top: 0,\n bottom: 0,\n left: \"30%\",\n width: 6,\n },\n mapStreetV2: {\n top: 0,\n bottom: 0,\n left: \"65%\",\n width: 4,\n },\n mapPark: {\n position: \"absolute\",\n opacity: 0.85,\n borderRadius: 6,\n },\n mapParkA: {\n top: 18,\n left: \"10%\",\n width: 60,\n height: 50,\n },\n mapParkB: {\n top: 22,\n right: \"8%\",\n width: 80,\n height: 70,\n transform: [{ rotate: \"12deg\" }],\n },\n mapWater: {\n position: \"absolute\",\n bottom: 0,\n left: 0,\n right: 0,\n height: 50,\n opacity: 0.7,\n },\n userDotOuter: {\n position: \"absolute\",\n top: 110,\n left: \"22%\",\n width: 22,\n height: 22,\n borderRadius: 11,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n userDot: {\n width: 10,\n height: 10,\n borderRadius: 5,\n },\n pinWrap: {\n position: \"absolute\",\n top: 60,\n left: \"50%\",\n marginLeft: -22,\n width: 44,\n height: 44,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n pinHalo: {\n position: \"absolute\",\n width: 64,\n height: 64,\n borderRadius: 32,\n top: -10,\n left: -10,\n },\n pin: {\n width: 44,\n height: 44,\n borderRadius: 22,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderWidth: 3,\n borderColor: \"#FFFFFF\",\n },\n statusPill: {\n position: \"absolute\",\n top: 12,\n right: 12,\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 999,\n },\n statusPillLabel: {\n fontSize: 12,\n fontWeight: \"700\",\n },\n mapChipsRow: {\n position: \"absolute\",\n bottom: 12,\n left: 12,\n right: 12,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n },\n chip: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 999,\n },\n chipFlexible: {\n flexShrink: 1,\n },\n chipLabel: {\n fontSize: 12,\n fontWeight: \"600\",\n },\n // ---------- Header ----------\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n },\n eyebrowWrap: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n categoryBadge: {\n paddingHorizontal: 12,\n paddingVertical: 4,\n borderWidth: 1,\n },\n categoryBadgeLabel: {\n fontSize: 12,\n fontWeight: \"600\",\n },\n // ---------- Title ----------\n name: {\n fontSize: 20,\n fontWeight: \"700\",\n lineHeight: 26,\n },\n address: {\n fontSize: 14,\n lineHeight: 20,\n },\n // ---------- Stats ----------\n statsRow: {\n flexDirection: \"row\",\n gap: 12,\n marginTop: 6,\n },\n statCell: {\n flex: 1,\n gap: 4,\n },\n statLabelRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n },\n statLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1.1,\n },\n statValue: {\n fontSize: 16,\n fontWeight: \"700\",\n },\n // ---------- Reasons ----------\n reasonsCard: {\n borderWidth: 1,\n padding: 12,\n gap: 8,\n marginTop: 4,\n },\n reasonsHeaderRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n },\n reasonsHeader: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n reasonsList: {\n gap: 6,\n },\n reasonRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 8,\n },\n reasonText: {\n flex: 1,\n fontSize: 14,\n lineHeight: 20,\n },\n // ---------- Actions ----------\n actionsRow: {\n flexDirection: \"row\",\n gap: 10,\n marginTop: 6,\n },\n actionButton: {\n flex: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingVertical: 12,\n paddingHorizontal: 16,\n borderWidth: 1,\n },\n actionLabel: {\n fontSize: 15,\n fontWeight: \"600\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbNearbyCareSite`. */\nexport interface NearbyCareSiteTheme extends Partial<BaseTheme> {\n // Map preview\n mapBackgroundColor?: string;\n mapStreetColor?: string;\n mapWaterColor?: string;\n mapParkColor?: string;\n mapUserDotColor?: string;\n mapPinGradientStart?: string;\n mapPinGradientEnd?: string;\n mapPinHaloColor?: string;\n mapChipBackgroundColor?: string;\n mapChipForegroundColor?: string;\n mapStatusBackgroundColor?: string;\n mapStatusForegroundColor?: string;\n // Eyebrow + category badge\n eyebrowColor?: string;\n categoryBadgeBackgroundColor?: string;\n categoryBadgeBorderColor?: string;\n categoryBadgeForegroundColor?: string;\n // Title + address\n nameColor?: string;\n addressColor?: string;\n // Stats\n statLabelColor?: string;\n statValueColor?: string;\n // Reasons card\n reasonsBackgroundColor?: string;\n reasonsBorderColor?: string;\n reasonsHeaderColor?: string;\n reasonsTextColor?: string;\n reasonsCheckColor?: string;\n // Action buttons\n primaryActionBackgroundColor?: string;\n primaryActionForegroundColor?: string;\n secondaryActionBackgroundColor?: string;\n secondaryActionBorderColor?: string;\n secondaryActionForegroundColor?: string;\n // Radii\n cardRadius?: Radius;\n mapRadius?: Radius;\n reasonsRadius?: Radius;\n buttonRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the card internals. */\nexport interface ResolvedNearbyCareSiteTheme {\n base: BaseTheme;\n mapBackgroundColor: string;\n mapStreetColor: string;\n mapWaterColor: string;\n mapParkColor: string;\n mapUserDotColor: string;\n mapPinGradient: [string, string];\n mapPinHaloColor: string;\n mapChipBackgroundColor: string;\n mapChipForegroundColor: string;\n mapStatusBackgroundColor: string;\n mapStatusForegroundColor: string;\n eyebrowColor: string;\n categoryBadgeBackgroundColor: string;\n categoryBadgeBorderColor: string;\n categoryBadgeForegroundColor: string;\n nameColor: string;\n addressColor: string;\n statLabelColor: string;\n statValueColor: string;\n reasonsBackgroundColor: string;\n reasonsBorderColor: string;\n reasonsHeaderColor: string;\n reasonsTextColor: string;\n reasonsCheckColor: string;\n primaryActionBackgroundColor: string;\n primaryActionForegroundColor: string;\n secondaryActionBackgroundColor: string;\n secondaryActionBorderColor: string;\n secondaryActionForegroundColor: string;\n cardRadiusPx: number;\n mapRadiusPx: number;\n reasonsRadiusPx: number;\n buttonRadiusPx: number;\n}\n\nexport function resolveNearbyCareSiteTheme(\n theme?: NearbyCareSiteTheme,\n): ResolvedNearbyCareSiteTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius =\n theme?.cardRadius ?? base.radius ?? \"lg\";\n const mapRadius: Radius = theme?.mapRadius ?? \"md\";\n const reasonsRadius: Radius = theme?.reasonsRadius ?? \"md\";\n const buttonRadius: Radius = theme?.buttonRadius ?? \"full\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n mapBackgroundColor: theme?.mapBackgroundColor ?? \"#EFF6FF\",\n mapStreetColor: theme?.mapStreetColor ?? \"#FFFFFF\",\n mapWaterColor: theme?.mapWaterColor ?? \"#DBEAFE\",\n mapParkColor: theme?.mapParkColor ?? \"#BBF7D0\",\n mapUserDotColor: theme?.mapUserDotColor ?? \"#2563EB\",\n mapPinGradient: [\n theme?.mapPinGradientStart ?? \"#FB923C\",\n theme?.mapPinGradientEnd ?? \"#EF4444\",\n ],\n mapPinHaloColor:\n theme?.mapPinHaloColor ?? \"rgba(239, 68, 68, 0.25)\",\n mapChipBackgroundColor:\n theme?.mapChipBackgroundColor ?? \"#FFFFFF\",\n mapChipForegroundColor:\n theme?.mapChipForegroundColor ?? base.textColor,\n mapStatusBackgroundColor:\n theme?.mapStatusBackgroundColor ?? \"#16A34A\",\n mapStatusForegroundColor:\n theme?.mapStatusForegroundColor ?? \"#FFFFFF\",\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n categoryBadgeBackgroundColor:\n theme?.categoryBadgeBackgroundColor ?? \"rgba(34, 197, 94, 0.08)\",\n categoryBadgeBorderColor:\n theme?.categoryBadgeBorderColor ?? \"rgba(34, 197, 94, 0.35)\",\n categoryBadgeForegroundColor:\n theme?.categoryBadgeForegroundColor ?? \"#16A34A\",\n nameColor: theme?.nameColor ?? base.textColor,\n addressColor: theme?.addressColor ?? base.mutedTextColor,\n statLabelColor: theme?.statLabelColor ?? base.mutedTextColor,\n statValueColor: theme?.statValueColor ?? base.textColor,\n reasonsBackgroundColor:\n theme?.reasonsBackgroundColor ?? \"#EFF6FF\",\n reasonsBorderColor:\n theme?.reasonsBorderColor ?? \"rgba(59, 130, 246, 0.25)\",\n reasonsHeaderColor: theme?.reasonsHeaderColor ?? \"#2563EB\",\n reasonsTextColor:\n theme?.reasonsTextColor ?? base.textColor,\n reasonsCheckColor: theme?.reasonsCheckColor ?? \"#2563EB\",\n primaryActionBackgroundColor:\n theme?.primaryActionBackgroundColor ?? base.accentColor,\n primaryActionForegroundColor:\n theme?.primaryActionForegroundColor ?? \"#FFFFFF\",\n secondaryActionBackgroundColor:\n theme?.secondaryActionBackgroundColor ?? base.surfaceColor,\n secondaryActionBorderColor:\n theme?.secondaryActionBorderColor ?? base.borderColor,\n secondaryActionForegroundColor:\n theme?.secondaryActionForegroundColor ?? base.textColor,\n cardRadiusPx: radiusToPx[cardRadius],\n mapRadiusPx: radiusToPx[mapRadius],\n reasonsRadiusPx: radiusToPx[reasonsRadius],\n buttonRadiusPx: radiusToPx[buttonRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, Pressable, StyleSheet, Text, View } from \"react-native\";\nimport {\n Feather,\n Ionicons,\n MaterialCommunityIcons,\n MaterialIcons,\n} from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveNextStepsTheme } from \"./theme\";\nimport type { NextStepOption, NextStepsIconFamily } from \"./payload\";\nimport type { AbNextStepsProps, ResolvedNextStepsTheme } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"NEXT STEPS\";\nconst DEFAULT_TITLE = \"What would you like to see next?\";\n\nfunction renderIcon(\n family: NextStepsIconFamily,\n name: string,\n size: number,\n color: string,\n) {\n switch (family) {\n case \"Feather\":\n return <Feather name={name as never} size={size} color={color} />;\n case \"Ionicons\":\n return <Ionicons name={name as never} size={size} color={color} />;\n case \"MaterialIcons\":\n return <MaterialIcons name={name as never} size={size} color={color} />;\n case \"MaterialCommunityIcons\":\n default:\n return (\n <MaterialCommunityIcons\n name={name as never}\n size={size}\n color={color}\n />\n );\n }\n}\n\nexport function AbNextSteps({\n data,\n theme,\n onOptionPress,\n style,\n}: AbNextStepsProps) {\n const t = useMemo(() => resolveNextStepsTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const title = data.title ?? DEFAULT_TITLE;\n\n const countLabel =\n data.optionsCountLabel === null\n ? null\n : (data.optionsCountLabel ?? `${data.options.length} options`);\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View\n style={[\n styles.accentBar,\n {\n backgroundColor: t.accentBarColor,\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.eyebrowRow}>\n <View style={styles.eyebrowLeft}>\n <Feather\n name=\"check-square\"\n size={16}\n color={t.base.mutedTextColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.base.mutedTextColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n {countLabel ? (\n <Text\n style={[\n styles.countLabel,\n { color: t.optionsCountColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {countLabel}\n </Text>\n ) : null}\n </View>\n\n <Text\n style={[styles.title, { color: t.base.textColor, fontFamily }]}\n >\n {title}\n </Text>\n\n {data.description ? (\n <Text\n style={[\n styles.description,\n { color: t.base.mutedTextColor, fontFamily },\n ]}\n >\n {data.description}\n </Text>\n ) : null}\n\n <View style={styles.options}>\n {data.options.map((option) => (\n <OptionRow\n key={option.id}\n option={option}\n theme={t}\n onPress={onOptionPress}\n />\n ))}\n </View>\n </View>\n </View>\n );\n}\n\nfunction OptionRow({\n option,\n theme: t,\n onPress,\n}: {\n option: NextStepOption;\n theme: ResolvedNextStepsTheme;\n onPress?: (option: NextStepOption) => void;\n}) {\n const fontFamily = t.base.fontFamily;\n const status = option.status ?? \"active\";\n\n if (status === \"viewed\") {\n const actionLabel = option.actionLabel ?? \"Viewed\";\n const subtitle = option.viewedSubtitle ?? \"Shown above\";\n\n const Inner = (\n <>\n <View\n style={[\n styles.viewedCheck,\n { backgroundColor: t.viewedCheckBackgroundColor },\n ]}\n >\n <Feather\n name=\"check\"\n size={20}\n color={t.viewedCheckForegroundColor}\n />\n </View>\n <View style={styles.optionTextCol}>\n <Text\n style={[\n styles.optionTitle,\n styles.viewedTitle,\n { color: t.viewedTitleColor, fontFamily },\n ]}\n numberOfLines={2}\n >\n {option.title}\n </Text>\n <Text\n style={[\n styles.optionSubtitle,\n { color: t.viewedSubtitleColor, fontFamily },\n ]}\n numberOfLines={2}\n >\n {subtitle}\n </Text>\n </View>\n <Text\n style={[\n styles.viewedAction,\n { color: t.viewedAccentColor, fontFamily },\n ]}\n >\n {actionLabel.toUpperCase()}\n </Text>\n </>\n );\n\n const rowStyle = [\n styles.row,\n styles.viewedRow,\n {\n backgroundColor: t.viewedBackgroundColor,\n borderColor: t.viewedBorderColor,\n borderRadius: t.viewedRowRadiusPx,\n },\n ];\n\n if (onPress) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={option.title}\n onPress={() => onPress(option)}\n style={({ pressed }) => [...rowStyle, { opacity: pressed ? 0.9 : 1 }]}\n >\n {Inner}\n </Pressable>\n );\n }\n return <View style={rowStyle}>{Inner}</View>;\n }\n\n // active\n const actionLabel = option.actionLabel ?? \"Show\";\n const iconFamily: NextStepsIconFamily = option.iconFamily ?? \"MaterialCommunityIcons\";\n const iconName = option.iconName ?? \"circle-outline\";\n\n const Inner = (\n <>\n <LinearGradient\n colors={t.iconGradient}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={styles.iconTile}\n >\n {renderIcon(iconFamily, iconName, 20, t.iconForegroundColor)}\n </LinearGradient>\n <View style={styles.optionTextCol}>\n <Text\n style={[\n styles.optionTitle,\n { color: t.optionTitleColor, fontFamily },\n ]}\n >\n {option.title}\n </Text>\n {option.subtitle ? (\n <Text\n style={[\n styles.optionSubtitle,\n { color: t.optionSubtitleColor, fontFamily },\n ]}\n >\n {option.subtitle}\n </Text>\n ) : null}\n </View>\n <View style={styles.actionCol}>\n <Text\n style={[styles.actionLabel, { color: t.actionColor, fontFamily }]}\n >\n {actionLabel}\n </Text>\n <Feather name=\"arrow-right\" size={16} color={t.actionColor} />\n </View>\n </>\n );\n\n if (onPress) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={option.title}\n onPress={() => onPress(option)}\n style={({ pressed }) => [\n styles.row,\n styles.activeRow,\n { opacity: pressed ? 0.9 : 1 },\n ]}\n >\n {Inner}\n </Pressable>\n );\n }\n return <View style={[styles.row, styles.activeRow]}>{Inner}</View>;\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 520,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 20,\n gap: 12,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n },\n eyebrowLeft: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n countLabel: {\n fontSize: 13,\n },\n title: {\n fontSize: 20,\n fontWeight: \"700\",\n lineHeight: 26,\n marginTop: 2,\n },\n description: {\n fontSize: 15,\n lineHeight: 22,\n },\n options: {\n gap: 12,\n marginTop: 6,\n },\n row: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 14,\n },\n activeRow: {\n paddingVertical: 4,\n },\n viewedRow: {\n paddingVertical: 14,\n paddingHorizontal: 14,\n borderWidth: 1,\n },\n iconTile: {\n width: 44,\n height: 44,\n borderRadius: 22,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n viewedCheck: {\n width: 36,\n height: 36,\n borderRadius: 18,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n optionTextCol: {\n flex: 1,\n gap: 2,\n },\n optionTitle: {\n fontSize: 15,\n fontWeight: \"700\",\n lineHeight: 20,\n },\n viewedTitle: {\n textDecorationLine: \"line-through\",\n fontWeight: \"700\",\n },\n optionSubtitle: {\n fontSize: 14,\n lineHeight: 20,\n },\n actionCol: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 4,\n },\n actionLabel: {\n fontSize: 15,\n fontWeight: \"600\",\n },\n viewedAction: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.1,\n textTransform: \"uppercase\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/**\n * Theme overrides for `AbNextSteps`.\n *\n * Extends `Partial<BaseTheme>` so callers can pass `tone`, `mode`, etc.\n * and get the shared cascading behavior, then layers component-specific keys.\n */\nexport interface NextStepsTheme extends Partial<BaseTheme> {\n /** Color of the thin accent bar across the top of the card. */\n accentBarColor?: string;\n /** Two-stop gradient for active option icon tiles. */\n iconGradientStart?: string;\n iconGradientEnd?: string;\n /** Color of the icon glyph (sits on top of the gradient tile). */\n iconForegroundColor?: string;\n /** Title color for active rows (defaults to base text color). */\n optionTitleColor?: string;\n /** Subtitle color for active rows (defaults to base muted text). */\n optionSubtitleColor?: string;\n /** Trailing \"Show\" link color for active rows. */\n actionColor?: string;\n /** Viewed-state palette. */\n viewedBackgroundColor?: string;\n viewedBorderColor?: string;\n viewedAccentColor?: string;\n viewedCheckBackgroundColor?: string;\n viewedCheckForegroundColor?: string;\n viewedTitleColor?: string;\n viewedSubtitleColor?: string;\n /** Right-side options-count label color (eyebrow row). */\n optionsCountColor?: string;\n /** Radius tokens. */\n cardRadius?: Radius;\n /** Radius for the rounded \"viewed\" pill row. */\n viewedRowRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the card internals. */\nexport interface ResolvedNextStepsTheme {\n base: BaseTheme;\n accentBarColor: string;\n iconGradient: [string, string];\n iconForegroundColor: string;\n optionTitleColor: string;\n optionSubtitleColor: string;\n actionColor: string;\n viewedBackgroundColor: string;\n viewedBorderColor: string;\n viewedAccentColor: string;\n viewedCheckBackgroundColor: string;\n viewedCheckForegroundColor: string;\n viewedTitleColor: string;\n viewedSubtitleColor: string;\n optionsCountColor: string;\n cardRadiusPx: number;\n viewedRowRadiusPx: number;\n}\n\nexport function resolveNextStepsTheme(\n theme?: NextStepsTheme,\n): ResolvedNextStepsTheme {\n const base = resolveBaseTheme(theme);\n const cardRadius: Radius = theme?.cardRadius ?? \"lg\";\n const viewedRowRadius: Radius = theme?.viewedRowRadius ?? \"lg\";\n\n // Cascade: explicit theme override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n accentBarColor: theme?.accentBarColor ?? base.accentColor,\n iconGradient: [\n theme?.iconGradientStart ?? \"#F97316\",\n theme?.iconGradientEnd ?? \"#EC4899\",\n ],\n iconForegroundColor: theme?.iconForegroundColor ?? \"#FFFFFF\",\n optionTitleColor: theme?.optionTitleColor ?? base.textColor,\n optionSubtitleColor: theme?.optionSubtitleColor ?? base.mutedTextColor,\n actionColor: theme?.actionColor ?? base.accentColor,\n viewedBackgroundColor: theme?.viewedBackgroundColor ?? \"#ECFDF5\",\n viewedBorderColor: theme?.viewedBorderColor ?? \"#A7F3C2\",\n viewedAccentColor: theme?.viewedAccentColor ?? \"#15803D\",\n viewedCheckBackgroundColor:\n theme?.viewedCheckBackgroundColor ?? \"#D1FAE5\",\n viewedCheckForegroundColor:\n theme?.viewedCheckForegroundColor ?? \"#15803D\",\n viewedTitleColor: theme?.viewedTitleColor ?? base.mutedTextColor,\n viewedSubtitleColor: theme?.viewedSubtitleColor ?? base.mutedTextColor,\n optionsCountColor: theme?.optionsCountColor ?? base.mutedTextColor,\n cardRadiusPx: radiusToPx[cardRadius],\n viewedRowRadiusPx: radiusToPx[viewedRowRadius],\n };\n}\n","import React, { useMemo, useRef, useState } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolvePharmacyFullfilmentTheme } from \"./theme\";\nimport type { AbPharmacyFullfilmentProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"PHARMACY FULFILLMENT\";\nconst DEFAULT_EYEBROW_ICON = \"package\";\nconst DEFAULT_AVATAR_ICON = \"feather\";\nconst DEFAULT_CTA_LABEL = \"View options\";\nconst DEFAULT_CTA_ICON = \"arrow-right\";\nconst DEFAULT_REVEALED_LABEL = \"Options shown below\";\n\nexport function AbPharmacyFullfilment({\n data,\n theme,\n style,\n revealed,\n onRevealedChange,\n onReveal,\n}: AbPharmacyFullfilmentProps) {\n const t = useMemo(\n () => resolvePharmacyFullfilmentTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIcon = data.eyebrowIconName ?? DEFAULT_EYEBROW_ICON;\n const avatarIcon = data.avatarIconName ?? DEFAULT_AVATAR_ICON;\n const ctaLabel = data.ctaLabel ?? DEFAULT_CTA_LABEL;\n const ctaIcon = data.ctaIconName ?? DEFAULT_CTA_ICON;\n const revealedLabel =\n data.revealedLabel ?? DEFAULT_REVEALED_LABEL;\n\n const [internalRevealed, setInternalRevealed] = useState<boolean>(\n data.defaultRevealed ?? false,\n );\n const isRevealed =\n revealed !== undefined ? revealed : internalRevealed;\n // One-shot latch: even in controlled mode where the parent's\n // `revealed` prop may update asynchronously, repeated CTA taps\n // cannot fire `onReveal` more than once per mount.\n const revealFiredRef = useRef<boolean>(\n data.defaultRevealed ?? false,\n );\n\n const handlePress = () => {\n if (isRevealed || revealFiredRef.current) return;\n revealFiredRef.current = true;\n if (revealed === undefined) setInternalRevealed(true);\n onRevealedChange?.(true);\n onReveal?.();\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View style={styles.eyebrowRow}>\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n\n <View style={styles.bodyRow}>\n <LinearGradient\n colors={t.avatarGradient as unknown as [string, string]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={[\n styles.avatar,\n {\n borderRadius: t.avatarRadiusPx,\n borderColor: t.avatarBorderColor,\n },\n ]}\n >\n <Feather\n name={avatarIcon as never}\n size={22}\n color={t.avatarIconColor}\n />\n </LinearGradient>\n <View style={styles.bodyColumn}>\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n <Text\n style={[\n styles.body,\n { color: t.bodyColor, fontFamily },\n ]}\n >\n {data.body}\n </Text>\n </View>\n </View>\n\n {isRevealed ? (\n <View\n style={[\n styles.cta,\n {\n backgroundColor: t.revealedBackgroundColor,\n borderRadius: t.ctaRadiusPx,\n },\n ]}\n >\n <Text\n style={[\n styles.ctaLabel,\n { color: t.revealedForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {revealedLabel}\n </Text>\n </View>\n ) : (\n <Pressable\n accessibilityRole=\"button\"\n onPress={handlePress}\n style={({ pressed }) => [\n styles.cta,\n {\n backgroundColor: t.ctaBackgroundColor,\n borderRadius: t.ctaRadiusPx,\n opacity: pressed ? 0.9 : 1,\n },\n ]}\n >\n <Text\n style={[\n styles.ctaLabel,\n { color: t.ctaForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {ctaLabel}\n </Text>\n <Feather\n name={ctaIcon as never}\n size={16}\n color={t.ctaForegroundColor}\n />\n </Pressable>\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 560,\n borderWidth: 1,\n padding: 18,\n gap: 14,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n bodyRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 14,\n },\n avatar: {\n width: 48,\n height: 48,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderWidth: 1,\n },\n bodyColumn: {\n flex: 1,\n gap: 6,\n },\n title: {\n fontSize: 17,\n fontWeight: \"700\",\n lineHeight: 24,\n },\n body: {\n fontSize: 14,\n lineHeight: 20,\n },\n cta: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 10,\n paddingHorizontal: 16,\n paddingVertical: 14,\n },\n ctaLabel: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbPharmacyFullfilment`. */\nexport interface PharmacyFullfilmentTheme extends Partial<BaseTheme> {\n // Eyebrow\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n // Title + body\n titleColor?: string;\n bodyColor?: string;\n // Avatar gradient\n avatarGradientStart?: string;\n avatarGradientEnd?: string;\n avatarBorderColor?: string;\n avatarIconColor?: string;\n // Active CTA\n ctaBackgroundColor?: string;\n ctaForegroundColor?: string;\n // Revealed (disabled-looking) CTA\n revealedBackgroundColor?: string;\n revealedForegroundColor?: string;\n // Radii\n cardRadius?: Radius;\n avatarRadius?: Radius;\n ctaRadius?: Radius;\n}\n\nexport interface ResolvedPharmacyFullfilmentTheme {\n base: BaseTheme;\n eyebrowColor: string;\n eyebrowIconColor: string;\n titleColor: string;\n bodyColor: string;\n avatarGradient: readonly [string, string];\n avatarBorderColor: string;\n avatarIconColor: string;\n ctaBackgroundColor: string;\n ctaForegroundColor: string;\n revealedBackgroundColor: string;\n revealedForegroundColor: string;\n cardRadiusPx: number;\n avatarRadiusPx: number;\n ctaRadiusPx: number;\n}\n\nexport function resolvePharmacyFullfilmentTheme(\n theme?: PharmacyFullfilmentTheme,\n): ResolvedPharmacyFullfilmentTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const avatarRadius: Radius = theme?.avatarRadius ?? \"full\";\n const ctaRadius: Radius = theme?.ctaRadius ?? \"full\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n titleColor: theme?.titleColor ?? base.textColor,\n bodyColor: theme?.bodyColor ?? base.mutedTextColor,\n avatarGradient: [\n theme?.avatarGradientStart ?? \"#34D399\",\n theme?.avatarGradientEnd ?? \"#3B82F6\",\n ] as const,\n avatarBorderColor:\n theme?.avatarBorderColor ?? \"rgba(15, 23, 42, 0.04)\",\n avatarIconColor: theme?.avatarIconColor ?? \"#FFFFFF\",\n ctaBackgroundColor: theme?.ctaBackgroundColor ?? \"#2563EB\",\n ctaForegroundColor: theme?.ctaForegroundColor ?? \"#FFFFFF\",\n revealedBackgroundColor:\n theme?.revealedBackgroundColor ?? \"#A5B4FC\",\n revealedForegroundColor:\n theme?.revealedForegroundColor ?? \"#FFFFFF\",\n cardRadiusPx: radiusToPx[cardRadius],\n avatarRadiusPx: radiusToPx[avatarRadius],\n ctaRadiusPx: radiusToPx[ctaRadius],\n };\n}\n","import React, { useMemo, useRef, useState } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\n\nimport { resolvePharmacyOptionsTheme } from \"./theme\";\nimport type {\n DeliveryPanel,\n PharmacyMetaCell,\n PharmacyOption,\n PharmacyTab,\n} from \"./payload\";\nimport type {\n AbPharmacyOptionsProps,\n ResolvedPharmacyOptionsTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"PICKUP & DELIVERY\";\nconst DEFAULT_EYEBROW_ICON = \"shopping-bag\";\nconst DEFAULT_PICKUP_TAB_ID = \"pickup\";\nconst DEFAULT_DELIVERY_TAB_ID = \"delivery\";\nconst DEFAULT_TABS: PharmacyTab[] = [\n { id: DEFAULT_PICKUP_TAB_ID, label: \"Pickup nearby\", iconName: \"shopping-bag\" },\n { id: DEFAULT_DELIVERY_TAB_ID, label: \"Delivery to you\", iconName: \"truck\" },\n];\n\nfunction toIdSet(\n src: ReadonlySet<string> | readonly string[] | undefined,\n): Set<string> {\n if (!src) return new Set();\n return src instanceof Set ? new Set(src) : new Set(src);\n}\n\nexport function AbPharmacyOptions({\n data,\n theme,\n style,\n selectedTabId,\n onSelectTab,\n reservedPharmacyIds,\n onReservePharmacy,\n deliveryRequested,\n onDeliveryRequestedChange,\n onRequestDelivery,\n}: AbPharmacyOptionsProps) {\n const t = useMemo(\n () => resolvePharmacyOptionsTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIcon = data.eyebrowIconName ?? DEFAULT_EYEBROW_ICON;\n const summaryChip = data.summaryChip ?? null;\n const tabs = data.tabs ?? DEFAULT_TABS;\n const pickupTabId = data.pickupTabId ?? DEFAULT_PICKUP_TAB_ID;\n const deliveryTabId =\n data.deliveryTabId ?? DEFAULT_DELIVERY_TAB_ID;\n const pharmacies = data.pharmacies ?? [];\n const deliveryPanel =\n data.deliveryPanel === null ? null : data.deliveryPanel;\n\n const [internalTabId, setInternalTabId] = useState<string>(\n data.defaultTabId ?? tabs[0]?.id ?? pickupTabId,\n );\n const activeTabId = selectedTabId ?? internalTabId;\n\n const [internalReserved, setInternalReserved] = useState<\n Set<string>\n >(() => new Set(data.defaultReservedPharmacyIds ?? []));\n // Per-pharmacy one-shot latch so that, even in controlled mode where\n // `reservedPharmacyIds` updates asynchronously, repeated taps cannot\n // fire `onReservePharmacy(id)` more than once per pharmacy.\n const reserveFiredRef = useRef<Set<string>>(\n new Set(data.defaultReservedPharmacyIds ?? []),\n );\n const reservedSet = reservedPharmacyIds\n ? toIdSet(reservedPharmacyIds)\n : internalReserved;\n\n const [internalDeliverySent, setInternalDeliverySent] =\n useState<boolean>(data.defaultDeliveryRequested ?? false);\n // One-shot latch for the delivery CTA, mirroring the pharmacy latch.\n const deliveryFiredRef = useRef<boolean>(\n data.defaultDeliveryRequested ?? false,\n );\n const isDeliverySent =\n deliveryRequested !== undefined\n ? deliveryRequested\n : internalDeliverySent;\n\n const handleSelectTab = (id: string) => {\n if (selectedTabId === undefined) setInternalTabId(id);\n onSelectTab?.(id);\n };\n\n const handleReservePharmacy = (id: string) => {\n if (reservedSet.has(id) || reserveFiredRef.current.has(id))\n return;\n reserveFiredRef.current.add(id);\n if (reservedPharmacyIds === undefined) {\n setInternalReserved((prev) => {\n const next = new Set(prev);\n next.add(id);\n return next;\n });\n }\n onReservePharmacy?.(id);\n };\n\n const handleRequestDelivery = () => {\n if (isDeliverySent || deliveryFiredRef.current) return;\n deliveryFiredRef.current = true;\n if (deliveryRequested === undefined)\n setInternalDeliverySent(true);\n onDeliveryRequestedChange?.(true);\n onRequestDelivery?.();\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View style={styles.headerRow}>\n <View style={styles.eyebrowWrap}>\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n {summaryChip ? (\n <View\n style={[\n styles.summaryChip,\n {\n backgroundColor: t.summaryChipBackgroundColor,\n borderColor: t.summaryChipBorderColor,\n borderRadius: t.summaryChipRadiusPx,\n },\n ]}\n >\n <Text\n style={[\n styles.summaryChipText,\n {\n color: t.summaryChipForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {summaryChip}\n </Text>\n </View>\n ) : null}\n </View>\n\n {tabs.length > 0 ? (\n <View\n style={[\n styles.tabsRow,\n {\n backgroundColor: t.tabsBackgroundColor,\n borderRadius: t.tabsRadiusPx,\n },\n ]}\n >\n {tabs.map((tab) => (\n <TabButton\n key={tab.id}\n tab={tab}\n theme={t}\n selected={tab.id === activeTabId}\n onPress={() => handleSelectTab(tab.id)}\n />\n ))}\n </View>\n ) : null}\n\n {activeTabId === deliveryTabId ? (\n deliveryPanel ? (\n <DeliveryCard\n panel={deliveryPanel}\n theme={t}\n isSent={isDeliverySent}\n onPress={handleRequestDelivery}\n />\n ) : null\n ) : (\n <View style={styles.pharmacyList}>\n {pharmacies.map((p) => (\n <PharmacyCard\n key={p.id}\n pharmacy={p}\n theme={t}\n reserved={reservedSet.has(p.id)}\n onPress={() => handleReservePharmacy(p.id)}\n />\n ))}\n </View>\n )}\n </View>\n );\n}\n\nfunction TabButton({\n tab,\n theme: t,\n selected,\n onPress,\n}: {\n tab: PharmacyTab;\n theme: ResolvedPharmacyOptionsTheme;\n selected: boolean;\n onPress: () => void;\n}) {\n const fontFamily = t.base.fontFamily;\n const bg = selected\n ? t.tabSelectedBackgroundColor\n : t.tabBackgroundColor;\n const fg = selected ? t.tabSelectedTextColor : t.tabTextColor;\n return (\n <Pressable\n accessibilityRole=\"tab\"\n accessibilityState={{ selected }}\n onPress={onPress}\n style={({ pressed }) => [\n styles.tab,\n {\n backgroundColor: bg,\n borderRadius: t.tabRadiusPx,\n borderColor: selected\n ? t.tabSelectedBorderColor\n : \"transparent\",\n borderWidth: selected ? 1 : 0,\n opacity: pressed ? 0.9 : 1,\n },\n ]}\n >\n {tab.iconName ? (\n <Feather name={tab.iconName as never} size={14} color={fg} />\n ) : null}\n <Text\n style={[\n styles.tabLabel,\n { color: fg, fontFamily },\n ]}\n numberOfLines={1}\n >\n {tab.label}\n </Text>\n </Pressable>\n );\n}\n\nfunction PharmacyCard({\n pharmacy: p,\n theme: t,\n reserved,\n onPress,\n}: {\n pharmacy: PharmacyOption;\n theme: ResolvedPharmacyOptionsTheme;\n reserved: boolean;\n onPress: () => void;\n}) {\n const fontFamily = t.base.fontFamily;\n const badge = p.badge ?? null;\n const badgeTone = badge?.tone ?? \"success\";\n const badgeColors = badge ? t.badgeTones[badgeTone] : undefined;\n const meta = p.meta ?? [];\n return (\n <View\n style={[\n styles.subCard,\n {\n backgroundColor: t.subCardBackgroundColor,\n borderColor: reserved\n ? t.subCardSelectedBorderColor\n : t.subCardBorderColor,\n borderRadius: t.subCardRadiusPx,\n },\n ]}\n >\n <View style={styles.subCardHeader}>\n <View style={styles.subCardTitleColumn}>\n <View style={styles.titleAndBadgeRow}>\n <Text\n style={[\n styles.subCardTitle,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {p.name}\n </Text>\n {badge && badgeColors ? (\n <View\n style={[\n styles.inlineBadge,\n {\n backgroundColor: badgeColors.background,\n borderColor: badgeColors.border,\n borderRadius: t.badgeRadiusPx,\n },\n ]}\n >\n {badge.iconName ? (\n <Feather\n name={badge.iconName as never}\n size={12}\n color={badgeColors.foreground}\n />\n ) : null}\n <Text\n style={[\n styles.inlineBadgeText,\n {\n color: badgeColors.foreground,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {badge.label}\n </Text>\n </View>\n ) : null}\n </View>\n {p.address ? (\n <View style={styles.addressRow}>\n <Feather\n name={(p.addressIconName ?? \"map-pin\") as never}\n size={14}\n color={t.addressIconColor}\n />\n <Text\n style={[\n styles.address,\n { color: t.addressColor, fontFamily },\n ]}\n >\n {p.address}\n </Text>\n </View>\n ) : null}\n </View>\n {(p.distanceLabel || p.hoursLabel) && (\n <View style={styles.distanceColumn}>\n {p.distanceLabel ? (\n <Text\n style={[\n styles.distance,\n { color: t.distanceColor, fontFamily },\n ]}\n >\n {p.distanceLabel}\n </Text>\n ) : null}\n {p.hoursLabel ? (\n <Text\n style={[\n styles.hours,\n { color: t.hoursColor, fontFamily },\n ]}\n >\n {p.hoursLabel}\n </Text>\n ) : null}\n </View>\n )}\n </View>\n\n {meta.length > 0 ? (\n <MetaGrid cells={meta} theme={t} />\n ) : null}\n\n {reserved ? (\n <View\n style={[\n styles.reservedPill,\n {\n backgroundColor: t.reservedBackgroundColor,\n borderColor: t.reservedBorderColor,\n borderRadius: t.reservedRadiusPx,\n },\n ]}\n >\n <Feather\n name={(p.reservedIconName ?? \"check\") as never}\n size={16}\n color={t.reservedIconColor}\n />\n <Text\n style={[\n styles.reservedLabel,\n { color: t.reservedForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {p.reservedLabel ?? \"Pickup reserved\"}\n </Text>\n </View>\n ) : (\n <Pressable\n accessibilityRole=\"button\"\n onPress={onPress}\n style={({ pressed }) => [\n styles.cta,\n {\n backgroundColor: t.ctaBackgroundColor,\n borderRadius: t.ctaRadiusPx,\n opacity: pressed ? 0.9 : 1,\n },\n ]}\n >\n {p.reserveIconName ? (\n <Feather\n name={p.reserveIconName as never}\n size={16}\n color={t.ctaForegroundColor}\n />\n ) : null}\n <Text\n style={[\n styles.ctaLabel,\n { color: t.ctaForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {p.reserveLabel ?? \"Reserve pickup\"}\n </Text>\n </Pressable>\n )}\n </View>\n );\n}\n\nfunction DeliveryCard({\n panel,\n theme: t,\n isSent,\n onPress,\n}: {\n panel: DeliveryPanel;\n theme: ResolvedPharmacyOptionsTheme;\n isSent: boolean;\n onPress: () => void;\n}) {\n const fontFamily = t.base.fontFamily;\n const meta = panel.meta ?? [];\n return (\n <View\n style={[\n styles.subCard,\n {\n backgroundColor: t.subCardBackgroundColor,\n borderColor: t.subCardBorderColor,\n borderRadius: t.subCardRadiusPx,\n },\n ]}\n >\n <View style={styles.subCardHeader}>\n <View style={styles.subCardTitleColumn}>\n <Text\n style={[\n styles.subCardTitle,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {panel.title}\n </Text>\n {panel.subtitle ? (\n <View style={styles.addressRow}>\n {panel.subtitleIconName ? (\n <Feather\n name={panel.subtitleIconName as never}\n size={14}\n color={t.addressIconColor}\n />\n ) : null}\n <Text\n style={[\n styles.address,\n { color: t.addressColor, fontFamily },\n ]}\n >\n {panel.subtitle}\n </Text>\n </View>\n ) : null}\n </View>\n {(panel.etaLabel || panel.etaSubLabel) && (\n <View style={styles.distanceColumn}>\n {panel.etaLabel ? (\n <Text\n style={[\n styles.distance,\n { color: t.distanceColor, fontFamily },\n ]}\n >\n {panel.etaLabel}\n </Text>\n ) : null}\n {panel.etaSubLabel ? (\n <Text\n style={[\n styles.hours,\n { color: t.hoursColor, fontFamily },\n ]}\n >\n {panel.etaSubLabel}\n </Text>\n ) : null}\n </View>\n )}\n </View>\n\n {meta.length > 0 ? (\n <MetaGrid cells={meta} theme={t} />\n ) : null}\n\n {isSent ? (\n <View\n style={[\n styles.reservedPill,\n {\n backgroundColor: t.reservedBackgroundColor,\n borderColor: t.reservedBorderColor,\n borderRadius: t.reservedRadiusPx,\n },\n ]}\n >\n <Feather\n name={(panel.sentIconName ?? \"check\") as never}\n size={16}\n color={t.reservedIconColor}\n />\n <Text\n style={[\n styles.reservedLabel,\n { color: t.reservedForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {panel.sentLabel ?? \"Delivery requested\"}\n </Text>\n </View>\n ) : (\n <Pressable\n accessibilityRole=\"button\"\n onPress={onPress}\n style={({ pressed }) => [\n styles.cta,\n {\n backgroundColor: t.ctaBackgroundColor,\n borderRadius: t.ctaRadiusPx,\n opacity: pressed ? 0.9 : 1,\n },\n ]}\n >\n {panel.ctaIconName ? (\n <Feather\n name={panel.ctaIconName as never}\n size={16}\n color={t.ctaForegroundColor}\n />\n ) : null}\n <Text\n style={[\n styles.ctaLabel,\n { color: t.ctaForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {panel.ctaLabel ?? \"Request delivery\"}\n </Text>\n </Pressable>\n )}\n </View>\n );\n}\n\nfunction MetaGrid({\n cells,\n theme: t,\n}: {\n cells: PharmacyMetaCell[];\n theme: ResolvedPharmacyOptionsTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n return (\n <View style={styles.metaGrid}>\n {cells.map((cell, idx) => (\n <View key={`${cell.label}-${idx}`} style={styles.metaCell}>\n <Text\n style={[\n styles.metaLabel,\n { color: t.metaLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {cell.label}\n </Text>\n <View style={styles.metaValueRow}>\n {cell.iconName ? (\n <Feather\n name={cell.iconName as never}\n size={14}\n color={t.metaIconColor}\n />\n ) : null}\n <Text\n style={[\n styles.metaValue,\n { color: t.metaValueColor, fontFamily },\n ]}\n >\n {cell.value}\n </Text>\n </View>\n </View>\n ))}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 560,\n borderWidth: 1,\n padding: 18,\n gap: 14,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 10,\n },\n eyebrowWrap: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n summaryChip: {\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderWidth: 1,\n flexShrink: 1,\n },\n summaryChipText: {\n fontSize: 13,\n fontWeight: \"600\",\n },\n tabsRow: {\n flexDirection: \"row\",\n padding: 4,\n gap: 4,\n },\n tab: {\n flex: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 12,\n paddingVertical: 10,\n },\n tabLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n pharmacyList: {\n gap: 14,\n },\n subCard: {\n borderWidth: 1,\n padding: 14,\n gap: 12,\n },\n subCardHeader: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: 12,\n },\n subCardTitleColumn: {\n flex: 1,\n gap: 6,\n },\n titleAndBadgeRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n gap: 8,\n },\n subCardTitle: {\n fontSize: 17,\n fontWeight: \"700\",\n lineHeight: 22,\n },\n inlineBadge: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 10,\n paddingVertical: 4,\n borderWidth: 1,\n },\n inlineBadgeText: {\n fontSize: 12,\n fontWeight: \"700\",\n },\n addressRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n },\n address: {\n flexShrink: 1,\n fontSize: 14,\n lineHeight: 20,\n },\n distanceColumn: {\n alignItems: \"flex-end\",\n gap: 2,\n },\n distance: {\n fontSize: 14,\n fontWeight: \"700\",\n },\n hours: {\n fontSize: 12,\n },\n metaGrid: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n rowGap: 12,\n },\n metaCell: {\n width: \"50%\",\n gap: 4,\n paddingRight: 8,\n },\n metaLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n metaValueRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n },\n metaValue: {\n flexShrink: 1,\n fontSize: 14,\n fontWeight: \"500\",\n },\n cta: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 16,\n paddingVertical: 14,\n },\n ctaLabel: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n reservedPill: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderWidth: 1,\n },\n reservedLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { PharmacyBadge } from \"./payload\";\n\ntype BadgeTone = NonNullable<PharmacyBadge[\"tone\"]>;\n\n/** Theme overrides for `AbPharmacyOptions`. */\nexport interface PharmacyOptionsTheme extends Partial<BaseTheme> {\n // Eyebrow + summary chip\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n summaryChipBackgroundColor?: string;\n summaryChipBorderColor?: string;\n summaryChipForegroundColor?: string;\n // Tabs\n tabsBackgroundColor?: string;\n tabBackgroundColor?: string;\n tabTextColor?: string;\n tabSelectedBackgroundColor?: string;\n tabSelectedBorderColor?: string;\n tabSelectedTextColor?: string;\n // Pharmacy / delivery sub-cards\n subCardBackgroundColor?: string;\n subCardBorderColor?: string;\n subCardSelectedBorderColor?: string;\n // Titles + body\n titleColor?: string;\n addressColor?: string;\n addressIconColor?: string;\n // Top-right distance / ETA\n distanceColor?: string;\n hoursColor?: string;\n // Meta grid\n metaLabelColor?: string;\n metaValueColor?: string;\n metaIconColor?: string;\n // Per-tone inline badge (lowest-cost = success, etc.)\n badgeSuccessBackgroundColor?: string;\n badgeSuccessBorderColor?: string;\n badgeSuccessForegroundColor?: string;\n badgeInfoBackgroundColor?: string;\n badgeInfoBorderColor?: string;\n badgeInfoForegroundColor?: string;\n badgeWarningBackgroundColor?: string;\n badgeWarningBorderColor?: string;\n badgeWarningForegroundColor?: string;\n badgeDangerBackgroundColor?: string;\n badgeDangerBorderColor?: string;\n badgeDangerForegroundColor?: string;\n badgeNeutralBackgroundColor?: string;\n badgeNeutralBorderColor?: string;\n badgeNeutralForegroundColor?: string;\n // Primary CTA + reserved/sent pill\n ctaBackgroundColor?: string;\n ctaForegroundColor?: string;\n reservedBackgroundColor?: string;\n reservedBorderColor?: string;\n reservedForegroundColor?: string;\n reservedIconColor?: string;\n // Radii\n cardRadius?: Radius;\n subCardRadius?: Radius;\n tabsRadius?: Radius;\n tabRadius?: Radius;\n ctaRadius?: Radius;\n reservedRadius?: Radius;\n badgeRadius?: Radius;\n summaryChipRadius?: Radius;\n}\n\nexport interface ResolvedBadgeTone {\n background: string;\n border: string;\n foreground: string;\n}\n\nexport interface ResolvedPharmacyOptionsTheme {\n base: BaseTheme;\n eyebrowColor: string;\n eyebrowIconColor: string;\n summaryChipBackgroundColor: string;\n summaryChipBorderColor: string;\n summaryChipForegroundColor: string;\n tabsBackgroundColor: string;\n tabBackgroundColor: string;\n tabTextColor: string;\n tabSelectedBackgroundColor: string;\n tabSelectedBorderColor: string;\n tabSelectedTextColor: string;\n subCardBackgroundColor: string;\n subCardBorderColor: string;\n subCardSelectedBorderColor: string;\n titleColor: string;\n addressColor: string;\n addressIconColor: string;\n distanceColor: string;\n hoursColor: string;\n metaLabelColor: string;\n metaValueColor: string;\n metaIconColor: string;\n badgeTones: Record<BadgeTone, ResolvedBadgeTone>;\n ctaBackgroundColor: string;\n ctaForegroundColor: string;\n reservedBackgroundColor: string;\n reservedBorderColor: string;\n reservedForegroundColor: string;\n reservedIconColor: string;\n cardRadiusPx: number;\n subCardRadiusPx: number;\n tabsRadiusPx: number;\n tabRadiusPx: number;\n ctaRadiusPx: number;\n reservedRadiusPx: number;\n badgeRadiusPx: number;\n summaryChipRadiusPx: number;\n}\n\nexport function resolvePharmacyOptionsTheme(\n theme?: PharmacyOptionsTheme,\n): ResolvedPharmacyOptionsTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const subCardRadius: Radius =\n theme?.subCardRadius ?? base.radius ?? \"lg\";\n const tabsRadius: Radius = theme?.tabsRadius ?? \"full\";\n const tabRadius: Radius = theme?.tabRadius ?? \"full\";\n const ctaRadius: Radius = theme?.ctaRadius ?? \"full\";\n const reservedRadius: Radius = theme?.reservedRadius ?? \"full\";\n const badgeRadius: Radius = theme?.badgeRadius ?? \"full\";\n const summaryChipRadius: Radius =\n theme?.summaryChipRadius ?? \"full\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n summaryChipBackgroundColor:\n theme?.summaryChipBackgroundColor ?? base.surfaceColor,\n summaryChipBorderColor:\n theme?.summaryChipBorderColor ?? base.borderColor,\n summaryChipForegroundColor:\n theme?.summaryChipForegroundColor ?? base.textColor,\n tabsBackgroundColor:\n theme?.tabsBackgroundColor ?? \"#F1F5F9\",\n tabBackgroundColor:\n theme?.tabBackgroundColor ?? \"transparent\",\n tabTextColor: theme?.tabTextColor ?? base.mutedTextColor,\n tabSelectedBackgroundColor:\n theme?.tabSelectedBackgroundColor ?? base.surfaceColor,\n tabSelectedBorderColor:\n theme?.tabSelectedBorderColor ?? base.borderColor,\n tabSelectedTextColor:\n theme?.tabSelectedTextColor ?? base.textColor,\n subCardBackgroundColor:\n theme?.subCardBackgroundColor ?? base.surfaceColor,\n subCardBorderColor:\n theme?.subCardBorderColor ?? base.borderColor,\n subCardSelectedBorderColor:\n theme?.subCardSelectedBorderColor ?? \"#10B981\",\n titleColor: theme?.titleColor ?? base.textColor,\n addressColor: theme?.addressColor ?? base.mutedTextColor,\n addressIconColor:\n theme?.addressIconColor ?? base.mutedTextColor,\n distanceColor: theme?.distanceColor ?? base.textColor,\n hoursColor: theme?.hoursColor ?? base.mutedTextColor,\n metaLabelColor:\n theme?.metaLabelColor ?? base.mutedTextColor,\n metaValueColor: theme?.metaValueColor ?? base.textColor,\n metaIconColor: theme?.metaIconColor ?? base.mutedTextColor,\n badgeTones: {\n success: {\n background:\n theme?.badgeSuccessBackgroundColor ??\n \"rgba(16, 185, 129, 0.10)\",\n border:\n theme?.badgeSuccessBorderColor ??\n \"rgba(16, 185, 129, 0.35)\",\n foreground:\n theme?.badgeSuccessForegroundColor ?? \"#047857\",\n },\n info: {\n background:\n theme?.badgeInfoBackgroundColor ??\n \"rgba(59, 130, 246, 0.10)\",\n border:\n theme?.badgeInfoBorderColor ??\n \"rgba(59, 130, 246, 0.30)\",\n foreground:\n theme?.badgeInfoForegroundColor ?? \"#1D4ED8\",\n },\n warning: {\n background:\n theme?.badgeWarningBackgroundColor ?? \"#FEF3C7\",\n border:\n theme?.badgeWarningBorderColor ??\n \"rgba(245, 158, 11, 0.30)\",\n foreground:\n theme?.badgeWarningForegroundColor ?? \"#92400E\",\n },\n danger: {\n background:\n theme?.badgeDangerBackgroundColor ??\n \"rgba(239, 68, 68, 0.10)\",\n border:\n theme?.badgeDangerBorderColor ??\n \"rgba(239, 68, 68, 0.30)\",\n foreground:\n theme?.badgeDangerForegroundColor ?? \"#B91C1C\",\n },\n neutral: {\n background:\n theme?.badgeNeutralBackgroundColor ?? base.surfaceColor,\n border:\n theme?.badgeNeutralBorderColor ?? base.borderColor,\n foreground:\n theme?.badgeNeutralForegroundColor ?? base.textColor,\n },\n },\n ctaBackgroundColor: theme?.ctaBackgroundColor ?? \"#2563EB\",\n ctaForegroundColor: theme?.ctaForegroundColor ?? \"#FFFFFF\",\n reservedBackgroundColor:\n theme?.reservedBackgroundColor ?? \"#F1F5F9\",\n reservedBorderColor:\n theme?.reservedBorderColor ?? \"transparent\",\n reservedForegroundColor:\n theme?.reservedForegroundColor ?? base.mutedTextColor,\n reservedIconColor:\n theme?.reservedIconColor ?? base.mutedTextColor,\n cardRadiusPx: radiusToPx[cardRadius],\n subCardRadiusPx: radiusToPx[subCardRadius],\n tabsRadiusPx: radiusToPx[tabsRadius],\n tabRadiusPx: radiusToPx[tabRadius],\n ctaRadiusPx: radiusToPx[ctaRadius],\n reservedRadiusPx: radiusToPx[reservedRadius],\n badgeRadiusPx: radiusToPx[badgeRadius],\n summaryChipRadiusPx: radiusToPx[summaryChipRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, StyleSheet, Text, View } from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolvePublicHealthNoticeTheme } from \"./theme\";\nimport type { AbPublicHealthNoticeProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"PUBLIC HEALTH NOTICE\";\nconst DEFAULT_ICON_BY_TONE: Record<string, string> = {\n info: \"info\",\n warning: \"alert-triangle\",\n success: \"check-circle\",\n danger: \"alert-octagon\",\n};\n\nexport function AbPublicHealthNotice({\n data,\n theme,\n style,\n}: AbPublicHealthNoticeProps) {\n const t = useMemo(\n () => resolvePublicHealthNoticeTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const tone = data.tone ?? \"info\";\n const v = t.tones[tone];\n const iconName =\n data.iconName ?? DEFAULT_ICON_BY_TONE[tone] ?? \"info\";\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const source = data.source === null ? null : data.source;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.outer,\n cardShadow,\n { borderRadius: t.cardRadiusPx },\n style,\n ]}\n >\n <LinearGradient\n colors={v.gradient}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={[\n styles.card,\n {\n borderColor: v.border,\n borderRadius: t.cardRadiusPx,\n },\n ]}\n >\n <View\n style={[\n styles.avatar,\n { backgroundColor: v.avatarBackground },\n ]}\n >\n <Feather\n name={iconName as never}\n size={18}\n color={v.avatarIconColor}\n />\n </View>\n\n <View style={styles.body}>\n <Text\n style={[\n styles.eyebrow,\n { color: v.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n <Text\n style={[\n styles.bodyText,\n { color: t.bodyColor, fontFamily },\n ]}\n >\n {data.body}\n </Text>\n {source ? (\n <Text\n style={[\n styles.source,\n { color: t.sourceColor, fontFamily },\n ]}\n >\n {source}\n </Text>\n ) : null}\n </View>\n </LinearGradient>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n outer: {\n width: \"100%\",\n maxWidth: 560,\n },\n card: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 14,\n padding: 18,\n borderWidth: 1,\n },\n avatar: {\n width: 36,\n height: 36,\n borderRadius: 18,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n body: {\n flex: 1,\n gap: 6,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n },\n title: {\n fontSize: 17,\n fontWeight: \"700\",\n lineHeight: 23,\n },\n bodyText: {\n fontSize: 15,\n lineHeight: 22,\n },\n source: {\n marginTop: 6,\n fontSize: 13,\n lineHeight: 18,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { PublicHealthNoticeTone } from \"./payload\";\n\n/** Theme overrides for `AbPublicHealthNotice`. */\nexport interface PublicHealthNoticeTheme extends Partial<BaseTheme> {\n // Per-tone background gradient\n infoGradientStart?: string;\n infoGradientEnd?: string;\n warningGradientStart?: string;\n warningGradientEnd?: string;\n successGradientStart?: string;\n successGradientEnd?: string;\n dangerGradientStart?: string;\n dangerGradientEnd?: string;\n // Per-tone border colour\n infoBorderColor?: string;\n warningBorderColor?: string;\n successBorderColor?: string;\n dangerBorderColor?: string;\n // Per-tone icon avatar bg + icon colour\n infoAvatarBackgroundColor?: string;\n infoAvatarIconColor?: string;\n warningAvatarBackgroundColor?: string;\n warningAvatarIconColor?: string;\n successAvatarBackgroundColor?: string;\n successAvatarIconColor?: string;\n dangerAvatarBackgroundColor?: string;\n dangerAvatarIconColor?: string;\n // Per-tone eyebrow colour\n infoEyebrowColor?: string;\n warningEyebrowColor?: string;\n successEyebrowColor?: string;\n dangerEyebrowColor?: string;\n // Title + body + source\n titleColor?: string;\n bodyColor?: string;\n sourceColor?: string;\n // Radii\n cardRadius?: Radius;\n}\n\nexport interface ResolvedToneVisual {\n gradient: [string, string];\n border: string;\n avatarBackground: string;\n avatarIconColor: string;\n eyebrowColor: string;\n}\n\nexport interface ResolvedPublicHealthNoticeTheme {\n base: BaseTheme;\n tones: Record<PublicHealthNoticeTone, ResolvedToneVisual>;\n titleColor: string;\n bodyColor: string;\n sourceColor: string;\n cardRadiusPx: number;\n}\n\nexport function resolvePublicHealthNoticeTheme(\n theme?: PublicHealthNoticeTheme,\n): ResolvedPublicHealthNoticeTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n tones: {\n info: {\n gradient: [\n theme?.infoGradientStart ?? \"#EDE9FE\",\n theme?.infoGradientEnd ?? \"#DBEAFE\",\n ],\n border:\n theme?.infoBorderColor ?? \"rgba(59, 130, 246, 0.18)\",\n avatarBackground:\n theme?.infoAvatarBackgroundColor ?? \"#FFFFFF\",\n avatarIconColor: theme?.infoAvatarIconColor ?? \"#2563EB\",\n eyebrowColor: theme?.infoEyebrowColor ?? \"#2563EB\",\n },\n warning: {\n gradient: [\n theme?.warningGradientStart ?? \"#FEF3C7\",\n theme?.warningGradientEnd ?? \"#FED7AA\",\n ],\n border:\n theme?.warningBorderColor ?? \"rgba(245, 158, 11, 0.30)\",\n avatarBackground:\n theme?.warningAvatarBackgroundColor ?? \"#FFFFFF\",\n avatarIconColor:\n theme?.warningAvatarIconColor ?? \"#D97706\",\n eyebrowColor:\n theme?.warningEyebrowColor ?? \"#B45309\",\n },\n success: {\n gradient: [\n theme?.successGradientStart ?? \"#D1FAE5\",\n theme?.successGradientEnd ?? \"#CCFBF1\",\n ],\n border:\n theme?.successBorderColor ?? \"rgba(16, 185, 129, 0.30)\",\n avatarBackground:\n theme?.successAvatarBackgroundColor ?? \"#FFFFFF\",\n avatarIconColor:\n theme?.successAvatarIconColor ?? \"#059669\",\n eyebrowColor:\n theme?.successEyebrowColor ?? \"#047857\",\n },\n danger: {\n gradient: [\n theme?.dangerGradientStart ?? \"#FEE2E2\",\n theme?.dangerGradientEnd ?? \"#FECACA\",\n ],\n border:\n theme?.dangerBorderColor ?? \"rgba(239, 68, 68, 0.30)\",\n avatarBackground:\n theme?.dangerAvatarBackgroundColor ?? \"#FFFFFF\",\n avatarIconColor: theme?.dangerAvatarIconColor ?? \"#DC2626\",\n eyebrowColor: theme?.dangerEyebrowColor ?? \"#B91C1C\",\n },\n },\n titleColor: theme?.titleColor ?? base.textColor,\n bodyColor: theme?.bodyColor ?? base.textColor,\n sourceColor: theme?.sourceColor ?? base.mutedTextColor,\n cardRadiusPx: radiusToPx[cardRadius],\n };\n}\n","import React, { useMemo, useRef, useState } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveQuestFollowUpTheme } from \"./theme\";\nimport type { AbQuestFollowUpProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"QUEST FOLLOW-UP\";\nconst DEFAULT_EYEBROW_ICON = \"thermometer\";\nconst DEFAULT_ADDRESS_ICON = \"map-pin\";\nconst DEFAULT_DISTANCE_ICON = \"navigation\";\nconst DEFAULT_ORDER_ICON = \"file-text\";\nconst DEFAULT_ORDER_ID_LABEL = \"Order ID\";\nconst DEFAULT_SLOTS_LABEL = \"AVAILABLE APPOINTMENTS\";\nconst DEFAULT_SLOT_ICON = \"calendar\";\nconst DEFAULT_CTA_ICON = \"calendar\";\nconst DEFAULT_BOOKED_ICON = \"check\";\nconst DEFAULT_BOOKED_LABEL = \"Mock appointment booked\";\n\nexport function AbQuestFollowUp({\n data,\n theme,\n style,\n selectedSlotId,\n onSelectedSlotChange,\n booked,\n onBookedChange,\n onBook,\n}: AbQuestFollowUpProps) {\n const t = useMemo(() => resolveQuestFollowUpTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIcon = data.eyebrowIconName ?? DEFAULT_EYEBROW_ICON;\n const addressIcon = data.addressIconName ?? DEFAULT_ADDRESS_ICON;\n const distanceIcon = data.distanceIconName ?? DEFAULT_DISTANCE_ICON;\n const orderIcon = data.order.iconName ?? DEFAULT_ORDER_ICON;\n const orderIdLabel = data.order.orderIdLabel ?? DEFAULT_ORDER_ID_LABEL;\n const slotsLabel = data.slotsLabel ?? DEFAULT_SLOTS_LABEL;\n const ctaLabel = data.cta?.label ?? \"Book appointment\";\n const ctaIcon = data.cta?.iconName ?? DEFAULT_CTA_ICON;\n const bookedLabel = data.cta?.bookedLabel ?? DEFAULT_BOOKED_LABEL;\n const bookedIcon = data.cta?.bookedIconName ?? DEFAULT_BOOKED_ICON;\n\n const [internalSelected, setInternalSelected] = useState<string | null>(\n null,\n );\n const activeSelected =\n selectedSlotId !== undefined ? selectedSlotId : internalSelected;\n const [internalBooked, setInternalBooked] = useState<boolean>(false);\n const activeBooked = booked !== undefined ? booked : internalBooked;\n\n // One-shot latch: even with controlled async `booked` updates,\n // tapping the CTA repeatedly fires `onBook` at most once per mount.\n const bookedFiredRef = useRef<boolean>(false);\n\n const handleSelect = (slotId: string) => {\n if (activeBooked) return;\n const next = activeSelected === slotId ? null : slotId;\n if (selectedSlotId === undefined) setInternalSelected(next);\n onSelectedSlotChange?.(next);\n };\n\n const handleBook = () => {\n if (activeBooked || bookedFiredRef.current) return;\n if (!activeSelected) return;\n const slot = data.slots.find((s) => s.id === activeSelected);\n if (!slot) return;\n bookedFiredRef.current = true;\n if (booked === undefined) setInternalBooked(true);\n onBookedChange?.(true);\n onBook?.(slot);\n };\n\n const ctaEnabled = !!activeSelected && !activeBooked;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <LinearGradient\n colors={t.accentBarColors as unknown as [string, string, string]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.accentBar,\n {\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.eyebrowRow}>\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.siteName}\n </Text>\n\n <View style={styles.metaRow}>\n <Feather\n name={addressIcon as never}\n size={16}\n color={t.addressIconColor}\n style={styles.metaIcon}\n />\n <Text\n style={[\n styles.metaText,\n { color: t.addressColor, fontFamily },\n ]}\n >\n {data.address}\n </Text>\n </View>\n\n {data.distance ? (\n <View style={styles.metaRow}>\n <Feather\n name={distanceIcon as never}\n size={16}\n color={t.distanceIconColor}\n style={styles.metaIcon}\n />\n <Text\n style={[\n styles.metaText,\n { color: t.distanceColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.distance}\n </Text>\n </View>\n ) : null}\n\n <View\n style={[\n styles.orderPanel,\n {\n backgroundColor: t.orderBackgroundColor,\n borderRadius: t.orderRadiusPx,\n },\n ]}\n >\n <Feather\n name={orderIcon as never}\n size={16}\n color={t.orderIconColor}\n style={styles.orderIcon}\n />\n <View style={styles.orderText}>\n <Text\n style={[\n styles.orderTitle,\n { color: t.orderTitleColor, fontFamily },\n ]}\n >\n {data.order.panelName}\n </Text>\n <Text\n style={[\n styles.orderIdLine,\n { fontFamily: t.monoFontFamily },\n ]}\n numberOfLines={1}\n >\n <Text style={{ color: t.orderIdLabelColor }}>\n {orderIdLabel}:{\" \"}\n </Text>\n <Text style={{ color: t.orderIdValueColor }}>\n {data.order.orderId}\n </Text>\n </Text>\n </View>\n </View>\n\n <Text\n style={[\n styles.sectionLabel,\n { color: t.sectionLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {slotsLabel}\n </Text>\n\n {data.slots.length > 0 ? (\n <View style={styles.slotsGrid}>\n {data.slots.map((slot) => {\n const isSelected = activeSelected === slot.id;\n const isDisabled = !!slot.disabled || activeBooked;\n const bg = isDisabled\n ? t.slotDisabledBackgroundColor\n : isSelected\n ? t.slotSelectedBackgroundColor\n : t.slotBackgroundColor;\n const fg = isDisabled\n ? t.slotDisabledForegroundColor\n : isSelected\n ? t.slotSelectedForegroundColor\n : t.slotForegroundColor;\n const slotIcon = slot.iconName ?? DEFAULT_SLOT_ICON;\n return (\n <Pressable\n key={slot.id}\n accessibilityRole=\"button\"\n accessibilityState={{\n selected: isSelected,\n disabled: isDisabled,\n }}\n disabled={isDisabled}\n onPress={() => handleSelect(slot.id)}\n style={({ pressed }) => [\n styles.slot,\n {\n backgroundColor: bg,\n borderRadius: t.slotRadiusPx,\n opacity: pressed && !isDisabled ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={slotIcon as never}\n size={14}\n color={fg}\n />\n <Text\n style={[\n styles.slotLabel,\n { color: fg, fontFamily },\n ]}\n numberOfLines={1}\n >\n {slot.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n ) : null}\n\n {activeBooked ? (\n <View\n style={[\n styles.bookedPill,\n {\n backgroundColor: t.bookedBackgroundColor,\n borderColor: t.bookedBorderColor,\n borderRadius: t.ctaRadiusPx,\n },\n ]}\n >\n <Feather\n name={bookedIcon as never}\n size={16}\n color={t.bookedIconColor}\n />\n <Text\n style={[\n styles.bookedLabel,\n { color: t.bookedForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {bookedLabel}\n </Text>\n </View>\n ) : (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ disabled: !ctaEnabled }}\n disabled={!ctaEnabled}\n onPress={handleBook}\n style={({ pressed }) => [\n styles.cta,\n {\n backgroundColor: ctaEnabled\n ? t.ctaBackgroundColor\n : t.ctaDisabledBackgroundColor,\n borderRadius: t.ctaRadiusPx,\n opacity: pressed && ctaEnabled ? 0.9 : 1,\n },\n ]}\n >\n <Feather\n name={ctaIcon as never}\n size={16}\n color={\n ctaEnabled\n ? t.ctaIconColor\n : t.ctaDisabledForegroundColor\n }\n />\n <Text\n style={[\n styles.ctaLabel,\n {\n color: ctaEnabled\n ? t.ctaForegroundColor\n : t.ctaDisabledForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {ctaLabel}\n </Text>\n </Pressable>\n )}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 560,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 10,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n },\n title: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n marginTop: 4,\n },\n metaRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 8,\n },\n metaIcon: {\n marginTop: 2,\n },\n metaText: {\n fontSize: 14,\n lineHeight: 20,\n flexShrink: 1,\n },\n orderPanel: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n paddingHorizontal: 12,\n paddingVertical: 12,\n marginTop: 6,\n },\n orderIcon: {\n marginTop: 2,\n },\n orderText: {\n flex: 1,\n gap: 4,\n },\n orderTitle: {\n fontSize: 14,\n fontWeight: \"600\",\n lineHeight: 20,\n },\n orderIdLine: {\n fontSize: 12,\n lineHeight: 16,\n },\n sectionLabel: {\n marginTop: 8,\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n slotsGrid: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n rowGap: 10,\n columnGap: 10,\n },\n slot: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n paddingHorizontal: 14,\n paddingVertical: 10,\n },\n slotLabel: {\n fontSize: 13,\n fontWeight: \"600\",\n },\n cta: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 10,\n paddingHorizontal: 18,\n paddingVertical: 14,\n marginTop: 6,\n },\n ctaLabel: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n bookedPill: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 18,\n paddingVertical: 14,\n marginTop: 6,\n borderWidth: 1,\n },\n bookedLabel: {\n fontSize: 14,\n fontWeight: \"700\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbQuestFollowUp`. */\nexport interface QuestFollowUpTheme extends Partial<BaseTheme> {\n // Top accent bar (gradient)\n accentBarStartColor?: string;\n accentBarMidColor?: string;\n accentBarEndColor?: string;\n // Eyebrow / icons\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n // Title + meta\n titleColor?: string;\n addressColor?: string;\n addressIconColor?: string;\n distanceColor?: string;\n distanceIconColor?: string;\n // Order panel\n orderBackgroundColor?: string;\n orderTitleColor?: string;\n orderIdLabelColor?: string;\n orderIdValueColor?: string;\n orderIconColor?: string;\n monoFontFamily?: string;\n // Slots section\n sectionLabelColor?: string;\n slotBackgroundColor?: string;\n slotForegroundColor?: string;\n slotIconColor?: string;\n slotSelectedBackgroundColor?: string;\n slotSelectedForegroundColor?: string;\n slotDisabledBackgroundColor?: string;\n slotDisabledForegroundColor?: string;\n // CTA\n ctaBackgroundColor?: string;\n ctaForegroundColor?: string;\n ctaIconColor?: string;\n ctaDisabledBackgroundColor?: string;\n ctaDisabledForegroundColor?: string;\n // Booked confirmation pill\n bookedBackgroundColor?: string;\n bookedBorderColor?: string;\n bookedForegroundColor?: string;\n bookedIconColor?: string;\n // Radii\n cardRadius?: Radius;\n orderRadius?: Radius;\n slotRadius?: Radius;\n ctaRadius?: Radius;\n}\n\nexport interface ResolvedQuestFollowUpTheme {\n base: BaseTheme;\n accentBarColors: readonly [string, string, string];\n eyebrowColor: string;\n eyebrowIconColor: string;\n titleColor: string;\n addressColor: string;\n addressIconColor: string;\n distanceColor: string;\n distanceIconColor: string;\n orderBackgroundColor: string;\n orderTitleColor: string;\n orderIdLabelColor: string;\n orderIdValueColor: string;\n orderIconColor: string;\n monoFontFamily: string;\n sectionLabelColor: string;\n slotBackgroundColor: string;\n slotForegroundColor: string;\n slotIconColor: string;\n slotSelectedBackgroundColor: string;\n slotSelectedForegroundColor: string;\n slotDisabledBackgroundColor: string;\n slotDisabledForegroundColor: string;\n ctaBackgroundColor: string;\n ctaForegroundColor: string;\n ctaIconColor: string;\n ctaDisabledBackgroundColor: string;\n ctaDisabledForegroundColor: string;\n bookedBackgroundColor: string;\n bookedBorderColor: string;\n bookedForegroundColor: string;\n bookedIconColor: string;\n cardRadiusPx: number;\n orderRadiusPx: number;\n slotRadiusPx: number;\n ctaRadiusPx: number;\n}\n\nconst MONO_FALLBACK =\n \"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace\";\n\nexport function resolveQuestFollowUpTheme(\n theme?: QuestFollowUpTheme,\n): ResolvedQuestFollowUpTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const orderRadius: Radius = theme?.orderRadius ?? base.radius ?? \"md\";\n const slotRadius: Radius = theme?.slotRadius ?? \"full\";\n const ctaRadius: Radius = theme?.ctaRadius ?? \"full\";\n\n const blueAccent = \"#2563EB\";\n const slotIdleBg = \"#F1F5F9\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n accentBarColors: [\n theme?.accentBarStartColor ?? \"#F472B6\",\n theme?.accentBarMidColor ?? \"#F59E0B\",\n theme?.accentBarEndColor ?? \"#3B82F6\",\n ] as const,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n titleColor: theme?.titleColor ?? base.textColor,\n addressColor: theme?.addressColor ?? base.mutedTextColor,\n addressIconColor:\n theme?.addressIconColor ?? base.mutedTextColor,\n distanceColor: theme?.distanceColor ?? base.mutedTextColor,\n distanceIconColor:\n theme?.distanceIconColor ?? base.mutedTextColor,\n orderBackgroundColor:\n theme?.orderBackgroundColor ?? \"#F1F5F9\",\n orderTitleColor: theme?.orderTitleColor ?? base.textColor,\n orderIdLabelColor:\n theme?.orderIdLabelColor ?? base.mutedTextColor,\n orderIdValueColor:\n theme?.orderIdValueColor ?? base.textColor,\n orderIconColor: theme?.orderIconColor ?? base.mutedTextColor,\n monoFontFamily: theme?.monoFontFamily ?? MONO_FALLBACK,\n sectionLabelColor:\n theme?.sectionLabelColor ?? base.mutedTextColor,\n slotBackgroundColor: theme?.slotBackgroundColor ?? slotIdleBg,\n slotForegroundColor:\n theme?.slotForegroundColor ?? base.textColor,\n slotIconColor: theme?.slotIconColor ?? base.textColor,\n slotSelectedBackgroundColor:\n theme?.slotSelectedBackgroundColor ?? blueAccent,\n slotSelectedForegroundColor:\n theme?.slotSelectedForegroundColor ?? \"#FFFFFF\",\n slotDisabledBackgroundColor:\n theme?.slotDisabledBackgroundColor ?? \"#F8FAFC\",\n slotDisabledForegroundColor:\n theme?.slotDisabledForegroundColor ?? \"#94A3B8\",\n ctaBackgroundColor: theme?.ctaBackgroundColor ?? blueAccent,\n ctaForegroundColor: theme?.ctaForegroundColor ?? \"#FFFFFF\",\n ctaIconColor: theme?.ctaIconColor ?? \"#FFFFFF\",\n ctaDisabledBackgroundColor:\n theme?.ctaDisabledBackgroundColor ?? \"#93C5FD\",\n ctaDisabledForegroundColor:\n theme?.ctaDisabledForegroundColor ?? \"#FFFFFF\",\n bookedBackgroundColor:\n theme?.bookedBackgroundColor ?? \"#ECFDF5\",\n bookedBorderColor:\n theme?.bookedBorderColor ?? \"#A7F3D0\",\n bookedForegroundColor:\n theme?.bookedForegroundColor ?? \"#16A34A\",\n bookedIconColor: theme?.bookedIconColor ?? \"#16A34A\",\n cardRadiusPx: radiusToPx[cardRadius],\n orderRadiusPx: radiusToPx[orderRadius],\n slotRadiusPx: radiusToPx[slotRadius],\n ctaRadiusPx: radiusToPx[ctaRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, StyleSheet, Text, View } from \"react-native\";\nimport {\n Feather,\n Ionicons,\n MaterialCommunityIcons,\n} from \"@expo/vector-icons\";\n\nimport { resolveRecommendedCarePathTheme } from \"./theme\";\nimport type { CarePathUrgency } from \"./payload\";\nimport type {\n AbRecommendedCarePathProps,\n ResolvedRecommendedCarePathTheme,\n} from \"./types\";\n\nconst URGENCY_LABEL: Record<CarePathUrgency, string> = {\n routine: \"Routine\",\n urgent: \"Urgent\",\n emergent: \"Emergent\",\n};\n\nexport function AbRecommendedCarePath({\n data,\n theme,\n style,\n}: AbRecommendedCarePathProps) {\n const t = useMemo(\n () => resolveRecommendedCarePathTheme(theme),\n [theme],\n );\n const badge = t.urgencyBadges[data.urgency];\n const fontFamily = t.base.fontFamily;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View\n style={[\n styles.accentBar,\n {\n backgroundColor: t.accentBarColor,\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View style={styles.titleGroup}>\n <MaterialCommunityIcons\n name=\"stethoscope\"\n size={18}\n color={t.base.mutedTextColor}\n />\n <View\n style={[\n styles.eyebrowHighlight,\n { backgroundColor: t.eyebrowHighlightColor },\n ]}\n >\n <Text\n style={[\n styles.eyebrow,\n { color: t.base.mutedTextColor, fontFamily },\n ]}\n >\n RECOMMENDED CARE PATH\n </Text>\n </View>\n </View>\n\n <UrgencyBadge\n label={data.urgencyLabel ?? URGENCY_LABEL[data.urgency]}\n backgroundColor={badge.backgroundColor}\n foregroundColor={badge.foregroundColor}\n fontFamily={fontFamily}\n />\n </View>\n\n <Text\n style={[\n styles.headline,\n { color: t.base.textColor, fontFamily },\n ]}\n >\n {data.facilityName}\n </Text>\n\n <View style={styles.instructionRow}>\n <Feather\n name=\"arrow-right\"\n size={20}\n color={t.arrowColor}\n style={styles.arrow}\n />\n <Text\n style={[\n styles.instruction,\n { color: t.instructionColor, fontFamily },\n ]}\n >\n {data.instruction}\n </Text>\n </View>\n\n <ReasonsPanel data={data} theme={t} />\n </View>\n </View>\n );\n}\n\nfunction UrgencyBadge({\n label,\n backgroundColor,\n foregroundColor,\n fontFamily,\n}: {\n label: string;\n backgroundColor: string;\n foregroundColor: string;\n fontFamily: string;\n}) {\n return (\n <View style={[styles.badge, { backgroundColor }]}>\n <View style={[styles.badgeDot, { backgroundColor: foregroundColor }]} />\n <Text\n style={[\n styles.badgeLabel,\n { color: foregroundColor, fontFamily },\n ]}\n >\n {label}\n </Text>\n </View>\n );\n}\n\nfunction ReasonsPanel({\n data,\n theme: t,\n}: {\n data: AbRecommendedCarePathProps[\"data\"];\n theme: ResolvedRecommendedCarePathTheme;\n}) {\n return (\n <View\n style={[\n styles.reasons,\n {\n backgroundColor: t.reasonsBackgroundColor,\n borderColor: t.reasonsBorderColor,\n },\n ]}\n >\n <View style={styles.reasonsHeader}>\n <Ionicons\n name=\"sparkles\"\n size={16}\n color={t.reasonsAccentColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.reasonsAccentColor, fontFamily: t.base.fontFamily },\n ]}\n >\n RECOMMENDED BECAUSE\n </Text>\n </View>\n\n <View style={styles.reasonList}>\n {data.reasons.map((reason, idx) => (\n <View key={`${reason}-${idx}`} style={styles.reasonItem}>\n <Feather\n name=\"check\"\n size={18}\n color={t.reasonsCheckmarkColor}\n style={styles.checkmark}\n />\n <Text\n style={[\n styles.reasonText,\n {\n color: t.reasonsTextColor,\n fontFamily: t.base.fontFamily,\n },\n ]}\n >\n {reason}\n </Text>\n </View>\n ))}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 520,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 20,\n gap: 14,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n },\n titleGroup: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrowHighlight: {\n paddingHorizontal: 6,\n paddingVertical: 2,\n borderRadius: 4,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n headline: {\n fontSize: 22,\n fontWeight: \"700\",\n lineHeight: 28,\n },\n instructionRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n },\n arrow: {\n marginTop: 2,\n },\n instruction: {\n flex: 1,\n fontSize: 15,\n lineHeight: 22,\n fontWeight: \"400\",\n },\n badge: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 9999,\n },\n badgeDot: {\n width: 6,\n height: 6,\n borderRadius: 3,\n },\n badgeLabel: {\n fontSize: 13,\n fontWeight: \"600\",\n },\n reasons: {\n borderWidth: 1,\n borderRadius: 12,\n padding: 14,\n gap: 10,\n marginTop: 4,\n },\n reasonsHeader: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n reasonList: {\n gap: 8,\n },\n reasonItem: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n },\n checkmark: {\n marginTop: 1,\n },\n reasonText: {\n flex: 1,\n fontSize: 15,\n lineHeight: 22,\n fontWeight: \"500\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { CarePathUrgency } from \"./payload\";\n\n/** Badge color pair (background + foreground/text). */\nexport interface BadgeSkin {\n backgroundColor: string;\n foregroundColor: string;\n}\n\n/**\n * Theme overrides for `AbRecommendedCarePath`.\n *\n * Extends `Partial<BaseTheme>` so callers can pass `tone`, `mode`, etc. and\n * get the shared cascading behavior, then layers component-specific keys for\n * the urgency badge palette, the eyebrow highlight, the action arrow, and\n * the \"Recommended because\" inset panel.\n */\nexport interface RecommendedCarePathTheme extends Partial<BaseTheme> {\n /** Color of the thin accent bar across the top of the card. */\n accentBarColor?: string;\n /** Per-urgency badge colors. Merged on top of defaults. */\n urgencyBadges?: Partial<Record<CarePathUrgency, Partial<BadgeSkin>>>;\n /** Background color of the highlight behind \"RECOMMENDED CARE PATH\". */\n eyebrowHighlightColor?: string;\n /** Color of the arrow icon next to the instruction. */\n arrowColor?: string;\n /** Color of the instruction body text (gray by default). */\n instructionColor?: string;\n /** Background color of the \"Recommended because\" inset panel. */\n reasonsBackgroundColor?: string;\n /** Border color of the \"Recommended because\" inset panel. */\n reasonsBorderColor?: string;\n /** Color of the \"RECOMMENDED BECAUSE\" eyebrow text + sparkles icon. */\n reasonsAccentColor?: string;\n /** Color of the checkmark next to each reason. */\n reasonsCheckmarkColor?: string;\n /** Color of the reason body text. */\n reasonsTextColor?: string;\n /** Card corner radius token. Defaults to \"lg\". */\n cardRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the card internals. */\nexport interface ResolvedRecommendedCarePathTheme {\n base: BaseTheme;\n accentBarColor: string;\n urgencyBadges: Record<CarePathUrgency, BadgeSkin>;\n eyebrowHighlightColor: string;\n arrowColor: string;\n instructionColor: string;\n reasonsBackgroundColor: string;\n reasonsBorderColor: string;\n reasonsAccentColor: string;\n reasonsCheckmarkColor: string;\n reasonsTextColor: string;\n cardRadiusPx: number;\n}\n\nconst defaultUrgencyBadges: Record<CarePathUrgency, BadgeSkin> = {\n routine: { backgroundColor: \"#E8F1FE\", foregroundColor: \"#2F5DFF\" },\n urgent: { backgroundColor: \"#FDEBD0\", foregroundColor: \"#B45309\" },\n emergent: { backgroundColor: \"#FEE2E2\", foregroundColor: \"#B91C1C\" },\n};\n\nexport function resolveRecommendedCarePathTheme(\n theme?: RecommendedCarePathTheme,\n): ResolvedRecommendedCarePathTheme {\n const base = resolveBaseTheme(theme);\n const cardRadius: Radius = theme?.cardRadius ?? \"lg\";\n\n const overrides = theme?.urgencyBadges ?? {};\n const urgencyBadges: Record<CarePathUrgency, BadgeSkin> = {\n routine: { ...defaultUrgencyBadges.routine, ...(overrides.routine ?? {}) },\n urgent: { ...defaultUrgencyBadges.urgent, ...(overrides.urgent ?? {}) },\n emergent: {\n ...defaultUrgencyBadges.emergent,\n ...(overrides.emergent ?? {}),\n },\n };\n\n // Cascade: explicit theme override -> shared BaseTheme token -> literal fallback.\n // This makes `tone` flow through accent-like surfaces without per-key overrides.\n return {\n base,\n accentBarColor: theme?.accentBarColor ?? base.accentColor,\n urgencyBadges,\n eyebrowHighlightColor:\n theme?.eyebrowHighlightColor ?? base.iconBackgroundColor,\n arrowColor: theme?.arrowColor ?? base.accentColor,\n instructionColor: theme?.instructionColor ?? base.mutedTextColor,\n reasonsBackgroundColor:\n theme?.reasonsBackgroundColor ?? base.iconBackgroundColor,\n reasonsBorderColor: theme?.reasonsBorderColor ?? base.borderColor,\n reasonsAccentColor: theme?.reasonsAccentColor ?? base.accentColor,\n reasonsCheckmarkColor:\n theme?.reasonsCheckmarkColor ?? base.accentColor,\n reasonsTextColor: theme?.reasonsTextColor ?? base.textColor,\n cardRadiusPx: radiusToPx[cardRadius],\n };\n}\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport { Platform, Pressable, StyleSheet, Text, View } from \"react-native\";\nimport {\n Feather,\n Ionicons,\n MaterialCommunityIcons,\n MaterialIcons,\n} from \"@expo/vector-icons\";\n\nimport { resolveRecommendedCarePlanTheme } from \"./theme\";\nimport type {\n CarePlanDisclosure,\n CarePlanIconFamily,\n CarePlanMetric,\n CarePlanUrgencyTone,\n} from \"./payload\";\nimport type {\n AbRecommendedCarePlanProps,\n ResolvedRecommendedCarePlanTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"RECOMMENDED CARE PLAN\";\n\nconst URGENCY_LABEL: Record<CarePlanUrgencyTone, string> = {\n \"same-day\": \"Same day\",\n \"this-week\": \"This week\",\n scheduled: \"Scheduled\",\n};\n\ninterface IconSpec {\n family: CarePlanIconFamily;\n name: string;\n}\n\nconst KIND_ICON: Record<\"cost\" | \"time\", IconSpec> = {\n cost: { family: \"Feather\", name: \"credit-card\" },\n time: { family: \"Feather\", name: \"clock\" },\n};\n\nfunction renderIcon(\n family: CarePlanIconFamily,\n name: string,\n size: number,\n color: string,\n) {\n switch (family) {\n case \"Feather\":\n return <Feather name={name as never} size={size} color={color} />;\n case \"Ionicons\":\n return <Ionicons name={name as never} size={size} color={color} />;\n case \"MaterialIcons\":\n return <MaterialIcons name={name as never} size={size} color={color} />;\n case \"MaterialCommunityIcons\":\n default:\n return (\n <MaterialCommunityIcons\n name={name as never}\n size={size}\n color={color}\n />\n );\n }\n}\n\nexport function AbRecommendedCarePlan({\n data,\n theme,\n onPrimaryAction,\n onToggleDisclosure,\n style,\n}: AbRecommendedCarePlanProps) {\n const t = useMemo(\n () => resolveRecommendedCarePlanTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const urgencyLabel =\n data.urgencyLabel ?? URGENCY_LABEL[data.urgency];\n const urgencyBadge = t.urgencyBadges[data.urgency];\n\n const [expandedId, setExpandedId] = useState<string | null>(null);\n\n const handleToggle = useCallback(\n (disclosure: CarePlanDisclosure) => {\n const willExpand = expandedId !== disclosure.id;\n setExpandedId(willExpand ? disclosure.id : null);\n onToggleDisclosure?.(disclosure, willExpand);\n },\n [expandedId, onToggleDisclosure],\n );\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View\n style={[\n styles.accentBar,\n {\n backgroundColor: t.accentBarColor,\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.eyebrowRow}>\n <View style={styles.eyebrowGroup}>\n <Ionicons\n name=\"sparkles\"\n size={16}\n color={t.base.mutedTextColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.base.mutedTextColor, fontFamily },\n ]}\n >\n {eyebrow}\n </Text>\n </View>\n <UrgencyPill\n label={urgencyLabel}\n backgroundColor={urgencyBadge.backgroundColor}\n foregroundColor={urgencyBadge.foregroundColor}\n fontFamily={fontFamily}\n />\n </View>\n\n {data.coordinatedBy ? (\n <View\n style={[\n styles.coordinatedChip,\n { backgroundColor: t.coordinatedChipBackgroundColor },\n ]}\n >\n <View\n style={[\n styles.coordinatedDot,\n { backgroundColor: t.coordinatedChipDotColor },\n ]}\n />\n <Text\n style={[\n styles.coordinatedText,\n { color: t.coordinatedChipForegroundColor, fontFamily },\n ]}\n >\n {data.coordinatedBy}\n </Text>\n </View>\n ) : null}\n\n <View style={styles.headlineRow}>\n <MaterialCommunityIcons\n name=\"stethoscope\"\n size={22}\n color={t.headlineIconColor}\n />\n <Text\n style={[\n styles.headline,\n { color: t.base.textColor, fontFamily },\n ]}\n >\n {data.headline}\n </Text>\n </View>\n\n <Text\n style={[\n styles.bodyText,\n { color: t.bodyTextColor, fontFamily },\n ]}\n >\n {data.body}\n </Text>\n\n {data.metrics.length > 0 ? (\n <View style={styles.metricsRow}>\n {data.metrics.map((metric) => (\n <MetricTile key={metric.id} metric={metric} theme={t} />\n ))}\n </View>\n ) : null}\n\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={data.primaryAction.label}\n onPress={onPrimaryAction}\n style={({ pressed }) => [\n styles.primaryButton,\n {\n backgroundColor: t.primaryButtonBackgroundColor,\n borderRadius: t.primaryButtonRadiusPx,\n opacity: pressed ? 0.9 : 1,\n },\n ]}\n >\n <Text\n style={[\n styles.primaryButtonLabel,\n { color: t.primaryButtonForegroundColor, fontFamily },\n ]}\n >\n {data.primaryAction.label}\n </Text>\n <Feather\n name=\"arrow-right\"\n size={20}\n color={t.primaryButtonForegroundColor}\n />\n </Pressable>\n\n {data.steps.length > 0 ? (\n <View style={styles.stepsList}>\n {data.steps.map((step, idx) => (\n <View key={`${step}-${idx}`} style={styles.stepRow}>\n <View\n style={[\n styles.stepNumber,\n { backgroundColor: t.stepNumberBackgroundColor },\n ]}\n >\n <Text\n style={[\n styles.stepNumberText,\n {\n color: t.stepNumberForegroundColor,\n fontFamily,\n },\n ]}\n >\n {idx + 1}\n </Text>\n </View>\n <Text\n style={[\n styles.stepText,\n { color: t.stepTextColor, fontFamily },\n ]}\n >\n {step}\n </Text>\n </View>\n ))}\n </View>\n ) : null}\n\n {data.disclosures && data.disclosures.length > 0 ? (\n <View style={styles.disclosureGroup}>\n {data.disclosures.map((disclosure, idx) => (\n <DisclosureRow\n key={disclosure.id}\n disclosure={disclosure}\n expanded={expandedId === disclosure.id}\n onToggle={handleToggle}\n theme={t}\n showTopDivider={idx === 0}\n />\n ))}\n </View>\n ) : null}\n </View>\n </View>\n );\n}\n\nfunction UrgencyPill({\n label,\n backgroundColor,\n foregroundColor,\n fontFamily,\n}: {\n label: string;\n backgroundColor: string;\n foregroundColor: string;\n fontFamily: string;\n}) {\n return (\n <View style={[styles.urgencyPill, { backgroundColor }]}>\n <View style={[styles.urgencyDot, { backgroundColor: foregroundColor }]} />\n <Text\n style={[\n styles.urgencyLabel,\n { color: foregroundColor, fontFamily },\n ]}\n >\n {label}\n </Text>\n </View>\n );\n}\n\nfunction MetricTile({\n metric,\n theme: t,\n}: {\n metric: CarePlanMetric;\n theme: ResolvedRecommendedCarePlanTheme;\n}) {\n const fontFamily = t.base.fontFamily;\n const kind = metric.kind ?? \"custom\";\n\n let iconSpec: IconSpec | undefined;\n if (metric.iconName && metric.iconFamily) {\n iconSpec = { family: metric.iconFamily, name: metric.iconName };\n } else if (kind === \"cost\" || kind === \"time\") {\n iconSpec = KIND_ICON[kind];\n }\n\n return (\n <View style={styles.metric}>\n <View style={styles.metricHeader}>\n {iconSpec\n ? renderIcon(iconSpec.family, iconSpec.name, 16, t.metricIconColor)\n : null}\n <Text\n style={[\n styles.metricLabel,\n { color: t.metricEyebrowColor, fontFamily },\n ]}\n >\n {metric.label}\n </Text>\n </View>\n <Text\n style={[\n styles.metricValue,\n { color: t.metricValueColor, fontFamily },\n ]}\n >\n {metric.value}\n </Text>\n {metric.caption ? (\n <Text\n style={[\n styles.metricCaption,\n { color: t.metricCaptionColor, fontFamily },\n ]}\n >\n {metric.caption}\n </Text>\n ) : null}\n </View>\n );\n}\n\nfunction DisclosureRow({\n disclosure,\n expanded,\n onToggle,\n theme: t,\n showTopDivider,\n}: {\n disclosure: CarePlanDisclosure;\n expanded: boolean;\n onToggle: (disclosure: CarePlanDisclosure) => void;\n theme: ResolvedRecommendedCarePlanTheme;\n showTopDivider: boolean;\n}) {\n const fontFamily = t.base.fontFamily;\n const labelColor = disclosure.emphasized\n ? t.disclosureEmphasizedColor\n : t.disclosureMutedColor;\n\n return (\n <View>\n {showTopDivider ? (\n <View\n style={[\n styles.disclosureDivider,\n { backgroundColor: t.disclosureDividerColor },\n ]}\n />\n ) : null}\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={disclosure.label}\n accessibilityState={{ expanded }}\n onPress={() => onToggle(disclosure)}\n style={({ pressed }) => [\n styles.disclosureRow,\n { opacity: pressed ? 0.7 : 1 },\n ]}\n >\n <Text\n style={[\n styles.disclosureLabel,\n {\n color: labelColor,\n fontFamily,\n fontWeight: disclosure.emphasized ? \"600\" : \"500\",\n },\n ]}\n >\n {disclosure.label}\n </Text>\n <Feather\n name={expanded ? \"chevron-up\" : \"chevron-down\"}\n size={20}\n color={t.disclosureChevronColor}\n />\n </Pressable>\n {expanded ? (\n <View style={styles.disclosureContent}>\n {disclosure.callout ? (\n <View style={styles.calloutCard}>\n <View style={styles.calloutHeader}>\n <Feather\n name={(disclosure.callout.iconName ?? \"zap\") as never}\n size={14}\n color={t.disclosureEmphasizedColor}\n />\n <Text\n style={[\n styles.calloutLabel,\n { color: t.disclosureEmphasizedColor, fontFamily },\n ]}\n >\n {disclosure.callout.label}\n </Text>\n </View>\n <View style={styles.calloutBullets}>\n {disclosure.callout.bullets.map((b, i) => (\n <View key={i} style={styles.calloutBulletRow}>\n <Feather\n name=\"check\"\n size={14}\n color={t.base.textColor}\n style={styles.calloutBulletIcon}\n />\n <Text\n style={[\n styles.calloutBulletText,\n { color: t.base.textColor, fontFamily },\n ]}\n >\n {b}\n </Text>\n </View>\n ))}\n </View>\n </View>\n ) : null}\n\n {disclosure.body && !disclosure.callout && !disclosure.items ? (\n <Text\n style={[\n styles.disclosureBody,\n { color: t.disclosureBodyColor, fontFamily },\n ]}\n >\n {disclosure.body}\n </Text>\n ) : null}\n\n {disclosure.items && disclosure.items.length > 0 ? (\n <View style={styles.disclosureItems}>\n {disclosure.items.map((item) => (\n <View key={item.id} style={styles.disclosureItem}>\n <View style={styles.disclosureItemHeader}>\n <Text\n style={[\n styles.disclosureItemTitle,\n { color: t.base.textColor, fontFamily },\n ]}\n >\n {item.title}\n </Text>\n {item.trailing ? (\n <Text\n style={[\n styles.disclosureItemTrailing,\n { color: t.disclosureBodyColor, fontFamily },\n ]}\n >\n {item.trailing}\n </Text>\n ) : null}\n </View>\n {item.description ? (\n <Text\n style={[\n styles.disclosureItemDescription,\n { color: t.disclosureBodyColor, fontFamily },\n ]}\n >\n {item.description}\n </Text>\n ) : null}\n </View>\n ))}\n </View>\n ) : null}\n\n {disclosure.footerLink ? (\n <Text\n style={[\n styles.disclosureFooterLink,\n { color: t.base.textColor, fontFamily },\n ]}\n >\n {disclosure.footerLink.label}\n </Text>\n ) : null}\n </View>\n ) : null}\n <View\n style={[\n styles.disclosureDivider,\n { backgroundColor: t.disclosureDividerColor },\n ]}\n />\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 520,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 20,\n gap: 14,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n },\n eyebrowGroup: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n urgencyPill: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 9999,\n },\n urgencyDot: {\n width: 6,\n height: 6,\n borderRadius: 3,\n },\n urgencyLabel: {\n fontSize: 13,\n fontWeight: \"600\",\n },\n coordinatedChip: {\n alignSelf: \"flex-start\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 10,\n paddingVertical: 5,\n borderRadius: 9999,\n },\n coordinatedDot: {\n width: 6,\n height: 6,\n borderRadius: 3,\n },\n coordinatedText: {\n fontSize: 13,\n fontWeight: \"600\",\n },\n headlineRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n headline: {\n flex: 1,\n fontSize: 20,\n fontWeight: \"700\",\n lineHeight: 26,\n },\n bodyText: {\n fontSize: 15,\n lineHeight: 22,\n fontWeight: \"400\",\n },\n disclosureContent: {\n paddingBottom: 14,\n gap: 12,\n },\n calloutCard: {\n borderWidth: 1,\n borderColor: \"#BFDBFE\",\n backgroundColor: \"#F5F9FF\",\n borderRadius: 12,\n padding: 14,\n gap: 10,\n },\n calloutHeader: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n calloutLabel: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n calloutBullets: {\n gap: 8,\n },\n calloutBulletRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n },\n calloutBulletIcon: {\n marginTop: 3,\n },\n calloutBulletText: {\n flex: 1,\n fontSize: 14,\n lineHeight: 20,\n fontWeight: \"400\",\n },\n disclosureItems: {\n gap: 14,\n },\n disclosureItem: {\n gap: 4,\n },\n disclosureItemHeader: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: 12,\n },\n disclosureItemTitle: {\n flex: 1,\n fontSize: 15,\n fontWeight: \"700\",\n lineHeight: 20,\n },\n disclosureItemTrailing: {\n fontSize: 14,\n fontWeight: \"400\",\n },\n disclosureItemDescription: {\n fontSize: 14,\n lineHeight: 20,\n fontWeight: \"400\",\n },\n disclosureFooterLink: {\n marginTop: 4,\n fontSize: 14,\n lineHeight: 20,\n fontWeight: \"500\",\n textDecorationLine: \"underline\",\n },\n metricsRow: {\n flexDirection: \"row\",\n gap: 16,\n marginTop: 4,\n },\n metric: {\n flex: 1,\n gap: 4,\n },\n metricHeader: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n },\n metricLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1.1,\n textTransform: \"uppercase\",\n },\n metricValue: {\n fontSize: 16,\n fontWeight: \"700\",\n lineHeight: 22,\n },\n metricCaption: {\n fontSize: 13,\n fontWeight: \"400\",\n lineHeight: 18,\n },\n primaryButton: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 10,\n paddingVertical: 14,\n paddingHorizontal: 18,\n marginTop: 4,\n },\n primaryButtonLabel: {\n fontSize: 16,\n fontWeight: \"700\",\n },\n stepsList: {\n gap: 10,\n marginTop: 4,\n },\n stepRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n },\n stepNumber: {\n width: 24,\n height: 24,\n borderRadius: 12,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n stepNumberText: {\n fontSize: 12,\n fontWeight: \"700\",\n },\n stepText: {\n flex: 1,\n fontSize: 15,\n lineHeight: 22,\n },\n disclosureGroup: {\n marginTop: 6,\n },\n disclosureDivider: {\n height: StyleSheet.hairlineWidth,\n width: \"100%\",\n },\n disclosureRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n paddingVertical: 12,\n gap: 12,\n },\n disclosureLabel: {\n fontSize: 15,\n flexShrink: 1,\n },\n disclosureBody: {\n fontSize: 14,\n lineHeight: 20,\n paddingBottom: 12,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { CarePlanUrgencyTone } from \"./payload\";\n\n/** Background + foreground color pair (badges, chips, buttons). */\nexport interface ColorPair {\n backgroundColor: string;\n foregroundColor: string;\n}\n\n/**\n * Theme overrides for `AbRecommendedCarePlan`.\n *\n * Extends `Partial<BaseTheme>` so callers can pass `tone`, `mode`, etc. and\n * get the shared cascading behavior, then layers component-specific keys.\n */\nexport interface RecommendedCarePlanTheme extends Partial<BaseTheme> {\n /** Color of the thin accent bar across the top of the card. */\n accentBarColor?: string;\n /** Per-urgency badge palette. Merged on top of defaults. */\n urgencyBadges?: Partial<Record<CarePlanUrgencyTone, Partial<ColorPair>>>;\n /** \"Coordinated by …\" chip palette + dot color. */\n coordinatedChipBackgroundColor?: string;\n coordinatedChipForegroundColor?: string;\n coordinatedChipDotColor?: string;\n /** Color of the stethoscope icon next to the headline. */\n headlineIconColor?: string;\n /** Body paragraph color. */\n bodyTextColor?: string;\n /** Metric tile colors. */\n metricEyebrowColor?: string;\n metricValueColor?: string;\n metricCaptionColor?: string;\n metricIconColor?: string;\n /** Primary CTA button palette. */\n primaryButtonBackgroundColor?: string;\n primaryButtonForegroundColor?: string;\n /** Numbered-step badge + text colors. */\n stepNumberBackgroundColor?: string;\n stepNumberForegroundColor?: string;\n stepTextColor?: string;\n /** Disclosure row colors. */\n disclosureEmphasizedColor?: string;\n disclosureMutedColor?: string;\n disclosureChevronColor?: string;\n disclosureDividerColor?: string;\n disclosureBodyColor?: string;\n /** Radius tokens. */\n cardRadius?: Radius;\n primaryButtonRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the card internals. */\nexport interface ResolvedRecommendedCarePlanTheme {\n base: BaseTheme;\n accentBarColor: string;\n urgencyBadges: Record<CarePlanUrgencyTone, ColorPair>;\n coordinatedChipBackgroundColor: string;\n coordinatedChipForegroundColor: string;\n coordinatedChipDotColor: string;\n headlineIconColor: string;\n bodyTextColor: string;\n metricEyebrowColor: string;\n metricValueColor: string;\n metricCaptionColor: string;\n metricIconColor: string;\n primaryButtonBackgroundColor: string;\n primaryButtonForegroundColor: string;\n stepNumberBackgroundColor: string;\n stepNumberForegroundColor: string;\n stepTextColor: string;\n disclosureEmphasizedColor: string;\n disclosureMutedColor: string;\n disclosureChevronColor: string;\n disclosureDividerColor: string;\n disclosureBodyColor: string;\n cardRadiusPx: number;\n primaryButtonRadiusPx: number;\n}\n\nconst defaultUrgencyBadges: Record<CarePlanUrgencyTone, ColorPair> = {\n \"same-day\": { backgroundColor: \"#E8F1FE\", foregroundColor: \"#2F5DFF\" },\n \"this-week\": { backgroundColor: \"#FDEBD0\", foregroundColor: \"#B45309\" },\n scheduled: { backgroundColor: \"#EEF2F7\", foregroundColor: \"#475569\" },\n};\n\nexport function resolveRecommendedCarePlanTheme(\n theme?: RecommendedCarePlanTheme,\n): ResolvedRecommendedCarePlanTheme {\n const base = resolveBaseTheme(theme);\n const cardRadius: Radius = theme?.cardRadius ?? \"lg\";\n const primaryButtonRadius: Radius = theme?.primaryButtonRadius ?? \"md\";\n\n const overrides = theme?.urgencyBadges ?? {};\n const urgencyBadges: Record<CarePlanUrgencyTone, ColorPair> = {\n \"same-day\": {\n ...defaultUrgencyBadges[\"same-day\"],\n ...(overrides[\"same-day\"] ?? {}),\n },\n \"this-week\": {\n ...defaultUrgencyBadges[\"this-week\"],\n ...(overrides[\"this-week\"] ?? {}),\n },\n scheduled: {\n ...defaultUrgencyBadges.scheduled,\n ...(overrides.scheduled ?? {}),\n },\n };\n\n // Cascade: explicit theme override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n accentBarColor: theme?.accentBarColor ?? base.accentColor,\n urgencyBadges,\n coordinatedChipBackgroundColor:\n theme?.coordinatedChipBackgroundColor ?? \"#FCE7F3\",\n coordinatedChipForegroundColor:\n theme?.coordinatedChipForegroundColor ?? \"#9D174D\",\n coordinatedChipDotColor: theme?.coordinatedChipDotColor ?? \"#DB2777\",\n headlineIconColor: theme?.headlineIconColor ?? base.accentColor,\n bodyTextColor: theme?.bodyTextColor ?? base.mutedTextColor,\n metricEyebrowColor: theme?.metricEyebrowColor ?? base.mutedTextColor,\n metricValueColor: theme?.metricValueColor ?? base.textColor,\n metricCaptionColor: theme?.metricCaptionColor ?? base.mutedTextColor,\n metricIconColor: theme?.metricIconColor ?? base.mutedTextColor,\n primaryButtonBackgroundColor:\n theme?.primaryButtonBackgroundColor ?? base.accentColor,\n primaryButtonForegroundColor:\n theme?.primaryButtonForegroundColor ?? \"#FFFFFF\",\n stepNumberBackgroundColor:\n theme?.stepNumberBackgroundColor ?? base.iconBackgroundColor,\n stepNumberForegroundColor:\n theme?.stepNumberForegroundColor ?? base.accentColor,\n stepTextColor: theme?.stepTextColor ?? base.textColor,\n disclosureEmphasizedColor:\n theme?.disclosureEmphasizedColor ?? base.accentColor,\n disclosureMutedColor: theme?.disclosureMutedColor ?? base.textColor,\n disclosureChevronColor:\n theme?.disclosureChevronColor ?? base.mutedTextColor,\n disclosureDividerColor:\n theme?.disclosureDividerColor ?? base.borderColor,\n disclosureBodyColor:\n theme?.disclosureBodyColor ?? base.mutedTextColor,\n cardRadiusPx: radiusToPx[cardRadius],\n primaryButtonRadiusPx: radiusToPx[primaryButtonRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { StyleSheet, Text, View } from \"react-native\";\nimport { Feather, Ionicons } from \"@expo/vector-icons\";\n\nimport { resolveRecommendedReasonListTheme } from \"./theme\";\nimport type { AbRecommendedReasonListProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"WHY THIS OPTION\";\n\nexport function AbRecommendedReasonList({\n data,\n theme,\n style,\n}: AbRecommendedReasonListProps) {\n const t = useMemo(\n () => resolveRecommendedReasonListTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n\n return (\n <View\n style={[\n styles.panel,\n {\n backgroundColor: t.backgroundColor,\n borderColor: t.borderColor,\n borderRadius: t.panelRadiusPx,\n },\n style,\n ]}\n >\n <View style={styles.header}>\n <Ionicons name=\"sparkles\" size={16} color={t.accentColor} />\n <Text\n style={[\n styles.eyebrow,\n { color: t.accentColor, fontFamily },\n ]}\n >\n {eyebrow}\n </Text>\n </View>\n\n <View style={styles.list}>\n {data.reasons.map((reason, idx) => (\n <View key={`${reason}-${idx}`} style={styles.item}>\n <Feather\n name=\"check\"\n size={18}\n color={t.checkmarkColor}\n style={styles.checkmark}\n />\n <Text\n style={[\n styles.reasonText,\n { color: t.reasonTextColor, fontFamily },\n ]}\n >\n {reason}\n </Text>\n </View>\n ))}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n panel: {\n width: \"100%\",\n maxWidth: 520,\n borderWidth: 1,\n padding: 14,\n gap: 10,\n },\n header: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n list: {\n gap: 8,\n },\n item: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n },\n checkmark: {\n marginTop: 1,\n },\n reasonText: {\n flex: 1,\n fontSize: 15,\n lineHeight: 22,\n fontWeight: \"500\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/**\n * Theme overrides for `AbRecommendedReasonList`.\n *\n * Extends `Partial<BaseTheme>` so callers can pass `tone`, `mode`, etc. and\n * get the shared cascading behavior, then layers component-specific keys for\n * the panel surface and the bullet list.\n */\nexport interface RecommendedReasonListTheme extends Partial<BaseTheme> {\n /** Background color of the panel. */\n backgroundColor?: string;\n /** Border color of the panel. */\n borderColor?: string;\n /** Color of the eyebrow text and the sparkles icon. */\n accentColor?: string;\n /** Color of the checkmark icon next to each reason. */\n checkmarkColor?: string;\n /** Color of the reason body text. */\n reasonTextColor?: string;\n /** Panel corner radius token. Defaults to \"md\". */\n panelRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the panel internals. */\nexport interface ResolvedRecommendedReasonListTheme {\n base: BaseTheme;\n backgroundColor: string;\n borderColor: string;\n accentColor: string;\n checkmarkColor: string;\n reasonTextColor: string;\n panelRadiusPx: number;\n}\n\nexport function resolveRecommendedReasonListTheme(\n theme?: RecommendedReasonListTheme,\n): ResolvedRecommendedReasonListTheme {\n const base = resolveBaseTheme(theme);\n const panelRadius: Radius = theme?.panelRadius ?? \"md\";\n\n // Cascade: explicit theme override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n backgroundColor: theme?.backgroundColor ?? base.iconBackgroundColor,\n borderColor: theme?.borderColor ?? base.borderColor,\n accentColor: theme?.accentColor ?? base.accentColor,\n checkmarkColor: theme?.checkmarkColor ?? base.accentColor,\n reasonTextColor: theme?.reasonTextColor ?? base.textColor,\n panelRadiusPx: radiusToPx[panelRadius],\n };\n}\n","import React, { useMemo, useRef } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\n\nimport { resolveRecordImportedTheme } from \"./theme\";\nimport type { AbRecordImportedProps } from \"./types\";\n\nconst DEFAULT_AVATAR_ICON = \"check\";\nconst DEFAULT_CTA_ICON = \"activity\";\n\nexport function AbRecordImported({\n data,\n theme,\n style,\n onPressStat,\n onViewFullSummary,\n}: AbRecordImportedProps) {\n const t = useMemo(() => resolveRecordImportedTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n const avatarIcon = data.avatarIconName ?? DEFAULT_AVATAR_ICON;\n const ctaIcon = data.cta?.iconName ?? DEFAULT_CTA_ICON;\n\n // One-shot latch on the summary CTA.\n const summaryFiredRef = useRef<boolean>(false);\n const handleViewSummary = () => {\n if (summaryFiredRef.current) return;\n summaryFiredRef.current = true;\n onViewFullSummary?.();\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View\n style={[\n styles.accentBar,\n {\n backgroundColor: t.accentBarColor,\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View\n style={[\n styles.avatar,\n {\n backgroundColor: t.avatarBackgroundColor,\n borderColor: t.avatarBorderColor,\n },\n ]}\n >\n <Feather\n name={avatarIcon as never}\n size={20}\n color={t.avatarIconColor}\n />\n </View>\n <View style={styles.headerColumn}>\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n {data.subtitle ? (\n <Text\n style={[\n styles.subtitle,\n { color: t.subtitleColor, fontFamily },\n ]}\n >\n {data.subtitle}\n </Text>\n ) : null}\n </View>\n </View>\n\n {data.stats.length > 0 ? (\n <View style={styles.grid}>\n {data.stats.map((stat, idx) => {\n const tone = t.resolveTone(stat.tone ?? \"neutral\");\n const interactive = !!onPressStat;\n const Container: React.ElementType = interactive\n ? Pressable\n : View;\n return (\n <Container\n key={`${stat.label}-${idx}`}\n accessibilityRole={interactive ? \"button\" : undefined}\n onPress={\n interactive ? () => onPressStat(stat) : undefined\n }\n style={[\n styles.tile,\n {\n backgroundColor: tone.tileBackgroundColor,\n borderRadius: t.tileRadiusPx,\n },\n ]}\n >\n <View\n style={[\n styles.tileIcon,\n {\n backgroundColor: tone.iconBackgroundColor,\n borderRadius: t.iconRadiusPx,\n },\n ]}\n >\n <Feather\n name={stat.iconName as never}\n size={16}\n color={tone.iconForegroundColor}\n />\n </View>\n <View style={styles.tileText}>\n <Text\n style={[\n styles.tileLabel,\n {\n color: t.statLabelColor,\n fontFamily,\n },\n ]}\n numberOfLines={2}\n >\n {stat.label}\n </Text>\n <Text\n style={[\n styles.tileValue,\n {\n color: t.statValueColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {stat.value}\n </Text>\n </View>\n </Container>\n );\n })}\n </View>\n ) : null}\n\n {data.cta ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={handleViewSummary}\n style={({ pressed }) => [\n styles.cta,\n {\n backgroundColor: t.ctaBackgroundColor,\n borderRadius: t.ctaRadiusPx,\n opacity: pressed ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={ctaIcon as never}\n size={16}\n color={t.ctaIconColor}\n />\n <Text\n style={[\n styles.ctaLabel,\n {\n color: t.ctaForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.cta.label}\n </Text>\n </Pressable>\n ) : null}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 560,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 16,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n },\n avatar: {\n width: 40,\n height: 40,\n borderRadius: 20,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderWidth: 1,\n },\n headerColumn: {\n flex: 1,\n gap: 4,\n },\n title: {\n fontSize: 16,\n fontWeight: \"700\",\n lineHeight: 22,\n },\n subtitle: {\n fontSize: 13,\n lineHeight: 18,\n },\n grid: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n rowGap: 10,\n columnGap: 10,\n },\n tile: {\n flexBasis: \"47%\",\n flexGrow: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n paddingHorizontal: 12,\n paddingVertical: 12,\n },\n tileIcon: {\n width: 32,\n height: 32,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n tileText: {\n flex: 1,\n gap: 2,\n },\n tileLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1.1,\n textTransform: \"uppercase\",\n },\n tileValue: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 22,\n },\n cta: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 16,\n paddingVertical: 14,\n },\n ctaLabel: {\n fontSize: 14,\n fontWeight: \"700\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { RecordImportedStatTone } from \"./payload\";\n\nexport interface RecordImportedToneStyle {\n tileBackgroundColor: string;\n iconBackgroundColor: string;\n iconForegroundColor: string;\n}\n\n/** Theme overrides for `AbRecordImported`. */\nexport interface RecordImportedTheme extends Partial<BaseTheme> {\n // Top accent bar\n accentBarColor?: string;\n // Header avatar\n avatarBackgroundColor?: string;\n avatarBorderColor?: string;\n avatarIconColor?: string;\n // Header text\n titleColor?: string;\n subtitleColor?: string;\n // Stat tile (label + value)\n statLabelColor?: string;\n statValueColor?: string;\n // CTA\n ctaBackgroundColor?: string;\n ctaForegroundColor?: string;\n ctaIconColor?: string;\n // Per-tone full overrides for the tile + icon swatch.\n toneStyles?: Partial<\n Record<RecordImportedStatTone, Partial<RecordImportedToneStyle>>\n >;\n // Radii\n cardRadius?: Radius;\n tileRadius?: Radius;\n iconRadius?: Radius;\n ctaRadius?: Radius;\n}\n\nexport interface ResolvedRecordImportedTheme {\n base: BaseTheme;\n accentBarColor: string;\n avatarBackgroundColor: string;\n avatarBorderColor: string;\n avatarIconColor: string;\n titleColor: string;\n subtitleColor: string;\n statLabelColor: string;\n statValueColor: string;\n ctaBackgroundColor: string;\n ctaForegroundColor: string;\n ctaIconColor: string;\n cardRadiusPx: number;\n tileRadiusPx: number;\n iconRadiusPx: number;\n ctaRadiusPx: number;\n resolveTone: (tone: RecordImportedStatTone) => RecordImportedToneStyle;\n}\n\nconst TONE_DEFAULTS: Record<RecordImportedStatTone, RecordImportedToneStyle> =\n {\n orange: {\n tileBackgroundColor: \"#F8FAFC\",\n iconBackgroundColor: \"#FFEDD5\",\n iconForegroundColor: \"#EA580C\",\n },\n pink: {\n tileBackgroundColor: \"#F8FAFC\",\n iconBackgroundColor: \"#FCE7F3\",\n iconForegroundColor: \"#DB2777\",\n },\n amber: {\n tileBackgroundColor: \"#F8FAFC\",\n iconBackgroundColor: \"#FEF3C7\",\n iconForegroundColor: \"#D97706\",\n },\n purple: {\n tileBackgroundColor: \"#F8FAFC\",\n iconBackgroundColor: \"#EDE9FE\",\n iconForegroundColor: \"#7C3AED\",\n },\n blue: {\n tileBackgroundColor: \"#F8FAFC\",\n iconBackgroundColor: \"#DBEAFE\",\n iconForegroundColor: \"#2563EB\",\n },\n green: {\n tileBackgroundColor: \"#F8FAFC\",\n iconBackgroundColor: \"#DCFCE7\",\n iconForegroundColor: \"#16A34A\",\n },\n neutral: {\n tileBackgroundColor: \"#F8FAFC\",\n iconBackgroundColor: \"#E2E8F0\",\n iconForegroundColor: \"#0F172A\",\n },\n };\n\nexport function resolveRecordImportedTheme(\n theme?: RecordImportedTheme,\n): ResolvedRecordImportedTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const tileRadius: Radius = theme?.tileRadius ?? base.radius ?? \"md\";\n const iconRadius: Radius = theme?.iconRadius ?? \"full\";\n const ctaRadius: Radius = theme?.ctaRadius ?? \"full\";\n\n const resolveTone = (\n tone: RecordImportedStatTone,\n ): RecordImportedToneStyle => {\n const fallback = TONE_DEFAULTS[tone];\n const override = theme?.toneStyles?.[tone];\n return {\n tileBackgroundColor:\n override?.tileBackgroundColor ?? fallback.tileBackgroundColor,\n iconBackgroundColor:\n override?.iconBackgroundColor ?? fallback.iconBackgroundColor,\n iconForegroundColor:\n override?.iconForegroundColor ?? fallback.iconForegroundColor,\n };\n };\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n accentBarColor: theme?.accentBarColor ?? \"#34D399\",\n avatarBackgroundColor:\n theme?.avatarBackgroundColor ?? \"#DCFCE7\",\n avatarBorderColor:\n theme?.avatarBorderColor ?? \"rgba(15, 23, 42, 0.04)\",\n avatarIconColor: theme?.avatarIconColor ?? \"#16A34A\",\n titleColor: theme?.titleColor ?? base.textColor,\n subtitleColor: theme?.subtitleColor ?? base.mutedTextColor,\n statLabelColor: theme?.statLabelColor ?? base.mutedTextColor,\n statValueColor: theme?.statValueColor ?? base.textColor,\n ctaBackgroundColor: theme?.ctaBackgroundColor ?? \"#F1F5F9\",\n ctaForegroundColor: theme?.ctaForegroundColor ?? base.textColor,\n ctaIconColor: theme?.ctaIconColor ?? base.textColor,\n cardRadiusPx: radiusToPx[cardRadius],\n tileRadiusPx: radiusToPx[tileRadius],\n iconRadiusPx: radiusToPx[iconRadius],\n ctaRadiusPx: radiusToPx[ctaRadius],\n resolveTone,\n };\n}\n","import React, { useMemo, useRef, useState } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveSafecdxTheme } from \"./theme\";\nimport type { AbSafecdxProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"SAFECDX\";\nconst DEFAULT_EYEBROW_ICON = \"maximize\";\nconst DEFAULT_AVATAR_ICON = \"edit-3\";\nconst DEFAULT_PICKER_LABEL = \"CHOOSE TEST TYPE\";\nconst DEFAULT_CTA_LABEL = \"Start test scan\";\nconst DEFAULT_CTA_ICON = \"camera\";\nconst DEFAULT_SCANNING_LABEL = \"Scan in progress…\";\n\nexport function AbSafecdx({\n data,\n theme,\n style,\n selectedTestTypeId,\n onSelectTestType,\n scanning,\n onScanningChange,\n onStartScan,\n}: AbSafecdxProps) {\n const t = useMemo(() => resolveSafecdxTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIcon = data.eyebrowIconName ?? DEFAULT_EYEBROW_ICON;\n const avatarIcon = data.avatarIconName ?? DEFAULT_AVATAR_ICON;\n const pickerLabel = data.pickerLabel ?? DEFAULT_PICKER_LABEL;\n const ctaLabel = data.ctaLabel ?? DEFAULT_CTA_LABEL;\n const ctaIcon = data.ctaIconName ?? DEFAULT_CTA_ICON;\n const scanningLabel = data.scanningLabel ?? DEFAULT_SCANNING_LABEL;\n\n const testTypes = data.testTypes;\n const initialSelectedId =\n data.defaultSelectedTestTypeId ?? testTypes[0]?.id ?? \"\";\n const [internalSelectedId, setInternalSelectedId] =\n useState<string>(initialSelectedId);\n const activeSelectedId =\n selectedTestTypeId !== undefined\n ? selectedTestTypeId\n : internalSelectedId;\n const selectedTestType =\n testTypes.find((tt) => tt.id === activeSelectedId) ??\n testTypes[0];\n\n const [internalScanning, setInternalScanning] = useState<boolean>(\n data.defaultScanning ?? false,\n );\n const isScanning =\n scanning !== undefined ? scanning : internalScanning;\n // One-shot latch: even in controlled mode where the parent's\n // `scanning` prop may update asynchronously, repeated CTA taps\n // cannot fire `onStartScan` more than once per mount.\n const scanFiredRef = useRef<boolean>(data.defaultScanning ?? false);\n\n const handleChipPress = () => {\n if (testTypes.length < 2 || !selectedTestType) return;\n const idx = testTypes.findIndex(\n (tt) => tt.id === selectedTestType.id,\n );\n const next = testTypes[(idx + 1) % testTypes.length];\n if (selectedTestTypeId === undefined) setInternalSelectedId(next.id);\n onSelectTestType?.(next);\n };\n\n const handleStartScan = () => {\n if (isScanning || scanFiredRef.current || !selectedTestType) return;\n scanFiredRef.current = true;\n if (scanning === undefined) setInternalScanning(true);\n onScanningChange?.(true);\n onStartScan?.(selectedTestType);\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View style={styles.eyebrowRow}>\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n\n <View style={styles.bodyRow}>\n <LinearGradient\n colors={t.avatarGradient as unknown as [string, string]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={[\n styles.avatar,\n {\n borderRadius: t.avatarRadiusPx,\n borderColor: t.avatarBorderColor,\n },\n ]}\n >\n <Feather\n name={avatarIcon as never}\n size={20}\n color={t.avatarIconColor}\n />\n </LinearGradient>\n <View style={styles.bodyColumn}>\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n <Text\n style={[\n styles.body,\n { color: t.bodyColor, fontFamily },\n ]}\n >\n {data.body}\n </Text>\n </View>\n </View>\n\n <View style={styles.pickerSection}>\n <Text\n style={[\n styles.pickerLabel,\n { color: t.pickerLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {pickerLabel}\n </Text>\n {selectedTestType ? (\n <Pressable\n accessibilityRole=\"button\"\n disabled={testTypes.length < 2}\n onPress={handleChipPress}\n style={({ pressed }) => [\n styles.chip,\n {\n backgroundColor: t.pickerChipBackgroundColor,\n borderRadius: t.chipRadiusPx,\n opacity: pressed && testTypes.length >= 2 ? 0.85 : 1,\n },\n ]}\n >\n <Text\n style={[\n styles.chipLabel,\n {\n color: t.pickerChipForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {selectedTestType.label}\n </Text>\n </Pressable>\n ) : null}\n {selectedTestType?.subtitle ? (\n <Text\n style={[\n styles.subtitle,\n { color: t.subtitleColor, fontFamily },\n ]}\n numberOfLines={2}\n >\n {selectedTestType.subtitle}\n </Text>\n ) : null}\n </View>\n\n {isScanning ? (\n <View\n style={[\n styles.cta,\n {\n backgroundColor: t.scanningBackgroundColor,\n borderRadius: t.ctaRadiusPx,\n },\n ]}\n >\n <Text\n style={[\n styles.ctaLabel,\n { color: t.scanningForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {scanningLabel}\n </Text>\n </View>\n ) : (\n <Pressable\n accessibilityRole=\"button\"\n onPress={handleStartScan}\n disabled={!selectedTestType}\n style={({ pressed }) => [\n styles.cta,\n {\n backgroundColor: t.ctaBackgroundColor,\n borderRadius: t.ctaRadiusPx,\n opacity: pressed ? 0.9 : 1,\n },\n ]}\n >\n <Feather\n name={ctaIcon as never}\n size={18}\n color={t.ctaForegroundColor}\n />\n <Text\n style={[\n styles.ctaLabel,\n { color: t.ctaForegroundColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {ctaLabel}\n </Text>\n </Pressable>\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 560,\n borderWidth: 1,\n padding: 18,\n gap: 16,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n bodyRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 14,\n },\n avatar: {\n width: 44,\n height: 44,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderWidth: 1,\n },\n bodyColumn: {\n flex: 1,\n gap: 4,\n },\n title: {\n fontSize: 17,\n fontWeight: \"700\",\n lineHeight: 24,\n },\n body: {\n fontSize: 14,\n lineHeight: 20,\n },\n pickerSection: {\n gap: 10,\n },\n pickerLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n chip: {\n alignSelf: \"flex-start\",\n paddingHorizontal: 18,\n paddingVertical: 12,\n maxWidth: \"100%\",\n },\n chipLabel: {\n fontSize: 14,\n fontWeight: \"700\",\n },\n subtitle: {\n fontSize: 13,\n lineHeight: 18,\n },\n cta: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 10,\n paddingHorizontal: 16,\n paddingVertical: 14,\n },\n ctaLabel: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbSafecdx`. */\nexport interface SafecdxTheme extends Partial<BaseTheme> {\n // Eyebrow\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n // Title + body + subtitle\n titleColor?: string;\n bodyColor?: string;\n subtitleColor?: string;\n // Avatar gradient\n avatarGradientStart?: string;\n avatarGradientEnd?: string;\n avatarBorderColor?: string;\n avatarIconColor?: string;\n // Picker\n pickerLabelColor?: string;\n pickerChipBackgroundColor?: string;\n pickerChipForegroundColor?: string;\n // Primary CTA\n ctaBackgroundColor?: string;\n ctaForegroundColor?: string;\n // Scanning state CTA\n scanningBackgroundColor?: string;\n scanningForegroundColor?: string;\n // Radii\n cardRadius?: Radius;\n avatarRadius?: Radius;\n chipRadius?: Radius;\n ctaRadius?: Radius;\n}\n\nexport interface ResolvedSafecdxTheme {\n base: BaseTheme;\n eyebrowColor: string;\n eyebrowIconColor: string;\n titleColor: string;\n bodyColor: string;\n subtitleColor: string;\n avatarGradient: readonly [string, string];\n avatarBorderColor: string;\n avatarIconColor: string;\n pickerLabelColor: string;\n pickerChipBackgroundColor: string;\n pickerChipForegroundColor: string;\n ctaBackgroundColor: string;\n ctaForegroundColor: string;\n scanningBackgroundColor: string;\n scanningForegroundColor: string;\n cardRadiusPx: number;\n avatarRadiusPx: number;\n chipRadiusPx: number;\n ctaRadiusPx: number;\n}\n\nexport function resolveSafecdxTheme(\n theme?: SafecdxTheme,\n): ResolvedSafecdxTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const avatarRadius: Radius = theme?.avatarRadius ?? \"full\";\n const chipRadius: Radius = theme?.chipRadius ?? \"full\";\n const ctaRadius: Radius = theme?.ctaRadius ?? \"full\";\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor: theme?.eyebrowIconColor ?? base.mutedTextColor,\n titleColor: theme?.titleColor ?? base.textColor,\n bodyColor: theme?.bodyColor ?? base.mutedTextColor,\n subtitleColor: theme?.subtitleColor ?? base.mutedTextColor,\n avatarGradient: [\n theme?.avatarGradientStart ?? \"#F59E0B\",\n theme?.avatarGradientEnd ?? \"#7C9BF8\",\n ] as const,\n avatarBorderColor: theme?.avatarBorderColor ?? \"rgba(15, 23, 42, 0.04)\",\n avatarIconColor: theme?.avatarIconColor ?? \"#FFFFFF\",\n pickerLabelColor: theme?.pickerLabelColor ?? base.mutedTextColor,\n pickerChipBackgroundColor:\n theme?.pickerChipBackgroundColor ?? \"#0B1220\",\n pickerChipForegroundColor:\n theme?.pickerChipForegroundColor ?? \"#FFFFFF\",\n ctaBackgroundColor: theme?.ctaBackgroundColor ?? \"#2563EB\",\n ctaForegroundColor: theme?.ctaForegroundColor ?? \"#FFFFFF\",\n scanningBackgroundColor:\n theme?.scanningBackgroundColor ?? \"#A5B4FC\",\n scanningForegroundColor:\n theme?.scanningForegroundColor ?? \"#FFFFFF\",\n cardRadiusPx: radiusToPx[cardRadius],\n avatarRadiusPx: radiusToPx[avatarRadius],\n chipRadiusPx: radiusToPx[chipRadius],\n ctaRadiusPx: radiusToPx[ctaRadius],\n };\n}\n","import React, { useMemo, useRef, useState } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\n\nimport { resolveSafecdxResultTheme } from \"./theme\";\nimport type { AbSafecdxResultProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"SAFECDX RESULT\";\nconst DEFAULT_EYEBROW_ICON = \"maximize\";\nconst DEFAULT_TEST_LABEL = \"TEST\";\nconst DEFAULT_INTERPRETATION_LABEL = \"INTERPRETATION\";\nconst DEFAULT_INTERPRETATION_ICON = \"file-text\";\nconst DEFAULT_RECOMMENDATION_LABEL = \"Recommended next step:\";\nconst DEFAULT_RECOMMENDATION_ICON = \"arrow-right\";\nconst DEFAULT_PROVIDER_NOTICE_ICON = \"activity\";\nconst DEFAULT_SUBMIT_ICON = \"activity\";\nconst DEFAULT_SENT_ICON = \"check\";\nconst DEFAULT_SENT_LABEL = \"Sent · reply in ~12 min\";\n\nexport function AbSafecdxResult({\n data,\n theme,\n style,\n submitted,\n onSubmittedChange,\n onSubmit,\n}: AbSafecdxResultProps) {\n const t = useMemo(() => resolveSafecdxResultTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n const tone = data.status.tone ?? \"neutral\";\n const toneStyle = t.resolveStatusTone(tone);\n const accentBarColor =\n t.accentBarColorOverride ?? toneStyle.accentBarColor;\n\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIcon = data.eyebrowIconName ?? DEFAULT_EYEBROW_ICON;\n const testLabel = data.testLabel ?? DEFAULT_TEST_LABEL;\n const interpretationLabel =\n data.interpretation.label ?? DEFAULT_INTERPRETATION_LABEL;\n const interpretationIcon =\n data.interpretation.iconName ?? DEFAULT_INTERPRETATION_ICON;\n const recommendationLabel =\n data.recommendation.label ?? DEFAULT_RECOMMENDATION_LABEL;\n const recommendationIcon =\n data.recommendation.iconName ?? DEFAULT_RECOMMENDATION_ICON;\n\n const [internalSubmitted, setInternalSubmitted] = useState<boolean>(\n data.defaultSubmitted ?? false,\n );\n const isSubmitted =\n submitted !== undefined ? submitted : internalSubmitted;\n // One-shot latch: even in controlled mode where the parent's\n // `submitted` prop may update asynchronously, repeated CTA taps\n // cannot fire `onSubmit` more than once per mount.\n const submitFiredRef = useRef<boolean>(\n data.defaultSubmitted ?? false,\n );\n\n const handleSubmit = () => {\n if (isSubmitted || submitFiredRef.current) return;\n submitFiredRef.current = true;\n if (submitted === undefined) setInternalSubmitted(true);\n onSubmittedChange?.(true);\n onSubmit?.();\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n const submitCta = data.submitCta;\n const submitIcon = submitCta?.iconName ?? DEFAULT_SUBMIT_ICON;\n const sentIcon = submitCta?.sentIconName ?? DEFAULT_SENT_ICON;\n const sentLabel = submitCta?.sentLabel ?? DEFAULT_SENT_LABEL;\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View\n style={[\n styles.accentBar,\n {\n backgroundColor: accentBarColor,\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n {/* Header: eyebrow + status pill */}\n <View style={styles.headerRow}>\n <View style={styles.eyebrowGroup}>\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n <View\n style={[\n styles.statusPill,\n {\n backgroundColor: toneStyle.pillBackgroundColor,\n borderRadius: t.pillRadiusPx,\n },\n ]}\n >\n <Text\n style={[\n styles.statusPillLabel,\n {\n color: toneStyle.pillForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.status.label}\n </Text>\n </View>\n </View>\n\n {/* Test header */}\n <View style={styles.testHeader}>\n <Text\n style={[\n styles.smallLabel,\n { color: t.testLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {testLabel}\n </Text>\n <Text\n style={[\n styles.testName,\n { color: t.testNameColor, fontFamily },\n ]}\n >\n {data.testName}\n </Text>\n {data.testSubtitle ? (\n <Text\n style={[\n styles.testSubtitle,\n { color: t.testSubtitleColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {data.testSubtitle}\n </Text>\n ) : null}\n </View>\n\n {/* Meta grid */}\n {data.meta.length > 0 ? (\n <View style={styles.metaGrid}>\n {data.meta.map((cell, idx) => (\n <View key={`${cell.label}-${idx}`} style={styles.metaCell}>\n <Text\n style={[\n styles.smallLabel,\n { color: t.metaLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {cell.label}\n </Text>\n <View style={styles.metaValueRow}>\n {cell.iconName ? (\n <Feather\n name={cell.iconName as never}\n size={14}\n color={t.metaIconColor}\n />\n ) : null}\n <Text\n style={[\n styles.metaValue,\n { color: t.metaValueColor, fontFamily },\n ]}\n numberOfLines={2}\n >\n {cell.value}\n </Text>\n </View>\n </View>\n ))}\n </View>\n ) : null}\n\n {/* Interpretation panel */}\n <View\n style={[\n styles.panel,\n {\n backgroundColor: t.interpretationBackgroundColor,\n borderColor: t.interpretationBorderColor,\n borderRadius: t.panelRadiusPx,\n },\n ]}\n >\n <View style={styles.panelLabelRow}>\n <Feather\n name={interpretationIcon as never}\n size={14}\n color={t.interpretationIconColor}\n />\n <Text\n style={[\n styles.panelLabel,\n {\n color: t.interpretationLabelColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {interpretationLabel}\n </Text>\n </View>\n <Text\n style={[\n styles.panelBody,\n {\n color: t.interpretationBodyColor,\n fontFamily,\n },\n ]}\n >\n {data.interpretation.body}\n </Text>\n </View>\n\n {/* Recommendation row */}\n <View style={styles.recommendationRow}>\n <Feather\n name={recommendationIcon as never}\n size={18}\n color={t.recommendationIconColor}\n style={styles.recommendationIcon}\n />\n <Text\n style={[\n styles.recommendationText,\n { color: t.recommendationBodyColor, fontFamily },\n ]}\n >\n <Text\n style={[\n styles.recommendationLabel,\n { color: t.recommendationLabelColor, fontFamily },\n ]}\n >\n {recommendationLabel}\n </Text>{\" \"}\n {data.recommendation.body}\n </Text>\n </View>\n\n {/* Provider notice (optional) */}\n {data.providerNotice ? (\n <View\n style={[\n styles.panel,\n {\n backgroundColor: t.providerNoticeBackgroundColor,\n borderColor: t.providerNoticeBorderColor,\n borderRadius: t.panelRadiusPx,\n },\n ]}\n >\n <View style={styles.panelLabelRow}>\n <Feather\n name={\n (data.providerNotice.iconName ??\n DEFAULT_PROVIDER_NOTICE_ICON) as never\n }\n size={16}\n color={t.providerNoticeIconColor}\n />\n <Text\n style={[\n styles.providerNoticeTitle,\n {\n color: t.providerNoticeTitleColor,\n fontFamily,\n },\n ]}\n >\n {data.providerNotice.title}\n </Text>\n </View>\n <Text\n style={[\n styles.panelBody,\n {\n color: t.providerNoticeBodyColor,\n fontFamily,\n },\n ]}\n >\n {data.providerNotice.body}\n </Text>\n </View>\n ) : null}\n\n {/* Submit CTA (optional) */}\n {submitCta ? (\n isSubmitted ? (\n <View\n style={[\n styles.cta,\n {\n backgroundColor: t.submittedBackgroundColor,\n borderRadius: t.ctaRadiusPx,\n },\n ]}\n >\n <Feather\n name={sentIcon as never}\n size={16}\n color={t.submittedForegroundColor}\n />\n <Text\n style={[\n styles.ctaLabel,\n {\n color: t.submittedForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {sentLabel}\n </Text>\n </View>\n ) : (\n <Pressable\n accessibilityRole=\"button\"\n onPress={handleSubmit}\n style={({ pressed }) => [\n styles.cta,\n {\n backgroundColor: t.submitBackgroundColor,\n borderRadius: t.ctaRadiusPx,\n opacity: pressed ? 0.9 : 1,\n },\n ]}\n >\n <Feather\n name={submitIcon as never}\n size={18}\n color={t.submitForegroundColor}\n />\n <Text\n style={[\n styles.ctaLabel,\n {\n color: t.submitForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {submitCta.label}\n </Text>\n </Pressable>\n )\n ) : null}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 560,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 16,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n },\n eyebrowGroup: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n statusPill: {\n paddingHorizontal: 12,\n paddingVertical: 5,\n },\n statusPillLabel: {\n fontSize: 13,\n fontWeight: \"700\",\n },\n testHeader: {\n gap: 4,\n },\n smallLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n testName: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n },\n testSubtitle: {\n fontSize: 14,\n lineHeight: 20,\n },\n metaGrid: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n rowGap: 14,\n },\n metaCell: {\n width: \"50%\",\n paddingRight: 8,\n gap: 4,\n },\n metaValueRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n },\n metaValue: {\n fontSize: 14,\n fontWeight: \"500\",\n flexShrink: 1,\n },\n panel: {\n borderWidth: 1,\n padding: 14,\n gap: 8,\n },\n panelLabelRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n panelLabel: {\n fontSize: 11,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n panelBody: {\n fontSize: 14,\n lineHeight: 20,\n },\n providerNoticeTitle: {\n fontSize: 14,\n fontWeight: \"700\",\n },\n recommendationRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n },\n recommendationIcon: {\n marginTop: 2,\n },\n recommendationText: {\n flex: 1,\n fontSize: 14,\n lineHeight: 20,\n },\n recommendationLabel: {\n fontWeight: \"700\",\n },\n cta: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 10,\n paddingHorizontal: 16,\n paddingVertical: 14,\n },\n ctaLabel: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { SafecdxResultStatusTone } from \"./payload\";\n\nexport interface SafecdxResultStatusToneStyle {\n pillBackgroundColor: string;\n pillForegroundColor: string;\n accentBarColor: string;\n}\n\n/** Theme overrides for `AbSafecdxResult`. */\nexport interface SafecdxResultTheme extends Partial<BaseTheme> {\n // Top accent bar\n /** Override the top accent bar color (otherwise from `status.tone`). */\n accentBarColor?: string;\n // Eyebrow\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n // Test header\n testLabelColor?: string;\n testNameColor?: string;\n testSubtitleColor?: string;\n // Meta grid\n metaLabelColor?: string;\n metaValueColor?: string;\n metaIconColor?: string;\n // Interpretation box\n interpretationBackgroundColor?: string;\n interpretationBorderColor?: string;\n interpretationLabelColor?: string;\n interpretationIconColor?: string;\n interpretationBodyColor?: string;\n // Recommendation callout\n recommendationLabelColor?: string;\n recommendationBodyColor?: string;\n recommendationIconColor?: string;\n // Provider notice box\n providerNoticeBackgroundColor?: string;\n providerNoticeBorderColor?: string;\n providerNoticeTitleColor?: string;\n providerNoticeBodyColor?: string;\n providerNoticeIconColor?: string;\n // Submit CTA\n submitBackgroundColor?: string;\n submitForegroundColor?: string;\n submittedBackgroundColor?: string;\n submittedForegroundColor?: string;\n // Status tone overrides (per-tone full override)\n statusToneStyles?: Partial<\n Record<SafecdxResultStatusTone, Partial<SafecdxResultStatusToneStyle>>\n >;\n // Radii\n cardRadius?: Radius;\n panelRadius?: Radius;\n pillRadius?: Radius;\n ctaRadius?: Radius;\n}\n\nexport interface ResolvedSafecdxResultTheme {\n base: BaseTheme;\n eyebrowColor: string;\n eyebrowIconColor: string;\n testLabelColor: string;\n testNameColor: string;\n testSubtitleColor: string;\n metaLabelColor: string;\n metaValueColor: string;\n metaIconColor: string;\n interpretationBackgroundColor: string;\n interpretationBorderColor: string;\n interpretationLabelColor: string;\n interpretationIconColor: string;\n interpretationBodyColor: string;\n recommendationLabelColor: string;\n recommendationBodyColor: string;\n recommendationIconColor: string;\n providerNoticeBackgroundColor: string;\n providerNoticeBorderColor: string;\n providerNoticeTitleColor: string;\n providerNoticeBodyColor: string;\n providerNoticeIconColor: string;\n submitBackgroundColor: string;\n submitForegroundColor: string;\n submittedBackgroundColor: string;\n submittedForegroundColor: string;\n cardRadiusPx: number;\n panelRadiusPx: number;\n pillRadiusPx: number;\n ctaRadiusPx: number;\n resolveStatusTone: (\n tone: SafecdxResultStatusTone,\n ) => SafecdxResultStatusToneStyle;\n /** Falls back to the resolved-status accent when `accentBarColor` is unset. */\n accentBarColorOverride?: string;\n}\n\nconst TONE_DEFAULTS: Record<\n SafecdxResultStatusTone,\n SafecdxResultStatusToneStyle\n> = {\n positive: {\n pillBackgroundColor: \"#FEE2E2\",\n pillForegroundColor: \"#B91C1C\",\n accentBarColor: \"#DC2626\",\n },\n negative: {\n pillBackgroundColor: \"#DCFCE7\",\n pillForegroundColor: \"#15803D\",\n accentBarColor: \"#16A34A\",\n },\n inconclusive: {\n pillBackgroundColor: \"#FEF3C7\",\n pillForegroundColor: \"#92400E\",\n accentBarColor: \"#D97706\",\n },\n neutral: {\n pillBackgroundColor: \"#E2E8F0\",\n pillForegroundColor: \"#0F172A\",\n accentBarColor: \"#94A3B8\",\n },\n};\n\nexport function resolveSafecdxResultTheme(\n theme?: SafecdxResultTheme,\n): ResolvedSafecdxResultTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const panelRadius: Radius = theme?.panelRadius ?? base.radius ?? \"md\";\n const pillRadius: Radius = theme?.pillRadius ?? \"full\";\n const ctaRadius: Radius = theme?.ctaRadius ?? \"full\";\n\n const resolveStatusTone = (\n tone: SafecdxResultStatusTone,\n ): SafecdxResultStatusToneStyle => {\n const fallback = TONE_DEFAULTS[tone];\n const override = theme?.statusToneStyles?.[tone];\n return {\n pillBackgroundColor:\n override?.pillBackgroundColor ?? fallback.pillBackgroundColor,\n pillForegroundColor:\n override?.pillForegroundColor ?? fallback.pillForegroundColor,\n accentBarColor:\n override?.accentBarColor ?? fallback.accentBarColor,\n };\n };\n\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor: theme?.eyebrowIconColor ?? base.mutedTextColor,\n testLabelColor: theme?.testLabelColor ?? base.mutedTextColor,\n testNameColor: theme?.testNameColor ?? base.textColor,\n testSubtitleColor: theme?.testSubtitleColor ?? base.mutedTextColor,\n metaLabelColor: theme?.metaLabelColor ?? base.mutedTextColor,\n metaValueColor: theme?.metaValueColor ?? base.textColor,\n metaIconColor: theme?.metaIconColor ?? base.mutedTextColor,\n interpretationBackgroundColor:\n theme?.interpretationBackgroundColor ?? \"#F1F5F9\",\n interpretationBorderColor:\n theme?.interpretationBorderColor ?? \"rgba(15, 23, 42, 0.06)\",\n interpretationLabelColor:\n theme?.interpretationLabelColor ?? base.mutedTextColor,\n interpretationIconColor:\n theme?.interpretationIconColor ?? base.mutedTextColor,\n interpretationBodyColor:\n theme?.interpretationBodyColor ?? base.textColor,\n recommendationLabelColor:\n theme?.recommendationLabelColor ?? base.textColor,\n recommendationBodyColor:\n theme?.recommendationBodyColor ?? base.textColor,\n recommendationIconColor: theme?.recommendationIconColor ?? \"#2563EB\",\n providerNoticeBackgroundColor:\n theme?.providerNoticeBackgroundColor ?? \"#EFF6FF\",\n providerNoticeBorderColor:\n theme?.providerNoticeBorderColor ?? \"rgba(37, 99, 235, 0.18)\",\n providerNoticeTitleColor:\n theme?.providerNoticeTitleColor ?? \"#2563EB\",\n providerNoticeBodyColor:\n theme?.providerNoticeBodyColor ?? base.textColor,\n providerNoticeIconColor:\n theme?.providerNoticeIconColor ?? \"#2563EB\",\n submitBackgroundColor: theme?.submitBackgroundColor ?? \"#2563EB\",\n submitForegroundColor: theme?.submitForegroundColor ?? \"#FFFFFF\",\n submittedBackgroundColor:\n theme?.submittedBackgroundColor ?? \"#A5B4FC\",\n submittedForegroundColor:\n theme?.submittedForegroundColor ?? \"#FFFFFF\",\n cardRadiusPx: radiusToPx[cardRadius],\n panelRadiusPx: radiusToPx[panelRadius],\n pillRadiusPx: radiusToPx[pillRadius],\n ctaRadiusPx: radiusToPx[ctaRadius],\n resolveStatusTone,\n accentBarColorOverride: theme?.accentBarColor,\n };\n}\n","import React, { useMemo, useRef } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveSymptomImageInsightTheme } from \"./theme\";\nimport type { AbSymptomImageInsightProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"IMAGE INSIGHT\";\nconst DEFAULT_EYEBROW_ICON = \"zap\";\nconst DEFAULT_QUALITY_ICON = \"camera\";\nconst DEFAULT_CALLOUT_ICON = \"activity\";\nconst DEFAULT_DISCLAIMER_ICON = \"shield\";\nconst DEFAULT_ATTACHED_ICON = \"check\";\nconst DEFAULT_ATTACHED_LABEL = \"Attached to your visit\";\n\nexport function AbSymptomImageInsight({\n data,\n theme,\n style,\n onPrimaryPress,\n onSecondaryPress,\n onAttachedNoticePress,\n}: AbSymptomImageInsightProps) {\n const t = useMemo(\n () => resolveSymptomImageInsightTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIcon = data.eyebrowIconName ?? DEFAULT_EYEBROW_ICON;\n const qualityIcon =\n data.qualityPill?.iconName ?? DEFAULT_QUALITY_ICON;\n const calloutIcon =\n data.callout?.iconName ?? DEFAULT_CALLOUT_ICON;\n const disclaimerIcon =\n data.disclaimerIconName ?? DEFAULT_DISCLAIMER_ICON;\n const attachedIcon =\n data.attachedNotice?.iconName ?? DEFAULT_ATTACHED_ICON;\n const attachedLabel =\n data.attachedNotice?.label ?? DEFAULT_ATTACHED_LABEL;\n const isAttached = data.attached ?? false;\n\n // One-shot latches on the optional handlers.\n const primaryFiredRef = useRef<boolean>(false);\n const secondaryFiredRef = useRef<boolean>(false);\n const attachedFiredRef = useRef<boolean>(false);\n const handlePrimary = () => {\n if (primaryFiredRef.current) return;\n primaryFiredRef.current = true;\n onPrimaryPress?.();\n };\n const handleSecondary = () => {\n if (secondaryFiredRef.current) return;\n secondaryFiredRef.current = true;\n onSecondaryPress?.();\n };\n const handleAttachedNotice = () => {\n if (attachedFiredRef.current) return;\n attachedFiredRef.current = true;\n onAttachedNoticePress?.();\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <LinearGradient\n colors={t.accentBarColors as unknown as [string, string, string]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.accentBar,\n {\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View style={styles.eyebrowRow}>\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n >\n {eyebrow}\n </Text>\n </View>\n {data.qualityPill ? (\n <View\n style={[\n styles.qualityPill,\n {\n backgroundColor: t.qualityPillBackgroundColor,\n borderColor: t.qualityPillBorderColor,\n borderRadius: t.pillRadiusPx,\n },\n ]}\n >\n <Feather\n name={qualityIcon as never}\n size={12}\n color={t.qualityPillIconColor}\n />\n <Text\n style={[\n styles.qualityPillLabel,\n {\n color: t.qualityPillForegroundColor,\n fontFamily,\n },\n ]}\n >\n {data.qualityPill.label}\n </Text>\n </View>\n ) : null}\n </View>\n\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n\n {data.bullets && data.bullets.length > 0 ? (\n <View style={styles.bulletsList}>\n {data.bullets.map((bullet) => (\n <View key={bullet.id} style={styles.bulletRow}>\n <View\n style={[\n styles.bulletDot,\n { backgroundColor: t.bulletDotColor },\n ]}\n />\n <Text\n style={[\n styles.bulletText,\n {\n color: t.bulletTextColor,\n fontFamily,\n },\n ]}\n >\n {bullet.text}\n </Text>\n </View>\n ))}\n </View>\n ) : null}\n\n {data.callout ? (\n <View\n style={[\n styles.callout,\n {\n backgroundColor: t.calloutBackgroundColor,\n borderColor: t.calloutBorderColor,\n borderRadius: t.calloutRadiusPx,\n },\n ]}\n >\n <Feather\n name={calloutIcon as never}\n size={16}\n color={t.calloutIconColor}\n />\n <Text\n style={[\n styles.calloutText,\n {\n color: t.calloutTextColor,\n fontFamily,\n },\n ]}\n >\n {data.callout.text}\n </Text>\n </View>\n ) : null}\n\n {data.disclaimer ? (\n <View style={styles.disclaimerRow}>\n <Feather\n name={disclaimerIcon as never}\n size={14}\n color={t.disclaimerIconColor}\n />\n <Text\n style={[\n styles.disclaimerText,\n {\n color: t.disclaimerColor,\n fontFamily,\n },\n ]}\n >\n {data.disclaimer}\n </Text>\n </View>\n ) : null}\n\n {isAttached ? (\n <Pressable\n accessibilityRole={\n onAttachedNoticePress ? \"button\" : undefined\n }\n disabled={!onAttachedNoticePress}\n onPress={\n onAttachedNoticePress\n ? handleAttachedNotice\n : undefined\n }\n style={({ pressed }) => [\n styles.attachedNotice,\n {\n backgroundColor: t.attachedNoticeBackgroundColor,\n borderColor: t.attachedNoticeBorderColor,\n borderRadius: t.buttonRadiusPx,\n opacity:\n pressed && onAttachedNoticePress ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={attachedIcon as never}\n size={16}\n color={t.attachedNoticeIconColor}\n />\n <Text\n style={[\n styles.attachedNoticeLabel,\n {\n color: t.attachedNoticeForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {attachedLabel}\n </Text>\n </Pressable>\n ) : (\n <View style={styles.actionsRow}>\n {data.secondaryAction ? (\n <Pressable\n accessibilityRole=\"button\"\n disabled={!onSecondaryPress}\n onPress={\n onSecondaryPress ? handleSecondary : undefined\n }\n style={({ pressed }) => [\n styles.secondaryButton,\n {\n backgroundColor:\n t.secondaryButtonBackgroundColor,\n borderColor: t.secondaryButtonBorderColor,\n borderRadius: t.buttonRadiusPx,\n opacity:\n pressed && onSecondaryPress ? 0.85 : 1,\n },\n ]}\n >\n {data.secondaryAction.iconName ? (\n <Feather\n name={data.secondaryAction.iconName as never}\n size={16}\n color={t.secondaryButtonIconColor}\n />\n ) : null}\n <Text\n style={[\n styles.secondaryButtonLabel,\n {\n color: t.secondaryButtonForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.secondaryAction.label}\n </Text>\n </Pressable>\n ) : null}\n <Pressable\n accessibilityRole=\"button\"\n disabled={!onPrimaryPress}\n onPress={\n onPrimaryPress ? handlePrimary : undefined\n }\n style={({ pressed }) => [\n styles.primaryButton,\n {\n backgroundColor: t.primaryButtonBackgroundColor,\n borderRadius: t.buttonRadiusPx,\n opacity:\n pressed && onPrimaryPress ? 0.85 : 1,\n },\n ]}\n >\n {data.primaryAction.iconName ? (\n <Feather\n name={data.primaryAction.iconName as never}\n size={16}\n color={t.primaryButtonIconColor}\n />\n ) : null}\n <Text\n style={[\n styles.primaryButtonLabel,\n {\n color: t.primaryButtonForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.primaryAction.label}\n </Text>\n </Pressable>\n </View>\n )}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 600,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 14,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: 10,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n paddingTop: 4,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n qualityPill: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderWidth: 1,\n flexShrink: 1,\n maxWidth: \"65%\",\n },\n qualityPillLabel: {\n fontSize: 12,\n fontWeight: \"600\",\n flexShrink: 1,\n lineHeight: 16,\n },\n title: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n },\n bulletsList: {\n gap: 8,\n },\n bulletRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n },\n bulletDot: {\n width: 6,\n height: 6,\n borderRadius: 999,\n marginTop: 8,\n },\n bulletText: {\n flex: 1,\n fontSize: 14,\n lineHeight: 20,\n },\n callout: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n padding: 12,\n borderWidth: 1,\n },\n calloutText: {\n flex: 1,\n fontSize: 13,\n lineHeight: 19,\n },\n disclaimerRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 8,\n },\n disclaimerText: {\n flex: 1,\n fontSize: 13,\n lineHeight: 18,\n },\n actionsRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n marginTop: 4,\n },\n primaryButton: {\n flexGrow: 2,\n flexBasis: 0,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 18,\n paddingVertical: 13,\n },\n primaryButtonLabel: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n secondaryButton: {\n flexGrow: 1,\n flexBasis: 0,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 18,\n paddingVertical: 12,\n borderWidth: 1,\n },\n secondaryButtonLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n attachedNotice: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 18,\n paddingVertical: 14,\n borderWidth: 1,\n marginTop: 4,\n },\n attachedNoticeLabel: {\n fontSize: 14,\n fontWeight: \"700\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbSymptomImageInsight`. */\nexport interface SymptomImageInsightTheme extends Partial<BaseTheme> {\n // Top accent bar (gradient)\n accentBarStartColor?: string;\n accentBarMidColor?: string;\n accentBarEndColor?: string;\n // Eyebrow + quality pill\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n qualityPillBackgroundColor?: string;\n qualityPillBorderColor?: string;\n qualityPillForegroundColor?: string;\n qualityPillIconColor?: string;\n // Title\n titleColor?: string;\n // Bullets\n bulletDotColor?: string;\n bulletTextColor?: string;\n // Callout\n calloutBackgroundColor?: string;\n calloutBorderColor?: string;\n calloutTextColor?: string;\n calloutIconColor?: string;\n // Disclaimer\n disclaimerColor?: string;\n disclaimerIconColor?: string;\n // Primary action\n primaryButtonBackgroundColor?: string;\n primaryButtonForegroundColor?: string;\n primaryButtonIconColor?: string;\n // Secondary action\n secondaryButtonBackgroundColor?: string;\n secondaryButtonBorderColor?: string;\n secondaryButtonForegroundColor?: string;\n secondaryButtonIconColor?: string;\n // Attached notice\n attachedNoticeBackgroundColor?: string;\n attachedNoticeBorderColor?: string;\n attachedNoticeForegroundColor?: string;\n attachedNoticeIconColor?: string;\n // Radii\n cardRadius?: Radius;\n pillRadius?: Radius;\n buttonRadius?: Radius;\n calloutRadius?: Radius;\n}\n\nexport interface ResolvedSymptomImageInsightTheme {\n base: BaseTheme;\n accentBarColors: readonly [string, string, string];\n eyebrowColor: string;\n eyebrowIconColor: string;\n qualityPillBackgroundColor: string;\n qualityPillBorderColor: string;\n qualityPillForegroundColor: string;\n qualityPillIconColor: string;\n titleColor: string;\n bulletDotColor: string;\n bulletTextColor: string;\n calloutBackgroundColor: string;\n calloutBorderColor: string;\n calloutTextColor: string;\n calloutIconColor: string;\n disclaimerColor: string;\n disclaimerIconColor: string;\n primaryButtonBackgroundColor: string;\n primaryButtonForegroundColor: string;\n primaryButtonIconColor: string;\n secondaryButtonBackgroundColor: string;\n secondaryButtonBorderColor: string;\n secondaryButtonForegroundColor: string;\n secondaryButtonIconColor: string;\n attachedNoticeBackgroundColor: string;\n attachedNoticeBorderColor: string;\n attachedNoticeForegroundColor: string;\n attachedNoticeIconColor: string;\n cardRadiusPx: number;\n pillRadiusPx: number;\n buttonRadiusPx: number;\n calloutRadiusPx: number;\n}\n\nexport function resolveSymptomImageInsightTheme(\n theme?: SymptomImageInsightTheme,\n): ResolvedSymptomImageInsightTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const pillRadius: Radius = theme?.pillRadius ?? \"full\";\n const buttonRadius: Radius = theme?.buttonRadius ?? \"full\";\n const calloutRadius: Radius =\n theme?.calloutRadius ?? base.radius ?? \"lg\";\n\n const blueAccent = \"#2563EB\";\n\n return {\n base,\n accentBarColors: [\n theme?.accentBarStartColor ?? \"#EC4899\",\n theme?.accentBarMidColor ?? \"#F59E0B\",\n theme?.accentBarEndColor ?? \"#3B82F6\",\n ] as const,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n qualityPillBackgroundColor:\n theme?.qualityPillBackgroundColor ?? \"#EFF6FF\",\n qualityPillBorderColor:\n theme?.qualityPillBorderColor ?? \"#BFDBFE\",\n qualityPillForegroundColor:\n theme?.qualityPillForegroundColor ?? blueAccent,\n qualityPillIconColor:\n theme?.qualityPillIconColor ?? blueAccent,\n titleColor: theme?.titleColor ?? base.textColor,\n bulletDotColor: theme?.bulletDotColor ?? \"#60A5FA\",\n bulletTextColor:\n theme?.bulletTextColor ?? base.textColor,\n calloutBackgroundColor:\n theme?.calloutBackgroundColor ?? \"#EFF6FF\",\n calloutBorderColor:\n theme?.calloutBorderColor ?? \"#DBEAFE\",\n calloutTextColor:\n theme?.calloutTextColor ?? base.textColor,\n calloutIconColor:\n theme?.calloutIconColor ?? blueAccent,\n disclaimerColor:\n theme?.disclaimerColor ?? base.mutedTextColor,\n disclaimerIconColor:\n theme?.disclaimerIconColor ?? base.mutedTextColor,\n primaryButtonBackgroundColor:\n theme?.primaryButtonBackgroundColor ?? blueAccent,\n primaryButtonForegroundColor:\n theme?.primaryButtonForegroundColor ?? \"#FFFFFF\",\n primaryButtonIconColor:\n theme?.primaryButtonIconColor ?? \"#FFFFFF\",\n secondaryButtonBackgroundColor:\n theme?.secondaryButtonBackgroundColor ?? base.surfaceColor,\n secondaryButtonBorderColor:\n theme?.secondaryButtonBorderColor ?? base.borderColor,\n secondaryButtonForegroundColor:\n theme?.secondaryButtonForegroundColor ?? base.textColor,\n secondaryButtonIconColor:\n theme?.secondaryButtonIconColor ?? base.textColor,\n attachedNoticeBackgroundColor:\n theme?.attachedNoticeBackgroundColor ?? \"#F0FDF4\",\n attachedNoticeBorderColor:\n theme?.attachedNoticeBorderColor ?? \"#BBF7D0\",\n attachedNoticeForegroundColor:\n theme?.attachedNoticeForegroundColor ?? \"#15803D\",\n attachedNoticeIconColor:\n theme?.attachedNoticeIconColor ?? \"#15803D\",\n cardRadiusPx: radiusToPx[cardRadius],\n pillRadiusPx: radiusToPx[pillRadius],\n buttonRadiusPx: radiusToPx[buttonRadius],\n calloutRadiusPx: radiusToPx[calloutRadius],\n };\n}\n","import React, { useEffect, useMemo, useRef } from \"react\";\nimport {\n Animated,\n Easing,\n Platform,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveSymptomImageReviewTheme } from \"./theme\";\nimport type { AbSymptomImageReviewProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"IMAGE REVIEW\";\nconst DEFAULT_EYEBROW_ICON = \"zap\";\nconst DEFAULT_THUMBNAIL_ICON = \"image\";\n\n// Skeleton bars use these widths (cycling) to mimic a paragraph.\nconst SKELETON_WIDTHS = [\"100%\", \"70%\", \"85%\", \"55%\"] as const;\n\nexport function AbSymptomImageReview({\n data,\n theme,\n style,\n}: AbSymptomImageReviewProps) {\n const t = useMemo(\n () => resolveSymptomImageReviewTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIcon = data.eyebrowIconName ?? DEFAULT_EYEBROW_ICON;\n const thumbnailIcon =\n data.thumbnailIconName ?? DEFAULT_THUMBNAIL_ICON;\n\n // Subtle pulse animation for the skeleton bars.\n const pulseRef = useRef(new Animated.Value(0));\n useEffect(() => {\n if (!t.skeletonAnimated || t.skeletonLineCount <= 0) return;\n const anim = Animated.loop(\n Animated.sequence([\n Animated.timing(pulseRef.current, {\n toValue: 1,\n duration: 900,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n Animated.timing(pulseRef.current, {\n toValue: 0,\n duration: 900,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n ]),\n );\n anim.start();\n return () => {\n anim.stop();\n };\n }, [t.skeletonAnimated, t.skeletonLineCount]);\n const skeletonOpacity = t.skeletonAnimated\n ? pulseRef.current.interpolate({\n inputRange: [0, 1],\n outputRange: [0.55, 1],\n })\n : 1;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <LinearGradient\n colors={t.accentBarColors as unknown as [string, string, string]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.accentBar,\n {\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.eyebrowRow}>\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n\n <View style={styles.heroRow}>\n <View\n style={[\n styles.thumbnail,\n {\n backgroundColor: t.thumbnailBackgroundColor,\n borderRadius: t.thumbnailRadiusPx,\n },\n ]}\n >\n <Feather\n name={thumbnailIcon as never}\n size={26}\n color={t.thumbnailIconColor}\n />\n </View>\n <View style={styles.heroText}>\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n {t.skeletonLineCount > 0 ? (\n <View style={styles.skeletonStack}>\n {Array.from({ length: t.skeletonLineCount }).map(\n (_, i) => (\n <Animated.View\n key={i}\n style={{\n height: 10,\n width: SKELETON_WIDTHS[\n i % SKELETON_WIDTHS.length\n ],\n backgroundColor: t.skeletonColor,\n borderRadius: t.skeletonRadiusPx,\n opacity: skeletonOpacity,\n }}\n />\n ),\n )}\n </View>\n ) : null}\n </View>\n </View>\n\n {data.footer ? (\n <Text\n style={[\n styles.footer,\n { color: t.footerColor, fontFamily },\n ]}\n >\n {data.footer}\n </Text>\n ) : null}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 600,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 14,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n },\n heroRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 14,\n },\n thumbnail: {\n width: 56,\n height: 56,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n heroText: {\n flex: 1,\n gap: 10,\n minWidth: 0,\n paddingTop: 4,\n },\n title: {\n fontSize: 16,\n fontWeight: \"700\",\n lineHeight: 22,\n },\n skeletonStack: {\n gap: 8,\n marginTop: 2,\n },\n footer: {\n fontSize: 13,\n lineHeight: 18,\n marginTop: 2,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbSymptomImageReview`. */\nexport interface SymptomImageReviewTheme extends Partial<BaseTheme> {\n // Top accent bar (gradient)\n accentBarStartColor?: string;\n accentBarMidColor?: string;\n accentBarEndColor?: string;\n // Eyebrow\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n // Thumbnail tile\n thumbnailBackgroundColor?: string;\n thumbnailIconColor?: string;\n // Title\n titleColor?: string;\n // Skeleton lines\n skeletonColor?: string;\n /** Number of skeleton lines to render. Defaults to 2. */\n skeletonLineCount?: number;\n /** If false, the skeleton lines are static (no pulse). Defaults to true. */\n skeletonAnimated?: boolean;\n // Footer\n footerColor?: string;\n // Radii\n cardRadius?: Radius;\n thumbnailRadius?: Radius;\n skeletonRadius?: Radius;\n}\n\nexport interface ResolvedSymptomImageReviewTheme {\n base: BaseTheme;\n accentBarColors: readonly [string, string, string];\n eyebrowColor: string;\n eyebrowIconColor: string;\n thumbnailBackgroundColor: string;\n thumbnailIconColor: string;\n titleColor: string;\n skeletonColor: string;\n skeletonLineCount: number;\n skeletonAnimated: boolean;\n footerColor: string;\n cardRadiusPx: number;\n thumbnailRadiusPx: number;\n skeletonRadiusPx: number;\n}\n\nexport function resolveSymptomImageReviewTheme(\n theme?: SymptomImageReviewTheme,\n): ResolvedSymptomImageReviewTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const thumbnailRadius: Radius =\n theme?.thumbnailRadius ?? base.radius ?? \"lg\";\n const skeletonRadius: Radius =\n theme?.skeletonRadius ?? \"full\";\n\n return {\n base,\n accentBarColors: [\n theme?.accentBarStartColor ?? \"#EC4899\",\n theme?.accentBarMidColor ?? \"#F59E0B\",\n theme?.accentBarEndColor ?? \"#3B82F6\",\n ] as const,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n thumbnailBackgroundColor:\n theme?.thumbnailBackgroundColor ?? \"#F1F5F9\",\n thumbnailIconColor:\n theme?.thumbnailIconColor ?? base.mutedTextColor,\n titleColor: theme?.titleColor ?? base.textColor,\n skeletonColor: theme?.skeletonColor ?? \"#E2E8F0\",\n skeletonLineCount: Math.max(0, theme?.skeletonLineCount ?? 2),\n skeletonAnimated: theme?.skeletonAnimated ?? true,\n footerColor: theme?.footerColor ?? base.mutedTextColor,\n cardRadiusPx: radiusToPx[cardRadius],\n thumbnailRadiusPx: radiusToPx[thumbnailRadius],\n skeletonRadiusPx: radiusToPx[skeletonRadius],\n };\n}\n","import React, { useMemo, useRef } from \"react\";\nimport {\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveSymptomPhotoTheme } from \"./theme\";\nimport type { AbSymptomPhotoProps } from \"./types\";\n\nconst DEFAULT_EYEBROW = \"SYMPTOM PHOTO\";\nconst DEFAULT_EYEBROW_ICON = \"camera\";\nconst DEFAULT_SECURITY_ICON = \"shield\";\nconst DEFAULT_PRIMARY_ICON = \"camera\";\nconst DEFAULT_SECONDARY_ICON = \"image\";\nconst DEFAULT_DISMISS_ICON = \"x\";\nconst DEFAULT_SKIPPED_NOTICE_LABEL =\n \"Skipped — you can add a photo any time\";\n\nexport function AbSymptomPhoto({\n data,\n theme,\n style,\n onPrimaryPress,\n onSecondaryPress,\n onDismissPress,\n onSkippedNoticePress,\n}: AbSymptomPhotoProps) {\n const t = useMemo(\n () => resolveSymptomPhotoTheme(theme),\n [theme],\n );\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n const eyebrowIcon = data.eyebrowIconName ?? DEFAULT_EYEBROW_ICON;\n const securityIcon =\n data.securityIconName ?? DEFAULT_SECURITY_ICON;\n const primaryIcon =\n data.primaryAction.iconName ?? DEFAULT_PRIMARY_ICON;\n const secondaryIcon =\n data.secondaryAction?.iconName ?? DEFAULT_SECONDARY_ICON;\n const dismissIcon =\n data.dismissAction?.iconName ?? DEFAULT_DISMISS_ICON;\n const skippedLabel =\n data.skippedNotice?.label ?? DEFAULT_SKIPPED_NOTICE_LABEL;\n const isSkipped = data.skipped ?? false;\n\n // One-shot latches on the optional handlers.\n const primaryFiredRef = useRef<boolean>(false);\n const secondaryFiredRef = useRef<boolean>(false);\n const dismissFiredRef = useRef<boolean>(false);\n const skippedFiredRef = useRef<boolean>(false);\n const handlePrimary = () => {\n if (primaryFiredRef.current) return;\n primaryFiredRef.current = true;\n onPrimaryPress?.();\n };\n const handleSecondary = () => {\n if (secondaryFiredRef.current) return;\n secondaryFiredRef.current = true;\n onSecondaryPress?.();\n };\n const handleDismiss = () => {\n if (dismissFiredRef.current) return;\n dismissFiredRef.current = true;\n onDismissPress?.();\n };\n const handleSkippedNotice = () => {\n if (skippedFiredRef.current) return;\n skippedFiredRef.current = true;\n onSkippedNoticePress?.();\n };\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <LinearGradient\n colors={t.accentBarColors as unknown as [string, string, string]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={[\n styles.accentBar,\n {\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View style={styles.eyebrowRow}>\n <Feather\n name={eyebrowIcon as never}\n size={14}\n color={t.eyebrowIconColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.eyebrowColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n {data.optionalPill ? (\n <View\n style={[\n styles.optionalPill,\n {\n backgroundColor: t.optionalPillBackgroundColor,\n borderColor: t.optionalPillBorderColor,\n borderRadius: t.pillRadiusPx,\n },\n ]}\n >\n <Text\n style={[\n styles.optionalPillLabel,\n {\n color: t.optionalPillForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.optionalPill.label}\n </Text>\n </View>\n ) : null}\n </View>\n\n <Text\n style={[\n styles.title,\n { color: t.titleColor, fontFamily },\n ]}\n >\n {data.title}\n </Text>\n {data.body ? (\n <Text\n style={[\n styles.bodyText,\n { color: t.bodyColor, fontFamily },\n ]}\n >\n {data.body}\n </Text>\n ) : null}\n\n {data.securityNote ? (\n <View style={styles.securityRow}>\n <Feather\n name={securityIcon as never}\n size={14}\n color={t.securityIconColor}\n />\n <Text\n style={[\n styles.securityNote,\n {\n color: t.securityNoteColor,\n fontFamily,\n },\n ]}\n >\n {data.securityNote}\n </Text>\n </View>\n ) : null}\n\n {isSkipped ? (\n <Pressable\n accessibilityRole={\n onSkippedNoticePress ? \"button\" : undefined\n }\n disabled={!onSkippedNoticePress}\n onPress={\n onSkippedNoticePress\n ? handleSkippedNotice\n : undefined\n }\n style={({ pressed }) => [\n styles.skippedNotice,\n {\n backgroundColor: t.skippedNoticeBackgroundColor,\n borderColor: t.skippedNoticeBorderColor,\n borderRadius: t.buttonRadiusPx,\n opacity:\n pressed && onSkippedNoticePress ? 0.85 : 1,\n },\n ]}\n >\n <Text\n style={[\n styles.skippedNoticeLabel,\n {\n color: t.skippedNoticeForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {skippedLabel}\n </Text>\n </Pressable>\n ) : (\n <View style={styles.actionsBlock}>\n <View style={styles.actionsRow}>\n <Pressable\n accessibilityRole=\"button\"\n disabled={!onPrimaryPress}\n onPress={\n onPrimaryPress ? handlePrimary : undefined\n }\n style={({ pressed }) => [\n styles.primaryButton,\n {\n backgroundColor:\n t.primaryButtonBackgroundColor,\n borderRadius: t.buttonRadiusPx,\n opacity:\n pressed && onPrimaryPress ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={primaryIcon as never}\n size={16}\n color={t.primaryButtonIconColor}\n />\n <Text\n style={[\n styles.primaryButtonLabel,\n {\n color: t.primaryButtonForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.primaryAction.label}\n </Text>\n </Pressable>\n {data.secondaryAction ? (\n <Pressable\n accessibilityRole=\"button\"\n disabled={!onSecondaryPress}\n onPress={\n onSecondaryPress\n ? handleSecondary\n : undefined\n }\n style={({ pressed }) => [\n styles.secondaryButton,\n {\n backgroundColor:\n t.secondaryButtonBackgroundColor,\n borderColor:\n t.secondaryButtonBorderColor,\n borderRadius: t.buttonRadiusPx,\n opacity:\n pressed && onSecondaryPress ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={secondaryIcon as never}\n size={16}\n color={t.secondaryButtonIconColor}\n />\n <Text\n style={[\n styles.secondaryButtonLabel,\n {\n color: t.secondaryButtonForegroundColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.secondaryAction.label}\n </Text>\n </Pressable>\n ) : null}\n </View>\n {data.dismissAction ? (\n <Pressable\n accessibilityRole={\n onDismissPress ? \"button\" : undefined\n }\n disabled={!onDismissPress}\n onPress={\n onDismissPress ? handleDismiss : undefined\n }\n style={({ pressed }) => [\n styles.dismissAction,\n {\n opacity:\n pressed && onDismissPress ? 0.7 : 1,\n },\n ]}\n hitSlop={6}\n >\n <Feather\n name={dismissIcon as never}\n size={14}\n color={t.dismissIconColor}\n />\n <Text\n style={[\n styles.dismissActionLabel,\n {\n color: t.dismissActionColor,\n fontFamily,\n },\n ]}\n numberOfLines={1}\n >\n {data.dismissAction.label}\n </Text>\n </Pressable>\n ) : null}\n </View>\n )}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 600,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 18,\n gap: 12,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 10,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 1,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.4,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n optionalPill: {\n paddingHorizontal: 12,\n paddingVertical: 5,\n borderWidth: 1,\n },\n optionalPillLabel: {\n fontSize: 12,\n fontWeight: \"600\",\n },\n title: {\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n marginTop: 2,\n },\n bodyText: {\n fontSize: 14,\n lineHeight: 20,\n },\n securityRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 8,\n marginTop: 2,\n },\n securityNote: {\n flex: 1,\n fontSize: 13,\n lineHeight: 19,\n },\n actionsBlock: {\n gap: 10,\n marginTop: 4,\n },\n actionsRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n flexWrap: \"wrap\",\n },\n primaryButton: {\n flexGrow: 1,\n flexBasis: 0,\n minWidth: 160,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 18,\n paddingVertical: 13,\n },\n primaryButtonLabel: {\n fontSize: 15,\n fontWeight: \"700\",\n },\n secondaryButton: {\n flexGrow: 1,\n flexBasis: 0,\n minWidth: 160,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n paddingHorizontal: 18,\n paddingVertical: 12,\n borderWidth: 1,\n },\n secondaryButtonLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n dismissAction: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 6,\n alignSelf: \"center\",\n paddingHorizontal: 12,\n paddingVertical: 8,\n },\n dismissActionLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n skippedNotice: {\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingHorizontal: 18,\n paddingVertical: 14,\n borderWidth: 1,\n marginTop: 4,\n },\n skippedNoticeLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `AbSymptomPhoto`. */\nexport interface SymptomPhotoTheme extends Partial<BaseTheme> {\n // Top accent bar (gradient)\n accentBarStartColor?: string;\n accentBarMidColor?: string;\n accentBarEndColor?: string;\n // Eyebrow + optional pill\n eyebrowColor?: string;\n eyebrowIconColor?: string;\n optionalPillBackgroundColor?: string;\n optionalPillBorderColor?: string;\n optionalPillForegroundColor?: string;\n // Title + body + security note\n titleColor?: string;\n bodyColor?: string;\n securityNoteColor?: string;\n securityIconColor?: string;\n // Primary action\n primaryButtonBackgroundColor?: string;\n primaryButtonForegroundColor?: string;\n primaryButtonIconColor?: string;\n // Secondary action\n secondaryButtonBackgroundColor?: string;\n secondaryButtonBorderColor?: string;\n secondaryButtonForegroundColor?: string;\n secondaryButtonIconColor?: string;\n // Dismiss action\n dismissActionColor?: string;\n dismissIconColor?: string;\n // Skipped notice\n skippedNoticeBackgroundColor?: string;\n skippedNoticeBorderColor?: string;\n skippedNoticeForegroundColor?: string;\n // Radii\n cardRadius?: Radius;\n buttonRadius?: Radius;\n pillRadius?: Radius;\n}\n\nexport interface ResolvedSymptomPhotoTheme {\n base: BaseTheme;\n accentBarColors: readonly [string, string, string];\n eyebrowColor: string;\n eyebrowIconColor: string;\n optionalPillBackgroundColor: string;\n optionalPillBorderColor: string;\n optionalPillForegroundColor: string;\n titleColor: string;\n bodyColor: string;\n securityNoteColor: string;\n securityIconColor: string;\n primaryButtonBackgroundColor: string;\n primaryButtonForegroundColor: string;\n primaryButtonIconColor: string;\n secondaryButtonBackgroundColor: string;\n secondaryButtonBorderColor: string;\n secondaryButtonForegroundColor: string;\n secondaryButtonIconColor: string;\n dismissActionColor: string;\n dismissIconColor: string;\n skippedNoticeBackgroundColor: string;\n skippedNoticeBorderColor: string;\n skippedNoticeForegroundColor: string;\n cardRadiusPx: number;\n buttonRadiusPx: number;\n pillRadiusPx: number;\n}\n\nexport function resolveSymptomPhotoTheme(\n theme?: SymptomPhotoTheme,\n): ResolvedSymptomPhotoTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme.radius -> literal fallback.\n const cardRadius: Radius = theme?.cardRadius ?? base.radius ?? \"lg\";\n const buttonRadius: Radius = theme?.buttonRadius ?? \"full\";\n const pillRadius: Radius = theme?.pillRadius ?? \"full\";\n\n const blueAccent = \"#2563EB\";\n\n return {\n base,\n accentBarColors: [\n theme?.accentBarStartColor ?? \"#EC4899\",\n theme?.accentBarMidColor ?? \"#F59E0B\",\n theme?.accentBarEndColor ?? \"#3B82F6\",\n ] as const,\n eyebrowColor: theme?.eyebrowColor ?? base.mutedTextColor,\n eyebrowIconColor:\n theme?.eyebrowIconColor ?? base.mutedTextColor,\n optionalPillBackgroundColor:\n theme?.optionalPillBackgroundColor ?? \"#EFF6FF\",\n optionalPillBorderColor:\n theme?.optionalPillBorderColor ?? \"#BFDBFE\",\n optionalPillForegroundColor:\n theme?.optionalPillForegroundColor ?? blueAccent,\n titleColor: theme?.titleColor ?? base.textColor,\n bodyColor: theme?.bodyColor ?? base.mutedTextColor,\n securityNoteColor:\n theme?.securityNoteColor ?? base.mutedTextColor,\n securityIconColor:\n theme?.securityIconColor ?? base.mutedTextColor,\n primaryButtonBackgroundColor:\n theme?.primaryButtonBackgroundColor ?? blueAccent,\n primaryButtonForegroundColor:\n theme?.primaryButtonForegroundColor ?? \"#FFFFFF\",\n primaryButtonIconColor:\n theme?.primaryButtonIconColor ?? \"#FFFFFF\",\n secondaryButtonBackgroundColor:\n theme?.secondaryButtonBackgroundColor ?? base.surfaceColor,\n secondaryButtonBorderColor:\n theme?.secondaryButtonBorderColor ?? base.borderColor,\n secondaryButtonForegroundColor:\n theme?.secondaryButtonForegroundColor ?? base.textColor,\n secondaryButtonIconColor:\n theme?.secondaryButtonIconColor ?? base.textColor,\n dismissActionColor:\n theme?.dismissActionColor ?? base.mutedTextColor,\n dismissIconColor:\n theme?.dismissIconColor ?? base.mutedTextColor,\n skippedNoticeBackgroundColor:\n theme?.skippedNoticeBackgroundColor ?? \"#F8FAFC\",\n skippedNoticeBorderColor:\n theme?.skippedNoticeBorderColor ?? base.borderColor,\n skippedNoticeForegroundColor:\n theme?.skippedNoticeForegroundColor ?? base.textColor,\n cardRadiusPx: radiusToPx[cardRadius],\n buttonRadiusPx: radiusToPx[buttonRadius],\n pillRadiusPx: radiusToPx[pillRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, StyleSheet, Text, View } from \"react-native\";\nimport { Feather, MaterialCommunityIcons } from \"@expo/vector-icons\";\n\nimport { resolveTriageResultTheme } from \"./theme\";\nimport type { TriageUrgency } from \"./payload\";\nimport type {\n AbTriageResultProps,\n ResolvedTriageResultTheme,\n} from \"./types\";\n\nconst URGENCY_LABEL: Record<TriageUrgency, string> = {\n routine: \"Routine\",\n urgent: \"Urgent\",\n emergent: \"Emergent\",\n};\n\nexport function AbTriageResult({ data, theme, style }: AbTriageResultProps) {\n const t = useMemo(() => resolveTriageResultTheme(theme), [theme]);\n const badge = t.urgencyBadges[data.urgency];\n\n const fontFamily = t.base.fontFamily;\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View\n style={[\n styles.accentBar,\n {\n backgroundColor: t.accentBarColor,\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View style={styles.titleGroup}>\n <Feather\n name=\"activity\"\n size={18}\n color={t.protocolTextColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.protocolTextColor, fontFamily },\n ]}\n >\n TRIAGE RESULT\n </Text>\n </View>\n\n <UrgencyBadge\n urgency={data.urgency}\n backgroundColor={badge.backgroundColor}\n foregroundColor={badge.foregroundColor}\n fontFamily={fontFamily}\n />\n </View>\n\n <View style={styles.section}>\n <Text\n style={[\n styles.eyebrow,\n { color: t.protocolTextColor, fontFamily },\n ]}\n >\n CHIEF COMPLAINT\n </Text>\n <Text\n style={[\n styles.headline,\n { color: t.base.textColor, fontFamily },\n ]}\n >\n {data.chiefComplaint}\n </Text>\n </View>\n\n <View style={styles.section}>\n <View style={styles.titleGroup}>\n <MaterialCommunityIcons\n name=\"shield-alert-outline\"\n size={18}\n color={t.protocolTextColor}\n />\n <Text\n style={[\n styles.eyebrow,\n { color: t.protocolTextColor, fontFamily },\n ]}\n >\n RED FLAGS CHECKED\n </Text>\n </View>\n <RedFlagGrid\n items={data.redFlags}\n dotColor={t.redFlagDotColor}\n textColor={t.base.textColor}\n fontFamily={fontFamily}\n />\n </View>\n\n <ProtocolPanel theme={t} data={data} />\n </View>\n </View>\n );\n}\n\nfunction UrgencyBadge({\n urgency,\n backgroundColor,\n foregroundColor,\n fontFamily,\n}: {\n urgency: TriageUrgency;\n backgroundColor: string;\n foregroundColor: string;\n fontFamily: string;\n}) {\n return (\n <View style={[styles.badge, { backgroundColor }]}>\n <View style={[styles.badgeDot, { backgroundColor: foregroundColor }]} />\n <Text\n style={[\n styles.badgeLabel,\n { color: foregroundColor, fontFamily },\n ]}\n >\n {URGENCY_LABEL[urgency]}\n </Text>\n </View>\n );\n}\n\nfunction RedFlagGrid({\n items,\n dotColor,\n textColor,\n fontFamily,\n}: {\n items: string[];\n dotColor: string;\n textColor: string;\n fontFamily: string;\n}) {\n return (\n <View style={styles.flagGrid}>\n {items.map((label, idx) => (\n <View key={`${label}-${idx}`} style={styles.flagItem}>\n <View style={[styles.flagDot, { backgroundColor: dotColor }]} />\n <Text\n style={[styles.flagLabel, { color: textColor, fontFamily }]}\n numberOfLines={2}\n >\n {label}\n </Text>\n </View>\n ))}\n </View>\n );\n}\n\nfunction ProtocolPanel({\n theme: t,\n data,\n}: {\n theme: ResolvedTriageResultTheme;\n data: AbTriageResultProps[\"data\"];\n}) {\n const { protocol } = data;\n return (\n <View\n style={[\n styles.protocol,\n {\n backgroundColor: t.protocolBackgroundColor,\n borderColor: t.protocolBorderColor,\n },\n ]}\n >\n <Text\n style={[\n styles.protocolName,\n { color: t.base.textColor, fontFamily: t.base.fontFamily },\n ]}\n >\n {protocol.name}\n </Text>\n {protocol.umlsCodes && protocol.umlsCodes.length > 0 ? (\n <Text\n style={[\n styles.protocolMono,\n {\n color: t.protocolTextColor,\n fontFamily: t.monoFontFamily,\n },\n ]}\n >\n UMLS: {protocol.umlsCodes.join(\", \")}\n </Text>\n ) : null}\n {protocol.fhirReference ? (\n <Text\n style={[\n styles.protocolMono,\n {\n color: t.protocolTextColor,\n fontFamily: t.monoFontFamily,\n },\n ]}\n >\n FHIR: {protocol.fhirReference}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 520,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 20,\n gap: 18,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n },\n titleGroup: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n section: {\n gap: 10,\n },\n headline: {\n fontSize: 20,\n fontWeight: \"700\",\n lineHeight: 26,\n },\n badge: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 9999,\n },\n badgeDot: {\n width: 6,\n height: 6,\n borderRadius: 3,\n },\n badgeLabel: {\n fontSize: 13,\n fontWeight: \"600\",\n },\n flagGrid: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n rowGap: 10,\n },\n flagItem: {\n width: \"50%\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n paddingRight: 12,\n },\n flagDot: {\n width: 8,\n height: 8,\n borderRadius: 4,\n },\n flagLabel: {\n fontSize: 14,\n fontWeight: \"500\",\n flexShrink: 1,\n },\n protocol: {\n borderWidth: 1,\n borderRadius: 12,\n padding: 14,\n gap: 4,\n },\n protocolName: {\n fontSize: 14,\n fontWeight: \"500\",\n marginBottom: 4,\n },\n protocolMono: {\n fontSize: 13,\n lineHeight: 18,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { TriageUrgency } from \"./payload\";\n\n/** Badge color pair (background + foreground/text). */\nexport interface BadgeSkin {\n backgroundColor: string;\n foregroundColor: string;\n}\n\n/**\n * Theme overrides for `AbTriageResult`.\n *\n * Extends `Partial<BaseTheme>` so callers can pass `tone`, `mode`, etc. and\n * get the shared cascading behavior, then layers component-specific keys for\n * the urgency badge palette, the red-flag bullet color, and the protocol\n * footer panel.\n */\nexport interface TriageResultTheme extends Partial<BaseTheme> {\n /** Color of the thin accent bar across the top of the card. */\n accentBarColor?: string;\n /** Per-urgency badge colors. Merged on top of defaults. */\n urgencyBadges?: Partial<Record<TriageUrgency, Partial<BadgeSkin>>>;\n /** Color of the bullet dot next to each red-flag item. */\n redFlagDotColor?: string;\n /** Background color of the protocol-provenance footer panel. */\n protocolBackgroundColor?: string;\n /** Border color of the protocol footer panel. */\n protocolBorderColor?: string;\n /** Text color of the protocol panel. */\n protocolTextColor?: string;\n /** Monospace font family used for codes / FHIR refs. */\n monoFontFamily?: string;\n /** Card corner radius token. Defaults to \"lg\". */\n cardRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the card internals. */\nexport interface ResolvedTriageResultTheme {\n base: BaseTheme;\n accentBarColor: string;\n urgencyBadges: Record<TriageUrgency, BadgeSkin>;\n redFlagDotColor: string;\n protocolBackgroundColor: string;\n protocolBorderColor: string;\n protocolTextColor: string;\n monoFontFamily: string;\n cardRadiusPx: number;\n}\n\nconst defaultUrgencyBadges: Record<TriageUrgency, BadgeSkin> = {\n routine: { backgroundColor: \"#E8F1FE\", foregroundColor: \"#2F5DFF\" },\n urgent: { backgroundColor: \"#FEF3C7\", foregroundColor: \"#B45309\" },\n emergent: { backgroundColor: \"#FEE2E2\", foregroundColor: \"#B91C1C\" },\n};\n\nconst monoFallback =\n 'ui-monospace, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace';\n\nexport function resolveTriageResultTheme(\n theme?: TriageResultTheme,\n): ResolvedTriageResultTheme {\n const base = resolveBaseTheme(theme);\n const cardRadius: Radius = theme?.cardRadius ?? \"lg\";\n\n const overrides = theme?.urgencyBadges ?? {};\n const urgencyBadges: Record<TriageUrgency, BadgeSkin> = {\n routine: { ...defaultUrgencyBadges.routine, ...(overrides.routine ?? {}) },\n urgent: { ...defaultUrgencyBadges.urgent, ...(overrides.urgent ?? {}) },\n emergent: {\n ...defaultUrgencyBadges.emergent,\n ...(overrides.emergent ?? {}),\n },\n };\n\n return {\n base,\n accentBarColor: theme?.accentBarColor ?? \"#2F5DFF\",\n urgencyBadges,\n redFlagDotColor: theme?.redFlagDotColor ?? \"#22C55E\",\n protocolBackgroundColor: theme?.protocolBackgroundColor ?? \"#F4F6FB\",\n protocolBorderColor: theme?.protocolBorderColor ?? \"#E5E8EF\",\n protocolTextColor: theme?.protocolTextColor ?? \"#5B6478\",\n monoFontFamily: theme?.monoFontFamily ?? monoFallback,\n cardRadiusPx: radiusToPx[cardRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, StyleSheet, Text, View } from \"react-native\";\nimport { Feather } from \"@expo/vector-icons\";\n\nimport { resolveTriageSummaryTheme } from \"./theme\";\nimport type { TriageSummaryUrgency } from \"./payload\";\nimport type {\n AbTriageSummaryProps,\n ResolvedTriageSummaryTheme,\n} from \"./types\";\n\nconst URGENCY_LABEL: Record<TriageSummaryUrgency, string> = {\n routine: \"Routine\",\n urgent: \"Urgent\",\n emergent: \"Emergent\",\n};\n\ninterface Row {\n label: string;\n value: string;\n}\n\nexport function AbTriageSummary({ data, theme, style }: AbTriageSummaryProps) {\n const t = useMemo(() => resolveTriageSummaryTheme(theme), [theme]);\n const badge = t.urgencyBadges[data.urgency];\n const fontFamily = t.base.fontFamily;\n\n const rows: Row[] = useMemo(() => {\n const r: Row[] = [\n { label: \"Acuity\", value: data.acuity },\n { label: \"Recommended next step\", value: data.nextStep },\n { label: \"Urgency level\", value: data.urgencyLevel },\n { label: \"Protocol source\", value: data.protocolSource },\n ];\n if (data.estimatedCostRange) {\n r.push({ label: \"Estimated cost range\", value: data.estimatedCostRange });\n }\n if (data.estimatedTimeToCare) {\n r.push({\n label: \"Estimated time to care\",\n value: data.estimatedTimeToCare,\n });\n }\n return r;\n }, [data]);\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View\n style={[\n styles.accentBar,\n {\n backgroundColor: t.accentBarColor,\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.headerRow}>\n <View style={styles.titleGroup}>\n <Feather name=\"clipboard\" size={18} color={t.rowLabelColor} />\n <Text\n style={[\n styles.eyebrow,\n { color: t.rowLabelColor, fontFamily },\n ]}\n >\n TRIAGE SUMMARY\n </Text>\n </View>\n\n <UrgencyBadge\n label={data.urgencyLabel ?? URGENCY_LABEL[data.urgency]}\n backgroundColor={badge.backgroundColor}\n foregroundColor={badge.foregroundColor}\n fontFamily={fontFamily}\n />\n </View>\n\n <Text\n style={[\n styles.headline,\n { color: t.base.textColor, fontFamily },\n ]}\n >\n {data.recommendation}\n </Text>\n\n <View style={[styles.rows, { rowGap: t.rowGap }]}>\n {rows.map((row, idx) => (\n <SummaryRow key={`${row.label}-${idx}`} row={row} theme={t} />\n ))}\n </View>\n </View>\n </View>\n );\n}\n\nfunction UrgencyBadge({\n label,\n backgroundColor,\n foregroundColor,\n fontFamily,\n}: {\n label: string;\n backgroundColor: string;\n foregroundColor: string;\n fontFamily: string;\n}) {\n return (\n <View style={[styles.badge, { backgroundColor }]}>\n <View style={[styles.badgeDot, { backgroundColor: foregroundColor }]} />\n <Text\n style={[\n styles.badgeLabel,\n { color: foregroundColor, fontFamily },\n ]}\n >\n {label}\n </Text>\n </View>\n );\n}\n\nfunction SummaryRow({\n row,\n theme: t,\n}: {\n row: Row;\n theme: ResolvedTriageSummaryTheme;\n}) {\n return (\n <View style={styles.row}>\n <Text\n style={[\n styles.rowLabel,\n { color: t.rowLabelColor, fontFamily: t.base.fontFamily },\n ]}\n >\n {row.label}\n </Text>\n <Text\n style={[\n styles.rowValue,\n { color: t.rowValueColor, fontFamily: t.base.fontFamily },\n ]}\n >\n {row.value}\n </Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 520,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 20,\n gap: 16,\n },\n headerRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n },\n titleGroup: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n },\n headline: {\n fontSize: 20,\n fontWeight: \"700\",\n lineHeight: 26,\n },\n badge: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 9999,\n },\n badgeDot: {\n width: 6,\n height: 6,\n borderRadius: 3,\n },\n badgeLabel: {\n fontSize: 13,\n fontWeight: \"600\",\n },\n rows: {\n marginTop: 4,\n },\n row: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 16,\n },\n rowLabel: {\n flex: 4,\n fontSize: 15,\n lineHeight: 22,\n fontWeight: \"400\",\n },\n rowValue: {\n flex: 6,\n fontSize: 15,\n lineHeight: 22,\n fontWeight: \"600\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { TriageSummaryUrgency } from \"./payload\";\n\n/** Badge color pair (background + foreground/text). */\nexport interface BadgeSkin {\n backgroundColor: string;\n foregroundColor: string;\n}\n\n/**\n * Theme overrides for `AbTriageSummary`.\n *\n * Extends `Partial<BaseTheme>` so callers can pass `tone`, `mode`, etc. and\n * get the shared cascading behavior, then layers component-specific keys for\n * the urgency badge palette and the row label/value colors.\n */\nexport interface TriageSummaryTheme extends Partial<BaseTheme> {\n /** Color of the thin accent bar across the top of the card. */\n accentBarColor?: string;\n /** Per-urgency badge colors. Merged on top of defaults. */\n urgencyBadges?: Partial<Record<TriageSummaryUrgency, Partial<BadgeSkin>>>;\n /** Color of the left-column row labels. */\n rowLabelColor?: string;\n /** Color of the right-column row values. */\n rowValueColor?: string;\n /** Vertical gap between rows. Defaults to 14. */\n rowGap?: number;\n /** Card corner radius token. Defaults to \"lg\". */\n cardRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the card internals. */\nexport interface ResolvedTriageSummaryTheme {\n base: BaseTheme;\n accentBarColor: string;\n urgencyBadges: Record<TriageSummaryUrgency, BadgeSkin>;\n rowLabelColor: string;\n rowValueColor: string;\n rowGap: number;\n cardRadiusPx: number;\n}\n\nconst defaultUrgencyBadges: Record<TriageSummaryUrgency, BadgeSkin> = {\n routine: { backgroundColor: \"#E8F1FE\", foregroundColor: \"#2F5DFF\" },\n urgent: { backgroundColor: \"#FEF3C7\", foregroundColor: \"#B45309\" },\n emergent: { backgroundColor: \"#FEE2E2\", foregroundColor: \"#B91C1C\" },\n};\n\nexport function resolveTriageSummaryTheme(\n theme?: TriageSummaryTheme,\n): ResolvedTriageSummaryTheme {\n const base = resolveBaseTheme(theme);\n const cardRadius: Radius = theme?.cardRadius ?? \"lg\";\n\n const overrides = theme?.urgencyBadges ?? {};\n const urgencyBadges: Record<TriageSummaryUrgency, BadgeSkin> = {\n routine: { ...defaultUrgencyBadges.routine, ...(overrides.routine ?? {}) },\n urgent: { ...defaultUrgencyBadges.urgent, ...(overrides.urgent ?? {}) },\n emergent: {\n ...defaultUrgencyBadges.emergent,\n ...(overrides.emergent ?? {}),\n },\n };\n\n return {\n base,\n accentBarColor: theme?.accentBarColor ?? \"#2F5DFF\",\n urgencyBadges,\n rowLabelColor: theme?.rowLabelColor ?? \"#8A93A6\",\n rowValueColor: theme?.rowValueColor ?? base.textColor,\n rowGap: theme?.rowGap ?? 14,\n cardRadiusPx: radiusToPx[cardRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { Platform, Pressable, StyleSheet, Text, View } from \"react-native\";\nimport {\n Feather,\n Ionicons,\n MaterialCommunityIcons,\n MaterialIcons,\n} from \"@expo/vector-icons\";\n\nimport { resolveWhatHappensNextTheme } from \"./theme\";\nimport type {\n WhatHappensCallout,\n WhatHappensIconFamily,\n WhatHappensTone,\n} from \"./payload\";\nimport type {\n AbWhatHappensNextProps,\n ResolvedWhatHappensNextTheme,\n} from \"./types\";\n\nconst DEFAULT_EYEBROW = \"WHAT HAPPENS NEXT\";\n\ninterface IconSpec {\n family: WhatHappensIconFamily;\n name: string;\n}\n\nconst TONE_DEFAULT_ICON: Record<WhatHappensTone, IconSpec> = {\n neutral: { family: \"Feather\", name: \"clock\" },\n info: { family: \"Feather\", name: \"info\" },\n success: { family: \"Feather\", name: \"check-circle\" },\n warning: { family: \"Feather\", name: \"arrow-right\" },\n danger: { family: \"Feather\", name: \"alert-triangle\" },\n};\n\nfunction renderIcon(\n family: WhatHappensIconFamily,\n name: string,\n size: number,\n color: string,\n) {\n switch (family) {\n case \"Feather\":\n return <Feather name={name as never} size={size} color={color} />;\n case \"Ionicons\":\n return <Ionicons name={name as never} size={size} color={color} />;\n case \"MaterialIcons\":\n return <MaterialIcons name={name as never} size={size} color={color} />;\n case \"MaterialCommunityIcons\":\n default:\n return (\n <MaterialCommunityIcons\n name={name as never}\n size={size}\n color={color}\n />\n );\n }\n}\n\nexport function AbWhatHappensNext({\n data,\n theme,\n onCallActionPress,\n onCalloutPress,\n style,\n}: AbWhatHappensNextProps) {\n const t = useMemo(() => resolveWhatHappensNextTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n const eyebrow = data.eyebrow ?? DEFAULT_EYEBROW;\n\n const cardShadow = Platform.select({\n web: { boxShadow: \"0px 6px 24px rgba(15, 23, 42, 0.08)\" },\n default: {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 6 },\n elevation: 3,\n },\n });\n\n const callTone = data.callAction?.tone ?? \"danger\";\n const callPalette = t.callActionPalettes[callTone];\n\n return (\n <View\n style={[\n styles.card,\n cardShadow,\n {\n backgroundColor: t.base.surfaceColor,\n borderColor: t.base.borderColor,\n borderRadius: t.cardRadiusPx,\n },\n style,\n ]}\n >\n <View\n style={[\n styles.accentBar,\n {\n backgroundColor: t.accentBarColor,\n borderTopLeftRadius: t.cardRadiusPx,\n borderTopRightRadius: t.cardRadiusPx,\n },\n ]}\n />\n\n <View style={styles.body}>\n <View style={styles.eyebrowRow}>\n <Feather name=\"compass\" size={16} color={t.base.mutedTextColor} />\n <Text\n style={[\n styles.eyebrow,\n { color: t.base.mutedTextColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {eyebrow}\n </Text>\n </View>\n\n {data.steps.length > 0 ? (\n <View style={styles.steps}>\n {data.steps.map((step, idx) => (\n <View key={step.id} style={styles.stepRow}>\n <View\n style={[\n styles.stepNumber,\n { backgroundColor: t.stepNumberBackgroundColor },\n ]}\n >\n <Text\n style={[\n styles.stepNumberText,\n {\n color: t.stepNumberForegroundColor,\n fontFamily,\n },\n ]}\n >\n {idx + 1}\n </Text>\n </View>\n <Text\n style={[\n styles.stepText,\n { color: t.stepTextColor, fontFamily },\n ]}\n >\n {step.text}\n </Text>\n </View>\n ))}\n </View>\n ) : null}\n\n {data.callouts && data.callouts.length > 0 ? (\n <View style={styles.callouts}>\n {data.callouts.map((callout) => (\n <CalloutPanel\n key={callout.id}\n callout={callout}\n theme={t}\n onPress={onCalloutPress}\n />\n ))}\n </View>\n ) : null}\n\n {data.callAction ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={data.callAction.label}\n onPress={onCallActionPress}\n style={({ pressed }) => [\n styles.callAction,\n {\n backgroundColor: callPalette.backgroundColor,\n borderColor: callPalette.borderColor,\n borderRadius: t.callActionRadiusPx,\n opacity: pressed ? 0.9 : 1,\n },\n ]}\n >\n {renderIcon(\n data.callAction.iconFamily ?? \"Feather\",\n data.callAction.iconName ?? \"phone\",\n 18,\n callPalette.foregroundColor,\n )}\n <Text\n style={[\n styles.callActionLabel,\n { color: callPalette.foregroundColor, fontFamily },\n ]}\n >\n {data.callAction.label}\n </Text>\n </Pressable>\n ) : null}\n </View>\n </View>\n );\n}\n\nfunction CalloutPanel({\n callout,\n theme: t,\n onPress,\n}: {\n callout: WhatHappensCallout;\n theme: ResolvedWhatHappensNextTheme;\n onPress?: (callout: WhatHappensCallout) => void;\n}) {\n const fontFamily = t.base.fontFamily;\n const tone = callout.tone ?? \"neutral\";\n const palette = t.calloutPalettes[tone];\n const iconSpec: IconSpec =\n callout.iconName\n ? {\n family: callout.iconFamily ?? \"Feather\",\n name: callout.iconName,\n }\n : TONE_DEFAULT_ICON[tone];\n\n const Inner = (\n <>\n <View style={styles.calloutHeader}>\n {renderIcon(iconSpec.family, iconSpec.name, 16, palette.foregroundColor)}\n <Text\n style={[\n styles.calloutLabel,\n { color: palette.foregroundColor, fontFamily },\n ]}\n >\n {callout.label}\n </Text>\n </View>\n <Text\n style={[\n styles.calloutBody,\n { color: t.calloutBodyColor, fontFamily },\n ]}\n >\n {callout.body}\n </Text>\n </>\n );\n\n const calloutStyle = {\n backgroundColor: palette.backgroundColor,\n borderColor: palette.borderColor,\n borderRadius: t.calloutRadiusPx,\n };\n\n if (onPress) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={callout.label}\n onPress={() => onPress(callout)}\n style={({ pressed }) => [\n styles.callout,\n calloutStyle,\n { opacity: pressed ? 0.9 : 1 },\n ]}\n >\n {Inner}\n </Pressable>\n );\n }\n return <View style={[styles.callout, calloutStyle]}>{Inner}</View>;\n}\n\nconst styles = StyleSheet.create({\n card: {\n width: \"100%\",\n maxWidth: 520,\n borderWidth: 1,\n overflow: \"hidden\",\n },\n accentBar: {\n height: 4,\n width: \"100%\",\n },\n body: {\n padding: 20,\n gap: 14,\n },\n eyebrowRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n eyebrow: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.2,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n steps: {\n gap: 10,\n },\n stepRow: {\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n },\n stepNumber: {\n width: 24,\n height: 24,\n borderRadius: 12,\n alignItems: \"center\",\n justifyContent: \"center\",\n marginTop: 1,\n },\n stepNumberText: {\n fontSize: 12,\n fontWeight: \"700\",\n },\n stepText: {\n flex: 1,\n fontSize: 15,\n lineHeight: 22,\n },\n callouts: {\n gap: 10,\n marginTop: 4,\n },\n callout: {\n padding: 14,\n borderWidth: 1,\n gap: 6,\n },\n calloutHeader: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n },\n calloutLabel: {\n fontSize: 12,\n fontWeight: \"700\",\n letterSpacing: 1.1,\n textTransform: \"uppercase\",\n flexShrink: 1,\n },\n calloutBody: {\n fontSize: 15,\n lineHeight: 22,\n },\n callAction: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 10,\n paddingVertical: 14,\n paddingHorizontal: 18,\n borderWidth: 1,\n marginTop: 4,\n },\n callActionLabel: {\n fontSize: 16,\n fontWeight: \"700\",\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\nimport type { WhatHappensTone } from \"./payload\";\n\n/** Background + border + foreground triple for callout panels. */\nexport interface CalloutPalette {\n backgroundColor: string;\n borderColor: string;\n foregroundColor: string;\n}\n\n/**\n * Theme overrides for `AbWhatHappensNext`.\n *\n * Extends `Partial<BaseTheme>` so callers can pass `tone`, `mode`, etc. and\n * get the shared cascading behavior, then layers component-specific keys.\n */\nexport interface WhatHappensNextTheme extends Partial<BaseTheme> {\n /** Color of the thin accent bar across the top of the card. */\n accentBarColor?: string;\n /** Numbered-step badge palette + text color. */\n stepNumberBackgroundColor?: string;\n stepNumberForegroundColor?: string;\n stepTextColor?: string;\n /** Body text color inside callouts (defaults to base text color). */\n calloutBodyColor?: string;\n /** Per-tone callout palette (panel background, border, label/icon color). */\n calloutPalettes?: Partial<\n Record<WhatHappensTone, Partial<CalloutPalette>>\n >;\n /** Per-tone call-action button palette. */\n callActionPalettes?: Partial<\n Record<WhatHappensTone, Partial<CalloutPalette>>\n >;\n /** Radius tokens. */\n cardRadius?: Radius;\n calloutRadius?: Radius;\n callActionRadius?: Radius;\n}\n\n/** Fully resolved theme passed down to the card internals. */\nexport interface ResolvedWhatHappensNextTheme {\n base: BaseTheme;\n accentBarColor: string;\n stepNumberBackgroundColor: string;\n stepNumberForegroundColor: string;\n stepTextColor: string;\n calloutBodyColor: string;\n calloutPalettes: Record<WhatHappensTone, CalloutPalette>;\n callActionPalettes: Record<WhatHappensTone, CalloutPalette>;\n cardRadiusPx: number;\n calloutRadiusPx: number;\n callActionRadiusPx: number;\n}\n\nconst defaultCalloutPalettes: Record<WhatHappensTone, CalloutPalette> = {\n neutral: {\n backgroundColor: \"#F8FAFC\",\n borderColor: \"#E2E8F0\",\n foregroundColor: \"#475569\",\n },\n info: {\n backgroundColor: \"#E8F1FE\",\n borderColor: \"#BFD3FF\",\n foregroundColor: \"#2F5DFF\",\n },\n success: {\n backgroundColor: \"#DCFCE7\",\n borderColor: \"#A7F3C2\",\n foregroundColor: \"#15803D\",\n },\n warning: {\n backgroundColor: \"#FEF3C7\",\n borderColor: \"#FDE68A\",\n foregroundColor: \"#B45309\",\n },\n danger: {\n backgroundColor: \"#FEE2E2\",\n borderColor: \"#FECACA\",\n foregroundColor: \"#DC2626\",\n },\n};\n\nconst defaultCallActionPalettes: Record<WhatHappensTone, CalloutPalette> = {\n neutral: {\n backgroundColor: \"#F1F5F9\",\n borderColor: \"#E2E8F0\",\n foregroundColor: \"#0F172A\",\n },\n info: {\n backgroundColor: \"#E8F1FE\",\n borderColor: \"#BFD3FF\",\n foregroundColor: \"#2F5DFF\",\n },\n success: {\n backgroundColor: \"#DCFCE7\",\n borderColor: \"#A7F3C2\",\n foregroundColor: \"#15803D\",\n },\n warning: {\n backgroundColor: \"#FEF3C7\",\n borderColor: \"#FDE68A\",\n foregroundColor: \"#B45309\",\n },\n danger: {\n backgroundColor: \"#FEE2E2\",\n borderColor: \"#FECACA\",\n foregroundColor: \"#DC2626\",\n },\n};\n\nfunction mergePalette(\n defaults: Record<WhatHappensTone, CalloutPalette>,\n overrides: Partial<Record<WhatHappensTone, Partial<CalloutPalette>>>,\n): Record<WhatHappensTone, CalloutPalette> {\n const tones: WhatHappensTone[] = [\n \"neutral\",\n \"info\",\n \"success\",\n \"warning\",\n \"danger\",\n ];\n const out = {} as Record<WhatHappensTone, CalloutPalette>;\n for (const k of tones) {\n out[k] = { ...defaults[k], ...(overrides[k] ?? {}) };\n }\n return out;\n}\n\nexport function resolveWhatHappensNextTheme(\n theme?: WhatHappensNextTheme,\n): ResolvedWhatHappensNextTheme {\n const base = resolveBaseTheme(theme);\n const cardRadius: Radius = theme?.cardRadius ?? \"lg\";\n const calloutRadius: Radius = theme?.calloutRadius ?? \"md\";\n const callActionRadius: Radius = theme?.callActionRadius ?? \"lg\";\n\n // Cascade: explicit theme override -> shared BaseTheme token -> literal fallback.\n return {\n base,\n accentBarColor: theme?.accentBarColor ?? base.accentColor,\n stepNumberBackgroundColor:\n theme?.stepNumberBackgroundColor ?? base.iconBackgroundColor,\n stepNumberForegroundColor:\n theme?.stepNumberForegroundColor ?? base.accentColor,\n stepTextColor: theme?.stepTextColor ?? base.textColor,\n calloutBodyColor: theme?.calloutBodyColor ?? base.textColor,\n calloutPalettes: mergePalette(\n defaultCalloutPalettes,\n theme?.calloutPalettes ?? {},\n ),\n callActionPalettes: mergePalette(\n defaultCallActionPalettes,\n theme?.callActionPalettes ?? {},\n ),\n cardRadiusPx: radiusToPx[cardRadius],\n calloutRadiusPx: radiusToPx[calloutRadius],\n callActionRadiusPx: radiusToPx[callActionRadius],\n };\n}\n","import React, { useMemo } from \"react\";\nimport { StyleSheet, View } from \"react-native\";\n\nimport { GoogleAuthButton } from \"./GoogleAuthButton\";\nimport { AppleAuthButton } from \"./AppleAuthButton\";\nimport { resolveSocialAuthTheme } from \"./theme\";\nimport type { SocialAuthProps } from \"./types\";\n\nexport function SocialAuth({\n data,\n theme,\n onSuccess,\n onError,\n style,\n}: SocialAuthProps) {\n const providers = data?.providers ?? [\"google\", \"apple\"];\n const resolved = useMemo(() => resolveSocialAuthTheme(theme), [theme]);\n\n return (\n <View\n style={[\n styles.container,\n { gap: resolved.buttonGap },\n style,\n ]}\n >\n {providers.includes(\"google\") && (\n <GoogleAuthButton\n config={data?.google ?? {}}\n theme={resolved}\n onSuccess={onSuccess}\n onError={onError}\n />\n )}\n {providers.includes(\"apple\") && (\n <AppleAuthButton\n config={data?.apple ?? {}}\n theme={resolved}\n onSuccess={onSuccess}\n onError={onError}\n />\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n width: \"100%\",\n },\n});\n","import React, { useCallback, useEffect, useMemo } from \"react\";\nimport {\n ActivityIndicator,\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport * as WebBrowser from \"expo-web-browser\";\nimport * as Google from \"expo-auth-session/providers/google\";\n\nimport type { GoogleAuthConfig } from \"./payload\";\nimport type { ResolvedSocialAuthTheme } from \"./theme\";\nimport type { SocialAuthError, SocialAuthSuccess } from \"./types\";\n\nWebBrowser.maybeCompleteAuthSession();\n\ninterface Props {\n config: GoogleAuthConfig;\n theme: ResolvedSocialAuthTheme;\n onSuccess?: (data: SocialAuthSuccess) => void;\n onError?: (error: SocialAuthError) => void;\n}\n\nexport function GoogleAuthButton(props: Props) {\n const { config } = props;\n const isConfigured =\n !!config.iosClientId ||\n !!config.androidClientId ||\n !!config.webClientId ||\n !!config.expoClientId;\n if (!isConfigured) {\n return (\n <UnconfiguredGoogleButton\n theme={props.theme}\n onError={props.onError}\n />\n );\n }\n return <ConfiguredGoogleButton {...props} />;\n}\n\nasync function fetchGoogleProfile(accessToken: string): Promise<{\n id?: string;\n email?: string;\n name?: string;\n} | null> {\n try {\n const res = await fetch(\"https://www.googleapis.com/userinfo/v2/me\", {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n if (!res.ok) return null;\n const json = (await res.json()) as {\n id?: string;\n email?: string;\n name?: string;\n };\n return { id: json.id, email: json.email, name: json.name };\n } catch {\n return null;\n }\n}\n\nfunction ConfiguredGoogleButton({\n config,\n theme,\n onSuccess,\n onError,\n}: Props) {\n const scopes = useMemo(\n () => config.scopes ?? [\"openid\", \"profile\", \"email\"],\n [config.scopes],\n );\n\n const [request, response, promptAsync] = Google.useAuthRequest({\n iosClientId: config.iosClientId,\n androidClientId: config.androidClientId,\n webClientId: config.webClientId,\n scopes,\n });\n\n useEffect(() => {\n if (!response) return;\n if (response.type === \"success\") {\n const accessToken = response.authentication?.accessToken ?? null;\n const idToken = response.authentication?.idToken ?? null;\n const finalize = async () => {\n const profile = accessToken\n ? await fetchGoogleProfile(accessToken)\n : null;\n onSuccess?.({\n provider: \"google\",\n token: accessToken,\n idToken,\n user: profile ?? undefined,\n raw: response,\n });\n };\n void finalize();\n } else if (response.type === \"error\") {\n onError?.({\n provider: \"google\",\n code: response.error?.code ?? \"google_error\",\n message: response.error?.message ?? \"Google sign-in failed.\",\n });\n }\n }, [response, onSuccess, onError]);\n\n const handlePress = useCallback(async () => {\n if (!request) return;\n try {\n await promptAsync();\n } catch (err) {\n onError?.({\n provider: \"google\",\n code: \"google_prompt_failed\",\n message:\n err instanceof Error ? err.message : \"Google prompt failed.\",\n });\n }\n }, [promptAsync, request, onError]);\n\n const disabled = !request;\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Sign in with Google\"\n testID=\"social-auth-google\"\n onPress={handlePress}\n disabled={disabled}\n style={({ pressed }) => [\n buttonStyle(theme, theme.google),\n pressed && !disabled ? styles.pressed : null,\n disabled ? styles.disabled : null,\n ]}\n >\n {request ? (\n <View style={styles.content}>\n <GoogleGlyph />\n <Text style={[styles.label, { color: theme.google.textColor }]}>\n {Platform.select({\n web: \"Sign in with Google\",\n default: \"Continue with Google\",\n })}\n </Text>\n </View>\n ) : (\n <ActivityIndicator color={theme.google.textColor} />\n )}\n </Pressable>\n );\n}\n\nfunction UnconfiguredGoogleButton({\n theme,\n onError,\n}: {\n theme: ResolvedSocialAuthTheme;\n onError?: (error: SocialAuthError) => void;\n}) {\n const handlePress = useCallback(() => {\n onError?.({\n provider: \"google\",\n code: \"google_not_configured\",\n message:\n \"Google sign-in is not configured. Pass at least one of iosClientId / androidClientId / webClientId.\",\n });\n }, [onError]);\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Sign in with Google\"\n testID=\"social-auth-google\"\n onPress={handlePress}\n style={({ pressed }) => [\n buttonStyle(theme, theme.google),\n pressed ? styles.pressed : null,\n ]}\n >\n <View style={styles.content}>\n <GoogleGlyph />\n <Text style={[styles.label, { color: theme.google.textColor }]}>\n Sign in with Google\n </Text>\n </View>\n </Pressable>\n );\n}\n\nfunction GoogleGlyph() {\n return (\n <View style={glyph.wrap}>\n <View style={[glyph.cell, { backgroundColor: \"#4285F4\" }]} />\n <View style={[glyph.cell, { backgroundColor: \"#34A853\" }]} />\n <View style={[glyph.cell, { backgroundColor: \"#FBBC05\" }]} />\n <View style={[glyph.cell, { backgroundColor: \"#EA4335\" }]} />\n </View>\n );\n}\n\nfunction buttonStyle(\n theme: ResolvedSocialAuthTheme,\n skin: { backgroundColor: string; borderColor: string },\n) {\n return {\n minHeight: theme.buttonHeight,\n borderWidth: 1,\n borderRadius: theme.buttonRadiusPx,\n paddingHorizontal: 16,\n alignItems: \"center\" as const,\n justifyContent: \"center\" as const,\n backgroundColor: skin.backgroundColor,\n borderColor: skin.borderColor,\n };\n}\n\nconst styles = StyleSheet.create({\n pressed: { opacity: 0.85 },\n disabled: { opacity: 0.55 },\n content: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n },\n label: {\n fontSize: 16,\n fontWeight: \"600\",\n letterSpacing: 0.1,\n },\n});\n\nconst glyph = StyleSheet.create({\n wrap: {\n width: 18,\n height: 18,\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n borderRadius: 4,\n overflow: \"hidden\",\n },\n cell: { width: 9, height: 9 },\n});\n","import React, { useCallback, useEffect } from \"react\";\nimport {\n ActivityIndicator,\n Platform,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\nimport * as AppleAuthentication from \"expo-apple-authentication\";\nimport * as AuthSession from \"expo-auth-session\";\nimport * as Crypto from \"expo-crypto\";\nimport * as WebBrowser from \"expo-web-browser\";\n\nimport type { AppleAuthConfig } from \"./payload\";\nimport type { ResolvedSocialAuthTheme } from \"./theme\";\nimport type { SocialAuthError, SocialAuthSuccess } from \"./types\";\n\nWebBrowser.maybeCompleteAuthSession();\n\ninterface Props {\n config: AppleAuthConfig;\n theme: ResolvedSocialAuthTheme;\n onSuccess?: (data: SocialAuthSuccess) => void;\n onError?: (error: SocialAuthError) => void;\n}\n\nconst APPLE_DISCOVERY: AuthSession.DiscoveryDocument = {\n authorizationEndpoint: \"https://appleid.apple.com/auth/authorize\",\n tokenEndpoint: \"https://appleid.apple.com/auth/token\",\n};\n\nexport function AppleAuthButton(props: Props) {\n const isIOSNative = Platform.OS === \"ios\";\n if (!isIOSNative && !props.config.serviceId) {\n return (\n <UnconfiguredAppleButton\n theme={props.theme}\n onError={props.onError}\n />\n );\n }\n return <ConfiguredAppleButton {...props} />;\n}\n\nfunction ConfiguredAppleButton({\n config,\n theme,\n onSuccess,\n onError,\n}: Props) {\n const isIOSNative = Platform.OS === \"ios\";\n\n const scopes = (config.scopes ?? [\"name\", \"email\"]).join(\" \");\n const redirectUri =\n config.redirectUri ??\n AuthSession.makeRedirectUri({\n scheme: undefined,\n path: \"apple-auth-callback\",\n });\n\n const [request, response, promptAsync] = AuthSession.useAuthRequest(\n {\n clientId: config.serviceId ?? \"\",\n scopes: scopes.split(\" \"),\n redirectUri,\n responseType: \"code id_token\",\n extraParams: {\n response_mode: \"fragment\",\n nonce: Crypto.randomUUID(),\n },\n },\n APPLE_DISCOVERY,\n );\n\n useEffect(() => {\n if (isIOSNative) return;\n if (!response) return;\n if (response.type === \"success\") {\n const params = response.params ?? {};\n const idToken = (params[\"id_token\"] as string | undefined) ?? null;\n const code = (params[\"code\"] as string | undefined) ?? null;\n onSuccess?.({\n provider: \"apple\",\n token: code,\n idToken,\n user: parseUserFromIdToken(idToken),\n raw: response,\n });\n } else if (response.type === \"error\") {\n onError?.({\n provider: \"apple\",\n code: response.error?.code ?? \"apple_error\",\n message: response.error?.message ?? \"Apple sign-in failed.\",\n });\n }\n }, [response, isIOSNative, onSuccess, onError]);\n\n const handleNativePress = useCallback(async () => {\n try {\n const credential = await AppleAuthentication.signInAsync({\n requestedScopes: [\n AppleAuthentication.AppleAuthenticationScope.FULL_NAME,\n AppleAuthentication.AppleAuthenticationScope.EMAIL,\n ],\n });\n const fullName = [\n credential.fullName?.givenName,\n credential.fullName?.familyName,\n ]\n .filter(Boolean)\n .join(\" \");\n onSuccess?.({\n provider: \"apple\",\n token: credential.authorizationCode ?? null,\n idToken: credential.identityToken ?? null,\n user: {\n id: credential.user,\n email: credential.email ?? null,\n name: fullName || null,\n },\n raw: credential,\n });\n } catch (e: unknown) {\n const err = e as { code?: string; message?: string };\n if (err?.code === \"ERR_REQUEST_CANCELED\") {\n return;\n }\n onError?.({\n provider: \"apple\",\n code: err?.code ?? \"apple_native_error\",\n message: err?.message ?? \"Apple sign-in failed.\",\n });\n }\n }, [onSuccess, onError]);\n\n const handleWebPress = useCallback(async () => {\n if (!request) return;\n try {\n await promptAsync();\n } catch (err) {\n onError?.({\n provider: \"apple\",\n code: \"apple_prompt_failed\",\n message:\n err instanceof Error ? err.message : \"Apple prompt failed.\",\n });\n }\n }, [promptAsync, request, onError]);\n\n if (isIOSNative) {\n return (\n <AppleAuthentication.AppleAuthenticationButton\n testID=\"social-auth-apple\"\n buttonType={\n AppleAuthentication.AppleAuthenticationButtonType.SIGN_IN\n }\n buttonStyle={\n AppleAuthentication.AppleAuthenticationButtonStyle.BLACK\n }\n cornerRadius={theme.buttonRadiusPx}\n style={[styles.appleNative, { height: theme.buttonHeight }]}\n onPress={handleNativePress}\n />\n );\n }\n\n const disabled = !request;\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Sign in with Apple\"\n testID=\"social-auth-apple\"\n onPress={handleWebPress}\n disabled={disabled}\n style={({ pressed }) => [\n buttonStyle(theme, theme.apple),\n pressed && !disabled ? styles.pressed : null,\n disabled ? styles.disabled : null,\n ]}\n >\n {request ? (\n <View style={styles.content}>\n <AppleGlyph color={theme.apple.textColor} />\n <Text style={[styles.label, { color: theme.apple.textColor }]}>\n Sign in with Apple\n </Text>\n </View>\n ) : (\n <ActivityIndicator color={theme.apple.textColor} />\n )}\n </Pressable>\n );\n}\n\nfunction UnconfiguredAppleButton({\n theme,\n onError,\n}: {\n theme: ResolvedSocialAuthTheme;\n onError?: (error: SocialAuthError) => void;\n}) {\n const handlePress = useCallback(() => {\n onError?.({\n provider: \"apple\",\n code: \"apple_not_configured\",\n message:\n \"Apple sign-in is not configured. Pass apple.serviceId (Apple Services ID) for web/Android.\",\n });\n }, [onError]);\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Sign in with Apple\"\n testID=\"social-auth-apple\"\n onPress={handlePress}\n style={({ pressed }) => [\n buttonStyle(theme, theme.apple),\n pressed ? styles.pressed : null,\n ]}\n >\n <View style={styles.content}>\n <AppleGlyph color={theme.apple.textColor} />\n <Text style={[styles.label, { color: theme.apple.textColor }]}>\n Sign in with Apple\n </Text>\n </View>\n </Pressable>\n );\n}\n\nfunction AppleGlyph({ color }: { color: string }) {\n return (\n <View style={glyph.wrap}>\n <View style={[glyph.dot, { backgroundColor: color }]} />\n <View style={[glyph.leaf, { backgroundColor: color }]} />\n </View>\n );\n}\n\nfunction parseUserFromIdToken(idToken: string | null) {\n if (!idToken) return undefined;\n try {\n const [, payload] = idToken.split(\".\");\n if (!payload) return undefined;\n const normalized = payload.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const g = globalThis as unknown as {\n atob?: (s: string) => string;\n Buffer?: {\n from: (s: string, enc: string) => { toString: (enc: string) => string };\n };\n };\n const json = g.atob\n ? g.atob(normalized)\n : g.Buffer\n ? g.Buffer.from(normalized, \"base64\").toString(\"utf-8\")\n : \"\";\n if (!json) return undefined;\n const data = JSON.parse(json) as { sub?: string; email?: string };\n return { id: data.sub ?? null, email: data.email ?? null };\n } catch {\n return undefined;\n }\n}\n\nfunction buttonStyle(\n theme: ResolvedSocialAuthTheme,\n skin: { backgroundColor: string; borderColor: string },\n) {\n return {\n minHeight: theme.buttonHeight,\n borderWidth: 1,\n borderRadius: theme.buttonRadiusPx,\n paddingHorizontal: 16,\n alignItems: \"center\" as const,\n justifyContent: \"center\" as const,\n backgroundColor: skin.backgroundColor,\n borderColor: skin.borderColor,\n };\n}\n\nconst styles = StyleSheet.create({\n appleNative: { width: \"100%\" },\n pressed: { opacity: 0.85 },\n disabled: { opacity: 0.55 },\n content: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n },\n label: {\n fontSize: 16,\n fontWeight: \"600\",\n letterSpacing: 0.1,\n },\n});\n\nconst glyph = StyleSheet.create({\n wrap: {\n width: 18,\n height: 18,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n dot: { width: 14, height: 14, borderRadius: 7 },\n leaf: {\n position: \"absolute\",\n top: 0,\n right: 2,\n width: 5,\n height: 5,\n borderRadius: 3,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Per-provider button skin tokens. */\nexport interface ProviderButtonTheme {\n backgroundColor: string;\n borderColor: string;\n textColor: string;\n}\n\n/**\n * Theme overrides for `SocialAuth`.\n *\n * Extends `Partial<BaseTheme>` (so callers can pass `tone`, `mode`, etc. and\n * get the shared cascading behavior) and adds component-specific keys for\n * each provider button plus button geometry.\n */\nexport interface SocialAuthTheme extends Partial<BaseTheme> {\n google?: Partial<ProviderButtonTheme>;\n apple?: Partial<ProviderButtonTheme>;\n /** Corner radius token applied to both buttons. Defaults to \"md\". */\n buttonRadius?: Radius;\n /** Vertical gap between stacked buttons. Defaults to 12. */\n buttonGap?: number;\n /** Minimum button height. Defaults to 48. */\n buttonHeight?: number;\n}\n\n/** Fully resolved theme passed down to internal button components. */\nexport interface ResolvedSocialAuthTheme {\n base: BaseTheme;\n google: ProviderButtonTheme;\n apple: ProviderButtonTheme;\n buttonRadiusPx: number;\n buttonGap: number;\n buttonHeight: number;\n}\n\nconst defaultGoogleButton: ProviderButtonTheme = {\n backgroundColor: \"#FFFFFF\",\n borderColor: \"#DADCE0\",\n textColor: \"#1F1F1F\",\n};\n\nconst defaultAppleButton: ProviderButtonTheme = {\n backgroundColor: \"#000000\",\n borderColor: \"#000000\",\n textColor: \"#FFFFFF\",\n};\n\nexport function resolveSocialAuthTheme(\n theme?: SocialAuthTheme,\n): ResolvedSocialAuthTheme {\n const base = resolveBaseTheme(theme);\n const buttonRadius: Radius = theme?.buttonRadius ?? \"md\";\n return {\n base,\n google: { ...defaultGoogleButton, ...(theme?.google ?? {}) },\n apple: { ...defaultAppleButton, ...(theme?.apple ?? {}) },\n buttonRadiusPx: radiusToPx[buttonRadius],\n buttonGap: theme?.buttonGap ?? 12,\n buttonHeight: theme?.buttonHeight ?? 48,\n };\n}\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n Animated,\n Easing,\n type LayoutChangeEvent,\n type NativeScrollEvent,\n type NativeSyntheticEvent,\n Platform,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n TextInput,\n useWindowDimensions,\n View,\n} from \"react-native\";\nimport { Feather, MaterialCommunityIcons } from \"@expo/vector-icons\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { resolveChatTheme, type ResolvedChatTheme } from \"./theme\";\nimport type {\n ChatMessage,\n IconRef,\n QuickReply,\n SuggestionGroup,\n SuggestionSelection,\n} from \"./payload\";\nimport type { UiChatProps } from \"./types\";\n\ninterface AgentFrame {\n type?:\n | \"hello\"\n | \"history\"\n | \"start\"\n | \"delta\"\n | \"done\"\n | \"error\"\n | \"suggestions\";\n messageId?: string;\n text?: string;\n message?: string;\n /** Server-stamped epoch ms — currently sent on `done` so the\n * assistant message's authoritative timestamp matches what was\n * persisted server-side. */\n createdAt?: number;\n // Suggestions frame fields\n id?: string;\n items?: QuickReply[];\n selection?: SuggestionSelection;\n submitLabel?: string;\n // History frame: prior messages persisted for this conversationId.\n messages?: ChatMessage[];\n}\n\n/**\n * Internal hook: when `wsUrl` is provided, manage the WebSocket\n * connection, message stream, and send handlers inside UiChat itself.\n * Returns `null` when `wsUrl` is not set (the consumer drives state).\n */\nfunction useAgentConnection(\n wsUrl: string | undefined,\n conversationId: string,\n) {\n const wsRef = useRef<WebSocket | null>(null);\n const [messages, setMessages] = useState<ChatMessage[]>([]);\n const [isStreaming, setIsStreaming] = useState(false);\n const [connected, setConnected] = useState(false);\n const [suggestions, setSuggestions] = useState<SuggestionGroup | null>(null);\n\n useEffect(() => {\n if (!wsUrl) return;\n // Reset local state when (re)connecting — server will replay any\n // prior history for this conversationId via a `history` frame.\n setMessages([]);\n setSuggestions(null);\n setIsStreaming(false);\n\n const ws = new WebSocket(wsUrl);\n wsRef.current = ws;\n\n ws.onopen = () => {\n setConnected(true);\n // Identify this session so the server can load (or create)\n // the persisted conversation history.\n ws.send(JSON.stringify({ type: \"init\", conversationId }));\n };\n ws.onclose = () => setConnected(false);\n ws.onerror = () => setConnected(false);\n ws.onmessage = (ev) => {\n let frame: AgentFrame;\n try {\n frame = JSON.parse(typeof ev.data === \"string\" ? ev.data : \"\");\n } catch {\n return;\n }\n\n if (frame.type === \"history\" && Array.isArray(frame.messages)) {\n // Replace local state with the server's authoritative history\n // for this conversation. Empty array is fine (new conversation).\n setMessages(frame.messages);\n return;\n }\n\n if (frame.type === \"start\" && frame.messageId) {\n // No createdAt on start — the server stamps the authoritative\n // timestamp on `done`. We intentionally render the streaming\n // assistant placeholder without a date separator until then,\n // which matches the persisted view after reconnect.\n setMessages((prev) => [\n ...prev,\n { id: frame.messageId!, role: \"assistant\", text: \"\" },\n ]);\n setIsStreaming(true);\n return;\n }\n\n if (frame.type === \"delta\" && frame.messageId && frame.text) {\n setMessages((prev) => {\n const idx = prev.findIndex((m) => m.id === frame.messageId);\n if (idx < 0) return prev;\n const next = prev.slice();\n next[idx] = { ...next[idx]!, text: next[idx]!.text + frame.text };\n return next;\n });\n return;\n }\n\n if (frame.type === \"done\") {\n if (frame.messageId && frame.text != null) {\n setMessages((prev) => {\n const idx = prev.findIndex((m) => m.id === frame.messageId);\n if (idx < 0) return prev;\n const next = prev.slice();\n // Adopt the server's authoritative createdAt so live and\n // resumed views agree.\n next[idx] = {\n ...next[idx]!,\n text: frame.text!,\n createdAt: frame.createdAt ?? Date.now(),\n };\n return next;\n });\n }\n setIsStreaming(false);\n return;\n }\n\n if (\n frame.type === \"suggestions\" &&\n frame.id &&\n Array.isArray(frame.items)\n ) {\n setSuggestions({\n id: frame.id,\n items: frame.items,\n selection: frame.selection ?? \"single\",\n submitLabel: frame.submitLabel,\n });\n return;\n }\n\n if (frame.type === \"error\") {\n setMessages((prev) => [\n ...prev,\n {\n id: `err_${Date.now()}`,\n role: \"assistant\",\n text: `Sorry — ${frame.message ?? \"something went wrong\"}.`,\n createdAt: Date.now(),\n },\n ]);\n setIsStreaming(false);\n }\n };\n\n return () => {\n ws.close();\n wsRef.current = null;\n };\n }, [wsUrl, conversationId]);\n\n const send = useCallback((text: string) => {\n const trimmed = text.trim();\n const ws = wsRef.current;\n if (!trimmed || !ws || ws.readyState !== WebSocket.OPEN) return;\n setMessages((prev) => [\n ...prev,\n {\n id: `u_${Date.now()}`,\n role: \"user\",\n text: trimmed,\n createdAt: Date.now(),\n },\n ]);\n // Clear current suggestions optimistically — the server will push a\n // fresh group once it has finished generating them.\n setSuggestions(null);\n ws.send(JSON.stringify({ type: \"user\", text: trimmed }));\n }, []);\n\n const ready = connected && !isStreaming;\n\n return { messages, isStreaming, send, ready, suggestions };\n}\n\nfunction quickReplyMessageText(qr: QuickReply): string {\n return qr.messageText ?? qr.label;\n}\n\nconst DEFAULT_PLACEHOLDER = \"Tell us how you feel...\";\n\nfunction renderIcon(\n ref: IconRef | undefined,\n fallback: IconRef,\n size: number,\n color: string,\n style?: object,\n) {\n const r = ref ?? fallback;\n const family = r.family ?? \"feather\";\n if (family === \"material-community\") {\n return (\n <MaterialCommunityIcons\n name={r.name as never}\n size={size}\n color={color}\n style={style as never}\n />\n );\n }\n return (\n <Feather\n name={r.name as never}\n size={size}\n color={color}\n style={style as never}\n />\n );\n}\n\nexport function UiChat({\n data,\n theme,\n style,\n messages,\n isStreaming,\n onQuickReplyPress,\n onAttachPress,\n onVoicePress,\n onSendPress,\n transparentBGOnMobileSize = true,\n}: UiChatProps) {\n const t = useMemo(() => resolveChatTheme(theme), [theme]);\n const fontFamily = t.base.fontFamily;\n const [text, setText] = useState<string>(\"\");\n const scrollRef = useRef<ScrollView | null>(null);\n\n // Track the rendered surface width so we can decide whether the\n // current viewport is \"mobile\". RN doesn't have CSS media queries,\n // so we measure via onLayout on the surface itself — this also\n // handles desktop windows being resized down without a remount.\n // 768px matches the typical Tailwind/Bootstrap `md` breakpoint.\n // We seed the initial guess from `useWindowDimensions` so that the\n // first paint already has the correct background — otherwise we'd\n // briefly flash the theme background on mobile before the onLayout\n // callback fires.\n const window = useWindowDimensions();\n const [surfaceWidth, setSurfaceWidth] = useState<number>(window.width);\n const isMobileWidth = surfaceWidth > 0 && surfaceWidth < 768;\n const surfaceBackground =\n transparentBGOnMobileSize && isMobileWidth\n ? \"transparent\"\n : t.surfaceBackgroundColor;\n\n // When `data.wsUrl` is set, UiChat self-manages the connection &\n // message state. Otherwise it falls back to the controlled props.\n const conn = useAgentConnection(data.wsUrl, data.conversationId);\n const selfManaged = !!data.wsUrl;\n const effectiveMessages = selfManaged ? conn.messages : messages;\n const effectiveIsStreaming = selfManaged ? conn.isStreaming : isStreaming;\n\n // Active suggestion group: server-pushed (self-managed) wins over the\n // static `data.quickReplies` fallback. In controlled mode there is no\n // WS, so we always synthesize a \"single\" group from `data.quickReplies`.\n const fallbackGroup = useMemo<SuggestionGroup | null>(() => {\n if (!data.quickReplies || data.quickReplies.length === 0) return null;\n return {\n id: \"static\",\n items: data.quickReplies,\n selection: \"single\",\n };\n }, [data.quickReplies]);\n const incomingSuggestions: SuggestionGroup | null = selfManaged\n ? conn.suggestions ?? fallbackGroup\n : fallbackGroup;\n\n // Build a content-aware signature so dismissal survives id reuse\n // (the static fallback group is always `id: \"static\"`, so we'd\n // permanently hide it across renders if we keyed on id alone).\n // Any change to the group id, item ids, or item labels counts as\n // a \"new\" group and resurfaces the row.\n const incomingGroupSig = useMemo(() => {\n if (!incomingSuggestions) return null;\n const items = incomingSuggestions.items\n .map((qr) => `${qr.id}:${qr.label}`)\n .join(\"|\");\n return `${incomingSuggestions.id}#${incomingSuggestions.selection ?? \"single\"}#${items}`;\n }, [incomingSuggestions]);\n\n const [dismissedSig, setDismissedSig] = useState<string | null>(null);\n const activeSuggestions: SuggestionGroup | null =\n incomingSuggestions && incomingGroupSig !== dismissedSig\n ? incomingSuggestions\n : null;\n const isMulti = activeSuggestions?.selection === \"multi\";\n // NOTE: matches the documented default in payload.ts (`SuggestionGroup.submitLabel`).\n const submitLabel = activeSuggestions?.submitLabel ?? \"Done — next\";\n\n // Multi-select state. Reset whenever the active suggestion group id changes.\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n const activeGroupId = activeSuggestions?.id;\n // Clear stale dismissal whenever a fresh group signature arrives.\n useEffect(() => {\n if (incomingGroupSig && incomingGroupSig !== dismissedSig) {\n setDismissedSig(null);\n }\n }, [incomingGroupSig, dismissedSig]);\n useEffect(() => {\n setSelectedIds(new Set());\n }, [activeGroupId]);\n\n const composer = data.composer ?? {};\n const showAttach = composer.showAttach !== false;\n const showVoice = composer.showVoice !== false;\n const showSend = composer.showSend !== false;\n const placeholder = composer.placeholder ?? DEFAULT_PLACEHOLDER;\n\n const hasConversation = !!effectiveMessages && effectiveMessages.length > 0;\n\n // ─── ChatGPT-style scrolling ────────────────────────────────────────\n // 1. When the user sends a new message, scroll so that user message\n // sits near the TOP of the viewport (with a small top pad). This\n // gives the streaming assistant reply room to expand below.\n // 2. Do NOT auto-scroll on assistant deltas — that would yank the\n // viewport while the user is reading.\n // 3. Show a floating chevron-down button when the content overflows\n // below the visible area; tapping it scrolls to the very end.\n // 4. Reserve viewport-sized bottom padding inside the scroll content\n // so even the very last user message can be scrolled to the top.\n const SCROLL_TOP_PADDING = 12;\n const SCROLL_BOTTOM_THRESHOLD = 24;\n\n const messageYRef = useRef<Map<string, number>>(new Map());\n // Per-message rendered height (used to decide whether the last\n // assistant reply overflows the viewport — see updateScrollIndicator).\n const messageHRef = useRef<Map<string, number>>(new Map());\n const scrollMetricsRef = useRef({ contentH: 0, layoutH: 0, scrollY: 0 });\n const [scrollLayoutH, setScrollLayoutH] = useState(0);\n // Pending scroll-to-top target lives in a ref (not state) so that\n // `onLayout` callbacks see the latest value synchronously. With a\n // useState the layout effect order — render → onLayout → useEffect —\n // would mean the second user message's onLayout fires BEFORE the\n // pendingScrollId state was updated, and we'd miss the trigger.\n const scrollPendingIdRef = useRef<string | null>(null);\n const [showScrollDown, setShowScrollDown] = useState(false);\n // -1 = uninitialized. Primed on first effect run to the current\n // message count so preloaded history doesn't get treated as a brand\n // new user-msg append (which would otherwise trigger a jarring\n // auto-jump on mount/reconnect).\n const prevMsgCountRef = useRef(-1);\n\n const tryScrollPending = useCallback(() => {\n const id = scrollPendingIdRef.current;\n if (!id) return;\n const y = messageYRef.current.get(id);\n if (y == null) return;\n scrollRef.current?.scrollTo({\n y: Math.max(0, y - SCROLL_TOP_PADDING),\n animated: true,\n });\n scrollPendingIdRef.current = null;\n }, []);\n\n // Detect newly appended USER messages and queue the scroll-to-top.\n // We scan backward from the new tail because a user msg + assistant\n // placeholder can both land in the same render batch — checking only\n // the very last entry would miss the user msg in that case.\n useEffect(() => {\n const msgs = effectiveMessages ?? [];\n const prevCount = prevMsgCountRef.current;\n // First run after mount: just record the current count and skip the\n // append-detection so preloaded history doesn't get auto-scrolled.\n if (prevCount < 0) {\n prevMsgCountRef.current = msgs.length;\n return;\n }\n if (msgs.length > prevCount) {\n for (let i = msgs.length - 1; i >= prevCount; i--) {\n const m = msgs[i];\n if (m && m.role === \"user\") {\n scrollPendingIdRef.current = m.id;\n // onLayout for the new bubble has often already fired by\n // the time this effect runs, so try immediately.\n requestAnimationFrame(tryScrollPending);\n break;\n }\n }\n }\n prevMsgCountRef.current = msgs.length;\n }, [effectiveMessages?.length, tryScrollPending]);\n\n const handleMessageLayoutY = useCallback(\n (id: string, y: number, height: number) => {\n messageYRef.current.set(id, y);\n messageHRef.current.set(id, height);\n if (id === scrollPendingIdRef.current) {\n // Defer to next frame so contentSize has settled.\n requestAnimationFrame(tryScrollPending);\n }\n // Re-evaluate the chevron whenever a relevant bubble's height\n // settles (covers streaming text growth where contentH may be\n // dominated by the bottom padding rather than the message).\n if (id === lastAssistantIdRef.current) updateScrollIndicator();\n },\n [tryScrollPending],\n );\n\n // Id of the most recent assistant message — used by the scroll-down\n // indicator to compare *that bubble's* height against the viewport.\n // Derived synchronously (useMemo + ref) rather than from a post-commit\n // effect so that `onLayout` / `onContentSizeChange` callbacks fired\n // during the same render see the correct id immediately.\n const lastAssistantId = useMemo(() => {\n const msgs = effectiveMessages ?? [];\n for (let i = msgs.length - 1; i >= 0; i--) {\n const m = msgs[i];\n if (m && m.role === \"assistant\") return m.id;\n }\n return null;\n }, [effectiveMessages]);\n const lastAssistantIdRef = useRef<string | null>(null);\n lastAssistantIdRef.current = lastAssistantId;\n\n const updateScrollIndicator = useCallback(() => {\n const { contentH, layoutH, scrollY } = scrollMetricsRef.current;\n const distFromBottom = contentH - (scrollY + layoutH);\n // Use the last assistant bubble's *measured* height — not\n // `contentH - y`, since the conversation has a large bottom\n // padding (≈ layoutH - 80) that would make any assistant\n // message look \"overflowing\" by accident.\n const lastAssistantId = lastAssistantIdRef.current;\n const lastResponseHeight =\n lastAssistantId != null\n ? messageHRef.current.get(lastAssistantId) ?? 0\n : 0;\n const responseOverflows = lastResponseHeight > layoutH;\n const shouldShow =\n responseOverflows && distFromBottom > SCROLL_BOTTOM_THRESHOLD;\n setShowScrollDown(shouldShow);\n }, []);\n\n // Streaming text growth doesn't always re-trigger onContentSizeChange\n // reliably across platforms (notably RN Web). Re-evaluate the\n // scroll-down indicator whenever the last message's length changes\n // so the chevron appears as soon as the response overflows.\n const lastMessageLength = hasConversation\n ? effectiveMessages![effectiveMessages!.length - 1]!.text.length\n : 0;\n useEffect(() => {\n const id = setTimeout(updateScrollIndicator, 50);\n return () => clearTimeout(id);\n }, [lastMessageLength, effectiveMessages?.length, updateScrollIndicator]);\n\n const handleScroll = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const { contentOffset, contentSize, layoutMeasurement } = e.nativeEvent;\n scrollMetricsRef.current = {\n contentH: contentSize.height,\n layoutH: layoutMeasurement.height,\n scrollY: contentOffset.y,\n };\n updateScrollIndicator();\n },\n [updateScrollIndicator],\n );\n\n const handleContentSizeChange = useCallback(\n (_w: number, h: number) => {\n scrollMetricsRef.current.contentH = h;\n updateScrollIndicator();\n // Try the pending scroll once content is laid out — covers the\n // case where the new user msg's onLayout fired before contentSize\n // had finished growing to accommodate the bottom padding.\n if (scrollPendingIdRef.current) requestAnimationFrame(tryScrollPending);\n },\n [updateScrollIndicator, tryScrollPending],\n );\n\n const handleScrollContainerLayout = useCallback(\n (e: LayoutChangeEvent) => {\n const h = e.nativeEvent.layout.height;\n scrollMetricsRef.current.layoutH = h;\n setScrollLayoutH(h);\n updateScrollIndicator();\n },\n [updateScrollIndicator],\n );\n\n const scrollToEnd = useCallback(() => {\n scrollRef.current?.scrollToEnd({ animated: true });\n }, []);\n\n // Reserve enough bottom padding so the last user message can be\n // scrolled near the top regardless of conversation length.\n const conversationBottomPad = Math.max(8, scrollLayoutH - 80);\n\n const handleSend = () => {\n const trimmed = text.trim();\n if (!trimmed) return;\n if (selfManaged) {\n if (!conn.ready) return;\n conn.send(trimmed);\n } else {\n if (!onSendPress) return;\n onSendPress(trimmed);\n }\n setText(\"\");\n };\n\n const dismissActiveGroup = () => {\n if (incomingGroupSig) setDismissedSig(incomingGroupSig);\n };\n\n const handleQuickReply = (qr: QuickReply) => {\n if (isMulti) {\n setSelectedIds((prev) => {\n const next = new Set(prev);\n if (next.has(qr.id)) next.delete(qr.id);\n else next.add(qr.id);\n return next;\n });\n return;\n }\n // Single-select: any tap submits the message and immediately\n // clears the suggestion row (locally — `conn.send` also clears\n // server-pushed groups optimistically).\n if (selfManaged) {\n if (!conn.ready) return;\n conn.send(quickReplyMessageText(qr));\n } else {\n onQuickReplyPress?.(qr.id);\n }\n dismissActiveGroup();\n };\n\n const handleMultiSubmit = () => {\n if (!activeSuggestions || selectedIds.size === 0) return;\n const picked = activeSuggestions.items.filter((qr) => selectedIds.has(qr.id));\n if (picked.length === 0) return;\n const joined = picked.map(quickReplyMessageText).join(\", \");\n if (selfManaged) {\n if (!conn.ready) return;\n conn.send(joined);\n } else {\n onSendPress?.(joined);\n }\n setSelectedIds(new Set());\n dismissActiveGroup();\n };\n\n const quickReplyEnabled = selfManaged ? conn.ready || isMulti : true;\n\n return (\n <View\n style={[\n styles.surface,\n { backgroundColor: surfaceBackground },\n style,\n ]}\n onLayout={(e) => {\n const w = e.nativeEvent.layout.width;\n if (w > 0 && w !== surfaceWidth) setSurfaceWidth(w);\n }}\n >\n {hasConversation ? (\n <View style={styles.conversationWrap}>\n <ScrollView\n ref={scrollRef}\n style={styles.conversation}\n contentContainerStyle={[\n styles.conversationContent,\n { paddingBottom: conversationBottomPad },\n ]}\n showsVerticalScrollIndicator={false}\n onLayout={handleScrollContainerLayout}\n onScroll={handleScroll}\n onContentSizeChange={handleContentSizeChange}\n scrollEventThrottle={16}\n >\n {buildRenderItems(effectiveMessages!).map((item) =>\n item.kind === \"date\" ? (\n <Text\n key={item.key}\n style={[\n styles.timestamp,\n { color: t.timestampLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n testID=\"ui-chat-date-separator\"\n >\n {renderTimestamp(\n item.label,\n t.timestampLabelColor,\n t.timestampValueColor,\n fontFamily,\n )}\n </Text>\n ) : (\n <MessageBubble\n key={item.key}\n message={item.message}\n fontFamily={fontFamily}\n theme={t}\n onLayoutY={(y, h) =>\n handleMessageLayoutY(item.message.id, y, h)\n }\n />\n ),\n )}\n {effectiveIsStreaming ? (\n <View style={styles.assistantMessage} testID=\"ui-chat-typing\">\n <TypingDots color={t.timestampValueColor} />\n </View>\n ) : null}\n </ScrollView>\n {showScrollDown ? (\n <View style={styles.scrollDownWrap}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Scroll to latest message\"\n onPress={scrollToEnd}\n style={({ pressed }) => [\n styles.scrollDownButton,\n pressed && { opacity: 0.7 },\n ]}\n testID=\"ui-chat-scroll-down\"\n >\n <Feather\n name=\"chevron-down\"\n size={22}\n color={t.assistantTextColor}\n />\n </Pressable>\n </View>\n ) : null}\n </View>\n ) : (\n <>\n {/* Empty conversation scroll area pushes content down */}\n <View style={styles.scrollFiller} />\n\n {/* Intro message */}\n <View style={styles.introBlock}>\n {data.intro.timestamp ? (\n <Text\n style={[\n styles.timestamp,\n { color: t.timestampLabelColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {renderTimestamp(\n data.intro.timestamp,\n t.timestampLabelColor,\n t.timestampValueColor,\n fontFamily,\n )}\n </Text>\n ) : null}\n <Text\n style={[\n styles.introText,\n { color: t.introTextColor, fontFamily },\n ]}\n >\n {data.intro.text}\n </Text>\n </View>\n </>\n )}\n\n {/* Suggestion pills — server-pushed (preferred) or static fallback. */}\n {activeSuggestions && activeSuggestions.items.length > 0 ? (\n <View style={styles.quickReplyRow}>\n {activeSuggestions.items.map((qr) => {\n const selected = isMulti && selectedIds.has(qr.id);\n const destructive = qr.variant === \"destructive\" && !selected;\n // Resolution order:\n // selected state -> per-item override -> variant token -> default token\n // Per-item overrides are intentionally ignored in the\n // \"selected\" state so the selection affordance stays\n // consistent regardless of agent-supplied colors.\n const variantBg = destructive\n ? t.quickReplyDestructiveBackgroundColor\n : t.quickReplyBackgroundColor;\n const variantBorder = destructive\n ? t.quickReplyDestructiveBorderColor\n : t.quickReplyBorderColor;\n const variantFg = destructive\n ? t.quickReplyDestructiveForegroundColor\n : t.quickReplyForegroundColor;\n const variantIcon = destructive\n ? t.quickReplyDestructiveForegroundColor\n : t.quickReplyIconColor;\n\n const bgColor = selected\n ? t.quickReplySelectedBackgroundColor\n : qr.backgroundColor ?? variantBg;\n const borderColor = selected\n ? t.quickReplySelectedBorderColor\n : qr.borderColor ?? variantBorder;\n const fgColor = selected\n ? t.quickReplySelectedForegroundColor\n : qr.textColor ?? variantFg;\n const iconColor = selected\n ? t.quickReplySelectedForegroundColor\n : qr.textColor ?? variantIcon;\n return (\n <Pressable\n key={qr.id}\n accessibilityRole=\"button\"\n accessibilityState={isMulti ? { selected } : undefined}\n disabled={!quickReplyEnabled}\n onPress={\n quickReplyEnabled ? () => handleQuickReply(qr) : undefined\n }\n // `hovered` is supplied by react-native-web and is\n // `undefined` on native, so the cast keeps the\n // signature portable. On hover we deepen the border\n // (and skip it for the destructive/selected variants\n // where the colored border already conveys state).\n style={(state) => {\n const hovered = (state as { hovered?: boolean })\n .hovered;\n const useHoverBorder =\n hovered &&\n quickReplyEnabled &&\n !selected &&\n !destructive;\n return [\n styles.quickReplyPill,\n {\n backgroundColor: bgColor,\n borderColor: useHoverBorder\n ? \"#9AA1AE\"\n : borderColor,\n borderRadius: t.pillRadiusPx,\n opacity:\n state.pressed && quickReplyEnabled ? 0.85 : 1,\n },\n ];\n }}\n testID={`ui-chat-suggestion-${qr.id}`}\n >\n {qr.icon\n ? renderIcon(\n qr.icon,\n { name: \"circle\", family: \"feather\" },\n 14,\n iconColor,\n )\n : null}\n <Text\n style={[\n styles.quickReplyLabel,\n { color: fgColor, fontFamily },\n ]}\n numberOfLines={1}\n >\n {qr.label}\n </Text>\n </Pressable>\n );\n })}\n {isMulti ? (\n // The submit (\"Done — next\") pill is always rendered in\n // multi mode so users can see how to advance even before\n // making a selection. It's disabled until at least one\n // option is picked (and while the connection is still\n // warming up in self-managed mode).\n <Pressable\n accessibilityRole=\"button\"\n onPress={handleMultiSubmit}\n disabled={\n selectedIds.size === 0 || (selfManaged && !conn.ready)\n }\n style={({ pressed }) => [\n styles.quickReplyPill,\n {\n backgroundColor: t.quickReplySelectedBackgroundColor,\n borderColor: t.quickReplySelectedBorderColor,\n borderRadius: t.pillRadiusPx,\n opacity:\n selectedIds.size === 0 ? 0.5 : pressed ? 0.85 : 1,\n },\n ]}\n testID=\"ui-chat-suggestions-submit\"\n >\n <Feather\n name={\"send\" as never}\n size={14}\n color={t.quickReplySelectedForegroundColor}\n />\n <Text\n style={[\n styles.quickReplyLabel,\n {\n color: t.quickReplySelectedForegroundColor,\n fontFamily,\n fontWeight: \"600\",\n },\n ]}\n numberOfLines={1}\n >\n {`${submitLabel} (${selectedIds.size})`}\n </Text>\n </Pressable>\n ) : null}\n </View>\n ) : null}\n\n {/* Composer */}\n <View\n style={[\n styles.composer,\n {\n backgroundColor: t.composerBackgroundColor,\n borderColor: t.composerBorderColor,\n borderRadius: t.composerRadiusPx,\n },\n ]}\n >\n {showAttach ? (\n <Pressable\n accessibilityRole=\"button\"\n disabled={!onAttachPress}\n onPress={onAttachPress}\n style={({ pressed }) => [\n styles.composerCircle,\n {\n backgroundColor: t.attachButtonBackgroundColor,\n opacity: pressed && onAttachPress ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={\"plus\" as never}\n size={20}\n color={t.attachButtonForegroundColor}\n />\n </Pressable>\n ) : null}\n\n <TextInput\n value={text}\n onChangeText={setText}\n placeholder={placeholder}\n placeholderTextColor={t.composerPlaceholderColor}\n style={[\n styles.composerInput,\n { color: t.composerInputColor, fontFamily },\n ]}\n onSubmitEditing={handleSend}\n returnKeyType=\"send\"\n />\n\n {showVoice ? (\n <Pressable\n accessibilityRole=\"button\"\n disabled={!onVoicePress}\n onPress={onVoicePress}\n style={({ pressed }) => [\n styles.composerCircle,\n {\n backgroundColor: t.voiceButtonBackgroundColor,\n opacity: pressed && onVoicePress ? 0.85 : 1,\n },\n ]}\n >\n <MaterialCommunityIcons\n name={\"waveform\" as never}\n size={20}\n color={t.voiceButtonForegroundColor}\n />\n </Pressable>\n ) : null}\n\n {showSend ? (() => {\n // Send-button enablement has to consider both modes:\n // - self-managed: enabled while the WS is ready (regardless\n // of whether the host passed `onSendPress`).\n // - controlled: requires `onSendPress` from the parent.\n // In both modes the input must be non-empty.\n const sendEnabled =\n text.trim().length > 0 &&\n (selfManaged ? conn.ready : !!onSendPress);\n return (\n <Pressable\n accessibilityRole=\"button\"\n disabled={!sendEnabled}\n onPress={handleSend}\n style={({ pressed }) => [\n styles.composerCircle,\n {\n backgroundColor: t.sendButtonBackgroundColor,\n opacity: pressed && sendEnabled ? 0.85 : 1,\n },\n ]}\n >\n <Feather\n name={\"send\" as never}\n size={18}\n color={t.sendButtonForegroundColor}\n />\n </Pressable>\n );\n })() : null}\n </View>\n\n {/* Footer */}\n {data.footer ? (\n <Text\n style={[\n styles.footer,\n { color: t.footerColor, fontFamily },\n ]}\n >\n {data.footer.prefix ?? \"\"}\n {data.footer.highlight ? (\n <Text\n style={{\n color: t.footerHighlightColor,\n fontWeight: \"700\",\n }}\n >\n {data.footer.highlight}\n </Text>\n ) : null}\n {data.footer.suffix ?? \"\"}\n </Text>\n ) : null}\n </View>\n );\n}\n\n/**\n * Format a message createdAt (epoch ms) into a \"Day H:MM AM/PM\" string\n * matching the intro's hardcoded \"Today 1:06 PM\" style. Uses \"Today\" /\n * \"Yesterday\" relative to local midnight, falling back to a short\n * absolute date (e.g. \"Mon Jan 5 1:06 PM\") for older messages.\n */\nfunction formatMessageDate(ts: number, now: number = Date.now()): string {\n const d = new Date(ts);\n const startOfDay = (epoch: number) => {\n const x = new Date(epoch);\n x.setHours(0, 0, 0, 0);\n return x.getTime();\n };\n const dayDiff = Math.round(\n (startOfDay(now) - startOfDay(ts)) / 86_400_000,\n );\n\n let label: string;\n if (dayDiff === 0) label = \"Today\";\n else if (dayDiff === 1) label = \"Yesterday\";\n else {\n label = d.toLocaleDateString(undefined, {\n weekday: \"short\",\n month: \"short\",\n day: \"numeric\",\n });\n }\n\n const time = d.toLocaleTimeString(undefined, {\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n return `${label} ${time}`;\n}\n\n/**\n * Walk through the message list and decide where to insert a date\n * separator. We emit one before the very first message (so the\n * conversation always opens with its date) and again whenever the\n * calendar day changes between consecutive messages with timestamps.\n *\n * Returns the heterogeneous list to render.\n */\ntype RenderItem =\n | { kind: \"date\"; key: string; label: string }\n | { kind: \"message\"; key: string; message: ChatMessage };\n\nfunction buildRenderItems(messages: ChatMessage[]): RenderItem[] {\n const items: RenderItem[] = [];\n let lastDayKey: string | null = null;\n for (const m of messages) {\n if (m.createdAt) {\n const d = new Date(m.createdAt);\n const dayKey = `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`;\n if (dayKey !== lastDayKey) {\n items.push({\n kind: \"date\",\n key: `date_${dayKey}_${m.id}`,\n label: formatMessageDate(m.createdAt),\n });\n lastDayKey = dayKey;\n }\n }\n items.push({ kind: \"message\", key: m.id, message: m });\n }\n return items;\n}\n\n/**\n * Three small dots that bob up and down with a slight phase offset\n * (and a touch of opacity pulse), used as the assistant \"typing\"\n * indicator while a reply is streaming. The dots wobble independently\n * — each one runs its own loop with a different delay/duration so the\n * motion doesn't read as a perfectly synchronized bounce.\n *\n * Animated.Value + JS-driver works the same on web and native, so no\n * platform-specific code is needed.\n */\nfunction TypingDots({ color }: { color: string }) {\n const a = useRef(new Animated.Value(0)).current;\n const b = useRef(new Animated.Value(0)).current;\n const c = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n // Slightly different durations + delays for each dot so the\n // bounces drift in/out of phase — gives the \"wobbly\" feel asked\n // for instead of a metronomic pulse.\n const loop = (\n v: Animated.Value,\n delay: number,\n duration: number,\n ): Animated.CompositeAnimation =>\n Animated.loop(\n Animated.sequence([\n Animated.delay(delay),\n Animated.timing(v, {\n toValue: 1,\n duration,\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: true,\n }),\n Animated.timing(v, {\n toValue: 0,\n duration,\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: true,\n }),\n ]),\n );\n\n const animations = [\n loop(a, 0, 380),\n loop(b, 130, 420),\n loop(c, 260, 360),\n ];\n animations.forEach((x) => x.start());\n return () => {\n animations.forEach((x) => x.stop());\n };\n }, [a, b, c]);\n\n const dotStyle = (v: Animated.Value) => ({\n opacity: v.interpolate({ inputRange: [0, 1], outputRange: [0.4, 1] }),\n transform: [\n {\n translateY: v.interpolate({\n inputRange: [0, 1],\n outputRange: [0, -4],\n }),\n },\n ],\n });\n\n return (\n <View style={styles.typingDotsRow}>\n <Animated.View\n style={[styles.typingDot, { backgroundColor: color }, dotStyle(a)]}\n />\n <Animated.View\n style={[styles.typingDot, { backgroundColor: color }, dotStyle(b)]}\n />\n <Animated.View\n style={[styles.typingDot, { backgroundColor: color }, dotStyle(c)]}\n />\n </View>\n );\n}\n\nfunction renderTimestamp(\n ts: string,\n labelColor: string,\n valueColor: string,\n fontFamily?: string,\n): React.ReactNode {\n // Split on first whitespace: bold label + muted value.\n const idx = ts.indexOf(\" \");\n if (idx <= 0) {\n return (\n <Text style={{ color: labelColor, fontFamily, fontWeight: \"700\" }}>\n {ts}\n </Text>\n );\n }\n const label = ts.slice(0, idx);\n const value = ts.slice(idx + 1);\n return (\n <>\n <Text style={{ color: labelColor, fontFamily, fontWeight: \"700\" }}>\n {label}\n </Text>\n <Text style={{ color: valueColor, fontFamily }}>{` ${value}`}</Text>\n </>\n );\n}\n\n// Maximum corner radius for a user-message bubble. With the default\n// theme (`bubbleRadius: \"full\"`) the resolved px is a stadium-style\n// huge number, which makes long multi-line bubbles look like ovals.\n// 28px gives short bubbles a generously rounded \"soft pill\" feel\n// (matching the design reference) while letting tall multi-row\n// bubbles still read as proper rounded rectangles instead of\n// distorted stadiums.\nconst USER_BUBBLE_MAX_RADIUS = 36;\n\ninterface MessageBubbleProps {\n message: ChatMessage;\n fontFamily?: string;\n theme: ResolvedChatTheme;\n onLayoutY?: (y: number, height: number) => void;\n}\n\nfunction MessageBubble({\n message,\n fontFamily,\n theme,\n onLayoutY,\n}: MessageBubbleProps) {\n const isUser = message.role === \"user\";\n const handleLayout = onLayoutY\n ? (e: LayoutChangeEvent) =>\n onLayoutY(e.nativeEvent.layout.y, e.nativeEvent.layout.height)\n : undefined;\n\n // Assistant turns render as plain left-aligned text (no bubble bg),\n // matching the design reference.\n if (!isUser) {\n return (\n <View\n style={styles.assistantMessage}\n testID=\"ui-chat-msg-assistant\"\n onLayout={handleLayout}\n >\n <Text\n style={{\n color: theme.assistantTextColor,\n fontFamily,\n fontSize: 15,\n lineHeight: 22,\n }}\n >\n {message.text}\n </Text>\n </View>\n );\n }\n\n // User turns render as a gradient pill with white text.\n // Cap the corner radius at a fixed pixel value so tall multi-line\n // bubbles don't end up looking like ovals/stadiums. The theme's\n // `bubbleRadiusPx` (which can be \"full\" → a huge value) is treated\n // as an upper bound rather than a literal radius.\n const bubbleRadius = Math.min(theme.bubbleRadiusPx, USER_BUBBLE_MAX_RADIUS);\n return (\n <View\n style={[styles.userBubbleWrap, { borderRadius: bubbleRadius }]}\n testID=\"ui-chat-msg-user\"\n onLayout={handleLayout}\n >\n <LinearGradient\n colors={[\n theme.userBubbleGradientStartColor,\n theme.userBubbleGradientEndColor,\n ]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 1 }}\n style={[styles.userBubble, { borderRadius: bubbleRadius }]}\n >\n <Text\n style={{\n color: theme.userBubbleTextColor,\n fontFamily,\n fontSize: 15,\n lineHeight: 21,\n }}\n >\n {message.text}\n </Text>\n </LinearGradient>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n surface: {\n flex: 1,\n width: \"100%\",\n // NOTE: intentionally no `height: \"100%\"` here. Combined with\n // `flex: 1` inside a flex parent it produces unbounded height on\n // RN Web when the surface is mounted inside an outer ScrollView,\n // which lets the conversation push the composer off-screen.\n // `flex: 1` alone correctly fills the parent's bounded height.\n minHeight: 0,\n padding: 16,\n // Pull the bottom padding in so the disclaimer footer sits as\n // close to the bottom edge as it does to the composer above it.\n paddingBottom: 8,\n gap: 14,\n },\n scrollFiller: {\n flexGrow: 1,\n minHeight: 120,\n },\n conversationWrap: {\n flex: 1,\n position: \"relative\",\n },\n conversation: {\n flex: 1,\n },\n conversationContent: {\n gap: 18,\n paddingBottom: 8,\n },\n scrollDownWrap: {\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: 8,\n alignItems: \"center\",\n // Cross-platform passthrough: scrolls/taps reach the ScrollView\n // everywhere except the button itself. Modern RN (>=0.74) and\n // RN Web both support `pointerEvents` as a style key.\n pointerEvents: \"box-none\",\n },\n scrollDownButton: {\n width: 36,\n height: 36,\n borderRadius: 18,\n backgroundColor: \"#FFFFFF\",\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: \"rgba(0,0,0,0.12)\",\n alignItems: \"center\",\n justifyContent: \"center\",\n // Native shadow + Android elevation; on web RN converts these\n // automatically but a direct boxShadow keeps the warning quiet.\n shadowColor: \"#000\",\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.15,\n shadowRadius: 4,\n elevation: 3,\n ...(Platform.OS === \"web\"\n ? ({ boxShadow: \"0 2px 6px rgba(0,0,0,0.15)\" } as object)\n : {}),\n },\n userBubbleWrap: {\n alignSelf: \"flex-end\",\n maxWidth: \"85%\",\n overflow: \"hidden\",\n },\n userBubble: {\n paddingHorizontal: 18,\n paddingVertical: 10,\n },\n assistantMessage: {\n alignSelf: \"flex-start\",\n maxWidth: \"100%\",\n paddingVertical: 2,\n },\n typingDotsRow: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 5,\n paddingVertical: 6,\n paddingHorizontal: 2,\n },\n typingDot: {\n width: 7,\n height: 7,\n borderRadius: 999,\n },\n introBlock: {\n gap: 10,\n },\n timestamp: {\n fontSize: 13,\n textAlign: \"center\",\n },\n introText: {\n fontSize: 15,\n lineHeight: 22,\n },\n quickReplyRow: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n gap: 10,\n },\n quickReplyPill: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 18,\n paddingVertical: 12,\n borderWidth: 1,\n // Soft drop shadow so the pills read as cards floating over the\n // surface, matching the design reference. Web uses CSS box-shadow;\n // iOS uses the shadow* props; Android uses elevation.\n ...(Platform.OS === \"web\"\n ? ({\n boxShadow: \"0px 4px 12px rgba(15, 23, 42, 0.08)\",\n transition:\n \"border-color 150ms ease, box-shadow 150ms ease\",\n } as object)\n : Platform.OS === \"ios\"\n ? {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.1,\n shadowRadius: 6,\n shadowOffset: { width: 0, height: 3 },\n }\n : { elevation: 2 }),\n },\n quickReplyLabel: {\n fontSize: 14,\n fontWeight: \"600\",\n },\n composer: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n paddingHorizontal: 10,\n paddingVertical: 10,\n borderWidth: 1,\n // Same soft elevation as the suggestion pills so the composer\n // and the pills read as a coherent set of floating surfaces.\n ...(Platform.OS === \"web\"\n ? ({ boxShadow: \"0px 1px 2px rgba(15, 23, 42, 0.04)\" } as object)\n : Platform.OS === \"ios\"\n ? {\n shadowColor: \"#0F172A\",\n shadowOpacity: 0.05,\n shadowRadius: 2,\n shadowOffset: { width: 0, height: 1 },\n }\n : { elevation: 1 }),\n },\n composerCircle: {\n width: 44,\n height: 44,\n borderRadius: 999,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n composerInput: {\n flex: 1,\n fontSize: 15,\n paddingHorizontal: 8,\n paddingVertical: Platform.OS === \"web\" ? 6 : 0,\n minHeight: 32,\n ...(Platform.OS === \"web\"\n ? ({ outlineStyle: \"none\" } as object)\n : null),\n },\n footer: {\n fontSize: 13,\n textAlign: \"center\",\n // Negative margin offsets the surface's `gap: 14` so the space\n // between the composer and the footer matches the 8px bottom\n // padding below the footer (14 - 6 = 8).\n marginTop: -6,\n },\n});\n","import {\n radiusToPx,\n resolveBaseTheme,\n type BaseTheme,\n type Radius,\n} from \"@hc-components/shared\";\n\n/** Theme overrides for `UiChat`. */\nexport interface ChatTheme extends Partial<BaseTheme> {\n // Chat surface (solid background, fills its container)\n surfaceBackgroundColor?: string;\n // Intro\n timestampLabelColor?: string;\n timestampValueColor?: string;\n introTextColor?: string;\n // Assistant message — rendered as plain (un-bubbled) left-aligned text.\n assistantTextColor?: string;\n // User bubble — pill with a linear gradient and white text.\n userBubbleGradientStartColor?: string;\n userBubbleGradientEndColor?: string;\n userBubbleTextColor?: string;\n // Quick reply pills (default variant)\n quickReplyBackgroundColor?: string;\n quickReplyBorderColor?: string;\n quickReplyForegroundColor?: string;\n quickReplyIconColor?: string;\n // Quick reply pills (destructive variant — e.g. \"Chest pain\")\n quickReplyDestructiveBackgroundColor?: string;\n quickReplyDestructiveBorderColor?: string;\n quickReplyDestructiveForegroundColor?: string;\n // Quick reply pills (selected — multi-select toggled-on state)\n quickReplySelectedBackgroundColor?: string;\n quickReplySelectedBorderColor?: string;\n quickReplySelectedForegroundColor?: string;\n // Composer\n composerBackgroundColor?: string;\n composerBorderColor?: string;\n composerPlaceholderColor?: string;\n composerInputColor?: string;\n attachButtonBackgroundColor?: string;\n attachButtonForegroundColor?: string;\n voiceButtonBackgroundColor?: string;\n voiceButtonForegroundColor?: string;\n sendButtonBackgroundColor?: string;\n sendButtonForegroundColor?: string;\n // Footer\n footerColor?: string;\n footerHighlightColor?: string;\n // Radii\n pillRadius?: Radius;\n composerRadius?: Radius;\n bubbleRadius?: Radius;\n}\n\nexport interface ResolvedChatTheme {\n base: BaseTheme;\n surfaceBackgroundColor: string;\n timestampLabelColor: string;\n timestampValueColor: string;\n introTextColor: string;\n assistantTextColor: string;\n userBubbleGradientStartColor: string;\n userBubbleGradientEndColor: string;\n userBubbleTextColor: string;\n quickReplyBackgroundColor: string;\n quickReplyBorderColor: string;\n quickReplyForegroundColor: string;\n quickReplyIconColor: string;\n quickReplyDestructiveBackgroundColor: string;\n quickReplyDestructiveBorderColor: string;\n quickReplyDestructiveForegroundColor: string;\n quickReplySelectedBackgroundColor: string;\n quickReplySelectedBorderColor: string;\n quickReplySelectedForegroundColor: string;\n composerBackgroundColor: string;\n composerBorderColor: string;\n composerPlaceholderColor: string;\n composerInputColor: string;\n attachButtonBackgroundColor: string;\n attachButtonForegroundColor: string;\n voiceButtonBackgroundColor: string;\n voiceButtonForegroundColor: string;\n sendButtonBackgroundColor: string;\n sendButtonForegroundColor: string;\n footerColor: string;\n footerHighlightColor: string;\n pillRadiusPx: number;\n composerRadiusPx: number;\n bubbleRadiusPx: number;\n}\n\nexport function resolveChatTheme(theme?: ChatTheme): ResolvedChatTheme {\n const base = resolveBaseTheme(theme);\n // Cascade: explicit override -> shared BaseTheme token -> literal fallback.\n const pillRadius: Radius = theme?.pillRadius ?? \"full\";\n const composerRadius: Radius = theme?.composerRadius ?? \"full\";\n const bubbleRadius: Radius = theme?.bubbleRadius ?? \"full\";\n\n return {\n base,\n surfaceBackgroundColor:\n theme?.surfaceBackgroundColor ?? \"#FFFFFF\",\n timestampLabelColor:\n theme?.timestampLabelColor ?? base.textColor,\n timestampValueColor:\n theme?.timestampValueColor ?? base.mutedTextColor,\n introTextColor: theme?.introTextColor ?? base.textColor,\n assistantTextColor:\n theme?.assistantTextColor ?? base.textColor,\n // Diagonal gradient (top-left -> bottom-right): a vivid royal\n // blue that deepens into a near-black indigo, matching the\n // design reference for user message bubbles.\n userBubbleGradientStartColor:\n theme?.userBubbleGradientStartColor ?? \"#3A55D9\",\n userBubbleGradientEndColor:\n theme?.userBubbleGradientEndColor ?? \"#1E1466\",\n userBubbleTextColor:\n theme?.userBubbleTextColor ?? \"#FFFFFF\",\n quickReplyBackgroundColor:\n theme?.quickReplyBackgroundColor ?? \"#FFFFFF\",\n quickReplyBorderColor:\n theme?.quickReplyBorderColor ?? base.borderColor,\n quickReplyForegroundColor:\n theme?.quickReplyForegroundColor ?? base.textColor,\n quickReplyIconColor:\n theme?.quickReplyIconColor ?? base.textColor,\n quickReplyDestructiveBackgroundColor:\n theme?.quickReplyDestructiveBackgroundColor ?? \"#FFFFFF\",\n quickReplyDestructiveBorderColor:\n theme?.quickReplyDestructiveBorderColor ?? \"#DC2626\",\n quickReplyDestructiveForegroundColor:\n theme?.quickReplyDestructiveForegroundColor ?? \"#DC2626\",\n quickReplySelectedBackgroundColor:\n theme?.quickReplySelectedBackgroundColor ?? \"#1E3A8A\",\n quickReplySelectedBorderColor:\n theme?.quickReplySelectedBorderColor ?? \"#1E3A8A\",\n quickReplySelectedForegroundColor:\n theme?.quickReplySelectedForegroundColor ?? \"#FFFFFF\",\n composerBackgroundColor:\n theme?.composerBackgroundColor ?? \"#FFFFFF\",\n // The composer border in the design reference is barely visible —\n // just a hint of separation from the surface. We pick a lighter\n // gray than `base.borderColor` (which is used for the more\n // prominent suggestion pill borders) so the input pill reads as\n // an elevated surface, not an outlined control.\n composerBorderColor:\n theme?.composerBorderColor ?? \"#EEF0F4\",\n composerPlaceholderColor:\n theme?.composerPlaceholderColor ?? base.mutedTextColor,\n composerInputColor:\n theme?.composerInputColor ?? base.textColor,\n attachButtonBackgroundColor:\n theme?.attachButtonBackgroundColor ?? \"#1F2937\",\n attachButtonForegroundColor:\n theme?.attachButtonForegroundColor ?? \"#FFFFFF\",\n voiceButtonBackgroundColor:\n theme?.voiceButtonBackgroundColor ?? \"#1F2937\",\n voiceButtonForegroundColor:\n theme?.voiceButtonForegroundColor ?? \"#FFFFFF\",\n sendButtonBackgroundColor:\n theme?.sendButtonBackgroundColor ?? \"#E5E7EB\",\n sendButtonForegroundColor:\n theme?.sendButtonForegroundColor ?? \"#FFFFFF\",\n footerColor: theme?.footerColor ?? base.mutedTextColor,\n footerHighlightColor:\n theme?.footerHighlightColor ?? \"#DC2626\",\n pillRadiusPx: radiusToPx[pillRadius],\n composerRadiusPx: radiusToPx[composerRadius],\n bubbleRadiusPx: radiusToPx[bubbleRadius],\n };\n}\n"],"mappings":"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","names":["React","useMemo","Platform","StyleSheet","Text","View","Feather","useMemo","Platform","React","View","styles","Feather","Text","StyleSheet","React","useMemo","Platform","Pressable","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","useMemo","Platform","React","View","styles","Feather","Text","Pressable","LinearGradient","StyleSheet","React","useMemo","Platform","Pressable","StyleSheet","Text","View","Feather","DEFAULT_EYEBROW","React","Feather","useMemo","Platform","View","styles","Text","Pressable","StyleSheet","React","useMemo","Platform","Pressable","StyleSheet","Text","View","Feather","Ionicons","MaterialCommunityIcons","MaterialIcons","DEFAULT_EYEBROW","renderIcon","React","Feather","Ionicons","MaterialIcons","MaterialCommunityIcons","useMemo","Platform","View","styles","Text","Pressable","StyleSheet","React","useMemo","Platform","Pressable","StyleSheet","Text","View","Feather","DEFAULT_EYEBROW","useMemo","Platform","React","View","styles","Feather","Text","Pressable","StyleSheet","React","useMemo","Platform","StyleSheet","Text","View","Feather","MaterialCommunityIcons","LinearGradient","DEFAULT_EYEBROW","renderIcon","React","Feather","MaterialCommunityIcons","useMemo","Platform","View","styles","LinearGradient","Text","StyleSheet","React","useMemo","useState","Platform","Pressable","StyleSheet","Text","View","Feather","DEFAULT_AVATAR_ICON","useMemo","React","View","styles","useState","Platform","Feather","Text","Pressable","StyleSheet","React","useMemo","useRef","Platform","Pressable","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON","useMemo","useRef","Platform","React","View","styles","LinearGradient","Feather","Text","Pressable","StyleSheet","React","useMemo","Platform","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","useMemo","Platform","React","View","styles","LinearGradient","Feather","Text","StyleSheet","React","useMemo","useRef","Platform","Pressable","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON","DEFAULT_AVATAR_ICON","useMemo","useRef","Platform","React","View","styles","LinearGradient","Feather","Text","Pressable","StyleSheet","React","useMemo","useState","Platform","Pressable","StyleSheet","Text","View","Feather","DEFAULT_EYEBROW","useMemo","useState","Platform","React","View","styles","Feather","Text","Pressable","StyleSheet","React","useMemo","useRef","Platform","Pressable","StyleSheet","Text","View","Feather","MaterialCommunityIcons","DEFAULT_EYEBROW","useMemo","useRef","Platform","React","View","styles","Feather","MaterialCommunityIcons","Text","Pressable","StyleSheet","React","useMemo","Platform","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","useMemo","Platform","React","View","styles","LinearGradient","Feather","Text","StyleSheet","React","useMemo","useRef","useState","Platform","Pressable","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON","useMemo","useState","useRef","Platform","React","View","styles","Feather","Text","Pressable","LinearGradient","StyleSheet","React","useMemo","useRef","useState","Platform","Pressable","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_AVATAR_ICON","useMemo","useState","useRef","Platform","React","View","styles","LinearGradient","Feather","Text","Pressable","StyleSheet","React","useMemo","Platform","StyleSheet","Text","View","Feather","LinearGradient","useMemo","Platform","React","View","styles","Feather","Text","LinearGradient","StyleSheet","React","useMemo","Platform","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_STATUS","DEFAULT_EYEBROW","useMemo","Platform","React","View","styles","Feather","Text","LinearGradient","StyleSheet","React","useMemo","useState","Platform","Pressable","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","useMemo","useState","Platform","React","View","styles","Feather","Text","Pressable","LinearGradient","StyleSheet","React","useMemo","useRef","useState","Platform","Pressable","StyleSheet","Text","View","Feather","DEFAULT_EYEBROW","useMemo","useState","useRef","Platform","React","View","styles","Feather","Text","Pressable","StyleSheet","React","useMemo","useRef","useState","Platform","Pressable","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON","DEFAULT_PRIMARY_ICON","useMemo","useState","useRef","Platform","React","View","styles","LinearGradient","Feather","Text","Pressable","StyleSheet","React","useMemo","useRef","Platform","Pressable","StyleSheet","Text","View","Feather","MaterialCommunityIcons","LinearGradient","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON_MCI","DEFAULT_EYEBROW_ICON_FEATHER","DEFAULT_SECURITY_ICON","DEFAULT_PRIMARY_ICON","useMemo","useRef","Platform","React","View","styles","LinearGradient","Feather","MaterialCommunityIcons","Text","Pressable","StyleSheet","React","useMemo","Platform","StyleSheet","Text","View","Feather","MaterialCommunityIcons","LinearGradient","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON","DEFAULT_HERO_ICON","DEFAULT_STATUS_ICON","renderIcon","React","MaterialCommunityIcons","Feather","useMemo","Platform","View","styles","LinearGradient","Text","StyleSheet","React","useMemo","Platform","StyleSheet","Text","View","Feather","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON","useMemo","Platform","React","View","styles","Feather","Text","StyleSheet","React","useMemo","Platform","Pressable","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","DEFAULT_REASONS_HEADER","useMemo","Platform","React","View","styles","MapPreview","Feather","Text","ReasonRow","ActionButton","LinearGradient","Pressable","StyleSheet","React","useMemo","Platform","Pressable","StyleSheet","Text","View","Feather","Ionicons","MaterialCommunityIcons","MaterialIcons","LinearGradient","DEFAULT_EYEBROW","renderIcon","React","Feather","Ionicons","MaterialIcons","MaterialCommunityIcons","useMemo","Platform","View","styles","Text","OptionRow","actionLabel","Inner","Pressable","LinearGradient","StyleSheet","React","useMemo","useRef","useState","Platform","Pressable","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON","DEFAULT_AVATAR_ICON","DEFAULT_CTA_ICON","useMemo","useState","useRef","Platform","React","View","styles","Feather","Text","LinearGradient","Pressable","StyleSheet","React","useMemo","useRef","useState","Platform","Pressable","StyleSheet","Text","View","Feather","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON","useMemo","useState","useRef","Platform","React","View","styles","Feather","Text","Pressable","StyleSheet","React","useMemo","Platform","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","useMemo","Platform","React","View","styles","LinearGradient","Feather","Text","StyleSheet","React","useMemo","useRef","useState","Platform","Pressable","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON","DEFAULT_CTA_ICON","useMemo","useState","useRef","Platform","React","View","styles","LinearGradient","Feather","Text","Pressable","StyleSheet","React","useMemo","Platform","StyleSheet","Text","View","Feather","Ionicons","MaterialCommunityIcons","useMemo","Platform","React","View","styles","MaterialCommunityIcons","Text","Feather","Ionicons","StyleSheet","React","useMemo","useState","Platform","Pressable","StyleSheet","Text","View","Feather","Ionicons","MaterialCommunityIcons","MaterialIcons","defaultUrgencyBadges","DEFAULT_EYEBROW","URGENCY_LABEL","KIND_ICON","renderIcon","React","Feather","Ionicons","MaterialIcons","MaterialCommunityIcons","useMemo","useState","Platform","View","styles","Text","Pressable","StyleSheet","React","useMemo","StyleSheet","Text","View","Feather","Ionicons","DEFAULT_EYEBROW","useMemo","React","View","styles","Ionicons","Text","Feather","StyleSheet","React","useMemo","useRef","Platform","Pressable","StyleSheet","Text","View","Feather","TONE_DEFAULTS","DEFAULT_AVATAR_ICON","DEFAULT_CTA_ICON","useMemo","useRef","Platform","React","View","styles","Feather","Text","Pressable","StyleSheet","React","useMemo","useRef","useState","Platform","Pressable","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON","DEFAULT_AVATAR_ICON","DEFAULT_CTA_LABEL","DEFAULT_CTA_ICON","useMemo","useState","useRef","Platform","React","View","styles","Feather","Text","LinearGradient","Pressable","StyleSheet","React","useMemo","useRef","useState","Platform","Pressable","StyleSheet","Text","View","Feather","TONE_DEFAULTS","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON","useMemo","useState","useRef","Platform","React","View","styles","Feather","Text","Pressable","StyleSheet","React","useMemo","useRef","Platform","Pressable","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON","useMemo","useRef","Platform","React","View","styles","LinearGradient","Feather","Text","Pressable","StyleSheet","React","useMemo","useRef","Platform","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON","useMemo","useRef","Platform","React","View","styles","LinearGradient","Feather","Text","StyleSheet","React","useMemo","useRef","Platform","Pressable","StyleSheet","Text","View","Feather","LinearGradient","DEFAULT_EYEBROW","DEFAULT_EYEBROW_ICON","DEFAULT_SECURITY_ICON","DEFAULT_PRIMARY_ICON","DEFAULT_SECONDARY_ICON","DEFAULT_DISMISS_ICON","DEFAULT_SKIPPED_NOTICE_LABEL","useMemo","useRef","Platform","React","View","styles","LinearGradient","Feather","Text","Pressable","StyleSheet","React","useMemo","Platform","StyleSheet","Text","View","Feather","MaterialCommunityIcons","defaultUrgencyBadges","URGENCY_LABEL","useMemo","Platform","React","View","styles","Feather","Text","UrgencyBadge","MaterialCommunityIcons","StyleSheet","React","useMemo","Platform","StyleSheet","Text","View","Feather","defaultUrgencyBadges","URGENCY_LABEL","useMemo","Platform","React","View","styles","Feather","Text","UrgencyBadge","StyleSheet","React","useMemo","Platform","Pressable","StyleSheet","Text","View","Feather","Ionicons","MaterialCommunityIcons","MaterialIcons","DEFAULT_EYEBROW","renderIcon","React","Feather","Ionicons","MaterialIcons","MaterialCommunityIcons","useMemo","Platform","View","styles","Text","Pressable","StyleSheet","React","useMemo","StyleSheet","View","React","useCallback","useEffect","useMemo","Platform","Pressable","StyleSheet","Text","View","styles","React","useCallback","useEffect","ActivityIndicator","Platform","Pressable","StyleSheet","Text","View","WebBrowser","styles","buttonStyle","glyph","useMemo","React","View","styles","StyleSheet","React","useCallback","useEffect","useMemo","useRef","useState","Animated","Easing","Platform","Pressable","StyleSheet","Text","TextInput","View","Feather","MaterialCommunityIcons","LinearGradient","useRef","useState","useEffect","useCallback","renderIcon","React","MaterialCommunityIcons","Feather","useMemo","lastAssistantId","View","styles","Text","Pressable","TextInput","Animated","Easing","LinearGradient","StyleSheet","Platform"]}
|