// SPDX-FileCopyrightText: 2025 Social Connect Labs, Inc. // SPDX-License-Identifier: BUSL-1.1 // NOTE: Converts to Apache-2.0 on 2029-06-11 per LICENSE. import React, { useMemo } from 'react'; import type { ImageSourcePropType, LayoutChangeEvent, NativeScrollEvent, NativeSyntheticEvent, ScrollView as ScrollViewType, } from 'react-native'; import { ScrollView } from 'react-native'; import { Text, View } from 'tamagui'; import { dinot } from '@selfxyz/mobile-sdk-alpha/constants/fonts'; import { proofRequestColors, proofRequestSpacing, } from '@/components/proof-request/designTokens'; import { formatTimestamp, ProofMetadataBar, } from '@/components/proof-request/ProofMetadataBar'; import { ProofRequestHeader } from '@/components/proof-request/ProofRequestHeader'; export interface ProofRequestCardProps { logoSource: ImageSourcePropType | null; appName: string; appUrl: string | null; documentType?: string; timestamp?: Date; children?: React.ReactNode; testID?: string; onScroll?: (event: NativeSyntheticEvent) => void; scrollViewRef?: React.RefObject; onContentSizeChange?: (width: number, height: number) => void; onLayout?: (event: LayoutChangeEvent) => void; initialScrollOffset?: number; } /** * Main card container for proof request screens. * Combines header, metadata bar, and content section. * Matches Figma design 15234:9267. */ export const ProofRequestCard: React.FC = ({ logoSource, appName, appUrl, documentType = '', timestamp, children, testID = 'proof-request-card', onScroll, scrollViewRef, onContentSizeChange, onLayout, initialScrollOffset, }) => { // Create default timestamp once and reuse it to avoid unnecessary re-renders const defaultTimestamp = useMemo(() => new Date(), []); const effectiveTimestamp = timestamp ?? defaultTimestamp; // Build request message with highlighted app name and document type const requestMessage = ( <> {appName} { ' is requesting access to the following information from your verified ' } {documentType} . ); return ( {/* Black Header */} {/* Metadata Bar */} {/* White Content Area */} {children} ); };