spaark-payapi-sdk 1.6.0 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mocks/webhook-generators.ts","../src/lib/utils.ts","../src/components/SpaarkPaySdkFinanceDashboard.tsx","../src/react.tsx"],"names":["generateUUID","c","r","generateDepositWebhook","eventType","options","transactionId","amount","currency","correspondent","phoneNumber","status","failureCode","failureMessage","now","data","generatePayoutWebhook","generateRefundWebhook","depositId","generateWebhook","WEBHOOK_EVENT_TYPES","cn","inputs","twMerge","clsx","translations","STATUS_COLORS","CHART_COLORS","Button","forwardRef","className","variant","size","props","ref","jsx","Tabs","z","TabsList","TabsTrigger","TabsContent","Select","w","SelectValue","SelectTrigger","children","jsxs","ChevronDown","SelectContent","position","SelectItem","Check","Card","CardHeader","CardTitle","CardContent","Input","type","Table","TableHeader","TableBody","TableRow","TableHead","TableCell","Skeleton","Spinner","EmptyState","Icon","Inbox","title","description","action","StatusIcon","CheckCircle2","XCircle","Ban","Clock","AlertCircle","formatCurrency","formatDate","dateString","locale","date","SpaarkPaySdkFinanceDashboard","transactions","subtitle","showExpertMode","onExpertModeClick","onTransactionClick","onRefresh","onAddTransaction","onSettings","isLoading","t","searchQuery","setSearchQuery","useState","typeFilter","setTypeFilter","statusFilter","setStatusFilter","copiedId","setCopiedId","activeTab","setActiveTab","columnFilters","setColumnFilters","stats","useMemo","deposits","tx","payouts","refunds","failed","pending","completed","cancelled","totalVolume","sum","depositsTotal","payoutsTotal","refundsTotal","chartData","byDate","volumeData","typeData","statusData","d","filteredTransactions","matchesSearch","matchesType","matchesStatus","copyToClipboard","useCallback","text","mainCurrency","columns","row","e","Copy","ArrowDownCircle","ArrowUpCircle","RefreshCw","table","useReactTable","getCoreRowModel","getPaginationRowModel","getFilteredRowModel","TableSkeleton","_","i","CardSkeleton","Settings","LayoutDashboard","BarChart3","Fragment","TrendingUp","Hourglass","Search","value","Plus","headerGroup","header","flexRender","cell","ChevronLeft","ChevronRight","ResponsiveContainer","AreaChart","CartesianGrid","XAxis","YAxis","Tooltip","Legend","Area","BarChart","Bar","entry","index","Cell","PieChart","Pie","name","percent","createMockDepositResponse","txId","createMockPayoutResponse","createMockStatusResponse","createMockAvailabilityResponse","createMockPredictResponse","phone","createMockActiveConfigResponse","createMockWalletBalancesResponse","createMockPublicKeysResponse","simulateDelay","ms","resolve","computeHmacSha256","message","secret","encoder","key","signature","b","PROVIDER_OPTIONS","CURRENCY_OPTIONS","SpaarkPaySdkTestDashboard","initialApiKey","initialEnvironment","initialDemoMode","apiBasePath","onDepositComplete","onPayoutComplete","onError","apiKey","setApiKey","environment","setEnvironment","isConfigured","setIsConfigured","isDemoMode","setIsDemoMode","setPhoneNumber","setAmount","setCurrency","provider","setProvider","setDescription","setTransactionId","results","setResults","currentStatus","setCurrentStatus","webhookSecret","setWebhookSecret","webhookEvents","setWebhookEvents","webhookEventType","setWebhookEventType","webhookAmount","setWebhookAmount","webhookPhone","setWebhookPhone","webhookProvider","setWebhookProvider","generatedPayload","setGeneratedPayload","generatedSignature","setGeneratedSignature","verifyPayload","setVerifyPayload","verifySignature","setVerifySignature","verifySecret","setVerifySecret","verifyResult","setVerifyResult","parseInput","setParseInput","parsedEvent","setParsedEvent","parseError","setParseError","eventLogFilter","setEventLogFilter","addResult","operation","response","error","result","prev","handleConfigure","handleDemoMode","handleDeposit","res","err","handlePayout","handleCheckStatus","handleGetAvailability","handlePredictProvider","handleGetActiveConfig","handleGetPublicKeys","handleGetWalletBalances","SettingsIcon","WalletIcon","PhoneIcon","RefreshIcon","ToolkitIcon","ChartIcon","WebhookIcon","LoaderIcon","PlayIcon","CopyIcon","SearchIcon","SignalIcon","KeyIcon","p","event","payload","newEvent","parsedPayload","computedSignature","isValid","ShieldIcon","CheckIcon","XIcon","parsed","CodeIcon","BeakerIcon","react_default"],"mappings":"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","file":"react.js","sourcesContent":["import type {\n WebhookEventType,\n PawapayWebhookEvent,\n DepositCallbackData,\n PayoutCallbackData,\n} from '../types/webhooks';\nimport type { Correspondent } from '../constants/correspondents';\n\nexport interface WebhookGeneratorOptions {\n transactionId?: string;\n amount?: string;\n currency?: string;\n correspondent?: Correspondent;\n phoneNumber?: string;\n status?: 'COMPLETED' | 'FAILED';\n failureCode?: string;\n failureMessage?: string;\n}\n\nconst generateUUID = (): string => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\nexport function generateDepositWebhook(\n eventType: 'deposit.accepted' | 'deposit.completed' | 'deposit.failed',\n options: WebhookGeneratorOptions = {}\n): PawapayWebhookEvent<DepositCallbackData> {\n const {\n transactionId = generateUUID(),\n amount = '5000',\n currency = 'XAF',\n correspondent = 'MTN_MOMO_CMR',\n phoneNumber = '237670000000',\n status = eventType === 'deposit.failed' ? 'FAILED' : 'COMPLETED',\n failureCode = 'INSUFFICIENT_FUNDS',\n failureMessage = 'The payer has insufficient funds',\n } = options;\n\n const now = new Date().toISOString();\n\n const data: DepositCallbackData = {\n depositId: transactionId,\n status,\n amount,\n currency,\n correspondent,\n payer: {\n type: 'MSISDN',\n address: {\n value: phoneNumber,\n },\n },\n customerTimestamp: now,\n created: now,\n };\n\n if (status === 'COMPLETED') {\n data.receivedByPayer = now;\n }\n\n if (status === 'FAILED') {\n data.failureReason = {\n failureCode,\n failureMessage,\n };\n }\n\n return {\n eventId: generateUUID(),\n eventType,\n timestamp: now,\n data,\n };\n}\n\nexport function generatePayoutWebhook(\n eventType: 'payout.accepted' | 'payout.completed' | 'payout.failed',\n options: WebhookGeneratorOptions = {}\n): PawapayWebhookEvent<PayoutCallbackData> {\n const {\n transactionId = generateUUID(),\n amount = '5000',\n currency = 'XAF',\n correspondent = 'MTN_MOMO_CMR',\n phoneNumber = '237670000000',\n status = eventType === 'payout.failed' ? 'FAILED' : 'COMPLETED',\n failureCode = 'RECIPIENT_NOT_FOUND',\n failureMessage = 'The recipient account was not found',\n } = options;\n\n const now = new Date().toISOString();\n\n const data: PayoutCallbackData = {\n payoutId: transactionId,\n status,\n amount,\n currency,\n correspondent,\n recipient: {\n type: 'MSISDN',\n address: {\n value: phoneNumber,\n },\n },\n customerTimestamp: now,\n created: now,\n };\n\n if (status === 'COMPLETED') {\n data.receivedByRecipient = now;\n }\n\n if (status === 'FAILED') {\n data.failureReason = {\n failureCode,\n failureMessage,\n };\n }\n\n return {\n eventId: generateUUID(),\n eventType,\n timestamp: now,\n data,\n };\n}\n\nexport interface RefundCallbackData {\n refundId: string;\n depositId: string;\n status: 'COMPLETED' | 'FAILED';\n amount: string;\n currency: string;\n correspondent: string;\n recipient: {\n type: string;\n address: {\n value: string;\n };\n };\n created: string;\n failureReason?: {\n failureCode: string;\n failureMessage: string;\n };\n}\n\nexport function generateRefundWebhook(\n eventType: 'refund.completed' | 'refund.failed',\n options: WebhookGeneratorOptions & { depositId?: string } = {}\n): PawapayWebhookEvent<RefundCallbackData> {\n const {\n transactionId = generateUUID(),\n depositId = generateUUID(),\n amount = '5000',\n currency = 'XAF',\n correspondent = 'MTN_MOMO_CMR',\n phoneNumber = '237670000000',\n status = eventType === 'refund.failed' ? 'FAILED' : 'COMPLETED',\n failureCode = 'REFUND_LIMIT_EXCEEDED',\n failureMessage = 'The refund limit has been exceeded',\n } = options;\n\n const now = new Date().toISOString();\n\n const data: RefundCallbackData = {\n refundId: transactionId,\n depositId,\n status,\n amount,\n currency,\n correspondent,\n recipient: {\n type: 'MSISDN',\n address: {\n value: phoneNumber,\n },\n },\n created: now,\n };\n\n if (status === 'FAILED') {\n data.failureReason = {\n failureCode,\n failureMessage,\n };\n }\n\n return {\n eventId: generateUUID(),\n eventType,\n timestamp: now,\n data,\n };\n}\n\nexport type MockWebhookEvent =\n | PawapayWebhookEvent<DepositCallbackData>\n | PawapayWebhookEvent<PayoutCallbackData>\n | PawapayWebhookEvent<RefundCallbackData>;\n\nexport function generateWebhook(\n eventType: WebhookEventType,\n options: WebhookGeneratorOptions & { depositId?: string } = {}\n): MockWebhookEvent {\n if (eventType.startsWith('deposit.')) {\n return generateDepositWebhook(\n eventType as 'deposit.accepted' | 'deposit.completed' | 'deposit.failed',\n options\n );\n }\n\n if (eventType.startsWith('payout.')) {\n return generatePayoutWebhook(\n eventType as 'payout.accepted' | 'payout.completed' | 'payout.failed',\n options\n );\n }\n\n return generateRefundWebhook(\n eventType as 'refund.completed' | 'refund.failed',\n options\n );\n}\n\nexport const WEBHOOK_EVENT_TYPES: WebhookEventType[] = [\n 'deposit.accepted',\n 'deposit.completed',\n 'deposit.failed',\n 'payout.accepted',\n 'payout.completed',\n 'payout.failed',\n 'refund.completed',\n 'refund.failed',\n];\n\nexport const FAILURE_CODES = {\n deposit: [\n { code: 'INSUFFICIENT_FUNDS', message: 'The payer has insufficient funds' },\n { code: 'INVALID_PHONE_NUMBER', message: 'The phone number is invalid' },\n { code: 'TIMEOUT', message: 'The transaction timed out' },\n { code: 'RECIPIENT_NOT_REGISTERED', message: 'The recipient is not registered for mobile money' },\n { code: 'DECLINED', message: 'The transaction was declined by the payer' },\n ],\n payout: [\n { code: 'RECIPIENT_NOT_FOUND', message: 'The recipient account was not found' },\n { code: 'RECIPIENT_NOT_REGISTERED', message: 'The recipient is not registered for mobile money' },\n { code: 'INVALID_PHONE_NUMBER', message: 'The phone number is invalid' },\n { code: 'TIMEOUT', message: 'The transaction timed out' },\n { code: 'DAILY_LIMIT_EXCEEDED', message: 'The daily transaction limit has been exceeded' },\n ],\n refund: [\n { code: 'REFUND_LIMIT_EXCEEDED', message: 'The refund limit has been exceeded' },\n { code: 'ORIGINAL_DEPOSIT_NOT_FOUND', message: 'The original deposit was not found' },\n { code: 'REFUND_ALREADY_PROCESSED', message: 'A refund has already been processed for this deposit' },\n { code: 'TIMEOUT', message: 'The refund request timed out' },\n ],\n};\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utility function to merge Tailwind CSS classes with proper conflict resolution.\n * Combines clsx for conditional class names and tailwind-merge for deduplication.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","'use client';\n\nimport { useState, useMemo, useCallback, forwardRef } from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport {\n useReactTable,\n getCoreRowModel,\n getPaginationRowModel,\n getFilteredRowModel,\n flexRender,\n type ColumnDef,\n type ColumnFiltersState,\n} from '@tanstack/react-table';\nimport {\n TrendingUp,\n ArrowDownCircle,\n ArrowUpCircle,\n XCircle,\n RefreshCw,\n Search,\n ChevronDown,\n Settings,\n ChevronLeft,\n ChevronRight,\n Copy,\n Check,\n AlertCircle,\n Clock,\n CheckCircle2,\n Plus,\n Ban,\n Hourglass,\n Inbox,\n BarChart3,\n LayoutDashboard,\n} from 'lucide-react';\nimport {\n AreaChart,\n Area,\n BarChart,\n Bar,\n PieChart,\n Pie,\n Cell,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n Legend,\n} from 'recharts';\nimport { cn } from '../lib/utils';\nimport type { Correspondent } from '../constants/correspondents';\n\nexport type TransactionType = 'deposit' | 'payout' | 'refund';\n\nexport type TransactionStatus =\n | 'ACCEPTED'\n | 'PENDING'\n | 'ENQUEUED'\n | 'PROCESSING'\n | 'COMPLETED'\n | 'FAILED'\n | 'CANCELLED'\n | 'REJECTED';\n\nexport interface Transaction {\n id: string;\n type: TransactionType;\n amount: number;\n currency: string;\n status: TransactionStatus;\n provider: Correspondent;\n phoneNumber: string;\n description?: string;\n createdAt: string;\n updatedAt?: string;\n failureReason?: string;\n}\n\nexport interface SpaarkPaySdkFinanceDashboardProps {\n transactions: Transaction[];\n title?: string;\n subtitle?: string;\n locale?: 'fr' | 'en';\n className?: string;\n showExpertMode?: boolean;\n onExpertModeClick?: () => void;\n onTransactionClick?: (transaction: Transaction) => void;\n onRefresh?: () => void;\n onAddTransaction?: () => void;\n onSettings?: () => void;\n isLoading?: boolean;\n}\n\nconst translations = {\n fr: {\n title: 'Tableau de bord financier',\n subtitle: 'Vue d\\'ensemble de vos transactions',\n totalVolume: 'Volume Total',\n deposits: 'Dépôts',\n payouts: 'Retraits',\n failed: 'Échecs',\n refunds: 'Remboursements',\n pending: 'En attente',\n completed: 'Complétées',\n cancelled: 'Annulées',\n search: 'Rechercher par ID ou téléphone...',\n allTypes: 'Tous les types',\n allStatuses: 'Tous les statuts',\n deposit: 'Dépôt',\n payout: 'Retrait',\n refund: 'Remboursement',\n expertMode: 'Mode Expert',\n refresh: 'Actualiser',\n settings: 'Paramètres',\n noTransactions: 'Aucune transaction',\n noTransactionsDesc: 'Les transactions apparaîtront ici une fois effectuées.',\n addTransaction: 'Nouvelle transaction',\n id: 'ID',\n type: 'Type',\n amount: 'Montant',\n status: 'Statut',\n provider: 'Opérateur',\n phone: 'Téléphone',\n date: 'Date',\n page: 'Page',\n of: 'sur',\n transactions: 'transactions',\n copied: 'Copié !',\n dashboard: 'Tableau de bord',\n charts: 'Graphiques',\n volumeOverTime: 'Volume dans le temps',\n transactionsByType: 'Par type',\n statusDistribution: 'Par statut',\n noDataForCharts: 'Pas de données pour les graphiques',\n loading: 'Chargement...',\n previous: 'Précédent',\n next: 'Suivant',\n },\n en: {\n title: 'Finance Dashboard',\n subtitle: 'Overview of your transactions',\n totalVolume: 'Total Volume',\n deposits: 'Deposits',\n payouts: 'Payouts',\n failed: 'Failed',\n refunds: 'Refunds',\n pending: 'Pending',\n completed: 'Completed',\n cancelled: 'Cancelled',\n search: 'Search by ID or phone...',\n allTypes: 'All types',\n allStatuses: 'All statuses',\n deposit: 'Deposit',\n payout: 'Payout',\n refund: 'Refund',\n expertMode: 'Expert Mode',\n refresh: 'Refresh',\n settings: 'Settings',\n noTransactions: 'No transactions',\n noTransactionsDesc: 'Transactions will appear here once made.',\n addTransaction: 'New transaction',\n id: 'ID',\n type: 'Type',\n amount: 'Amount',\n status: 'Status',\n provider: 'Provider',\n phone: 'Phone',\n date: 'Date',\n page: 'Page',\n of: 'of',\n transactions: 'transactions',\n copied: 'Copied!',\n dashboard: 'Dashboard',\n charts: 'Charts',\n volumeOverTime: 'Volume over time',\n transactionsByType: 'By type',\n statusDistribution: 'By status',\n noDataForCharts: 'No data for charts',\n loading: 'Loading...',\n previous: 'Previous',\n next: 'Next',\n },\n};\n\nconst STATUS_COLORS: Record<TransactionStatus, string> = {\n COMPLETED: 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200',\n ACCEPTED: 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200',\n PENDING: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200',\n ENQUEUED: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200',\n PROCESSING: 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200',\n FAILED: 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200',\n CANCELLED: 'bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-200',\n REJECTED: 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200',\n};\n\nconst CHART_COLORS = {\n deposit: '#22c55e',\n payout: '#3b82f6',\n refund: '#f97316',\n COMPLETED: '#22c55e',\n PENDING: '#eab308',\n PROCESSING: '#3b82f6',\n ACCEPTED: '#3b82f6',\n FAILED: '#ef4444',\n CANCELLED: '#6b7280',\n REJECTED: '#ef4444',\n ENQUEUED: '#eab308',\n};\n\n// ============================================================================\n// shadcn/ui-like Components\n// ============================================================================\n\n// Button\nconst Button = forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n variant?: 'default' | 'outline' | 'ghost' | 'secondary';\n size?: 'default' | 'sm' | 'lg' | 'icon';\n }\n>(({ className, variant = 'default', size = 'default', ...props }, ref) => (\n <button\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n 'bg-primary text-primary-foreground hover:bg-primary/90': variant === 'default',\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground': variant === 'outline',\n 'hover:bg-accent hover:text-accent-foreground': variant === 'ghost',\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80': variant === 'secondary',\n },\n {\n 'h-10 px-4 py-2': size === 'default',\n 'h-9 rounded-md px-3': size === 'sm',\n 'h-11 rounded-md px-8': size === 'lg',\n 'h-10 w-10': size === 'icon',\n },\n className\n )}\n {...props}\n />\n));\nButton.displayName = 'Button';\n\n// Tabs\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n 'inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground',\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm',\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\n// Select\nconst Select = SelectPrimitive.Root;\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1',\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectContent = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n 'relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n {...props}\n >\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectItem = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\n// Card\nconst Card = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('rounded-lg border bg-card text-card-foreground shadow-sm', className)}\n {...props}\n />\n )\n);\nCard.displayName = 'Card';\n\nconst CardHeader = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n )\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn('text-lg font-semibold leading-none tracking-tight', className)} {...props} />\n )\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardContent = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n )\n);\nCardContent.displayName = 'CardContent';\n\n// Input\nconst Input = forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement>>(\n ({ className, type, ...props }, ref) => (\n <input\n type={type}\n className={cn(\n 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n )\n);\nInput.displayName = 'Input';\n\n// Table (shadcn/ui style)\nconst Table = forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table ref={ref} className={cn('w-full caption-bottom text-sm', className)} {...props} />\n </div>\n )\n);\nTable.displayName = 'Table';\n\nconst TableHeader = forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />\n )\n);\nTableHeader.displayName = 'TableHeader';\n\nconst TableBody = forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n )\n);\nTableBody.displayName = 'TableBody';\n\nconst TableRow = forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn('border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted', className)}\n {...props}\n />\n )\n);\nTableRow.displayName = 'TableRow';\n\nconst TableHead = forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0',\n className\n )}\n {...props}\n />\n )\n);\nTableHead.displayName = 'TableHead';\n\nconst TableCell = forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td ref={ref} className={cn('p-4 align-middle [&:has([role=checkbox])]:pr-0', className)} {...props} />\n )\n);\nTableCell.displayName = 'TableCell';\n\n// Skeleton\nconst Skeleton = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('animate-pulse rounded-md bg-muted', className)} {...props} />\n);\n\n// Spinner\nconst Spinner = ({ className }: { className?: string }) => (\n <svg className={cn('animate-spin', className)} xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n);\n\n// Empty State\nconst EmptyState = ({\n icon: Icon = Inbox,\n title,\n description,\n action,\n}: {\n icon?: React.ElementType;\n title: string;\n description?: string;\n action?: React.ReactNode;\n}) => (\n <div className=\"flex flex-col items-center justify-center py-12 px-4 text-center\">\n <div className=\"flex h-20 w-20 items-center justify-center rounded-full bg-muted\">\n <Icon className=\"h-10 w-10 text-muted-foreground\" />\n </div>\n <h3 className=\"mt-4 text-lg font-semibold\">{title}</h3>\n {description && <p className=\"mt-2 text-sm text-muted-foreground max-w-sm\">{description}</p>}\n {action && <div className=\"mt-6\">{action}</div>}\n </div>\n);\n\n// Status Icon\nconst StatusIcon = ({ status }: { status: TransactionStatus }) => {\n switch (status) {\n case 'COMPLETED':\n return <CheckCircle2 className=\"w-3.5 h-3.5\" />;\n case 'FAILED':\n case 'REJECTED':\n return <XCircle className=\"w-3.5 h-3.5\" />;\n case 'CANCELLED':\n return <Ban className=\"w-3.5 h-3.5\" />;\n case 'PENDING':\n case 'ENQUEUED':\n return <Clock className=\"w-3.5 h-3.5\" />;\n case 'PROCESSING':\n case 'ACCEPTED':\n return <Spinner className=\"w-3.5 h-3.5\" />;\n default:\n return <AlertCircle className=\"w-3.5 h-3.5\" />;\n }\n};\n\n// ============================================================================\n// Utilities\n// ============================================================================\n\nconst formatCurrency = (amount: number, currency: string) => {\n return new Intl.NumberFormat('fr-FR', {\n style: 'decimal',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(amount) + ' ' + currency;\n};\n\nconst formatDate = (dateString: string, locale: 'fr' | 'en') => {\n const date = new Date(dateString);\n return new Intl.DateTimeFormat(locale === 'fr' ? 'fr-FR' : 'en-US', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n }).format(date);\n};\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport function SpaarkPaySdkFinanceDashboard({\n transactions,\n title,\n subtitle,\n locale = 'fr',\n className = '',\n showExpertMode = true,\n onExpertModeClick,\n onTransactionClick,\n onRefresh,\n onAddTransaction,\n onSettings,\n isLoading = false,\n}: SpaarkPaySdkFinanceDashboardProps) {\n const t = translations[locale];\n\n const [searchQuery, setSearchQuery] = useState('');\n const [typeFilter, setTypeFilter] = useState<TransactionType | 'all'>('all');\n const [statusFilter, setStatusFilter] = useState<TransactionStatus | 'all'>('all');\n const [copiedId, setCopiedId] = useState<string | null>(null);\n const [activeTab, setActiveTab] = useState('dashboard');\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n\n const stats = useMemo(() => {\n const deposits = transactions.filter(tx => tx.type === 'deposit');\n const payouts = transactions.filter(tx => tx.type === 'payout');\n const refunds = transactions.filter(tx => tx.type === 'refund');\n const failed = transactions.filter(tx => tx.status === 'FAILED' || tx.status === 'REJECTED');\n const pending = transactions.filter(tx => ['PENDING', 'ENQUEUED', 'PROCESSING', 'ACCEPTED'].includes(tx.status));\n const completed = transactions.filter(tx => tx.status === 'COMPLETED');\n const cancelled = transactions.filter(tx => tx.status === 'CANCELLED');\n\n const totalVolume = transactions\n .filter(tx => tx.status === 'COMPLETED')\n .reduce((sum, tx) => sum + tx.amount, 0);\n\n const depositsTotal = deposits.filter(tx => tx.status === 'COMPLETED').reduce((sum, tx) => sum + tx.amount, 0);\n const payoutsTotal = payouts.filter(tx => tx.status === 'COMPLETED').reduce((sum, tx) => sum + tx.amount, 0);\n const refundsTotal = refunds.filter(tx => tx.status === 'COMPLETED').reduce((sum, tx) => sum + tx.amount, 0);\n\n return {\n totalVolume,\n depositsCount: deposits.length,\n depositsTotal,\n payoutsCount: payouts.length,\n payoutsTotal,\n failedCount: failed.length,\n refundsCount: refunds.length,\n refundsTotal,\n pendingCount: pending.length,\n completedCount: completed.length,\n cancelledCount: cancelled.length,\n };\n }, [transactions]);\n\n const chartData = useMemo(() => {\n const byDate: Record<string, { date: string; deposits: number; payouts: number; refunds: number }> = {};\n\n transactions.forEach(tx => {\n const date = new Date(tx.createdAt).toLocaleDateString(locale === 'fr' ? 'fr-FR' : 'en-US', {\n day: '2-digit',\n month: 'short',\n });\n\n if (!byDate[date]) {\n byDate[date] = { date, deposits: 0, payouts: 0, refunds: 0 };\n }\n\n if (tx.status === 'COMPLETED') {\n byDate[date][tx.type === 'deposit' ? 'deposits' : tx.type === 'payout' ? 'payouts' : 'refunds'] += tx.amount;\n }\n });\n\n const volumeData = Object.values(byDate).slice(-7);\n const typeData = [\n { name: t.deposit, value: stats.depositsTotal, count: stats.depositsCount, fill: CHART_COLORS.deposit },\n { name: t.payout, value: stats.payoutsTotal, count: stats.payoutsCount, fill: CHART_COLORS.payout },\n { name: t.refund, value: stats.refundsTotal, count: stats.refundsCount, fill: CHART_COLORS.refund },\n ];\n const statusData = [\n { name: 'Completed', value: stats.completedCount, fill: CHART_COLORS.COMPLETED },\n { name: 'Pending', value: stats.pendingCount, fill: CHART_COLORS.PENDING },\n { name: 'Failed', value: stats.failedCount, fill: CHART_COLORS.FAILED },\n { name: 'Cancelled', value: stats.cancelledCount, fill: CHART_COLORS.CANCELLED },\n ].filter(d => d.value > 0);\n\n return { volumeData, typeData, statusData };\n }, [transactions, stats, locale, t]);\n\n const filteredTransactions = useMemo(() => {\n return transactions.filter(tx => {\n const matchesSearch = searchQuery === '' ||\n tx.id.toLowerCase().includes(searchQuery.toLowerCase()) ||\n tx.phoneNumber.includes(searchQuery);\n const matchesType = typeFilter === 'all' || tx.type === typeFilter;\n const matchesStatus = statusFilter === 'all' || tx.status === statusFilter;\n return matchesSearch && matchesType && matchesStatus;\n });\n }, [transactions, searchQuery, typeFilter, statusFilter]);\n\n const copyToClipboard = useCallback((text: string) => {\n navigator.clipboard.writeText(text);\n setCopiedId(text);\n setTimeout(() => setCopiedId(null), 2000);\n }, []);\n\n const mainCurrency = transactions[0]?.currency || 'XAF';\n\n // Table columns with @tanstack/react-table\n const columns: ColumnDef<Transaction>[] = useMemo(() => [\n {\n accessorKey: 'id',\n header: t.id,\n cell: ({ row }) => (\n <div className=\"flex items-center gap-2\">\n <span className=\"font-mono text-xs truncate max-w-[100px]\" title={row.original.id}>\n {row.original.id.slice(0, 8)}...\n </span>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6\"\n onClick={(e) => {\n e.stopPropagation();\n copyToClipboard(row.original.id);\n }}\n >\n {copiedId === row.original.id ? (\n <Check className=\"w-3.5 h-3.5 text-green-600\" />\n ) : (\n <Copy className=\"w-3.5 h-3.5 text-muted-foreground\" />\n )}\n </Button>\n </div>\n ),\n },\n {\n accessorKey: 'type',\n header: t.type,\n cell: ({ row }) => (\n <span className={cn(\n 'inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded-full',\n row.original.type === 'deposit' && 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200',\n row.original.type === 'payout' && 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200',\n row.original.type === 'refund' && 'bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200',\n )}>\n {row.original.type === 'deposit' && <ArrowDownCircle className=\"w-3 h-3\" />}\n {row.original.type === 'payout' && <ArrowUpCircle className=\"w-3 h-3\" />}\n {row.original.type === 'refund' && <RefreshCw className=\"w-3 h-3\" />}\n {t[row.original.type]}\n </span>\n ),\n },\n {\n accessorKey: 'amount',\n header: t.amount,\n cell: ({ row }) => <span className=\"font-semibold\">{formatCurrency(row.original.amount, row.original.currency)}</span>,\n },\n {\n accessorKey: 'status',\n header: t.status,\n cell: ({ row }) => (\n <span className={cn('inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded-full', STATUS_COLORS[row.original.status])}>\n <StatusIcon status={row.original.status} />\n {row.original.status}\n </span>\n ),\n },\n {\n accessorKey: 'provider',\n header: t.provider,\n cell: ({ row }) => <span className=\"text-muted-foreground\">{row.original.provider.replace(/_/g, ' ')}</span>,\n },\n {\n accessorKey: 'phoneNumber',\n header: t.phone,\n cell: ({ row }) => <span className=\"font-mono text-muted-foreground\">{row.original.phoneNumber}</span>,\n },\n {\n accessorKey: 'createdAt',\n header: t.date,\n cell: ({ row }) => <span className=\"text-muted-foreground\">{formatDate(row.original.createdAt, locale)}</span>,\n },\n ], [t, locale, copiedId, copyToClipboard]);\n\n const table = useReactTable({\n data: filteredTransactions,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnFiltersChange: setColumnFilters,\n state: { columnFilters },\n initialState: { pagination: { pageSize: 10 } },\n });\n\n // Skeleton loading for table\n const TableSkeleton = () => (\n <div className=\"space-y-3 p-4\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-4\">\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-6 w-16 rounded-full\" />\n <Skeleton className=\"h-4 w-20\" />\n <Skeleton className=\"h-6 w-20 rounded-full\" />\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-4 w-28\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n ))}\n </div>\n );\n\n // Skeleton loading for cards\n const CardSkeleton = () => (\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-8 w-8 rounded-md\" />\n <Skeleton className=\"h-4 w-24\" />\n </div>\n </CardHeader>\n <CardContent>\n <Skeleton className=\"h-8 w-32 mb-2\" />\n <Skeleton className=\"h-3 w-20\" />\n </CardContent>\n </Card>\n );\n\n return (\n <div className={cn('space-y-6', className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\n <div>\n <h1 className=\"text-2xl font-bold tracking-tight\">{title || t.title}</h1>\n <p className=\"text-muted-foreground mt-1\">{subtitle || t.subtitle}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n {onRefresh && (\n <Button variant=\"outline\" size=\"sm\" onClick={onRefresh} disabled={isLoading}>\n <RefreshCw className={cn('w-4 h-4', isLoading && 'animate-spin')} />\n {t.refresh}\n </Button>\n )}\n {onSettings && (\n <Button variant=\"outline\" size=\"icon\" onClick={onSettings} title={t.settings}>\n <Settings className=\"w-4 h-4\" />\n </Button>\n )}\n {showExpertMode && onExpertModeClick && (\n <Button onClick={onExpertModeClick}>{t.expertMode}</Button>\n )}\n </div>\n </div>\n\n {/* Tabs */}\n <Tabs value={activeTab} onValueChange={setActiveTab}>\n <TabsList>\n <TabsTrigger value=\"dashboard\" className=\"gap-2\">\n <LayoutDashboard className=\"w-4 h-4\" />\n {t.dashboard}\n </TabsTrigger>\n <TabsTrigger value=\"charts\" className=\"gap-2\">\n <BarChart3 className=\"w-4 h-4\" />\n {t.charts}\n </TabsTrigger>\n </TabsList>\n\n {/* Dashboard Tab */}\n <TabsContent value=\"dashboard\" className=\"space-y-6\">\n {/* KPI Cards */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n {isLoading ? (\n <>\n {Array.from({ length: 8 }).map((_, i) => <CardSkeleton key={i} />)}\n </>\n ) : (\n <>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-primary/10\">\n <TrendingUp className=\"w-4 h-4 text-primary\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.totalVolume}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{formatCurrency(stats.totalVolume, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">{transactions.length} {t.transactions}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-green-500/10\">\n <ArrowDownCircle className=\"w-4 h-4 text-green-600 dark:text-green-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.deposits}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{formatCurrency(stats.depositsTotal, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">{stats.depositsCount} {t.transactions}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-blue-500/10\">\n <ArrowUpCircle className=\"w-4 h-4 text-blue-600 dark:text-blue-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.payouts}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{formatCurrency(stats.payoutsTotal, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">{stats.payoutsCount} {t.transactions}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-orange-500/10\">\n <RefreshCw className=\"w-4 h-4 text-orange-600 dark:text-orange-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.refunds}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{formatCurrency(stats.refundsTotal, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">{stats.refundsCount} {t.transactions}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-yellow-500/10\">\n <Hourglass className=\"w-4 h-4 text-yellow-600 dark:text-yellow-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.pending}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{stats.pendingCount}</p>\n <p className=\"text-xs text-muted-foreground\">{t.transactions}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-green-500/10\">\n <CheckCircle2 className=\"w-4 h-4 text-green-600 dark:text-green-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.completed}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{stats.completedCount}</p>\n <p className=\"text-xs text-muted-foreground\">{t.transactions}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-red-500/10\">\n <XCircle className=\"w-4 h-4 text-red-600 dark:text-red-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.failed}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{stats.failedCount}</p>\n <p className=\"text-xs text-muted-foreground\">{t.transactions}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-gray-500/10\">\n <Ban className=\"w-4 h-4 text-gray-600 dark:text-gray-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.cancelled}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{stats.cancelledCount}</p>\n <p className=\"text-xs text-muted-foreground\">{t.transactions}</p>\n </CardContent>\n </Card>\n </>\n )}\n </div>\n\n {/* Filters */}\n <div className=\"flex flex-wrap gap-3\">\n <div className=\"relative flex-1 min-w-[200px]\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground pointer-events-none\" />\n <Input\n type=\"text\"\n placeholder={t.search}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n\n <Select value={typeFilter} onValueChange={(value) => setTypeFilter(value as TransactionType | 'all')}>\n <SelectTrigger className=\"w-[160px]\">\n <SelectValue placeholder={t.allTypes} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">{t.allTypes}</SelectItem>\n <SelectItem value=\"deposit\">{t.deposit}</SelectItem>\n <SelectItem value=\"payout\">{t.payout}</SelectItem>\n <SelectItem value=\"refund\">{t.refund}</SelectItem>\n </SelectContent>\n </Select>\n\n <Select value={statusFilter} onValueChange={(value) => setStatusFilter(value as TransactionStatus | 'all')}>\n <SelectTrigger className=\"w-[160px]\">\n <SelectValue placeholder={t.allStatuses} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">{t.allStatuses}</SelectItem>\n <SelectItem value=\"COMPLETED\">COMPLETED</SelectItem>\n <SelectItem value=\"PENDING\">PENDING</SelectItem>\n <SelectItem value=\"PROCESSING\">PROCESSING</SelectItem>\n <SelectItem value=\"ACCEPTED\">ACCEPTED</SelectItem>\n <SelectItem value=\"FAILED\">FAILED</SelectItem>\n <SelectItem value=\"CANCELLED\">CANCELLED</SelectItem>\n <SelectItem value=\"REJECTED\">REJECTED</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Transactions Table */}\n <Card>\n {isLoading ? (\n <TableSkeleton />\n ) : filteredTransactions.length === 0 ? (\n <EmptyState\n icon={Inbox}\n title={t.noTransactions}\n description={t.noTransactionsDesc}\n action={\n onAddTransaction && (\n <Button onClick={onAddTransaction}>\n <Plus className=\"w-4 h-4\" />\n {t.addTransaction}\n </Button>\n )\n }\n />\n ) : (\n <>\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map(headerGroup => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map(header => (\n <TableHead key={header.id}>\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows.map(row => (\n <TableRow\n key={row.id}\n onClick={() => onTransactionClick?.(row.original)}\n className={onTransactionClick ? 'cursor-pointer' : ''}\n >\n {row.getVisibleCells().map(cell => (\n <TableCell key={cell.id}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n {/* Pagination */}\n <div className=\"flex items-center justify-between px-4 py-3 border-t\">\n <p className=\"text-sm text-muted-foreground\">\n {filteredTransactions.length} {t.transactions}\n </p>\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <ChevronLeft className=\"w-4 h-4\" />\n {t.previous}\n </Button>\n <span className=\"text-sm px-2\">\n {t.page} {table.getState().pagination.pageIndex + 1} {t.of} {table.getPageCount()}\n </span>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n {t.next}\n <ChevronRight className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n </>\n )}\n </Card>\n </TabsContent>\n\n {/* Charts Tab */}\n <TabsContent value=\"charts\" className=\"space-y-6\">\n {transactions.length === 0 ? (\n <Card>\n <EmptyState\n icon={BarChart3}\n title={t.noDataForCharts}\n description={t.noTransactionsDesc}\n />\n </Card>\n ) : (\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <Card className=\"col-span-1 lg:col-span-2\">\n <CardHeader>\n <CardTitle>{t.volumeOverTime}</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"h-[300px]\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={chartData.volumeData}>\n <defs>\n <linearGradient id=\"colorDeposits\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={CHART_COLORS.deposit} stopOpacity={0.3} />\n <stop offset=\"95%\" stopColor={CHART_COLORS.deposit} stopOpacity={0} />\n </linearGradient>\n <linearGradient id=\"colorPayouts\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={CHART_COLORS.payout} stopOpacity={0.3} />\n <stop offset=\"95%\" stopColor={CHART_COLORS.payout} stopOpacity={0} />\n </linearGradient>\n </defs>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis dataKey=\"date\" className=\"text-xs\" />\n <YAxis className=\"text-xs\" />\n <Tooltip contentStyle={{ backgroundColor: 'hsl(var(--popover))', border: '1px solid hsl(var(--border))', borderRadius: '8px' }} />\n <Legend />\n <Area type=\"monotone\" dataKey=\"deposits\" name={t.deposits} stroke={CHART_COLORS.deposit} fillOpacity={1} fill=\"url(#colorDeposits)\" />\n <Area type=\"monotone\" dataKey=\"payouts\" name={t.payouts} stroke={CHART_COLORS.payout} fillOpacity={1} fill=\"url(#colorPayouts)\" />\n </AreaChart>\n </ResponsiveContainer>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>{t.transactionsByType}</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"h-[300px]\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={chartData.typeData}>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis dataKey=\"name\" className=\"text-xs\" />\n <YAxis className=\"text-xs\" />\n <Tooltip contentStyle={{ backgroundColor: 'hsl(var(--popover))', border: '1px solid hsl(var(--border))', borderRadius: '8px' }} formatter={(value: number) => formatCurrency(value, mainCurrency)} />\n <Bar dataKey=\"value\" name={t.amount} radius={[4, 4, 0, 0]}>\n {chartData.typeData.map((entry, index) => (\n <Cell key={`cell-${index}`} fill={entry.fill} />\n ))}\n </Bar>\n </BarChart>\n </ResponsiveContainer>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>{t.statusDistribution}</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"h-[300px]\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n <Pie data={chartData.statusData} cx=\"50%\" cy=\"50%\" innerRadius={60} outerRadius={100} paddingAngle={2} dataKey=\"value\" label={({ name, percent }) => `${name} ${(percent * 100).toFixed(0)}%`} labelLine={false}>\n {chartData.statusData.map((entry, index) => (\n <Cell key={`cell-${index}`} fill={entry.fill} />\n ))}\n </Pie>\n <Tooltip contentStyle={{ backgroundColor: 'hsl(var(--popover))', border: '1px solid hsl(var(--border))', borderRadius: '8px' }} />\n <Legend />\n </PieChart>\n </ResponsiveContainer>\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n\nexport default SpaarkPaySdkFinanceDashboard;\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport type { Correspondent } from './constants/correspondents';\nimport type { DepositResponse, PayoutResponse } from './types/transactions';\nimport type { WebhookEventType } from './types/webhooks';\nimport {\n generateWebhook,\n WEBHOOK_EVENT_TYPES,\n} from './mocks/webhook-generators';\n\nexport {\n SpaarkPaySdkFinanceDashboard,\n type SpaarkPaySdkFinanceDashboardProps,\n type Transaction,\n type TransactionType,\n type TransactionStatus,\n} from './components/SpaarkPaySdkFinanceDashboard';\n\ntype OperationStatus = 'idle' | 'loading' | 'success' | 'error';\ntype TabType = 'deposit' | 'payout' | 'status' | 'toolkit' | 'finances' | 'webhooks';\n\ninterface TestResult {\n id: string;\n operation: string;\n status: OperationStatus;\n response?: unknown;\n error?: string;\n timestamp: string;\n}\n\ninterface WebhookTestEvent {\n id: string;\n eventType: string;\n payload: unknown;\n signature: string;\n receivedAt: string;\n isVerified: boolean | null;\n}\n\nexport interface SpaarkPaySdkTestDashboardProps {\n apiKey?: string;\n environment?: 'sandbox' | 'production';\n className?: string;\n demoMode?: boolean;\n /** Base path for API routes (e.g., '/api/pawapay'). When set, requests go through your server instead of directly to Pawapay. */\n apiBasePath?: string;\n onDepositComplete?: (response: DepositResponse) => void;\n onPayoutComplete?: (response: PayoutResponse) => void;\n onError?: (error: Error) => void;\n}\n\n// Mock response generators for demo mode (V2 API format)\nconst createMockDepositResponse = (txId: string): DepositResponse => ({\n depositId: txId,\n status: 'ACCEPTED',\n created: new Date().toISOString(),\n nextStep: 'FINAL_STATUS',\n});\n\nconst createMockPayoutResponse = (txId: string): PayoutResponse => ({\n payoutId: txId,\n status: 'ACCEPTED',\n created: new Date().toISOString(),\n});\n\nconst createMockStatusResponse = (txId: string) => ({\n depositId: txId,\n status: ['COMPLETED', 'ACCEPTED', 'PROCESSING', 'ENQUEUED'][Math.floor(Math.random() * 4)],\n created: new Date(Date.now() - 60000).toISOString(),\n amount: '5000',\n currency: 'XAF',\n country: 'CMR',\n payer: {\n type: 'MMO',\n accountDetails: {\n phoneNumber: '237670000000',\n provider: 'MTN_MOMO_CMR',\n },\n },\n});\n\nconst createMockAvailabilityResponse = () => [\n {\n country: 'CMR',\n providers: [\n {\n provider: 'MTN_MOMO_CMR',\n operationTypes: [\n { operationType: 'DEPOSIT', status: 'OPERATIONAL' },\n { operationType: 'PAYOUT', status: 'OPERATIONAL' },\n ],\n },\n {\n provider: 'ORANGE_CMR',\n operationTypes: [\n { operationType: 'DEPOSIT', status: 'OPERATIONAL' },\n { operationType: 'PAYOUT', status: 'DELAYED' },\n ],\n },\n ],\n },\n];\n\nconst createMockPredictResponse = (phone: string) => ({\n country: 'CMR',\n provider: phone.startsWith('23767') ? 'MTN_MOMO_CMR' : 'ORANGE_CMR',\n phoneNumber: phone.replace(/\\D/g, ''),\n});\n\nconst createMockActiveConfigResponse = () => ({\n companyName: 'Demo Company',\n signatureConfiguration: {\n signedRequestsOnly: false,\n signedCallbacks: true,\n },\n countries: [\n {\n country: 'CMR',\n displayName: { en: 'Cameroon', fr: 'Cameroun' },\n prefix: '237',\n flag: 'https://cdn.pawapay.io/flags/cmr.svg',\n providers: [\n {\n provider: 'MTN_MOMO_CMR',\n displayName: 'MTN Mobile Money',\n nameDisplayedToCustomer: 'MTN MoMo',\n currencies: [\n {\n currency: 'XAF',\n displayName: 'CFA Franc',\n operationTypes: {\n DEPOSIT: { minAmount: '100', maxAmount: '1000000', status: 'OPERATIONAL' },\n PAYOUT: { minAmount: '100', maxAmount: '500000', status: 'OPERATIONAL' },\n },\n },\n ],\n },\n ],\n },\n ],\n});\n\nconst createMockWalletBalancesResponse = () => ({\n balances: [\n { country: 'CMR', currency: 'XAF', balance: '1250000.00' },\n { country: 'COG', currency: 'XAF', balance: '450000.00' },\n { country: 'GAB', currency: 'XAF', balance: '780000.00' },\n ],\n});\n\nconst createMockPublicKeysResponse = () => [\n {\n id: 'key-001',\n key: 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...',\n },\n];\n\nconst simulateDelay = (ms: number = 800) => new Promise(resolve => setTimeout(resolve, ms + Math.random() * 400));\n\n// HMAC-SHA256 computation using Web Crypto API (browser-compatible)\nasync function computeHmacSha256(message: string, secret: string): Promise<string> {\n const encoder = new TextEncoder();\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(message));\n return Array.from(new Uint8Array(signature))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nconst generateUUID = (): string => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\nconst PROVIDER_OPTIONS: Array<{ value: Correspondent; label: string; country: string }> = [\n { value: 'MTN_MOMO_CMR', label: 'MTN Mobile Money', country: 'Cameroun' },\n { value: 'ORANGE_CMR', label: 'Orange Money', country: 'Cameroun' },\n { value: 'MTN_MOMO_COG', label: 'MTN Mobile Money', country: 'Congo' },\n { value: 'AIRTEL_COG', label: 'Airtel Money', country: 'Congo' },\n { value: 'MTN_MOMO_GAB', label: 'MTN Mobile Money', country: 'Gabon' },\n { value: 'AIRTEL_GAB', label: 'Airtel Money', country: 'Gabon' },\n];\n\nconst CURRENCY_OPTIONS = [\n { value: 'XAF', label: 'XAF (CFA Franc BEAC)' },\n { value: 'XOF', label: 'XOF (CFA Franc BCEAO)' },\n { value: 'GHS', label: 'GHS (Ghana Cedi)' },\n { value: 'KES', label: 'KES (Kenyan Shilling)' },\n { value: 'RWF', label: 'RWF (Rwandan Franc)' },\n { value: 'TZS', label: 'TZS (Tanzanian Shilling)' },\n { value: 'UGX', label: 'UGX (Ugandan Shilling)' },\n { value: 'ZMW', label: 'ZMW (Zambian Kwacha)' },\n];\n\nexport function SpaarkPaySdkTestDashboard({\n apiKey: initialApiKey = '',\n environment: initialEnvironment = 'sandbox',\n className = '',\n demoMode: initialDemoMode = false,\n apiBasePath = '/api/pawapay',\n onDepositComplete,\n onPayoutComplete,\n onError,\n}: SpaarkPaySdkTestDashboardProps) {\n const [apiKey, setApiKey] = useState(initialApiKey);\n const [environment, setEnvironment] = useState<'sandbox' | 'production'>(initialEnvironment);\n const [isConfigured, setIsConfigured] = useState(!!initialApiKey || initialDemoMode);\n const [isDemoMode, setIsDemoMode] = useState(initialDemoMode);\n\n const [activeTab, setActiveTab] = useState<TabType>('deposit');\n const [phoneNumber, setPhoneNumber] = useState('237670000000');\n const [amount, setAmount] = useState('5000');\n const [currency, setCurrency] = useState('XAF');\n const [provider, setProvider] = useState<Correspondent>('MTN_MOMO_CMR');\n const [description, setDescription] = useState('Test Payment');\n const [transactionId, setTransactionId] = useState('');\n\n const [results, setResults] = useState<TestResult[]>([]);\n const [currentStatus, setCurrentStatus] = useState<OperationStatus>('idle');\n\n // Webhook testing states\n const [webhookSecret, setWebhookSecret] = useState('whsec_test_secret_key');\n const [webhookEvents, setWebhookEvents] = useState<WebhookTestEvent[]>([]);\n const [webhookEventType, setWebhookEventType] = useState<WebhookEventType>('deposit.completed');\n const [webhookAmount, setWebhookAmount] = useState('5000');\n const [webhookPhone, setWebhookPhone] = useState('237670000000');\n const [webhookProvider, setWebhookProvider] = useState<Correspondent>('MTN_MOMO_CMR');\n const [generatedPayload, setGeneratedPayload] = useState<string>('');\n const [generatedSignature, setGeneratedSignature] = useState<string>('');\n const [verifyPayload, setVerifyPayload] = useState<string>('');\n const [verifySignature, setVerifySignature] = useState<string>('');\n const [verifySecret, setVerifySecret] = useState<string>('');\n const [verifyResult, setVerifyResult] = useState<boolean | null>(null);\n const [parseInput, setParseInput] = useState<string>('');\n const [parsedEvent, setParsedEvent] = useState<Record<string, unknown> | null>(null);\n const [parseError, setParseError] = useState<string>('');\n const [eventLogFilter, setEventLogFilter] = useState<'all' | 'deposit' | 'payout' | 'refund'>('all');\n\n const addResult = useCallback((operation: string, status: OperationStatus, response?: unknown, error?: string) => {\n const result: TestResult = {\n id: generateUUID(),\n operation,\n status,\n response,\n error,\n timestamp: new Date().toLocaleTimeString(),\n };\n setResults((prev) => [result, ...prev].slice(0, 20));\n }, []);\n\n const handleConfigure = useCallback(() => {\n if (!apiKey.trim()) {\n addResult('Configuration', 'error', undefined, 'API Key is required');\n return;\n }\n setIsConfigured(true);\n setIsDemoMode(false);\n addResult('Configuration', 'success', { environment, configured: true, apiBasePath });\n }, [apiKey, environment, apiBasePath, addResult]);\n\n const handleDemoMode = useCallback(() => {\n setIsDemoMode(true);\n setIsConfigured(true);\n addResult('Configuration', 'success', { mode: 'demo', message: 'Demo mode activated - responses are simulated' });\n }, [addResult]);\n\n const handleDeposit = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n const txId = generateUUID();\n setTransactionId(txId);\n\n let response: DepositResponse;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockDepositResponse(txId);\n } else {\n const res = await fetch(`${apiBasePath}/deposit`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n apiKey,\n environment,\n amount: parseFloat(amount),\n currency,\n provider,\n phoneNumber,\n customerMessage: description.slice(0, 22),\n transactionId: txId,\n }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Deposit failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Deposit', 'success', response);\n onDepositComplete?.(response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Deposit failed';\n addResult('Deposit', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, amount, currency, provider, phoneNumber, description, addResult, onDepositComplete, onError]);\n\n const handlePayout = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n const txId = generateUUID();\n setTransactionId(txId);\n\n let response: PayoutResponse;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockPayoutResponse(txId);\n } else {\n const res = await fetch(`${apiBasePath}/payout`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n apiKey,\n environment,\n amount: parseFloat(amount),\n currency,\n provider,\n phoneNumber,\n transactionId: txId,\n }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Payout failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Payout', 'success', response);\n onPayoutComplete?.(response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Payout failed';\n addResult('Payout', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, amount, currency, provider, phoneNumber, addResult, onPayoutComplete, onError]);\n\n const handleCheckStatus = useCallback(async () => {\n if ((!apiKey && !isDemoMode) || !transactionId) {\n addResult('Check Status', 'error', undefined, 'No transaction ID');\n return;\n }\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockStatusResponse(transactionId);\n } else {\n const res = await fetch(`${apiBasePath}/status`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment, transactionId }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Status check failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Check Status', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Status check failed';\n addResult('Check Status', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, transactionId, addResult, onError]);\n\n const handleGetAvailability = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockAvailabilityResponse();\n } else {\n const res = await fetch(`${apiBasePath}/availability`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Availability check failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Provider Availability', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Availability check failed';\n addResult('Provider Availability', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, addResult, onError]);\n\n const handlePredictProvider = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockPredictResponse(phoneNumber);\n } else {\n const res = await fetch(`${apiBasePath}/predict-provider`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment, phoneNumber }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Prediction failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Predict Provider', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Prediction failed';\n addResult('Predict Provider', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, phoneNumber, addResult, onError]);\n\n const handleGetActiveConfig = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockActiveConfigResponse();\n } else {\n const res = await fetch(`${apiBasePath}/active-config`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Failed to get config');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Active Configuration', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Failed to get config';\n addResult('Active Configuration', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, addResult, onError]);\n\n const handleGetPublicKeys = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockPublicKeysResponse();\n } else {\n const res = await fetch(`${apiBasePath}/public-keys`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Failed to get public keys');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Public Keys', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Failed to get public keys';\n addResult('Public Keys', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, addResult, onError]);\n\n const handleGetWalletBalances = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockWalletBalancesResponse();\n } else {\n const res = await fetch(`${apiBasePath}/wallet-balances`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Failed to get balances');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Wallet Balances', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Failed to get balances';\n addResult('Wallet Balances', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, addResult, onError]);\n\n const copyToClipboard = useCallback((text: string) => {\n navigator.clipboard.writeText(text);\n }, []);\n\n if (!isConfigured) {\n return (\n <div className={`space-y-8 ${className}`}>\n <div>\n <h1 className=\"text-2xl font-bold tracking-tight\">Spaark Pay Console</h1>\n <p className=\"text-muted-foreground mt-1\">\n Configurez vos identifiants PawaPay pour commencer\n </p>\n </div>\n\n <div className=\"border border-border bg-background p-6 max-w-md space-y-6\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 bg-muted flex items-center justify-center\">\n <SettingsIcon />\n </div>\n <div>\n <h2 className=\"font-semibold\">SDK Configuration</h2>\n <p className=\"text-xs text-muted-foreground\">Enter your API credentials</p>\n </div>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">API Key</label>\n <input\n type=\"password\"\n placeholder=\"pk_sandbox_...\"\n value={apiKey}\n onChange={(e) => setApiKey(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Environnement</label>\n <div className=\"flex gap-2\">\n <button\n onClick={() => setEnvironment('sandbox')}\n className={`h-8 px-3 text-xs font-medium border transition-colors flex items-center gap-1.5 ${\n environment === 'sandbox'\n ? 'bg-blue-600 text-white border-blue-600'\n : 'bg-background border-border hover:bg-muted'\n }`}\n >\n <span className={`w-2 h-2 rounded-full ${environment === 'sandbox' ? 'bg-blue-200' : 'bg-blue-500'}`} />\n Sandbox\n </button>\n <button\n onClick={() => setEnvironment('production')}\n className={`h-8 px-3 text-xs font-medium border transition-colors flex items-center gap-1.5 ${\n environment === 'production'\n ? 'bg-green-600 text-white border-green-600'\n : 'bg-background border-border hover:bg-muted'\n }`}\n >\n <span className={`w-2 h-2 rounded-full ${environment === 'production' ? 'bg-green-200' : 'bg-green-500'}`} />\n Production\n </button>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {environment === 'sandbox'\n ? 'Utilisez le sandbox pour tester sans frais réels'\n : 'Attention : les transactions en production sont réelles'\n }\n </p>\n </div>\n\n <button\n onClick={handleConfigure}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2\"\n >\n <PlayIcon />\n Initialize SDK\n </button>\n\n <div className=\"relative flex items-center py-2\">\n <div className=\"flex-grow border-t border-border\"></div>\n <span className=\"flex-shrink mx-3 text-xs text-muted-foreground\">ou</span>\n <div className=\"flex-grow border-t border-border\"></div>\n </div>\n\n <button\n onClick={handleDemoMode}\n className=\"w-full h-8 px-3 text-xs font-medium border border-border bg-background hover:bg-muted transition-colors flex items-center justify-center gap-2\"\n >\n <BeakerIcon />\n Mode Démo (sans API key)\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={`space-y-6 ${className}`}>\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\n <div>\n <div className=\"flex items-center gap-2\">\n <h1 className=\"text-2xl font-bold tracking-tight\">Spaark Pay Console</h1>\n {isDemoMode ? (\n <span className=\"px-2 py-0.5 text-xs font-medium bg-amber-100 text-amber-800 dark:bg-amber-900 dark:text-amber-200\">\n DEMO\n </span>\n ) : environment === 'production' ? (\n <span className=\"px-2 py-0.5 text-xs font-medium bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200\">\n PRODUCTION\n </span>\n ) : (\n <span className=\"px-2 py-0.5 text-xs font-medium bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200\">\n SANDBOX\n </span>\n )}\n </div>\n <p className=\"text-muted-foreground mt-1\">\n {isDemoMode\n ? 'Mode démo - Les réponses sont simulées'\n : environment === 'production'\n ? 'Mode production - Transactions réelles'\n : 'Mode sandbox - Environnement de test'\n }\n </p>\n </div>\n <button\n onClick={() => setIsConfigured(false)}\n className=\"h-8 px-3 text-xs font-medium border border-border bg-background hover:bg-muted transition-colors flex items-center gap-2\"\n >\n <SettingsIcon />\n Reconfigure\n </button>\n </div>\n\n <div className=\"grid lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Tabs */}\n <div className=\"flex flex-wrap gap-1 bg-muted p-1\">\n <button\n onClick={() => setActiveTab('deposit')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'deposit' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <WalletIcon />\n Deposit\n </button>\n <button\n onClick={() => setActiveTab('payout')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'payout' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <PhoneIcon />\n Payout\n </button>\n <button\n onClick={() => setActiveTab('status')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'status' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <RefreshIcon />\n Status\n </button>\n <button\n onClick={() => setActiveTab('toolkit')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'toolkit' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <ToolkitIcon />\n Toolkit\n </button>\n <button\n onClick={() => setActiveTab('finances')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'finances' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <ChartIcon />\n Finances\n </button>\n <button\n onClick={() => setActiveTab('webhooks')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'webhooks' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <WebhookIcon />\n Webhooks\n </button>\n </div>\n\n {/* Deposit Tab */}\n {activeTab === 'deposit' && (\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Initiate Deposit</h3>\n <p className=\"text-xs text-muted-foreground\">Collect payment from a Mobile Money user</p>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Phone Number</label>\n <input\n placeholder=\"237670000000\"\n value={phoneNumber}\n onChange={(e) => setPhoneNumber(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Amount</label>\n <input\n type=\"number\"\n placeholder=\"5000\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Currency</label>\n <select\n value={currency}\n onChange={(e) => setCurrency(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {CURRENCY_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label}</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Provider</label>\n <select\n value={provider}\n onChange={(e) => setProvider(e.target.value as Correspondent)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {PROVIDER_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label} ({c.country})</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2 sm:col-span-2\">\n <label className=\"text-xs font-medium\">Customer Message (4-22 chars)</label>\n <input\n placeholder=\"Payment description\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n maxLength={22}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n </div>\n\n <button\n onClick={handleDeposit}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <PlayIcon />}\n Execute Deposit\n </button>\n </div>\n )}\n\n {/* Payout Tab */}\n {activeTab === 'payout' && (\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Initiate Payout</h3>\n <p className=\"text-xs text-muted-foreground\">Send money to a Mobile Money account</p>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Recipient Phone</label>\n <input\n placeholder=\"237670000000\"\n value={phoneNumber}\n onChange={(e) => setPhoneNumber(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Amount</label>\n <input\n type=\"number\"\n placeholder=\"5000\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Currency</label>\n <select\n value={currency}\n onChange={(e) => setCurrency(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {CURRENCY_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label}</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Provider</label>\n <select\n value={provider}\n onChange={(e) => setProvider(e.target.value as Correspondent)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {PROVIDER_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label} ({c.country})</option>\n ))}\n </select>\n </div>\n </div>\n\n <button\n onClick={handlePayout}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <PlayIcon />}\n Execute Payout\n </button>\n </div>\n )}\n\n {/* Status Tab */}\n {activeTab === 'status' && (\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Check Transaction Status</h3>\n <p className=\"text-xs text-muted-foreground\">Query the status of a transaction</p>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Transaction ID</label>\n <div className=\"flex gap-2\">\n <input\n placeholder=\"Enter transaction ID (UUID)\"\n value={transactionId}\n onChange={(e) => setTransactionId(e.target.value)}\n className=\"flex-1 h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring font-mono\"\n />\n {transactionId && (\n <button\n onClick={() => copyToClipboard(transactionId)}\n className=\"w-8 h-8 border border-border bg-background hover:bg-muted transition-colors flex items-center justify-center\"\n title=\"Copy to clipboard\"\n >\n <CopyIcon />\n </button>\n )}\n </div>\n </div>\n\n <button\n onClick={handleCheckStatus}\n disabled={currentStatus === 'loading' || !transactionId}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <RefreshIcon />}\n Check Status\n </button>\n </div>\n </div>\n )}\n\n {/* Toolkit Tab */}\n {activeTab === 'toolkit' && (\n <div className=\"space-y-4\">\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Predict Provider</h3>\n <p className=\"text-xs text-muted-foreground\">Predict the provider from a phone number</p>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Phone Number</label>\n <input\n placeholder=\"+237 670 000 000\"\n value={phoneNumber}\n onChange={(e) => setPhoneNumber(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n\n <button\n onClick={handlePredictProvider}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <SearchIcon />}\n Predict Provider\n </button>\n </div>\n\n <div className=\"grid sm:grid-cols-3 gap-3\">\n <button\n onClick={handleGetAvailability}\n disabled={currentStatus === 'loading'}\n className=\"h-10 px-3 text-xs font-medium border border-border bg-background hover:bg-muted disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n <SignalIcon />\n Provider Availability\n </button>\n <button\n onClick={handleGetActiveConfig}\n disabled={currentStatus === 'loading'}\n className=\"h-10 px-3 text-xs font-medium border border-border bg-background hover:bg-muted disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n <SettingsIcon />\n Active Config\n </button>\n <button\n onClick={handleGetPublicKeys}\n disabled={currentStatus === 'loading'}\n className=\"h-10 px-3 text-xs font-medium border border-border bg-background hover:bg-muted disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n <KeyIcon />\n Public Keys\n </button>\n </div>\n </div>\n )}\n\n {/* Finances Tab */}\n {activeTab === 'finances' && (\n <div className=\"space-y-4\">\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Wallet Balances</h3>\n <p className=\"text-xs text-muted-foreground\">View balances for all your wallets</p>\n </div>\n\n <button\n onClick={handleGetWalletBalances}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <WalletIcon />}\n Get Wallet Balances\n </button>\n </div>\n\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Statements</h3>\n <p className=\"text-xs text-muted-foreground\">Generate financial statements for your wallets</p>\n </div>\n\n <div className=\"p-4 bg-muted/50 text-xs text-muted-foreground\">\n Statement generation requires callback URL configuration. Use the SDK directly:\n <pre className=\"mt-2 p-2 bg-background overflow-x-auto\">\n{`await sdk.finances.generateStatement({\n wallet: { country: 'CMR', currency: 'XAF' },\n callbackUrl: 'https://your-site.com/callback',\n startDate: '2025-01-01T00:00:00Z',\n endDate: '2025-01-31T23:59:59Z',\n});`}\n </pre>\n </div>\n </div>\n </div>\n )}\n\n {/* Webhooks Tab */}\n {activeTab === 'webhooks' && (\n <div className=\"space-y-4\">\n {/* Webhook Secret Configuration */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Webhook Secret</h3>\n <p className=\"text-xs text-muted-foreground\">Configure the secret used for signing webhooks</p>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Secret Key</label>\n <input\n type=\"text\"\n placeholder=\"whsec_...\"\n value={webhookSecret}\n onChange={(e) => setWebhookSecret(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n </div>\n\n {/* Webhook Simulator */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Webhook Simulator</h3>\n <p className=\"text-xs text-muted-foreground\">Generate mock webhook events for testing</p>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Event Type</label>\n <select\n value={webhookEventType}\n onChange={(e) => setWebhookEventType(e.target.value as WebhookEventType)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {WEBHOOK_EVENT_TYPES.map((type) => (\n <option key={type} value={type}>{type}</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Amount</label>\n <input\n type=\"number\"\n placeholder=\"5000\"\n value={webhookAmount}\n onChange={(e) => setWebhookAmount(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Phone Number</label>\n <input\n placeholder=\"237670000000\"\n value={webhookPhone}\n onChange={(e) => setWebhookPhone(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Provider</label>\n <select\n value={webhookProvider}\n onChange={(e) => setWebhookProvider(e.target.value as Correspondent)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {PROVIDER_OPTIONS.map((p) => (\n <option key={p.value} value={p.value}>{p.label} ({p.country})</option>\n ))}\n </select>\n </div>\n </div>\n\n <button\n onClick={async () => {\n const event = generateWebhook(webhookEventType, {\n amount: webhookAmount,\n phoneNumber: webhookPhone,\n correspondent: webhookProvider,\n });\n const payload = JSON.stringify(event, null, 2);\n const signature = await computeHmacSha256(JSON.stringify(event), webhookSecret);\n setGeneratedPayload(payload);\n setGeneratedSignature(signature);\n\n // Add to event log\n const newEvent: WebhookTestEvent = {\n id: generateUUID(),\n eventType: webhookEventType,\n payload: event,\n signature,\n receivedAt: new Date().toLocaleTimeString(),\n isVerified: null,\n };\n setWebhookEvents((prev) => [newEvent, ...prev].slice(0, 50));\n addResult('Generate Webhook', 'success', { eventType: webhookEventType, eventId: event.eventId });\n }}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2\"\n >\n <PlayIcon />\n Generate Event\n </button>\n\n {generatedPayload && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium\">Generated Payload</label>\n <button\n onClick={() => copyToClipboard(generatedPayload)}\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Copy\n </button>\n </div>\n <pre className=\"text-xs bg-muted p-3 overflow-x-auto max-h-48\">\n {generatedPayload}\n </pre>\n <div className=\"flex items-center gap-2\">\n <label className=\"text-xs font-medium\">Signature:</label>\n <code className=\"text-xs bg-muted px-2 py-1 font-mono flex-1 overflow-x-auto\">\n {generatedSignature}\n </code>\n <button\n onClick={() => copyToClipboard(generatedSignature)}\n className=\"w-8 h-8 border border-border bg-background hover:bg-muted transition-colors flex items-center justify-center\"\n >\n <CopyIcon />\n </button>\n </div>\n </div>\n )}\n </div>\n\n {/* Signature Verifier */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Signature Verifier</h3>\n <p className=\"text-xs text-muted-foreground\">Test webhook signature verification</p>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Payload (JSON)</label>\n <textarea\n placeholder='{\"eventId\": \"...\", \"eventType\": \"deposit.completed\", ...}'\n value={verifyPayload}\n onChange={(e) => setVerifyPayload(e.target.value)}\n rows={4}\n className=\"w-full px-2.5 py-2 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring resize-none\"\n />\n </div>\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Signature</label>\n <input\n placeholder=\"HMAC-SHA256 signature\"\n value={verifySignature}\n onChange={(e) => setVerifySignature(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Secret</label>\n <input\n type=\"password\"\n placeholder=\"whsec_...\"\n value={verifySecret}\n onChange={(e) => setVerifySecret(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n </div>\n\n <button\n onClick={async () => {\n try {\n const parsedPayload = JSON.parse(verifyPayload);\n const computedSignature = await computeHmacSha256(JSON.stringify(parsedPayload), verifySecret);\n const isValid = computedSignature === verifySignature;\n setVerifyResult(isValid);\n addResult('Verify Signature', isValid ? 'success' : 'error', {\n isValid,\n expected: computedSignature,\n received: verifySignature,\n });\n } catch {\n setVerifyResult(false);\n addResult('Verify Signature', 'error', undefined, 'Invalid JSON payload');\n }\n }}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2\"\n >\n <ShieldIcon />\n Verify Signature\n </button>\n\n {verifyResult !== null && (\n <div className={`p-3 text-xs flex items-center gap-2 ${\n verifyResult ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' : 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200'\n }`}>\n {verifyResult ? <CheckIcon className=\"text-green-600\" /> : <XIcon className=\"text-red-600\" />}\n {verifyResult ? 'Signature is valid' : 'Signature is invalid'}\n </div>\n )}\n </div>\n </div>\n\n {/* Event Parser */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Event Parser</h3>\n <p className=\"text-xs text-muted-foreground\">Parse and analyze raw webhook JSON</p>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Raw JSON</label>\n <textarea\n placeholder='Paste webhook JSON here...'\n value={parseInput}\n onChange={(e) => setParseInput(e.target.value)}\n rows={4}\n className=\"w-full px-2.5 py-2 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring resize-none\"\n />\n </div>\n\n <button\n onClick={() => {\n try {\n const parsed = JSON.parse(parseInput) as Record<string, unknown>;\n setParsedEvent(parsed);\n setParseError('');\n addResult('Parse Event', 'success', { eventType: parsed.eventType, eventId: parsed.eventId });\n } catch (e) {\n setParsedEvent(null);\n setParseError(e instanceof Error ? e.message : 'Invalid JSON');\n addResult('Parse Event', 'error', undefined, 'Invalid JSON');\n }\n }}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2\"\n >\n <CodeIcon />\n Parse Event\n </button>\n\n {parseError && (\n <div className=\"p-3 text-xs bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200\">\n {parseError}\n </div>\n )}\n\n {parsedEvent && (\n <div className=\"space-y-3\">\n <div className=\"grid grid-cols-2 gap-2 text-xs\">\n <div className=\"p-2 bg-muted\">\n <span className=\"text-muted-foreground\">Event ID:</span>\n <p className=\"font-mono truncate\">{String(parsedEvent.eventId ?? 'N/A')}</p>\n </div>\n <div className=\"p-2 bg-muted\">\n <span className=\"text-muted-foreground\">Event Type:</span>\n <p className=\"font-medium\">{String(parsedEvent.eventType ?? 'N/A')}</p>\n </div>\n <div className=\"p-2 bg-muted\">\n <span className=\"text-muted-foreground\">Timestamp:</span>\n <p className=\"font-mono truncate\">{String(parsedEvent.timestamp ?? 'N/A')}</p>\n </div>\n <div className=\"p-2 bg-muted\">\n <span className=\"text-muted-foreground\">Status:</span>\n <p className=\"font-medium\">{String((parsedEvent.data as Record<string, unknown>)?.status ?? 'N/A')}</p>\n </div>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Full Data</label>\n <pre className=\"text-xs bg-muted p-3 overflow-x-auto max-h-48\">\n {JSON.stringify(parsedEvent, null, 2)}\n </pre>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Event Log */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"font-semibold\">Event Log</h3>\n <p className=\"text-xs text-muted-foreground\">History of generated webhook events</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <select\n value={eventLogFilter}\n onChange={(e) => setEventLogFilter(e.target.value as 'all' | 'deposit' | 'payout' | 'refund')}\n className=\"h-8 px-2 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n <option value=\"all\">All</option>\n <option value=\"deposit\">Deposits</option>\n <option value=\"payout\">Payouts</option>\n <option value=\"refund\">Refunds</option>\n </select>\n {webhookEvents.length > 0 && (\n <button\n onClick={() => setWebhookEvents([])}\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Clear\n </button>\n )}\n </div>\n </div>\n\n <div className=\"divide-y divide-border max-h-64 overflow-y-auto\">\n {webhookEvents\n .filter((event) => eventLogFilter === 'all' || event.eventType.startsWith(eventLogFilter))\n .length === 0 ? (\n <div className=\"p-4 text-center text-muted-foreground text-xs\">\n No events yet. Generate a webhook event to see it here.\n </div>\n ) : (\n webhookEvents\n .filter((event) => eventLogFilter === 'all' || event.eventType.startsWith(eventLogFilter))\n .map((event) => (\n <div key={event.id} className=\"py-3 space-y-1\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className={`px-1.5 py-0.5 text-xs font-medium ${\n event.eventType.includes('completed') ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' :\n event.eventType.includes('failed') ? 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200' :\n 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200'\n }`}>\n {event.eventType}\n </span>\n </div>\n <span className=\"text-xs text-muted-foreground\">{event.receivedAt}</span>\n </div>\n <div className=\"text-xs text-muted-foreground font-mono truncate\">\n sig: {event.signature.slice(0, 32)}...\n </div>\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n\n {/* Results Panel */}\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold\">Results</h3>\n {results.length > 0 && (\n <button\n onClick={() => setResults([])}\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Clear\n </button>\n )}\n </div>\n\n <div className=\"border border-border bg-background divide-y divide-border max-h-[600px] overflow-y-auto\">\n {results.length === 0 ? (\n <div className=\"p-6 text-center text-muted-foreground text-xs\">\n No results yet. Execute an operation to see results here.\n </div>\n ) : (\n results.map((result) => (\n <div key={result.id} className=\"p-4 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n {result.status === 'success' ? (\n <CheckIcon className=\"text-green-600\" />\n ) : (\n <XIcon className=\"text-red-600\" />\n )}\n <span className=\"font-medium text-sm\">{result.operation}</span>\n </div>\n <span className=\"text-xs text-muted-foreground\">{result.timestamp}</span>\n </div>\n\n {result.error ? (\n <p className=\"text-xs text-red-600\">{result.error}</p>\n ) : (\n <pre className=\"text-xs bg-muted p-2 overflow-x-auto max-h-48\">\n {JSON.stringify(result.response, null, 2)}\n </pre>\n )}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n// Simple SVG Icons (no external dependencies)\nconst SettingsIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n);\n\nconst PlayIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst WalletIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\" />\n </svg>\n);\n\nconst PhoneIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 18h.01M8 21h8a2 2 0 002-2V5a2 2 0 00-2-2H8a2 2 0 00-2 2v14a2 2 0 002 2z\" />\n </svg>\n);\n\nconst RefreshIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n);\n\nconst LoaderIcon = () => (\n <svg className=\"w-4 h-4 animate-spin\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n);\n\nconst CopyIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\n </svg>\n);\n\nconst CheckIcon = ({ className = '' }: { className?: string }) => (\n <svg className={`w-4 h-4 ${className}`} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst XIcon = ({ className = '' }: { className?: string }) => (\n <svg className={`w-4 h-4 ${className}`} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst BeakerIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z\" />\n </svg>\n);\n\nconst ToolkitIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n);\n\nconst ChartIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\" />\n </svg>\n);\n\nconst SearchIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n);\n\nconst SignalIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8.111 16.404a5.5 5.5 0 017.778 0M12 20h.01m-7.08-7.071c3.904-3.905 10.236-3.905 14.141 0M1.394 9.393c5.857-5.857 15.355-5.857 21.213 0\" />\n </svg>\n);\n\nconst KeyIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z\" />\n </svg>\n);\n\nconst WebhookIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n </svg>\n);\n\nconst ShieldIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\" />\n </svg>\n);\n\nconst CodeIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\" />\n </svg>\n);\n\nexport default SpaarkPaySdkTestDashboard;\n"]}
1
+ {"version":3,"sources":["../src/mocks/webhook-generators.ts","../src/lib/utils.ts","../src/components/SpaarkPaySdkFinanceDashboard.tsx","../src/react.tsx"],"names":["generateUUID","c","r","generateDepositWebhook","eventType","options","transactionId","amount","currency","correspondent","phoneNumber","status","failureCode","failureMessage","now","data","generatePayoutWebhook","generateRefundWebhook","depositId","generateWebhook","WEBHOOK_EVENT_TYPES","cn","inputs","twMerge","clsx","translations","STATUS_COLORS","CHART_COLORS","Button","forwardRef","className","variant","size","props","ref","jsx","Tabs","K","TabsList","TabsTrigger","TabsContent","Select","E","SelectValue","SelectTrigger","children","jsxs","ChevronDown","SelectContent","position","SelectItem","Check","DropdownMenu","trigger","align","open","setOpen","useState","useRef","useEffect","handleClickOutside","event","DropdownMenuItem","onClick","icon","Card","CardHeader","CardTitle","CardContent","Input","type","Table","TableHeader","TableBody","TableRow","TableHead","TableCell","Skeleton","Spinner","EmptyState","Icon","Inbox","title","description","action","StatusIcon","CheckCircle2","XCircle","Ban","Clock","AlertCircle","formatCurrency","formatDate","dateString","locale","date","SpaarkPaySdkFinanceDashboard","transactions","subtitle","showExpertMode","onExpertModeClick","onTransactionClick","onRefresh","onAddTransaction","onSettings","isLoading","t","searchQuery","setSearchQuery","typeFilter","setTypeFilter","statusFilter","setStatusFilter","copiedId","setCopiedId","activeTab","setActiveTab","columnFilters","setColumnFilters","stats","useMemo","deposits","tx","payouts","refunds","failed","pending","completed","cancelled","totalVolume","sum","depositsTotal","payoutsTotal","refundsTotal","depositsAllTotal","payoutsAllTotal","refundsAllTotal","chartData","byDate","txDate","key","volumeData","a","b","dateSort","rest","typeData","statusData","d","filteredTransactions","matchesSearch","matchesType","matchesStatus","copyToClipboard","useCallback","text","mainCurrency","columns","row","e","Copy","ArrowDownCircle","ArrowUpCircle","RefreshCw","table","useReactTable","getCoreRowModel","getPaginationRowModel","getFilteredRowModel","TableSkeleton","_","i","CardSkeleton","LayoutDashboard","BarChart3","MoreVertical","Settings","FlaskConical","Fragment","TrendingUp","Hourglass","Search","value","Plus","headerGroup","header","flexRender","cell","ChevronLeft","ChevronRight","ResponsiveContainer","AreaChart","CartesianGrid","XAxis","YAxis","Tooltip","Legend","Area","BarChart","Bar","entry","index","Cell","PieChart","Pie","name","percent","generateMockTransactions","types","statuses","providers","provider","daysAgo","createMockDepositResponse","txId","createMockPayoutResponse","createMockStatusResponse","createMockAvailabilityResponse","createMockPredictResponse","phone","createMockActiveConfigResponse","createMockWalletBalancesResponse","createMockPublicKeysResponse","simulateDelay","ms","resolve","computeHmacSha256","message","secret","encoder","signature","PROVIDER_OPTIONS","CURRENCY_OPTIONS","MODE_CONFIG","SpaarkPaySdkTestDashboard","initialApiKey","initialEnvironment","initialDemoMode","apiBasePath","onDepositComplete","onPayoutComplete","onError","apiKey","setApiKey","mode","setMode","setTransactions","isLoadingTransactions","setIsLoadingTransactions","setPhoneNumber","setAmount","setCurrency","setProvider","setDescription","setTransactionId","results","setResults","currentStatus","setCurrentStatus","webhookSecret","setWebhookSecret","webhookEvents","setWebhookEvents","webhookEventType","setWebhookEventType","webhookAmount","setWebhookAmount","webhookPhone","setWebhookPhone","webhookProvider","setWebhookProvider","generatedPayload","setGeneratedPayload","generatedSignature","setGeneratedSignature","verifyPayload","setVerifyPayload","verifySignature","setVerifySignature","verifySecret","setVerifySecret","verifyResult","setVerifyResult","parseInput","setParseInput","parsedEvent","setParsedEvent","parseError","setParseError","eventLogFilter","setEventLogFilter","addResult","operation","response","error","result","prev","handleSelectMode","selectedMode","handleDeposit","res","err","handlePayout","handleCheckStatus","handleGetAvailability","handlePredictProvider","handleGetActiveConfig","handleGetPublicKeys","handleGetWalletBalances","Wallet","Smartphone","Wrench","Zap","Loader2","PlayCircle","Wifi","Key","p","payload","newEvent","parsedPayload","computedSignature","isValid","Shield","parsed","Code","Beaker","Globe","Lock","react_default"],"mappings":"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","file":"react.js","sourcesContent":["import type {\n WebhookEventType,\n PawapayWebhookEvent,\n DepositCallbackData,\n PayoutCallbackData,\n} from '../types/webhooks';\nimport type { Correspondent } from '../constants/correspondents';\n\nexport interface WebhookGeneratorOptions {\n transactionId?: string;\n amount?: string;\n currency?: string;\n correspondent?: Correspondent;\n phoneNumber?: string;\n status?: 'COMPLETED' | 'FAILED';\n failureCode?: string;\n failureMessage?: string;\n}\n\nconst generateUUID = (): string => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\nexport function generateDepositWebhook(\n eventType: 'deposit.accepted' | 'deposit.completed' | 'deposit.failed',\n options: WebhookGeneratorOptions = {}\n): PawapayWebhookEvent<DepositCallbackData> {\n const {\n transactionId = generateUUID(),\n amount = '5000',\n currency = 'XAF',\n correspondent = 'MTN_MOMO_CMR',\n phoneNumber = '237670000000',\n status = eventType === 'deposit.failed' ? 'FAILED' : 'COMPLETED',\n failureCode = 'INSUFFICIENT_FUNDS',\n failureMessage = 'The payer has insufficient funds',\n } = options;\n\n const now = new Date().toISOString();\n\n const data: DepositCallbackData = {\n depositId: transactionId,\n status,\n amount,\n currency,\n correspondent,\n payer: {\n type: 'MSISDN',\n address: {\n value: phoneNumber,\n },\n },\n customerTimestamp: now,\n created: now,\n };\n\n if (status === 'COMPLETED') {\n data.receivedByPayer = now;\n }\n\n if (status === 'FAILED') {\n data.failureReason = {\n failureCode,\n failureMessage,\n };\n }\n\n return {\n eventId: generateUUID(),\n eventType,\n timestamp: now,\n data,\n };\n}\n\nexport function generatePayoutWebhook(\n eventType: 'payout.accepted' | 'payout.completed' | 'payout.failed',\n options: WebhookGeneratorOptions = {}\n): PawapayWebhookEvent<PayoutCallbackData> {\n const {\n transactionId = generateUUID(),\n amount = '5000',\n currency = 'XAF',\n correspondent = 'MTN_MOMO_CMR',\n phoneNumber = '237670000000',\n status = eventType === 'payout.failed' ? 'FAILED' : 'COMPLETED',\n failureCode = 'RECIPIENT_NOT_FOUND',\n failureMessage = 'The recipient account was not found',\n } = options;\n\n const now = new Date().toISOString();\n\n const data: PayoutCallbackData = {\n payoutId: transactionId,\n status,\n amount,\n currency,\n correspondent,\n recipient: {\n type: 'MSISDN',\n address: {\n value: phoneNumber,\n },\n },\n customerTimestamp: now,\n created: now,\n };\n\n if (status === 'COMPLETED') {\n data.receivedByRecipient = now;\n }\n\n if (status === 'FAILED') {\n data.failureReason = {\n failureCode,\n failureMessage,\n };\n }\n\n return {\n eventId: generateUUID(),\n eventType,\n timestamp: now,\n data,\n };\n}\n\nexport interface RefundCallbackData {\n refundId: string;\n depositId: string;\n status: 'COMPLETED' | 'FAILED';\n amount: string;\n currency: string;\n correspondent: string;\n recipient: {\n type: string;\n address: {\n value: string;\n };\n };\n created: string;\n failureReason?: {\n failureCode: string;\n failureMessage: string;\n };\n}\n\nexport function generateRefundWebhook(\n eventType: 'refund.completed' | 'refund.failed',\n options: WebhookGeneratorOptions & { depositId?: string } = {}\n): PawapayWebhookEvent<RefundCallbackData> {\n const {\n transactionId = generateUUID(),\n depositId = generateUUID(),\n amount = '5000',\n currency = 'XAF',\n correspondent = 'MTN_MOMO_CMR',\n phoneNumber = '237670000000',\n status = eventType === 'refund.failed' ? 'FAILED' : 'COMPLETED',\n failureCode = 'REFUND_LIMIT_EXCEEDED',\n failureMessage = 'The refund limit has been exceeded',\n } = options;\n\n const now = new Date().toISOString();\n\n const data: RefundCallbackData = {\n refundId: transactionId,\n depositId,\n status,\n amount,\n currency,\n correspondent,\n recipient: {\n type: 'MSISDN',\n address: {\n value: phoneNumber,\n },\n },\n created: now,\n };\n\n if (status === 'FAILED') {\n data.failureReason = {\n failureCode,\n failureMessage,\n };\n }\n\n return {\n eventId: generateUUID(),\n eventType,\n timestamp: now,\n data,\n };\n}\n\nexport type MockWebhookEvent =\n | PawapayWebhookEvent<DepositCallbackData>\n | PawapayWebhookEvent<PayoutCallbackData>\n | PawapayWebhookEvent<RefundCallbackData>;\n\nexport function generateWebhook(\n eventType: WebhookEventType,\n options: WebhookGeneratorOptions & { depositId?: string } = {}\n): MockWebhookEvent {\n if (eventType.startsWith('deposit.')) {\n return generateDepositWebhook(\n eventType as 'deposit.accepted' | 'deposit.completed' | 'deposit.failed',\n options\n );\n }\n\n if (eventType.startsWith('payout.')) {\n return generatePayoutWebhook(\n eventType as 'payout.accepted' | 'payout.completed' | 'payout.failed',\n options\n );\n }\n\n return generateRefundWebhook(\n eventType as 'refund.completed' | 'refund.failed',\n options\n );\n}\n\nexport const WEBHOOK_EVENT_TYPES: WebhookEventType[] = [\n 'deposit.accepted',\n 'deposit.completed',\n 'deposit.failed',\n 'payout.accepted',\n 'payout.completed',\n 'payout.failed',\n 'refund.completed',\n 'refund.failed',\n];\n\nexport const FAILURE_CODES = {\n deposit: [\n { code: 'INSUFFICIENT_FUNDS', message: 'The payer has insufficient funds' },\n { code: 'INVALID_PHONE_NUMBER', message: 'The phone number is invalid' },\n { code: 'TIMEOUT', message: 'The transaction timed out' },\n { code: 'RECIPIENT_NOT_REGISTERED', message: 'The recipient is not registered for mobile money' },\n { code: 'DECLINED', message: 'The transaction was declined by the payer' },\n ],\n payout: [\n { code: 'RECIPIENT_NOT_FOUND', message: 'The recipient account was not found' },\n { code: 'RECIPIENT_NOT_REGISTERED', message: 'The recipient is not registered for mobile money' },\n { code: 'INVALID_PHONE_NUMBER', message: 'The phone number is invalid' },\n { code: 'TIMEOUT', message: 'The transaction timed out' },\n { code: 'DAILY_LIMIT_EXCEEDED', message: 'The daily transaction limit has been exceeded' },\n ],\n refund: [\n { code: 'REFUND_LIMIT_EXCEEDED', message: 'The refund limit has been exceeded' },\n { code: 'ORIGINAL_DEPOSIT_NOT_FOUND', message: 'The original deposit was not found' },\n { code: 'REFUND_ALREADY_PROCESSED', message: 'A refund has already been processed for this deposit' },\n { code: 'TIMEOUT', message: 'The refund request timed out' },\n ],\n};\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utility function to merge Tailwind CSS classes with proper conflict resolution.\n * Combines clsx for conditional class names and tailwind-merge for deduplication.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","'use client';\n\nimport { useState, useMemo, useCallback, forwardRef, useRef, useEffect } from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport {\n useReactTable,\n getCoreRowModel,\n getPaginationRowModel,\n getFilteredRowModel,\n flexRender,\n type ColumnDef,\n type ColumnFiltersState,\n} from '@tanstack/react-table';\nimport {\n TrendingUp,\n ArrowDownCircle,\n ArrowUpCircle,\n XCircle,\n RefreshCw,\n Search,\n ChevronDown,\n Settings,\n ChevronLeft,\n ChevronRight,\n Copy,\n Check,\n AlertCircle,\n Clock,\n CheckCircle2,\n Plus,\n Ban,\n Hourglass,\n Inbox,\n BarChart3,\n LayoutDashboard,\n MoreVertical,\n FlaskConical,\n} from 'lucide-react';\nimport {\n AreaChart,\n Area,\n BarChart,\n Bar,\n PieChart,\n Pie,\n Cell,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n Legend,\n} from 'recharts';\nimport { cn } from '../lib/utils';\nimport type { Correspondent } from '../constants/correspondents';\n\nexport type TransactionType = 'deposit' | 'payout' | 'refund';\n\nexport type TransactionStatus =\n | 'ACCEPTED'\n | 'PENDING'\n | 'ENQUEUED'\n | 'PROCESSING'\n | 'COMPLETED'\n | 'FAILED'\n | 'CANCELLED'\n | 'REJECTED';\n\nexport interface Transaction {\n id: string;\n type: TransactionType;\n amount: number;\n currency: string;\n status: TransactionStatus;\n provider: Correspondent;\n phoneNumber: string;\n description?: string;\n createdAt: string;\n updatedAt?: string;\n failureReason?: string;\n}\n\nexport interface SpaarkPaySdkFinanceDashboardProps {\n transactions: Transaction[];\n title?: string;\n subtitle?: string;\n locale?: 'fr' | 'en';\n className?: string;\n showExpertMode?: boolean;\n onExpertModeClick?: () => void;\n onTransactionClick?: (transaction: Transaction) => void;\n onRefresh?: () => void;\n onAddTransaction?: () => void;\n onSettings?: () => void;\n isLoading?: boolean;\n}\n\nconst translations = {\n fr: {\n title: 'Tableau de bord financier',\n subtitle: 'Vue d\\'ensemble de vos transactions',\n totalVolume: 'Volume Total',\n deposits: 'Dépôts',\n payouts: 'Retraits',\n failed: 'Échecs',\n refunds: 'Remboursements',\n pending: 'En attente',\n completed: 'Complétées',\n cancelled: 'Annulées',\n search: 'Rechercher par ID ou téléphone...',\n allTypes: 'Tous les types',\n allStatuses: 'Tous les statuts',\n deposit: 'Dépôt',\n payout: 'Retrait',\n refund: 'Remboursement',\n expertMode: 'Mode Expert',\n refresh: 'Actualiser',\n settings: 'Paramètres',\n actions: 'Actions',\n noTransactions: 'Aucune transaction',\n noTransactionsDesc: 'Les transactions apparaîtront ici une fois effectuées.',\n addTransaction: 'Nouvelle transaction',\n id: 'ID',\n type: 'Type',\n amount: 'Montant',\n status: 'Statut',\n provider: 'Opérateur',\n phone: 'Téléphone',\n date: 'Date',\n page: 'Page',\n of: 'sur',\n transactions: 'transactions',\n copied: 'Copié !',\n dashboard: 'Tableau de bord',\n charts: 'Graphiques',\n volumeOverTime: 'Volume dans le temps',\n transactionsByType: 'Par type',\n statusDistribution: 'Par statut',\n noDataForCharts: 'Pas de données pour les graphiques',\n loading: 'Chargement...',\n previous: 'Précédent',\n next: 'Suivant',\n },\n en: {\n title: 'Finance Dashboard',\n subtitle: 'Overview of your transactions',\n totalVolume: 'Total Volume',\n deposits: 'Deposits',\n payouts: 'Payouts',\n failed: 'Failed',\n refunds: 'Refunds',\n pending: 'Pending',\n completed: 'Completed',\n cancelled: 'Cancelled',\n search: 'Search by ID or phone...',\n allTypes: 'All types',\n allStatuses: 'All statuses',\n deposit: 'Deposit',\n payout: 'Payout',\n refund: 'Refund',\n expertMode: 'Expert Mode',\n refresh: 'Refresh',\n settings: 'Settings',\n actions: 'Actions',\n noTransactions: 'No transactions',\n noTransactionsDesc: 'Transactions will appear here once made.',\n addTransaction: 'New transaction',\n id: 'ID',\n type: 'Type',\n amount: 'Amount',\n status: 'Status',\n provider: 'Provider',\n phone: 'Phone',\n date: 'Date',\n page: 'Page',\n of: 'of',\n transactions: 'transactions',\n copied: 'Copied!',\n dashboard: 'Dashboard',\n charts: 'Charts',\n volumeOverTime: 'Volume over time',\n transactionsByType: 'By type',\n statusDistribution: 'By status',\n noDataForCharts: 'No data for charts',\n loading: 'Loading...',\n previous: 'Previous',\n next: 'Next',\n },\n};\n\nconst STATUS_COLORS: Record<TransactionStatus, string> = {\n COMPLETED: 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200',\n ACCEPTED: 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200',\n PENDING: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200',\n ENQUEUED: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200',\n PROCESSING: 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200',\n FAILED: 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200',\n CANCELLED: 'bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-200',\n REJECTED: 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200',\n};\n\nconst CHART_COLORS = {\n deposit: '#22c55e',\n payout: '#3b82f6',\n refund: '#f97316',\n COMPLETED: '#22c55e',\n PENDING: '#eab308',\n PROCESSING: '#3b82f6',\n ACCEPTED: '#3b82f6',\n FAILED: '#ef4444',\n CANCELLED: '#6b7280',\n REJECTED: '#ef4444',\n ENQUEUED: '#eab308',\n};\n\n// ============================================================================\n// shadcn/ui-like Components\n// ============================================================================\n\n// Button\nconst Button = forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n variant?: 'default' | 'outline' | 'ghost' | 'secondary';\n size?: 'default' | 'sm' | 'lg' | 'icon';\n }\n>(({ className, variant = 'default', size = 'default', ...props }, ref) => (\n <button\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n 'bg-primary text-primary-foreground hover:bg-primary/90': variant === 'default',\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground': variant === 'outline',\n 'hover:bg-accent hover:text-accent-foreground': variant === 'ghost',\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80': variant === 'secondary',\n },\n {\n 'h-10 px-4 py-2': size === 'default',\n 'h-9 rounded-md px-3': size === 'sm',\n 'h-11 rounded-md px-8': size === 'lg',\n 'h-10 w-10': size === 'icon',\n },\n className\n )}\n {...props}\n />\n));\nButton.displayName = 'Button';\n\n// Tabs\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n 'inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground',\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=inactive]:text-muted-foreground data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow',\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\n// Select\nconst Select = SelectPrimitive.Root;\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1',\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectContent = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n 'relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n {...props}\n >\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectItem = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-3 w-3\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\n// Simple Dropdown Menu\ninterface DropdownMenuProps {\n trigger: React.ReactNode;\n children: React.ReactNode;\n align?: 'start' | 'end';\n}\n\nfunction DropdownMenu({ trigger, children, align = 'end' }: DropdownMenuProps) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n function handleClickOutside(event: MouseEvent) {\n if (ref.current && !ref.current.contains(event.target as Node)) {\n setOpen(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [open]);\n\n return (\n <div ref={ref} className=\"relative\">\n <div onClick={() => setOpen(!open)}>{trigger}</div>\n {open && (\n <div\n className={cn(\n 'absolute z-50 mt-1 min-w-[160px] rounded-md border bg-popover p-1 shadow-md',\n align === 'end' ? 'right-0' : 'left-0'\n )}\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n\ninterface DropdownMenuItemProps {\n children: React.ReactNode;\n onClick?: () => void;\n icon?: React.ReactNode;\n}\n\nfunction DropdownMenuItem({ children, onClick, icon }: DropdownMenuItemProps) {\n return (\n <button\n onClick={onClick}\n className=\"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent hover:text-accent-foreground\"\n >\n {icon}\n {children}\n </button>\n );\n}\n\n// Card\nconst Card = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('rounded-lg border bg-card text-card-foreground shadow-sm', className)}\n {...props}\n />\n )\n);\nCard.displayName = 'Card';\n\nconst CardHeader = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n )\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn('text-lg font-semibold leading-none tracking-tight', className)} {...props} />\n )\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardContent = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n )\n);\nCardContent.displayName = 'CardContent';\n\n// Input\nconst Input = forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement>>(\n ({ className, type, ...props }, ref) => (\n <input\n type={type}\n className={cn(\n 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n )\n);\nInput.displayName = 'Input';\n\n// Table (shadcn/ui style)\nconst Table = forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table ref={ref} className={cn('w-full caption-bottom text-sm', className)} {...props} />\n </div>\n )\n);\nTable.displayName = 'Table';\n\nconst TableHeader = forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />\n )\n);\nTableHeader.displayName = 'TableHeader';\n\nconst TableBody = forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n )\n);\nTableBody.displayName = 'TableBody';\n\nconst TableRow = forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn('border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted', className)}\n {...props}\n />\n )\n);\nTableRow.displayName = 'TableRow';\n\nconst TableHead = forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0',\n className\n )}\n {...props}\n />\n )\n);\nTableHead.displayName = 'TableHead';\n\nconst TableCell = forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td ref={ref} className={cn('p-4 align-middle [&:has([role=checkbox])]:pr-0', className)} {...props} />\n )\n);\nTableCell.displayName = 'TableCell';\n\n// Skeleton\nconst Skeleton = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('animate-pulse rounded-md bg-muted', className)} {...props} />\n);\n\n// Spinner\nconst Spinner = ({ className }: { className?: string }) => (\n <svg className={cn('animate-spin', className)} xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n);\n\n// Empty State\nconst EmptyState = ({\n icon: Icon = Inbox,\n title,\n description,\n action,\n}: {\n icon?: React.ElementType;\n title: string;\n description?: string;\n action?: React.ReactNode;\n}) => (\n <div className=\"flex flex-col items-center justify-center py-12 px-4 text-center\">\n <div className=\"flex h-20 w-20 items-center justify-center rounded-full bg-muted\">\n <Icon className=\"h-10 w-10 text-muted-foreground\" />\n </div>\n <h3 className=\"mt-4 text-lg font-semibold\">{title}</h3>\n {description && <p className=\"mt-2 text-sm text-muted-foreground max-w-sm\">{description}</p>}\n {action && <div className=\"mt-6\">{action}</div>}\n </div>\n);\n\n// Status Icon\nconst StatusIcon = ({ status }: { status: TransactionStatus }) => {\n switch (status) {\n case 'COMPLETED':\n return <CheckCircle2 className=\"w-3.5 h-3.5\" />;\n case 'FAILED':\n case 'REJECTED':\n return <XCircle className=\"w-3.5 h-3.5\" />;\n case 'CANCELLED':\n return <Ban className=\"w-3.5 h-3.5\" />;\n case 'PENDING':\n case 'ENQUEUED':\n return <Clock className=\"w-3.5 h-3.5\" />;\n case 'PROCESSING':\n case 'ACCEPTED':\n return <Spinner className=\"w-3.5 h-3.5\" />;\n default:\n return <AlertCircle className=\"w-3.5 h-3.5\" />;\n }\n};\n\n// ============================================================================\n// Utilities\n// ============================================================================\n\nconst formatCurrency = (amount: number, currency: string) => {\n return new Intl.NumberFormat('fr-FR', {\n style: 'decimal',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(amount) + ' ' + currency;\n};\n\nconst formatDate = (dateString: string, locale: 'fr' | 'en') => {\n const date = new Date(dateString);\n return new Intl.DateTimeFormat(locale === 'fr' ? 'fr-FR' : 'en-US', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n }).format(date);\n};\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport function SpaarkPaySdkFinanceDashboard({\n transactions,\n title,\n subtitle,\n locale = 'fr',\n className = '',\n showExpertMode = true,\n onExpertModeClick,\n onTransactionClick,\n onRefresh,\n onAddTransaction,\n onSettings,\n isLoading = false,\n}: SpaarkPaySdkFinanceDashboardProps) {\n const t = translations[locale];\n\n const [searchQuery, setSearchQuery] = useState('');\n const [typeFilter, setTypeFilter] = useState<TransactionType | 'all'>('all');\n const [statusFilter, setStatusFilter] = useState<TransactionStatus | 'all'>('all');\n const [copiedId, setCopiedId] = useState<string | null>(null);\n const [activeTab, setActiveTab] = useState('dashboard');\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n\n const stats = useMemo(() => {\n const deposits = transactions.filter(tx => tx.type === 'deposit');\n const payouts = transactions.filter(tx => tx.type === 'payout');\n const refunds = transactions.filter(tx => tx.type === 'refund');\n const failed = transactions.filter(tx => tx.status === 'FAILED' || tx.status === 'REJECTED');\n const pending = transactions.filter(tx => ['PENDING', 'ENQUEUED', 'PROCESSING', 'ACCEPTED'].includes(tx.status));\n const completed = transactions.filter(tx => tx.status === 'COMPLETED');\n const cancelled = transactions.filter(tx => tx.status === 'CANCELLED');\n\n const totalVolume = transactions\n .filter(tx => tx.status === 'COMPLETED')\n .reduce((sum, tx) => sum + tx.amount, 0);\n\n const depositsTotal = deposits.filter(tx => tx.status === 'COMPLETED').reduce((sum, tx) => sum + tx.amount, 0);\n const payoutsTotal = payouts.filter(tx => tx.status === 'COMPLETED').reduce((sum, tx) => sum + tx.amount, 0);\n const refundsTotal = refunds.filter(tx => tx.status === 'COMPLETED').reduce((sum, tx) => sum + tx.amount, 0);\n\n // Totaux pour les graphiques (toutes transactions)\n const depositsAllTotal = deposits.reduce((sum, tx) => sum + tx.amount, 0);\n const payoutsAllTotal = payouts.reduce((sum, tx) => sum + tx.amount, 0);\n const refundsAllTotal = refunds.reduce((sum, tx) => sum + tx.amount, 0);\n\n return {\n totalVolume,\n depositsCount: deposits.length,\n depositsTotal,\n depositsAllTotal,\n payoutsCount: payouts.length,\n payoutsTotal,\n payoutsAllTotal,\n failedCount: failed.length,\n refundsCount: refunds.length,\n refundsTotal,\n refundsAllTotal,\n pendingCount: pending.length,\n completedCount: completed.length,\n cancelledCount: cancelled.length,\n };\n }, [transactions]);\n\n const chartData = useMemo(() => {\n const byDate: Record<string, { date: string; dateSort: number; deposits: number; payouts: number; refunds: number }> = {};\n\n transactions.forEach(tx => {\n const txDate = new Date(tx.createdAt);\n const date = txDate.toLocaleDateString(locale === 'fr' ? 'fr-FR' : 'en-US', {\n day: '2-digit',\n month: 'short',\n });\n\n if (!byDate[date]) {\n byDate[date] = { date, dateSort: txDate.getTime(), deposits: 0, payouts: 0, refunds: 0 };\n }\n\n // Compte toutes les transactions, pas seulement COMPLETED\n const key = tx.type === 'deposit' ? 'deposits' : tx.type === 'payout' ? 'payouts' : 'refunds';\n byDate[date][key] += tx.amount;\n });\n\n // Tri par date et prend les 7 derniers jours\n const volumeData = Object.values(byDate)\n .sort((a, b) => a.dateSort - b.dateSort)\n .slice(-7)\n .map(({ dateSort, ...rest }) => rest);\n const typeData = [\n { name: t.deposit, value: stats.depositsAllTotal, count: stats.depositsCount, fill: CHART_COLORS.deposit },\n { name: t.payout, value: stats.payoutsAllTotal, count: stats.payoutsCount, fill: CHART_COLORS.payout },\n { name: t.refund, value: stats.refundsAllTotal, count: stats.refundsCount, fill: CHART_COLORS.refund },\n ];\n const statusData = [\n { name: 'Completed', value: stats.completedCount, fill: CHART_COLORS.COMPLETED },\n { name: 'Pending', value: stats.pendingCount, fill: CHART_COLORS.PENDING },\n { name: 'Failed', value: stats.failedCount, fill: CHART_COLORS.FAILED },\n { name: 'Cancelled', value: stats.cancelledCount, fill: CHART_COLORS.CANCELLED },\n ].filter(d => d.value > 0);\n\n return { volumeData, typeData, statusData };\n }, [transactions, stats, locale, t]);\n\n const filteredTransactions = useMemo(() => {\n return transactions.filter(tx => {\n const matchesSearch = searchQuery === '' ||\n tx.id.toLowerCase().includes(searchQuery.toLowerCase()) ||\n tx.phoneNumber.includes(searchQuery);\n const matchesType = typeFilter === 'all' || tx.type === typeFilter;\n const matchesStatus = statusFilter === 'all' || tx.status === statusFilter;\n return matchesSearch && matchesType && matchesStatus;\n });\n }, [transactions, searchQuery, typeFilter, statusFilter]);\n\n const copyToClipboard = useCallback((text: string) => {\n navigator.clipboard.writeText(text);\n setCopiedId(text);\n setTimeout(() => setCopiedId(null), 2000);\n }, []);\n\n const mainCurrency = transactions[0]?.currency || 'XAF';\n\n // Table columns with @tanstack/react-table\n const columns: ColumnDef<Transaction>[] = useMemo(() => [\n {\n accessorKey: 'id',\n header: t.id,\n cell: ({ row }) => (\n <div className=\"flex items-center gap-2\">\n <span className=\"font-mono text-xs truncate max-w-[100px]\" title={row.original.id}>\n {row.original.id.slice(0, 8)}...\n </span>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6\"\n onClick={(e) => {\n e.stopPropagation();\n copyToClipboard(row.original.id);\n }}\n >\n {copiedId === row.original.id ? (\n <Check className=\"w-3.5 h-3.5 text-green-600\" />\n ) : (\n <Copy className=\"w-3.5 h-3.5 text-muted-foreground\" />\n )}\n </Button>\n </div>\n ),\n },\n {\n accessorKey: 'type',\n header: t.type,\n cell: ({ row }) => (\n <span className={cn(\n 'inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded-full',\n row.original.type === 'deposit' && 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200',\n row.original.type === 'payout' && 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200',\n row.original.type === 'refund' && 'bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200',\n )}>\n {row.original.type === 'deposit' && <ArrowDownCircle className=\"w-3 h-3\" />}\n {row.original.type === 'payout' && <ArrowUpCircle className=\"w-3 h-3\" />}\n {row.original.type === 'refund' && <RefreshCw className=\"w-3 h-3\" />}\n {t[row.original.type]}\n </span>\n ),\n },\n {\n accessorKey: 'amount',\n header: t.amount,\n cell: ({ row }) => <span className=\"font-semibold\">{formatCurrency(row.original.amount, row.original.currency)}</span>,\n },\n {\n accessorKey: 'status',\n header: t.status,\n cell: ({ row }) => (\n <span className={cn('inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded-full', STATUS_COLORS[row.original.status])}>\n <StatusIcon status={row.original.status} />\n {row.original.status}\n </span>\n ),\n },\n {\n accessorKey: 'provider',\n header: t.provider,\n cell: ({ row }) => <span className=\"text-muted-foreground\">{row.original.provider.replace(/_/g, ' ')}</span>,\n },\n {\n accessorKey: 'phoneNumber',\n header: t.phone,\n cell: ({ row }) => <span className=\"font-mono text-muted-foreground\">{row.original.phoneNumber}</span>,\n },\n {\n accessorKey: 'createdAt',\n header: t.date,\n cell: ({ row }) => <span className=\"text-muted-foreground\">{formatDate(row.original.createdAt, locale)}</span>,\n },\n ], [t, locale, copiedId, copyToClipboard]);\n\n const table = useReactTable({\n data: filteredTransactions,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnFiltersChange: setColumnFilters,\n state: { columnFilters },\n initialState: { pagination: { pageSize: 10 } },\n });\n\n // Skeleton loading for table\n const TableSkeleton = () => (\n <div className=\"space-y-3 p-4\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-4\">\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-6 w-16 rounded-full\" />\n <Skeleton className=\"h-4 w-20\" />\n <Skeleton className=\"h-6 w-20 rounded-full\" />\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-4 w-28\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n ))}\n </div>\n );\n\n // Skeleton loading for cards\n const CardSkeleton = () => (\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-8 w-8 rounded-md\" />\n <Skeleton className=\"h-4 w-24\" />\n </div>\n </CardHeader>\n <CardContent>\n <Skeleton className=\"h-8 w-32 mb-2\" />\n <Skeleton className=\"h-3 w-20\" />\n </CardContent>\n </Card>\n );\n\n return (\n <Tabs value={activeTab} onValueChange={setActiveTab} className={cn('space-y-6', className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\n <div>\n <h1 className=\"text-2xl font-bold tracking-tight\">{title || t.title}</h1>\n <p className=\"text-muted-foreground mt-1\">{subtitle || t.subtitle}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <TabsList className=\"h-9\">\n <TabsTrigger value=\"dashboard\" className=\"gap-2 h-7\">\n <LayoutDashboard className=\"w-4 h-4\" />\n {t.dashboard}\n </TabsTrigger>\n <TabsTrigger value=\"charts\" className=\"gap-2 h-7\">\n <BarChart3 className=\"w-4 h-4\" />\n {t.charts}\n </TabsTrigger>\n </TabsList>\n {onRefresh && (\n <Button variant=\"outline\" size=\"sm\" className=\"h-9\" onClick={onRefresh} disabled={isLoading}>\n <RefreshCw className={cn('w-4 h-4', isLoading && 'animate-spin')} />\n {t.refresh}\n </Button>\n )}\n {(onSettings || (showExpertMode && onExpertModeClick)) && (\n <DropdownMenu\n trigger={\n <Button variant=\"outline\" size=\"sm\" className=\"h-9 gap-1\">\n <MoreVertical className=\"w-4 h-4\" />\n {t.actions}\n <ChevronDown className=\"w-3 h-3 opacity-50\" />\n </Button>\n }\n >\n {onSettings && (\n <DropdownMenuItem onClick={onSettings} icon={<Settings className=\"w-4 h-4\" />}>\n {t.settings}\n </DropdownMenuItem>\n )}\n {showExpertMode && onExpertModeClick && (\n <DropdownMenuItem onClick={onExpertModeClick} icon={<FlaskConical className=\"w-4 h-4\" />}>\n {t.expertMode}\n </DropdownMenuItem>\n )}\n </DropdownMenu>\n )}\n </div>\n </div>\n\n {/* Dashboard Tab */}\n <TabsContent value=\"dashboard\" className=\"space-y-6\">\n {/* KPI Cards */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n {isLoading ? (\n <>\n {Array.from({ length: 8 }).map((_, i) => <CardSkeleton key={i} />)}\n </>\n ) : (\n <>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-primary/10\">\n <TrendingUp className=\"w-4 h-4 text-primary\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.totalVolume}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{formatCurrency(stats.totalVolume, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">{transactions.length} {t.transactions}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-green-500/10\">\n <ArrowDownCircle className=\"w-4 h-4 text-green-600 dark:text-green-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.deposits}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{formatCurrency(stats.depositsTotal, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">{stats.depositsCount} {t.transactions}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-blue-500/10\">\n <ArrowUpCircle className=\"w-4 h-4 text-blue-600 dark:text-blue-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.payouts}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{formatCurrency(stats.payoutsTotal, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">{stats.payoutsCount} {t.transactions}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-orange-500/10\">\n <RefreshCw className=\"w-4 h-4 text-orange-600 dark:text-orange-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.refunds}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{formatCurrency(stats.refundsTotal, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">{stats.refundsCount} {t.transactions}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-yellow-500/10\">\n <Hourglass className=\"w-4 h-4 text-yellow-600 dark:text-yellow-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.pending}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{stats.pendingCount}</p>\n <p className=\"text-xs text-muted-foreground\">{t.transactions}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-green-500/10\">\n <CheckCircle2 className=\"w-4 h-4 text-green-600 dark:text-green-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.completed}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{stats.completedCount}</p>\n <p className=\"text-xs text-muted-foreground\">{t.transactions}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-red-500/10\">\n <XCircle className=\"w-4 h-4 text-red-600 dark:text-red-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.failed}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{stats.failedCount}</p>\n <p className=\"text-xs text-muted-foreground\">{t.transactions}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-gray-500/10\">\n <Ban className=\"w-4 h-4 text-gray-600 dark:text-gray-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.cancelled}</span>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{stats.cancelledCount}</p>\n <p className=\"text-xs text-muted-foreground\">{t.transactions}</p>\n </CardContent>\n </Card>\n </>\n )}\n </div>\n\n {/* Filters */}\n <div className=\"flex flex-wrap gap-3\">\n <div className=\"relative flex-1 min-w-[200px]\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground pointer-events-none\" />\n <Input\n type=\"text\"\n placeholder={t.search}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n\n <Select value={typeFilter} onValueChange={(value) => setTypeFilter(value as TransactionType | 'all')}>\n <SelectTrigger className=\"w-[160px]\">\n <SelectValue placeholder={t.allTypes} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">{t.allTypes}</SelectItem>\n <SelectItem value=\"deposit\">{t.deposit}</SelectItem>\n <SelectItem value=\"payout\">{t.payout}</SelectItem>\n <SelectItem value=\"refund\">{t.refund}</SelectItem>\n </SelectContent>\n </Select>\n\n <Select value={statusFilter} onValueChange={(value) => setStatusFilter(value as TransactionStatus | 'all')}>\n <SelectTrigger className=\"w-[160px]\">\n <SelectValue placeholder={t.allStatuses} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">{t.allStatuses}</SelectItem>\n <SelectItem value=\"COMPLETED\">COMPLETED</SelectItem>\n <SelectItem value=\"PENDING\">PENDING</SelectItem>\n <SelectItem value=\"PROCESSING\">PROCESSING</SelectItem>\n <SelectItem value=\"ACCEPTED\">ACCEPTED</SelectItem>\n <SelectItem value=\"FAILED\">FAILED</SelectItem>\n <SelectItem value=\"CANCELLED\">CANCELLED</SelectItem>\n <SelectItem value=\"REJECTED\">REJECTED</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Transactions Table */}\n <Card>\n {isLoading ? (\n <TableSkeleton />\n ) : filteredTransactions.length === 0 ? (\n <EmptyState\n icon={Inbox}\n title={t.noTransactions}\n description={t.noTransactionsDesc}\n action={\n onAddTransaction && (\n <Button onClick={onAddTransaction}>\n <Plus className=\"w-4 h-4\" />\n {t.addTransaction}\n </Button>\n )\n }\n />\n ) : (\n <>\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map(headerGroup => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map(header => (\n <TableHead key={header.id}>\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows.map(row => (\n <TableRow\n key={row.id}\n onClick={() => onTransactionClick?.(row.original)}\n className={onTransactionClick ? 'cursor-pointer' : ''}\n >\n {row.getVisibleCells().map(cell => (\n <TableCell key={cell.id}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n {/* Pagination */}\n <div className=\"flex items-center justify-between px-4 py-3 border-t\">\n <p className=\"text-sm text-muted-foreground\">\n {filteredTransactions.length} {t.transactions}\n </p>\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <ChevronLeft className=\"w-4 h-4\" />\n {t.previous}\n </Button>\n <span className=\"text-sm px-2\">\n {t.page} {table.getState().pagination.pageIndex + 1} {t.of} {table.getPageCount()}\n </span>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n {t.next}\n <ChevronRight className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n </>\n )}\n </Card>\n </TabsContent>\n\n {/* Charts Tab */}\n <TabsContent value=\"charts\" className=\"space-y-6\">\n {transactions.length === 0 ? (\n <Card>\n <EmptyState\n icon={BarChart3}\n title={t.noDataForCharts}\n description={t.noTransactionsDesc}\n />\n </Card>\n ) : (\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <Card className=\"col-span-1 lg:col-span-2\">\n <CardHeader>\n <CardTitle>{t.volumeOverTime}</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"h-[300px]\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={chartData.volumeData}>\n <defs>\n <linearGradient id=\"colorDeposits\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={CHART_COLORS.deposit} stopOpacity={0.3} />\n <stop offset=\"95%\" stopColor={CHART_COLORS.deposit} stopOpacity={0} />\n </linearGradient>\n <linearGradient id=\"colorPayouts\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={CHART_COLORS.payout} stopOpacity={0.3} />\n <stop offset=\"95%\" stopColor={CHART_COLORS.payout} stopOpacity={0} />\n </linearGradient>\n </defs>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis dataKey=\"date\" className=\"text-xs\" />\n <YAxis className=\"text-xs\" />\n <Tooltip contentStyle={{ backgroundColor: 'hsl(var(--popover))', border: '1px solid hsl(var(--border))', borderRadius: '8px' }} />\n <Legend />\n <Area type=\"monotone\" dataKey=\"deposits\" name={t.deposits} stroke={CHART_COLORS.deposit} fillOpacity={1} fill=\"url(#colorDeposits)\" />\n <Area type=\"monotone\" dataKey=\"payouts\" name={t.payouts} stroke={CHART_COLORS.payout} fillOpacity={1} fill=\"url(#colorPayouts)\" />\n </AreaChart>\n </ResponsiveContainer>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>{t.transactionsByType}</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"h-[300px]\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={chartData.typeData}>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis dataKey=\"name\" className=\"text-xs\" />\n <YAxis className=\"text-xs\" />\n <Tooltip contentStyle={{ backgroundColor: 'hsl(var(--popover))', border: '1px solid hsl(var(--border))', borderRadius: '8px' }} formatter={(value: number) => formatCurrency(value, mainCurrency)} />\n <Bar dataKey=\"value\" name={t.amount} radius={[4, 4, 0, 0]}>\n {chartData.typeData.map((entry, index) => (\n <Cell key={`cell-${index}`} fill={entry.fill} />\n ))}\n </Bar>\n </BarChart>\n </ResponsiveContainer>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>{t.statusDistribution}</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"h-[300px]\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n <Pie data={chartData.statusData} cx=\"50%\" cy=\"50%\" innerRadius={60} outerRadius={100} paddingAngle={2} dataKey=\"value\" label={({ name, percent }) => `${name} ${(percent * 100).toFixed(0)}%`} labelLine={false}>\n {chartData.statusData.map((entry, index) => (\n <Cell key={`cell-${index}`} fill={entry.fill} />\n ))}\n </Pie>\n <Tooltip contentStyle={{ backgroundColor: 'hsl(var(--popover))', border: '1px solid hsl(var(--border))', borderRadius: '8px' }} />\n <Legend />\n </PieChart>\n </ResponsiveContainer>\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n </TabsContent>\n </Tabs>\n );\n}\n\nexport default SpaarkPaySdkFinanceDashboard;\n","'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport {\n Settings,\n PlayCircle,\n Wallet,\n Smartphone,\n RefreshCw,\n Loader2,\n Copy,\n CheckCircle2,\n XCircle,\n FlaskConical,\n Wrench,\n BarChart3,\n Search,\n Wifi,\n Key,\n Zap,\n Shield,\n Code,\n LayoutDashboard,\n Beaker,\n Globe,\n Lock,\n} from 'lucide-react';\nimport type { Correspondent } from './constants/correspondents';\nimport type { DepositResponse, PayoutResponse } from './types/transactions';\nimport type { WebhookEventType } from './types/webhooks';\nimport {\n generateWebhook,\n WEBHOOK_EVENT_TYPES,\n} from './mocks/webhook-generators';\n\nexport {\n SpaarkPaySdkFinanceDashboard,\n type SpaarkPaySdkFinanceDashboardProps,\n type Transaction,\n type TransactionType,\n type TransactionStatus,\n} from './components/SpaarkPaySdkFinanceDashboard';\n\nimport { SpaarkPaySdkFinanceDashboard, type Transaction } from './components/SpaarkPaySdkFinanceDashboard';\n\ntype OperationStatus = 'idle' | 'loading' | 'success' | 'error';\ntype TabType = 'deposit' | 'payout' | 'status' | 'toolkit' | 'finances' | 'webhooks';\ntype DashboardMode = 'demo' | 'demo-expert' | 'sandbox' | 'production';\n\ninterface TestResult {\n id: string;\n operation: string;\n status: OperationStatus;\n response?: unknown;\n error?: string;\n timestamp: string;\n}\n\ninterface WebhookTestEvent {\n id: string;\n eventType: string;\n payload: unknown;\n signature: string;\n receivedAt: string;\n isVerified: boolean | null;\n}\n\nexport interface SpaarkPaySdkTestDashboardProps {\n apiKey?: string;\n environment?: 'sandbox' | 'production';\n className?: string;\n demoMode?: boolean;\n /** Base path for API routes (e.g., '/api/pawapay'). When set, requests go through your server instead of directly to Pawapay. */\n apiBasePath?: string;\n onDepositComplete?: (response: DepositResponse) => void;\n onPayoutComplete?: (response: PayoutResponse) => void;\n onError?: (error: Error) => void;\n}\n\n// Generate mock transactions for demo mode\nconst generateMockTransactions = (): Transaction[] => {\n const types: Array<'deposit' | 'payout' | 'refund'> = ['deposit', 'payout', 'refund'];\n const statuses: Array<'COMPLETED' | 'PENDING' | 'FAILED' | 'PROCESSING'> = ['COMPLETED', 'COMPLETED', 'COMPLETED', 'PENDING', 'FAILED', 'PROCESSING'];\n const providers: Correspondent[] = ['MTN_MOMO_CMR', 'ORANGE_CMR', 'MTN_MOMO_COG', 'AIRTEL_COG'];\n\n const transactions: Transaction[] = [];\n const now = Date.now();\n\n for (let i = 0; i < 25; i++) {\n const type = types[Math.floor(Math.random() * types.length)]!;\n const status = statuses[Math.floor(Math.random() * statuses.length)]!;\n const provider = providers[Math.floor(Math.random() * providers.length)]!\n const amount = Math.floor(Math.random() * 50000) + 1000;\n const daysAgo = Math.floor(Math.random() * 30);\n\n transactions.push({\n id: `tx-${String(i + 1).padStart(3, '0')}-${Math.random().toString(36).slice(2, 8)}`,\n type,\n amount,\n currency: 'XAF',\n status,\n provider,\n phoneNumber: `237${6 + Math.floor(Math.random() * 3)}${Math.floor(Math.random() * 100000000).toString().padStart(8, '0')}`,\n createdAt: new Date(now - daysAgo * 24 * 60 * 60 * 1000 - Math.random() * 24 * 60 * 60 * 1000).toISOString(),\n ...(status === 'FAILED' && { failureReason: 'INSUFFICIENT_FUNDS' }),\n });\n }\n\n return transactions.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n};\n\n// Mock response generators for demo mode (V2 API format)\nconst createMockDepositResponse = (txId: string): DepositResponse => ({\n depositId: txId,\n status: 'ACCEPTED',\n created: new Date().toISOString(),\n nextStep: 'FINAL_STATUS',\n});\n\nconst createMockPayoutResponse = (txId: string): PayoutResponse => ({\n payoutId: txId,\n status: 'ACCEPTED',\n created: new Date().toISOString(),\n});\n\nconst createMockStatusResponse = (txId: string) => ({\n depositId: txId,\n status: ['COMPLETED', 'ACCEPTED', 'PROCESSING', 'ENQUEUED'][Math.floor(Math.random() * 4)],\n created: new Date(Date.now() - 60000).toISOString(),\n amount: '5000',\n currency: 'XAF',\n country: 'CMR',\n payer: {\n type: 'MMO',\n accountDetails: {\n phoneNumber: '237670000000',\n provider: 'MTN_MOMO_CMR',\n },\n },\n});\n\nconst createMockAvailabilityResponse = () => [\n {\n country: 'CMR',\n providers: [\n {\n provider: 'MTN_MOMO_CMR',\n operationTypes: [\n { operationType: 'DEPOSIT', status: 'OPERATIONAL' },\n { operationType: 'PAYOUT', status: 'OPERATIONAL' },\n ],\n },\n {\n provider: 'ORANGE_CMR',\n operationTypes: [\n { operationType: 'DEPOSIT', status: 'OPERATIONAL' },\n { operationType: 'PAYOUT', status: 'DELAYED' },\n ],\n },\n ],\n },\n];\n\nconst createMockPredictResponse = (phone: string) => ({\n country: 'CMR',\n provider: phone.startsWith('23767') ? 'MTN_MOMO_CMR' : 'ORANGE_CMR',\n phoneNumber: phone.replace(/\\D/g, ''),\n});\n\nconst createMockActiveConfigResponse = () => ({\n companyName: 'Demo Company',\n signatureConfiguration: {\n signedRequestsOnly: false,\n signedCallbacks: true,\n },\n countries: [\n {\n country: 'CMR',\n displayName: { en: 'Cameroon', fr: 'Cameroun' },\n prefix: '237',\n flag: 'https://cdn.pawapay.io/flags/cmr.svg',\n providers: [\n {\n provider: 'MTN_MOMO_CMR',\n displayName: 'MTN Mobile Money',\n nameDisplayedToCustomer: 'MTN MoMo',\n currencies: [\n {\n currency: 'XAF',\n displayName: 'CFA Franc',\n operationTypes: {\n DEPOSIT: { minAmount: '100', maxAmount: '1000000', status: 'OPERATIONAL' },\n PAYOUT: { minAmount: '100', maxAmount: '500000', status: 'OPERATIONAL' },\n },\n },\n ],\n },\n ],\n },\n ],\n});\n\nconst createMockWalletBalancesResponse = () => ({\n balances: [\n { country: 'CMR', currency: 'XAF', balance: '1250000.00' },\n { country: 'COG', currency: 'XAF', balance: '450000.00' },\n { country: 'GAB', currency: 'XAF', balance: '780000.00' },\n ],\n});\n\nconst createMockPublicKeysResponse = () => [\n {\n id: 'key-001',\n key: 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...',\n },\n];\n\nconst simulateDelay = (ms: number = 800) => new Promise(resolve => setTimeout(resolve, ms + Math.random() * 400));\n\n// HMAC-SHA256 computation using Web Crypto API (browser-compatible)\nasync function computeHmacSha256(message: string, secret: string): Promise<string> {\n const encoder = new TextEncoder();\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(message));\n return Array.from(new Uint8Array(signature))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nconst generateUUID = (): string => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\nconst PROVIDER_OPTIONS: Array<{ value: Correspondent; label: string; country: string }> = [\n { value: 'MTN_MOMO_CMR', label: 'MTN Mobile Money', country: 'Cameroun' },\n { value: 'ORANGE_CMR', label: 'Orange Money', country: 'Cameroun' },\n { value: 'MTN_MOMO_COG', label: 'MTN Mobile Money', country: 'Congo' },\n { value: 'AIRTEL_COG', label: 'Airtel Money', country: 'Congo' },\n { value: 'MTN_MOMO_GAB', label: 'MTN Mobile Money', country: 'Gabon' },\n { value: 'AIRTEL_GAB', label: 'Airtel Money', country: 'Gabon' },\n];\n\nconst CURRENCY_OPTIONS = [\n { value: 'XAF', label: 'XAF (CFA Franc BEAC)' },\n { value: 'XOF', label: 'XOF (CFA Franc BCEAO)' },\n { value: 'GHS', label: 'GHS (Ghana Cedi)' },\n { value: 'KES', label: 'KES (Kenyan Shilling)' },\n { value: 'RWF', label: 'RWF (Rwandan Franc)' },\n { value: 'TZS', label: 'TZS (Tanzanian Shilling)' },\n { value: 'UGX', label: 'UGX (Ugandan Shilling)' },\n { value: 'ZMW', label: 'ZMW (Zambian Kwacha)' },\n];\n\nconst MODE_CONFIG: Record<DashboardMode, { label: string; description: string; color: string; bgColor: string }> = {\n 'demo': {\n label: 'DEMO',\n description: 'Données fictives - Visualisez le dashboard',\n color: 'text-purple-800 dark:text-purple-200',\n bgColor: 'bg-purple-100 dark:bg-purple-900',\n },\n 'demo-expert': {\n label: 'EXPERT',\n description: 'Console de test API - Réponses simulées',\n color: 'text-amber-800 dark:text-amber-200',\n bgColor: 'bg-amber-100 dark:bg-amber-900',\n },\n 'sandbox': {\n label: 'SANDBOX',\n description: 'Environnement de test Pawapay',\n color: 'text-blue-800 dark:text-blue-200',\n bgColor: 'bg-blue-100 dark:bg-blue-900',\n },\n 'production': {\n label: 'PRODUCTION',\n description: 'Environnement de production - Transactions réelles',\n color: 'text-green-800 dark:text-green-200',\n bgColor: 'bg-green-100 dark:bg-green-900',\n },\n};\n\nexport function SpaarkPaySdkTestDashboard({\n apiKey: initialApiKey = '',\n environment: initialEnvironment = 'sandbox',\n className = '',\n demoMode: initialDemoMode = false,\n apiBasePath = '/api/pawapay',\n onDepositComplete,\n onPayoutComplete,\n onError,\n}: SpaarkPaySdkTestDashboardProps) {\n const [apiKey, setApiKey] = useState(initialApiKey);\n const [mode, setMode] = useState<DashboardMode | null>(\n initialDemoMode ? 'demo' : initialApiKey ? initialEnvironment : null\n );\n const [transactions, setTransactions] = useState<Transaction[]>([]);\n const [isLoadingTransactions, setIsLoadingTransactions] = useState(false);\n\n const [activeTab, setActiveTab] = useState<TabType>('deposit');\n const [phoneNumber, setPhoneNumber] = useState('237670000000');\n const [amount, setAmount] = useState('5000');\n const [currency, setCurrency] = useState('XAF');\n const [provider, setProvider] = useState<Correspondent>('MTN_MOMO_CMR');\n const [description, setDescription] = useState('Test Payment');\n const [transactionId, setTransactionId] = useState('');\n\n const [results, setResults] = useState<TestResult[]>([]);\n const [currentStatus, setCurrentStatus] = useState<OperationStatus>('idle');\n\n // Webhook testing states\n const [webhookSecret, setWebhookSecret] = useState('whsec_test_secret_key');\n const [webhookEvents, setWebhookEvents] = useState<WebhookTestEvent[]>([]);\n const [webhookEventType, setWebhookEventType] = useState<WebhookEventType>('deposit.completed');\n const [webhookAmount, setWebhookAmount] = useState('5000');\n const [webhookPhone, setWebhookPhone] = useState('237670000000');\n const [webhookProvider, setWebhookProvider] = useState<Correspondent>('MTN_MOMO_CMR');\n const [generatedPayload, setGeneratedPayload] = useState<string>('');\n const [generatedSignature, setGeneratedSignature] = useState<string>('');\n const [verifyPayload, setVerifyPayload] = useState<string>('');\n const [verifySignature, setVerifySignature] = useState<string>('');\n const [verifySecret, setVerifySecret] = useState<string>('');\n const [verifyResult, setVerifyResult] = useState<boolean | null>(null);\n const [parseInput, setParseInput] = useState<string>('');\n const [parsedEvent, setParsedEvent] = useState<Record<string, unknown> | null>(null);\n const [parseError, setParseError] = useState<string>('');\n const [eventLogFilter, setEventLogFilter] = useState<'all' | 'deposit' | 'payout' | 'refund'>('all');\n\n // Load mock data for demo mode\n useEffect(() => {\n if (mode === 'demo') {\n setIsLoadingTransactions(true);\n setTimeout(() => {\n setTransactions(generateMockTransactions());\n setIsLoadingTransactions(false);\n }, 800);\n }\n }, [mode]);\n\n const addResult = useCallback((operation: string, status: OperationStatus, response?: unknown, error?: string) => {\n const result: TestResult = {\n id: generateUUID(),\n operation,\n status,\n response,\n error,\n timestamp: new Date().toLocaleTimeString(),\n };\n setResults((prev) => [result, ...prev].slice(0, 20));\n }, []);\n\n const handleSelectMode = useCallback((selectedMode: DashboardMode) => {\n if (selectedMode === 'sandbox' || selectedMode === 'production') {\n if (!apiKey.trim()) {\n return;\n }\n }\n setMode(selectedMode);\n if (selectedMode === 'demo') {\n addResult('Configuration', 'success', { mode: 'demo', message: 'Mode démo activé - données fictives' });\n } else if (selectedMode === 'demo-expert') {\n addResult('Configuration', 'success', { mode: 'demo-expert', message: 'Mode expert activé - réponses simulées' });\n } else {\n addResult('Configuration', 'success', { mode: selectedMode, apiBasePath });\n }\n }, [apiKey, apiBasePath, addResult]);\n\n const handleDeposit = useCallback(async () => {\n if (mode !== 'demo-expert' && mode !== 'sandbox' && mode !== 'production') return;\n setCurrentStatus('loading');\n\n try {\n const txId = generateUUID();\n setTransactionId(txId);\n\n let response: DepositResponse;\n\n if (mode === 'demo-expert') {\n await simulateDelay();\n response = createMockDepositResponse(txId);\n } else {\n const res = await fetch(`${apiBasePath}/deposit`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n apiKey,\n environment: mode,\n amount: parseFloat(amount),\n currency,\n provider,\n phoneNumber,\n customerMessage: description.slice(0, 22),\n transactionId: txId,\n }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Deposit failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Deposit', 'success', response);\n onDepositComplete?.(response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Deposit failed';\n addResult('Deposit', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, mode, amount, currency, provider, phoneNumber, description, addResult, onDepositComplete, onError]);\n\n const handlePayout = useCallback(async () => {\n if (mode !== 'demo-expert' && mode !== 'sandbox' && mode !== 'production') return;\n setCurrentStatus('loading');\n\n try {\n const txId = generateUUID();\n setTransactionId(txId);\n\n let response: PayoutResponse;\n\n if (mode === 'demo-expert') {\n await simulateDelay();\n response = createMockPayoutResponse(txId);\n } else {\n const res = await fetch(`${apiBasePath}/payout`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n apiKey,\n environment: mode,\n amount: parseFloat(amount),\n currency,\n provider,\n phoneNumber,\n transactionId: txId,\n }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Payout failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Payout', 'success', response);\n onPayoutComplete?.(response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Payout failed';\n addResult('Payout', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, mode, amount, currency, provider, phoneNumber, addResult, onPayoutComplete, onError]);\n\n const handleCheckStatus = useCallback(async () => {\n if ((mode !== 'demo-expert' && mode !== 'sandbox' && mode !== 'production') || !transactionId) {\n addResult('Check Status', 'error', undefined, 'No transaction ID');\n return;\n }\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (mode === 'demo-expert') {\n await simulateDelay();\n response = createMockStatusResponse(transactionId);\n } else {\n const res = await fetch(`${apiBasePath}/status`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment: mode, transactionId }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Status check failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Check Status', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Status check failed';\n addResult('Check Status', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, mode, transactionId, addResult, onError]);\n\n const handleGetAvailability = useCallback(async () => {\n if (mode !== 'demo-expert' && mode !== 'sandbox' && mode !== 'production') return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (mode === 'demo-expert') {\n await simulateDelay();\n response = createMockAvailabilityResponse();\n } else {\n const res = await fetch(`${apiBasePath}/availability`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment: mode }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Availability check failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Provider Availability', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Availability check failed';\n addResult('Provider Availability', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, mode, addResult, onError]);\n\n const handlePredictProvider = useCallback(async () => {\n if (mode !== 'demo-expert' && mode !== 'sandbox' && mode !== 'production') return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (mode === 'demo-expert') {\n await simulateDelay();\n response = createMockPredictResponse(phoneNumber);\n } else {\n const res = await fetch(`${apiBasePath}/predict-provider`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment: mode, phoneNumber }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Prediction failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Predict Provider', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Prediction failed';\n addResult('Predict Provider', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, mode, phoneNumber, addResult, onError]);\n\n const handleGetActiveConfig = useCallback(async () => {\n if (mode !== 'demo-expert' && mode !== 'sandbox' && mode !== 'production') return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (mode === 'demo-expert') {\n await simulateDelay();\n response = createMockActiveConfigResponse();\n } else {\n const res = await fetch(`${apiBasePath}/active-config`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment: mode }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Failed to get config');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Active Configuration', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Failed to get config';\n addResult('Active Configuration', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, mode, addResult, onError]);\n\n const handleGetPublicKeys = useCallback(async () => {\n if (mode !== 'demo-expert' && mode !== 'sandbox' && mode !== 'production') return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (mode === 'demo-expert') {\n await simulateDelay();\n response = createMockPublicKeysResponse();\n } else {\n const res = await fetch(`${apiBasePath}/public-keys`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment: mode }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Failed to get public keys');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Public Keys', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Failed to get public keys';\n addResult('Public Keys', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, mode, addResult, onError]);\n\n const handleGetWalletBalances = useCallback(async () => {\n if (mode !== 'demo-expert' && mode !== 'sandbox' && mode !== 'production') return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (mode === 'demo-expert') {\n await simulateDelay();\n response = createMockWalletBalancesResponse();\n } else {\n const res = await fetch(`${apiBasePath}/wallet-balances`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment: mode }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Failed to get balances');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Wallet Balances', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Failed to get balances';\n addResult('Wallet Balances', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, mode, addResult, onError]);\n\n const copyToClipboard = useCallback((text: string) => {\n navigator.clipboard.writeText(text);\n }, []);\n\n // Mode selection screen\n if (!mode) {\n return (\n <div className={`space-y-8 ${className}`}>\n <div>\n <h1 className=\"text-2xl font-bold tracking-tight\">Spaark Pay Console</h1>\n <p className=\"text-muted-foreground mt-1\">\n Choisissez un mode pour commencer\n </p>\n </div>\n\n {/* API Key input for sandbox/production */}\n <div className=\"border border-border bg-background p-6 max-w-2xl space-y-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 bg-muted flex items-center justify-center rounded-md\">\n <Key className=\"w-5 h-5\" />\n </div>\n <div>\n <h2 className=\"font-semibold\">Configuration API</h2>\n <p className=\"text-xs text-muted-foreground\">Requis pour les modes Sandbox et Production</p>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">API Key</label>\n <input\n type=\"password\"\n placeholder=\"pk_sandbox_...\"\n value={apiKey}\n onChange={(e) => setApiKey(e.target.value)}\n className=\"w-full h-10 px-3 text-sm border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n />\n </div>\n </div>\n\n {/* Mode selection */}\n <div className=\"grid sm:grid-cols-2 gap-4 max-w-2xl\">\n {/* Demo Mode */}\n <button\n onClick={() => handleSelectMode('demo')}\n className=\"p-6 border border-border bg-background hover:bg-muted/50 transition-colors text-left space-y-3 rounded-lg\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 bg-purple-100 dark:bg-purple-900 flex items-center justify-center rounded-md\">\n <LayoutDashboard className=\"w-5 h-5 text-purple-600 dark:text-purple-400\" />\n </div>\n <div>\n <span className={`px-2 py-0.5 text-xs font-medium rounded ${MODE_CONFIG['demo'].bgColor} ${MODE_CONFIG['demo'].color}`}>\n DEMO\n </span>\n </div>\n </div>\n <div>\n <h3 className=\"font-semibold\">Mode Démonstration</h3>\n <p className=\"text-xs text-muted-foreground mt-1\">\n Visualisez le dashboard financier avec des données fictives. Idéal pour découvrir l'interface.\n </p>\n </div>\n </button>\n\n {/* Demo Expert Mode */}\n <button\n onClick={() => handleSelectMode('demo-expert')}\n className=\"p-6 border border-border bg-background hover:bg-muted/50 transition-colors text-left space-y-3 rounded-lg\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 bg-amber-100 dark:bg-amber-900 flex items-center justify-center rounded-md\">\n <FlaskConical className=\"w-5 h-5 text-amber-600 dark:text-amber-400\" />\n </div>\n <div>\n <span className={`px-2 py-0.5 text-xs font-medium rounded ${MODE_CONFIG['demo-expert'].bgColor} ${MODE_CONFIG['demo-expert'].color}`}>\n EXPERT\n </span>\n </div>\n </div>\n <div>\n <h3 className=\"font-semibold\">Mode Expert (Test API)</h3>\n <p className=\"text-xs text-muted-foreground mt-1\">\n Console de test avec réponses simulées. Testez les endpoints sans clé API.\n </p>\n </div>\n </button>\n\n {/* Sandbox Mode */}\n <button\n onClick={() => handleSelectMode('sandbox')}\n disabled={!apiKey.trim()}\n className=\"p-6 border border-border bg-background hover:bg-muted/50 transition-colors text-left space-y-3 rounded-lg disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 bg-blue-100 dark:bg-blue-900 flex items-center justify-center rounded-md\">\n <Beaker className=\"w-5 h-5 text-blue-600 dark:text-blue-400\" />\n </div>\n <div>\n <span className={`px-2 py-0.5 text-xs font-medium rounded ${MODE_CONFIG['sandbox'].bgColor} ${MODE_CONFIG['sandbox'].color}`}>\n SANDBOX\n </span>\n </div>\n </div>\n <div>\n <h3 className=\"font-semibold\">Mode Sandbox</h3>\n <p className=\"text-xs text-muted-foreground mt-1\">\n Connecté à l'API Pawapay Sandbox. Transactions de test réelles.\n {!apiKey.trim() && <span className=\"block text-amber-600 mt-1\">Entrez une clé API ci-dessus</span>}\n </p>\n </div>\n </button>\n\n {/* Production Mode */}\n <button\n onClick={() => handleSelectMode('production')}\n disabled={!apiKey.trim()}\n className=\"p-6 border border-border bg-background hover:bg-muted/50 transition-colors text-left space-y-3 rounded-lg disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 bg-green-100 dark:bg-green-900 flex items-center justify-center rounded-md\">\n <Globe className=\"w-5 h-5 text-green-600 dark:text-green-400\" />\n </div>\n <div className=\"flex items-center gap-2\">\n <span className={`px-2 py-0.5 text-xs font-medium rounded ${MODE_CONFIG['production'].bgColor} ${MODE_CONFIG['production'].color}`}>\n PRODUCTION\n </span>\n <Lock className=\"w-3 h-3 text-muted-foreground\" />\n </div>\n </div>\n <div>\n <h3 className=\"font-semibold\">Mode Production</h3>\n <p className=\"text-xs text-muted-foreground mt-1\">\n Environnement de production. Transactions réelles avec argent réel.\n {!apiKey.trim() && <span className=\"block text-amber-600 mt-1\">Entrez une clé API ci-dessus</span>}\n </p>\n </div>\n </button>\n </div>\n </div>\n );\n }\n\n // Demo mode - Show Finance Dashboard with mock data\n if (mode === 'demo') {\n return (\n <div className={`space-y-6 ${className}`}>\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\n <div className=\"flex items-center gap-3\">\n <span className={`px-2 py-0.5 text-xs font-medium rounded ${MODE_CONFIG[mode].bgColor} ${MODE_CONFIG[mode].color}`}>\n {MODE_CONFIG[mode].label}\n </span>\n <span className=\"text-sm text-muted-foreground\">{MODE_CONFIG[mode].description}</span>\n </div>\n <button\n onClick={() => setMode(null)}\n className=\"h-8 px-3 text-xs font-medium border border-border bg-background hover:bg-muted transition-colors flex items-center gap-2 rounded-md\"\n >\n <Settings className=\"w-4 h-4\" />\n Changer de mode\n </button>\n </div>\n\n <SpaarkPaySdkFinanceDashboard\n transactions={transactions}\n locale=\"fr\"\n isLoading={isLoadingTransactions}\n onRefresh={() => {\n setIsLoadingTransactions(true);\n setTimeout(() => {\n setTransactions(generateMockTransactions());\n setIsLoadingTransactions(false);\n }, 800);\n }}\n showExpertMode={true}\n onExpertModeClick={() => setMode('demo-expert')}\n />\n </div>\n );\n }\n\n // Sandbox/Production mode - Show Finance Dashboard with real data\n if (mode === 'sandbox' || mode === 'production') {\n return (\n <div className={`space-y-6 ${className}`}>\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\n <div className=\"flex items-center gap-3\">\n <span className={`px-2 py-0.5 text-xs font-medium rounded ${MODE_CONFIG[mode].bgColor} ${MODE_CONFIG[mode].color}`}>\n {MODE_CONFIG[mode].label}\n </span>\n <span className=\"text-sm text-muted-foreground\">{MODE_CONFIG[mode].description}</span>\n </div>\n <button\n onClick={() => setMode(null)}\n className=\"h-8 px-3 text-xs font-medium border border-border bg-background hover:bg-muted transition-colors flex items-center gap-2 rounded-md\"\n >\n <Settings className=\"w-4 h-4\" />\n Changer de mode\n </button>\n </div>\n\n <SpaarkPaySdkFinanceDashboard\n transactions={transactions}\n locale=\"fr\"\n isLoading={isLoadingTransactions}\n onRefresh={() => {\n // TODO: Implement real API call to fetch transactions\n addResult('Refresh', 'success', { message: 'Transactions refreshed' });\n }}\n showExpertMode={true}\n onExpertModeClick={() => setMode('demo-expert')}\n />\n </div>\n );\n }\n\n // Demo Expert mode - Show Test Dashboard\n return (\n <div className={`space-y-6 ${className}`}>\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\n <div>\n <div className=\"flex items-center gap-2\">\n <h1 className=\"text-2xl font-bold tracking-tight\">Spaark Pay Console</h1>\n <span className={`px-2 py-0.5 text-xs font-medium rounded ${MODE_CONFIG[mode].bgColor} ${MODE_CONFIG[mode].color}`}>\n {MODE_CONFIG[mode].label}\n </span>\n </div>\n <p className=\"text-muted-foreground mt-1\">{MODE_CONFIG[mode].description}</p>\n </div>\n <button\n onClick={() => setMode(null)}\n className=\"h-8 px-3 text-xs font-medium border border-border bg-background hover:bg-muted transition-colors flex items-center gap-2 rounded-md\"\n >\n <Settings className=\"w-4 h-4\" />\n Changer de mode\n </button>\n </div>\n\n <div className=\"grid lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Tabs */}\n <div className=\"flex flex-wrap gap-1 bg-muted p-1 rounded-md\">\n <button\n onClick={() => setActiveTab('deposit')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 rounded-sm ${\n activeTab === 'deposit' ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <Wallet className=\"w-4 h-4\" />\n Deposit\n </button>\n <button\n onClick={() => setActiveTab('payout')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 rounded-sm ${\n activeTab === 'payout' ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <Smartphone className=\"w-4 h-4\" />\n Payout\n </button>\n <button\n onClick={() => setActiveTab('status')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 rounded-sm ${\n activeTab === 'status' ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <RefreshCw className=\"w-4 h-4\" />\n Status\n </button>\n <button\n onClick={() => setActiveTab('toolkit')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 rounded-sm ${\n activeTab === 'toolkit' ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <Wrench className=\"w-4 h-4\" />\n Toolkit\n </button>\n <button\n onClick={() => setActiveTab('finances')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 rounded-sm ${\n activeTab === 'finances' ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <BarChart3 className=\"w-4 h-4\" />\n Finances\n </button>\n <button\n onClick={() => setActiveTab('webhooks')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 rounded-sm ${\n activeTab === 'webhooks' ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <Zap className=\"w-4 h-4\" />\n Webhooks\n </button>\n </div>\n\n {/* Deposit Tab */}\n {activeTab === 'deposit' && (\n <div className=\"border border-border bg-background p-6 space-y-4 rounded-lg\">\n <div>\n <h3 className=\"font-semibold\">Initiate Deposit</h3>\n <p className=\"text-xs text-muted-foreground\">Collect payment from a Mobile Money user</p>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Phone Number</label>\n <input\n placeholder=\"237670000000\"\n value={phoneNumber}\n onChange={(e) => setPhoneNumber(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Amount</label>\n <input\n type=\"number\"\n placeholder=\"5000\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Currency</label>\n <select\n value={currency}\n onChange={(e) => setCurrency(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n >\n {CURRENCY_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label}</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Provider</label>\n <select\n value={provider}\n onChange={(e) => setProvider(e.target.value as Correspondent)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n >\n {PROVIDER_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label} ({c.country})</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2 sm:col-span-2\">\n <label className=\"text-xs font-medium\">Customer Message (4-22 chars)</label>\n <input\n placeholder=\"Payment description\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n maxLength={22}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n />\n </div>\n </div>\n\n <button\n onClick={handleDeposit}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2 rounded-md\"\n >\n {currentStatus === 'loading' ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <PlayCircle className=\"w-4 h-4\" />}\n Execute Deposit\n </button>\n </div>\n )}\n\n {/* Payout Tab */}\n {activeTab === 'payout' && (\n <div className=\"border border-border bg-background p-6 space-y-4 rounded-lg\">\n <div>\n <h3 className=\"font-semibold\">Initiate Payout</h3>\n <p className=\"text-xs text-muted-foreground\">Send money to a Mobile Money account</p>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Recipient Phone</label>\n <input\n placeholder=\"237670000000\"\n value={phoneNumber}\n onChange={(e) => setPhoneNumber(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Amount</label>\n <input\n type=\"number\"\n placeholder=\"5000\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Currency</label>\n <select\n value={currency}\n onChange={(e) => setCurrency(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n >\n {CURRENCY_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label}</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Provider</label>\n <select\n value={provider}\n onChange={(e) => setProvider(e.target.value as Correspondent)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n >\n {PROVIDER_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label} ({c.country})</option>\n ))}\n </select>\n </div>\n </div>\n\n <button\n onClick={handlePayout}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2 rounded-md\"\n >\n {currentStatus === 'loading' ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <PlayCircle className=\"w-4 h-4\" />}\n Execute Payout\n </button>\n </div>\n )}\n\n {/* Status Tab */}\n {activeTab === 'status' && (\n <div className=\"border border-border bg-background p-6 space-y-4 rounded-lg\">\n <div>\n <h3 className=\"font-semibold\">Check Transaction Status</h3>\n <p className=\"text-xs text-muted-foreground\">Query the status of a transaction</p>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Transaction ID</label>\n <div className=\"flex gap-2\">\n <input\n placeholder=\"Enter transaction ID (UUID)\"\n value={transactionId}\n onChange={(e) => setTransactionId(e.target.value)}\n className=\"flex-1 h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring font-mono\"\n />\n {transactionId && (\n <button\n onClick={() => copyToClipboard(transactionId)}\n className=\"w-8 h-8 border border-border bg-background hover:bg-muted transition-colors flex items-center justify-center rounded-md\"\n title=\"Copy to clipboard\"\n >\n <Copy className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n </div>\n\n <button\n onClick={handleCheckStatus}\n disabled={currentStatus === 'loading' || !transactionId}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2 rounded-md\"\n >\n {currentStatus === 'loading' ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <RefreshCw className=\"w-4 h-4\" />}\n Check Status\n </button>\n </div>\n </div>\n )}\n\n {/* Toolkit Tab */}\n {activeTab === 'toolkit' && (\n <div className=\"space-y-4\">\n <div className=\"border border-border bg-background p-6 space-y-4 rounded-lg\">\n <div>\n <h3 className=\"font-semibold\">Predict Provider</h3>\n <p className=\"text-xs text-muted-foreground\">Predict the provider from a phone number</p>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Phone Number</label>\n <input\n placeholder=\"+237 670 000 000\"\n value={phoneNumber}\n onChange={(e) => setPhoneNumber(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n />\n </div>\n\n <button\n onClick={handlePredictProvider}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2 rounded-md\"\n >\n {currentStatus === 'loading' ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <Search className=\"w-4 h-4\" />}\n Predict Provider\n </button>\n </div>\n\n <div className=\"grid sm:grid-cols-3 gap-3\">\n <button\n onClick={handleGetAvailability}\n disabled={currentStatus === 'loading'}\n className=\"h-10 px-3 text-xs font-medium border border-border bg-background hover:bg-muted disabled:opacity-50 transition-colors flex items-center justify-center gap-2 rounded-md\"\n >\n <Wifi className=\"w-4 h-4\" />\n Provider Availability\n </button>\n <button\n onClick={handleGetActiveConfig}\n disabled={currentStatus === 'loading'}\n className=\"h-10 px-3 text-xs font-medium border border-border bg-background hover:bg-muted disabled:opacity-50 transition-colors flex items-center justify-center gap-2 rounded-md\"\n >\n <Settings className=\"w-4 h-4\" />\n Active Config\n </button>\n <button\n onClick={handleGetPublicKeys}\n disabled={currentStatus === 'loading'}\n className=\"h-10 px-3 text-xs font-medium border border-border bg-background hover:bg-muted disabled:opacity-50 transition-colors flex items-center justify-center gap-2 rounded-md\"\n >\n <Key className=\"w-4 h-4\" />\n Public Keys\n </button>\n </div>\n </div>\n )}\n\n {/* Finances Tab */}\n {activeTab === 'finances' && (\n <div className=\"space-y-4\">\n <div className=\"border border-border bg-background p-6 space-y-4 rounded-lg\">\n <div>\n <h3 className=\"font-semibold\">Wallet Balances</h3>\n <p className=\"text-xs text-muted-foreground\">View balances for all your wallets</p>\n </div>\n\n <button\n onClick={handleGetWalletBalances}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2 rounded-md\"\n >\n {currentStatus === 'loading' ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <Wallet className=\"w-4 h-4\" />}\n Get Wallet Balances\n </button>\n </div>\n\n <div className=\"border border-border bg-background p-6 space-y-4 rounded-lg\">\n <div>\n <h3 className=\"font-semibold\">Statements</h3>\n <p className=\"text-xs text-muted-foreground\">Generate financial statements for your wallets</p>\n </div>\n\n <div className=\"p-4 bg-muted/50 text-xs text-muted-foreground rounded-md\">\n Statement generation requires callback URL configuration. Use the SDK directly:\n <pre className=\"mt-2 p-2 bg-background overflow-x-auto rounded\">\n{`await sdk.finances.generateStatement({\n wallet: { country: 'CMR', currency: 'XAF' },\n callbackUrl: 'https://your-site.com/callback',\n startDate: '2025-01-01T00:00:00Z',\n endDate: '2025-01-31T23:59:59Z',\n});`}\n </pre>\n </div>\n </div>\n </div>\n )}\n\n {/* Webhooks Tab */}\n {activeTab === 'webhooks' && (\n <div className=\"space-y-4\">\n {/* Webhook Secret Configuration */}\n <div className=\"border border-border bg-background p-6 space-y-4 rounded-lg\">\n <div>\n <h3 className=\"font-semibold\">Webhook Secret</h3>\n <p className=\"text-xs text-muted-foreground\">Configure the secret used for signing webhooks</p>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Secret Key</label>\n <input\n type=\"text\"\n placeholder=\"whsec_...\"\n value={webhookSecret}\n onChange={(e) => setWebhookSecret(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs font-mono border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n />\n </div>\n </div>\n\n {/* Webhook Simulator */}\n <div className=\"border border-border bg-background p-6 space-y-4 rounded-lg\">\n <div>\n <h3 className=\"font-semibold\">Webhook Simulator</h3>\n <p className=\"text-xs text-muted-foreground\">Generate mock webhook events for testing</p>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Event Type</label>\n <select\n value={webhookEventType}\n onChange={(e) => setWebhookEventType(e.target.value as WebhookEventType)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n >\n {WEBHOOK_EVENT_TYPES.map((type) => (\n <option key={type} value={type}>{type}</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Amount</label>\n <input\n type=\"number\"\n placeholder=\"5000\"\n value={webhookAmount}\n onChange={(e) => setWebhookAmount(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Phone Number</label>\n <input\n placeholder=\"237670000000\"\n value={webhookPhone}\n onChange={(e) => setWebhookPhone(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Provider</label>\n <select\n value={webhookProvider}\n onChange={(e) => setWebhookProvider(e.target.value as Correspondent)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n >\n {PROVIDER_OPTIONS.map((p) => (\n <option key={p.value} value={p.value}>{p.label} ({p.country})</option>\n ))}\n </select>\n </div>\n </div>\n\n <button\n onClick={async () => {\n const event = generateWebhook(webhookEventType, {\n amount: webhookAmount,\n phoneNumber: webhookPhone,\n correspondent: webhookProvider,\n });\n const payload = JSON.stringify(event, null, 2);\n const signature = await computeHmacSha256(JSON.stringify(event), webhookSecret);\n setGeneratedPayload(payload);\n setGeneratedSignature(signature);\n\n const newEvent: WebhookTestEvent = {\n id: generateUUID(),\n eventType: webhookEventType,\n payload: event,\n signature,\n receivedAt: new Date().toLocaleTimeString(),\n isVerified: null,\n };\n setWebhookEvents((prev) => [newEvent, ...prev].slice(0, 50));\n addResult('Generate Webhook', 'success', { eventType: webhookEventType, eventId: event.eventId });\n }}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2 rounded-md\"\n >\n <PlayCircle className=\"w-4 h-4\" />\n Generate Event\n </button>\n\n {generatedPayload && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium\">Generated Payload</label>\n <button\n onClick={() => copyToClipboard(generatedPayload)}\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Copy\n </button>\n </div>\n <pre className=\"text-xs bg-muted p-3 overflow-x-auto max-h-48 rounded-md\">\n {generatedPayload}\n </pre>\n <div className=\"flex items-center gap-2\">\n <label className=\"text-xs font-medium\">Signature:</label>\n <code className=\"text-xs bg-muted px-2 py-1 font-mono flex-1 overflow-x-auto rounded\">\n {generatedSignature}\n </code>\n <button\n onClick={() => copyToClipboard(generatedSignature)}\n className=\"w-8 h-8 border border-border bg-background hover:bg-muted transition-colors flex items-center justify-center rounded-md\"\n >\n <Copy className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n )}\n </div>\n\n {/* Signature Verifier */}\n <div className=\"border border-border bg-background p-6 space-y-4 rounded-lg\">\n <div>\n <h3 className=\"font-semibold\">Signature Verifier</h3>\n <p className=\"text-xs text-muted-foreground\">Test webhook signature verification</p>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Payload (JSON)</label>\n <textarea\n placeholder='{\"eventId\": \"...\", \"eventType\": \"deposit.completed\", ...}'\n value={verifyPayload}\n onChange={(e) => setVerifyPayload(e.target.value)}\n rows={4}\n className=\"w-full px-2.5 py-2 text-xs font-mono border border-input bg-transparent rounded-md outline-none focus:border-ring resize-none\"\n />\n </div>\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Signature</label>\n <input\n placeholder=\"HMAC-SHA256 signature\"\n value={verifySignature}\n onChange={(e) => setVerifySignature(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs font-mono border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Secret</label>\n <input\n type=\"password\"\n placeholder=\"whsec_...\"\n value={verifySecret}\n onChange={(e) => setVerifySecret(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs font-mono border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n />\n </div>\n </div>\n\n <button\n onClick={async () => {\n try {\n const parsedPayload = JSON.parse(verifyPayload);\n const computedSignature = await computeHmacSha256(JSON.stringify(parsedPayload), verifySecret);\n const isValid = computedSignature === verifySignature;\n setVerifyResult(isValid);\n addResult('Verify Signature', isValid ? 'success' : 'error', {\n isValid,\n expected: computedSignature,\n received: verifySignature,\n });\n } catch {\n setVerifyResult(false);\n addResult('Verify Signature', 'error', undefined, 'Invalid JSON payload');\n }\n }}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2 rounded-md\"\n >\n <Shield className=\"w-4 h-4\" />\n Verify Signature\n </button>\n\n {verifyResult !== null && (\n <div className={`p-3 text-xs flex items-center gap-2 rounded-md ${\n verifyResult ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' : 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200'\n }`}>\n {verifyResult ? <CheckCircle2 className=\"w-4 h-4 text-green-600\" /> : <XCircle className=\"w-4 h-4 text-red-600\" />}\n {verifyResult ? 'Signature is valid' : 'Signature is invalid'}\n </div>\n )}\n </div>\n </div>\n\n {/* Event Parser */}\n <div className=\"border border-border bg-background p-6 space-y-4 rounded-lg\">\n <div>\n <h3 className=\"font-semibold\">Event Parser</h3>\n <p className=\"text-xs text-muted-foreground\">Parse and analyze raw webhook JSON</p>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Raw JSON</label>\n <textarea\n placeholder='Paste webhook JSON here...'\n value={parseInput}\n onChange={(e) => setParseInput(e.target.value)}\n rows={4}\n className=\"w-full px-2.5 py-2 text-xs font-mono border border-input bg-transparent rounded-md outline-none focus:border-ring resize-none\"\n />\n </div>\n\n <button\n onClick={() => {\n try {\n const parsed = JSON.parse(parseInput) as Record<string, unknown>;\n setParsedEvent(parsed);\n setParseError('');\n addResult('Parse Event', 'success', { eventType: parsed.eventType, eventId: parsed.eventId });\n } catch (e) {\n setParsedEvent(null);\n setParseError(e instanceof Error ? e.message : 'Invalid JSON');\n addResult('Parse Event', 'error', undefined, 'Invalid JSON');\n }\n }}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2 rounded-md\"\n >\n <Code className=\"w-4 h-4\" />\n Parse Event\n </button>\n\n {parseError && (\n <div className=\"p-3 text-xs bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200 rounded-md\">\n {parseError}\n </div>\n )}\n\n {parsedEvent && (\n <div className=\"space-y-3\">\n <div className=\"grid grid-cols-2 gap-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n <span className=\"text-muted-foreground\">Event ID:</span>\n <p className=\"font-mono truncate\">{String(parsedEvent.eventId ?? 'N/A')}</p>\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <span className=\"text-muted-foreground\">Event Type:</span>\n <p className=\"font-medium\">{String(parsedEvent.eventType ?? 'N/A')}</p>\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <span className=\"text-muted-foreground\">Timestamp:</span>\n <p className=\"font-mono truncate\">{String(parsedEvent.timestamp ?? 'N/A')}</p>\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <span className=\"text-muted-foreground\">Status:</span>\n <p className=\"font-medium\">{String((parsedEvent.data as Record<string, unknown>)?.status ?? 'N/A')}</p>\n </div>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Full Data</label>\n <pre className=\"text-xs bg-muted p-3 overflow-x-auto max-h-48 rounded-md\">\n {JSON.stringify(parsedEvent, null, 2)}\n </pre>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Event Log */}\n <div className=\"border border-border bg-background p-6 space-y-4 rounded-lg\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"font-semibold\">Event Log</h3>\n <p className=\"text-xs text-muted-foreground\">History of generated webhook events</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <select\n value={eventLogFilter}\n onChange={(e) => setEventLogFilter(e.target.value as 'all' | 'deposit' | 'payout' | 'refund')}\n className=\"h-8 px-2 text-xs border border-input bg-transparent rounded-md outline-none focus:border-ring\"\n >\n <option value=\"all\">All</option>\n <option value=\"deposit\">Deposits</option>\n <option value=\"payout\">Payouts</option>\n <option value=\"refund\">Refunds</option>\n </select>\n {webhookEvents.length > 0 && (\n <button\n onClick={() => setWebhookEvents([])}\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Clear\n </button>\n )}\n </div>\n </div>\n\n <div className=\"divide-y divide-border max-h-64 overflow-y-auto\">\n {webhookEvents\n .filter((event) => eventLogFilter === 'all' || event.eventType.startsWith(eventLogFilter))\n .length === 0 ? (\n <div className=\"p-4 text-center text-muted-foreground text-xs\">\n No events yet. Generate a webhook event to see it here.\n </div>\n ) : (\n webhookEvents\n .filter((event) => eventLogFilter === 'all' || event.eventType.startsWith(eventLogFilter))\n .map((event) => (\n <div key={event.id} className=\"py-3 space-y-1\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className={`px-1.5 py-0.5 text-xs font-medium rounded ${\n event.eventType.includes('completed') ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' :\n event.eventType.includes('failed') ? 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200' :\n 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200'\n }`}>\n {event.eventType}\n </span>\n </div>\n <span className=\"text-xs text-muted-foreground\">{event.receivedAt}</span>\n </div>\n <div className=\"text-xs text-muted-foreground font-mono truncate\">\n sig: {event.signature.slice(0, 32)}...\n </div>\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n\n {/* Results Panel */}\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold\">Results</h3>\n {results.length > 0 && (\n <button\n onClick={() => setResults([])}\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Clear\n </button>\n )}\n </div>\n\n <div className=\"border border-border bg-background divide-y divide-border max-h-[600px] overflow-y-auto rounded-lg\">\n {results.length === 0 ? (\n <div className=\"p-6 text-center text-muted-foreground text-xs\">\n No results yet. Execute an operation to see results here.\n </div>\n ) : (\n results.map((result) => (\n <div key={result.id} className=\"p-4 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n {result.status === 'success' ? (\n <CheckCircle2 className=\"w-4 h-4 text-green-600\" />\n ) : (\n <XCircle className=\"w-4 h-4 text-red-600\" />\n )}\n <span className=\"font-medium text-sm\">{result.operation}</span>\n </div>\n <span className=\"text-xs text-muted-foreground\">{result.timestamp}</span>\n </div>\n\n {result.error ? (\n <p className=\"text-xs text-red-600\">{result.error}</p>\n ) : (\n <pre className=\"text-xs bg-muted p-2 overflow-x-auto max-h-48 rounded\">\n {JSON.stringify(result.response, null, 2)}\n </pre>\n )}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport default SpaarkPaySdkTestDashboard;\n"]}